From b1b0f289387b7bb0585f63f02d3617bf931bc847 Mon Sep 17 00:00:00 2001 From: Eearslya Sleiarion Date: Mon, 3 Oct 2016 23:59:07 -0700 Subject: [PATCH 01/24] Allow cyborg combat module in code red (#577) * Allow cyborg combat module in code red * Tweaks to combat module for balance purposes --- code/modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/mob/living/silicon/robot/robot_movement.dm | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index f038324299..7401538869 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -246,7 +246,7 @@ return var/list/modules = list() modules.Add(robot_module_types) - if((crisis && security_level == SEC_LEVEL_RED) || crisis_override) //Leaving this in until it's balanced appropriately. + if(crisis || security_level == SEC_LEVEL_RED || crisis_override) // VOREStation Edit src << "\red Crisis mode active. Combat module available." modules+="Combat" modtype = input("Please, select a module!", "Robot module", null, null) as null|anything in modules diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index c1ca5732b5..77896d3275 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -685,7 +685,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/security/combat/New() src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/borg/sight/thermal(src) + //src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/borg/combat/shield(src) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 5ea383aaa6..29251d8a1d 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -18,7 +18,7 @@ tally = speed if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) - tally-=3 + tally-=2 // VOREStation Edit return tally+config.robot_delay @@ -29,4 +29,4 @@ var/datum/robot_component/actuator/A = get_component("actuator") if (cell_use_power(A.active_usage)) - return ..() \ No newline at end of file + return ..() From 2e5f80175c18f61f6069be489632ae5ee4454de1 Mon Sep 17 00:00:00 2001 From: Eearslya Sleiarion Date: Wed, 5 Oct 2016 09:50:04 -0700 Subject: [PATCH 02/24] Prevent attacking vore mobs from within them (#627) --- code/modules/mob/living/simple_animal/simple_animal.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 20606fc5da..32235e5896 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -310,6 +310,8 @@ M.do_attack_animation(src) if(I_HURT) + if (M.loc == src) + return // VOREStation Edit adjustBruteLoss(harm_intent_damage) M.visible_message("\red [M] [response_harm] \the [src]") M.do_attack_animation(src) @@ -637,4 +639,4 @@ if(!target_mob || enroute) spawn(10) if(!src.stat) - horde() \ No newline at end of file + horde() From 05869b0d9bd01fc8f90d77ed5e03aeef0d542955 Mon Sep 17 00:00:00 2001 From: Spades Date: Sun, 9 Oct 2016 18:55:17 -0400 Subject: [PATCH 03/24] Zoo.dmm added, Vault updated, various bugfixes (#634) * :( * Ports https://github.com/PolarisSS13/Polaris/pull/2571 early. Need this for a map I wanna do. * need sleep * Emergency meds added Resolves https://github.com/VOREStation/VOREStation/issues/600 * Fixes Fax Machine showing Sif Government * Updates Tajaran lore to match Polaris. * Sleeping for tonight * Fixes #623 * Added more to the map * Fox sprites from Paradise added * Vore bee added * Technical stuff no one cares about. * Another update * Reverts Pull #508 https://github.com/VOREStation/VOREStation/pull/508 messed up digesting dead mobs and mice. * Sergaling are now Saru. * Saru * Zoo map update, near completion * Zoo map finished, plus Station Vault updated * Revert "Ports https://github.com/PolarisSS13/Polaris/pull/2571 early." This reverts commit 59e2bb211759604a95319ce6b1c74219a4b60800. * Buzz off, Travis. * Removed microwaves entirely so Travis stops bitching * Travis stop being dumb * Fix the zoo map once and for all..? * Removes backup files. --- code/game/objects/random/random_vr.dm | 11 +- code/modules/awaymissions/loot.dm | 2 +- code/modules/awaymissions/loot_vr.dm | 385 +++- .../carbon/human/species/station/monkey_vr.dm | 4 +- .../carbon/human/species/station/station.dm | 8 +- .../human/species/station/station_vr.dm | 7 +- .../living/simple_animal/friendly/birds_vr.dm | 4 +- .../living/simple_animal/friendly/fox_vr.dm | 2 +- .../living/simple_animal/friendly/snake_vr.dm | 2 +- .../simple_animal/hostile/vore/alien.dm | 26 +- .../living/simple_animal/hostile/vore/bee.dm | 37 + .../living/simple_animal/hostile/vore/carp.dm | 7 +- .../simple_animal/hostile/vore/catgirl.dm | 17 + .../simple_animal/hostile/vore/deathclaw.dm | 1 + .../simple_animal/hostile/vore/dragon.dm | 34 + .../living/simple_animal/hostile/vore/frog.dm | 18 + .../simple_animal/hostile/vore/horse.dm | 23 + .../simple_animal/hostile/vore/mimic.dm | 1 + .../simple_animal/hostile/vore/panther.dm | 19 + .../simple_animal/hostile/vore/retaliate.dm | 49 + .../living/simple_animal/hostile/vore/vore.dm | 10 +- .../living/simple_animal/hostile/vore/wolf.dm | 11 + code/modules/paperwork/faxmachine.dm | 6 +- code/modules/power/lighting.dm | 10 +- code/modules/vore/eating/bellymodes_vr.dm | 17 +- icons/mob/fox_vr.dmi | Bin 904 -> 6661 bytes icons/mob/vore.dmi | Bin 90138 -> 102387 bytes icons/mob/vore64x64.dmi | Bin 31684 -> 110917 bytes icons/obj/decals_vr.dmi | Bin 0 -> 714 bytes icons/turf/flooring/misc_vr.dmi | Bin 0 -> 478 bytes icons/turf/stomach.dmi | Bin 33476 -> 0 bytes icons/turf/stomach_vr.dmi | Bin 0 -> 29584 bytes icons/turf/vore.dmi | Bin 0 -> 7022 bytes maps/RandomZLevels/backup/zoo.dmm | 1368 ++++++++++++++ maps/RandomZLevels/blackmarketpackers.dmm | 4 +- maps/RandomZLevels/fileList.txt | 3 +- maps/RandomZLevels/listeningpost.dm | 22 +- maps/RandomZLevels/snowfield.dm | 8 +- maps/RandomZLevels/zoo.dm | 76 + maps/RandomZLevels/zoo.dmm | 1564 +++++++++++++++++ maps/virgo-1.dmm | 26 +- vorestation.dme | 9 + 42 files changed, 3696 insertions(+), 95 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/bee.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/catgirl.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/dragon.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/frog.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/horse.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/panther.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/retaliate.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/vore/wolf.dm create mode 100644 icons/obj/decals_vr.dmi create mode 100644 icons/turf/flooring/misc_vr.dmi delete mode 100644 icons/turf/stomach.dmi create mode 100644 icons/turf/stomach_vr.dmi create mode 100644 icons/turf/vore.dmi create mode 100644 maps/RandomZLevels/backup/zoo.dmm create mode 100644 maps/RandomZLevels/zoo.dm create mode 100644 maps/RandomZLevels/zoo.dmm diff --git a/code/game/objects/random/random_vr.dm b/code/game/objects/random/random_vr.dm index fccab274da..0ccc5ee6e5 100644 --- a/code/game/objects/random/random_vr.dm +++ b/code/game/objects/random/random_vr.dm @@ -86,10 +86,8 @@ icon = 'icons/obj/ammo.dmi' icon_state = "666" item_to_spawn() - return pick(/*prob(5);/obj/item/weapon/storage/fancy/shotgun_ammo/beanbag,\ - prob(5);/obj/item/weapon/storage/fancy/shotgun_ammo/pellet,\ - prob(5);/obj/item/weapon/storage/fancy/shotgun_ammo/flash,\ - prob(5);/obj/item/weapon/storage/fancy/shotgun_ammo/slug,\*/ + return pick(prob(5);/obj/item/weapon/storage/box/shotgunammo,\ + prob(5);/obj/item/weapon/storage/box/shotgunshells,\ prob(5);/obj/item/ammo_magazine/a357,\ prob(5);/obj/item/ammo_magazine/clip/a762,\ prob(5);/obj/item/ammo_magazine/c45m,\ @@ -123,6 +121,11 @@ /* prob(1);/obj/item/ammo_magazine/battlerifle,\ */ prob(1);/obj/item/ammo_casing/rocket,\ prob(1);/obj/item/weapon/storage/box/sniperammo,\ + prob(1);/obj/item/weapon/storage/box/flashshells,\ + prob(1);/obj/item/weapon/storage/box/beanbags,\ + prob(1);/obj/item/weapon/storage/box/practiceshells,\ + prob(1);/obj/item/weapon/storage/box/stunshells,\ + prob(1);/obj/item/weapon/storage/box/blanks,\ prob(1);/obj/item/ammo_magazine/stg,\ prob(1);/obj/item/ammo_magazine/tommydrum,\ prob(1);/obj/item/ammo_magazine/tommymag diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 5aeb9651d2..1ed7b78d2a 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -21,4 +21,4 @@ continue new loot_path(get_turf(src)) - qdel(src) + qdel(src) \ No newline at end of file diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index c092ff8841..c07a71d1ad 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -1,14 +1,395 @@ -// Legacy version. Need to investigate what the hell the one above does later. -Ace +// Legacy version. Need to investigate what the hell lootdrop in loot.dm does later. -Ace /obj/effect/landmark/loot_spawn name = "loot spawner" icon_state = "grabbed1" var/live_cargo = 1 // So you can turn off aliens. + var/blobchance = 0 // So you can turn on blobs. var/low_probability = 0 var/spawned_faction = "hostile" // Spawned mobs can have their faction changed. - // TODO Stuff /obj/effect/landmark/loot_spawn/low name = "low prob loot spawner" icon_state = "grabbed" low_probability = 1 + +/obj/effect/landmark/loot_spawn/New() + + switch(pick( \ + low_probability * 1000;"nothing", \ + 200 - low_probability * 175;"treasure", \ + 25 + low_probability * 75;"remains", \ + 5; "blob", \ + 50 + low_probability * 50;"clothes", \ + "glasses", \ + 100 - low_probability * 50;"weapons", \ + 100 - low_probability * 50;"spacesuit", \ + "health", \ + 25 + low_probability * 75;"snacks", \ + 25;"alien", \ + "lights", \ + 25 - low_probability * 25;"engineering", \ + 25 - low_probability * 25;"coffin", \ + 25;"mimic", \ + 25;"viscerator", \ + )) + if("treasure") + var/obj/structure/closet/crate/C = new(src.loc) + if(prob(33)) + // Smuggled goodies. + new /obj/item/stolenpackage(C) + + if(prob(33)) + //coins + var/amount = rand(2,6) + var/list/possible_spawns = list() + for(var/coin_type in typesof(/obj/item/weapon/coin)) + possible_spawns += coin_type + var/coin_type = pick(possible_spawns) + for(var/i=0,i capacity) // Player controlled. icon_state = "[initial(icon_state)]-[capacity]" @@ -117,7 +118,7 @@ Don't use ranged mobs for vore mobs. // Is our target edible and standing up? if(target_mob.canmove && target_mob.size_multiplier >= min_size && target_mob.size_multiplier <= max_size && !(target_mob in prey_exclusions)) - if(prob(50)) + if(prob(eat_chance)) target_mob.Weaken(5) target_mob.visible_message("\the [src] pounces on \the [target_mob]!!") animal_nom(target_mob) @@ -156,4 +157,5 @@ Don't use ranged mobs for vore mobs. pixel_x = -16 pixel_y = -16 maxHealth = 200 - health = 200 \ No newline at end of file + health = 200 + eat_chance = 60 // Bigger mobs, bigger appetite. \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/vore/wolf.dm b/code/modules/mob/living/simple_animal/hostile/vore/wolf.dm new file mode 100644 index 0000000000..9c5953ee04 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/vore/wolf.dm @@ -0,0 +1,11 @@ +/mob/living/simple_animal/hostile/vore/wolf + name = "grey wolf" + desc = "My, what big jaws it has!" + icon_dead = "wolf-dead" + icon_living = "wolf" + icon_state = "wolf" + speed = 5 + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 25 + minbodytemp = 200 \ No newline at end of file diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index f2c309ff03..64db4eb484 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -1,5 +1,5 @@ var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() -var/list/admin_departments = list("[boss_name]", "Sif Governmental Authority", "Supply") +var/list/admin_departments = list("[boss_name]", "Virgo Prime Governmental Authority", "Supply") // Vorestation edit var/list/alldepartments = list() var/list/adminfaxes = list() //cache for faxes that have been sent to admins @@ -182,8 +182,8 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins //message badmins that a fax has arrived if (destination == boss_name) message_admins(sender, "[uppertext(boss_short)] FAX", rcvdcopy, "CentComFaxReply", "#006100") - else if ("Sif Governmental Authority") - message_admins(sender, "SIF GOVERNMENT FAX", rcvdcopy, "CentComFaxReply", "#1F66A0") + else if ("Virgo Prime Governmental Authority") // Vorestation edit + message_admins(sender, "VIRGO GOVERNMENT FAX", rcvdcopy, "CentComFaxReply", "#1F66A0") // Vorestation edit else if ("Supply") message_admins(sender, "[uppertext(boss_short)] SUPPLY FAX", rcvdcopy, "CentComFaxReply", "#5F4519") else diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 2d736804d5..643a83c84a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -16,7 +16,7 @@ icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-stage1" anchored = 1 - layer = 5 +// layer = 5 // Vorestation removal. var/stage = 1 var/fixture_type = "tube" var/sheets_refunded = 2 @@ -198,6 +198,11 @@ light_type = /obj/item/weapon/light/bulb var/lamp_shade = 1 +//Vorestation addition, to override the New() proc further below, since this is a lamp. +/obj/machinery/light/flamp/New() + ..() + layer = OBJ_LAYER + /obj/machinery/light/small/emergency brightness_range = 6 brightness_power = 2 @@ -242,6 +247,9 @@ broken(1) spawn(1) update(0) + //Vorestation addition, so large mobs stop looking stupid in front of lights. + if (dir == 2) + layer = 5 /obj/machinery/light/Destroy() var/area/A = get_area(src) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 0af5925cba..43522ccfe0 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -52,15 +52,7 @@ owner << "" + digest_alert_owner + "" M << "" + digest_alert_prey + "" -// owner.nutrition += 20 // just so eating dead mobs gives you *something*. - - var/offset = (1 + ((M.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 - var/difference = owner.size_multiplier / M.size_multiplier - if(offset) // If any different than default weight, multiply the % of offset. - owner.nutrition += offset*(1050/difference) // 1050 nutrients per body, modified by body weight and scale. - else - owner.nutrition += 1050 - + owner.nutrition += 20 // so eating dead mobs gives you *something*. var/deathsound = pick(death_sounds) for(var/mob/hearer in range(1,owner)) hearer << deathsound @@ -69,22 +61,19 @@ continue // Deal digestion damage (and feed the pred) - // ToDo: Allow players to adjust digestion damage because we can do that now without breaking everything. if(!(M.status_flags & GODMODE)) M.adjustBruteLoss(2) M.adjustFireLoss(3) -// Had to remove this. Incompatible with things we want to do. -Spades -/* var/offset = (1 + ((M.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 + var/offset = (1 + ((M.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = owner.size_multiplier / M.size_multiplier if(offset) // If any different than default weight, multiply the % of offset. owner.nutrition += offset*(10/difference) // 9.5 nutrition per digestion tick if they're 130 pounds and it's same size. 10.2 per digestion tick if they're 140 and it's same size. Etc etc. else - owner.nutrition += (10/difference)*/ + owner.nutrition += (10/difference) return - //////////////////////////// DM_ABSORB //////////////////////////// if(digest_mode == DM_ABSORB) diff --git a/icons/mob/fox_vr.dmi b/icons/mob/fox_vr.dmi index 79d1671408e6ababc45537df19c9571f704d10a8..8321ac9e9856f22805b35962cf118079cf3acee9 100644 GIT binary patch literal 6661 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 delta 828 zcmV-C1H=48X(iBL{Q4GJ0x0000DNk~Le0001B0000$2m=5B0MhD$JOBUyGf+%a zMZmzoCKL$PQ#CLg4&`S{*j)-bB^L6KOY(&`@|<2785!2r*7EZ5>gwv|=I`=)B*4JH zoc$e?00001bW%=J06^y0W&i*Hb9z)*bVOxyV{&P5bZKvsegRv5qEK1E)z1ZNI{-Hd zB{LL)BccER0)$CKK~z|U?U!kns~`-9r5Y3V|Nn1q2wE4G+D`A8`C!hm#2$pbJcHP64Z@ z;5dZ`mvLyU(mKOjbsm7wd57&N;^AvN0YpD$fN)5bpqT!D72tXR6abz8+#zNcA`yuL zR9{FS3eMA80MQ?Wz#V~K_zh!i1yXD8ZSb8%7Qoqo$OSAM)88R8suRSfq9q$UXHnW} zbm$DCp9pGRipCfl`c^6SuXkMYX@$oC0Ur`zR8M_=pUbWbU_=d_<5-PA;kXlR4*0!j z8;}HG=mL0uj*t7(W`_=lfZN!fm(RcH8gTrJVmK*2&qwW7Gd7@W;G! zEBJzbBc1=2Ja8)i3NZ86vi{FYGb!Ko_yM7kJ=e^JkPt%XA@&4$=g)m7)87-U4T}%@ zkmxr7vl2k}Dsf_XaRGNpK4)MDgpF|p%qk~y-7NEeOmJ?^z88$7{9At;h+_5%BIlv` z<@I%N>+hbaeZH(<+z9F7#y0@W45D-)0J-&E4{hrtt!E92*?|aYmewU&t8uGd>aPMS zLllKI$Vvx~b9iBrib>`<*1+4u1cSP^MDK0>N|?whLc0I!v&rz^JY0%EA0Wq}A(K@B zI{V}^Ex>vfEISE+PxB8H+xjcuc@})(Yf(KepQqX9`u_koeju0$m000001=@6t*K)OV_TS7XdJBMb#VfZe; z|N7P%mJ{#Iym#-p=j^lhzD8)OD?Pxa#)Uv24^))pwIL8R@DvS#jS2oa^PIQ_FPOYv zzHyVcbhU7?adNY9bbvrSzkW+;cgW)>3>`TleeJ_mJj$xXTl{jKc5YBw_U#ddfn~30 z`uBeqKFTz6@55omtHk*uYcOe3#=6z5oAQN(8R^3l3YWz<#D(H) znyjyCYKxwPCb&gSO*~#^A0hp4QeG&pXDEh>npd7Saj+L6GbGzHPqO~}Idn24lV;~y zOs2?^k%B~;@2%IXzL%<0KmVu};~6aDYliYn1@7Y=FDh|o{=zRV82!kVW3Dt|5(<~5 zTqNDt9Ml&Pq;dH3f<+|R&tiZ3kJ~T1+UYzPd+bG_N=({WVZWsoZ)=H~;Lf<(HAaGT zfBxdX<^$4X!@N16A4V{_M)mQs@!CC%196pq0co_F37sN}?Xgxa$|7Q{so*663zo~O zN9@95;ufI~YPL+)xUfW0AF)b6-IHxR< z2g@y@;32=iI(j*!B6Dai0Si&k`^+~FP9j4)Xp_L(_F1ox0*C zaByQoT(U`L**@D;Qk$-8BD>TusPy~0aSOr77GrT~iS>a%7$GY1PhWa|-S_h`eEH$} z_TO(jJnV;&hA-sCUlTdTrSRGdGRD_0xeJ{>pC9?a?J-#~R3eNdPii@eQU$Zijm5%96e%v`YOl0*~oDU2z@$8c3DeF6?E@XUxC#RSdr6 zo7uTl@0+=GrA!`m@0K$$GjsU2RrPxL9*X1`%1C&5fpssfm7xQ%^v-vAGwJr@m+{#S zG6oSJN5}Gi8eLccvVZ3pNZ+CSvDaXE$I#o)wB#F`5V9GeDqGe`7F`ter05oI~k zljNlzzs|g-SJU$L7FShMQ}Fkf20xUTl+-;j{m9_w3vH9Fy#S=$>bRn-Njn}{`@ zqFzQ}VPVFR2Y(UAt$z^A1R{Azir-&{*$Y_BjGi))mm%KhpYK*Xtljp(ZdJ5RE-l(A zyhLBREIydd5?ze<#tS{$p^x3dbU@x+ejFBTU`ZDCj&t>UVx4m4C+K-|+Vy7k%g5*A*y5lV2O$5rp647|Z{%MII?Z;@z(AN~c@?di6&wId9LhIo^$T&po`X zLc}(X^i{c(cBB|LDwN5uq0wtCkX0My`WpGbE~f8KA$Thfu^ka$_H)pL9X6Py1gRmd z_qLIZn$SW!7byK#H}Nhzg748Iy#D_F3jI=~p^J-PM@I+g^i?`B2}#a)zi`6f#z$5a z(-;0PRN}Lz_g0)lV^dQp34Qba^fjwxJJW90tKeV^(7fcPA~IMP(464CO*cT{NSQ+* zl^HA*rsm@A{stW*JgKRlXNHL)_s{~%32@OMqI-Ke39P@U*UJ-FgDKAntEaK>Oc+Qp zto@{JB|n%xicd%o_>hfkNg&34`9!w#t-O6)udG%h@`eva4?U{ESRPWteMGLJx>L7q zJoM-HwjCtEtTVLztsoTgf}JGv0nK+&24xrVj0#qKG)4_%{KSQ-)7e)uGqdfbRvB;v zctl1)yN zcm}jHuZyoEdnBKbcqc0moHypuwtZx zyw>xHDrj%IT&{eYdzg%j%=sSCHn9NLd1Q3-hx;GEk#5_g(2$T2Xu{J*q@%;t`1NBp zJ*^(08^6MJU)kzaU9bcjALmej;e==g2OgZ`)5;i-6C&A8ttzn&>BCPVx!iVU0vVS4 zk3=EMKhDJi+ETE!IrX=kzJz_sxk1!(PnWTX{~&3Z@xcgGM#GrffID7^P(k^J9FE2k zEH?=HT6cbVA1sY8)yR)d)bcQ;optxO@+cqdq`JDIAKs)6S?vt+waSO#)BUXgaUPeN zI>UaxVpXljEEzXvexj?>h_q~=+K>S$CP62j6jnT#hoy2L`F@V!X#Uz6<)N zZZA0u>)q*e%lb+Ddq(~HDCY=3;LqjDw1K>?3Z9DcLWVW6lUkJzPA+4RY#Px4FRIn> z`hNt$(Njl{Je)09AxBHpFrCCNU;5+Y<2{*Qe)u3HLqSB;ev6+-p}b-3+-mY^Tnr{P>F@P zd}1k7_P>>;hAyjf74;J80I9*KVPjQC#j`R!dh{uU5$YnCm`Zl&$R=C6Brw9$g>{MF zVX;KpQ<_QUDOe0&pFx+eF(u)jtmg2G5T~RMEWAf zMBpC{#N50g8`0>BJe@r$es6_Q;(e~?Zs%r=5?i^TkF3O6KR&X4l5K` zO34$Z)@A&Uqrziilnf1NS65dFsi_C{+Mu%r%p*m$@|jsfR-Jd(pCH5N6Yyjwip@+* zOAA^&gik=wi|FQK1~-0NBNQ1Y{Wizdwby^u=K&au=4VrvUe}y8w_}0$=*|q(#;x=PeoHQ*r`MfRbZLI{E@f*tz zJP<}!QRQPQ$j5V3Tx;^BQi2S`Ejmi>ZOTJ=_lS0+KAY zk`Uu^rT6bk&6zL4C<=$K$s~%;2^Ay%atpP_y>W zPbA;5M;IP?Bje2(2c8jg1`>!4zem4RJ-w{6pxp5AdpIg*cQj$$a3zZuDg zJs)1v?DtAcGFpk8)^iM#en|PL*64w_h5B~T#}#`@*RW=KOG{l*7;{lpj?mf2TEW%Q z!HGx8Ekl;y*AyFX)ilHJB{lJe4Tff1#5i!c&XW6GFV)%Z)ixUm(>g~1Y z{Y)2m+WN?glwlpeBXP9|vOeeJoR>PKF1!9p?-6-R4-FU_v34Eoi4B*)cy5Eeq=-yw zUth`9wY4k7#~>(lA`4c7{yt6h_N9hgx|gC@8|uO(4&>PbdYmbG7a6`e+g>>WWVd1y zc~YleI@9oBPmS}|hC@&c7U+q!o%u=Ng+yF`@86Z!!7McP+W|$r7}~#BCdjqI)g}-y zi`iJN{V`29%g*66-Qi1)4_dCWI1tp1Z{-U&F&LhHfQSD15bw{(c#~@4@qd~hw0hyM}l=h$U>u>JVzNaBJ9Jxkgqa4iw4haugb5@V^*8=QN=AYt~vuI zXIj2qSo%pA@6z6zD?=t^evVMzUW5_Jl4OExl`3FS@nP?^^s#7$IUBlp2$23mF0PYeqF9h;0J4frOB=|7%|*OuxqX_wp$G^-I1ecvgazxoXSkEYAf(Z$yI0#` z#o74sprkykx`lpxOlf(NY_C0)WF@0fmVxwB%#`nEn;jPYkgW%5stkePCBB~~e}{wz z)Iz%X*J8Zch9}+@a&yWVxptp zpJT{JYkZ^@4mACgBNv8`jf1ly2}V@%`eF}~h}*$1q^FFtzO~gD4Yj}nh1}xWVyIS( z8BZmi^c=qWYin!k-}@8Cl-A1=M^#(ys}X~fGEy38Ob!_9mli zk5F%19Y4!|+M9fZ9UcCX)5O}uTx z=~=hNr4LKU1-%#3V^yH|qSsC66UTcf?^#4lgGC+AA>L_xJ+_id0Y zV;PcDO9ofA%3i*v2ivLM&{rD-)vLF@IwZ+BB<#!kv(@ySRVYU16Rh=qRgIq@^IupBQ35v+EE-2bWp`Zd)q zeN_-lm_bkiX#^w0a#|)^3zfj3v5C72egW!*XmAp?8Z9~nu6>t=91;r6F;tFivXk)T_XUVTB^4pH^NI>%uMO|fy|8s+8^l8oQWVS4)O zAi0qIlyQLm$QTs>TZEcy@Wtz^XZCTU2VA2;s-|NewxyyoLZiP0a#i_ZW3Ir@ zK;C0P$dk~_{(rAD+7$Etz>QA%xHTXvQ`*b+ zhJKidJ;GKtEvz1hHZ3HLEVOus{i(ea*P$Wqf4|59o1>m$uryV(jEzc=X}&ET61`03 zsO_CiWVYqe$fZ@NC$Z@_VfD7wm(zdV%6T;opK3vG>03&HN9Lmkkd8|#%D6qdp@LLt zZ!DxFt4{{Lr^c0s?r)EVE}(^-FtDPx2Zf&4?fA6BH;|;w*t|IN2b1pDZ~KJ$>VqFS z@B1XIRL~6r%%NpsQvT(g0!g#78y#nOVd2BpX{(gPzG%&NxgSJn3mq$n!&{$tJ)J&0EAw z84Ll9fWMKl6XEp&^_uJZ8tNrmj|NK^dUOJ~$PD%PUsyBRz8Z;*Tl@ivojT>yK{*F$ z)dIgrXP7lm`G8m0CY^fsJHlnFsc_wqBG-~mPEOOh+|fCR_1ajo;-~Y93M!F6b`pwm z7|myceJ)R_*o~4h-ZFL~`PNn?&sFg#PW~I8zm-zhGioQzoZtP`1xte`_bVT@#=@-N z1RK*o-ENkwsyW#+z-5ZC$qtx&&A$<%ir_JYdhO{l1FmU&htxPrrl_Xo<>P7@VPSIj zMk4{}I9yKSW)ALKsM7U>60c(Z0C0!hJ72v#k?EZe{T;|5dhVsAog7y>SdyjA>{sJ4 zLsoJVkNK8fo^bpqDRFCDG|6xAFz9Rj@g4tzd8!x}?sPfl<1CvKT_wYJ1wW@^8}5}T zi>o}VFz#*khmF75`=GWDC^U3l%k{nISC*}7KFl4fagY=pS6x|aKfhucXdH5Ipltc? zB}coVI)4gDygGpjhfJeBN|%dE^R@fN_c$2^2v_+_1d{&fmhuE~|B))|aVp|VqG$-R zT05Zv49C(VZXp#j#=-}o$;4`IY;0^!;u*dj1^qFSPwH8_BI4tT>-r17<*T#i5k6X` z_a-6>lp*~%YoB~_dTREBdSO^g^);x*V7|eTtnBQ$6&0Fm>ZqKKj%RnT^7Dh&ei)2q z4u1(79o3|aRs<;I9~()t5lU?^3nA&Ujt#yCy^8E)ce3~!66s4T<{}?BOMXItga0g} znZDi!zjMc}&(egKqx|0V-UFA(kWQTR&UUH%*yZfkB6(UGZ4O@+(XI@L9vL22)|6!v zUNd^I{alGMI$1a23u|+|q*Vme2*UTW&c9Q4e5?&>H#E@RJw!QXX(HZU-V0`)V%D-(1l9JNS0JG)A|X0aBFlw&^E<-jsnpD#^I9y z23Eh>^4^DucYV-;P8{%P9KuxUTsJY{;G+OM<|GrV@?&2(cZ+EKdQL^%`;+oe^MF6+YyXv$SO6;^v-zdy`dIGdAGNJur9&KGmqMgFySQ=5W%g z9q2LTpFs2;f79oL>DjRkQZK@f-@z%r<$A8nVmE06la6!-o&J8qtYQ z?b1&H8^$RmmGKSmewv|Xtyh~gkdspd1%<1jHQUcApepXq*J(UPzSyua@xQVx_OeO2 z9pbswv>^OpyGxiq%_8}PGD2#tf(Itk^Bq6zkEv|N!eRx}i?w*u!^}?QeJZT5P8_>Z zx^s1oXVE@?&>zo0J?))9ZE6$HE^)b^_9j zK7k;+StsbMEB`2bSN(e61DwTMo=I5nuOq#OYZL2Pc>52&3)3aB*&T$++lO1x#H&-O zm$hjr?pIjGC`?&{opFKVuTx9<(?aJ`Cfj*2((##|t2k3dIvg)`b@M=rd6ztn*D?(x z6_u3GA&y_QU%d*6k-jceKs;G_z#vVVlanJk63}$u_wNEw%Vt}{8OkqS1W(#-ARw9` zd~W_-{MtnvF;rPR)}` zN}6xs0k1#Ey2Ab?EW&R6ikg~e=_K5P)eF{`dMyW&Rd%y-bD3xCg+V*$wm(C(v9aNK zdo%T*1tg;j_|gaoP%1#Q03E8`UYPr+NUFG%9d@UrTy3NvT>vI6K?6aDRBwTMW9K|cRhRqw4aEd^OMg- z@#J{{D0;1ZUuF3qTtX9wMdd#Sf3o#d2s;kxS2-N$(LxEz4s(oPXYJs zW-EE^t3ti}|HhExhn-b*!shU8!J3^GLkR_Pc0Xla`=)IxAZdtjr#kS?s?kOKk&aJLL%gv69e|_r{|8i(W`|I1 zTVwsF03v1kmWmf3&1~KXhOz63n253Q@h>7IEp^lPBKf!=_f7JkSJzpNdEWlt3T%*PHA}Go_3yv z;8MVa{-*Kep|3eC+UzxtOQPW9Y2aHq{LO!C-9Ip3ZWD@6e>@q<2Xsuj=t$YL9Q1+H z6E<;;Rtg^d_3=icjO2k0RfLf0qU>kYu`Y_Njo%0lD!+@QceD`3{!vdyqV#Z2!rs8k$>O8jvo7ITFMp?jS$`K z0n6j#or+?~>+H>MV!jZ@@~lEhK9k5jnHO9mgDK%M$Jf@w?90Cqg7kZp|L+Cx_(E+$ zyZ8NQGT$;l-o9G-{riAI%NYkJM40|tNbE^g^{V3=A9?kk)MEt_kujM^+^z=`%0Ljh zKI$ZZ_Wfh}PX*3oH))d@P>NC}TEzC{*+>1OdF+ZFp+R?{jaqVa-WVV=Y;=DBM(1n^ zhOLh)YUfclg4o50W~PjIu+WX25`J|1>j2(2ml4I>jL&^}*p3kvoWO(!#+=*pooxqc zk_w2iOzNc1iMN*qFPxMOaqww`@dzkjgB;h3ABZnMT5sMkEY6uJ#u3~Qu7=lb#V`O9cNX_*z>7@^7{bSx&Y2r}@@eocMD`mCt1 zERxaa>f3NP-+GO%_0EjuFTr8YuteRvgri=9nQx$-E!GTJtu@H>&y*74q6;YTg)&}N zK9Vo^R;6q8BCe{s`sy)=^GaGe9eKXA&H}q_`1d0yqyOonoi@I;zeiBLFHu!f%(YN3 z+N1DfO2!sqD#leQ=AU}38d@ptC(*uwkcSf*SqcBiyj3@at!c6~2@-M4xcBeN0SS8e zt60!u>*4I08d4xkW8c58V@UDPxAP!K==eb$0X}65`9)wxy?^iJlepiXS}@nTiOa%2 zh24f&bcX#}fj_4jO3LDse;#?Hpn&&~?C6^X)=WQPDEQEHx9w?PiyyywC_nNd?hE4v zcj#2J9>eDutCi>Rndfh@*Pd7G`3(LNd5$nU&1?rJ?ayObfRjY2I*wMuvMTrY?QPC? zC$-)5xg@AM(hRfMe}fsE=QC~-sa$YI%{M=Edvct0li+t11fu0TOC_CzRFwm-V?$qfMxK%SD;pSX_hLz%=@p6S(r>Wo< zNFT`(ct*MfB05qt+Og>kv8J!kMMYfR&1XLEDEVUD^5jkOuX69-^C%O|VJ@_@5TZJC z%frS`(Eyr+eRS8`WS?}8 z!+@-ih*T*=kqZb(Gj7rOnme8yM${ZZmoMqu*WO}x+E**ARQ`*EtIUGFg7GZ939*S6 z>+IOVUX-HaD*q=6akiKodPF{L=<@Bw4BS6!M98tk##1q?R>3B;`MHK;%CFk(%%#jKX$wj3_?@@n)8nj)P+q?sIm}PQWf#@gPeC+RjP_-S_*3hm-xs>m}435wt&@J)FO}+$@DTT~1zVzI=I? zWO4)Do^YW7RPPDj_40r5L=vLc!csRlaB(*b756=#{L(VJC`+i=okD+e0hiDM6*pt? zsJ`Q$QKo~r!e>FyKs_z>EbdKv_R$-KR@PM<#FOz&mi6Zb)s9|xpO*H_3GtcrP% z#BuMH3d`PIVltFjQ8Ra3ThHzRp+%TAi@w+`I~=6 zrvwCYN4Rd488&|2E>uUD!-=wfvc4QI_dn;hs+%Y4MXT&C;<)bo%kieP)VQ*Cjo@32 z09Z$Cpvwh1An*|(?8h`;=)nj937EYWNL&1~ZHycD5^+0%PJz`S3+$vBz;K!Vqc&J>q_ zcaUF>;etZ`AmG#SsvgDTMfX59NNX^%dfw@sybH&z;v|OO0SMHDBftN7%C|@XKYnv! z|0T1!d5P~r{+Y_Y?huEO(~kRm6`)dZAJ%T{Y}FI3avQt)j#_J2%+L;l@2|>vMdM$g zg`LF$xv%T{i0v%=DQM0OuT1LQ7aRv}BRDcmfmo!l)ZzyW65#;avw|B1_ZwlRCaa$K z93TPxE&bINgFduiAlpS5ib3OM2D_~&aPxz9gs(!O~EwlOEr(N$}xUworZNrOuRFE*!ZbV|H5qAShgX}-IB_QT8YO$b7(#yqmr((-YmoOdkDVE)k+^#R z5W%SA{yBGV@A(yIWDSc8J>nTf!GY>2oc;iSDqOh$RG^NIPJPa(zMSdG*IvCP`ajrX zduH}Cu!dpdm>+54pMaXlf_15NCJkA~#!h;MIY-Di65hArVm5Fcph{NNXwm<1R+KdzC839I#SQQ1T za%#Cz&pC{tBd>k=GIcptl^L2n7}xB1P&=I;H_xM8=dj=e))YW3P{?YU1mvw-V@L{; z2=%8B`>%m_<|*q*_Qn-SOJT4^Xy4*(*kueBqpp8!r6#~M%3qQ}nw{#~NxNJB$W}h( zV7`I$vIUT@9)Xw+dHrY$-rY~wL-s-SI1i+(liL=+eD`3D)2N2KF@f+^t@kw{C0 zg}0u3Zp>yE^p`)W`J4DIJdgvuE1iu{pI9@doG-tdM!^KY{BIjO(H6X`Har}t*g}O2 z$bXI}p@zq|U!8mifOf8Bm`8wn!bL5+p$@W@va)hpt=%*s5fL;)9jjoxXl8I>$88mO z3rBa{X6hUn-o?1Z0j&X`qjbDZ;_tKeuWKB>9*r{Va@0 zdP=daDgU<9_WHf<6D+NQ3c`KlPYnHZdBWO!3uaE4^dU@@ctUdWP~b-Nmj>29;2VHl z=suJLqX7Jt`X}Tvb{@RRY%x6s62B$!{?5gE8mvX-xC;cUBk~KEP&SGQi1onuv5QcO z+Fth1&LDO*xeIGMzYg;0#dN{o8YdE9sH&BqAew(Pw%Q$~_vQ`d=5Pl0D*!Rm*c_KT zhvu7mbTxv9s4UH~Q!6O^TkZvvU??E7^w*bEFzcU=EGE%hRRvtr5gto<_3rkg4zjEQ zGBXlyU#+p?mCgkuFqH@p{bBSezHK_dJ48y;%M}YRn-)YER*s#%TTuYeesElE|Ic!d zopR2!;!sa_ng?O!5OV|_G$Lhc)d$xRuKbIJ=K09SADocO@ZqsKrn-3istTls-}C7Zg-eJ+_kFCs)expHtM1XQh?)g7%Ii zGqHca4--xwhhnBYyYj%j-<}hHIx0fRMao0S0yUp7ZU4PvzjHsv%;h<8(*aHCH)Ic= zKhg2=ad=de9I!k+lasp=h0ZM+tE!w~r+3^A8aSHjRegQ`UJ}U%lMNc^pCdLIq@g&b zK$_E*(Ld@+FmdeF;F*_N9mmMX$l$R&7(O2$)Dnp%k~$tt;q&QgDQDCrp@}84a>dm> zC@Ke$GXOBiyCE?UQlM*GBia2awZtqgP7M>@GVjq%Ki&&F#PZ5xZV@#b6X3BVk#=S= z$m9*1u|Z?s?;4!0a9ol`J%UttY$$$i<+glMhSx;1(6Q;Xq0t`z5=KzR7&z0W_&BhK z&<#|@V7|{b*7M$nHtbYy6-IgN@mEDg;sbgfp+HSTxJKsK{9(y2RJd&SI6X#mGN9U6 zG{9`Cf-lVWE-87b@Z}2Kp-t9vD=B zQ*laoxIay@vSJnbBL6TrI%sdj2L_Yki@%t>CZ>rFT z#(SS=L2pHfQ7v zAO?gJGrPgbS~Nm5phWzKzCO2neDKZsI1F~)>7zR$62ZsCG;qY>ON}KYt#+1=mp8sn ze?O5$_POQX^m3KQgGv1{YAXp%y`XWB5AFSGWWq_x?3MKP1yM|{uN-%>g>`5|w9l!K z4M5zIf{d&0R>u7#sTe`3i%-7fqGrtf8;|Fr9??MDo&bHuDy-6A`!)C|f<}zstZojX z*WkuUvUD1h!OjfYKJi!8nU_$?%T2pTfm6~eq67jdtz4#1nlQjBl?dAk!_=u+G~o5& z>zG)r-K_QbGHj0Ka2HHRW$I6k__Xea)B;9dZ)9P;MfFA@qb)kP;6Y zKbZpkz+K`;aWR?EHofoBQ z{6ZNdW%q)zx{ANu7{>z%oAtCg>PV=&3rXyU=Gtq`wK{nR>fpmHwp z)Q%fJb@b@od3a>xM__4NaOl0Wv;oe?tX7|F5F)#mjE4PhnqVQO6?MR!byV%Xm3xbl z6BYJVE;d1^_TpD0ug+sG{Mlut6+*3T-YVpvBOC_u{JRS(c2+jZS;}tt=~qhtaRvYD zA+x!EjSKj{rwxkxk4t7J_(%W-Klc#tEKPr_R>Xf6%dCUa_1X8QKgg_Bf zbaQ(G$Xw4Nqa5^^B*8R3rqO1IX%Jm1Wyx3U$B!S+HhQF zg7YihJZf4E=vcM&6(V^2G6^CkKE*1X{gRkDdHYLLPm1{Z0jH~>A#cv^M=-&9@48*= z1^EGIL!Us6qd`~p9bVqF#{2imuZfwoJcNf{=k(w~9M+2w{-5Ktg~#dFsN{ky>xrDW zMX_v~5YEumo!PEi8k5YYbYv&&U$pNpjT3*A`9XqIlcs{)X&^A)3unXfvX87gD$kFWh5Fi_CXn{GON##UWfu(K7&E=kk7@C{^deiI-vV+@K@DUf+ zGjnrhV04c`$HF%Sh@SGX6&_$&^6IN+?rfWDN=xX?PYIeAAw?@!&pJCTS+c)Vt1C&p z3Hm64(I5Iu*%PC+_X@81OW;o912BKIK!d>7b(xaffqyMwN$tI`Mu74Y2-t7(r_?~? z&i+kAMC2q&`~Qx^I~N~9j-cJPHn*lG(WBGuJ+CZ)zK`iq6#oAv9?N(lf%6Os(Wxt0 zNq9Ue9yL#b0;$;I;Fpc@iXCUuCO=dxQT-RVb_~eG)Kr66*6^UhS!EEez3gn+Bn|xp zocad#*2=0XF_HB10_dP~IdyWT_ndde*c9p+R)Fl42r}v#DE5*Zi~#3=e9{h_A+Qzy z7$i7NkW0n)_U2OW#j%Q;SXGKf6{r(!4J&5S?XAgI*#1?AI%Q7Sty?=$k;Lu0mFzz& zw+Klw1%Q~^oTtLu4pObg1oTlFnAz46}OS=65x8xw07)sQ!#SCDetrLu4ekY7d*CGg)k&Pj;$7_n%#i$X=;+h(lm`S#%@00%)9jW^78b`DxEQw>Mx1WELN;Eq z57v$WD^({)Yx?f^8_g~>2rxqc&I7;u$|PAblE4Ma?0Kc{5)hUF&2H!4%JxLQpw}_W zds7CJ0W$SDJrt0WW}u^eq)NZApJt%5CAH${iO{--nvzjTZLoZB<}C#l@g|Q~wIjnP z3zg2w_CqQqzb4R#X|I);@TK&Jgodt?_^egm1;iA?rrBCn1eA3A< z9?9MtU*ZBE_ccVmCNF5J6%_8pXLw70mM5BD?-BejR4Q0j9O|5W>ng;2)iUt1-oJu7 zeX9mx1%ZU*?liP)SseeK#fV8K0!^!;mvKu?KV$ig&V^KT%(WD>t#hr06bgCCUiUc9 z*;>i*C<{==IQTf=^6c#k#0;st6CQDnDYa${l5wm=(N|r24}2}ClKUZgv;otl4O7GP znhp5DSVqmkSvLI~*SGAHw$2AoP^y3@bKz^@++YC649>yC`!sxnW0Mo{Ebs^O5f@s; z?xeLI@I1c&21{u_Z)hwT?474*nXc~2Mr%oL%^8u?)HM3Lmq=i;^mE9*vzuRE9NZ6T zZzK5!`8H<#seQ%i$Rg|F3PUH-GA6hwzNtx4A%XbBURg|t4C-mRt{F@jlq2$FlSVln zqnYU!bSc8SG2?X0tuHi^sSnc3MA;jY(Kb6)yiL!O@}!LWq5QKLN=RE@yC0-&4;#W0 z6Rr|-hm+WWNYQ1@bT|N7|x%!Spf|5=kQ3@g>KN&$5hcZd*BAr3z9v$Re_Ssvt`u^=i|=k= zz%=hzIAUq)UF&?;e0$E6Tw&Xv%wAsr z9b6k3-VP|^qfJh!?A^0>74BL}`*AQeTbH zoHholiAP}B_oWb6gMr|G>ir08VkD)Z8B8kbYcwv$vUpL+%FNX~Gc!ZZ z4NH5N)=^$s+6}TSGPInGS90CuSr_P?)K={{VX$SL+a0B*H*{x=>*gU#(v%xqtA0;7PqDNcy&jYUYDhO+CE`iVygA(uRW0_f@br z&zgjmm{_>1J^o&+Tt|${6|2eN<4n?`*_(?bI=^(Y1!uVNWUiBdO7B= zL!2?}=0n8dgEUsoFL2WBT0dILxX63Rh!E*_EqF?00M1^^G z0+41FS^N=Q(O(IOOiFP7FrSM(Pn`e4*oM41tvBOXjry!FqdaZ z-!1dCl6vId!z@0lw}1cqYXy97BzCx`%!f^Xoq@zd5tl|udQz%)hu+M)y3jTYoP3Vw zf)BZ=?Y1dV8Z@6N4@?# zEfTnT-sozE|53T&7cXJ}J59Y_K}SjdbR9a0-fbjw6JK$u|Fw1CQqTX*lS{gfE*Mk{ zT(J7WIs+>z_~qs089^rr*pZoPCH1-c1O%7*O#Be_f+o_H!n%H(m~;1EyL6*Mlu3A73Y%xB_5`N zTX0zp?|UA$G*3WP&-^|)O+y4AHC8ly2TH#8Ujk*|_esyDME*?w!+$RtPQ(C z>1o_Bq|(;bj(rR9&TI)c7*67BKvz^$G?!HndN_7u=4~O2s0+oj7wp3|xSv(Q+2m8X zNw=8kX^@2Um^w71e=rm0BqDr4`>{aro9oDaKimNwl37yFv-J8L-+NjGq0`!q>)U1| zW|MRjv4+#V0>JBU>fHc75<)I9a<@V5v0`Ak-$}1hanr+RD?$9H^PV! z65RGKHmTvA+sqzaAsO{(_ylJa$q%k#Pqbygv_u9gw_S2UWYr@Z&Zi98DTBa9B_P)_ zGgBwvb8@XZi8@{E>jAh0Hc?btk6f2h#ZogstbA*!vNU|~gwu!M2=j*xqfq(vS@B>%k#WdTzLpZDDpT8A_H>f$g#iUl&ds~rldv;s zJPcpX%!~=t#bAz1&yQi%GN8u&YnY_WN5^jra5QhUu)6YMrD{92PUrE(3CNUN&jC*S z@>W!X!Rox0-?r_8DgNgT81(=B zzW_GW5Qt4jZQu7p_hHG;*{`s8gZ(+Pp^zUfK(YL}uVQn>6DUN>NStdp z>J`yK2?c2*ySD+|Q?-CHlh)5obQ1iioG`%k<`hOksPourYij}E3}`onSm1G}e|?uk z`W-ya(FSkDcnwCDd$hedapv@G6(7%~ZU2XS=YDSJa%GQeyl-*)za zzJ=Dk98D%~o@d7Y_*pd~KoWWgfJ+h50|*%{pKd!C>TVX)Y~q3R96-Y`@*(;0LG6() z2sN;W&8?GzRzKyY3tyo=>w31kO1#4#dEEQ$@!FDQL?~tE4j(n;`thIB;%Og)j~ai% zdT-AOMBus^)j4IDo_;gRO(z4~##Hy;VnCuZ*{K*yOP84z(*|~@wcQqDU(aT6*bYFB zFy2Fa4~Kly2%8Qft0^vSLi6`wH`M0In>JVw$frURm>vyl`@UW?8? zm>M2m54bd-(2Xmpr-70W+1fDBS*l!ql3Ly9wRw+s;a627Cm^2c-x24 zQv71yDqEX6IoBvMk`sO@EAzCQ>J=v9pV zKc@aVF3Rrv0*0@lkq$`(1Zj~{LOKMbQ9?o*DQOXqm;t1uMH*=-5hMhpK{})aq)WQX zA%>afaR0u~`#%3L^O@nQbN1PLueH}cvv}6I-uLY!q`T1>@9rBI&R?6TqR=%(UCJjb zpiQ2df}8;#P6y2|8W{BJk;~|#O6Pu@9iR^-k8(m}R=x~2vSrB}UMoU?xIj#r#eh|P z_KXnBb70?zA}ZPRZLuDe7`G8LyOG_~;q}ZKC6BL-`WD4s6QainIV6_;H;GD0tU@xh z;$=#>a__RnV(&)l?xj%^*@o#BMuJbh{1Unc+KO$YE?7)7&(YMd z>;*=&vm23@uOkFa`@(?J%M@30ePqi7aeY9AKYG29t)fnq*wSg~Ll2tw$JCa+i18FO ze|{I2*`4GKi}`}Y8h)Z$qg`q49GMu$f0mEZ$M~tHuS`x%U?I#7dxhCML3?5K&>8Ss zO`5kx+ndT+k|&!Z&xm9ef@FryzNf>4+*UY&mY|l0<`A}6oVeONnVZ;Ipzd|_aF?D0zQzYv+ZD#q(baV-V=(`Z{4FY6cHuwXxqkeT!$-LF$# zpo)$K6#=d&Dj{jsn%+Ck*=}l9Zb8o6(!(jjvPasCcVClm`|`1M0MgMNsY{X_BYCEp zNgP*@tCY1`|jzBb%OQjdSlr-woiE4ddi}RosHGC`J8ItOpqUr6$tZo+UFl{ZD z6z?mecP{U0r2*3vyJ`+<$-SN%E?Y)i=ipRNi}<b+P7Lsbp#$sSHU4LNclZRu?byfx0kPSm5S z{RvyHFN+cz_8?}i{j-?hX5gB+QHYl5)cP0`HbdjS>`Fo{SGb*p`xTSDv*UpHI(Ie5gGtnQsGk>G3i7)(!^a*B2pRr{F9l+*6 z1@^ttHY>x*MX$5%h357#Opo&Gv=ET9pO-V&GsAIRw~~y%T`j^u?)Bs~MaiBMKm?2O zu`6{nOffs<4Q#*f?XI}FAtj2K(zmJ5%zJgTyrAe=u9@IETEi5=!!Cce5&Dul6ko(~)iE;QBw%9#{>0l)gEGUJ_h4qaxgc+0T}-u`?KpIF zC}vUaJ^C#yAw1A8PS%bGQBf8&Z;L1=3C? zNIj~~%59|E6Sa(&hRz&>X#$!b=lESkYyIgCB|D^NmS|A~>;51)Y}7*KvYck=srW|* z_{hiNl)6JI$=a=F*6^AnenRqyvk`mu@{0xZVAOQEq(QbxoonEVvyi~!CU0=K7#g#8 z!AZ&wzrFuLDi&~AhoCC&f?))@g8}?V7*wvA7UenP)gRjPLG-#3uR}O(#;*n%i8_I{ z$omO{MwBJqDX5l;?WO0HFCH9CTFf1Mvu=Jvubjt9?q7-nHZ=kg3`!?_;+}-RY_XE8 zIwF_3St2!@*Rs-UrJ&9023$~kZQPTVkVrq4>r#%1vFINgsshG+%oFlKTH)ZV1s#~k zYv3Ln`th(%)GUF^nhD&Ubk;w*w03+3;eEmu<3G2YQLh(}Bs8E3Nl79I-0z*<;XjLE z2gR^w`;UAQZcR@=@4(DTXS&dqCP~=j8WhB=(XXGBT2@+l+?_X`y%nCu4kU|By>>w< z6fMF(^Z#58jd`WjFGTV;_b6Hg^St^!Y43Cc=fTTeQO~Br0wtrrgl2ag6!Y~wv*$TX z?h3A$^|u1$0XZo5G1{I4!1(?U+o@#jdE4&N7BxN%1id7>ACq%{pl<8d-ja`5uVqD} z-*QJp2B?XyH0(G31jV>mehw)Rq-Y{nZGzk4j;Hc-Knn6)XPzQTusjj&ah8sD6SKuc z2>+=^a=8=5S^@G_dcorzZ$M<{k^4pVj7NYl7idhHT+;nEyVz~Ky3ZS5`8gx(A~b+V zmvR#{PMDbuCCYHybkS)xojeE%3Zf=SZ2Sy%Q<|uCF&ofe3;_y<^iIyzb$&nDf2}picn7o_QcAgFViE$py^N=pUPu$}c>!kOU%vG(FMvjENp z10azuSx9}1{2Ka!eIVW`*%*&ot%}r7)sl6o@i*P2*vpW;c<_{nDKGDoGnyG|WT>rbI;bg zbF;LmV5Z`CHLdmqtvalaT~<^-+*Da_62M6 zY-ya=8N{hHPIwD#>m=^pK^$U)a%>Ix_hU zWr^Ry1vfjOl|H9q6t0$eJJs*XBgSFghcRfmxVa5ld!U0#nQ89$4`|57S@Fpe!VL-P zf@Z&SA?b?^wk+#AmgQGx*pi2T_os=oqR5&|V?X;yn1d?6hM%Wq50HbofsLwKBxSO9 zddowy&T5As=rNfF49bx3(hS7Zurqs%DYXIl$+a~XW(90fkgZ6^ zzuCPpHtF+TTY7G2=HVO=$iMME-%hDL7}@|xsan;o$K{=DpFyWHNBeBB7Bc1d59F{s&@&~xzzhlAbz z*yatQ?v5OV82#H?r%L}rF0x8F>aqQUAuU%>UMhq4XSlM!5SP?z-%^4z*BdUNYf1>5UKFA}a!^YZdw z5NPzmhIIAxmHuqR(kzC|{ebL!?L~!%+WhX=) zi~aQ&-NZhk=AyO=XFIr-&Rv{rVuPIw02Q<|*I-apAOSkz=D;=?1SBLO{j2g|aY>`= zJl#{I{U7-@>`>3w+kPB6)7qU{@}Oz-F3-=uJ1?m~B*V+AMv)12pTSysMleU~=lNF- zh0pF+?*d4VYV$U%>phQ1;+lMs^-I2v?~2r>essgANFtKT(JTp1bw_?;voE`Q{h=?oHq*eL8R8(zZdJ>L!Vnt ztjE$zmfX>tpI`i9GyGBhv;c_0P?#~+IXafKTNc{+L9ihLp+#A>J%7x`RH|L22r2Q-)Pywaw=Hq-$KewrD z_A_Zl2r)~yfvG~GNAwcCnh$Kl{&d8}J%~=BBWTxVrB3B8eDl8XLBsD0Hq+Kkf}G<1 z@%mdIC*BnOIDHfC@6@+gTJ}$#{tNBrGR;ZlXN{W{HKXjPdOG~%3$Ykw5lPP4lBxSCmlcFU) zJEdDf#5mlhqx(jxL$QCSz)(jg{!p;dVsuFH_(0W6$@pXDoSkcbaLPBO$62-&s10SA z_sZy%o5S=+xgz_zqN$5_@~)cp{k0l43(}*Q6a8sy`AHWSTvAoU{gFgN7RSoY-}+jS z`!47n5@?iU(M+h772T^dJnwG5Fcf;$W7 zf3?vi3N7uYxZ0yF_DVPB(;iaIz|Vhm3Zx5!UX=Y0cX zHoH$Wl(LeSiWhFxtm+&rORSwPAPZaC)vR31&yV4@iETvw(Ak=3i@oG&`cM0aBFh=-&vOZBz25rKg) zlt+$5UdyW~Ax8gJ>UZdw5eyj!AGP-&h3NWeYRq^mke{VoeMNeZqXr!d1YF6}ZR$VOvP#636Q&zpVN{oK1 z!y#X_!N00Mhvtg?mu0d#4vF>`54PanXvP}MyzfU#^Z%S59eOVRjuua`fo)#ufOmJw zHfy{LwL*1&d`0Opj5Ro{77|b2mJ4+M>A|FNfD+)T@DF`rcKir2Hr6f<02}%(eDA)J4e}7lHR6o`Z~w z3S1TwSB)|5ucech1+4z{oa*(a_P*S~3G6|oWHOpf4pb?#cE=0we}P2$^FI7Gp1B%f zwMC^;%T>@p54_P*!k;YVTfVk-&SXjyr}JpEsLb2o57Lt-8}p8EvC>xe0cAn*#l>9Prb4uMzf-#gFOxM{tw zzyHe!{u8G|okgiE?l*~oXs;VL*rN} z<*R898&lqjGlfGB%Xm|4UKl@>ya5#jPT}j+K0Niu1RTqjSmkw2xRl3wS!f)+=2~@2 z8pvY?9#f-*qVT){niEEwJ{$`FI@~<(_alaL7{0oSWQv+cnno zJa~gR8rC6D!Qo>xQ}~k-D<+!8>d9eICnApln{}nIlDyp-jqrh*8QyBIy9iHRkCB~6bn6_cm#96$JJE426Xx7Zmt~UxY#Pv zqJpm+Z*)1y%MPHb@F}tGDYeq=f4HKe349eD2u6oEwM*+N>ud950{(aZ3lqm2KIIql zgs>?kqlKRtz6kDcYy{H?%F7bftrV#PU)27Ug0VKntgy5ayIQW^2!?Cc{363@K6t;e z0Ea!4NTQz-h#d75KduenrK_dM-=yCqCeelK}fOrPaxfY+l-?Wg3D|hThpSZ zlKc|h2DfoG4=~6Unds4_JsEad#$Nji_irSUeUP9vfze63{c{KI*7jygbo5<0Z_4T) zjI5Xy%Rn>onHB|@@#LjNbUjK7{j>O{E4Z^MGW^@t+wj(zj1->Zg?^*;(Bf(^bqFo$hx6u* zC)$KY#t(0Ci@Urq6A`-o^(&t9`JReCep^H$Z`5U1Vb0CaRZPKdkLdDYRrk0tza-D9NJbBFP?59452*+^aC&IG z(3xCavNac(-DTbulr=(6Qs8BmG6U!Qcu1WWoj-)9)?4nm3WO(GmVCujK#Nq@(|Otu z2|;E*>9;SCg7}bYuKhj7k#CL1uzV5-YQ_)jYg9`3sd1ESG1c=r!;Ya!qsE49Z1B;8 zXv4{(Pj$MQPW_w)t0nTk_wT!#P-i@VHTO^?5O3Y@vB6-k(PcL$ox(NRyv_Nv*>P~_ zu@k@C7|X4;u|gMKC`MnN`S&GHx6%I7L5e)(tA2z_^iTlif`q z!6WG?Um_ME)3cljRj%+Uq6D`JhB5YH?y(9-Rm;Ozy3{jz9IM@OJ4;9dgC`xF@Jt3T}wWOt4sbx#j%vr z7fQzW%rx4>`gCl+VB4bQ=vsAm;UGxijYMP~Vtsj$OdX2{mhR6t4A{=Vm0oEjakuz0 za~x-tT(y8j&K8)m79r-vag3r(#Z-(e%j%~U|G6G!itAzi`gJX3N_aGEP$7|vmlqoX zJ@ppH+MjJM?48D0`^i^dzV*O<^5qnt^fMuBTeZYhtv5Ux&z5wVQzJm|Y1VYK?5^^n zQ{h{VbCaC!1U+`gl_TGcRh7P#<@crC0v0N=wjV~JK8{|GBZLKX%YqrXo5iah*`pr~ zA&Jec{)`J{@6HlJTu%0F-~*!%=DKmXc{p-|F*f$TDEt1K3vbyqMaCx> z>oqB*0y(sJ5-T~(coIiD9wTJdl@#w`dP-%rhvZ1k<@FLBzPazpBst>p|5Na%2cI zCRX7d(uSLoO+2lJ2@6r5fI~%EzK?Dn-iOFop6qZo$i&e+{?*22FEe?Eqb<#oB=S9fho%h+tul81vkM zo9FT!`CpM~Ky@GmjPfEw@l>im*9m-t`5aFPt+7xI+Td(K4rgFl3NheR;~OUVL@FD3 zBuF{UX<7l7Bk2>7Cnwt+Z-5Fxx9H?5llztc}#Q|5joG zU$1Fh_0Oc$M*hK=hCt}Ki1SD%^@a20d&aju&F|{ckeb?B3I$xut4Tfn`xZ^5Vfs?< zh=cyP@CRiV%HUM$MgJ*^cCzr>dP|ndW#(Z}Mk!{s=$IYH`W{65a7)S1_bE2wIsw$P z+15r@@!MY~vcxi8>-jVUb$>bccnzf3W+WJ`$-@&CxUUM-`^eM?76+8xZLs0R>3q^7 zzl6!A74%a~ED8MBfwO!%AG?Hs9z-k!BI?uf=hFQ02r6qI>bma;{$Hs|GYyG>wVMeI zzE1II**bje)iG3|*Rii|m?P-(U+ab4|iW zuG*G2vp|Y$RFIVGN!tUdcGWwA!m7zjFjP!N;x&agzK0uNDC9 z_HjuQnYPBQo4~9x^nsmJ=#eeduz}66|MpmrUfI&S&S@%K4B~u zsE%yV`@QWb10wi0Lk01=)jNHsX4LN$?~E5?oUjm`b^P`x3eg{(+3PHt3 z-_OkRz>i}P;ypj-zWyxjyUat#{OpIscOTv?0ZqYeS?Zo7#&&zwG!kE-#)268_M;B5FLviVtTJw7_sC; zX34ATqQAG~;wG|gia(NM-H>NDwwp_Vi#&WrFC=cy$2`BUIJqxI@MU2Rpol2oNC;)7 zt^!pwWj(NNk7o>y{jp=r@3qbq_X2k=15e)a();%OGMuxqZ|eZgz!VP%+%~6&ZxUp=zZja43+0pbc?MonDMjo>3Y^skCClSov${)RLL4 zC5{YBHVP%LvqB=`Bu<0H!I}FU<8=Q&N6^6Uv{agkhOVKn_r8KzP0FU%cJgAR1X?g! zXAMWK!vN?$ z{g2a3(;?q*5)6jX+)#5q>|3=H<=s#Q&*18dQ8l?>o(pEacbx~D7@s_bwP=U4YqOdU zYmS27fAH!=>n3B-^^gn=m0Gp0pepvT(V24&INj1KCjFkT7)lT8w`~P6EpgSUe-h9}s zVE@A^tDT*raCi(AV0$J)FQGrFa4;!KLR01&^?OFm*N`nBC0?Zkj={Z7T0y4!^g?Kf z?f-_->Vv$s>bZQD@Vr2Zi}pqEMhD9yVNK1)QOUyQkhj$Ve$iCLK;37>54^Ykp)T>$ z(;w;_mz(H?Pv{?03VPhU0=W6XG)9X-x=>~U{a*h^33;#eQ{Hi7;@olomwEbww+;V? z(lK%617?afLJIXG7;u{hi@(AYp4>EnFUCz^XQQ7QS&np=f{aq|w1Vf;>!B_-BX=uG z5+|pwwzZcw;(8JAQg;&`1CWuoDzQ}D2@KwmKAgp?r!j_v6w5d*z=Yg4b5*+QFgG>a z`0449`&$e9dDD%^m);j2?Pqy<)DJZo#N}STpbdz2#D$ zpB6N8jT=WT{nejox^@}9N*9Z@>KW*uqw?pIpGd6qFs}7&%n@wSH7yBk>jx(QZ!5|IIf%eI=Q@I(>s2_jqX1C+UlOM8NM?!>&KC zVQ1QR+Ivo7JZnSGv^-vJ8m#vV`~Q)nJ`*Je?qo+ke!k?Hp<1A2(NQnQd} zjZS8qxU1y|IHDZeMhL(!F%hFzSC0kpHeQ#4tp8PYvE-CF8qvGMT@>-)Q$OE7OO2yy z4hNqHNIPkzhZuX}9@kgZV!CVB59hjO7W2qeZUbH5V4V7I(<2(J|Bvw0BxS%3ar+%F zmdU*im6m?On2g&HaUy=)mw)e?jslC8Dpf|gc-}HR>H^Ff0D?Cbx^F>kR-R`PoruQZ z!NH^|&RMfcq zSoXoP-c|@Lb3Kgm2$GeJWf$qb39oI&k9+8dp#7Rf{qfZ)?mp%+y+m&H8Uh1=V)5jV z>tEE#=f_5o1U%WU31{&ijweomxs6OaEGF&8SPxRNIILj)4In?CBuA@vM-&Kt!4wY$ zeGExoMMj-ifZ2tm3?!RS@I<;=roBAWSOVA0a~9W@YQSqMRe5o9R|m{WjFM$T5PU)FKO+OS)c zf?UohF8IEmrm?T$@Vf%sAwr9&K!MA7Evd)aPbu2}zXX#AUY$*)Z6nJE|8?EWWF=K7 zC2h|Ww+f&pgEWYxDg$qm_t(3YP~i#B(bwWDgEZmst`-}YDOQ37xm}FJlmzYObwU?l zMqCpv*AETHkoO7j0tPlTPauh(;Nb*BULk5c3i&o;26mdSp9|wX#m&N}AY^~*x2M)n z(pJ6Tz((E3j$*`5i=v7=4F=I3Q_(-Ab0vJA;4ofr_YTC?dHdp2Ik;0_`dg#Vk1I86(D;pm5ye87rczJmRTd-b zs~l-^K8PpTp8WCS-=U&pde_{*PvhEU05Ab4loz2dXY@b13~M_eV5M3g5Ch|_Gt6mW zb*#;tHqv)A!O<@vyKC9@h_eyV!e`X^v* z#s9+qpS<|ei^BOnmdu3E2|Hp^+)dd4u*r9Ijf2?8gCvf? zW5UULiKYxdgz2<2^we;LKPXmLd#@ZgVrkw;dik0TIJJk@6xv}^f7;mrY&puodNi0>;Ez=;DA04qAMPcP&t{Hqw=tClAhrvL8C_-7Fw zg^SYxQ}Bp&ijXNU?Za)y&YB`|BNM%_G>eh8k{We^qVT<>qdbRn>7{ntLdY}|4!Rb}T=V~4dQU`4qj6`ZnG%I0L~|6CXay#_ zMBkuVsmVW-UnfGYgAdQ>-e5^QgUo*^g*ka?%8yixSZ=5=r_X*I!u|LgY|&X=Gd=(H z?oMC;j3xG9dddhjrM)ry~;g5?fHUl z?lGo1C$9c~_`S2w5h6PHzfi#`n1o)uU>a5+**`jV6blB&gGnLiwSL3e@nbW2i#6aq z(g*jk&$HJu<~3GvATGTs6kMD@BBn6bsYf%&Q~@{z;LJ!1(MY1{Il2A#!B4%C7#kx= zd*ACA4rs;a67(O2ZW=YHnKJKV?Y>+_jN42xAh?e zaD7*Y+ZL_Uqhh8AknH4L1GMRWqAM2eSK=Bm0vogs=d-I7dp163nJHn+J*wVlPd?21 zeiMWOHI4*(deqsm^U3LVT7l|Ir5R1au@CXp5B!X;5}ph?N<#P}wEa4=v|D7iRH?8g z5_Ol7K7iK6@H4(>_-u^>*vQgOomrl> zN#gE@GC~S4Swq9rucTkU8f_To>Z-r6c}t>3a3FzaCrI7>!GYL&^AfOED$)kwz$lw9 z0lD|_TniAB9)ZGTX+ekF!Wi*7$1m5<_6|0}sxOSCH@&9y1`Z+Se(xlrLCVSdXrW({ z+}{15)X#Kd?4M-0&#CweLjmTI1yJdsjCgmdY1w}A2~Nsc>j09eP%f3C4NQyocw)0b zPG9+f%`R44YHvr|-TOF}vN3f~4-ID;DtD6?xUk<5tVOpjrinzJWtS3Hx_jW*;QW@B zghJJ|5kI7Y$vOn`vSFT!v`B?e3UZY)%DykVUc})A+Wc0nY75U^e8Ota=9!vmh z#Po7<{gZ(}*j+09CxgUbZ(eD+L5LPKva-{q@)tbSw~wz!Z&riFgU#Kw77EkIb9yL) z!r7$2zUtj06RYQscr)Y;0|mQl!mOM5JZ3YYE1U5uyFozF?EA);j9V{zaeY>RS3Mf6 zya9Kf4+Om%SOqjgAT4M(3N@5MZVrTrI+6PfhUVhsL_JsI5WKFBbH*TCVP^jFNz z7o9Jb>!V%@XaN4jNM=C{sOJQBL51a8L&|*@@hW$Tjm|#pB{n_N_cB~ac8428`w-_Ee?3FEbW^Raiy)VFd@xcY=anzDxdRzB zwFPcCOh1k;EDAPa$*Q^d|0814RG!PKBl1Z_Te0*!1RcLE$UC|qm?rF=tGg5@7X&ph?lzUg< zj&G|HZBN#DITLoF+jW7Dh#z<=73@zo16f2-C&uDi!@{Pnn^Zf~9SjM@{SiW@M_#*Q z7Q{SJ4^Di=x71am$8B@^Tri%DA>tFaADFdod7Oc`+1aQ~uT z0-vA@m14>*FrS@Rc={+g=**hf3uJC?0^_A}lQ8w?#NpQ~_v@Y12mOIGO zcY88ziUQ~b;N71}fd+eYZuV%LIs>bJb#*rQ&w~l$Ym}R`Y9V)Sa2;aQX(3VmF9V@M zR4K10^~-pw&)w~wMl2@$bY2OT-XPoQ_c#@ z`fA@A54U|AKJ~=K60Vc}WxBhcE*mp<1VIVD=>CaE<%OH)-*1Jqp+0pL^OQG=6$;ab zRg+AR`3v&5m|f&&(tN_gt%CWDMc1K^-gLtYwQStF-_nwWaM3k#+g96p;Q=t!n zRB?jv>6*t*8oNh;vOkq*`$FE@;%kWN5R^sxn39sFzTDKMnL2L#CHbq>alyB^Fx=!{ z%lq?VCtni+aOhT~dgY47={d6^w>BZRMVa_-cnPv(R5p^H@hVC#_bQ^H`6c@gLV1}Y zXgNs&Q66T3KuJn}k%Yp8{)DoB?8m`Q{3c8DQDE~+A5OlpKzOqQy5R=Ivw7>AW25BT z6dqM${~*m941Rzj4OZ*mnPwFlB;il!`1HY#+-_vBdhGEU*&o`+mI58w1k3Upj|p6Z zX6P0NvZf=_s`;srS18`%Hg~zjIZtI)MFWjBQLhi1# zlmWT`r`b$-_1qaM7-<-BSu6{$oez31z4|yu+Kn1gyCv5}p!@P7dza;94wc)BwtKucX1ObLI2f|W=%Bxm9x1j7{SV~n6C!f=xdllJ zyW1Wns1JUtY+gU?){W1@*Zkf3!uU1VG0CPl+UDeZ{~Ao^o6?Fg z{IMr4s=NxBLciHuFpULZ_8#mmfW!MxqV%cdPN~E9IeNnRD(`O}L(>1^P0ArQB>fXe_(rw{*SAaYPUq2 z@{zF)%n1~}*k2LA4IQIvIFb6_aZz;1cTmiXv@k9LdC!6$J0H0povITfra|@uNC_uf z1zSc-`u}Ns{1nol#V)SL1^4E&xQ|zg>GU=oJHyxhm$Nzn$2_XOd~Hz=d&i6%Z2JZ> zKdNx`PYzGeyw7Gyx}&;utrG(GbP)6ahRDju->x4So_M)Y?@YcjIXNxd(j<6>?K;@t zo=C6HlBu_IdY7-IP~cFA`IYm8uB|qR#RFF#`1nS>K5p^-$2P8Uifa4YoD^#YXi-J} zAKO|PQcZ`r=672DP67={IPR)hMcJjeyIbki&94B_(aqQ2e7#mndwq)TI4tOHLa%I8 z%2+IG!qfk5t*+5kdF8EI>dZ_tue&rA%@vk;yW$+U%ex|X1psjhF6joI>;gWdlJ$AF z@F{mRYTx<}mqX(n4JwX{hzY%G&|YB?y#GE9Pjk&HfPr!Z7kV*yEKg)$$n$^0h+dBA zI_*M*5Du87wDuW`PNlf%o*2y66Y7SlZ#ec^Q(n8IwH(#_r`+jl>H|XIBAUcM0=QCN z;*x(q2E0L3r%SByiQC}AQ7iK6PGc~rCV?q3%5xbv#SWJLsoaBgpd^NFRlbm!ioc=Q z0zoxS-qfG@_>!120@OJYjI^IMCJbFgw=w_0S^->)p?o_C#(XmaS&j=o{`Ie?1^nMY zNa_#>P{BQ_PJ_#~m9*D}7JR<_FdXxo6MO1DFEoS%^x~;`kpAyNZ#Se;nHG8f|ETeJ zQlYQ-Bc;MVBB~emsZg(^OLYwvX&B|1oKWiTu7ev0^G%|kO4pD)K`HIF7#y*=k~6lQ_=*^}`usGDhq6 z;}kC91|};nx0FGz%HjI$PckYFQ8_b%+I`!+0+$)w)}hCE_i@)>c#u5(dP(uONRFbz zyCqgUFb`$b0S$DPp}P{r4%4y44ddK3%tC#c-~M_2dYyab`wBntOml-E&P))Q`N;0) zf5@xXrl!9|CwH?PFN91qub6SgsHCSX@aoGO93RFM)H@-^2Mq&DN}l~W9sob_YT1mf z&_r(xiCs1AHaw`MgMOi!hHG)4QIyr-110HT8m?x65!U458e#g4h9zHLxV?JAn*Hj2 zw;7#&(($~@SD_Bvtd(VBBHYPjhlQSarojbG&|XSzj**x4;7b2`ul;j1+hi7!sTD2{(@a^3Y11X_(dX z3ZH+v%nZ{O*%!jccw!SC)J*$4z&ted^l=?JnD%pIeYlrq)Y1i+X~)0?tJZ!Dr5mQf ziU$e5FK3L=pRebRhB14)Nq~2~Z`kkwc!{c>=CR;6F{L`ZcPyS>N1?HIQe$>lD z?%121@<0Qn{!g0je2CeZ^1gczDDmv;t>xlS!HmO`TBKvY%Q+q*0vGHdvTzh#iff>(2LY)IX=C8wlYjrRNsufpFyVpKFcGNPq=qc(}~Ini!Rxgcr_I6#BP=3jMROx zV3Fs)U#m~ABOF|Z;onEcGDzk!Av*n%@0+;*44hnEd-dz;^u%kib2nxR3t6*2y1|5= z1#U00m?|L)4D8ZU0MvTmDznC~{^worNFY+u7*_fM0<{r}F8vmkIurYK0D!}NTfX-# z2Ab*cHM3qdFYqglpWcoi#mvu}F;t&M(Jac4N-f#V->eOSNusHO|6eV@CdIZ8=6izv z*{=vezoMOf@_x$4+0SP&$zB*`TuSJSMndREzigWqN}R=;l{vR_!B|H>`g8we-toYl z6Hm`P2YtS+wbE8#5wDPXLz$8DRfTi4u;%yg1T$tC&NqFom0cBhw|! zNQis(^zUi5>?4WfE?XlAtrMi#KP_DjeJR^_J>7ofbm{(iv+V&2+>f!bHhoovf#e>h zzX1dDJz}T7ElB^A<0^*|Y7{U>n-rYDp0~dQ^C#al@e!8d9KJXglqAnacKvF_cIZ5NY>{oSk2I-dUc1uu@P zAB#?A*QC4|9J`*|g_%pWbVIRw9anH4q)cGnzJ``r3r-=Pe;7e|Jzj-_2G&{qWE1;g^Y{tFeZ<)12}zGc@;9 zPMUJFL0JFuAK9Zgk+-}Z_5ng@NuEfBSLa6caLRQg9f`@4uME*za4ocPeszE?PyU=} zw=U2wgH4x(H8N+=NRQ0=qCzaXJH-ZyUKe^rtfm;6;oOiX;^n%x2gh7x+50r6U~E=< zlrY%tLi%wF-Nz*d+>v7 z!A+LsB2v1ti|T6-sLV`*+Cg<LTGcbA9{@Q_2ZT( zoqaqO$9}*t>wNfBO)lINLHq>8^ya15)TK3pIo*j<{6sRU={iK-aR{hR=}l<`eq4b_ zJ+H@$URVs>{!NcG26)$+%Koi2d^gPHK1Sdx^n0jeduk6Z>kM1MBxrxz`1S1RBfqFK z3M?+3EIRSs8;jE|MZ3qZ{6QT3+6b9$M5M_y#kOSqLnWBYHjt{g#@P_*=0H#v;K>1% z*mr~Kl?n$5bjA+|T3s^h@kN*7-3o5OSr3uxwiZdeNCgGcS7?$%`adfDAj>o`jytDb7R zyfQTGAqhtq9Qa|O!0#NJU@iOd_LUs2%*{MBbr!Xjq8OHYF-b}2Q3xZX|6zG?OCoDN zew(%90G3J)$@ZbD2!wmCSp<2Gd|DYe(F}5~%hBj9uA&%eA125= z==_V{UdOv8BUs(Pp{#WlN5%0{qiyNTFhug?v4w1n7($J~H$~<1(`jk{GMy@`)SPLj zZ(3Q5#mv&iG_k!wp<IFfcGv+uWGNvI;d{(o$<04GHaqb`zMFKuX?5sm97XW6S>hVf*x3Cwg$HP@&1T#3LHesw!m9;Xo!>v|3)wE~w5P?PHY z*LIA=iNN)~n7Mp-Xjrer;lp_#6tQ~vCFdBuKHa<{F~`ht)P%8FOp{o2k&)bA&*r?1 zw+SE7kagNoRKTrh3OE~gS$1KXvAi@vw~IC!5ODnb3ZCyxbhXpPZA2n&oUn7bGqg8U z=$KJ)TaZYPm55SPe_ff4e8?&N&)z>( zO~7w_Jcue*ueOUMsxbBmI!XM0_Y z5di@y2?1%5maYLMBm^k|>F#bAX3ov?yzjTZv(8%Q50!DT;J$ykuf6wmT_*E^brh>q z5-#HsD9>#~RjVpK_d_lx8qaj?U7>A+6j-e^F4^pIfO{6Hsw-Gxm-0Kf1AJb_4w=_Ll4eSW`w& zIA-0fc8ldUz`6BSC`4i221z*z@?|&Q<6#Xoe~??L@NQKdSow&K9^sg>gwgDsUwA+J z9T~z}qG6u%7YGFxRbE0*F?U_Ds`+X!M|L~48M$mNPyBm%Y`9kcRP58ouq9^{%gDP@ z97vb7C2y-aGEKr-ZHI!-N=rf@j5<3YPl7w0qX$}?B|D=Bl@0s z_r7V>dGdJ8q(V8;Uh+JnlRGsC^VR*;j%y6P} z>>J@3VZL`aY!V@1K-$1t5YN@tCf4;_F^=Sb$%M*L))R|GM?}?d$`V-3xF2I91##aU z67XGtf=BD|z}k|UTyN9Am4=U0ZwPkV|HGpM!p(k?T=ry*`s}CIYnZ?(kEwhZ34~My zq5r>mK96H;4t62`lL}PG*YKFdLCH#Tb6zTkNymtDbZ(Uor22e`5GS!9Qw06I`efUl z*9izZS16(90+wwGF3KTOg+mM&oQN|l8%mgiP`U~9BJK-m_2}DNcOLR0FYV+0TdQrZZV$h3(p1+K zZa*K6>#+u&F&Cs$C?+hPP}8&hSN6~n-8`{_n94!;n!~!EAX61<$zUgLVp%0>fGn`p zy^BInHq;~z592A3?2o9Ht<<03d90RYR5wi?zNO}X<)Q5E9JBDP^&==gQpk{A0S^(O zt;mWHIU-8Uz#HVhu^_5{o)RhUF&GS7U$1}{v|go3#)0$bK07hm*UZBzhGI__J%ET> ztGKnC?%cA12~-)_^^#0@7WXL_Stkty1k1%Mep6xVKAsPs6_?0Fl<;{(y8%G1Ob-ap zI+tOO6&Ag|xA$&*o3Ti9eR%xPx@FCf6?M|PqdjB-;NC}UriqSl`m_rF7Zj&t_epX^ zo05AeZj$TWt1WWePrx~6O=dgT?`}LL5QXYIqVqBdOAs){5>H5wzT{p{Dt7Ovu!nTG zU@sM)1NA#^qhsxgfje>XXLkla%SLujw-vWU(pj;S|41Kr*E7F@e5sfD(ib%&;Q7X) zdAWM?^>P?(96uwAzs_b5y`hyEaSx-EQ`4TJww16ifL zFh8+}KTpO^3raVhPpl&grL$Fn%RN^>Qo#A7D*E@<5lKeJ&m`&P4i^Zh(3xAVBNbWl z^aTaU&M2TLp;H9Lo(-YLG4Tq&`jJS9sHG4@%`o2WVSlo$kU@RMyr6IHnPB)cx`e6Y zd39l&mf9%#tCFL4C-eJaSXe959R=Gt^QM8ehwNIQ7iJ-GBF7Jpg`44_rz~nia-1*i zfw&TK*j8CpAChWp8BkVh6vi%AtKSHfnj;2D2Q86_m$mgA+{5)}krP+Tdv;J#q7ANe zfdHYsMH4I8+sNyCd5=E10?fq9@`ZtNEzjc!R}%KraFF(LtjjcdtkI%zIjm_`wLjFP zqq3$(e<}st+T!N_-sV+|Cr3Mp;Ys6VHrzYc`s}(5_5>tE{l+hSe0@+kRw#(N~AFB znme=nhj6>hsuBl3SNT-f$kQh&bHMtZzdXrm2zTki8#;F6i~jnj=8DzsQj4inU5242 zn|LXgP!-1c_&!q82%IUVVLH7!!jc*_9Xs)8Ev_h#D!iQMTist;+RQh|L>69VAokZx z?NyzQr(`ECgl|}%`oLuBwa3;y=0;-KtP;m&HsXA>8*q)6WTpSKu)L6(*Ha_=A&WSR zq+i-$lNpf3RYns01P+8blO%h|N}tO>pR5P=EMcC@+=?XagBM^M;5&1Hpif7cq2+^5 zI}TakxcAAPEB+#|b?g8V1Q`B>Uhe&l7zQ!Vy_p9y2yC2Z^>RS)7w5zTLC1@TLMf-PfhQ|;offBMt^rUkLOX)aR55XP3QE}&hik+i>g%;eVWxMeb9sS zt+!7>agZtM_OE2Kd*Gvfmi4vQ%cxPTHvDwyJ-?or*(TqgV<**vLzK8)1{bb$Ykw4m zqC)*;HcDNpa9;fI^BWNN6@kXUb{8T@R=5YF%}*6ydb|$Pd=}O|K=J$MRK4|g-;3T4 zNnM1wV?P?sB!tH@j0>ksV09vJQ=6C!_2f^2*>{q@sMnb!5_r8^+Y(0G$jOd{($_D? zO2wH%+QVE@kss9z0a~Q@gWa&&PRS(HxDE4fJe}5bnVO(c~?kqXkj~sG@B@CD!|U;{<}u zSQ4!aQiXFvh`+Uo6qSBQs-VpWVfm9tx^B%?WD!_EQ7GS})R* zCM^7%%yS6}-#}p2n8rpZ=<_jc%jdZ73*wz;!s5&!G)ot&Mvu{{J zD5d^+N9{{-C2n&zHi7F~BpYLkg8N97E0~V{NOPOy)2@){^Yn`)&J_#{R_K&QanK$; zttTHO1j+$86_*4kJ$uvO{_p(3YWT8S!qBqL8rQF`3lfq{$@;N)r9j|tcIj9mDSxNg z9iDov3g*>nS0L_~cd7Yb~`|OK5o5Cqz7$eI%#p zm`DrydD;HS)254{Ly92q#A|?$b0hW7m2Yxm{F;G{{`s5WSDK>mVtCQju>Xd9&_8NO zn2H3(KLl8n;0}8BgvWmlfgI?b zJTp5EuS&Ld*82T&m4mj_nTjw;<8ebqHYyxRmV@u*&ek8?AyLtTa!A7osz=et-i9azZ*HL6t;aLJ_n%e*68 zi<4Yb@r@}3g`u7S>DD>Jy0A=E-46sFINmSmtvhkE^%gS^W!!t9bZd292q~YiWFVd#r zY)rD1T#&iGm?dbuZG+8qCW?O#|IEr$nxsAM?4t{rCZ3d_J}#Tw(wh}*_KuqRO(hNs zbYuhAcijWo4^QxpCHJ?t>S}RjO(M*uC15_PWpAG3zjxC&Gm9Dy-P17tsBKO{HEUu? zHA74phZ^Y4*8EA+U&u#ruFNXmLUN02L}&*|!J{&`lY)542`*Q*4}MU#1Bk-%=7{h3 zROv~@M+Id$)wdh6&aqbQc+bjXNJ&qZ(39*hzioLdV1YF;JnQ%4C6m=YI~@q}yJKmQ zUqt30tLt6w_+w*kOmBoJ#uV5m09kp^ozde7G_aNyLFk-dD4 zf}f4d6>kMD&29$K31cMDE_((;M+!hPjyD72K29f!`x$MhBV;=2VIiDzv)F zc(J^17O>6rCwnrLIhQxkrg(xcRiFg!-!MO-pavaCx?KOL0P6wR$PDMtaX$f$cdA>_ zDQryfM7Fhu;-UdOqP1hlw)u!`kD9HBQ~bam_BKC%apRQ{q`l9+_%Xb> z^@5uh4lLM70SOw4)riBO0z_9F_HLP+_DO~Nc9#LI`tFT_7)(iz<=`SB-w_HDha&~uLPX{jy{F1&1(-^r1M4>P4gYU%^p)isgaAojEd;I*Q zBs5H|^{eGqp=vy&7+w{bXsGk^Pn8hLV<=v{@J7!vtmW|B+PuxFwArOLRzybRNg$h3 zi+yZPgxbsx)i!vMA53fPALb~zjkE-0B?ZpBl1mIw+D}P4Zv9i#NM$HY&mhy9xHfl^ z>(!6 z^anma1ExtpYb>|IgSFwT>zwyGbh5nV_>x;H`+X<}oI})Z(4z73JHYnUT?B4Ya08fi z=5YPVJ*%eR*4RUtSq;Xw7x08dRxMw1L{L`1oKeQW{Seat`(<_Up#Fh{v_YJ9q2TC~ z7cs?4x?yIkEzcG@17DF?JTmn)hJbHbY5&SEfWOPB#cUyS<0D815(h1|2GEvZ1Us~= zGfJTz;{OGEfp-kt0@s?M?Q4()k~UI5@p7r+#7$jdcSn#-a|#)-U(BF$#0L#Nv3v@` zW8Yj|r37Q>EdJe9#<>JuTlsT4cfkPe39vg3Rua#jO>`-uRFIQ@wR1XDLT#0V%br=_ z{)*w%c1`oqIH3=*k7fIKc=7OccQ$?ersZozzk3JsUtRg$Hm|3xR{?*@W{KRdd%e}I z@fEroV4tt2jHY;;ORu!R{3_yQ-dFiI)DPo_&q<_6m~9l})f_{;8L?@|Eza-l!+xgb zLAC7xc&7vuVQbUb&eN=EHw143^(Gpb+L7|ROO`s< zsjzS5O~m_c*FuaQ*STdO{)%25CdTs?qwAF6!ba!c#9adw5(5?-n45Ls9L{Zfkdh{ws_*e0FuD3AP_@m3t8F`;X_ z4LIAoLLgT8r=5*hJzO2Q7u=N+Bs!?FiW_)-S*6Sro~V41;kCxAax&VFFMR%WSXLD( zcUx179B3O)Vx<1fNkS8@?t(KSb*G-D>aiB)%FnkGR&k%_zZ1HT# z;n*(JAXMA(q}nmsjf*J=3Xsv_bU*VIw^yy?;2dA4Hs)LAcxbFuU^$O8y9xJRSa|4G zQqdliq>&u#$$Cg9i-=oDc!M9~&({?w792&d=F9vkD&YVC@?nZjh2@vFwan!nY&mrFON2-Phky+6f(3}&_I2U4gQLGY)xAQPS=fd97xvRc5uI1F zIWh)wL``%N2U_eTnHwefiNxSZ086e!KQC(+<)jY4**HM+HP;Cj`&?vmEjYUgIl;@{4VJqvf zQdsc-@bsyVkS}^`5`m6aD9`SB#Qc@-x7Y@Uj$K@_f6kuO_Z%F~z7OnMR`$Soa%`Kl zcL8AFzA(U0Nzi%-5>NNbJ=m2Xk2L=)?RI7D7>cvgvxu);NY}9WXf@RN8gH0*8p5q2 z(G4Ib!z^Ew-N~TWvYm%L`@Qs6AHE`I+v$rfoNeTI?n8CuRez_-EZ&my)-V3q|50I& zZYonLb7=B5&ksw{GqRqe2SLb!E25E_iL{$fLjBQSd)VUL={SqKLrbwbfB-r#tD~{~ zmR(b7;$*gcboZ$4zH&T?hi%3+Rr_U~Rbcjo?7kf;1)moEYylYsmsXT~_svnL-AN$? zXlsc=2mH151TBbVxBbp(+~az4UDe(j-y2Bxwu{%`>YQw&d+sd%UdX01(tQCe1IX7r zyeP)~wqyM2*-KnT+*}697j{7+y$8KKg_srU#$U*vHIR78j&1%kyzEY9cwbK79RH2x z_GUrw;e|mQO7j}|;*~+3e}lH+|}6J14D#>BY`k?PY!lDIoh`F4OyCzlCSj`L{$z`-F!-1d5$o=$#A)1 zrZX_kzaaC*e64v$u6)P;S)YO*Bl6t6_Q9=vB4$mJLr^o=a0G;Zv?y1J2f zy|Rrrs@wFwCA`Mi3oG8&44tCA`K|AGX87q1qWoFkhASx}|68Q!aZE4SR}!TO?hj;| zT%YTy{_C*$8Xg=~Pnd`a!D%`)jF7T={oqhB1EfS-@$K8gj%WAhg0JVj4NC6N8FnaM zI&P&4tj18?d&_LQR0)X6PZ$mFaD@yWu<_JjbxaRcHMubKDe?A=ARkL9I+#_=hY#cy zE&fy>VYh$cz!xI>`8k^Bjlf{l>^{afZPyrsCjb1JSw#s@uki4{j3Ox90{Ou+=0Um} z0%G6gHEa2IE*9MGE4>?gfz8VEF5(Qhxa?1zu#gzrz6d!ENc zlx;*2cYz3C2D=&2wzG5Os){KGTr5Zf>GY>Vce(5u^lCz%@+1^|vivU_x^C}c6LaVJ zy?G!FEIG2m+4gO(X8(%BrJm%5_3Yp1L#l;U9k-t(A=5EMd>{YeL^Qp+-e<#|)ZXgt z#=g76Y5&?bpU;9`CP*PcaJsJD&46*rJ z`$Z0Kg+u-uIe7n4WSc>X98+ZN!>j-G0^DGU&=nL291ZIiD!ab54f}zK^g!2XGn^gw zFxLacrj((UA!^XC9q=Uo5%3UGd{6aWUW+fb)p9MbyCYo> zP(Y#Z9H6&SCFR2XNB)IFbX!gCW8>quL~7krG75?!qpVv>>d6xDgx!ta>$hDiK!h`d zdg4lLBdM#Gg~9tuGCye?vmeT(xt3&LjiQ$fE6!KnSePzXyZIUv(6iq1 ztLAju-3-<52E`(or|%MmR0$fMJi#8~jiGmUCqqUhlTtu-pW9Itvt)x8c}obmGF^O$ z>6~@~O?H9O(|RWokPYxyfAK!r(+OE@H2=AMr2nDJfM#Sr9f>(Olui<)jlw?QpKg=n z;^&k;Q}~wPeWmqnUj(3P?PzFIY&@C+N;ledD||aENzLnAJM7}**HV)_|V?W`-N)7HT^8pSMbtIC*PjXC=!c#K%9M z)r;%7T;Ha<<}p9+Q(lDl*)?b&yOHjhsGf>iM}=Z##T^pGDp6+kXK z_D13OyAOkKFz%hp`L*+F{2e(SVobf`Z^oe(3gP5Pz-cpmxC2co_K6>l6hpwA9@0Q6 zi8Xm(u+*oDGiVMBkWeg9vH*0<6%-?s7yzb5Ao2YKenZ|cJcr!KQ1Z`LFfz)GGmZHJ zN8Y|f&VA^AhQSg3g4J;XR@r6{0N}s7m4N+-a-W3hR&*Uto_HF^L%aQSReQ#tAGEL& zCG{Ut_54`z=zg!)Kkah|Sxg66$s-ZIUp3X5|L*aTab|Cf`a`t_8tc08YMZ{|>erv~ z2$mVXoIkNrXe(}22UA+ABAf5GlZ3cq*3&4BPWmyJ*PwPxeM^LC_!xSPBRZ!{YR^0ecNt5sJu+S3Q zV`+rRMbskuRJc=n?jd*ZORR!=Rk@BT@~zAkZe~b^0U!{WzglT|C?uqbb;pl515`s z?Jp=Dzs{Krev*Wy5RM3CR{;djfH@o%{PWxB4!w`LM!ZR688SzW0s^E59$3E%XhZ^Z z1QH^f0W!A!&HBxkiQCNprAZ$-bzAojTn3esvJN#M*Zcoo9T`n*F$7TjQzf?gyr` z7xF*>Z07u?c%z@a6;>9n?myMw7Yv;v;^RmJA~+-ekW}c+E$Oa+NOadkIWNf)fwfO4 zQa(*YW6xgOe8_~i9Vz~(WxJNf*Y*+J9+Us;!8yYMP*4-_on`;y@p;IBqjK$iNN$); zh9nsYy^tZkaMa^8Q=@<==LHAvM4rFvbBmXf4^)>91hJ zlMC;Y&!6H4Cc5YWjY>5g{h5<+0R2ZUGvvBfyyITU_x7%8uO{2H+a=L`;jp{vI8tOV z;eXu^6i8#jqmJ79C_LTO8+S`q0dH1zH4-qZ_oxS&NGFji3>gMJ<6bOl@r44yiz({- z^!HDI44>BSOMDa+G``Sv-6-*nWcrOJo~J3p1+Vw_3d!1s)r9D^3G7F}u~+&kcRW^U z)ldWuTSmGZSwRmPVjm2?2_?@r!~#V|4!$Y|nTy`Ly6nU5y{Os0W|JOH>kfZ0 zV=^{jIx!b~T30SajgH`mN6TMc%-qSLsP!#tMnSs2shah>>?Dd_lvdv$rvC9Ygr`Fo^ z-hpx?9xkjZ=z*vbh=62@hKUEo=|Or#3nel*l|+z6x*x5C^O=XEzKY%z|4V60fHO9Q78yt8RrT&PB@16InUR^<$Boc50z8@u zFq*`mJIu^AUJ%`Tz;d_(oO-I>E+DvMy*ZAjOz z=Y2D?jn1=of#4;d%cX(-zJ8$UmS)CE%-e@PH}A~s{wRsJ51u?I#$GzT>PiM^a7Ofl zu=%9VqJ?Un)JnyIq6In*gnY(SmYMX6an!@KKY#?8-NgHX+|9 zPezLkoRwZb)wdco(fsAOHhd57LSMi9W-&TMkKryqH-vdLk7Rz!_gyfo;WWzw=!B)5ji0=mEKfIz22ez470)&|^&2(eqN7+q=MZ_W z;_dyt&Y}PA^2OnD--FG^h%1x8!yPyE-#%c&>s&CLE?P^#x7}f7tqbF8!<<&&fY63nQlJok?N4oopPfovfN4FKGn0=8=IF2@`%^Ph_f`Du!e=IDpgSL>sgef#~H zPQi91UqnW*`|kI3v-}HfAu4Y-hEIRAjo_Z#?+RZCJ^Pir6&ZQ`(4nQVaH#**KA!ZB z^BqVVH5!CQ#xb!sKmZf=UC+C)5rtO51q<*yV)wsNZE!p-wK_lqc)TY-&S$*hs&tS5Wl=zBgU=!V*flX0Q`OnG+x#ICU_NLi*ovbV8#P|*xPgW z@$*~Wnfh-0s8?}hcGfLT8FWm^e)Q$dE1;>04dd8<*mYPH#Hyp->+%B94WM$wuQx7E$fB2^#ld;XGWfi%0O2e3n^0Dh>y5_~wfggq3aBKq)n=NWqF zt9$05S6R*Z&Sp(S8=xXS>F)nt7ZCMh@O}t`Avg)ZFsA`r$H+NBvGt%YI^Oq+@db$M zPPEg5Mx*=6f-VA+zK$#7VXTBsZgp6InSYXMa_29R8Nv2iY2{z`J^bZzHdaz5Rm$_H zY)GdoA8Pj2xKfbS<~kIccUD|np#lAPbHru>Mrv{Zw{0iT%n~?rNNw(h+|`L`hqC&- zer@aNNjX}m^|Qu#bmW8jNjNZ-({#|eOLU?K$0AgeP%DAKd#!Jo0@#Rd(Xe3(VpzJO z@G#fR`u#eC$pzoMtDvtH#lyYr3Z_-Yf+bL>20NQ)rTvOaC&`MK`)__6HP|xm8owe zMg4(*?{tYy+RN{PYbWeBn}T(Wn?HPqp@L4DyNR>iU?A%MkFL)t7TP@&UlGGXQ3Q*K zEJ2W=USERd8pTIAPcPWbBL@{t4+FYbkM)5z*5yF$JGvw9XOzMtAYDisv#JKdcm{*a zNzu)e4cOH$Mnz6HNaU8^OPngL4Tg$c8X7|>?ZoooPNq9sMs@WWw8%ROkD?5MZXxLl zss&AD$FN`k#N2vrfI8C8(yK1G!!-9x=Iv1iQ-+sQ=W@p_fcGt7fWCn@ z4sfQZ-lP3Q^FUiS$wlcu+Ci<(Szz=nhPxgR<+<)iu{(#rKsnTrO^$!W-ETXE~F8hsL1l0Ow%j9sSk2<+DzB_d$PTUEt_nQMkw_CK=uvPNyV6S;U_plDexBdILU)If`4=;q_VluHd znb36Vavy$e&OF^B1mC<)3)c>~*D2Gx21MrzU^H3aFp_>FX$JK7*3Ez+C?5t~_u9I&qq?})yS*Cbx0n{!@ zrasmbb?LPOxD^B&UK1%ux8ei#AX_`brE>hXg&E;zJ*L){OH_X$`5@94|KSgX1}aRRkzydlFc&j6aFiXkFn7fqb9XP2t^yGja<+mf_~kSa`by2 zDQv{(zARB+%%jkUG*(?U;}+qm;i-Bwg#kACCZ1)}f}|G*h3?q?3MOIq6D0F8Tbzn=ai-CG>LudX5j^-C+ox z{>x?vugWwexH7Emzx7rcHU(>B4$P>NepCP~8f8C4*I?q_$bM~mgJk8D;CI2XDSsl( zOvnsqAg#m^jfMMfZt|v9}2Zh_OW5K@e4VsJ9Z&6YU~H`%$92t=p9N7YA8lL%0}P7H`bZ3 z_ufIqfD2R*^OFMWO#`wwzw;~m%Tot6hL0P5ruR3~v%~3-C+{I@E`&C=3522ttpX5L zje^hikcxk4&(@1SDGsMw8M<#%m^R)Bbc&{u>$rV8N*Kj`deT|R%%1r7iw z*8*Bqvx~jkZ#yxNO`zUE;v72cMFM5}vMgW{a7!cUYPyI5>&A*a^(#w1zSUs^hundV zKo|0fq42h2MLl)0A6RBQB+wgYI*gUDhE@fy4$T$T5|uJqQfNNR{zhlb58&($j^_TWKqytg zY!!!ptki6`$AJdxC5Ep%=Nk)tR}?7YDbh*XT)Uj9x6_$cl_yshk!BAmwak*NgV*0ul^^&ZRX z2R_K`S@M+;j3QUkRhPz;tds8%EOJM@a<*7CKN6!f8VV}Nc9w5ViW?R9U+JRtg7O6w z^(;tvd#{VLCoOdAfCS_Wv58lp3ZLYeW_|L%+Jvk{=D_icQ8zfioBGw~Ld$^Nmdhm}C^@Xq}NB z;xDHJfGq|QdGc}DVz&QVzer13_gX}J5CYK_Q-#Sf(Uc$wAcF6oQ>Z4irC#UKu>)!# zKJu4le5NA}a6vmj61Cve5YaCh*l4QX9rH2)8{W?}O%s-+1}=+6)>=};O3u=Nbxwkb z_QD*Bs*>sTC#`O0_nmn6VsGR1Pk!66&ZxxA`TYw&E!-pu_Fn6g-J?);4C~rmz=vIZ z^y`J=G%b5N#$h*stSOD19x`Q!BZZB2M+T=MY%i<7;uf!2)(L_wjtAwL zURtCQMEU5R-dGvajce*p61O6+ZWX25Y~U5C&dvvbm>uVHL!PMMbU{J$54&E(j_(CN zXpKZ(<$uxqKfY=ZDnx#^LaKsKo?0}qbpzga-|h^kJ-~(^00f7@T=V$DtGyIt~(4p_M9aBkJ9`a{qsGh5``Il+Vrx|Etf^ghi@fS~8{tCKh*Fa!Ww8C!&MfU>Z# z++kyTviuL_)$)W@^CSNv>^M(KLULl&fat|b*YZTC@%8X|^+_4a{yNIn%TlxEh7h2- zXKpff-GK0Ew1_o2;zLiL?@aQHLZ4>1l%Q$$5`1DcT_9C1%Oqt;Cm`&g|7Ui~g>}a{ zl__%vi4+>wBn3wUHAEz(9mA6%(C(q5`>aq$jT$4KM{&KBfD!cw_|1*(6~A)5@4p8#_^r^&F42L zSDak;5wY>%(4koB1#w=h53gWN2LxWIlj3997*wWEh}q$@eZZ!yPU-YrPP;F1^x}H0 z{_o|Q-&0tK0(|h*uI0W5Z@kv3caY-9;>7lDCj#9(-_wFUlaLEK*U|NoIM}2-*s_)* zX=G~G1IK?g3~#Z~zbIP9%vJ7v>8$-;@nk$UdJHQNxAI3G61_GLxoLCF`_?RG`097? zGLb`|rRm<4>;wq(c3$BF**5D_Ts_E!qt25`$D>)5V~tP^j=rd(!OD}-i3}Mk!->*? z_tfpx4Magfrn!meiRm_q6}WRwysWlnqOC&2-S`l^{6DOJR1Pyz=)*psTu)KziySlE z*=Pmq89yrj)Gf@44x{t1(`VKr=wi{2FK!S!#UqTP)XUP|$yOSqu~)fI>1hcO<^^m2 zmBIm!(qeXs$6X}tu=^NV|LLntND?F&B0eitE*8=D_-FMW+2_<~(82K6^U9??)SO zu|9u=@yWKif=OMh9OG<$B`|K87X{bWjz4^svQJS6GSESUm(ARMn_~b2=85c@yN-~Q zKR$TtX}b~vhJO_#f|&C1r5L4fyo;XFdl-JLds<*diW>E>9HR*>e9R9!!UOs8r{mx` zuRwr*59c<(1)$kW>o)Rsp$l-%mPYN?eNanTZTa3{TVeN_%$MMCaJv+$cJN|Jr>S)d znFLqs-x5E(4oIQFC|?v*GBeJkF8!Ua**t3_&mpgbIHEhlU1v6Q!q0>C+8wUTv-U0T%B+#b_`_#u zotAn$LZxL=gRQ0XJ&yjy5uyU07YcDnPtI+J%3phuG`lh-Qd7P`45E63$5MhTuvg)4 zJ5iPs(4!@+&#xm~X6)X16(g1+MBtQ!KxtV$ zFXSipd<`#a(CgZJa^E0}rnCXI!TF~sCzEErQM5zpKjkZRoWuKO+W-d^ax`Y5+#5DO%dq%OSKll4Xrrmac`sofVHwgn@!C@n zjeTvYv(eGaL@lU!AvJ~Ac^9;qAK1(KM#mR<_6CXh zq7J7lXFq?r-KN2Ti%?)(dLq(BDG@=0hhicb&G#pY4ys&(HyIi_dIPSeqVH_%cO{Qj zbbpu4CQsW+;BsP#mpgPlP5K@@Kx}-tj;$tLcs_nLX>+!5bEqs|N36UY--f=X<%t<5P2ChZBncHIY>z4GN(Cfkc$yH5yNlbt3Wdn z9Tn;(0v?0?a0_ZrecTpYue!woPiZ1J`zKLA|9kLu1{d~RALQfk!-L`E=)mK_lY@|* z>G`j3BlVpA*9$PGk!S;{hLW!1S%MRObz9JQq6U7V%U40H@>Qk)fer`{l)h@d@{NDI!Z=?ofN#VI~`W5OG&U3TS5L04H$| z&bzT;oAF8d^U+b)Jgds1@vs;{ii+Ah?dkTsgy;shYH(ZdxCFnY9VI$xo@8X#%8EgG z9-|Gc8M(6_jiriK`XcoqH9(5b)21-UuRwVYVsbP~1=DGx$UVp}FW29QjXbu{@j z;?*(L6kfdOP{n%kp9Y4K9j^uuNhnI%te z6Ezy~!jtXCcRpc}SBzDQ=Nu^R?F1s!po_6mx!$>b-_U-+0}Qo5krivJfOdE4Ae$%J zVdpeqPNSW=^kcX~-`mttihN|^sYAf+Zj!ub1Vd1Mh^Rf?`s}C;x0*ox49Ggy)gC0Y z#$#`cnV4YuO!H%~Kjm_*z6-PgD3MdS3sWlNOrej?clSGE4vbz3ke{48 z4tS`f^kl#KZM>ezw+x$O`%c7VYSM_C;ek_HUT7-Vnq=}g$NWb%TA7`e?1PIXrA8%- zG{r%PG@D}48{w)~%iVwM;%1YiU+;V}2Q~0x2T*Z~X|?hkE<`zZDY0|ih%WjzG9Sx> zN&FYv2UN`(8-)KYi4c z1v)aGc(&)~eA;@p6$dJt|K_5p)2r|i+SbL!5@NoiHdPcx=WyA|J~a9VFAN=&gPLd< zoF1FZe8*OmGT#s!Uw+`k1`LoP)uOgB8xvt9{4~hUY>{F=4aOU5=a33l~=&?h{YhS;&!1?{=V*26BqOk0B z1CYi<7EP{?GR|KOA%f>7eokyCf@j8Rf9f{3_IC1eo`-}VC7Sa=;2pJRM}6;#%u()- zzB>r650fY4rNtg{rzgME)hRw6laR|5(Z?k+$|fh`FtN{mAlFv_ zM5ZR6+AZHynC+hqp0IjX$e%F`qf<7o+6auN($tX!elaDr`Ev2bOsIVzu0rhkK>8-1Mt`d`5PhwS4rldeLl-M#_7IanaNCQbviB)h_Yev-EfymWD**MgLe9|2UBOT?jIr! z5_Ny#nqh;dwEm*3DgeAz*WPS_3vvJF6O>K5C6?TA!osh>wY73Yg<^mKQiB+ z8vh{Q{LhG*qg-ALhFnQz{R(`n3jFOjHvU9dCa|?S{&HDdd7|t^9g$W2Sx&?k5-VPx z>%hE=aoFo66V&9U#syvaykXYR^hIKowf1r4=4@)HUn3#z&ek4jZ;pcEvd&<0nm_nO zyWZj}oNEW$r5aH}F%iw#ivs#~3ak$7838Cn@+B|s2MtgYla-&{)LjhstYwY+vXku{ z#+k^Blu`;qy|13qmfYOolm!_$AZ>D%p-p`yv?eKc}Y~chUBh=f7)##GJ~HO|Rj5dH#d)pu;#@-t1nWB?)`K5Kgl_*F)|N zy-RInA8kejRJOX}h4T{_#>WdH{A=j<`&5#(05 z_h^b4F~ht3_wS~VR$}xITD3lvT1iAVhNZ~jrk$Kti6?uvRv?8RBhNHF{KoN^8Z@gI zj1=H(1)orY)X$@1UTgJ`(IA4k82O&aJE-C)`UXq-O;q4!h`;0hv%N`UQn6vn@8;9oDxH!AuU^(5JEo1R% z0nXX2!h_@uV9^VvBS_k$y;dWj=Qn`H_Nzz& zbJ0hoZaO_N!~*)r&8l7&_f$!U<3WSGdR7m!BGkYfvj#KI(x*rDit@-6P$ol(8yyzD z_;XyP1L1Np2Tlj{_#KjQ+V7Xs(nNnbc9+0w)>@JM*UN{^{mp;kSK}R4jFsB;88`4e z`Rg}VMA_38D?AWI)MyK~a`WNRy5$caI1|T8t-dp?t~#=Y_{F+&B$zwa;p|+Gtoog< z9|vd?WN*y#0z<_0oX!UQHDtpUjh9aG8S*dq11f&gL-7wSIebtMd30`wG)%Fd%9N{A z?z7aly`OvpO)RWW+nm*~Ld;Jzf6~JA&5EE;RCIoIBXqofd?IM?Cxg|({vV>gJD%!4 z`u|>gX0K!=ds8+Sm7T4!6_V_|@4Z$eAzQ|!j3ks~a}mO=kRsW8W^dQMzt{bIf8XEl zpF9%X`#!JpI^+3#o^$Vl9VABml30x=D~8jKX1BmoG0_AxOZ#6YWM8E*$*!+FTy*-m ztjo476sV+vZqP28+QG}6ntL;v4_vcE#NdKY{cc%|%GKXECY7@I4@;jE zT2OQZ-Kn=5>d>`28Bh;Q{N$sOpg*7py8vtp%1975d}_`NS$n$TD#+HF9`s5C`(#C& zr;YfO5x4j%)P;j!qK&c1iUDU)*LuZLpE4H1=elGahV47@0*((n)r5?U=fu@i((({_ zsv1Z&>FZp5hKMjT>d^VZOZF`wHIFP`qVnrU3TtWe=dI5(&vYE;peyM6o*B+$m9@xn zAbvKWM_BV1oeh1nJ2enB1DoZO+x#XIFD84N(}x1ZbimW{#(hfJbu}mIKG|pfacN;N zi$aubVemV#`xEymVwL@Y+PbEgXxn7&`@Uumnz`?*&%}bJ`U+jsLzUjA6UAu6USUNS zDvjz-3g@(Q|IaX)rVW46ek)-*Bu!%f4d>=T$&Zq-p_$5~c%q}jkgl3#1I-@S{m`?( zxi!j7Hy@&@Mdkx+6}4fghqR;BqJOnrEL#xv?N);nI_J|T2xPW0xTi);MKG3V$(iRxg=9kPY9F39*&`G{ID1NP(|g<2c_;rcQp@6G)R6YD zvA-l=XTFJHI_h0d?<^UP5pxD$b)CN~WQgGTcc0$67n~x7{-@~J#eA)k>N{v%#sKiM zWIX}mxvV;LNGjk*C1!bkAtjlAOp2#7J5?X)kz(s>*7xe_M&Plko!!s9>s2c%yNZzx zI@$F$og%)b@_bWk0T;w3RF3K_5Xch|-gN$ii$;=C=^^t$qN6J;7F|se76ymawqw% zg8FzbWvU!pq$v5G;yv@+pEbq7P0n`v5?D$hfsTJUQyyAuU1k3&vZ>Gu4>SbL(8o*R zj&Ru^M#$cBbXxu?QCzKgqN!10F3B82*>+wAQMuo;8D(lCaQ93`$o*&~9&Sh*P193m zQ7;3dvd;tnjwB`ZPJA{3vx}hI{C>5e2wB4^c*Z^a zz&@2S&e~OnEjV)kZ)}T%BD%OUlJJgvcj(Y0km{SuhLk(CSpR1MU(Mx5ugc90vQqU+ zP2ttQI^11>)trt=E}sUfnPk{IFRca@b4FSHq+-IBh(2n#$frN|@KkndnY*~c&m zITXlJb-emaca3!>tn%NdhD$t8*FM=&T%N9dq2}#y9RUF)bP=J(fI-{V-*|Y%QrOd z8Q#BS&hfml)zROTj)L`aihX_*Y2hB93yrL=QtPi7J`!ol+{echWB4|5#Y*$C8kpNh4EWO{ z216pJ?%u_z0a$z@Vs=!pX_nAu8pk82@P|S<=Pt90y;Rt#t*6~%(Xx=iPyUY-}!zo?;%Y<9PeIv!-oi8KZm_RI8IakE!Xa0;L#V& z*NFN*M|g~}=jRKA5~Zfl&Q#IR7=G{`hhHgjl_0#-jV*KMGk((^D_m(@0!lT0 zVhb^Jq^fqa06SBX+O{_-_wJilBdSGC{2YlBlBt%i-pAJ>KofJ;?n$X>J?YGp3 zi*wD!D2w32#T7G>+4m977_PV3b}6?Ly55~5u(LLxtLOoS(`vS89~vHx0vI#)Hw^#K zkI2wVMYQ^mjqKD!<7&foUf?@-b_EvkFKsUS1##=DtNAD!VrZMSio_PsXSYA3ujJ2` z25ckFzKXce4irlXbsHDnTzZ{gnma_Qgje9Y>>B1EJ6C>HaAUKV4)U^xq1ES$v5$+= zheZeZ*_Y@KBxqZ*p(^aNXOy?DzU5PdqoRquYfFDPF0ca1C5` z&B@lsp==D%aJ&Qa=L@wc;NkrjjH-EOi<{?&V#((E0JyFzi${Y;O3+A zss0dNiWxUgWHBcGnYQcY!Z7oO!%@$?jrV6#k7Xiw1OGCk2h$P5xzt!|i#^t5b*a4m z>I7Bafmw?I0zU%N25}~DD3e=SBw|I%#>?hvA1nIGJ_!tyfv)(d)ah&FwRira6-DJ3 zY6Y*4so-uk4wD11$~V8|51m=6fqVY;(|pw8`9o26dU*L>&IydOAYz(8L?VstKjA?1 zsn8gP5F+7kR~HwT`XwJUJ16H&PfrQp8ACHODIY(|fX`MhE-4{lVq#h!hc7vrJMF8k ztqX9_N9PGFsAM1|c;igwP}N0vkB(hUa1rrgEDfLNH&76`P_*{HvXKpJ2jaJ;X)agE#(DA3t{ zVzi3wn*fG(3E?PK-md2JaFaL>xo2*V#wfgh*>iY)W3H?HswZ zoP0G~sfh zbF_&0o4onkiVnBEd=b^0=m7l2lENN>{H-lXMDdlJ{rEt3CGMVkKhzVVTF@JPgB>s? zY#$n!bm+}AuqVhcAgae2k2z(guEQt>0l257Pj?7Xp0lme=^}NsoXRz|^FH1vC5m5mKv6!_WBR zedhc4CLA-Q?3=q#osq+1;Tg5W9d9Xiwh8fma={M2r zZ6r)AG)+AWIcEkG&Ggl_0XKVhh2gVh$P$cq*l`>4jt2!o2u_9I4g8*?8N9ZaH+r&` zB`-pBFZ(+wL;zd*;ro#!iJC08E|oul`p8?&?l`2*#*^UuQ&`U@2cNxwGQpBshGK90zb z;rn)jJyjI^ri`13hFYM;`75Cn=$V&=>)yoz;e^8vfo9|l*B@g zxG1jp=Zf;weq$~JPOWcB0(nc^dCiXxd$_lz55YXnl(O8xgf&w7hmmW~aA>q%pLgFV zNSDqgI^Eb<_g$^JuivVz{C_!GmCJym)%{Ueah52o&fTEcx26Q?2t4)>Ij7ltz^6Hwu_im+6o ztgXm&_X4lLOWhH-<}kR~ALMQo22k&J@eY?n8N#Lxm$*W|yKz1ioF*1IxTC}YVtJ;} z(+Q2zy{qT(CB|hFs-mii}tSb0NtOdGnzUT_$0d>_x7gE6UE3%3nWQ zk2LyR4*w}zzA;mW(YV*~>EneF52pEf!I&c3qBYd9=^Cn^slxl&{;TIDhcwqVRx+cE z;l>SJOZWr!i!j%kJ8r`))kRpk_8eOS#3N7RzgROb=v_fuh^Vx>?xibsILmwYoIE^e zs9D83IK5k=bgwaIczQ{CrY-PAjF7Ef6x4mCJgvx1!3Sob$C5i1&pon0=vB!Y#8 zGw*>~tCVCFL%gO@Jx8Qhso-X5eJC!{Qq5}s=|6&NTb=WNO=o@9hFud8l&$7%qRC*k zZ+5K9dV1NckU#So?@-kWAuF@e!BX0%<;Jib41)hPzfiMF9i|#%@u5Pj zl?__3=Z(HD&AaFdVfJ$+IsUkExnCkXOIEu_m&!D2m`+&yH2mS_^?9Me2a6|i)#1mb zsV)fr!VEm|-Mq+1yS6(Nt^-nW@DaQ&3gu@|y)Z&On@M4OkNfG(8%JfS}U4!3}D zz{vs;Jgr0I>zJ$yU~8ciHMp+b#HUIw0*L~st%=>fJ1@TP->n&czx76zmnACW3$kQc z7L-9@#FNa><{Ke{K=CRA76^b!>aF$ze)0PsAlqnsdyW2v4Nmx=aZ8*()gg3?<3_*# z3bL-Zb+qt~I}$ndPnWL-t4@3?%~Z?GYcXg-+8@4UL5G{Zox ztV%nK@hXSTY=dXXY#`H_IDed1$d;wPOdflTbsCWw@$zJ$)nmAju0il($aMiqdV~Sr zd#P-tDovFaY85^!=1`%u(TCRs+GjV*orLrJ%{y6k)=C+YA|nicJ5V`U!KM1DlFin_ zmYQ5Wh<;y3tu5rcP!6^|Nt;(E$mL;g%lxpkG@VobmLf3*NS zJoi}AX!%Ih2N_Z~t{5UA*PLknPE6eNZr#rH`X z>QW+Dx^i)joPn!MYDyv;$lpSl&%K8JF4{r#ZjT&9)-YGcEoaZ38yAy&Z+23pY;3d zQ!sHVc+seViTP(vUz3}DeDT5(q<^lXN3rh(kck@Da85i6%M6(zIT1rMmROvxhOtt4hy4ZA$TH=8K!O&GzjP(FJ*Ryx%Qy2npm>O}KVZUX zQKW;3~ z`Kp4NZohz)sco9aIYblPZyqhB4-Ch<;AlGbh)8IY{sI2LY76e~+{Od<+i)7AE7{q# z9zy^ZOfoQTdYZkHy`NoIbP+w%koD>P$}NX&=<%kp)QdlGgE_I4WngY${7GqHHHNdu#BVN4Ga&RfgD1Lq9HN>|l}# z+dct@H;oR;565kdjs0E#+4y6GFKL!kwMom>fSwW)tWgoh4pGy_?30`xzy#G}tM4z^ zj(12&qN6Gg&LRq2&g|#9G1HXz~OfQ+*z|{gN5_b))HN0sH(DbyA@Nn$7;;HdmyCpW9F!RdjEYxamQIj+>b~G~VUmxQ=!2(#5X`{(EstV-LpB?d2o-)R^41>yL`<+(onA}U zjblA}w(3i~%=MGYxSQ7!_gZjOQvAc1qU}=hP1XYtJe~@nA{Yq^wF#Z8fO^{Tx)rqi zGCGzf;KrS4TmKuBB-5xLim5((keyc+a6rrR#n2UG9XPkFF5s!M=LUbv+#jfMi=L&}a>k*3* zfM{R%U!XS5GvZYhGzMVslo=OZM|vRo=pLF??;h;-m^fZkMufU_v-0pB<3JvfzTQYj zP{D;JwLq@re2aG^tr*wM$jU0)%=-ZVq= z_^jROG%rS{IlocCs!a5T3)KO&dAG8oaWwzLExcE?8l=pHe0*BgiD!G**zecesMOi< zA_*^PEHlZTEp=#3?4;F0#)oD*erCmo5||bOxc$yO>#v~YID)yk%%ZKeW(cc%;2CPf zT9xi&^oY(7aivdyq>Augd!D2J?y57_B0lx*Twg!Ue>$*Bic(ifAjjBJ@S z=YaI!%g%+d1?_+mbDtmuVT&Aj&Q}S5vFq2JG4{9S2F=rZdwX}5^SmEML`>edvdu1}_~hZ8Nv}-Glg;OdM0cvYq6dNDYUME`H5i_YLT7#F7V-{ez*wmlrupY_ zLvXsru{5Gip(VfnU5lV>vag|bC0jG4Fb_?iu%`aLO`=v%Q^>3vW?2#_B6mz0w>UI5 z7qdss5#!fCSZVv7Z6(1SZ9&|hT`2%L&C3sa;tUx6x;Oo?W!f9M)4;6^8QK>)LFi}e zeWU+}C`)?O_-F%UTLNzC%fr-!APC6$G$L1Nh&q`YvaG|+!*iTjZ^9jG0&qmID1g}* zQX?n&v(hKOWHa6JR;g{N$CiDx9+@mtn(js{HUQuM?XG>`FAUW!v(ckF zHl4z}i#J4}O|grPh44UiV)nK|RdS7*=QjF|=F8e}$*~M!d`uQ3RYAa*JjItUc*r>mIN9*P2Mg1t1$>mKzpW^%{p`CL3 zmXe8oV$qA4l!$9+`=E>eOU4(;o`#ERh#J&-G=HuV`r}I!C-r7KuqJxzPHMR{QO6=> zYdsCTRh`N}cYnOBy`Kd?bH`gZzp=clce|cMW4zqvm&=&C0PT@-EVIsf}NjIi@5m) z-bQw<6FgR(L5nhNs|Roy^o8LpUH;xX0jP~ss`nADhudtgX6VGT!)_IjcLYzBK*~3Q z%3SXRfAPPfUtDu65Yr~BhkZkBEJS_K&2Zkt;|jYY)f1|$c)pe+u~00Yen7JG%0mS< zZ6XqJSYLunMya}SxVExHm4$bF*o_gvr z$IV$rG5w5LOu6k>W|zX`HI0b;W^)9IV46{y#V!7Aew-hE03|>gX2X#K7Ra}lc1ewz z0L_FdEpAb$LFo}l=k~B(K`h9I$m(rSee^nNG#Nx~CkM87w!F0sAO=Z81G}h{1n$qk zZ3PmlGP%%?2SGp%!=pPV{$@JL8S?7e7rI8F5x?jP#Nu%YxzRD13*)I&%u){2wE1kQ z0;#cQOPm~<%f>s#%hptiIqwSj#Y$H+*5lpIs4z!;KPu2`(C;s9WlY8VF+6=IyND(r zdL&n&S$6gWLd(1iG*zu zRwv0+*kaa4-tyto0un>1a@B)t4yl2XHShX4rJ5$s_=WG&Q3a{>#>nuxkE*9OqML3M zhlfJ`WI!%fohwLgdAaG1Khbj``cTfY{P(>354j?W0<_>Q^;IEY2TG0OSFOGCsBf5= z-%}h94HLM z)Fs!m<&oenT`c@v5hc8^z)0Le{uD)XT+$5-L=lM4tLoPw>jPw6p9ugXv?q)G?aJd4ghe?4W6M=6dMjHYi7yIEt2dwi`0y zLeN$x#OiyHoY}g1ltG^wt}K>KHakL6P#YZ{{z(QBGY>PiW*R2gxbN`VEd?Q^eW)8p zi-c0n=x7B=$(Mfg;o(sP#kAJ`#*l<3m+U?5dO>fnqSkNO9s9kt_S-VFZ{;N2rB4uB zXLp*-O7?dIA+meU@CO9m!tk?Co+M($TdDKeS!nY*G*g5t(J#JF7fXNVvrVyOfv!!g zTUlPvC5Od$lu>NexbFRcF5w-;6^LKJd{s4hs@ z2RrsBDl%zBhoXuKc~N#Df5uni3oesEsE7 z3QWxYRfc4Gf>u0R4mNfawaBO0ESpNLioM9&Shc5Mr&!*_^SsIt*Sr*8qO_l6_czikx*Hc-#D^GsYbp zw)WR&^#tlD-1?rUapRN<%PANrW1@E7*bSM;O2vMo3zk3O@dQ*?TE7vu_XJ~DU7-8J zgNiqQSZA_oZ@dRnb#di^zmIM`&Ml=;ovs)7HS8<>5lkpmB0cOrtNE^fo)WndHg34I zbAEAEye`&;(d%EvcVF{ZIY|yWf=q&uIWgdK(*rP}^Y*m&5DYy2c+40MULzWIy0{I> z6w}r9$#VON0y*5M3h0lG72yiFMnSzT4k31Mv0z4EN6 zdfK`fh}4cu2|kxC<~qVa?mt=$%yd7K}z{2pQ6SMwtd^|nQ^C@ zrcmLlPK)le$+iFmq*PK`N<$51MIZliZy9FvGIbd`Rq$+96H8~C3VmbDWvO+#TQ5;; zyMu{5H=`e+5-OoT!psc&ny5|a`Ah|j+Mk}C z7DDtXdzyF}|9E4x8%W&a1&`|Eju3yNfC%;5Q4)AgF8?6|=oZNoX4ZmdO-+x@NNdPg ziE^B6ub@8`#`zdLjcdFh%N);b(pg4Qp-nB?t0D>aYR2=~1UmYu1YtrA9@dg|mrJFW z7crE6z_j(-tJt-ycr6FiX3XCCM^-Sz%C3A@d24DuW=!DXB4>I&W1R$muyGPz zM-l&@TEXU2le2;erAu5EJIhqyL1Thlx5NWvn5o*P{?@Q9`Dx3L%`%dZ@;Mf8{`*{? zYk=#1Nuh;#tt1t{NKz!;?z!t(oaJNidJBanhHzwSmVM0JNL7Y8{%-T!?lm!J6p#sD zQ|s$J^R7P?33=@M(UYJ@^9ZlEy8!biAGxIG%W19Dh2U+HW+$<(mW~sj{_$mP>mAH* z<(iJM6OSk(OvEymD0p&S`Z}C036+c7EjCHLaOf_L_wbA{w1Ga}^R@S_A0GA{YHWKj zQZ}*QRr7{^Nro~yLKLcuU+}c~Rg$&Q|6;PPOC+RkO=t*1ZN|=cw(qRQ;i3J&w)Wi( zU%Y$yPgY4~v>tERuJNWPb^rOItoFPvNxA4H8Mz!YNys@Xf7_3gdapYsz)oPO$~<`GvJ zwa^2M`B*D8W4F^U2LJsXe5JQ$wcP04D-5u!1{KwR z_Y`DpuvFv$=l!3rmd~W(xDl}EFqYYC6DiT(X`2PO)uoBehR&DB&8G6e;2|J(KHGLk z^)RSQ-?Xy<0PxOxs&B~>4NdzE-p19wBMY);zf3Jz`=w&G&fq&FUWzS}rL-Al0w<-i znw7s&c3i_>{r!zulAI7kbva~)n)wRsHK}$qyYlPqnk{DMP`OZ0O+h$;I^HnLk=T_e zqk^0gbOL)M0RdO?@7d$HAw@L`fhcbvKwSu~b$O;j88A*p@+MhDIaLN7P`td~q9L0d z(470bNle$L|$8-sD2Q$-5 z^~^K8A?`zPtpwdS$X3DTbG>c7jd%Yj?a7gQ0~BPBwz?~V(=TwS9Zsz4*`>6z}{{i9*`IZTu;={Q&N`v5s zIyH>*IpfcFqBtm=$Y!q$lJQoEe@~XsnNq0!TGrN3>DcmbqCqGK|Ie9zep;esp+$U6Mh z&UZ2tTR?GnMwY55-)-BlzIf;=J8{QBOg==U?+(~hBy#*XD_g2_rM_%>*w@D%kVe81 z)*aUpppF3tXGvoVrN^4_{hTt&jJKx}A6Y&cImTw`i9!QVaKJm8g#e?!ZpEr$*V*o- zS~lNp;K2bq2qQxDs1P%Bg&G9ELuG{uHjN7)<`aH@tvgz3-?rT&?*Hs-AY3m3H(G5V zcuYjZ755b^6T9Qn@Gqlowq5f_jEZ%OC`HCE7c6WtD)m>4U$ZfVPiPThv$5(f{pgQV zAxPHz7v**AS#6xHwvTAcw9z;P%cG|-K?{u z8ddv`7&k3|obN5c6TSmanBCu|bXVorm6Yo!%{w)+o`d{)rRrE!GvnZEIwfVdd`2RA zdME0UAVy5HM?2!p?~;`aj=&7nT#7KVYT z$ER^#&#J*iCYTfKZIDq{Pu`ALaoZgKy>+>#fHGpAQ{3V7!ozA_^JMAhQxUfLw$bzZ z)(e6g)@PhklC)-!zW#fadsf?;#Znb4{_L2Mc;W6+&m8b$!?z! z2a2G(R5ufe9RE(2i$Sklz0xaKQ#JjOxLekh7P{RcKTC=#f-|E3PGjR#p@-<;PMeF{Yxr;~{MQ~qee%E=54!(#P z33Kp^Kg;)F!ht0Lza~qVAyn`+`Weq*C{t6r5Va61z^3H0K&7JcJwrsU7)A5+ z*`6@H;UCUWcbve;(jFX_9SF=iFbt9MRk13-Tbb{j?>F=`#9^tpm}(AqQ}e?AT5C;GXZdP{y5RZ2T-NFQFT3?Co41B?6eTkVb~fXRoHi<$D*b~M}B76DyNRs zY(UDUm9G^Ercnh0vRr$A|5iNuO8l->93d|aAf!a&Fpos=dBj}O5>@*}A>@@M>625?Z(+%z-z{ovD4kNVnhdGf;|G+SNl#SU7< zU#PZ6>i8RBD0ej>^P}Vh7FgicNe4~OpxOvXq!wuPXZ9Y?y{QYrJQWD>82Lv>^5n2K z1x)%`vwkkE`Mm(K?vkL~nnARB8a&Cz*0Zojx?<8k$i(K&KQ*XtV zOJHu6Zpi>bc-eYzEIBoVLaq4gM1Aa@OPo2Mn6v0#9h(ML+Y^Vx^PPQK5v-7)5wTAp zUQo~|e3^78`&$hdzKjI3Ti^~RgW-cie!HkJBumvDTrx^;%i#wrxNhsG%uk+7*ls;t*c!12ieLP1sD9xIE#uRV#1TwU!@ZNugwp;KU$gyb$`VT;hjcc$Z~zIcOjdN$4H6Y~>V-xPKzCI?%D8uazV_sFF` znvNK5jBlb&a&t2Ip}FN>X=}?az){hkOY?|?P7PS<;vOo`S5Qhm??2`5!_wU!h`z2I z5Oc{#mvr*?)M;_R>AGfQK+IlotpWR?^ryJ@(r$=M;@4*QnmzDEj&u0Jwk% zwYo#M=?u+FP2S1Adu?jGPOI(YaAdlSh;VjMMn>0niS@+vja~`D(|fpLQ51vkG(d^? zEX}g2KBG?%2M+hY1aQ7x)0j}-#(C3&PAy^B!j+79JyP5IW~$TUCeN2H?VyHSNnhQf z72}2t21VzkdX9fk>O6)Z{~h#c@lO4!x*Y-UP%`34vEPSnkGZ_o)4t3Cq1xOV&>a}A zRHxo4R#yLA6nGM4{|D?e!hdLfRLc1FxC&orh}WDIsZ|00$D z<3Xy5;NA`%8v1rM$R2f>)FBw0-`EBO*o!Ey`q{UT zqQk)(@btqPu`4vqPUC(I6pdiiny0ofZLq=+d&!AJc9+QKMf}i$)JYzfL&IyU&yj*% z3K5QEje^{Tmc`=NfxHn9@W>+Y?x0|BoEKMmWypVthR5 zY$eeA)>|HvQ^H%_`!dL@7V3p`=q%r7OmpZegBn-!rJIY2NzAd@yt1#krh2ACPFUgt zUkUAd>+2S|fkoO;x`C$-T1jvyOyNb#0Z7Abzv15$J7~$FVO$V{sMqt*YYnGrf17Ur zEJFIWBW5ojYnnnMZFcQOKj6{w_zyXOy6SJY2NHL>X0|$PC4i#lW zSuNvF;H8NO#xI3-|Ktq{!KMt?a|tvXCw%6Wg8H*@RY=lC`X29XXsQaNv8L5PWszJr zj9ignz!4qr8ee+29mJ)ptvTR{)Q}xFs?LHedNzTJV*u$v;*~nE!)Ms^ zUMBt`SQqyOk?e3!c3?= zB?l8)vUP3O4S-~#9P%Q>4t;fm7w*r9o~R$SkRjorS}KC?G_xxj%`-;8pc`uYRcN7&uP`evQGd<@o)Li_T~BEjORud8hk zQFD~H^5rIggRU#O{GMq+>bRTlcgy|u0T9W=%lfLyRQAXx3f9?P#zO`g-$0!!y^+d~ zuXmlec}Fgf39Z5j{h_@>f%RUZmW{%M6Ds3ZKmKIW<`#}^%f)DjdUt4F|6YftKBd<- zqm=1MVwU+l1mrDg=v-S*u<&4MN!4je!D(Lf27cH6!W-`3wM||(0?8Bf#}QZ9;2;0q z&_a#lkz28BdjH`(+Gs6K+05Km_}kXfAd>C4)vq_6KXgpw^i4lZUxato8=n;eOQ4Y38u8 z#CSH@?`^4+RCdP(l(PK1OX4v^E~4%=&fW)4%ovP!A#dMy;c~EPwU0!whv$n*kTpl( z(6CLU3!iy{UzJkR0`FmXD`7^q>^m3pqHICpTQT7_+O{=76ts2gmQ8 z4QBk_Hk(@^`Ay=kG;20b_w9xoUwA>Uj(x}FArKcTzi5O=rSIrI@EU0CU1IInQ@lQv zYmxQpgIw``6CVNGNViRM*upEQ#k;-OMjeFcmiX@#wW7hbcr$jJ>SU(ih2ul-^&1_i zz|BlV$G;-JFcLpfDV!~}gAmRcyiCqGHmgW0*-b z$U^ig9ng}p%#p%skFy-X) zQT$NI6`$Jt=|IY8(B}IL2n_N+w1iBTq?HNyQ>p$boe&0Tf-Jk8{M$Dk1b{a}>Vhg6 zP2y&C8Uz}x@7=gYw#(gBQ%d!&b7kh{nEm&6ELuI;Z1V!=e#DLqi8kN|KCF9tV9lU& zwZx}QLEAlpcpK?Z){fe@GQM=DGIEC*w^)AH>|$J{Px>+*uWseu9lgyZIQLGBRJ3=o zv|sUstAgNms7T?@duRSzUX!`2>+&-TM`{iVEjz9wXF;Oo>c&dfJMB)`7)XBpu~2d_ zdC)4!m;JKzknXVoBwb-J{pEDo$jmK1^^9rg?oK}CgV5_zc6f+JalSDr;Aa9dhJMJ9a*v2N7@u z95G49o_b#?(sq%Tf@+H>6*eALKXR*IFJt15WFY(!dxxJX0E|I9bC~l@qO)t{Tv7LP zI<3$!oL&boZyJpWss(JSnGqg1CMzt;iK* z&>6{_$xsXoN<3x$Yrpg#q4mYepy?gJ#`a#&@3A{sEdz3+J2=bIG03Ay!f}`~Eb>lQ z-l0p=;z|UM%M~&valM`%k!6jQU^Dds&@6*UoKht&hzpp_hA|}%s$hTMLA4Fmo|zCi zP{GaBp<{-~=!n8!i-&=ar?_592{;m(R>)vekf~87q!~}y#KfDOy0KHH2&qQwht+37 zVE>T@-P@`trrRa-*yf+R1Xc+Y)APflRU)P*SXiFEuKbBe!cENUsPuMST=kZb@e;AF znzaHK0e%btt~qc@{4>lQBvgz27x-k*j#$20AgrJywB!IIP+mSMzuJX&k%YjupHKeg z#e7{tgU2>x2q=pnwn%C{!A1}6`OgK-GLTE8x(x5iB%+PRK2fGWFED`Ks?H+9-p4m3Kz&~2=Z~I;R`sDA z;O1apci^QYEM}dZ>7^e1+i&L&<`n=>6AzkHIeg3yAlPN-E5I~9_3*@y;8;3lO1fF4 zSxI!go_*_;SKzQQ)m@Y=)Kpgy9(+@El+R)`Bej_I)o_+&BvbEOwiIbm0+_UZ4gP3s zodui1{{P=hEFk~$55n{Q39pGvZvD?dH|nM$H`yX7M@Z^(>=e8SX6&-VRFRL7WqvhN zb)^S47|B8Pefw_m;7z>B?n=v6+_F@_1lv2BCU%6I2*l3@tY#bNC~tKk(w=ywPQEur zY2?z!f_~rNw!znMb?F^V+_FOEP5hOUh(olY#$o6t-bp8TwoG6H6tKyy#|Ut*dm=~D z4%e;QnTxc(qrrcljNeQ~cTgcWBUm4S<|#Ckvd{AgMBa!`rBh@qRDLcaSfh;phX7T- z!zMyy8$bpYWFH2d@Yxx*F<_KlSfq)pa_kyQlI1StU# zNd=?@q$LJKx}~JM6hXQfK)M^GyK`t5X5Y>GJLlfdJ?9^1?>)F@t!F*!>F2xfVdu_r z7?;WQPbDFcXGTbGXP1j_r-vV75w=9nrcbKkJZ)%w{L7;JN~-scQ+iwZwO0|C&+cgT zwfH}ZO`(Z-E}M0LgY@DEKz0Zuny}>VYib~I6m_@-wY08`Byv{f5$AJ!ce_RS_bbxm zD>F8d>&5@_sKBtO?k8fyo8J6KmOEZOqF`AisIX_nVEQh?tuOof3(h%j(qVTL0A5|O zl}e#knAmUXKtQ=q@5&d>;i#N7Hvwxpec^i|$CB_{_`>B|d=2ud--9L^jlI!9!M1 zaF2dqEUl6upI!Z$Mj z+=)S7Y8xjX|77fz#$CTsqZA7CKWaejWC3(V6xmI{u$}G9c+wb}cMy2+wBQQBheXc2 zz9Ttk?2N<|s*+1E!4i>wadEf3+EnzNxNtM>z)S>3K%TX=ZyW)!s$|ev7(G>+qtMEhfZ=-J21Z4>m8L62R+2 zK1u^z@NVC`z4ex4sSeqLSF2Vt&+456;QNj)F3!Fk7?T-X7K{P5tYep(PEP-Tjw=9} z0+d4L3?F@2#nkAs?`48m5&H0g93Uw4Xh^~cRF)t99&UC}4pbe0Qnw(ERcRBK@W;a; zut!OYD3xaGP-lO0GEi;KXU14+wg_mtOpA`}`}Fe+v3Q8P4+oFDaXJT>qR>#l<6I7P zyv3vqU`{qH30>iC11gTF3cGUbYJq6r_;4H`>p=6OE)m+BfQGtylq&Z#Y_g*)Fmia; z%R^p=$M~Wf2l7=<(Fm1a-aXc3R>xLOgY^(dbh*nsfMQ@r=?x;;INF!+pJTq(zcnkX zCt*dzX|=bfK-F+GrRcx=1}^i=?*CfIe=nX$UsJb$cQLB$IuXZ2ztBjxYl;bzZ3&YKBcE%>g6 z%I|y&&KQ)wCZN#<8qJzD*)(8D%tY7^Vi1S&&!1{Wuwb2(&W8!}wn+p8ttzDg+ifC@ z7Qw7I7{jk7YypEsV94+2Nf^0XG#d9Vw@{5P1%abVC~pAd0kCq(dk!xHcr(y7c9>=b z-&2X>cWJ??ZOtxPao;5b*2z}h5#FbhCyxWi0>0^w(4AEWrU}|Xl+Lq;e>hjy=Wf~A z)_%W_n|AhUQonec7nBWp-6bT?no2&|q=XkeF`Dza&Om(uRL~y)=oQpf5aM2>fL`QQh-x)L6`Y@qVX&pejW6A=%OuM#|U7XTab+w{6Ms4=uvV2RkOy&us zWdV3Z47o8*c!9L207UVg2B6)X4)bOKq*Dz#ag{gamYAXo&e8>gjddkg5%QifJk|z4 zuWrK(g*kX@tk;Y+R^SbVU++oyn!(qz0hl{ri26tMajC6i$RYPacxf}y8u(=hvDKCo zqfl~{U}}Nj$)eSHSi7aHz$z7jxvwla4CYvtcR;omxt{TkikDnEI3*E1c&homE&tRKHsY|$j()0^?qP;~Ou z?GP9Rhi8hQ&1vq7qR&j8CB^;9T}zI;ky5|qJx0%#u3iBbn|k|zJ<1-Q^wwdOr+VmV z5L#CSvK~*Wf6Cl*mF)z#0`Ukbb?$3`pswH*_{E)-It8M5>#(_#B!&;#b759-dl2k^ zaWz`HZ}0S%T!|r~xXUw1A*CU0soPw&h1)j6Vwu`(Vv8c#%>^%Ot*1S4Tc0@EQ6IBDUwC zpHw|Kdr5Gz>4VLo_U@@PWq_C-_{V|r&kd!$9?koLyEXKty+=3RQzKzS8y>5(-^rc9 zJ!>3PbbE!MtI@wv4?qjg57nzqpf9+J*elG<9P7AQ7YY+l?Jae_T=dj(~ z380+!)!9@`1lssb#ut%^n1w|%mwPQCtFI3MZivWp9~Aj+#U%%y4s}s$x8(9&$s5Sv zf`Wo<=-FYm+`uaw!En*pK38<_yf@ui(;y1JC-SF^CZ=?n433EOOxn5 zuY&W7KFRnSD38NkgpylKuS+6sUR zN`%MC$%&ke;EIR}#_51L$y+$c+0P@R0)u$N&NZUf8W6 z|5^)&_VJV#qiw3I)SLS2e7&AmEsVrGPMClXT*y$!%t?RRANu_q6vK=Ahif=o=Li_Z z4PqKViD%q0HP>T=**9WB402kaCdUzOk7ZJSqdAC|<^g_uDW+RvBbwGK9i1Qgh7td! zjDqSWCVsdE>~daMy`P~Rv!kDSqf@j#qEZLMl+KIgw(x3U4k^U`;)EUh+%r8$2l^uD13+~H zTf7Ay?eC|PHurwS#`vQLC(v-V?sC4#K>1w5(oD+)w&5FQ!5LB^cjP+X0NVRJeG*;R zkJcp-_Zd7-;45p@mUZHa7s`OyN}-Dl=S0e@J(GCD|Ku5V`Hfd@B6wJMARt&pj@bM3C4A-Bm2s@a@VpdXu$y z%vPR^nsGFnTN&V=GYu*i4iFv-)RJ~L1M9hsP>N>+_)i_mvszQae z_7Wl0S1Vz3_xX2k6t7vtqU4=DID*B5d(qehzh0Dnlkj*cm1;vPqwXi5qp@kRsdW?U zk0=`H)k*u+gm}~)l6Y0J&L+(h?ed;(RB~thrH?xZdmq26sqhzHxUj^#H`yz;2wACDij)-|L3P`;8)*=u}OtJ}yMXhx|%!&+P`^OK5& z9%|kFzXn4$|Noz_ z9DN)2@;`tx1q#Qc_jfR63FjqLa2kGZSI%Q9Nyz_vC(>qbVklL;3=QBM`oEya9z*L^ zc)$FQlkL?~xsVbiv{cjr1Cg*GE#1fC-&DXZP|o$fb=t;^aBUKJ(1RaCnXyIMfwDF5tgHFnV~;K1 zA%4&ufE{+!ltmpr7B?GAW|>0<3Sv%t(84L#A=0~RRqe3g>RTt!Gp_d2RvPs?WcSVQ zGz)yB)vK8vxaLwQmk*+ZPJ`e9(&%r0v}iul-2SYA-v!?n>z@1t$^HMi?nG6G&y8=5 zHLIi@7c0#qedneOd4oc@r!Y)@GH0AkVUute6d=^;MdQvMqbP~Jc{?!J3MwIYeV=}0J6Ohs578UgqJg$2Y6Dr#sq4J8~kAQS7n<5@B_=)-Bi7$U&mp#ZcCateR zSMMLZEBiJ7R8jvI;%C*aYXfDC#tn~>zBYx-lyX{JJ?&~{RgB8Fz7)u+zS^XDQvrg(Mu zKbzvKii#ImQstQc z{^cCi+31+>JqKPMPrY!ptn8p&+I}W$R%t0&SxmSY`+k_}mN$t}e)R=Q+7kQGBKw$s zWMGEq+!5rr?DKhMS}gX03zNyXw@EXLx1CA1G@qJZ8n;zDZc)r1)=Z&AN`4oOuJyQ- zBF-D5$POO(>`MubmqaxfX`@$eUAM!=I8&u)SRe!u#J|S)stJ7M8zk8q=;9cnzmr;x z*mE^)1!BJv*G#JFvlV_^AQSr7aO)7oA=hGuPEnA4y$+NJ$gHoh>_{!38iM~4M!fd- z56wMVHLHC~L-p%)Ue@>`gBf1~>1%Gpn`QPz<3vg;jaWE4qZ`xtYqO@2Uw`3>7D*D#XnIw`(`;%635pc(6Ig8wpg(!g16-#Oi_FOCi`p@u8@)SmjDlm)C7t z9|yy=TC$M^Hud7!=VE=*T3n|KpRco7xVV60-F{g)JJv5^0};>qa3D?E3ah=&XTkU8 z=U*5WwU~|L;5YPA_>C$0CLuXm)!$nR<2%?cRFBkn%qlJtPvKB5;p|I9K_Jo==eN_1 zJZt2KF5i8Opd|O^N!;w1YbhCiw`_2v&EjwNADUFJWOv z3+WrRg?$WwMT{$|hhJG0=|SsaKx zZf2l?$8^&DtxU&m|&>vck zC`h*JU`VD#P{TW(@aVRvMYdE;&F5>d`6kRCTM@N+dL~z$6mh|cju|q2x*uvfFAyDi zU+F0%{C;>{5WC+Tx0jGw^fqyh1VSQ=yI+aH9Q{y9;aGpW=JDDipK2P*CTO0YhdZ*T z)C6^TEaI>PIcU15u};CS{;-%aJ|NytK~i8hNknto!Y;jLn%VI5Bg8DRDTkp(7B=BH z-DsC%Kh`Caw{6d*TKSXo-U=*YpqsQK@(8j2Hum`-L_qL<^+Shy8eS|8eeCCP2u(zW z&$Z!tR4G7lC8|(+oKAeaqm^hS9yL;+$?zGH{C!oZwJ1=Orr)fxcg7;9dEU`ExtZ=Z zu}Yt!MG>Ew25Orqr5;Q!6Z%x|`a^drvjCR-`cVAu6j6~zo@`QPEfoK>9h1lTKMx;g zH~F$7n+vNkdO@MG+r%iFO{m3vj2;5bPXx!Nt{#VdLtL+=-1cGmZxYzT6>?XsX0mu2 zm^6SMPI~l>D$Gd%>UEW14-HmzgY84((+{6yL`9IJ3J$$=1!Dl$c!Xw#NBg#eKUa&Tt<_u)dA@0?@CW^?N9+brT7~Yt z(Ztp*$Vs*-9ok9&I?fS;;vk+xA+qrqlIo2$Nq>2FY{8VIUt|>T` zIv~;Oa1G#6yoE*W>g~P_j)~nus&KDmI**>cRFa3MBkj`NVkoRK52!nkv7ufn{o8lS zHj^bi#i%@d)0Ilmh0BDhyUKWmGsqWZ(~(USTY_HVd`5*@bxZ1sPZ z{Y{Dq{wE0S@nQ**%0s&A#3{5=vg4}6#+h(2UuR9uM=d6wo>*A0b3g4gqS}7|oi02$9|7Ipn=xbpp)75EfB2?>l(3$>+9|c(Trj#Z)%dz_$^Fp^ zBRObdTlg?)8ZMooHv}+!0W0lKT5%WPyn_uc4>x^V3dn-fpR^M(zt?W#(J(HG7=KW9 z>nx$OPF$!N^iy@0&wS%m9M02;k|cho{Cw258$bJ(hz00ERN%X_T1yD>IP<3XRMa2m zm*BG@4ZPShwHt;$GHc6s%;KJLJPMxzn(>~>U+fdv(6s(U{`$L~*gukPmq!>fBm7yu zEHa6_Ai;EVmd?c}KFt;L5B*m*4LERltKqH2UdVKSz&W=Pc(gECv9BS~W`c zREK8x^%H@W#uNVQhe|a2peeRD%b+r%#YY!u9pNkBjB6+|se0Wuz=Lsv0(1KA2zG>@wz4(KU}w z&xp|{)AhAD=snyC$1H&qqltT4`VMIQIv=K)dxS7XG>{foF5pw}bu03V_ZoduoAIoPb-#gB{sVq#8A&hgwC1bB&*{Il@8!uF+8Mtc zXP+&Vauy@ER|+2K0}WfXA5W04{C$+MVX1)Dl5bl@c%$t>o9o5NeEU($Vt${?Z?W!}B)i3(0=rWm+436dktuKAIhR-O6&#|~M}Gb)Qp3I`Rs2yRS5|gpN^gVn_)J z`3AD1tpqY>c#{TU1Ln`s)dfLSx}-BJ=23MDDC7f+yC$gdAb4zzv8s`)EVgE5 zQf#|WI*-#_jTZ!cW08&laYVt&_U(TptSnQP%$&2W$G*^8+IALX{6xTR1)C-5i=N`H zttubpgabXz_JO1jY05wRQJqgPAnoY)`)?NcPar)N*dMTAM3r8_RK|@=12LE)puuK2 z?*oy3My>s|HPbZI7smUphAD`Sc7$Hk_wJ8y-${+HE3$C~nh9Y*q*GQmR@E0^5&J#o zzbjG$?kqV+(e*|n5BJDN_j&h?*c z!EEVRw=SnsOTQatAs)1MJD z%|bnZJ9)6@@kyJc5T5J1B^`EO|8x!Y(jQ{DT2ZgWkA%%O9 z1;mk#Omp;(Jy^yHrungOpnQG<0F*OMWhvl!zl1cO_}q>`jgm1=GB=|@HC9H$c}7fz z&bQ-$#H`297)?79T8y7V@3fTjxyU!!!HH+Y0kX{_|5oqh3Cf)O*+<)Zp%|-t%}4xe z7L-xQJNst* zF+`O-dbFDEJIAmfh3a3kwS;!NFKpS?vB?xkmQO?k^#i~Cd|YYv{@@cSn3Gu?Nm@A%#XMzj1!}rcW5aA^R`%9SZ9h?Ovof zWGWDf<9vnA=*?D`TEi9?xH$D>}O|O<+BQ?0dRhX!79y*CSdZeyRY47%eB7!Nvc?8m+=t~`tB|*k_r9}@9ZJ+iyi1WaNA({B6seJk$Qo9_mn=Wr{lY)H>(HUFv(eB=xhd#;2#gR=yh^Con&h2${jokbU;9Ga)&--HDB1xFb8RP8U;ino2N>U)~22}NfZeh3iOalycSUUAE}Si8KFaVoO-Bp`{BOX zSnPp)fV>0iD+4KI)1kza*LJ~R$Y9j^AxK^v=raS)Ssw#1c*F-8m@SfkF1)!|luYGe1L=MTKl zvwM0JIMvDbrB~fE*X8C>2x@4igfAu!Q|B=c={~w2-YmEQO1^*Jd1G+rFgFzaMC?@q zF**M*HO+yJx{_}<8D zX$kqECY9?~ipvhPD-w-{*RB*WVo?rjs=sx^{#%^s{=P)>aSjYl zJLGjw#l}l_l>31a;-Fb_VxroKFZj@RW-(UTR)mw5x$n5UJ3@h@7|D#eW%!2tE$wE^ zXO`q782#2L$Fv41HCJF;DfywWKdCpXM(sr5oYiUfCvG#l_eYro6bT8P3@}h%aQE78 zohg&OfQCyj(paL96`_?31CQ~gwV+8?e`SnD25W>r^sb2}U$8~OJZ62HmBPD#c86FX z*>Q}dLGAeq)q9C6{B?K4kS>-cWq}po!4NNQOK438F0YuzdEBm?aK*f7%zDGQo$&{d z7&50XZ&?nB{}?Al9YVUJ$R%mK%l22?xJd|!#MI76E-l~?;RN^Dc08ivcC`j86_e|J zhV3cUt0T@Ifiq{+f_PiDVG{(Pv!Vz+U4TEqKe@IUvKb^kPI(bj_>45_@~!t`C7!R| z+irUzv)vdOrf8~ayypO48Mkfax%hLP64lBR>_0g33mZOAW@h-ZWMn~-o~xs!>tmham#3>n3} zOES{7-e+U#2%GwE{!{1;n-LF%5;K!{so%$xa^8krk(qg-UspM1%J$(#u3!UW_3cn! zGk8BTN-r~2#yWExyU$Vi`OinArIlS%oAmvX7~D+Cb*n?`$=?{6rXN*?@8qSP%i-$l z8AjlDt13D+#=QEg?_d}nj=%EF@khhYY^p*>5;5@FcTGkcP-5rnkd}CXp)a@}?pYcv zYtV&<)=|s6(TQ5@l9cu_{7DBrHWTG4>XW-&!I6)PR#Z-$!gipO53@X36XD0Y9ETjL z{1kui`lT^Hj?(r?J)n(FB!C*JiI5gkzxSQFhz(WGQSaLOKyqv9$lJfCkZ1l%f?J&O zZPri|?6vH^;Xr2HaSV096qT9>5AxItrLveguTPxU(z>b=$iWk^^N~j2}}VM?OWzdCDj|3@x}l zX|lmg^Lcnwk4mYrJGGm+%#HFnQP-m}636##k<`6j)o*(({#{j<2b8yK;s^K|mDi zh$QH6>3Iayepz-Yp+hpwdmYS8mjA%`)bY^BXwf8!bylLV9aQhX0yBiF;TfX?XiXX-9{m-$>M8t2r|{^;^7s*dpLF8GZ@7+|(_ z3##26SJzkLjL5Is4eo>12plmmL>lvb-D#g6ni{%kr2}=)NO?_Y&+&Cy_jL<4)hpTE ztaqsQH#Q}7OYmuQa_N}{5B}31Sj-8;%v_z#SW!gN^Oz8aNr#tMcH$L@_Z*|$D$seIF}e%%Cf~g?3nIHMF1e_=UvpWSg28O#zmZsU zP3KJ;KQ#xsa2|55ZoU<=8IfAAiAnBLg>~)Q%GuzCl}7C=KEj71!>=5zshAqfev7L4 z_wIexxTh^Pbb`4ze12&k-n;}ClYm6|e9*vPX3oG_S_aI14(MeK6;QQ*|I;X`w&!Jm zQ$|9fdq=|0Lc~iu0aKi7SC~JM!gN#x(ji{HQpCP3n?ON-YLfGnF)P~&qMKYCbrB%T zqC!X#bqw#7-%R^vo8Gl|S*NC}D3`l>et99}T~SSdh4$Rir@p7ncpH=E6zc=O0x(xj zAakJ@Z;#RQTQxDV1ukgC&D89}M*t5E1e5Sqrx0;Asox8N>62A=?6_<`^oBUB{!?q& zKR*jPKD4=RX<0|$605QP-TF51ERgPm!F9<@{N=G$YcQD5(BPNc>TaA7p7HM$xa#3x zZMu7vq1$|bkj>;{5J~+g=Ff8GDym+4W-eokeCyvs!-DO%ej+$cc1{rqU4UO7oS1RW zHwy}B$EWR{{PUU=zr=UUoWLRZ&5UIp8M%4w8@qRV@=KF(DIk#j9G;BPM@l}RuPISFWfSZ z7X5KK_#Pj#Uq^6kMJXG+Zp9S-&SaJeVmy{h??+dSa4B7BNt!E5DCd<=3S6-)-f`7p zFCN!a;~B#f&=y2SxawTNbLM?GN3riexa@8yEG%phnlkWrcsmeH6!f=tBiTlfrSjtd zZCBI7m}Y`cqa4M06*yrJcrY>#Yx-GT?z5ppi68L1Tl;yjdCW9Zf%_1Uba%i69av?D zC3Ygew@56N{>CU+-CUT>6Io3tNZ*U2AE2-TGNA81@wU}0;Bg6~&cs_J`l7~L4|Ta!nvOf^X3CJr&-=n@Zud`7 zmV!TX6cF>d>R%C!jRrSstI?67?r8lr==;6|o=?%ZOUF#q)2NH3)|Wrjpxx#43jUdE zr;Po{Wcsw{y8vB4O6}DnZ}zIrEG=h52RrSX2-2#?eCxM&6yo2=4zaWs^#dbde`jsr zPX_AO^jc00bt8{Cq<2$wpPBCJYVhY_=?kN=)7-2P@UvgW zbx%>EC?8n%Na2B-SPM1}3vI*-9Jqi(A-aYx@xM+(A`2l!c59^dgi!z=fjrvtXbI~T zA%xk;4=EG_8OEE~HLAJ()jcrKQ3{kcOdgJ@!y*O;)r#FOg_}l#r<2{q*{KwQMX~mI zIG(w_4$;0EGQ2XJpHb;0efG1%;BIh_P*{IEA&ICd-J=NJU!k!0Txn^_Yqtdt4j*uQ zc}QygrLXFbPU~Jf(DE;p!;T)kBvK|*TBtE^l%VDB8hGuM5(;sz;|`r~bs1LLu!(K6{e>8SpWF@Z{~%ufjqN zE-o&?W$rINl$4Yu0n(nEe(~T6^3eB{nfE>T_V@kNR#=vfHKs?-e^jAaZW?+MoUhq1 zmwR{&3p|Mj6uF}QF9m~CFImZM%ej#fet`NugV%9v$_-{-9N zc1tA>`eSI1zG4j|y z@+bQ?gjjqKcYlBapRdIE&F&vvmKNMgg`wcPziR|Bx#@{)#_;v4ZA1F(9ptV^z4_{6 zpI)z2D9FXu_$Q=(9wyTqBKd)a-u^^G9KfyH-gwPGslmjZ)3Bf*``xZE(Xy9r~ zbMB26e|eUM#T+18*HW;`_GFH$T^5K2XEEB=I$}wIsvSFhNlpDk5;J-M?v8Bto317A z?dy}-O#Kww1%%c*ZIS~ouaFioq|(gTN|}yPiaDGdGPImm%QX~NM=V#G@3kSW=MR;Niq*B?DYbFs!j^5&9{K=wUyn5 z-D)V4#_Zyyrjp7B!FRu-jYa7HdE{vDd+W{30AGPmimSY`GgZb>IPn&@EKKT4?YMOxD@`#U(TBdBDhJ6Io?(6%3mhJQrp`45uaDe^u6fBwOL})2EY>LPA11 zhdUPkyB5GI<2356fx%uOS@Z}y2~W!v`kfVdmCQFf+3r=~st10cpsTIjuJGnE6!#MW z$dhR@?KwChTc73p#u7)?@q+&HN71hZ=&uKmdVdK_TH)p8ogy&)=aMaBQYkSmK%{L3 z=@g1kkjrdf{dvC$JjiLad+?;88KsVOf$oT)KG)V|6(1_qLV+RQDxYDFs`xlz9wrG? zk5uJmf>I({a+mljVc;GY>qfgzENM&WDo*QwaC{Cwcku=exV!#teWd|$4}1qPS9zPq zlzs2Nr(y63Zx#pfGwUDnyq4cq%yt#U260=2fx3qr?8;r2qc4=7QBXQ6CUq+h-Zha9XYz9K$X(-qvY#u$!k|1Wi0 zmMuR(@Jz2OFzTmmV#3=(aV1XNVf= zJ&QR?IF|Q#KGQ*}7SnevSM>e&Jpx?vZLA zA0Z(lWTb+s3Z}9{?{R_;zLXRyuqt3h6uteXoRGV-+wW(!IP|gePvB zY5Ix$bfQC!HzQyw!gMwCcPV#xAe-mO5T@@>-*9WP?r=Sj>Ug%wgzQQ0WJ z4wpX8R?j|uu~|s?;hR$KP<(NJa2!qfxW&kgFs7lL_X=q!C~1$r$u8K3ehL0%=R568 zY-3~aeFZdY@^~~|vR_pe&ecsZ;RnP?Gy8&*?!kNZ8`Ff{fFTS5`Sb$X4py~{`RC&V zr#Xmox|e0DgGnH#^3B~|z2YO*wBKda$I1sOfY$J9 zKH>86?TkoMa7&iB`_UVaoC>qI1eA~2om`f-1q0im7(Zy_ijIu?i#LZh8z0%f$sg~q zfqH*sHgp>hnp%nwUXaF~h53yYn5X+7jCEa;E<(n#R_9nB1vAzk`6zE|VX)uW{XlVU z$h?*D@ThxWPTHzs!@>V0VhbsOSO17MVkcquO>V7Q2Xejdc+P2vGxx|7&T;mn2x`*h zspf{|%dKBQ)}*LOz%AH~2S!--IfpfV(Taza8vhKxbQPF1ra~5JK@_&OZL#dw+I3%4 z)}#)HLuA*_Y&4v4qx%D;PlrrSk&erUf|JF1IVrzZ-;0-@`~8ScU?<4Ke`;oi4{>l~ zeSnNJ`zo_xCkpC#%9(;fvs)j;Mu;S`o3$5#-bILA6G?#A_yG>)$}9{hbqc>_Etza& z)5)MXXzJK6jl5v0dezlk@t`18sfes?`Oi}s@@QSPI6vMCL4n-HYVS2O8XAa`84y>M6&FE#0=Uh04Eg56rfUu=iZ_Vj}P%ay`Vf03vO*&~Tc z4onXsa2-=}RIn?dgcl!*cvh%Eo3hgdN>FI}WRPLB_5>aH_kGu7z9&k(AI@COwe<5> zNgHdF#L5qXhwJv0v|#K(Kg~5nG3PZqcS87ctp~{AnPqR7O2AxSqyg|Ji2iiw@ z6%|^m`usYSFR$p%nY|oo;jBJ0TPU!OY_EAYQ9Uv|WD=`d^5|^mbS< zXh}GBfz(+ZcUrGs^rhWl0%bC|W8Rs!f)0hlWvut(x#4gNq+GK=&_q4tukvpNsFJTn zcOSmHV*uc%$?bKBzIHrKiM zuCQ_RA&m?)mD;-yfKa`+f7SEC4&U)ZdNoz-BOPM<(p$bxW4`;p@obFX>J~X~Ai;ye zorGj1LEBl#|h??+(nOqa9la8Ueky!>dO z_g>$QZTEuE>m!QWvY*phMbk8(z^ktp!@__T>(>xLDu=+EeX(D?OwntQ?%thVX$4;; zXeeWyRu#0JJ;a)B3bVPjsj@@9-TesJ(c{bQwlJhM6ptBuItA7vuC&}7TJ-`)95sU`tNUwr-l3&z61Pj3Ij4BkM+HaPM@AVd}B%&KqQ!-Z70d zFTs4|_fuW;i27ouzE34-n@*ryX!0_vyph5&t+^lbK_Y_mcELQn9)0Wz z=~N;0yZk=Vc$+Haz4;3op0IQ56K2|)p|CgwiXxuB@r*h@p1cK-M7s=1s- z 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 literal 90138 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 h4+Q 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 m-KiM$O!YBqFr)_+vVk3LraP1O|bR= diff --git a/icons/obj/decals_vr.dmi b/icons/obj/decals_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..19ad1b7bd346544c00b8b7eb8c7c0beaf180f48a GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGo-BlqGB`&GO$wiq3C7Jno3=9=> zTF+T?9X1eXc^FmQb?}{Y+}c?R!XY=x1uotaI#PH+>*Uv9i90jjK5Jh;Lu~uIckDav zU7p_kxUlCrYHMu*fHm%%DLcG*&e)86EE60IjcQW+F&tJ(tAebUFlA%hmq=w zCOuyybaDTlZZEg6lV5Hs>+U*u@aw#Ph3P42-;K|iGcYjz@^oqv43{@ni5{nT$27FR95Pm@em@ysbY=Q&5eiqUQ^V**=) zBtsg*3=GDNfQH=Lb!oaD?{|FdmH2=4ysh8FdUtzigXcBfdM+-JZC4*(d;EM({!_bO zRu7dEVJY<-4 z_;diKg+z+npBTSr`SSOV=dWJ=?!XUzyS%&%(ZrX>^pmF>PW;ZkCHQiu=BwXc`uBfq zl{DVWU(K@Qh>x%S<7Fn#w^Tpb&&b~&-oE0v^i4s&T9!ZTaczfq7>pUtFc>f&Acav< zWv0Ep_Re7j*;~DL{M>t7EZ!Wy{{D2~Nz3@g!sToKUl3&Q=XJN=YrE9)wf&dBj32&y zsNT8u7hmHy;m5bX#@BIaaR{I*=TX$gMWbkzLb6Mw<&;$TKfhy4e literal 0 HcmV?d00001 diff --git a/icons/turf/flooring/misc_vr.dmi b/icons/turf/flooring/misc_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5fa17f8bd6f53719ffb3d83e64da2566e604fdfd GIT binary patch literal 478 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"} + +/obj/item/weapon/paper/zoo/pirate + name = "odd note" + +/obj/item/weapon/paper/zoo/pirate/volk + info = {"Lady Nebula,

We can't keep these animals here permanently. We're running out of food and they're getting hungry. + Ma'isi went missing last night when we sent her to clean up the petting zoo. This morning, we found Tajaran hair in the + horse shit. I can't speak for everyone, but I'm out. If these animals break loose, we're all fucking dead. Please get + some extra rations of meat before the carnivores realize the electrified grilles don't work right now.

-Volk"} + +/obj/item/weapon/paper/zoo/pirate/nebula + info = {"Volk,

Throw some prisoners into the cages, then. The client took too long to pay up anyway.

-Lady Nebula"} + +/obj/item/weapon/paper/zoo/pirate/haveyouseen + info = {"Has anyone seen Za'med? I sent him to get something out of the tool shed and he hasn't come back.

-Meesei"} + +/obj/item/weapon/paper/zoo/pirate/warning + info = {"Attention crew,

Since apparently you fucking idiots didn't notice, that bulltaur who delivered the bears was + Jarome Rognvaldr. I'm sorry, maybe you scabs forgot? Does the name Jarome the Bottomless ring any fucking bells? If he's + seen again without a laser bolt hole through his fucking skull, I'm shoving anyone on guard duty up Zed's arse. Are we + clear?

-Lady Nebula"} \ No newline at end of file diff --git a/maps/RandomZLevels/zoo.dmm b/maps/RandomZLevels/zoo.dmm new file mode 100644 index 0000000000..374b6cdd9c --- /dev/null +++ b/maps/RandomZLevels/zoo.dmm @@ -0,0 +1,1564 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/obj/effect/blocker,/turf/space{density = 1; desc = "You can't go there!"; name = "The 4th Wall"},/area/space) +"ac" = (/obj/effect/blocker,/turf/space,/area/space) +"ad" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/awaymission/zoo/pirateship) +"ae" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/zoo/pirateship) +"af" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/awaymission/zoo/pirateship) +"ag" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/awaymission/zoo/pirateship) +"ah" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ai" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) +"aj" = (/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) +"ak" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTH)"; icon_state = "swall"; dir = 1},/area/awaymission/zoo/pirateship) +"al" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"am" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/awaymission/zoo/pirateship) +"an" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/awaymission/zoo/pirateship) +"ao" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ap" = (/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aq" = (/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) +"ar" = (/turf/simulated/shuttle/wall{tag = "icon-swall"; icon_state = "swall"; dir = 2},/area/awaymission/zoo/pirateship) +"as" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/awaymission/zoo/pirateship) +"at" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 8},/area/awaymission/zoo/pirateship) +"au" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"av" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 4},/area/awaymission/zoo/pirateship) +"aw" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/awaymission/zoo/pirateship) +"ax" = (/obj/structure/bed/roller,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ay" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"az" = (/obj/item/weapon/scalpel,/obj/structure/closet/crate,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aA" = (/obj/item/bodybag,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aB" = (/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aC" = (/obj/machinery/optable,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aD" = (/obj/machinery/computer/operating,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aE" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/awaymission/zoo/pirateship) +"aF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aG" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aH" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aI" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aJ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aL" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 5},/area/awaymission/zoo/pirateship) +"aM" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aN" = (/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aO" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aP" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aQ" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aR" = (/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aS" = (/obj/structure/largecrate,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aT" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c500,/obj/item/weapon/spacecash/c100,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) +"aU" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) +"aV" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/yellow,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aW" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aX" = (/obj/structure/sign/vacuum,/turf/simulated/shuttle/wall{tag = "icon-swall (NORTH)"; icon_state = "swall"; dir = 1},/area/awaymission/zoo/pirateship) +"aY" = (/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"aZ" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ba" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bb" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bc" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bd" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"be" = (/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) +"bf" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) +"bg" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bh" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bi" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bj" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bk" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bl" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bm" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bn" = (/obj/effect/floor_decal/symbol/pr,/turf/simulated/shuttle/wall{tag = "icon-swall"; icon_state = "swall"; dir = 2},/area/awaymission/zoo/pirateship) +"bo" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/awaymission/zoo/pirateship) +"bp" = (/obj/machinery/button/remote/airlock{id = "packerMed"; pixel_y = -24},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bq" = (/obj/machinery/sleeper,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"br" = (/obj/machinery/sleep_console,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bs" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/awaymission/zoo/pirateship) +"bt" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/wood,/area/awaymission/zoo/pirateship) +"bu" = (/turf/simulated/shuttle/wall{icon_state = "swall"; dir = 6},/area/awaymission/zoo/pirateship) +"bv" = (/obj/machinery/door/blast/shutters{id = "packerMed"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bw" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bx" = (/obj/structure/kitchenspike,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"by" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bz" = (/obj/machinery/button/remote/airlock{id = "packerCargo"; pixel_y = -24},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bA" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/zoo/tradeship) +"bB" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"bC" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"bD" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"bE" = (/turf/simulated/floor/carpet,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/awaymission/zoo/pirateship) +"bF" = (/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"bG" = (/obj/structure/table/reinforced,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bH" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bI" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bJ" = (/obj/structure/sink{dir = 2},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bK" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bL" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bM" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bN" = (/obj/structure/table/reinforced,/obj/item/weapon/material/knife/butch,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"bO" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"bP" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"bQ" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"bR" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bS" = (/obj/structure/table/reinforced,/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bT" = (/obj/structure/table/reinforced,/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bU" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/cobweb2,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"bV" = (/obj/machinery/door/blast/shutters{id = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"bW" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"bX" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"bY" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"bZ" = (/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"ca" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"cb" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/airless,/area/awaymission/zoo/tradeship) +"cc" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/zoo/tradeship) +"cd" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ce" = (/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cf" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cg" = (/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"ch" = (/obj/item/weapon/stool,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ci" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"cj" = (/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"ck" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cl" = (/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cm" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cn" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"co" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cp" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cq" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cr" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"ct" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"cu" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"cv" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cw" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cx" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/awaymission/zoo/tradeship) +"cy" = (/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cz" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cA" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cB" = (/obj/machinery/door/window{dir = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cC" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cD" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"cF" = (/obj/structure/closet/secure_closet/freezer/meat{opened = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cG" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cH" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cI" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship) +"cJ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cK" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"cL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"cM" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cN" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cO" = (/obj/machinery/door/airlock/silver,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cP" = (/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"cQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"cR" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"cS" = (/obj/machinery/atm{pixel_x = -32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cT" = (/obj/machinery/suit_cycler/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cU" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cV" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cW" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/medical_wall{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cX" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"cY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper/zoo/pirate/volk,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"cZ" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"da" = (/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"db" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dc" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dd" = (/obj/machinery/seed_extractor,/obj/item/seeds/angelmycelium,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"de" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"df" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"dg" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dh" = (/obj/item/device/multitool,/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) +"di" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/awaymission/zoo/pirateship) +"dj" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/awaymission/zoo/pirateship) +"dk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"dl" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dm" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dn" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"do" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"dp" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"dq" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"dr" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"ds" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"dt" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"du" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/tradeship) +"dv" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dw" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/awaymission/zoo/tradeship) +"dy" = (/obj/structure/table/reinforced,/obj/machinery/recharger,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"dz" = (/obj/item/weapon/stool,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"dA" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dB" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dC" = (/turf/simulated/wall/r_wall,/area/awaymission/zoo/pirateship) +"dD" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"dE" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dF" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"dG" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"dH" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = -32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dI" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dJ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dK" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"dM" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dN" = (/obj/machinery/vending/medical{pixel_y = -32; req_access = null},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"dO" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"dP" = (/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-11"; icon_state = "11"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"dQ" = (/obj/machinery/computer,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"dR" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dS" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"dT" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"dU" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"dV" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"dW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/zoo/pirateship) +"dX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dY" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"dZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"ea" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"ec" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ed" = (/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ee" = (/obj/machinery/power/fractal_reactor/fluff/converter{mapped_in = 1; power_generation_rate = 10000},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ef" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"eg" = (/obj/machinery/door/airlock/multi_tile/glass,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eh" = (/obj/structure/window/reinforced,/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"ei" = (/obj/machinery/door/window/southleft,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"ej" = (/obj/machinery/door/window/southright,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"ek" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"el" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"em" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"en" = (/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-8"; icon_state = "8"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"eo" = (/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"ep" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/zoo/pirateship) +"eq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"er" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"es" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"et" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"eu" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ev" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey1"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ew" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ex" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ey" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"ez" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eA" = (/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eB" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eC" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eD" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"eE" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/awaymission/zoo/pirateship) +"eF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"eG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"eH" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eI" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eJ" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"eK" = (/obj/machinery/door/airlock/multi_tile/glass,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/tradeship) +"eL" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"eM" = (/obj/structure/closet/crate/secure/weapon,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eN" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"eO" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eP" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"eQ" = (/obj/structure/table/rack,/obj/item/weapon/cell/high,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"eR" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eS" = (/obj/structure/table/steel_reinforced,/obj/machinery/newscaster{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eT" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/tradeship) +"eU" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/tradeship) +"eV" = (/obj/structure/mirror{pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/tradeship) +"eW" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/tradeship) +"eX" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"eY" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"eZ" = (/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-10"; icon_state = "10"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fa" = (/obj/effect/floor_decal/corner/red/diagonal,/mob/living/simple_animal/hostile/pirate,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"fb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fc" = (/mob/living/simple_animal/hostile/vore/alien{faction = "pirate"},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fd" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fe" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"ff" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fg" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"fh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"fi" = (/obj/machinery/computer,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fj" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/tradeship) +"fk" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fl" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fm" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fn" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fo" = (/obj/machinery/door/window/westright{name = "Storefront"; req_access = list(160)},/obj/structure/table/marble,/turf/simulated/shuttle/floor4{icon_state = "floor6"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fp" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor4{icon_state = "floor6"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fq" = (/obj/effect/decal/cleanable/blood/xeno,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fr" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fs" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ft" = (/obj/structure/mopbucket,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fu" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fv" = (/obj/item/weapon/cell/high,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"fw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"fx" = (/obj/machinery/computer,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fy" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/tradeship) +"fz" = (/obj/machinery/door/airlock/command,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fA" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fC" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fD" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fE" = (/obj/machinery/door/window/westleft{name = "Storefront"; req_access = list(160)},/obj/structure/window/reinforced,/obj/structure/table/marble,/turf/simulated/shuttle/floor4{icon_state = "floor6"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fF" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/awaymission/zoo/pirateship) +"fG" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"fH" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/item/weapon/material/kitchen/utensil/knife,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fI" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fJ" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey2"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fK" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"fL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fM" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/pirateship) +"fO" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"fP" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fQ" = (/obj/structure/table/steel_reinforced,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Esteban"; pixel_y = 8; tag = "icon-plant-09"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fR" = (/obj/machinery/vending/assist{contraband = null; name = "Old Vending Machine"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fS" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fT" = (/obj/machinery/vending/sovietsoda,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fU" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/soap,/obj/item/weapon/towel{color = "#0000FF"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fV" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 2},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"fW" = (/obj/machinery/door/window/westright,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fX" = (/obj/machinery/button/remote/blast_door{id = "trade"; name = "Shop Shutters"; pixel_x = 0; pixel_y = -26},/turf/simulated/shuttle/floor4{icon_state = "floor6"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fY" = (/turf/simulated/shuttle/floor4{icon_state = "floor6"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"fZ" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 2},/area/awaymission/zoo/pirateship) +"ga" = (/obj/item/weapon/material/kitchen/utensil/knife,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"gb" = (/obj/machinery/conveyor_switch/oneway{id = "meatConvey2"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"gc" = (/obj/item/weapon/mop,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"gd" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"ge" = (/obj/machinery/vending/boozeomat{req_access = null},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gf" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/zoo/tradeship) +"gg" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gh" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gi" = (/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gj" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"gk" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"gl" = (/obj/structure/reagent_dispensers,/turf/simulated/floor/tiled/freezer,/area/awaymission/zoo/pirateship) +"gm" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gn" = (/obj/machinery/door/window/northleft,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"go" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gp" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gq" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 2; start_pressure = 740.5},/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gr" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gs" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gt" = (/obj/structure/frame{anchored = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gu" = (/obj/machinery/light/small,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"gv" = (/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/kitchenspike,/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship) +"gw" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor,/area/awaymission/zoo/pirateship) +"gx" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gy" = (/obj/structure/largecrate/animal/cat,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gz" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access = list(160)},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gA" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHWEST)"; icon_state = "swall"; dir = 10},/area/awaymission/zoo/pirateship) +"gB" = (/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gC" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gD" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "DEAR DAIRY: So we was doing our typpical route when the captain says we've been picking up weird signals on some backwatter planet. Madsen wanted to stay on course but he ain't the captain, so we went out of the way to check it out. There was lots of rocks on the way, but we got to the planet fine. Found a big fancy camp with nobody around and this big metal donut thing with NT stamps all over it right in the middle. Case of beer too. Captain reckons we can pass it off to some buyer in the Syndicate. Ingram says it's bad luck and that someone is going to come look for it but it sounds like better money than selling bad meat to jerky companies."; name = "Old Diary"},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gE" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gF" = (/obj/structure/closet,/obj/item/clothing/under/overalls,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"gH" = (/obj/structure/closet/wardrobe/captain,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gI" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gJ" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"gK" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"gL" = (/obj/machinery/photocopier,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"gM" = (/obj/structure/closet/crate/solar,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"gN" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced,/area/awaymission/zoo/pirateship) +"gO" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gP" = (/obj/item/frame/apc,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gQ" = (/obj/structure/ore_box,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gR" = (/obj/item/stack/cable_coil/random{amount = 5},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"gS" = (/obj/machinery/computer/arcade,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gT" = (/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"gU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"gV" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"gW" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"gX" = (/obj/structure/table/woodentable,/obj/item/device/laptop,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"gY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"gZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"ha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/tradeship) +"hb" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated,/area/awaymission/zoo/pirateship) +"hc" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"hd" = (/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"he" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hf" = (/obj/structure/closet,/obj/item/clothing/under/lawyer/bluesuit,/obj/item/clothing/suit/apron,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hg" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/zoo/syndieship) +"hh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"hi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"hj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"hk" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/zoo/syndieship) +"hl" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"hm" = (/obj/structure/table/glass,/obj/machinery/computer3/wall_comp/telescreen/entertainment{pixel_y = -35},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"hn" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"ho" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"hp" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"hq" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/awaymission/zoo/tradeship) +"hr" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor4{icon_state = "floor7"; name = "shuttle floor"},/area/awaymission/zoo/tradeship) +"hs" = (/obj/machinery/vending/engivend,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"ht" = (/obj/machinery/vending/tool,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/tradeship) +"hu" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"hv" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/yellow,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"hw" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/zoo/syndieship) +"hx" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hy" = (/obj/machinery/computer,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hz" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hA" = (/obj/structure/sign/vacuum,/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/zoo/pirateship) +"hB" = (/obj/effect/floor_decal/symbol/pr,/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/awaymission/zoo/pirateship) +"hC" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hD" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hE" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hF" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hG" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hH" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hI" = (/turf/simulated/wall,/area/awaymission/zoo) +"hJ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/zoo) +"hK" = (/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"hL" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"hM" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hN" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hO" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hP" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship) +"hQ" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"hR" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hS" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hT" = (/obj/machinery/light{dir = 4},/obj/machinery/computer,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hU" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/floor/plating,/area/awaymission/zoo) +"hV" = (/turf/simulated/floor/plating,/area/awaymission/zoo) +"hW" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1},/turf/simulated/floor,/area/awaymission/zoo/pirateship) +"hX" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hY" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"hZ" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"ia" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ib" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ic" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"id" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"ie" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"if" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/awaymission/zoo/pirateship) +"ig" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/zoo/syndieship) +"ih" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"ii" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/zoo/syndieship) +"ij" = (/obj/structure/flora/pottedplant{tag = "icon-plant-24"; icon_state = "plant-24"},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ik" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"il" = (/turf/simulated/floor/tiled,/area/awaymission/zoo) +"im" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) +"in" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship) +"io" = (/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ip" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iq" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"ir" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"is" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"it" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iu" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"iv" = (/obj/structure/flora/pottedplant{tag = "icon-plant-06"; icon_state = "plant-06"},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"iw" = (/obj/structure/flora/pottedplant{tag = "icon-plant-xmas"; icon_state = "plant-xmas"},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ix" = (/obj/effect/floor_decal/symbol/em{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"iy" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"iz" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"iA" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) +"iB" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iC" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iD" = (/obj/structure/closet,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/zoo) +"iF" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iG" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"iI" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iJ" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/syndieship) +"iK" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/syndieship) +"iL" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/awaymission/zoo/syndieship) +"iM" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 0; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iN" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iO" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iP" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"iQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"iR" = (/obj/machinery/door/window/southleft,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iS" = (/obj/machinery/door/window/southright,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iT" = (/obj/machinery/door/window/northleft,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iU" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iV" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"iX" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iY" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"iZ" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0; tag = "permflash"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"ja" = (/mob/living/simple_animal/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jb" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jc" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jd" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"je" = (/obj/machinery/door/window/eastleft,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jf" = (/obj/machinery/door/window/westright,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jg" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jh" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ji" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jj" = (/obj/machinery/door/window/eastright,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jk" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "He doesn't seem like he's looking for a fight."; faction = "neutral"; friendly = "hugs"; name = "\improper Mercenary"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jl" = (/obj/machinery/door/window/westleft,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jm" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jn" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jo" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jp" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jq" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jr" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"js" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jt" = (/obj/structure/table/standard,/obj/item/borg/sight/thermal,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"ju" = (/obj/machinery/light{dir = 4},/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jw" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jz" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jA" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jB" = (/obj/machinery/door/window/eastleft,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jC" = (/obj/item/weapon/stool/padded,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jF" = (/obj/machinery/door/window/eastright,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jH" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jI" = (/obj/structure/table/rack,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jK" = (/obj/machinery/door/window/northleft,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/weapon/hemostat,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jM" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jN" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jO" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jP" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jQ" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jR" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/awaymission/zoo/syndieship) +"jS" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jT" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jU" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jV" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jX" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/awaymission/zoo/syndieship) +"jY" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"jZ" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"ka" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/zoo/syndieship) +"kb" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/awaymission/zoo/syndieship) +"kc" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/awaymission/zoo/syndieship) +"kd" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/zoo/syndieship) +"ke" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/awaymission/zoo/syndieship) +"kf" = (/obj/effect/floor_decal/symbol/es{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"kg" = (/obj/effect/floor_decal/symbol/sa{pixel_y = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"kh" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ki" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"kj" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) +"kk" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kl" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) +"km" = (/turf/simulated/floor/wood,/area/awaymission/zoo) +"kn" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"ko" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kp" = (/obj/machinery/door/window/northleft,/turf/simulated/floor/wood,/area/awaymission/zoo) +"kq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kr" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"ks" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"ku" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kv" = (/obj/machinery/door/airlock/silver{name = "Men's Restroom"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"kw" = (/obj/machinery/door/airlock/silver{name = "Women's Restroom"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"kx" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"ky" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kz" = (/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/grass,/area/awaymission/zoo) +"kA" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/grass,/area/awaymission/zoo) +"kB" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kC" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kD" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kE" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kF" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kJ" = (/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"kK" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) +"kL" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/zoo) +"kM" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/awaymission/zoo) +"kN" = (/mob/living/simple_animal/chicken{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kO" = (/mob/living/simple_animal/chick,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kP" = (/mob/living/simple_animal/corgi/puppy{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"kQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kR" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"kS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"kU" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kV" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) +"kW" = (/obj/structure/bed/chair/wood{dir = 4},/turf/simulated/floor/wood,/area/awaymission/zoo) +"kX" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/zoo) +"kY" = (/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/wood,/area/awaymission/zoo) +"kZ" = (/obj/structure/sink/kitchen{pixel_y = 30},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"la" = (/obj/structure/table/marble,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lb" = (/obj/machinery/vending/food,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lc" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"ld" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"le" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/hooded/ian_costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lf" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/hooded/carp_costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lg" = (/obj/structure/table/rack,/obj/effect/landmark/costume,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lh" = (/obj/structure/table/rack,/obj/item/clothing/suit/chickensuit,/obj/item/clothing/head/chicken,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"li" = (/obj/structure/table/rack,/obj/item/clothing/head/sombrero,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lj" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lk" = (/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"ll" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lm" = (/obj/structure/table/rack,/obj/item/clothing/suit/monkeysuit,/obj/item/clothing/mask/gas/monkeymask,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"ln" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,/obj/item/clothing/head/plaguedoctorhat,/obj/item/clothing/mask/gas/plaguedoctor,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lo" = (/obj/structure/table/rack,/obj/item/clothing/under/owl,/obj/item/clothing/mask/gas/owl_mask,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lp" = (/obj/structure/table/rack,/obj/item/toy/waterflower,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lq" = (/obj/structure/table/rack,/obj/item/toy/sword,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lr" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"ls" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"lt" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"lu" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"lv" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"lw" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"lx" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"ly" = (/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lz" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lA" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lB" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/cat/bird/fluff/kea{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lC" = (/obj/structure/flora/ausbushes/pointybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lD" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lE" = (/obj/structure/flora/ausbushes/pointybush,/mob/living/simple_animal/cat/bird/fluff/pink_too{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lF" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lG" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lH" = (/obj/structure/urinal{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lI" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lJ" = (/obj/item/frame/mirror,/turf/simulated/wall,/area/awaymission/zoo) +"lK" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lL" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lM" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"lN" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/zoo) +"lO" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"lP" = (/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"lQ" = (/obj/structure/table/marble,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"lR" = (/obj/structure/table/marble,/obj/item/weapon/pen/multi,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"lS" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"lT" = (/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"lU" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/item/weapon/coin/gold,/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"lV" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"lW" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lX" = (/mob/living/simple_animal/cat/bird/fluff/hooded_too{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lY" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"lZ" = (/obj/structure/flora/ausbushes/fullgrass,/mob/living/simple_animal/cat/bird/fluff/grey_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"ma" = (/obj/structure/flora/ausbushes,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mb" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_animal/cat/bird/fluff/yellowish_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mc" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/cat/bird/fluff/bluegreen_Budgerigar{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"md" = (/obj/structure/flora/pottedplant{tag = "icon-applebush"; icon_state = "applebush"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"me" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"mf" = (/mob/living/simple_animal/hostile/vore/retaliate/horse,/turf/simulated/floor/wood,/area/awaymission/zoo) +"mg" = (/obj/effect/landmark/away,/turf/simulated/floor/wood,/area/awaymission/zoo) +"mh" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mi" = (/obj/structure/table/rack,/obj/random/action_figure,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mj" = (/obj/structure/table/rack,/obj/item/weapon/storage/fancy/crayons,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mk" = (/obj/structure/table/rack,/obj/random/plushie,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"ml" = (/obj/structure/table/marble,/obj/item/toy/nanotrasenballoon,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"mm" = (/obj/structure/table/marble,/obj/machinery/cash_register{tag = "icon-register_idle (NORTH)"; icon_state = "register_idle"; dir = 1},/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"mn" = (/obj/structure/table/marble,/obj/structure/safe/floor,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/card/emag,/obj/item/weapon/beartrap,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/weapon/grenade/spawnergrenade/spesscarp,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/melee/energy/sword/pirate,/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"mo" = (/obj/structure/table/rack,/obj/item/device/camera_film,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mp" = (/obj/structure/table/rack,/obj/item/weapon/storage/photo_album,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mq" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mr" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"ms" = (/obj/effect/floor_decal/spline/plain{tag = "icon-spline_plain_full (NORTH)"; icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{tag = "icon-monkey"; name = "Statue"; desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "monkey"},/turf/simulated/floor/grass,/area/awaymission/zoo) +"mt" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"mu" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"mv" = (/obj/structure/toilet{dir = 8},/obj/effect/landmark/away,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"mw" = (/obj/structure/flora/pottedplant{tag = "icon-plant-16"; icon_state = "plant-16"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"mx" = (/obj/structure/table/marble,/obj/machinery/cash_register{tag = "icon-register_idle (NORTH)"; icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"my" = (/mob/living/simple_animal/chick,/turf/simulated/floor/wood,/area/awaymission/zoo) +"mz" = (/mob/living/simple_animal/hostile/retaliate/goat{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"mA" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"mB" = (/obj/item/weapon/coin/silver,/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"mC" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"mD" = (/mob/living/simple_animal/cat/bird/fluff/green_budgerigar{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mE" = (/obj/structure/flora/ausbushes/sunnybush,/mob/living/simple_animal/cat/bird/fluff/cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mF" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mG" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"mH" = (/mob/living/simple_animal/cow{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"mI" = (/obj/structure/table/rack,/obj/item/toy/nanotrasenballoon,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mJ" = (/obj/structure/table/rack,/obj/item/toy/cultsword,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mK" = (/obj/structure/table/rack,/obj/item/toy/crossbow,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mL" = (/obj/structure/table/rack,/obj/item/toy/bosunwhistle,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mM" = (/obj/structure/table/rack,/obj/item/weapon/storage/wallet/poly,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mN" = (/obj/structure/table/rack,/obj/item/weapon/storage/pill_bottle/dice_nerd,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mO" = (/obj/structure/table/rack,/obj/item/weapon/beach_ball,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mP" = (/obj/structure/table/rack,/obj/item/weapon/soap/deluxe,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mQ" = (/obj/structure/table/rack,/obj/item/device/binoculars,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mR" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/clown,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/under/seromi/rainbow,/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/turf/simulated/floor/holofloor/carpet,/area/awaymission/zoo) +"mS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"mT" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"mU" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/awaymission/zoo) +"mV" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"mW" = (/mob/living/simple_animal/cat/bird/fluff/yellowish_cockatiel{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mX" = (/mob/living/simple_animal/cat/bird/fluff/white_caique{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"mY" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"mZ" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"na" = (/obj/structure/closet/crate/bin,/obj/item/trash/candy,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"nb" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) +"nc" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) +"nd" = (/obj/machinery/newscaster,/turf/simulated/wall,/area/awaymission/zoo) +"ne" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"nf" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"ng" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"nh" = (/obj/effect/floor_decal/symbol/lo,/turf/simulated/wall,/area/awaymission/zoo) +"ni" = (/obj/machinery/door/airlock/glass{icon_state = "door_closed"; locked = 0; name = "Exhibit Airlock"},/turf/simulated/floor/holofloor/lino,/area/awaymission/zoo) +"nj" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"nk" = (/obj/effect/decal/remains/human,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"nl" = (/obj/structure/window/reinforced,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"nm" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/wood,/area/awaymission/zoo) +"nn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"no" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Not to be confused with the common Earth bat, the Space Bat is a mammalian-like creature that is capable of surviving in the vacuum of space! These creatures live and fly in groups, and are most commonly found in caves, such as those on asteroids, or small planetary bodies with light gravity and no atmosphere. These creatures survive by sucking the blood of wayward space travelers, and are considered to be a pest by the Free Trade Union for their habit of infesting space ships sitting at dock. Their origin is currently unknown."; name = "\improper Space Bat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"np" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "This giant snake is a rare beast native to Paraiso, in the Carnelia system. Though normally only found deep in the jungles, these ravenous monsters have been known to slither out onto the planet's many beach resorts to swallow up unwary sunbathers. Otherwise, the creature's diet consists mainly of monkeys that were accidentally introduced to the planet by pet owners. The presence of the invasive monkey species had caused giant snake populations to swell in the 2530's, but today, due to excessive hunting, the giant snake's numbers have dwindled to the point of being an endangered species."; name = "\improper Giant Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Catgirls (not to be confused with Nekos, an interspecies hybrid born of a union between Human and Tajaran parents) were created artificially with the intention of producing a Human-feline hybrid that could serve aboard a space-faring vessel, control pests aboard such ships, and even alleviate stress among male crew members. Their eyes are between 20% and 50% larger than the average Human, which gives them their famously 'Kawaii' appearance. The large eyes trigger a subconscious psychological 'cute' response among Humans, causing them to usually become relaxed in their presence. Some catgirls have learned to abuse this trait, and have evolved to prey upon Humans who linger too close for too long."; name = "\improper Catgirl Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ns" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Ir'ash'uint (translating roughly from Skrellian to 'Giant Frog' in Galactic Common), this amphibian lives on the Skrell homeworld Qerrbalak, in the Qerr’valis System. The Giant Frog shares a common, albeit distant ancestry with the Skrell, but unlike the Skrell, its diet is exclusively carnivorous. Its diet includes large insects, fish, and indeed, even Skrell."; name = "\improper Giant Frog Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nv" = (/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"nw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ny" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"nz" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"nA" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nB" = (/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"nC" = (/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"nD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nF" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"nG" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"nH" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nI" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nJ" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"nK" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"nL" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Exhibit Airlock"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"nM" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nN" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nO" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"nP" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"nQ" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"nR" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"nS" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"nT" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"nU" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"nV" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"nW" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"nX" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"nY" = (/obj/effect/floor_decal/symbol/da,/turf/simulated/wall,/area/awaymission/zoo) +"nZ" = (/obj/structure/flora/ausbushes/stalkybush,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"oa" = (/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"ob" = (/obj/structure/flora/ausbushes,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"oc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"od" = (/turf/simulated/floor/lino,/area/awaymission/zoo) +"oe" = (/obj/structure/bed/chair,/obj/structure/showcase{tag = "icon-Human_male"; name = "Statue"; desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "Human_male"},/turf/simulated/floor/lino,/area/awaymission/zoo) +"of" = (/turf/simulated/mineral/ignore_mapgen,/area/awaymission/zoo) +"og" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"oh" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"oi" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"oj" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"ok" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"ol" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass4"; icon_state = "fullgrass4"},/area/awaymission/zoo) +"om" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"on" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"oo" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"op" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"oq" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"or" = (/turf/simulated/floor/holofloor/grass{icon = 'icons/turf/flooring/misc_vr.dmi'; icon_state = "hive"; name = "giant honeycomb"},/area/awaymission/zoo) +"os" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"ot" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"ou" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beachcorner (NORTH)"; icon_state = "beachcorner"; dir = 1},/area/awaymission/zoo) +"ov" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"ow" = (/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"ox" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"oy" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beachcorner"; icon_state = "beachcorner"; dir = 2},/area/awaymission/zoo) +"oz" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/red{pixel_x = -5; pixel_y = -1},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/lino,/area/awaymission/zoo) +"oA" = (/obj/structure/table/reinforced,/obj/item/weapon/folder{pixel_x = -4},/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/internalaffairs,/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/lino,/area/awaymission/zoo) +"oB" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor/lino,/area/awaymission/zoo) +"oC" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Not to be confused with the common Earth bat, the Space Bat is a mammalian-like creature that is capable of surviving in the vacuum of space! These creatures live and fly in groups, and are most commonly found in caves, such as those on asteroids, or small planetary bodies with light gravity and no atmosphere. These creatures survive by sucking the blood of wayward space travelers, and are considered to be a pest by the Free Trade Union for their habit of infesting space ships sitting at dock. Their origin is currently unknown."; name = "\improper Space Bat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"oD" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"oE" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"oF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "This giant snake is a rare beast native to Paraiso, in the Carnelia system. Though normally only found deep in the jungles, these ravenous monsters have been known to slither out onto the planet's many beach resorts to swallow up unwary sunbathers. Otherwise, the creature's diet consists mainly of monkeys that were accidentally introduced to the planet by pet owners. The presence of the invasive monkey species had caused giant snake populations to swell in the 2530's, but today, due to excessive hunting, the giant snake's numbers have dwindled to the point of being an endangered species."; name = "\improper Giant Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"oG" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"oH" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"oI" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"oJ" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"oK" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"oL" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"oM" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"oN" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"oO" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"oP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Catgirls (not to be confused with Nekos, an interspecies hybrid born of a union between Human and Tajaran parents) were created artificially with the intention of producing a Human-feline hybrid that could serve aboard a space-faring vessel, control pests aboard such ships, and even alleviate stress among male crew members. Their eyes are between 20% and 50% larger than the average Human, which gives them their famously 'Kawaii' appearance. The large eyes trigger a subconscious psychological 'cute' response among Humans, causing them to usually become relaxed in their presence. Some catgirls have learned to abuse this trait, and have evolved to prey upon Humans who linger too close for too long."; name = "\improper Catgirl Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"oQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Ir'ash'uint (translating roughly from Skrellian to 'Giant Frog' in Galactic Common), this amphibian lives on the Skrell homeworld Qerrbalak, in the Qerr’valis System. The Giant Frog shares a common, albeit distant ancestry with the Skrell, but unlike the Skrell, its diet is exclusively carnivorous. Its diet includes large insects, fish, and indeed, even Skrell."; name = "\improper Giant Frog Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"oR" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"oS" = (/mob/living/simple_animal/hostile/vore/frog{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"oT" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (SOUTHWEST)"; icon_state = "beach"; dir = 10},/area/awaymission/zoo) +"oU" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/awaymission/zoo) +"oV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/zoo) +"oW" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"oX" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"oY" = (/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"oZ" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"pa" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"pb" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"pc" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"pd" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"pe" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"pf" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"pg" = (/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) +"ph" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach"; icon_state = "beach"; dir = 2},/area/awaymission/zoo) +"pi" = (/mob/living/simple_animal/corgi{faction = "zoo"},/turf/simulated/floor/lino,/area/awaymission/zoo) +"pj" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"pk" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"pl" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"pm" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"pn" = (/obj/structure/flora/ausbushes/lavendergrass,/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"po" = (/mob/living/simple_animal/hostile/vore/retaliate/bee{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/turf/flooring/misc_vr.dmi'; icon_state = "hive"; name = "giant honeycomb"},/area/awaymission/zoo) +"pp" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"pq" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"pr" = (/obj/structure/bed/chair,/turf/simulated/floor/lino,/area/awaymission/zoo) +"ps" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/awaymission/zoo) +"pt" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"pu" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"pv" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"pw" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"px" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"py" = (/mob/living/simple_animal/hostile/vore/large,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"pz" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"pA" = (/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pB" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pC" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pD" = (/obj/structure/flora/ausbushes/lavendergrass,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pE" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Corgi (Welsh for 'dwarf dog') is a small type of herding dog that originated in Wales, on the planet Earth (Sol system). Two separate breeds are recognized: the Pembroke Welsh Corgi (as seen here) and the Cardigan Welsh Corgi. Historically, the Pembroke has been attributed to the influx of dogs alongside Flemish weavers from around the 10th century, while the Cardigan is attributed to the dogs brought with Norse settlers, in particular a common ancestor of the Swedish Vallhund. A certain degree of inbreeding between the two types has been suggested to explain the similarities between the two. Here it is seen in a replica of its natural habitat, the common office building, where it participates in a symbiotic relationship with the Humans who also reside here. In exchange for treats and bellyrubs, the Corgi provides the Humans with emotional support in the otherwise soul-crushing environment of the corporate workplace."; name = "\improper Corgi Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"pG" = (/obj/structure/table/reinforced,/turf/simulated/floor/lino,/area/awaymission/zoo) +"pH" = (/mob/living/simple_animal/hostile/scarybat{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"pI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Tindalos is a large insect creature native to the Tubau plains of Zzarlaanis, in the Tiphonia system. The Human settlers who live on the planet have compared them to wingless grasshoppers. At high population densities and under certain environmental conditions, the Tindalos have been known to change behavior and form swarms. Tindalos are plant-eaters, sometimes becoming serious pests of cereals, vegetables and pasture, especially when they swarm in their millions and destroy crops over wide areas."; name = "\improper Tindalos Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"pJ" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"pK" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"pL" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"pM" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"pN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Cats were once common features on many trading, exploration, and naval ships in the early days of Human sailing. Cats were attracted by an abundance of mice and rats, which can cause damage to ropes, woodwork, and eventually as technology progressed, electrical wiring. Rodents also presented a threat to the stores the ship carried, both as cargo and as food for sailors. Furthermore, rats and mice were also sources of disease, which was dangerous for ships at sea for long periods of time. As Humanity thrust its self into the age of slipspace, the Cat has again made the common spaceship its hunting ground for exactly the same reasons it had in times of old. Skrell scientists have noted how the common Cat has been able to tame and even control Humans. It is believed that had the cat ever achieved sentience, Humanity its self would fall to its knees before their feline overlords. Fortunately for Humans across the galaxy, there is negligible evolutionary benefit for the cat to evolve further."; name = "\improper Cat Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"pO" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pP" = (/obj/structure/flora/ausbushes/genericbush,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"pQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Space Bumble Bee is a large, usually docile stinging insect native to Virgo-Prime in the Virgo Erigone system. It normally lives in small oases around what few bodies of water exist on the arid landscape, but ever since Humans have come to colonize the world, they have been discovered in city parks even in the capital city of Anur. Despite their gentle demeanor however, they can and will attack when provoked, and are capable of opening their mandibles wide enough to swallow a Human sized victim whole. Deep in their abdomen, they process their victims along with harvested nectar into rich honey."; name = "\improper Space Bumble Bee Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"pR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Sobaka, also known as the Dog Shark, is an amphibious, cold-blooded animal that lives in the tropical waters of Qerrbalak, in the Qerr’valis System. The Sobaka hunts fish and small animals while on land, but would prefer to scavenge than to hunt. Its nose is far more powerful than any canine species, and are able to smell both on land, and in the sea. The Sobaka are commonly employed as drug-sniffing and bomb-sniffing animals by Skrellian security forces. The Sobaka is a close relative of the sentient species called Akula."; name = "\improper Sobaka Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"pS" = (/mob/living/carbon/human/sharkm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) +"pT" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"pU" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"pV" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"pW" = (/mob/living/simple_animal/hostile/vore/large{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"pX" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"pY" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"pZ" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qa" = (/mob/living/simple_animal/hostile/vore/retaliate/catgirl{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"qb" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qc" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"qd" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"qe" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qf" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"qg" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"qh" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qi" = (/obj/effect/landmark/away,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qj" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"qk" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"ql" = (/obj/structure/flora/ausbushes/palebush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qm" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"qn" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"qo" = (/mob/living/simple_animal/tindalos{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"qp" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"qq" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"qr" = (/mob/living/simple_animal/cat{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"qs" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qt" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qu" = (/obj/structure/flora/ausbushes/fullgrass,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qv" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qw" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"qx" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"qy" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qz" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qA" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qB" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qC" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qD" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 5},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qE" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"qF" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qG" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"qH" = (/obj/structure/flora/ausbushes/genericbush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"qI" = (/obj/structure/flora/ausbushes/palebush,/mob/living/simple_animal/hostile/vore/retaliate/bee{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/turf/flooring/misc_vr.dmi'; icon_state = "hive"; name = "giant honeycomb"},/area/awaymission/zoo) +"qJ" = (/obj/structure/closet/lawcloset,/turf/simulated/floor/lino,/area/awaymission/zoo) +"qK" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qL" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qM" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qN" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/lino,/area/awaymission/zoo) +"qO" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qP" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"qQ" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"qR" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"qS" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (NORTHWEST)"; icon_state = "beach"; dir = 9},/area/awaymission/zoo) +"qT" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (NORTH)"; icon_state = "beach"; dir = 1},/area/awaymission/zoo) +"qU" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (NORTHEAST)"; icon_state = "beach"; dir = 5},/area/awaymission/zoo) +"qV" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qW" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet,/turf/simulated/floor/lino,/area/awaymission/zoo) +"qX" = (/obj/effect/floor_decal/carpet{tag = "icon-carpet"; icon_state = "carpet"; dir = 2},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/lino,/area/awaymission/zoo) +"qY" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"qZ" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"ra" = (/obj/structure/flora/ausbushes/sunnybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"rb" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beachcorner (EAST)"; icon_state = "beachcorner"; dir = 4},/area/awaymission/zoo) +"rc" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beachcorner (WEST)"; icon_state = "beachcorner"; dir = 8},/area/awaymission/zoo) +"rd" = (/obj/machinery/photocopier,/turf/simulated/floor/lino,/area/awaymission/zoo) +"re" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"rf" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"rg" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass2"; icon_state = "fullgrass2"},/area/awaymission/zoo) +"rh" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass4"; icon_state = "fullgrass4"},/area/awaymission/zoo) +"ri" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass4"; icon_state = "fullgrass4"},/area/awaymission/zoo) +"rj" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass4"; icon_state = "fullgrass4"},/area/awaymission/zoo) +"rk" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"rl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rm" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"rn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ro" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Park Center"; dir = 9},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"rp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "A mouse (plural: mice), native to Earth in the Sol system, is a small rodent characteristically having a pointed snout, small rounded ears, a body-length scaly tail and a high breeding rate. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are locally common. They are known to invade homes and space ships for food and shelter. Cats, wild dogs, foxes, birds of prey, snakes and even certain kinds of arthropods have been known to prey heavily upon mice. Nevertheless, because of its remarkable adaptability to almost any environment, the mouse is one of the most successful mammalian genera living in the galaxy today."; name = "\improper Mouse Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Sparra are a bird-like race from the planets Eltus and Tal in the Vilous system. These creatures have compared intelligence comparable to avians of the Corvus genus, from Earth. The Sparra are believed to share a common ancestry with one of the sentient races on Tal, called Nevreas. The Sparra have exhibited behavior including complex use of primitive tools, and even modification of tools, a trait which has not even been witnessed in primates besides Humans."; name = "\improper Sparra Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Diyaab is a predatory creature whose various geneses dwell at the upper latitudes of both hemispheres of most continents on Meralar, in the Rarkajar system. They resemble wolverines in appearance, but are slightly larger, and with longer legs. They also have long ears and leonine tails tipped with a contrasting color, the specifics of which vary based on species. They live in packs of up to seven individuals. They are omnivores, consuming Chur'eech nuts and Thaa'dra, as well as fish, eggs, Arnab, and Dubaab. However, they are most notable for being able to take down larger creatures, including Tajara, by using group tactics. They communicate through body language involving the ears and tail. If forcibly separated from their packs with no means of returning, a Diyaab will lay down and die. It has been theorized that they are related to the Farwa."; name = "\improper Diyaab Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Neaera can be essentially described as an odd mix of Salamander, Frog and Monkey, and often travel about the swamps of Qerrbalak via the trees. They hunt the larger insects of the swamps, as well as eat the plant life in the areas. They are most often neutral to both Skrell and Human presence, but they will defend themselves if provoked."; name = "\improper Neaera Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rt" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"ru" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rv" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rw" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rx" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/awaymission/zoo) +"ry" = (/mob/living/carbon/human/sparram{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"rz" = (/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rA" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/grass,/area/awaymission/zoo) +"rB" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rC" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/grass,/area/awaymission/zoo) +"rD" = (/obj/item/trash/syndi_cakes,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rE" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rF" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rG" = (/mob/living/simple_animal/mouse{faction = "zoo"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"rH" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rI" = (/obj/item/trash/chips,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rK" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/zoo) +"rL" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/awaymission/zoo) +"rM" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rN" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rO" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rP" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rQ" = (/mob/living/carbon/human/neaera{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"rR" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rS" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/awaymission/zoo) +"rU" = (/mob/living/simple_animal/hostile/diyaab{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"rV" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rW" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/grass,/area/awaymission/zoo) +"rX" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rY" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"rZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sa" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/zoo) +"sb" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/awaymission/zoo) +"sc" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/awaymission/zoo) +"sd" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/zoo) +"se" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/zoo) +"sf" = (/turf/simulated/floor,/area/awaymission/zoo) +"sg" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/awaymission/zoo) +"sh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/zoo) +"si" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Xenomorph XX121, better known just as Xenomorph (which literally translates to 'alien form'), are an extraterrestrial, endoparasitoid species with multiple life cycles, possibly originating from the planet Proteus (also known as Xenomorph Prime), which orbits the star A6 454. One of the deadliest of all known alien species, these creatures need a host organism in order to reproduce. The appearance of the Xenomorph varies depending on its host. The Human phenotype is generally around 7–8 feet, and roughly 136.0 to 181.4 kilograms in weight, with a long, muscular tail and large, curved, oblong head. The Queen of this species is generally twice as large (they can grow even larger, some even up to 100 feet tall, and stronger if given time) and possesses superior speed, strength and intelligence. The term Xenomorph is derived from the Greek words xeno ('stranger', 'alien', and 'foreigner') and morphe ('form', 'shape'). There are no solid facts as to the origins of the Xenomorph species; instead, there are many assumptions which cannot be confirmed. Based on the limited information we have, the most commonly accepted hypothesis is that they are an artificially created species, although another hypothesis says that they evolved naturally on a planet much different than our own. The Xenomorph lives in a hive together with its queen. Amazingly, the blood and other bodily fluids of the Xenomorph are highly acidic. It is not yet understood how a creature of such biology can exist. The planet Proteus is also home to rare, red-hued Xenomorphs, who frequently fight their black-colored rivals."; name = "\improper Xenomorph Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Space spider is a broad classification is used to indicate a subspecies of arachnids discovered in the Tau sector. Extremely dangerous and voracious, this family of arachnids managed to evolve and adapt to grow and thrive in a variety of atmospheric conditions, even the complete lack of an atmosphere altogether. The females, bigger than the males, tend to lay their eggs in the bodies of animals killed during hunts. From there, the young specimens (spiderlings) will feed on the corpse for the first few hours of life until the body is picked clean, after which they will leave the nest to begin hunting for small parasites and anaerobic or aerobic creatures. Once they reach adulthood, their societal structure seems to change, pushing them to hunt in small packs, mostly favoring their numbers and aggressive nature, and inoculating a deadly toxin in their victims before sucking the nutrients dry."; name = "\improper Space Spider Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Samak are the apex predator in the various plains regions of the northern hemisphere of Meralar. Unlike many creatures of Meralar, it does not have any fur to speak of. Instead, it is completely covered in thick armored plates which act as a barrier between the Samak's internal warmth and the cold environment. However, this is still not that efficient, so the Samak feed often to keep themselves warm. The Samak have six thick legs tipped with broad claws, and roughly aerodynamic bodies. They burrow underground, detecting prey through incredibly keen thermal detection. They pop up suddenly, grab their next meal, and return underground just as quickly. They prefer larger prey, such as the Baqara, Elu'a Eli, and Tajaran. Due to their voracious appetites and tendency to ruin mine shafts and infrastructure, they have been hunted almost to extinction, mainly by the Slavemasters. For the Tajaran, being able to kill a Samak singlehandedly (and without 'cheating', such as saturation bombing and the like) is an incredible feat, and any individual who pulls it off is lauded greatly."; name = "\improper Samak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Space bears are the result of reckless experimentation in the early days of interplanetary travel and colonization. Rogue scientists in the beginnings of what is now known as Space Russia got very drunk one night, more than usual, and decided to 'improve' on the terran bear. The result is faster, stronger, and smarter than the original species, but most importantly they are able to survive in the airless void of space without any special equipment. It is unknown if they were originally meant to be living weapons or simply made 'because we can', but the scientists responsible were never heard from again. Now, thanks to faster than light travel and lackluster effort in making sure nothing's riding along, Space Bears can be found living on asteroids and moons across the galaxy, wherever Humanity and friends may roam."; name = "\improper Space Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sm" = (/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sn" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"so" = (/turf/simulated/floor/holofloor/reinforced{icon = 'icons/turf/floors.dmi'; icon_state = "lava"; name = "hololava"},/area/awaymission/zoo) +"sp" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sq" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sr" = (/turf/simulated/floor/holofloor/space,/area/awaymission/zoo) +"ss" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"st" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"su" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sv" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sw" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sx" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sy" = (/obj/structure/flora/bush,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sz" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sA" = (/mob/living/simple_animal/hostile/vore/alien{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sB" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sC" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sD" = (/obj/structure/closet/crate,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) +"sE" = (/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) +"sF" = (/obj/structure/flora/grass/both,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Xenomorph XX121, better known just as Xenomorph (which literally translates to 'alien form'), are an extraterrestrial, endoparasitoid species with multiple life cycles, possibly originating from the planet Proteus (also known as Xenomorph Prime), which orbits the star A6 454. One of the deadliest of all known alien species, these creatures need a host organism in order to reproduce. The appearance of the Xenomorph varies depending on its host. The Human phenotype is generally around 7–8 feet, and roughly 136.0 to 181.4 kilograms in weight, with a long, muscular tail and large, curved, oblong head. The Queen of this species is generally twice as large (they can grow even larger, some even up to 100 feet tall, and stronger if given time) and possesses superior speed, strength and intelligence. The term Xenomorph is derived from the Greek words xeno ('stranger', 'alien', and 'foreigner') and morphe ('form', 'shape'). There are no solid facts as to the origins of the Xenomorph species; instead, there are many assumptions which cannot be confirmed. Based on the limited information we have, the most commonly accepted hypothesis is that they are an artificially created species, although another hypothesis says that they evolved naturally on a planet much different than our own. The Xenomorph lives in a hive together with its queen. Amazingly, the blood and other bodily fluids of the Xenomorph are highly acidic. It is not yet understood how a creature of such biology can exist. The planet Proteus is also home to rare, red-hued Xenomorphs, who frequently fight their black-colored rivals."; name = "\improper Xenomorph Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sH" = (/mob/living/simple_animal/hostile/vore/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space spider is a broad classification is used to indicate a subspecies of arachnids discovered in the Tau sector. Extremely dangerous and voracious, this family of arachnids managed to evolve and adapt to grow and thrive in a variety of atmospheric conditions, even the complete lack of an atmosphere altogether. The females, bigger than the males, tend to lay their eggs in the bodies of animals killed during hunts. From there, the young specimens (spiderlings) will feed on the corpse for the first few hours of life until the body is picked clean, after which they will leave the nest to begin hunting for small parasites and anaerobic or aerobic creatures. Once they reach adulthood, their societal structure seems to change, pushing them to hunt in small packs, mostly favoring their numbers and aggressive nature, and inoculating a deadly toxin in their victims before sucking the nutrients dry."; name = "\improper Space Spider Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sJ" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"sK" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Samak are the apex predator in the various plains regions of the northern hemisphere of Meralar. Unlike many creatures of Meralar, it does not have any fur to speak of. Instead, it is completely covered in thick armored plates which act as a barrier between the Samak's internal warmth and the cold environment. However, this is still not that efficient, so the Samak feed often to keep themselves warm. The Samak have six thick legs tipped with broad claws, and roughly aerodynamic bodies. They burrow underground, detecting prey through incredibly keen thermal detection. They pop up suddenly, grab their next meal, and return underground just as quickly. They prefer larger prey, such as the Baqara, Elu'a Eli, and Tajaran. Due to their voracious appetites and tendency to ruin mine shafts and infrastructure, they have been hunted almost to extinction, mainly by the Slavemasters. For the Tajaran, being able to kill a Samak singlehandedly (and without 'cheating', such as saturation bombing and the like) is an incredible feat, and any individual who pulls it off is lauded greatly."; name = "\improper Samak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sL" = (/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space bears are the result of reckless experimentation in the early days of interplanetary travel and colonization. Rogue scientists in the beginnings of what is now known as Space Russia got very drunk one night, more than usual, and decided to 'improve' on the terran bear. The result is faster, stronger, and smarter than the original species, but most importantly they are able to survive in the airless void of space without any special equipment. It is unknown if they were originally meant to be living weapons or simply made 'because we can', but the scientists responsible were never heard from again. Now, thanks to faster than light travel and lackluster effort in making sure nothing's riding along, Space Bears can be found living on asteroids and moons across the galaxy, wherever Humanity and friends may roam."; name = "\improper Space Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"sN" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"sO" = (/mob/living/simple_animal/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"sP" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/mob/living/simple_animal/hostile/vore/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sQ" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"sR" = (/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/simple_animal/hostile/vore/mimic/crate{faction = "zoo"},/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) +"sS" = (/obj/structure/flora/ausbushes/fullgrass,/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sT" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/vore/bear{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"sU" = (/obj/structure/flora/grass/both,/mob/living/simple_animal/penguin{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sV" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"sW" = (/mob/living/simple_animal/hostile/samak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"sX" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"sY" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"sZ" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"ta" = (/mob/living/simple_animal/hostile/vore/carp{faction = "zoo"},/turf/simulated/floor/holofloor/space,/area/awaymission/zoo) +"tb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The common Green Snake is an invasive species that makes its home on tropical worlds across the galaxy. Its ancestors were once kept as pets by Humans, but these snakes had escaped into the ventilation of ships over many centuries to feed on the abundance of mice usually infesting the maintinence passages. It is believed that they are descended from the Ball Python, native to Earth, in the Sol system."; name = "\improper Green Snake Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tc" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"td" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/mob/living/simple_animal/hostile/vore/alien/drone{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"te" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Don't be fooled, this isn't a storage room, but in fact the hunting ground of a deadly ambush predator known as the Mimic. The origin of this species is largely unknown, but they are theorized to be a cousin of the even more elusive changeling species. However, unlike the changeling, the mimic is known for disguising its self as inanimate objects, rather than other animals. When a suitable prey disturbs the mimic, it attacks, and if possible, swallows its victim whole. Scientists do not know how the creature reproduces, as all efforts to study the organism, dead or alive, have revealed that specimens examined do not have reproductive organs at all! It is hypothesized that the mimic grows and uses reproductive organs during a later life cycle, not yet recorded by any known sentient species."; name = "\improper Mimic Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tf" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tg" = (/obj/effect/spider/cocoon{tag = "icon-cocoon_large2"; icon_state = "cocoon_large2"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"th" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ti" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Originating from the jungles of Earth, Parrots are a highly intelligent avian that have become an expensive commodity in space, prized for their colorful plumage, and their famous ability to mimic speech. Ship captains traditionally keep them as exotic pets, to demonstrate wealth, and to have someone to talk with. Some researchers believe some parrot species to be capable of intelligence up to that of a 5 year old Human in some aspects. Purebreds of exceptionally varied color pallets are especially prized among traders and space pirates."; name = "\improper Parrot Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Penguins are a group of aquatic, flightless birds living almost exclusively in the Southern Hemisphere of Earth, in the Sol system, especially in the continent of Antarctica. Highly adapted for life in the water, penguins have countershaded dark and white plumage, and their wings have evolved into flippers. Most penguins feed on krill, fish, squid and other forms of sealife caught while swimming underwater. They spend about half of their lives on land and half in the oceans. Due to the effects of global warming, penguins have been sent off-world to wildlife sanctuaries across the galaxy. Today, many such reserves harbor the last of this species, while penguins are now extinct on Earth."; name = "\improper Space Penguin Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tk" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tl" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Space carp are a breed of space fish that come from the phoron giant Erebus. Scientists aren't quite sure how, but the Carp are imbued with the Phoron in their DNA, allowing for them to travel unaided through the vast void of Space, without gravity, air, or anything. They are very dangerous to space travelers, as they are highly aggressive and carnivorous. They often break windows and the like on space stations hoping to get in to eat the crew."; name = "\improper Space Carp Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tn" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"to" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/mob/living/simple_animal/hostile/vore/alien{faction = "zoo"; name = "invisible alien hunter"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tp" = (/obj/effect/spider/stickyweb{tag = "icon-stickyweb2"; icon_state = "stickyweb2"},/obj/effect/spider/cocoon{tag = "icon-cocoon3"; icon_state = "cocoon3"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tq" = (/obj/effect/spider/stickyweb{tag = "icon-cobweb1"; icon_state = "cobweb1"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tr" = (/obj/effect/spider/cocoon{tag = "icon-cocoon2"; icon_state = "cocoon2"},/mob/living/simple_animal/hostile/giant_spider/nurse{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ts" = (/obj/effect/spider/stickyweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tt" = (/obj/effect/spider/stickyweb{tag = "icon-stickyweb2"; icon_state = "stickyweb2"},/obj/effect/spider/cocoon{tag = "icon-cocoon_large1"; icon_state = "cocoon_large1"},/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tu" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/mob/living/simple_animal/hostile/vore/alien/queen/large{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tv" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) +"tw" = (/obj/effect/spider/cocoon{tag = "icon-cocoon_large3"; icon_state = "cocoon_large3"},/mob/living/simple_animal/hostile/giant_spider/hunter{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tx" = (/mob/living/simple_animal/hostile/giant_spider{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ty" = (/mob/living/simple_animal/parrot{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"tz" = (/obj/effect/landmark/away,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tA" = (/mob/living/simple_animal/hostile/vore/bear{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tB" = (/mob/living/simple_animal/hostile/vore/alien{faction = "zoo"; name = "invisible alien hunter"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tC" = (/obj/effect/decal/remains,/obj/effect/gibspawner/generic,/turf/simulated/floor/tiled/neutral,/area/awaymission/zoo) +"tD" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tE" = (/mob/living/simple_animal/snake{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"tF" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_e"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tG" = (/obj/effect/spider/stickyweb{tag = "icon-stickyweb2"; icon_state = "stickyweb2"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tH" = (/obj/effect/spider/stickyweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tI" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tJ" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tK" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"tL" = (/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_w"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_s"; name = "rocky edge"},/obj/effect/floor_decal/spline{icon = 'icons/turf/floors.dmi'; icon_state = "asteroid_edge_n"; name = "rocky edge"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tM" = (/obj/effect/spider/stickyweb{tag = "icon-cobweb1"; icon_state = "cobweb1"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"tN" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"tO" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"tP" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/vore/alien{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"tQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Stoks are a small species of reptile native to Moghes, ranging from two, to three feet tall with colorful scales and feathers adorning their head, they stand on two legs and have short arms, the legs being digitigrade. They keep to oasis's due to their colors which provide camouflage and distance from predators such as duneworms. Keeping in packs so that when they are threatened, they will swarm an attacker and take it down by sheer flanking and numbers. They're an omnivorous species, keeping themselves fed on either predators, or oasis fruits, also been known to be kept as pets for both Unathi on Moghes, and other species with taste in exotic animals. "; name = "\improper Stok Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "During the latest part of a Diona's life cycle, the Diona casts its self into orbit around a star, so it may soak up solar radiation and grow to immense proportions, even as large as a space station. The yithian, exhibited here, can only be found within these great Diona, where it has a symbiotic relationship with its host. It consumes fungus and parasites that would normally compromise the Diona's health."; name = "\improper Yithian Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "A relative of the Tajaran, the Farwa is an intelligent pack animal widespread on Meralar, in the Rarkajar system. Usually with tan, orange and brown pelts, this animals is capable of using primitive tools. Its diet is primarly made up of vegetable matter and carrion, although they also hunt opportunistically. The species itself is very diverse, with Farwa in different biomes possessing minute variations in behaviour and genetic make-up."; name = "\improper Farwa Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "This Redspace creature was generously donated by a NanoTrasen science team headed by Dr. Kisuke Gema of the Virgo Orbital Research Establishment. Other than that, we honestly don't know anything about this monstrosity, other than the fact that it hungers for Human flesh."; name = "\improper Redspace Abomination Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"tU" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"tV" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"tW" = (/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"tX" = (/mob/living/simple_animal/yithian{faction = "zoo"},/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"tY" = (/obj/machinery/portable_atmospherics/hydroponics/soil/invisible,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"tZ" = (/turf/simulated/floor/cult,/area/awaymission/zoo) +"ua" = (/obj/structure/cult/pylon,/turf/simulated/floor/cult,/area/awaymission/zoo) +"ub" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uc" = (/obj/effect/floor_decal/asteroid,/mob/living/carbon/human/stok{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ud" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"ue" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"uf" = (/mob/living/carbon/human/farwa{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"ug" = (/obj/effect/gateway,/turf/simulated/floor/cult,/area/awaymission/zoo) +"uh" = (/mob/living/carbon/human/stok{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ui" = (/obj/structure/sink/puddle,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uj" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"uk" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"ul" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"um" = (/obj/structure/flora/ausbushes/sunnybush,/mob/living/simple_animal/yithian{faction = "zoo"},/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"un" = (/obj/structure/flora/tree/pine{tag = "icon-pine_2"; icon_state = "pine_2"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"uo" = (/obj/structure/flora/tree/pine{tag = "icon-pine_3"; icon_state = "pine_3"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"up" = (/mob/living/simple_animal/hostile/vore/creature{faction = "zoo"; name = "redspace abomination"},/turf/simulated/floor/cult,/area/awaymission/zoo) +"uq" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"ur" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"us" = (/obj/effect/decal/remains/human,/turf/simulated/floor/cult,/area/awaymission/zoo) +"ut" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uu" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/holofloor/wood{icon = 'icons/turf/floors.dmi'; icon_state = "diona"},/area/awaymission/zoo) +"uv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Decades ago, a group of rogue Skrellian scientists began illegal experimentation on the Unathi inhabitants of Moghes. In an effort to create genetically engineered super soldiers, the Deathclaw was born with deadly sharp razor-like claws, incredible agility, robust durability, and high intelligence. When the Skrellian scientists were arrested by the authorities, the Deathclaw was to be destroyed, but some managed to escape captivity into the nuclear wastelands of Moghes. Normally solitary creatures, they have been known to hunt in packs, and seem to have a preference for Human and Unathi meat."; name = "\improper Deathclaw Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Space Goose (pural: geese) is an aquatic fowl originating from the planet Earth. This breed of Geese however was bred to the clime of space ships and stations as guard animals. They are extremely loud, highly aggressive, and territorial, while their talons and beaks are much longer and sharper than Earth geese. Their aggressive nature makes them difficult to train, but are highly effective when deployed."; name = "\improper Space Goose Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ux" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Grey Wolf, Scientific name Canis Lupus, is a species native to the Sol system and specifically the planet Earth. It is the largest extant member of its family, with males averaging 43–45 kg (95–99 lb), and females 36–38.5 kg (79–85 lb). Like the red wolf, it is distinguished from other Canis species by its larger size and less pointed features, particularly on the ears and muzzle. Its winter fur is long and bushy, and predominantly a mottled gray in color, although nearly pure white, red, or brown to black also occur. It is also know by the name Timber Wolf. The gray wolf is the second most specialised member of the genus Canis, as demonstrated by its morphological adaptations to hunting large prey, its more gregarious nature, and its highly advanced expressive behavior. It is nonetheless closely related enough to smaller Canis species, such as the Sol Coyote or Golden Jackal to produce fertile hybrids. It is the only species of Canis to have a range encompassing both the Old and New planets, due to being popular as a traveling companion, an easier to tame circus attraction compared to tigers, and its valuable use in ridding polar worlds of large predators. It was also spread through some worlds to deal with Cloud Fox infestations. While normally indifferent to foxes aside from hunting territories, the Grey Wolf has shown great hostility to a special strain of Fox mutation found on the planet Andorss called the Cloud Fox. Bafflingly, these creatures share nothing in common that should lead them to be enemies, as the Grey Wolf is a predator and lives in snowy areas, whereas the Cloud Fox is an herbivore, largely found in Corn rich areas. Scientists have yet to explain this, although several other animals have also been shown to show hostility towards Cloud Foxes, namely the Macromeleon and Carousel Panther, both of whom get along well with Grey Wolves."; name = "\improper Gray Wolf Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "While all the species of these large predators are commonly known as Dragons (Draconius Regalis), this is mainly an umbrella term for a number of varieties of these large, reptilian creatures. There are numerous varieties of dragons found throughout the galaxy, and recounts of these creatures can be traced back to Skrell civilization's first interplanetary travels speaking of a large, unknown creature attacking and devouring the closeby cargo ships. Mainly solitary creatures, the Dragons roam large areas of space, capable of adapting to a large variety of atmospheres thanks to each sub-species natural affinity to various elements. While in today's population there are a numerous subspecies, all of these can be traced back to what archaeologists claimed to be a 'phoron' Dragon, by the biological analysis of the fossils found on asteroids in the Virgo-Erigone system. The creatures displayed here were reconstituted from such fossils, generously donated by the Virgo Orbital Research Establishment."; name = "\improper Phoron Dragon Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uz" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uA" = (/obj/effect/floor_decal/asteroid,/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uB" = (/obj/effect/gibspawner/human,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"uC" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"uD" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/vore{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uE" = (/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Decades ago, a group of rogue Skrellian scientists began illegal experimentation on the Unathi inhabitants of Moghes. In an effort to create genetically engineered super soldiers, the Deathclaw was born with deadly sharp razor-like claws, incredible agility, robust durability, and high intelligence. When the Skrellian scientists were arrested by the authorities, the Deathclaw was to be destroyed, but some managed to escape captivity into the nuclear wastelands of Moghes. Normally solitary creatures, they have been known to hunt in packs, and seem to have a preference for Human and Unathi meat."; name = "\improper Deathclaw Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Space Goose (pural: geese) is an aquatic fowl originating from the planet Earth. This breed of Geese however was bred to the clime of space ships and stations as guard animals. They are extremely loud, highly aggressive, and territorial, while their talons and beaks are much longer and sharper than Earth geese. Their aggressive nature makes them difficult to train, but are highly effective when deployed."; name = "\improper Space Goose Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Grey Wolf, Scientific name Canis Lupus, is a species native to the Sol system and specifically the planet Earth. It is the largest extant member of its family, with males averaging 43–45 kg (95–99 lb), and females 36–38.5 kg (79–85 lb). Like the red wolf, it is distinguished from other Canis species by its larger size and less pointed features, particularly on the ears and muzzle. Its winter fur is long and bushy, and predominantly a mottled gray in color, although nearly pure white, red, or brown to black also occur. It is also know by the name Timber Wolf. The gray wolf is the second most specialised member of the genus Canis, as demonstrated by its morphological adaptations to hunting large prey, its more gregarious nature, and its highly advanced expressive behavior. It is nonetheless closely related enough to smaller Canis species, such as the Sol Coyote or Golden Jackal to produce fertile hybrids. It is the only species of Canis to have a range encompassing both the Old and New planets, due to being popular as a traveling companion, an easier to tame circus attraction compared to tigers, and its valuable use in ridding polar worlds of large predators. It was also spread through some worlds to deal with Cloud Fox infestations. While normally indifferent to foxes aside from hunting territories, the Grey Wolf has shown great hostility to a special strain of Fox mutation found on the planet Andorss called the Cloud Fox. Bafflingly, these creatures share nothing in common that should lead them to be enemies, as the Grey Wolf is a predator and lives in snowy areas, whereas the Cloud Fox is an herbivore, largely found in Corn rich areas. Scientists have yet to explain this, although several other animals have also been shown to show hostility towards Cloud Foxes, namely the Macromeleon and Carousel Panther, both of whom get along well with Grey Wolves."; name = "\improper Gray Wolf Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "While all the species of these large predators are commonly known as Dragons (Draconius Regalis), this is mainly an umbrella term for a number of varieties of these large, reptilian creatures. There are numerous varieties of dragons found throughout the galaxy, and recounts of these creatures can be traced back to Skrell civilization's first interplanetary travels speaking of a large, unknown creature attacking and devouring the closeby cargo ships. Mainly solitary creatures, the Dragons roam large areas of space, capable of adapting to a large variety of atmospheres thanks to each sub-species natural affinity to various elements. While in today's population there are a numerous subspecies, all of these can be traced back to what archaeologists claimed to be a 'phoron' Dragon, by the biological analysis of the fossils found on asteroids in the Virgo-Erigone system. The creatures displayed here were reconstituted from such fossils, generously donated by the Virgo Orbital Research Establishment."; name = "\improper Phoron Dragon Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uJ" = (/obj/effect/decal/remains/human,/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"uK" = (/mob/living/simple_animal/hostile/vore/large/dragon{faction = "zoo"},/turf/simulated/floor/holofloor/desert{icon = 'icons/turf/floors.dmi'; icon_state = "asteroidplating"; name = "scorched sand"},/area/awaymission/zoo) +"uL" = (/mob/living/simple_animal/lizard,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uM" = (/mob/living/simple_animal/tomato{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"uN" = (/mob/living/simple_animal/fox{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"uO" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Voracious Lizard is a relatively new species, muted from the common space lizard by exposure to Phoron. These creatures are found commonly in and around facilities where phoron is mined, refined, or stored. They have been known to attack other creatures in groups, and are able to unhinge their jaws to swallow Human-sized prey whole. The species was first discovered in the Virgo-Erigone system, and have since become a dangerous pest."; name = "\improper Voracious Lizard Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uP" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/hostile/vore/large/deathclaw{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Common Space Lizard (Pordacis Stellae Vulgaris) is a common critter amongst space stations. Their origin traces back to genetically modified wall lizards to survive the hazardous conditions of space, this hardy animal is surprisingly tough and able to rapidly regenerate dead cells from radiation exposure and is virtually immune against cancerous growths. Its diet is varied, as it eats what it gets, from discarded junk food to mice and small spiders."; name = "\improper Lizard Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uR" = (/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"uS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Originally a cult movie monster, a team of geneticists eventually turned the Animate Tomato from fiction to reality. While not harmful in any way, some people consider its grin to be disturbing. It reproduces in the same manner as plants, coming off of the vine when harvested or when it gets ripe enough, afterwards wandering about on its own."; name = "\improper Animate Tomato Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Foxes are small-to-medium-sized, omnivorous mammals belonging to several genera of the family Canidae. Foxes are slightly smaller than a medium-size domestic dog, with a flattened skull, upright triangular ears, a pointed, slightly upturned snout, and a long bushy tail (or brush). These foxes are Red Foxes, largest of the true foxes, has the greatest geographic range of all members of the Carnivora family, originally spanning across the entire Northern Hemisphere of Earth from the Arctic Circle to North Africa, North America and Eurasia, and has grown to be found on many forest and garden planets across the galaxy."; name = "\improper Fox Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"uU" = (/mob/living/simple_animal/hostile/vore/large/deathclaw{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uV" = (/obj/structure/flora/ausbushes/sparsegrass,/mob/living/simple_animal/hostile/vore{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uW" = (/obj/effect/floor_decal/asteroid,/mob/living/simple_animal/lizard,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"uX" = (/obj/effect/landmark/away,/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"uY" = (/mob/living/simple_animal/hostile/vore/wolf{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"uZ" = (/mob/living/simple_animal/hostile/goose{faction = "zoo"},/turf/simulated/floor/wood,/area/awaymission/zoo) +"va" = (/obj/effect/floor_decal/symbol/sa,/turf/simulated/wall,/area/awaymission/zoo) +"vb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Saru (also incorrectly known as Sergalings) are the smaller, unevolved, far more docile cousins of the Sergals, and are usually thought of as either pests, food, or pets. They are a commodity that the Sergal use in their trades with other species due to their cute appearance and quick breeding. Contrary to popular belief, they are not sergal pups, despite their similar appearance. Note the distinctly stubbier noses, compared to true sergal pups. Unfortunately, the mistake has been made more than once, even by other sergals, wherein actual young sergals have been mistakenly sold to traders with tragic consequences... for the traders. The Saru are, like the Sergals, native to the planet Eltus, in the Vilous system. However, they are also found on the planet Tal in the same system."; name = "\improper Saru Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The brown bear (Ursus arctos) is a large bear with the widest distribution of any living ursid. The species is distributed across much of northern Eurasia and North America, on planet Earth. It is one of the two largest terrestrial carnivorans alive today, rivaled in body size only by its close cousin, the polar bear (Ursus maritimus), which is much less variable in size and averages larger due to this. There are several recognized subspecies, many of which are quite well-known within their native ranges, found in the brown bear species."; name = "\improper Brown Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Tamaskan dogs are a crossbreed, specifically designed by dog fanciers on Earth, to morphologically resemble a wolfdog. It is a cross of several standardized breeds of the sled dog type, and its bloodlines may sometimes include a small amount of wolfdog stock. It is a highly versatile dog that can excel in agility, obedience and working trials. These traits have made the Tamaskan a popular animal among Human colonists on icy worlds."; name = "\improper Tamaskan Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"ve" = (/obj/structure/largecrate/animal/cow,/turf/simulated/floor/tiled,/area/awaymission/zoo) +"vf" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"vg" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"vh" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"vi" = (/obj/structure/sink/puddle,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"vj" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"vk" = (/obj/effect/floor_decal/asteroid,/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"vl" = (/mob/living/simple_animal/hostile/vore/bear/brown{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"vm" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass1"; icon_state = "dgrass1"},/area/awaymission/zoo) +"vn" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass4"; icon_state = "dgrass4"},/area/awaymission/zoo) +"vo" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"vp" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"vq" = (/mob/living/simple_animal/corgi/tamaskan{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"vr" = (/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) +"vs" = (/obj/item/stack/tile/grass,/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"vt" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass0"; icon_state = "fullgrass0"},/area/awaymission/zoo) +"vu" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Exhibit Airlock"},/obj/item/tape/engineering{tag = "icon-engineering_door_0"; icon_state = "engineering_door_0"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vv" = (/obj/effect/floor_decal/asteroid,/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass3"; icon_state = "dgrass3"},/area/awaymission/zoo) +"vw" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"vx" = (/mob/living/carbon/human/sergallingm{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"vy" = (/obj/structure/flora/ausbushes/genericbush,/mob/living/simple_animal/hostile/vore/bear/brown{faction = "zoo"},/turf/simulated/floor/holofloor/grass,/area/awaymission/zoo) +"vz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The Sol-system native Panther, found primarily on the Sol-system planet Earth, is a large mammal belonging to the Felidae family. Found in a variety of environment, like most big cats the Panther inhabits a large number of habitats and is a carnivorous, nocturnal predator. Of particular note are the various patterns of their fur - the most known one, especially thanks to Sol popular culture (books, sequential art and movies) is the black panther, a species that displays a fur pattern completely black at a first glance, but other species can display a much wider variety of patterns, another one of the most common being a beige color with large, black spots. These patterns were mainly evolved as a mean to conceal itself in the surrounding environment, to ambush an unsuspecting prey."; name = "\improper Panther Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "Shantak are a pack-hunting carnivore native to Meralar. Using loud barks and growls, similar to that of wolves, the shantak is able to communicate verbally with its hunting partners in order to coordinate attacks. The largest female of the group is usually in charge, and is considered to be the alpha of the pack."; name = "\improper Shantak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vB" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) +"vC" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vD" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vE" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "The Sol-system native Panther, found primarily on the Sol-system planet Earth, is a large mammal belonging to the Felidae family. Found in a variety of environment, like most big cats the Panther inhabits a large number of habitats and is a carnivorous, nocturnal predator. Of particular note are the various patterns of their fur - the most known one, especially thanks to Sol popular culture (books, sequential art and movies) is the black panther, a species that displays a fur pattern completely black at a first glance, but other species can display a much wider variety of patterns, another one of the most common being a beige color with large, black spots. These patterns were mainly evolved as a mean to conceal itself in the surrounding environment, to ambush an unsuspecting prey."; name = "\improper Panther Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vG" = (/turf/simulated/floor/holofloor/beach/water{tag = "icon-beach (WEST)"; icon_state = "beach"; dir = 8},/area/awaymission/zoo) +"vH" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"vI" = (/mob/living/simple_animal/adultslime{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"vJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"vK" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Shantak are a pack-hunting carnivore native to Meralar. Using loud barks and growls, similar to that of wolves, the shantak is able to communicate verbally with its hunting partners in order to coordinate attacks. The largest female of the group is usually in charge, and is considered to be the alpha of the pack."; name = "\improper Shantak Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vL" = (/obj/structure/flora/ausbushes/fernybush,/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"vM" = (/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vN" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vO" = (/mob/living/simple_animal/crab{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand,/area/awaymission/zoo) +"vP" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass3"; icon_state = "fullgrass3"},/area/awaymission/zoo) +"vQ" = (/mob/living/simple_animal/hostile/vore/large/panther{faction = "zoo"},/turf/simulated/floor/holofloor/grass{icon = 'icons/jungle.dmi'; icon_state = "grass2"},/area/awaymission/zoo) +"vR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "A species incredibly similar to Humans. The monkey is a resident of Earth, the home planet of Humanity, and shares many traits with Humans, such as opposable thumbs, and a love of flinging fecal matter at each other. Monkeys are valued for their dancing ability, and thanks to the recent boom of monkey dance classes, the dancing monkey industry is growing. Monkeys are also commonly used in scientific research that requires testing on products meant to be used by Humans. In fact, some of the first creatures to leave Earth's atmosphere in the infancy of Humanity's space age were dogs and monkeys!"; name = "\improper Monkey Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "Crabs are decapod crustaceans of the infraorder Brachyura, which live in all the oceans on the planet Earth, in some fresh water, and even a few species which thrive on land. They are generally covered with a thick exoskeleton and have a single pair of claws. They are often kept as pets or eaten for food by Humans. Many other animals with similar names, such as king crabs, hermit crabs, porcelain crabs, horseshoe crabs, and crab lice, are not true crabs."; name = "\improper Crab Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "A mouse (plural: mice), native to Earth in the Sol system, is a small rodent characteristically having a pointed snout, small rounded ears, a body-length scaly tail and a high breeding rate. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are locally common. They are known to invade homes and space ships for food and shelter. Cats, wild dogs, foxes, birds of prey, snakes and even certain kinds of arthropods have been known to prey heavily upon mice. Nevertheless, because of its remarkable adaptability to almost any environment, the mouse is one of the most successful mammalian genera living in the galaxy today."; name = "\improper Slime Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/sign/kiddieplaque{desc = "This is not an empty exhibit. Note the pine tree in the center of the pen. This is the infamous Killer Pine Tree. Thought to be a relative of the mimic, the Killer Tree is, much like its cousins, an ambush predator. However, like the mimic, it is not known where this species is from, how it reproduces, or how it has found its way across the galaxy into new biomes."; name = "\improper Killer Tree Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"vV" = (/obj/effect/landmark/away,/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"vW" = (/mob/living/simple_animal/crab{faction = "zoo"; icon_dead = "evilcrab_dead"; icon_living = "evilcrab"; icon_state = "evilcrab"},/turf/simulated/floor/holofloor/beach/water,/area/awaymission/zoo) +"vX" = (/mob/living/simple_animal/slime{faction = "zoo"},/turf/simulated/floor/holofloor/desert,/area/awaymission/zoo) +"vY" = (/mob/living/simple_animal/hostile/shantak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"vZ" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wa" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass2"; icon_state = "dgrass2"},/area/awaymission/zoo) +"wb" = (/mob/living/simple_animal/hostile/shantak{color = ""; faction = "zoo"; health = 100; maxHealth = 100; name = "alpha shantak"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"wc" = (/mob/living/simple_animal/hostile/tree{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"wd" = (/obj/structure/flora/bush,/mob/living/simple_animal/hostile/shantak{faction = "zoo"},/turf/simulated/floor/holofloor/snow,/area/awaymission/zoo) +"we" = (/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-dgrass0"; icon_state = "dgrass0"},/area/awaymission/zoo) +"wf" = (/obj/structure/flora/ausbushes/lavendergrass,/mob/living/carbon/human/monkey{faction = "zoo"},/turf/simulated/floor/holofloor/beach/sand{tag = "icon-fullgrass1"; icon_state = "fullgrass1"},/area/awaymission/zoo) +"wg" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wh" = (/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/obj/item/stack/tile/grass,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wi" = (/obj/item/stack/tile/grass/fifty,/mob/living/simple_animal/hostile/vore/mimic/crate{faction = "zoo"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"wj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/kiddieplaque{desc = "The polar bear (Ursus maritimus) is a carnivorous bear whose native range once lay largely within the Arctic Circle on Earth, encompassing the Arctic Ocean, its surrounding seas, and surrounding land masses. Although it is the sister species of the brown bear, it has evolved to occupy a narrower ecological niche, with many body characteristics adapted for cold temperatures, for moving across snow, ice, and open water, and for hunting seals, which made up most of its original diet. Although most polar bears are born on land, they spent most of their time on the sea ice. Their scientific name means 'maritime bear', and derives from this fact. Polar bears hunted their preferred food of seals from the edge of sea ice, often living off fat reserves when no sea ice is present. Because of their dependence on the sea ice, polar bears are classified as marine mammals. However, because of habitat loss caused by climate change, the polar bear had gone completely extinct on Earth. The return of the polar bear is thanks to the preservation of genetic records written in the 21st century, which were later used by Space Russians to create a wildlife reserve on the planet Europa in 2492. This has generally been regarded as a poor decision."; name = "\improper Polar Bear Exhibit"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"wk" = (/mob/living/simple_animal/hostile/vore/polarbear{faction = "zoo"},/turf/simulated/floor/beach/water,/area/awaymission/zoo) +"wl" = (/obj/effect/landmark/away,/turf/simulated/floor/grass,/area/awaymission/zoo) +"wm" = (/obj/effect/blocker,/turf/simulated/wall/r_wall,/area/awaymission/zoo) +"wn" = (/obj/effect/blocker,/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/zoo) +"wo" = (/obj/structure/grille{name = "mass ventilation"},/obj/effect/blocker,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wp" = (/turf/simulated/wall/r_wall,/area/awaymission/zoo) +"wq" = (/obj/structure/grille{name = "mass ventilation"},/turf/simulated/floor/plating,/area/awaymission/zoo) +"wr" = (/turf/simulated/wall/durasteel,/area/awaymission/zoo) +"ws" = (/obj/structure/sign/redcross,/turf/simulated/wall/durasteel,/area/awaymission/zoo) +"wt" = (/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wu" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wv" = (/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"ww" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/medical_wall{pixel_y = 32},/obj/item/weapon/storage/firstaid/combat,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wx" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wy" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wz" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wA" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wB" = (/obj/structure/curtain/open/privacy,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wC" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wD" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wE" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"wF" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wG" = (/obj/machinery/computer,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wH" = (/obj/structure/closet,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wI" = (/obj/structure/closet,/obj/item/clothing/under/captain_fly,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wJ" = (/obj/machinery/shield_gen/external,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wK" = (/obj/machinery/shield_gen/external,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"wL" = (/obj/machinery/shield_gen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"wM" = (/obj/machinery/shieldwallgen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"wN" = (/obj/machinery/shieldgen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"wO" = (/obj/machinery/shieldgen,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"wP" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wQ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/landmark/loot_spawn,/turf/simulated/floor/plating,/area/awaymission/zoo) +"wR" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wS" = (/obj/effect/floor_decal/symbol/lo{pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"wT" = (/obj/machinery/door/window/brigdoor/southleft,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor/southright,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wV" = (/obj/structure/closet/secure_closet/security,/obj/random/handgun,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wW" = (/obj/machinery/door/window/brigdoor/southright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wX" = (/obj/structure/table/rack,/obj/random/action_figure,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wY" = (/obj/structure/table/rack,/obj/random/plushie,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"wZ" = (/obj/structure/table/rack,/obj/random/contraband,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xa" = (/obj/machinery/door/airlock/glass_medical,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"xb" = (/turf/simulated/floor/tiled/red,/area/awaymission/zoo) +"xc" = (/obj/machinery/door/airlock/medical,/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"xd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EMPLOYEES ONLY'."; name = "\improper EMPLOYEES ONLY"; pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xe" = (/obj/effect/floor_decal/symbol/gu{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xf" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xg" = (/obj/structure/table/standard,/obj/item/weapon/paper/zoo/pirate/haveyouseen,/obj/item/weapon/paper/zoo/pirate/warning,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xh" = (/obj/structure/sign/electricshock,/turf/simulated/wall/durasteel,/area/awaymission/zoo) +"xi" = (/obj/machinery/shield_capacitor,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xj" = (/obj/machinery/shield_capacitor,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xk" = (/obj/effect/floor_decal/symbol/pr{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xl" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "lost and found"},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xm" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/red,/area/awaymission/zoo) +"xn" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"xo" = (/obj/machinery/door/airlock/command,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xp" = (/obj/effect/landmark/away,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xq" = (/turf/unsimulated/wall/planetary/normal,/area/awaymission/zoo) +"xr" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xs" = (/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xt" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xu" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1; name = "Security"; req_one_access = list(1)},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EMPLOYEES ONLY'."; name = "\improper EMPLOYEES ONLY"; pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xw" = (/obj/effect/floor_decal/symbol/gu{pixel_x = -32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xx" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/floodlight,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xy" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xz" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xA" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/under/rank/engineer/skirt,/mob/living/simple_animal/hostile/vore/mimic/crate,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xB" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xC" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xD" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/landmark/loot_spawn,/obj/effect/floor_decal/symbol/da{pixel_x = -32},/turf/simulated/floor/plating,/area/awaymission/zoo) +"xE" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo) +"xF" = (/obj/structure/coatrack,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xG" = (/obj/structure/filingcabinet/filingcabinet,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xH" = (/obj/structure/filingcabinet/filingcabinet,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo,/obj/item/weapon/paper/zoo/pirate/nebula,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xI" = (/obj/effect/floor_decal/symbol/da{pixel_x = 32},/turf/simulated/floor/tiled,/area/awaymission/zoo) +"xJ" = (/obj/machinery/floodlight,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xK" = (/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/awaymission/zoo) +"xL" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/awaymission/zoo) +"xM" = (/obj/structure/closet/crate/solar,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/cell/crap,/obj/item/weapon/cell/crap,/obj/item/weapon/cell/crap,/turf/simulated/floor,/area/awaymission/zoo) +"xN" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xO" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xP" = (/obj/machinery/door/window/brigdoor/northleft,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/ammo_all,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xQ" = (/obj/machinery/door/window/brigdoor/northright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/table/rack,/obj/random/ammo_all,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xR" = (/obj/machinery/door/window/brigdoor/northleft,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xS" = (/obj/machinery/door/window/brigdoor/northright,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/table/rack,/obj/random/weapon,/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xT" = (/obj/effect/landmark/loot_spawn{live_cargo = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/zoo) +"xU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"xV" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/zoo/solars) +"xW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"xX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"xY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"xZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"ya" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"yb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"yc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"yd" = (/obj/structure/cable,/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/awaymission/zoo/solars) +"ye" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"yf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) +"yg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/awaymission/zoo/solars) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeafaeafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaiajakalamanagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajaoapapamanagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaiaqarapapapamanagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeaeafaeaeaeasatauavaeasasaeagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadawaxapayazaAaBapaCaDaEaFaGaHaIaJaKaKaKaKaKaKaLagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaadaeaeafaeaeaeaeaeaeaeagaaaaaaaaaaaaadawapapapapapapapapapapaEaMapapaNapapaOaPaQapaRaSaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahaTaUaEaFaVaKaVaKaVaWaXaaaaaaaaaaadawapapapapapapaxapaYapapaoaMapapaZapapbabbbcapapbdaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahbebfaEaMapapapapapapbgaaaaaaaaadawapapapapapapapapapapapapaEaMapapapapapbhbibjapapbdaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahbebeaEapbkbkblbkbkbmbnaaaaaaadboapapapapbpapapapbqbrapbqbraEaMapaRapapapapapapapapbdaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaabsatbtakaubuaeaeaeaeaeasaeaeaeasanaeaeaeaeatbvbvbvavaeaeaeaebobwbkblbxbkbkbybybybzbkbmaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAbBbBbAaaaaaaaabCbAbAbAbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaadbEbFbFbFbFaEbGbHbIbJbKbLbJbMbHbHaEbNbObPbQbHbHbHbHbRbSbTbRbUbsaeaeaeaeaeaeaeaeafatbVavanagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCbAbAbAbAbAbWbXbYbDaaaaaaaaaabCbAbZcabAbDaaaabCbAbAbAcbccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaadbEbFbFbFbFbFaEbHcdbIcecececfbMbHbHakcgcgcgbQbHbHbHbHchchbHchbHaEcicicjckclcmclcnaEcececeaLasaeafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCbAcocpbAcqcrcsctcubAbDaaaaaabCbAbAbBbBbAbAbWbYbAcvcwbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacacadbEbFbFbFbFbFbFaEbHbHbIcecycecebMbHbHczcAcAcBcCbHbHbHbHbHbHcDbHbHaEcEcjcjarcFcGcHcIaEcJcececececKbsasaeagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLcMcNcNcOcNcNcPcQcRbAbAbWbXbYbAbAcScNcNcTbAcUcVcWcNcXbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacadbEbFbFcYcZbFdabFaEbHbHdbdcdcdddcdebHbHarbHbHbHbHbHbHbHbHbHbHbHbHbHaEcjdfcjaLaeaeaeaebocJcecececedgakdhdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldmdnbAcNcNdodpdqbAdrdrdrdrdrdsdtduducNdvcNcNcNcNdwbAcbdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacaEbFbFbFdydzbFbFbFakdAbHbHbHbHbHbHbHbHbHakbHbHbHdBdCdCdCdCdCdCdCbHbHaEcjcjcjcjcjcjcjdDaEdEceapapapcKaoajdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFbAbAbAbAdGdHcNcNcNbAdrdIdJdKdrdLcNduducNdvcNdMdNcNcNbAbAdOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacdPdQbFbFdQbFbFbFbFdRbHbHdCdCdCdCdCdSbHbHbHbHbHbHdTdUdTdTdTdTdVdWdXdYakcjcjdZeaeaebcjcjaEecedapeeefcKarajdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFbAbAegcNbAbAeheiehejehekcNducNdHbAbAbAbAelembAdOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaceneoepbFbFbFbFbFbFarbHbHdCeqeresetapbHeubHbHbHbHevdCdCdCdCdCdCdCbHewexeyeyezeAeBeCcjcjaEeDceapapapcKbsaeaeeEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCeFeGbAbAbAbAbAbAbAbAeHcNcNcNcNeIcNcNcNcNeJbAeKcNbAeLeMeMeJbAbAbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaceneoepbFbFbFbFbFbFakbHbHdCeqeqapetapbHbHbHbHbHbHbHbHbHbHeNbHbHbHbHbHbHcjcjeOeAeAePcjcjaEeQceeAapapcKbsaeaeagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCeLeReSbAeTbAeUeVeWbAbAeXcNdududududududududucNducNeYdtduducNbAcbccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaceZdQbFbFbFbFbFbFbFdRbHfadCfbeqfcfdapbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHcjcjfeeBffePcjcjaEfgceeAeeefcKakajdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhfidufjbAfkbAbAflbAfmbAfndududIdJdJdJdJdJdKdudududufofpduducNbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacaEbFbFbFbFbFbFbFbFardAbHdCeqapfqetfrbHbHarbHbHbHdBdCdCdCdCdCdCdCbHfsdXeyeyezfteAfucjdDaEdEfveAapapcKaoajdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafwfxfydufzcNcNcNcNfAcNcNcNdudufBfCfCfCfCfCfDdudududufEdududucNbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacfFafaeatauauavaeaebobHbHdCapfGapetapbHbHakbHbHbHfHfIfJfJfJfJdVdWdXfKarcjcjfLfMfMfNcjcjaEcJcecefOcedgarajdidjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFdGfPfQbAfRfSfTfUcNcNfVcNcNdududududududududucNducNfWcNfXfYcXbAcbdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaacacfFfZapapapapapapaEbHbHdCdCdCdCdCdSgabHczbHbHbHgbdCdCdCdCdCdCdCbHbHaEcEcjcjcjcjcjcjgcaEcJcecececegdbsafaeeEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFeFeGbAbAbAbAbAbAbAbAgecNcNcNcNdMcNcNcNcNgfbAeKcNbAdGggghgfbAbAbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaafFfZapapgiapapaEbHbHbHbHbHbHbHbHbHbHarbHbHbHbHbHbHbHbHbHbHbHbHbHaEgjcjcjcjcjcjgkglaEcJcecebuafaeaseEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCbAbAegcNbAbAgmgngogpgmdsgqducNgrbAbAbAbAcNgsbAbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaafFfZgtgtapapaEbHgubHbHbHbHbHbHbHgvaEbHgubHbHbHgubHbHbHbHgubHbHbsaeatgwavatgwavaeasatczavaneEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCbAbAbAbAeLgrcNcNcNbAgxfBfCfDdrdLgyduducNgzcNeIcNcNcNbAbAbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaabsaeaegAauaLaeaeaeaeaeafaeaeaeafanaeaeaeaeaeaeaeaeaeaeaeaeaebogBgBgBgBgBgBgCgDgEgBgBgFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagGgHgIgJbAcNcNcPgKgLbAgxdrdrdrdrekgMduducNgzcNcNcNcNcNbAcbccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahaigNakapaKaKgOaKaKaWaEaaaaaafFboapapapapapapapapapgPgQgRgQaEgSgBgBgBgBgTgBgBgBgBgBgBaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagUcNcNcNfzcNcNgVgWgXbAbAgYgZhabAbAbZbZbZcNbAggggggbZcXbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahajajhbaMapapapapaphcaEaaaaaaaafFfZapapapapapapapapapapapapaEgCgBgBhdgBhegBhdgBgBgBhfaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahghhhihihihjhkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFbAhlhmbAhncNhohphqbAdOaaaaaadFbAbAhrhrbAbAgYhabAhshtbAcbcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaahaiajarhuhvaphvaphvbmaEaaaaaaaaaafFfZapapapapapapapapapapapaogBgBgBgBgBgBgBgBgBavaeaeboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahghwhxhyhyhyhzhwhkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadFbAbAbAbAbAgYgZhadOaaaaaaaaaadFbAbZcabAdOaaaadFbAbAbAcbdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaafFaeaeasaeaebghAbghBaeeEaaaaaaaaaaaafFfZapapapapapapapapapapaEgBgBgThCgBhdgBhdgBhDhEhFaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahwhzhGhGhHhGhGhyhwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAhrhrbAaaaaaaaadFbAbAbAdOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahIhJhIhJhIaaaaaaaaaaaaaaaaaafFfZapapapapaphKhKhKhLaEhMhNhOgBgBgBgBgBgBarhPbueEaahIhQhIhQhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahwhRhGhGhGhGhShThwaaaaaaaaaaaaaaaaaahIhQhIhQhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhQhIhJhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhQhIhQhIaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUhVhUhVhUaaaaaaaaaaaaaaaaaaaafFaeaeaeaeaeaeaeaeaeasaeaeaeafathWavaeafanaeeEaaaahUhVhUhVhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahwhXhGhGhYhGhGhZhwaaaaaaaaaaaaaaaaaahUhVhUhVhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhVhUhVhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhVhUhVhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahIhUhUhUhIhJhIhJhIiaibichIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaigNakidapieifaneEhIhUhUhUhIhQhIhQhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaighwihhwhwhwhwhwiiaaaaaaaaaahIhUhUhUhIhQhIhQhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhQhIhJhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhQhIhQhIhUhUhUhIaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUijikikilililililikikijimaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajaoapinifaneEaahUioikikilililililikikiohUaaaaaaaaaaaaaaaaaaaaaaaaaaaahwipiqirisithwaaaaaaaaaaaahUiuikikilililililikikiuhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUivikikilililililikikivhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiwikikililixililikikiwhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUiyilililililililililiziAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaiajaralifaneEaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaahwiBiChShGiDhwaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUiyilililililililililiziEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafFaeaeasaeaseEaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaahghwiFiqhShGiGhwhkaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahIhUhIililililizimiyililililhIiHhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililizimiyililililhIhUhIaaaaaaaaaaaaaaaahghwhwhwhwhGiqhShGiIhwhwhwhwhkhIhUhIililililizimiyililililhIhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililizimiyililililhIhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililizimiyililililhIhUhIaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaahwiJiKiLhwiMhGhGiNhwhwhGiOhGiPhJhVhJililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaiQiLiLiLhwhwiRiShwhwhwhGhGhGiPhJhVhJililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhVhQililililiziAiyililililhQhVhQaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahIhUhIililililiziEiyililililhIiHhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililiziEiyililililhIhUhIaaaaaaaaaaaaaaaahwhwiQiThwhwiUhGiVhwhwiWiXiWhwhIhUhIililililiziEiyililililhIhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililiziEiyililililhIhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhIililililiziEiyililililhIhUhIaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUiyilililililililililizimaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaahwiYhGhGiZhwhGjahGhwhGhGjbjchwaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUiyilililililililililiziAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaahwjdhGhGhGjehGhGhGjfhGhGhGjghwaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiyilililililililililizhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahUijjhjhilililililjhjhijiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiojhjhilililililjhjhiohUaaaaaaaaaaaaaaaaaaaahwjihGhGhGjjhGjkhGjlhGhGhGhzhwaaaahUiujhjhilililililjhjhiuhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUivjhjhilililililjhjhivhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUiwjhjhilililililjhjhiwhUaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaahIhUhUhUhIilililhIiaibichIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIilililhIhUhUhUhIaaaaaaaaaaaaaaaaaahghwhwhwhwhwhwhGhGhGhwhwhwhwhwhwhkaahIhUhUhUhIilililhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIilililhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIilililhIhUhUhUhIaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaahwjmjnjojpjqhwiUhGjrhwjsjthzhzjuhwaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaajvjwjwjwjwjwhwhGhGhGhwhGhGhGhGhzjxaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaajyjzjAjwjwjwjBhGhGhGjfhGhGhGjChzjDaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaajEjwjwjwjwjwjFhGhGhGjlhGhGhGhGhzjGaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaahwjwjwjwjwjHhwiWiTiWhwjIithGhGhGhwaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaahwjJjKjLjMjNhwjOhGjPhwjQhwhwjRhwhwaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaahwjSjwjThwhwhwjUhGjVhwhwhwjWhGjXhwaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaahwjYjZkahwaahwkbkbkbhwaahwhGhGhGhwaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUilililhUaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaahwkbkbkbhwaaigkckdkeiiaahwkbkbkbhwaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIilililhIaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIhUhUhUhIhIilililhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIilililhIhIhUhUhUhIaaaaaaaaaaaaaaaaigkckdkeiiaaaaaaaaaaaaaaigkckdkeiihIhUhUhUhIhIilililhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIilililhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIilililhIhIhUhUhUhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUililililkfililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUililililkgililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUililililixililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkhilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililkhhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkiilililililkjkkklkmkjkkklilililililililililililililililililililililililililililililililililknkokokpkokokqilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililhIhIkvhIkwhIhIilililililililililililililililililililililililililililililililililkjkkklkmkjkkklilililililkihUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkxililililkykzkAkBkmkCkAkDkEilililililililililililililililililililililililililililililililknkFkFkFkmkFkFkFkqilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililhIhIkJkJhIkJkJhIhIilililililililililililililililililililililililililililililililkykzkAkBkmkCkAkDkEililililkxhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkjkzkKkLkmkmkmkLkMkDklililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililknkFkNkFkOkmkFkFkPkFkqililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkGkQililkRkRkRililkSkTililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililhIhIhIkJhIhIhIkJhIhIhIililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkjkzkKkLkmkmkmkLkMkDklililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkUkVkWkXkYkmkWkXkYkUkVililililhIkJkJkJkZlalalalblblblblblalalakZkJkJkJhIilililillckFkFkFkNkmkFkFkFkFldililililhIlelflglhliljlklklklklklklklllmlnlolplqhIilililillrilillsltlulvlwilillrililililhIlxlylzlylylAlylBlylClylxlDlylylElFlylGhIililililhIlHkJkJlIlJlKkJlLlMhIililililhIkJkJkJkZlalalalblblblblblalalakZkJkJkJhIililililkUkVkWkXkYkmkWkXkYkUkVililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililkMkBkmlNkmkmkmlNkmkCkKililililiHkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJiHilililillckFkOkFkmkmlOkFkFkFldililililiHlPlPlPlPlPljlklQlklklklRlklllPlPlPlPlPiHilililililillSltlTlTlTlUlVililililililiHlylWlXlDlYlZlymamblylAmclzlAlxlylGlDlyiHililililhIlHkJkJlIlJlKkJhIhIhIililililiHkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJiHililililkMkBkmlNkmkmkmlNkmkCkKililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililkmkmkmkmkmmdkmkmkmkmkmililililmekJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJmeilililillckFkFkmmfmgkmkmkFkFldililililmhlPlPmimjmkljlkmlmmmnmmmllkllmompmqlPlPmhilililililillSmrlTmslTmtlVililililililmukmkmkmkmkmkmkmkmkmkmkmkmkmkmkmkmkmkmkmmuililililhIlHkJkJlIlJlKkJlLmvhIililililmekJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJkJmeililililkmkmkmkmkmmwkmkmkmkmkmililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililkjkEkmkLkmkmkmkLkmkyklililililiHkJkJlalamxlamxlalalalalalalalalalakJkJiHilililillckFkFkFmykmmzkFkFkFldililililiHlPlPlPlPlPljlklklklklklklklllPlPlPlPlPiHilililililillSmAmBlTlTmClVililililililiHlylGlAlxlylDlzmDlAlYlymElDlAlylDlymFlFiHililililhIhIhIkJlIlJlKkJhIhIhIililililiHkJkJlalamxlamxlalalalalalalalalalakJkJiHililililkjkEkmkLkmkmkmkLkmkyklililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkUkVkWkXkYkmkWkXkYkUkVililililhIkJkJlakJkJkJkJkJkJkJkJkJkJkJkJkJmGkJkJhIilililillckFmHkFkFkmkFkFkFkFldililililhImImJmKmLmMljlklklklklklklkllmNmOmPmQmRhIililililmSililmTmAmUmCmVililmSililililhIlDlClylAmWlGlAlFlDlxlDlAmXlYlymalGlxlyhIililililhImYlLkJmZhInakJlLlMhIililililhIkJkJlakJkJkJkJkJkJkJkJkJkJkJkJkJmGkJkJhIililililkUkVkWkXkYkmkWkXkYkUkVililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkMnbkllNkmkmkmlNkjnckKililililndiaibickJnenenenenenenenenenenekJiaibicndililililnfkFkFkFmHkmkFkFkFkFngililililhIiaibichIiaibicnhiHniiHhIiaibichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililhIhIhIkJhIhIhIkJhIhIhIililililndiaibickJnenenenenenenenenenenekJiaibicndililililkMnbkllNkmkmkmlNkjnckKililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkhililililkCnbkkkEkmkykknckBilililililililililililililililililililililililililililililililnfkFkFkFkmkFnkkFngilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililhIhIkJkJhIkJkJhIhIilililililililililililililililililililililililililililililililkCnbkkkEkmkykknckBililililkhhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkiilililililkMkAkKkmkMkAkKilililililililililililililililililililililililililililililililililnfnlnlnmnlnlngilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililhIhIkvhIkwhIhIilililililililililililililililililililililililililililililililililkMkAkKkmkMkAkKilililililkihUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUkxilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililkxhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililnnhIiaibichIianoichIiaibichIianoichIiaibichInpilililililililililililililililililnnhIiaibichIianqichIiaibichIianqichIiaibichInpilililililililililililililililililnnhIiaibichIianrichIiaibichIianrichIiaibichInpilililililililililililililililililnnhIiaibichIiansichIiaibichIiansichIiaibichInpilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililntnunvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnxilililililililililililililililntnunynynynynynznznznAnAnynynynynynynznznynynynwnxilililililililililililililililntnulylylylylylylylylylylylylylylylylylylylylynwnxilililililililililililililililntnunBnBnBnBnBnBnBnBnBnBnBnBnBnBnBnBnBnCnBnBnBnwnxilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnunvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnEilililililililililililililnDnukFnAnynFnynznAnynznAnznGnAnAnAnHnInynznznznznynwnEilililililililililililililnDnulylylynJlylylylylylylylxlylylylxnKlylylylylylynwnEilililililililililililililnDnunBnBnBnCnBnBnBnBnBnBnBnBnBnBnBnBnBnBnCnCnBnBnBnwnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhInvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvhIilililhIhIiHnLiHhIhIilililhInAnMnAnynNnOnOnPnQnRnSnRnTnRnQnznynAnUnVnWnynznynyhIilililhIhIiHnLiHhIhIilililhIlymFlylynXlylylylxlynXlylylylxlylylylFlynXlylylylyhIilililhIhIiHnLiHnYhIilililhInBnBnBnZnCnBnBoaoaoboaoanBnBnBnBoaoaoanBnBnZoanBnBhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocodoeodododocilililocnvnvnvnvnvnvnvofofofofofofnvnvnvnvnvnvnvnvnvnvnvnvocilililockFognWnRohocilililocnyoinynAojokkFnAognAnOkFolomkFonnynAnInyoonynznynyocilililocopnHnRnRoqocilililoclylAlylylzlylylylylylylylylylynXlylynKlylylylylylyocilililocorororororocilililocnBnBnBnCoaoanBoboaosoaotoaoanBnBoaoanBnBoaoaoanBnBocilililocouovowoxoyocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAozoAoBododiAilililoCnvnvnvnvnvofofofofofofofofofofofofnvnvnvnvnvnvnvnvoCilililiAnOoqnOoDoEiAilililoFnAnOoGnOkFkFoHkFoIoJoqkFoKoLoMkFkFkFognznRnyoNnynyoFilililiAnAnInyoOnyiAilililoPlylylxlylylylYlylylxnKlymFnKlYlylylylylylylylylylyoPilililiAorororororiAilililoQnBnBnZoaoRoanBnBnBnBnBoaoSotnBnBnBoaoaoaoaoanCnBnBoQilililiAoTouowoyoUiAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVodododododoVilililoVnvnvnvofofofofofofofofofofofofofofofofnvnvnvnvnvnvoVilililoVoWnNoXoYoEoVilililoVnAnAnynOnPkFkFoLoZomnRpanRololpbkFkFogpcnRnynznynyoVilililoVkFognznRnyoVilililoVlylylylylylylynKlFlylylAlylylylzlylylylylylylylylyoVilililoVorororororoVilililoVnBnBnCoRoaoapdnBnBnBnBoaoaoaoanBoaoapepfoapfnCnZnBoVilililoVpgoTphoUpgoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIodpiodododhIilililhInvnvnvofofofofofofofofofofofofofofofofofnvnvnvnvnvhIilililhIkFnIoYomnRhIilililhIpjnAnAnAoGnOnAnAnRoopkokkFkFnPkFnPnOplnOoDoEnynznyhIilililhIpmogpnnRnyhIilililhIlzlylylylxlylylylylylylylylylylylylylylylWnXlylylyhIilililhIororpoororhIilililhInBoaoaoaoapfpdppoaoaobospfoaotoapqoaobpqoaoaoanBnBhIilililhIpgpgpgpgpghIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocodprodododpsilililocnvnvnvnvofofofofofofofofofofofofofofofofofnvnvnvnvocilililocnGnzptnAnRocilililocnypupunAognOpvnSnRpwogpxkFoLnRpykFnAnNoXoYoEnynznVocilililocnOoqpzoDoEocilililoclylxlxlylylymFnXlylypApBpCpDpElylylynXlYlynXlylylyocilililocorororororocilililocnBoaobpdpdoSpdpdosoaoanBnBnBpfoaoapeotpfoapeoanBnBocilililocpgpgpgpgpgocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililpFpGpGpGododpFilililiAnvnvnvnvnvofofofofofpHpHpHofofofofofofofofnvnvnvnviAilililpInAoWnAnHpzpIilililiAnynynynyogpJnOnOnOognAkFoHkFpKpLkFkFpMoYomnRomnynyiAilililpNnAnNoXoYoEpNilililiAlylylylylylylylylypApOkmkmkmpPpElylylylylylylylylyiAilililpQorororororpQilililiAnBnZoapdpppdpppfpdpdnBnBnBnBnBnBnBoaoaoaotoaoaoanBiAilililpRpgpgpSpgpgpRilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVodododododoVilililoVnvnvnvnvnvofofofofpHpHpHpHpHofofofofofofnvnvnvnvnvoVilililoVnOnOnOpTomoVilililoVnynyoqpUognAopnSnOpVnOpWkFkFnQkFkFnGnzptnAnRpXnynyoVilililoVkFnIoYpYnRoVilililoVlylynKnXlylynJnXlypZkmqaqaqakmqblylxlynKlylylAlylyoVilililoVorororororoVilililoVnBnBoapqotoRoaqcpdoaoaoaoaoaoanBnBnBnZnBoaoanBnBnBoVilililoVpgpgpSpgpgoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIodododododhIilililhInvnvnvnvnvofofofofofpHpHpHofofofofofofofofnvnvnvnvhIilililhInAnInyonnAhIilililhInynyqdnyqeqfogqgnAqhnOogqinPpmkFqjnAnAnAnHqkopomnyhIilililhInGnzptnAnRhIilililhIlylylFlynXmFlylzlyqlkmqaqaqakmqbmFlylylylxlynJlylyhIilililhIororpoororhIilililhInBnBnBqmoaoaoboappoaosnBnBoSqmoaoanBnBnBnBoanZnBnBhIilililhIpgpgpSpgpghIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocodprodododocilililocnvnvnvnvnvofofofofofofnvofofofofofofofofnvnvnvnvnvocilililocoKonkFkFolocilililocnyomoYnHnAnyogokkFkFoknOnOqnkFkFqjnOnOnOnOomnRomomocilililocnAnAnHnHpzocilililoclylylylxlylylylylypZkmqaqaqakmqbmFlylylylylylylylyocilililocorororororocilililocnBnBnBoapdpdoapdoapqoaoanBnBnBnBnBnBnBnZnBnBnBnBnBocilililocpgpgpSpgpgocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililpFpGpGpGododpFilililiAnvnvnvnvnvofofofofofofnvofofofofofofofofnvnvnvnvnviAilililpIkFqokFoLnApIilililiAomnyqpoYoYoZogoHpmkFnPnRognRpmqqoYnApJnyonnAnQnyomiAilililpNnOnOqrnOompNilililiAlylylylylylFlylYlxqsqtkmkmkmquqvlylylylynXlylxlylyiAilililpQorororororpQilililiAnBnZnBoSppqcoaoapdpdpfoapeoaoboaoanBnZnBnBnZnBnBnBiAilililpRpgpgpgpgpgpRilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVodododododoVilililoVnvnvnvofofofofofofofofnvnvofofofofofofofnvnvnvnvnvoVilililoVkFoLkFnAnIoVilililoVomqwoXnAoYogogpWqxnRkFnSkFqkkFkFkFoKonkFkFolnUnyomoVilililoVnAnInyonnAoVilililoVlylYlYlylylylylylWlyqsqykmqzqAlylymFnXlylylylFlylyoVilililoVorororororoVilililoVnBnBnCoaoapppdoaqcpdpppdoapdospeoaoSnZnBnBnBnBoanBoVilililoVpgpgpgpgpgoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIodqBqCqDodhIilililhInvnvnvofofofofofofofnvnvnvofofofofofofofnvnvnvnvnvhIilililhInRnRqEnIoqhIilililhIomnynApuqFogogoYoYnRkFoKnPoYoYkFokkFkFkFkFpMqGnyomhIilililhIoKonkFkFolhIilililhIlylylylxmFlylylylylylyqHkmqblylylylylylylylylWlylyhIilililhIororqIororhIilililhInBnBnZnBoaoaoapdpdoapfpdppoaoaotnBoanBnBoaoaoRoanBhIilililhIpgpgpgpgpghIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocqJqKqLqMqNocilililocnvnvnvofofofofofofofnvnvnvnvofofofofofofnvnvnvnvnvocilililocqOognRqPogocilililocnynAnNoYogpJogqQoKkFqRoonynRnQnQnSkFkFnPnAnIomomomocilililockFkFkFkFnIocilililoclylynXlylylylynKmFlylypZkmqblxlxnXlylylylynKlylylyocilililocorororororocilililocnBnBnCnBpdoappoaoanBosoapfoanBnBnBnBnBoaoaoboaoanBocilililocpgqSqTqUpgocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAqJqVqWqXqNiAilililoCnvnvnvofofnvnvofofnvnvnvnvnvofofofofofnvnvnvnvnvnvoCilililiAnSoMnSnSoliAilililoFqYnyomoYqqoYqZkFpanyqfnRoOoDnRoonRnRnRqEnIoqoEognyoFilililiApmkFpmnAnIiAilililoPlFlylylylWlynJlylAlymFpZkmralylylylylynJnKnKnXlylyoPilililiAorororororiAilililoQnBnBnCoapdoaoanBoanBnBoaoanBnBnBoRoaoaoRoaoanZnBnBoQilililiAqSrbowrcqUiAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVrdodododqNoVilililoVnvnvnvnvnvnvnvofnvnvnvnvnvnvnvnvofnvnvnvnvnvnvnvnvoVilililoVnRnRnRnRomoVilililoVnynynyoOnRptqjpxkFnNnAogognAoonRpjqOognTqPogreognyoVilililoVnRnRoLnIoqoVilililoVlylylynKlynKmFlWlynXlypZkmqblylylzlWlylylAlylxlylyoVilililoVorororororoVilililoVnBnBnCnBoaoRnBnBnBnBnBoboanCnCoaoanCnBoaoboanCnBnBoVilililoVrbrfowovrcoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhInvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvhIilililhIhIiHnLiHhIhIilililhIpunypjnAnAoloEnykFoYoYrgkFkFpmnRnRnSoMnSnSolnynynyhIilililhIhIiHnLiHhIhIilililhIlxlylzlylylynXlylylylypZkmqblxlylynXlYnXnXlylylylyhIilililhInYiHnLiHhIhIilililhInBnBnBnBnBoanBnCnZnBnBotoaoaoaoanBnBoaoanCnBnBnBnBhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvntnEilililililililililililililnDnxnynyolnyrhnUpJriolrjonkFnznznznznTnRnRnRomnynRntnEilililililililililililililnDnxlylylylylYlFlylylylyrkkmqblylylylylylylylylylyntnEilililililililililililililnDnxnBnBnZnCnBnCnBnBnBoaoaoaoaoanBnBnBoanZnBnBnBnBntnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililnwnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvrlnuilililililililililililililililnwnxnynynynynynAnAnAnAnynynynynynHnAnyrmnRnRnRrlnuilililililililililililililililnwnxlylylylylylylylylypZkmqblylylxlylynJlylylyrlnuilililililililililililililililnwnxnBnBnBnBnBnBnBoaoRoaoaoaotoanBnBnBnBnBnBnBrlnuilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililrnhIiaibichIianoichIiHnLiHhIianoichIiaibichIrnilililililililililililililililililrnhIiaibichIianqichIiHnLiHhIianqichIiaibichIrnilililililililililililililililililrnhIiaibichIianrichIiHnLiHhIianrichIiaibichIrnilililililililililililililililililrnhIiaibichIiansichIiHnLiHhIiansichIiaibichIrnilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiarpichIiaibichIiarpichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiarqichIiaibichIiarqichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiarrichIiaibichIiarrichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiarsichIiaibichIiarsichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIilililillrilillsrtrurvlwilillrililililhIrwrwrwrwrwrwrwrwrwrxrwrwrwrwrwrwrwrwrwhIilililillrilillsrtrurvlwilillrililililhIlyrylylylylylylyrylynJnKnKnXlylylylylyhIilililillrilillsrtrurvlwilillrililililhIrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzhIilililillrilillsrtrurvlwilillrililililhInZnCnBnBoaoaoboaoaoanBnBnBoaoaoanBnBnBhIilililillrilillsrtrurvlwilillrililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrtrArBrCrvlVililililililiHhVhVrDhVrErFhVrGrHrGrIhVhVrJrKhVhVrFrLiHilililililillSrtrArBrCrvlVililililililiHlxmFlylylynXlylynJnXlylylylylylylxlylyiHilililililillSrtrArBrCrvlVililililililiHrzrMrNrzrOrzrMrPrzrzrzrzrNrzrOrzrPrMrziHilililililillSrtrArBrCrvlVililililililiHnCoaoanBobrQosoaotoaoanBnBrQoanBnBoaoaiHilililililillSrtrBrBrBrvlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrRrBrBrBrSlVililililililnLrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTnLilililililillSrRrBrBrBrSlVililililililnLlylylylynKlynXmFlylzlylzlWlylxlylylymFnLilililililillSrRrBrBrBrSlVililililililnLrzrzrzrUrzrzrzrUrzrzrUrzrzrMrzrMrNrzrznLilililililillSrRrBrBrBrSlVililililililnLoaoRoanBnBnBnBnBoarQotnBnBnBoaoaoaoaoanLilililililillSrRrBrBrBrSlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrVrWrBrXrYlVililililililiHhVhVrZrFhVrGrGsasbscrGrGrFhVhVhVsdsesfiHilililililillSrVrWrBrXrYlVililililililiHlylWlynJlylxlylyrylylylynXlYlylxlylylyiHilililililillSrVrWrBrXrYlVililililililiHrzrzrPrNrzrzrzrzrzrzrOrzrzrzrUrzrzrzrziHilililililillSrVrWrBrXrYlVililililililiHoRoarQpdnBnBnBoaoaoaoaoanBoaoapepfoaoaiHilililililillSrVrBrBrBrYlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililmSililmTrVsgrYmVililmSililililhIshshshshshshshshshshshshshshshshshshshhIililililmSililmTrVsgrYmVililmSililililhInKlynKmFlWlylylFlylYlylylylylyrylymFnXhIililililmSililmTrVsgrYmVililmSililililhIrzrNrzrzrMrzrzrzrzrzrzrMrzrPrzrMrzrzrNhIililililmSililmTrVsgrYmVililmSililililhIoaoapfpdppoaoaobospfoaotoapqoaobpqoanBhIililililmSililmTrVsgrYmVililmSililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkSkTililnjnjnjililkGkQililililhIiaibichIiarpichIiaibichIiarpichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiarqichIiaibichIiarqichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiarrichIiaibichIiarrichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiarsichIiaibichIiarsichIiaibichIililililkSkTililnjnjnjililkGkQililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililnnhIiaibichIiasiichIiaibichIiasiichIiaibichInpilililililililililililililililililnnhIiaibichIiasjichIiaibichIiasjichIiaibichInpilililililililililililililililililnnhIiaibichIiaskichIiaibichIiaskichIiaibichInpilililililililililililililililililnnhIiaibichIiaslichIiaibichIiaslichIiaibichInpilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililntnusmsnsosospsmsmsmsnsospsmsmsqsososospsmsnsonwnxilililililililililililililililntnunvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnxilililililililililililililililntnurzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrznwnxilililililililililililililililntnusrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrnwnxilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnusmsssqsosospsmsmsmsnsostsssnsososusvsmsssnsospnwnEilililililililililililililnDnunvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnEilililililililililililililnDnurzrzrzrMrzrzrzrzrzswrzrzrzrzrzrzrzrzrzrzrzrzrznwnEilililililililililililililnDnusrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrnwnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIsmsmsqsosososxsmsmsssnsosospsnsosostsmsssmsqsospsshIilililhIhIiHnLiHnYhIilililhInvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvhIilililhIhIiHnLiHhIhIilililhIrzrzrzrzrzrzrzrzrPrzrzrzsyrzrzrzrzrzrzrzrzrMrzrzrzhIilililhIhIiHnLiHhIhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocoGnOkFkFoHocilililocsmsnsososzsospsmsAsmsmsBsospsmsBsosostsmsCsosospsmocilililocsDsDsEsDsDocilililocnvnvnvnvnvnvnvofofofofofofnvnvnvnvnvnvnvnvnvnvnvnvocilililoclxlylylylYocilililocrzrzrzrzrPrzrzrzrMrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzocilililocrzsFrzrzrzocilililocsrsrsrsrnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrocilililocsrsrsrsrsrocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAnynOnPkFkFiAilililsGsmsCsosusnsostsmsmsmsmsnsospsssHsBsosospsnsosusssmsGilililiAsEsEsEsEsEiAilililsInvnvnvnvnvofofofofofofofofofofofofnvnvnvnvnvnvnvnvsIilililiAlylysJlylyiAilililsKrzrzrMrzrzrzrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzswrzrzsKilililiAsLrzrMrOrMiAilililsMsrsrsrsrnvsNsNsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsMilililiAsrsrsrsrsriAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnAsOoGnOnAoVilililoVsmsnsospsnsososPsQsmsmsnsosxsmsmsqsosostsqsospsmsmoVilililoVsRsDsEsDsDoVilililoVnvnvnvofofofofofofofofofofofofofofofofnvnvnvnvnvnvoVilililoVlylylxlylyoVilililoVrzrzrzrzrzsyrzrzrzrPrNrzrzrzrzrPrzrzrzrPrzrzrzrzrzoVilililoVrzsSrzrzsLoVilililoVsrsrsrsNnvnvsTsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVsrsrsrsrsroVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIpunAognOpvhIilililhIsmsnsospsssBsososospsmsCsospsmsCsosososososospsmsmhIilililhIsEsEsEsEsEhIilililhInvnvnvofofofofofofofofofofofofofofofofofnvnvnvnvnvhIilililhIlxlylylymFhIilililhIrzrzrzrzrzrzrMrzrzrzrzrzrzrzrzrzrzrzrzrzrOrzrzrMrzhIilililhIrzrzsLsUrzhIilililhIsrsrnvnvsNnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIsrsrsrsrsrhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocnynyogpJnOocilililocsmsnsostsmsmsvsBsospsmsqsospsQsqsosusBsososusmsssmocilililocsDsDsEsDsDocilililocnvnvnvnvofofofofofofofofofofofofofofofofofnvnvnvnvocilililoclylylysVlyocilililocrzrzrzrzrzrzrNrzrzrzrzrzrzrzrzrzsWrzsyrzrzrzrzrzrzocilililocrzsXsYsZrzocilililocsrsrsrnvnvsNsrsrsrsrsrsrsrnvnvnvnvnvsrsrsrsrsrsrsrocilililocsrsrtasrsrocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililtboqpUognAoptbilililiAsssnsosospsssmsqsospsnsosotcsosososptdsosospsmsmsmiAilililtesEsEsEsEsEteilililiAnvnvnvnvnvofofofofoftftgthofofofofofofofofnvnvnvnviAilililtinKnXlylynJtiilililiArzrzrzrPrzrzrzrzrzrzrOrzrzrzrzrzrzswrzrzrzrzrzrzrziAilililtjrztknBtlrztjilililiAsrsrsrsrnvnvsNsrsrsrsrsrnvsNnvnvsNnvnvsrsrsrsrsrsriAilililtmsrsrsrsrsrtmilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVqdnyqeqfogoVilililoVsmsmtnsotosmsnsosospsnsosusnsosusvsmsnsosospsssmssoVilililoVsDsDsEsRsDoVilililoVnvnvnvnvnvofofofoftptqtrtsttofofofofofofnvnvnvnvnvoVilililoVlFlynXmFlyoVilililoVrzrNrzrzrzsyrzrzrMrzrzrzrzrzrPrzrzrzrzrMrzrzrOrzrzoVilililoVrztknBtlrzoVilililoVsrsrsrsrsrsrsrsrsrsrsrsrnvnvsNsNnvnvsrsrsrsrsrsrsroVilililoVsrtasrsrsroVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIoYnHnAnyoghIilililhIsmsnsosospsQsqsosusmtusosxsnsostsmsmsmsBsostsmsmsmhIilililhIsEsEtvsEsEhIilililhInvnvnvnvnvofofofofoftwtxtxofofofofofofofofnvnvnvnvhIilililhIlylxtylylyhIilililhIrzrzrzrzrzrzrzrzrzrzsWrzrzswrNrzrzrzrzrzsyrzrzrzrzhIilililhIrztktztlrzhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrnvnvnvtAnvsrsrsrsrsrsrsrsrhIilililhIsrsrsrsrsrhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocqpoYoYoZogocilililocsmsnsosotcsososospsmsnsospsnsososttBsmsnsosospsmsmocilililocsDsRtCsDsDocilililocnvnvnvnvnvofofofofofoftDofofofofofofofofnvnvnvnvnvocilililocsJlylylFlyocilililocrzsyrzrzrzrMrzrPrzrzsyrzrzrzrzrzrzrzrzrzsyrzrzrzrzocilililocrztknBtlrzocilililocsrsrsrsrsrsrsrsrsrsrsrsrsrsNnvsNnvsrsrsrsrsrsrsrsrocilililocsrsrsrsrsrocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililtboXnAoYtEogtbilililiAsmsmsBsotFsosusvsmsssnsostsmsBsosospsssmtnsospsmssiAilililtesEsEsEsEsEteilililiAnvnvnvnvnvofofofofofoftGofofofofofofofofnvnvnvnvnviAilililtilYlylylylytiilililiArzsyrzrzrzrzrzrzrzrzrzrzrzrzsyrzrOrzrzrzrzrzrzrzrziAilililtjrztknBtlrztjilililiAsrsrsrsrsrsrsrsrsrsrsrsrsrnvnvnvnvsrsrsrsrsrsrsrsriAilililtmsrsrsrsrsrtmilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnApuqFogogoVilililoVsmsmsnsososospsmsmsmsnsosospsssBsostsmsnsososxsmsmoVilililoVsDsDsEsDsDoVilililoVnvnvnvofofofofofofofofnvtHofofofofofofofnvnvnvnvnvoVilililoVlylxmFlylyoVilililoVrzrzrzrOrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrPrzrzrzrzrzoVilililoVrztItJtKrzoVilililoVsrnvnvsrnvnvsrsrnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVsrsrsrsrsroVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhInNoYogpJoghIilililhIsssmsnsososusmtBsmsHsmsBsospsmsnsosostsnsotLsmsmsmhIilililhIsEsEsEsEsEhIilililhInvnvnvofofofofofofoftMnvnvofofofofofofofnvnvnvnvnvhIilililhInXlylysVlyhIilililhIrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzrzrzrzsyrzrzrzrzrzhIilililhItNrzrztNrzhIilililhIsrnvnvnvsNtAnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIsrtasrtasrhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocomoYqqoYqZocilililocsmsmsnsosospsmsmsmsmsmsqsospsmsmsBsosotFsosospsmsmocilililocsDsDsEsDsDocilililocnvnvnvofofofofofofofnvnvnvnvofofofofofofnvnvnvnvnvocilililoclylylWlynJocilililocrzrzrzrzrzrzrzrzrzrPrzrzrPrzrzrOrzrzrzrzswrzrMrzrzocilililocrzrztOrzsFocilililocsrsNnvnvnvnvsNnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrocilililocsrsrsrsrsrocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAnyoOnRptqjiAilililsGsmsssHsBsospsmsmsmsmsqsosospsHsmsmsBsosososospsssmsGilililiAsEsEsEsEsEiAilililsInvnvnvofofnvnvofofnvnvnvnvnvofofofofofnvnvnvnvnvnvsIilililiAlynKlynKmFiAilililsKrzrzrzrzrPrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzsKilililiArzrOrzrzrziAilililsMsrnvnvsNnvnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsMilililiAsrsrsrsrsriAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVpjnAnAoloEoVilililoVsmsmsmsqsospsssmsmsqsososusmsmsmsssnsosososospsmsmoVilililoVsDsDsEsDsRoVilililoVnvnvnvnvnvnvnvofnvnvnvnvnvnvnvnvofnvnvnvnvnvnvnvnvoVilililoVlzlylylynXoVilililoVrzrzrMrzrzrzswrzrzrNrzrzrMrzrzrzrOrzrzrzrzrzrOrzrzoVilililoVtOrzrztNrzoVilililoVsrsrnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVsrsrsrsrsroVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIsmsmsnsosospsmsmsqsososusmsmsmsmsmsmsBsosotLsmsmsshIilililhInYiHnLiHhIhIilililhInvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvhIilililhIhIiHnLiHhIhIilililhIrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzsyrzhIilililhIhIiHnLiHhIhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnxsmsnsosusmsmsnsososusmsmsssmsmtPsmsmsBsosospsmntnEilililililililililililililnDnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvntnEilililililililililililililnDnxrzrzrzrzsyrzrzrzrzrzrzrzrzrMrzrzrzrPrzrMrzrzrzntnEilililililililililililililnDnxsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrntnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililnwnxsnsospsmsmsnsosusmsmsmsmsssmsmsmsmsmsBsosprlnuilililililililililililililililnwnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvrlnuilililililililililililililililnwnxrzrzrzrzrzrzrzrzrPrzrzrzrzrzrzrzrzrzrzrzrzrlnuilililililililililililililililnwnxsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrrlnuilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililrnhIiaibichIiasiichIiHnLiHnYiasiichIiaibichIrnilililililililililililililililililrnhIiaibichIiasjichIiHnLiHhIiasjichIiaibichIrnilililililililililililililililililrnhIiaibichIiaskichIiHnLiHhIiaskichIiaibichIrnilililililililililililililililililrnhIiaibichIiaslichIiHnLiHhIiaslichIiaibichIrnilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiatQichIiaibichIiatQichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiatRichIiaibichIiatRichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiatSichIiaibichIiatSichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiatTichIiaibichIiatTichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIilililillrilillsrtrurvlwilillrililililhInvsNsNsNnvnvnvnvsNnvsNnvnvnvnvnvnvnvnvhIilililillrilillsrtrurvlwilillrililililhItUtVtWtXtWtWtWtWtVtWtWtWtWtYtWtWtUtWtWhIilililillrilillsrtrurvlwilillrililililhIrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzsyrzrzrzhIilililillrilillsrtrurvlwilillrililililhItZtZtZtZtZtZuatZtZtZtZtZtZtZtZtZtZtZtZhIilililillrilillsrtrurvlwilillrililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrtrArBrCrvlVililililililiHnvnvnvnvubsNucsNsNnvsNnvnvsNnvsNsNnvsNiHilililililillSrtrArBrCrvlVililililililiHtWtWtYtWudtUtWudtWtWtWtUtUuetXtWtWtWudiHilililililillSrtrArBrCrvlVililililililiHrzrMrzsyrzrzrzswrzufrzrzrzrzrzrzrzrzrziHilililililillSrtrArBrCrvlVililililililiHtZugtZtZtZtZtZtZtZtZugtZtZtZuatZtZtZugiHilililililillSrtrBrBrBrvlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrRrBrBrBrSlVililililililnLsNsNnvnvnvsNsNsNuhnvubsNucsNuisNsNsNnvnLilililililillSrRrBrBrBrSlVililililililnLtWujtWuktWuludtVtWudumtWtWtWtWtXukududnLilililililillSrRrBrBrBrSlVililililililnLrzrzrzufrzrPrzrzrzsyrzrzrzunrzrzrzuorMnLilililililillSrRrBrBrBrSlVililililililnLtZtZtZtZugtZtZtZuptZtZtZtZtZtZtZtZtZtZnLilililililillSrRrBrBrBrSlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrVrWrBrXrYlVililililililiHnvsNnvnvucsNnvsNnvnvsNsNuqnvnvsNnvsNnviHilililililillSrVrWrBrXrYlVililililililiHudtWudtVujtXuetWtWtUtWtWtYurujtWtYultWiHilililililillSrVrWrBrXrYlVililililililiHrzrPrzrzrzrMrzufrzrzunrzrzufrzsyrzrzrziHilililililillSrVrWrBrXrYlVililililililiHtZtZuatZtZtZtZtZtZtZtZustZtZugtZtZtZtZiHilililililillSrVrBrBrBrYlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililmSililmTrVsgrYmVililmSililililhInvsNnvnvsNsNnvsNsNnvsNnvnvnvnvsNutnvnvhIililililmSililmTrVsgrYmVililmSililililhItWtUtWuetWtWtWtYtWtWtWtUtWtWueuuueuetWhIililililmSililmTrVsgrYmVililmSililililhIrzrzrzrzrzrzrzrzrzswrzrzrzrzrzrzrzrzrzhIililililmSililmTrVsgrYmVililmSililililhItZtZtZtZtZtZtZtZugtZtZtZtZtZtZtZtZtZtZhIililililmSililmTrVsgrYmVililmSililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkSkTililnjnjnjililkGkQililililhIiaibichIiatQichIiaibichIiatQichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiatRichIiaibichIiatRichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiatSichIiaibichIiatSichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiatTichIiaibichIiatTichIiaibichIililililkSkTililnjnjnjililkGkQililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililnnhIiaibichIiauvichIiaibichIiauvichIiaibichInpilililililililililililililililililnnhIiaibichIiauwichIiaibichIiauwichIiaibichInpilililililililililililililililililnnhIiaibichIiauxichIiaibichIiauxichIiaibichInpilililililililililililililililililnnhIiaibichIiauyichIiaibichIiauyichIiaibichInpilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililntnunvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnxilililililililililililililililntnulylylylylylylylylylylylylylylylylylylylylynwnxilililililililililililililililntnurzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrznwnxilililililililililililililililntnusmsnsosospsmsmsmsnsospsmsmsqsososospsmsnsonwnxilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnunvnvnvnvnvuznvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnwnEilililililililililililililnDnulylylynJlylylylylylylylxlylylylxnKlylylylylylynwnEilililililililililililililnDnurzrzrzrMrzrzrzrzrzswrzrzrzrzrzrzrzrzrzrzrzrzrznwnEilililililililililililililnDnusmsssqsosospsmsmsmsnsostsssnsososusvsmsssnsospnwnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhInvnvnvnvnvnvnvnvnvnvuznvnvsNnvubnvnvnvnvnvnvnvnvnvhIilililhIhIiHnLiHhIhIilililhIlymFlylynXlylylylxlynXlylylylxlylylylFlynXlylylylyhIilililhIhIiHnLiHhIhIilililhIrzrzrzrzrzrzrzrzrPrzrzrzsyrzrzrzunrzrzrzuorMrzrzrzhIilililhIhIiHnLiHhIhIilililhIsmsmsqsosososxsmsmsssnsosospsnsosostsmsssmsqsospsshIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocsNsNnvsNsNocilililocnvnvnvnvsNuAsNnvnvnvnvsNnvsNnvnvnvnvnvnvnvsNnvnvnvocilililocsNsNnvnvsNocilililoclylAlylylzlylylylylylylylylylynXlylynKlyuBlylylylyocilililocuClylylyuCocilililocrzrzrzrzrPrzrzrzrMrzrzrzrzunrzrzrzrzrzrzrzrzrzrzrzocilililocrzrzrzrzrzocilililocsmsnsososzsospsmsssmsmsBsospsmsBsosostsmsCsosospsmocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAuDuzsNsNuEiAilililuFnvnvnvnvnvnvnvubsNsNsNsNnvsNnvnvsNnvsNsNnvnvsNnvnvuFilililiAnvnvnvsNnviAilililuGlylylxlyuBlylYlylylxnKlymFnKlYlylylylylylylylylylyuGilililiAuClylylyuCiAilililuHrzrzrMrzrzrzrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzswrzrzuHilililiArMrzrzrzrMiAilililuIsmsCsosusnsostsmsmuJsmsnsospsssmsBsosospsnsosusssmuIilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVsNnvsNuzsNoVilililoVnvutnvsNsNnvnvnvsNsNsNnvnvubsNsNsNuisNsNsNsNnvnvnvoVilililoVsNsNnvnvsNoVilililoVlylylylylylylynKlFlylylAlylylylzlylylylylylylylylyoVilililoVuClylylyuCoVilililoVrzrzrzrzrzsyrzrzrzrPrNrzrzrzrzuorzrzrzrPrzrzrzrzrzoVilililoVrzuorzsyrzoVilililoVsmsnsospsnsosostsQsmsmsnsosxsmsmsqsosostsqsospsmsmoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIubnvuDsNnvhIilililhInvnvnvnvsNnvnvsNsNnvsNnvnvsNsNuqnvnvsNnvsNnvnvnvnvhIilililhIsNsNsNsNnvhIilililhIlzlylylylxlylylylylylylylylylylylylylylylWnXlylylyhIilililhIlylylylylyhIilililhIrzrzrzrzuorzrMrzrzrzrzrzrzuorzrzrzrzrzrzrOrzuorMrzhIilililhIrzrzrzrPrMhIilililhIsmsnsospsssBsososospsmsCsospuKsCsosososososospsmsmhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocsNsNsNsNnvocilililocnvubnvnvsNnvnvsNsNnvsNsNnvsNnvuEnvnvsNutnvnvnvnvnvocilililocsNnvsNuLnvocilililoclylxlxlylylymFnXlylypApBpCpDpElylylynXlYlynXlylylyocilililocuClyuMlyuCocilililocrzrzrzrzrzrzrNunrzrzrzrzrzrzrzrzrzrzsyrzrzrzrzrzrzocilililocrzrzrzuNrNocilililocsmsnsostsmsmsvsBsospsmsqsospsQsqsosusBsososusmsssmocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililuOnvsNnvnvsNuOilililiAnvnvnvuisNnvsNsNuPnvsNsNnvsNnvsNsNsNnvsNnvnvnvnvnviAilililuQsNutuLnvnvuQilililiAlylylylylylylylylypApOuRuRuRpPpElylylylylylylylylyiAilililuSuClyuMlyuCuSilililiArzrzrzunrzrzrzrzrzrzrOrzrzrzrzrzrzunrzrzrzrzrzrzrziAilililuTrzrPrzrzrzuTilililiAsssnsosospsssmsqsospsnsosotcsososospsnsosospsmsmsmiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnvsNsNnvuzoVilililoVnvnvnvsNsNsNsNnvsNsNsNnvnvuUsNsNsNnvnvsNsNnvnvnvnvoVilililoVnvsNuLnvnvoVilililoVlylynKnXlylynJnXlypZuRuRuRuRuRqblylxlynKlylylAlylyoVilililoVuClyuMlyuCoVilililoVrzrNrzrzrzsyrzrzrMrzrzrzrzrzrPrzrzrzrzrMrzrzrOrzrzoVilililoVrMrzrNsyrzoVilililoVsmsmtnsospsmsnsosospsnsosusnsosusvsmsnsosospsssmssoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIsNuVsNnvsNhIilililhInvnvsNsNsNnvsNnvsNsNnvnvnvsNsNsNnvnvsNsNnvsNnvnvnvhIilililhInvsNuWnvnvhIilililhIlylylFlynXmFlylzlyqluRuRuRuRuRqbmFlylylylxlynJlylyhIilililhIlylyuMlylyhIilililhIrzrzrzrzrzrzrzrzrzrzunrzrzswrNrzrzrzrzrzsyrzrzrzrzhIilililhIrzrzuNrOrzhIilililhIsmsnsosospsQsqsosusmsnsosxsnsostsmsmuJsBsostsmsmsmhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocsNsNnvuisNocilililocnvnvuzsNnvnvsNsNsNsNsNsNsNsNnvuUsNsNnvnvnvsNsNnvnvocilililocsNsNuLsNnvocilililoclylylylxlylylylylypZuRuRuXuRuRqbmFlylylylylylylylyocilililocuClyuMlyuCocilililocrzsyrzuorzrMrzrPrzuYuYuYuYuorzrzrzuorzrzsyrzunrzrzocilililocrzrMrzrMrzocilililocsmsnsosotcsososospuKsnsospsnsosostsmsmsnsosospsmsmocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililuOuVnvsNsNnvuOilililiAnvnvnvsNsNnvsNutnvsNnvnvsNsNsNuzsNsNnvnvsNnvuznvnviAilililuQnvnvuLsNsNuQilililiAlylylylylylFlylYlxqsqtuRuZuRquqvlylylylynXlylxlylyiAilililuSuClyuMlyuCuSilililiArzsyrzrzrzrzrzrzrzuYuYuYuYrzsyrzrOrzrzrzrzrzrzrzrziAilililuTrzrzrzrzrzuTilililiAsmsmsBsotFsosusvsmsssnsostsmsBsosospsssmtnsospsmssiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVsNsNnvsNutoVilililoVnvnvnvsNubnvsNsNnvsNsNnvsNsNnvsNuAnvnvnvsNnvnvnvnvoVilililoVnvnvsNnvuzoVilililoVlylYlYlylylylylylWlyqsqykmqzqAlylymFnXlylylylFlylyoVilililoVuClylylyuCoVilililoVrzrzrzrOrzrzrzrzrzuYuYuYuYrzrzrzrzrzrzrPrzrzrzrzrzoVilililoVrzrOrzrzrzoVilililoVsmsmsnsososospsmsmsmsnsosospsssBsostsmsnsososxsmsmoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIsNubnvsNsNhIilililhInvubnvsNsNnvnvsNsNsNsNnvsNsNnvsNsNsNsNsNsNnvsNnvnvhIilililhInvnvsNnvnvhIilililhIlylylylxmFlylylylylylyqHkmqblylylylylylylylylWlylyhIilililhIlylylylylyhIilililhIrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzrzrzrzsyrzrzrzrzrzhIilililhIrzrzrzrzrNhIilililhIsssmsnsososusmsmsmsmsmsBsospsmsnsosostsnsotLsmsmsmhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocsNsNnvuzsNocilililocnvnvnvsNsNsNsNsNsNsNnvnvsNnvnvsNsNnvnvsNnvubsNnvnvocilililocsNsNsNnvsNocilililoclylynXlylylylynKmFlylypZkmqblxlxnXlylylylynKlylylyocilililocuClylylyuCocilililocrzrzrzrzrzrzrzrzrzrPrzrzrPrzrzrOrzrzrzrzswrzrMrzrzocilililocrzrzrPrzrzocilililocsmsmsnsosospsmsmsssmsmsqsospsmsmsBsosotFsosospsmsmocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAsNuAsNsNsNiAilililuFnvnvnvsNuzsNuAsNsNnvsNsNnvsNsNsNsNnvnvuznvnvnvsNnvuFilililiAnvsNnvubsNiAilililuGlFlylylylWlynJlylAlymFpZkmralylylylylynJnKnKnXlylyuGilililiAuClylylyuCiAilililuHrzrzrzrzuorzrzrzrzrzrzrzrzrzrzrzrzrzrzunrzrzrzrzrzuHilililiArzrzrzrzrziAilililuIsmsssmsBsospuJsmsmsmsqsosospsmsmsmsBsosososospsssmuIilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVsNuznvsNsNoVilililoVnvnvnvsNsNsNsNnvsNnvnvsNsNsNsNuisNnvnvsNnvsNnvnvnvoVilililoVnvuznvnvnvoVilililoVlylylynKlynKmFlWlynXlypZkmqbuBlylzlWlylylAlylxlylyoVilililoVuClylylyuCoVilililoVrzrzrMrzrzrzswrzrzrNrzrzrMrzrzrzrOrzrzrzrzrzrOrzrzoVilililoVrMrzrzrzswoVilililoVsmsmsmsqsospsssmsmsqsososusmsmsmsssnsosososospsmsmoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhInvnvnvnvsNnvnvnvnvubnvutsNsNnvnvnvnvsNsNnvsNnvnvnvhIilililhIhIiHnLiHhIhIilililhIlxlylzlylylynXlylylylypZkmqblxlylynXlYnXnXlylylylyhIilililhIhIiHnLiHvahIilililhIrzrzrzrzrzuorzrzunrzrzrzuorzrzrzrzrzrzrzrzrzrzsyrzhIilililhIhIiHnLiHhIhIilililhIsmsmsnsosospsmsmsqsososusmsmsmuJsmsmsBsosotLsmsmsshIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvsNnvnvnvnvnvntnEilililililililililililililnDnxlylylylylYlFlylylylyrkkmqblylylylylylylylylylyntnEilililililililililililililnDnxrzrzrzrzsyrzrzrzrzrzrzrzrzrMuorzrzrPrzrMrzrzrzntnEilililililililililililililnDnxsmsnsosusmsmsnsososusmsmsssmsmsssmsmsBsosospsmntnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililnwnxnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvrlnuilililililililililililililililnwnxlylylylylylylylylypZkmqblylylxlylynJlylylyrlnuilililililililililililililililnwnxrzrzrzrzrzrzrzrzrPrzrzrzrzrzrzrzrzrzrzrzrzrlnuilililililililililililililililnwnxsnsospsmsmsnsosusmsmsmsmsssmsmsmsmsmsBsosprlnuilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililrnhIiaibichIiauvichIiHnLiHhIiauvichIiaibichIrnilililililililililililililililililrnhIiaibichIiauwichIiHnLiHhIiauwichIiaibichIrnilililililililililililililililililrnhIiaibichIiauxichIiHnLiHhIiauxichIiaibichIrnilililililililililililililililililrnhIiaibichIiauyichIiHnLiHnYiauyichIiaibichIrnilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkGkQililkRkRkRililkSkTililililhIiaibichIiavbichIiaibichIiavbichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiavcichIiaibichIiavcichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiavdichIiaibichIiavdichIiaibichIililililkGkQililkRkRkRilrokSkTilililvehIiaibichIiaibichIiaibichIiaibichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIilililillrilillsrtrurvlwilillrililililhIogoZvfogogvgogvfvhvivfnAvjvknAvfnAvfomhIilililillrilillsrtrurvlwilillrililililhIlAlylylylyvllWlylynXlylYlylylymFnXlYlyhIilililillrilillsrtrurvlwilillrililililhIrzrzrzrzrNrzrMrzrzrzrzrzrzrzrzrzrzrzrzhIilililillrilillsrtrurvlwilillrilililvehIlylylylylylylylylylylylylylylylylylylyhIilililillrilillsrtrurvlwilillrililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrtrArBrCrvlVililililililiHogoYvmvfogvfvnogvmvooZvpvpnRoYogkFkFqEiHilililililillSrtrArBrCrvlVililililililiHlylxmFlDlylAlylylymFlYlylDlylYlylylAnJiHilililililillSrtrArBrCrvlVililililililiHrzunrzrzrzrzrzrzvqrzrOrzrzrzunrzrzrzrziHilililililillSrtrArBrCrvlVilililililveiHhVvrvrhVvslylylylylylylylylylylylylylyiHilililililillSrtrBrBrBrvlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrRrBrBrBrSlVililililililnLogogvhqEoYvfvpvfvovtvfnyoZnAvjvhkFkFkFnLilililililillSrRrBrBrBrSlVililililililnLnXlylylYlynKmFlylylAlylylxlxnXlylylDlxnLilililililillSrRrBrBrBrSlVililililililnLrzsyrzsyrzrzrzunrNvqrzrzrzrzrzrzrzrPrznLilililililillSrRrBrBrBrSlVililililililvuhVhVvrvrhVvrhVvslylylylylylylylylylylyvuilililililillSrRrBrBrBrSlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrVrWrBrXrYlVililililililiHqEkFvhvhkFqdvmvvvhvpvwnyvfvhnAqnvxnAvpiHilililililillSrVrWrBrXrYlVililililililiHlylylWlynJlylAlyvylynKlWlylYvllylWlylYiHilililililillSrVrWrBrXrYlVililililililiHrzrzrMrzrzrzvqrzvqsyrzrOrzrPrzrMrzrzrMiHilililililillSrVrWrBrXrYlVililililililiHhVhVhVhVhVhVhVvrhVhVvrhVhVhVlylylylylyiHilililililillSrVrBrBrBrYlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililmSililmTrVsgrYmVililmSililililhIkFkFvhvmvhvhoYvmkFvmvmogvfoHnAvfnOnOvvhIililililmSililmTrVsgrYmVililmSililililhIlylAlynKmFlWlynXlylylDlylYlylAlWlDlYlyhIililililmSililmTrVsgrYmVililmSililililhIrzrzrNrMrzrPrzrzrzrzswrzrzrzrzrzsyrzrzhIililililmSililmTrVsgrYmVililmSililililhIhVhVhVhVhVhVhVhVhVhVhVvrvrhVhVvrlylylyhIililililmSililmTrVsgrYmVililmSililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkSkTililnjnjnjililkGkQililililhIiaibichIiavbichIiaibichIiavbichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiavcichIiaibichIiavcichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiavdichIiaibichIiavdichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkSkTililnjnjnjililkGkQililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililnnhIiaibichIiavzichIiaibichIiavzichIiaibichInpilililililililililililililililililnnhIiaibichIiaslichIiaibichIiaslichIiaibichInpilililililililililililililililililnnhIiaibichIiavAichIiaibichIiavAichIiaibichInpilililililililililililililililililnnhIiaibichIiaibichIiaibichIiaibichIiaibichInpilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililntnuoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoanwnxilililililililililililililililntnusrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrnwnxilililililililililililililililntnurzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrznwnxilililililililililililililililntnulylylylylylylylylylylylylylylylylylylylylynwnxilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnuoaoaoapqoaoaoaoaoaoaoapdoaoaoapdotoaoaoaoaoaoanwnEilililililililililililililnDnusrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrnwnEilililililililililililililnDnurzrzrzrMrzrzrzrzrzswrzrzrzrzrzrzrzrzrzrzrzrzrznwnEilililililililililililililnDnulylylylylylylylylyhVvBhVhVlylylylylylylylylylynwnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIoapfoaoavCoaoavDpdoavCoavEoapdoaoaoappvDvCoaoaoaoahIilililhIhIiHnLiHhIhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIhIiHnLiHhIhIilililhIrzrzrzrzrzrzrzrzrPrzrzrzsyrzrzrzrzrzrzrzrzrMrzrzrzhIilililhIhIiHnLiHnYhIilililhIlylylyhVhVvrhVhVhVvrhVvrhVhVhVhVhVlylylyhVhVlylylyhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililockFognznRnyocilililocoaosoaoaoRvEoaoaoaoaoaoaoaoaoavCoaoaotoavDoaoaoaoaocilililocouowowowowocilililocsrsrsrsrnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrocilililocnvnvnvnvnvocilililocrzrzrzrzrPrzrzrzrMrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzocilililocrzrzrzrzrzocilililoclylyhVvrvrhVhVofofofofofoflylylylylylylylyhVhVlylyocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAkFogpcnRnziAilililvFoaoapdoaoaoaqcoavEpdotoapfotqcoaoaoaoaoaoaoavDoaoavFilililiAvGvHowowowiAilililsMsrsrsrsrnvsNsNsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsMilililiAvInvnvnvnvvJilililvKrzrzrMrzrzrzrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzswrzrzvKilililiArzrzrzrzrziAilililiAlylyhVvrhVofofofofofofofofofofofoflylylylylylylylyiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnOplnOoDnyoVilililoVoaoaoaoavDoaoaotppoaoaosoaoaoaoRoaoaoavDoaoaoaoaoaoVilililoVvGowowrfowoVilililoVsrsrsrsNnvnvsTsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVnvnvnvsrsroVilililoVrzrzrzrzrzsyrzrzrzrPrNrzrzrzrzuorzrzrzrPrzrzrzrzrzoVilililoVrzrOrzrOrzoVilililoVlylylyofofofofofofofofofofofofofofofoflylylylylylyoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhInAvLoXoYnyhIilililhIoRoaoaoapdoaoaoaoavDvMvEoaoavDoavDoavEoavNvCoaoaoahIilililhIoTouvOowowhIilililhIsrsrnvnvsNnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhInvnvsrsrsrhIilililhIrzrzrzrzrzrzrMrzrzrzrzrzrzrzrzrzrzrzrzrzrOrzrzrMrzhIilililhIrzrzrzrzrzhIilililhIlylylyofofofofofofofofofofofofofofofofoflylylylylyhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililockFpMoYvPomocilililocoapdpdoaoaoapfvCoavEoavNoaotoavQoaoavCqcoavCoaoavDocilililocpgoTouoxowocilililocsrsrsrnvnvsNsrsrsrsrsrsrsrnvnvnvnvnvsrsrsrsrsrsrsrocilililocsrsrsrsrsrocilililocrzrzrzrzrzrzrNrzrzrzrzrzrzrzrzrzrzrzsyrzrzrzrzrzrzocilililocrzrzrzrzrzocilililoclyhVlylyofofofofofofofofofofofofofofofofoflylylylyocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililvRnGnzptnApXvRilililiAoaoaoaoaoavEoaoaoaoaoaoaqcoapfvEoaoavDoaoaoaoaoaoaiAilililvSpgpgvGowowvSilililiAsrsrsrsrnvnvsNsrsrsrsrsrnvsNnvnvsNnvnvsrsrsrsrsrsriAilililvTsrsrnvsrsrvTilililiArzrzrzunrzrzrzrzrzrzrOrzrzrzrzrzrzswrzrzrzrzrzrzrziAilililvUrzrOrzrzrzvUilililiAlyhVlylylyofofofofofvVvVvVofofofofofofofoflylylylyiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnAnAnAnHopoVilililoVoaoaotvCoaoapqvCoavDoaoaoaoapdoaoapdoaotoaoaosoaoaoVilililoVpgvWvGowowoVilililoVsrsrsrsrsrsrsrsrsrsrsrsrnvnvsNsNnvnvsrsrsrsrsrsrsroVilililoVsrnvvXnvsroVilililoVrzrNrzrzrzsyrzrzrMrzvYvYvYrzrPrzrzrzrzrMrzrzrOrzrzoVilililoVrzrzrzrzrzoVilililoVlyhVvZlylyofofofofvVvVvVvVvVofofofofofoflylylyhVlyoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhInOnOwanOnRhIilililhIoaoappoavCpfoaoRoapqoaoaoavDpdoapfoaoaoapdvEpqoaoahIilililhIpgqSrbrfowhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrvVnvnvtAnvsrsrsrsrsrsrsrsrhIilililhIsrnvnvnvsrhIilililhIrzrzrzrzrzrzrzrzrzrzvYwbvYswrNrzrzrzrzrzsyrzrzrzrzhIilililhIrzrzwcrzrzhIilililhIlylyvrlylyofofofofofvVvVvVofofofofofofofoflylyvrlyhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocnApJnyonnQocilililocoaoaoapdoaoaoavEvQoavEoaoappoaoapfoaoaoaoaoaoaoaoaocilililocpgvGowovowocilililocsrsrsrsrsrsrsrsrsrsrsrsrsrsNnvsNnvsrsrsrsrsrsrsrsrocilililocsrnvvXnvsrocilililocrzsyrzrzrzrMrzrPrzrzwdvYvYrzrzrzrzrzrzrzsyrzrzrzrzocilililocrzrzrzrzrzocilililoclylylylylyofofofofofofnvofofofofofofofoflylylylylyocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililvRoKonwekFnUvRilililiAoaoavDoaoappoaqcpdoavDoaoaoapdvNoaoavEoavCoapdoaoaiAilililvSpgvGoxowowvSilililiAsrsrsrsrsrsrsrsrsrsrsrsrsrnvnvnvnvsrsrsrsrsrsrsrsriAilililvTsrsrnvsrsrvTilililiArzsyrzrzrzrzrzrzrzrzrzrzrzrzsyrzrOrzrzrzrzrzrzrzrziAilililvUrzrzrzrOrzvUilililiAlylylylylyofofofofofofnvofofofofofofofoflylylylylyiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVkFkFkFkFqGoVilililoVoaqcqcoaoaoaoaoavNoaoavCoavEoaoaoapfvCoaoaoappoaoaoVilililoVpgoTouvOowoVilililoVsrnvnvsrnvnvsrsrnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVsrsrsrsrsroVilililoVrzrzrzrOrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrPrzrzrzrzrzoVilililoVrzrOrzrzrzoVilililoVlylylyofofofofofofofofnvnvofofofofofofoflylylylylyoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIkFkFnPnAomhIilililhIoaoaoapdpfoaoaoaoaoaoapfvDoaoaoavEoaoaoaoavDvNoaoahIilililhIpgpgvGowrfhIilililhIsrnvnvnvsNtAnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIsrsrsrvXsrhIilililhIrzrzrzrzrzrzrOrzrzrzrzrzrzrzrzrzrzrzrzsyrzrzrzrzrzhIilililhIrzrzrzrzrzhIilililhIlylylyofofofofofofofnvnvnvofofofofofofoflylylyvrlyhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililocnRnRqEwfoEocilililocoaoavCoaoavEoaotpfoavMvDoaoapdpdvCoaoavDoaotoaoaoaocilililocpgqSrbowowocilililocsrsNnvnvnvnvsNnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrocilililocsrvInvnvnvocilililocrzrzrzrzrzrzrzrzrzrPrzrzrPrzrzrOrzrzrzrzswrzrMrzrzocilililocrzrzrzrzrzocilililoclylylyofofofofofofofnvhVnvnvofofofofofoflylyhVhVlyocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAqOognTqPreiAilililvFppoaoaoavNoapqoaosoapfoaotvNoavDoaoaoapqototvCoaoavFilililiAqSrbovoxowiAilililsMsrnvnvsNnvnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsMilililiAnvnvnvnvnviAilililvKrzrzrzrzuorzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzvKilililiArzrOrzrzrziAilililiAlyhVlyofoflylyofoflyhVhVhVnvofofofofoflylyhVwglylyiAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVnSoMnSnSnyoVilililoVoaoaoaotoaotpfvNoavCoaoaoaoavDoaoRvNoavEosoapdoaoaoVilililoVrbowowowowoVilililoVsrsrnvnvnvsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsroVilililoVnvnvnvnvnvoVilililoVrzrzrMrzrzrzswrzrzrNrzrzrMrzrzrzrOrzrzrzrzrzrOrzrzoVilililoVrzrzrzrOrzoVilililoVlyhVhVlylylylyoflylyhVhVvrhVlylyoflylylylyvrlylylyoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIpdoaoRoaoaoavCoaoaoaoavEoaoapdoaoavCqcvCvCoaoaoaoahIilililhIhIiHnLiHhIhIilililhIsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrhIilililhIhIiHnLiHhIhIilililhIrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzrzsyrzhIilililhInYiHnLiHhIhIilililhIlylywhhVhVlylylylyhVhVhVhVhVhVlylylylylylylylylylyhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnxoaoaoaoaqcppvEvEoavDvCoaoaoaoaoavEoaoaoaoaoaoantnEilililililililililililililnDnxsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrntnEilililililililililililililnDnxrzrzrzrzsyrzrzrzrzrzrzrzrzrMrzrzrzrPrzrMrzrzrzntnEilililililililililililililnDnxlylylyhVlylylyvrhVhVhVhVhVhVvrhVlylylyvrlylylyntnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililnwnxoaoaoaoaoaoaoaoaoaoaoaoaoaoapdoaoapqoaoaoarlnuilililililililililililililililnwnxsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrrlnuilililililililililililililililnwnxrzrzrzrzrzrzrzrzrPrzrzrzrzrzrzrzrzrzrzrzrzrlnuilililililililililililililililnwnxlylylylylyvrhVhVhVvrhVwihVhVhVhVlylylylylyrlnuilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililrnhIiaibichIiavzichIiHnLiHhIiavzichIiaibichIrnilililililililililililililililililrnhIiaibichIiaslichIiHnLiHhIiaslichIiaibichIrnilililililililililililililililililrnhIiaibichIiavAichIiHnLiHhIiavAichIiaibichIrnilililililililililililililililililrnhIiaibichIiaibichIiHvuiHnYiaibichIiaibichIrnilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkGkQililkRkRkRililkSkTililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiawjichIiaibichIiawjichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkGkQililkRkRkRilrokSkTililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIilililillrilillsrtrurvlwilillrililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililillrilillsrtrurvlwilillrililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililillrilillsrtrurvlwilillrililililhItNrzrztNrzsyrzrzsyrzrzrMrzsFrzsFrzrzrzhIilililillrilillsrtrurvlwilillrililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililillrilillsrtrurvlwilillrililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrtrArBrCrvlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrtrArBrCrvlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrtrArBrCrvlVililililililiHrzrztOrzsFrzsXsYsYsYsYsYsZrzrzrzrMrOrMiHilililililillSrtrArBrCrvlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrtrBrBrBrvlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrRrBrBrBrSlVililililililnLhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnLilililililillSrRrBrBrBrSlVililililililnLhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnLilililililillSrRrBrBrBrSlVililililililnLrzrOrzrzrzrztknBnBwknBnBtlrMrzrMrzrzrznLilililililillSrRrBwlrBrSlVililililililnLhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnLilililililillSrRrBrBrBrSlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrVrWrBrXrYlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrVrWrBrXrYlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrVrWrBrXrYlVililililililiHtOrzrztNrzrNtItJtJtJtJtJtKrzrzrzrzsFrziHilililililillSrVrWrBrXrYlVililililililiHhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViHilililililillSrVrBrBrBrYlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililmSililmTrVsgrYmVililmSililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIililililmSililmTrVsgrYmVililmSililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIililililmSililmTrVsgrYmVililmSililililhIrzrNrzrzrMrzswrzrzrNrzrzrMrzrzswrNrzrzhIililililmSililmTrVsgrYmVililmSililililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIililililmSililmTrVsgrYmVililmSililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkSkTililnjnjnjililkGkQililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiawjichIiaibichIiawjichIiaibichIililililkSkTililnjnjnjililkGkQililililhIiaibichIiaibichIiaibichIiaibichIiaibichIililililkSkTililnjnjnjililkGkQililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililnnhIiaibichIiaibichIiaibichIiaibichIiaibichInpilililililililililililililililililnnhIiaibichIiaibichIiaibichIiaibichIiaibichInpilililililililililililililililililnnhIiaibichIiaibichIiaibichIiaibichIiaibichInpilililililililililililililililililnnhIiaibichIiaibichIiaibichIiaibichIiaibichInpilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililntnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnxilililililililililililililililntnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnxilililililililililililililililntnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnxilililililililililililililililntnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnxilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnEilililililililililililililnDnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnEilililililililililililililnDnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnEilililililililililililililnDnuhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVnwnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhVhVhVhVhVhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililochVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVocilililochVhVhVhVhVocilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililiAhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViAilililiAhVhVhVhVhViAilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahUilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililoVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVoVilililoVhVhVhVhVhVoVilililhUaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhIilililhIhIiHnLiHhIhIilililhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililnDnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVntnEilililililililililililililnDnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVntnEilililililililililililililnDnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVntnEilililililililililililililnDnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVntnEilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililnwnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVrlnuilililililililililililililililnwnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVrlnuilililililililililililililililnwnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVrlnuilililililililililililililililnwnxhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVrlnuilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililrnhIiaibichIiaibichIiHnLiHhIiaibichIiaibichIrnilililililililililililililililililrnhIiaibichIiaibichIiHnLiHhIiaibichIiaibichIrnilililililililililililililililililrnhIiaibichIiaibichIiHnLiHhIiaibichIiaibichIrnilililililililililililililililililrnhIiaibichIiaibichIiHnLiHhIiaibichIiaibichIrnilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililwmwnwowowownwmilililililililililililililililililililililililililililililililililkrksilililktkuilililililililililililililililililililililililililililililililililkrksilililktkuililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililwmwpwpwpwqwpwpwpwmilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililililililililililililililililililililililililililililkGkHilililililkIkuilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkGkQililkRkRkRililkSkTililililwriaibicwsiaibicwrwrwrwrwrwrwrwrwrwrwrwrwrililililkGkQililkRkRkRilrokSkTililililwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrililililwmwpwpwpwqwqwqwpwpwpwmililililwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrililililkGkQililkRkRkRilrokSkTililililwrwrwrwrwrwrwrwrwrwrwrwtiaibicwtwrwrwrwrwrililililkGkQililkRkRkRilrokSkTililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIilililillrilillsrtrurvlwilillrililililwrwuwuwuwukJkJkJwvwwwrwxwywzwAkJwBwCwDwEwrilililillrilillsrtrurvlwilillrililililwrwFwGwFwGwFwGwFwGwHwIwHwGwFwGwFwGwFwGwFwrililililwnwpwpwpwqwpwqwpwpwpwnililililwrwJwKwLwMwMwNwOwtwPwPwtwrwQwtwQwrwRwRwRwrwSililillrilillsrtrurvlwilillrililililwrwTwUwVwTwWwVwTwWwVwrwtwtwtwtwtwrwXwYwZwrilililillrilillsrtrurvlwilillrililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrtrArBrCrvlVililililililxakJkJkJkJkJxbkJwvkJxckJkJkJkJkJwBkJkJkJwrxdililililillSrtrArBrCrvlVilililililxewrwFxfwFxfwFxfxgxfwtwtwtxfwFxfwFxfwFxfwFwrxdilililwowpwqwqwqwqwqwqwqwpwoililililxhxixixjwMwMwNwNwtwtwtwtwrwQwtwQwrwtwtwtwrxdililililillSrtrArBrCrvlVilililililxkwrwtwtwtwtwtwtwtwtwtwrwriHxliHwrwrwtwtwtwrxdililililillSrtrBrBrBrvlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrRrBrBrBrSlVililililililwskJkJkJkJxbxmxbwvxnwrwxwywzwAkJwBkJkJkJxcilililililillSrRrBrBrBrSlVililililililxowtwtwtwtwtwtwtwtwtxpwtwtwtwtwtwtwtwtwtxoililililwowqwqwpwqxqwqwpwqwqwoililililxrwtwtwtwtxswtwtwtwtwtxpxtwtwtwtxrwtwtwtxrilililililillSrRrBrBrBrSlVililililililxuwtwtwtwtwtwtwtwtwtxuwtwtxfwtwtwtwtwtwtxuilililililillSrRrBrBrBrSlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililillSrVrWrBrXrYlVililililililxakJkJkJkJkJxbkJwvwvwrkJkJkJkJkJwBkJkJkJwrilililililillSrVrWrBrXrYlVilililililxvwrwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwrxwilililwowpwqwqwqwqwqwqwqwpwoilililxvwrxxxyxyxzxAxBxCwtwtwtwtwrxDwtwQxhwtwtwtwrilililililillSrVrWrBrXrYlVilililililxvwrwtwtwtwtwtwtwtwtwtwrxpwtwtwtwtwtwtwtwtwrilililililillSrVrBrBrBrYlVililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililmSililmTrVsgrYmVililmSililililwrxExExExEkJkJkJkJkJxckJkJkJkJkJwBwCwDwEwrililililmSililmTrVsgrYmVililmSililililwrxFxGxGxGxGxGxGxHxGxGxGxGxGxGxGxGxGxGxFwrililililwnwpwpwpwqwpwqwpwpwpwnilililxIwrxJxyxKxLxMxBxCwtxNxOwtwrwQwtwQwrwRwRwRwrililililmSililmTrVsgrYmVililmSililililwrxPxQwVxRxSwVxRxSwVwrwtwtwtwtwtwtxTxTxTwrililililmSililmTrVsgrYmVililmSililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIililililkSkTililnjnjnjililkGkQililililwriaibicwsiaibicwrwrwrwrwrwrwrwrwrwrwrwrwrililililkSkTililnjnjnjililkGkQililililwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrililililwmwpwpwpwqwqwqwpwpwpwmililililwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrililililkSkTililnjnjnjililkGkQililililwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrililililkSkTililnjnjnjililkGkQililililhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililwmwpwpwpwqwpwpwpwmilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililililililililililililililililililililililililililililkSkTilililililkrkHilililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabhUililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililwmwnwowowownwmilililililililililililililililililililililililililililililililililkSksilililktkHilililililililililililililililililililililililililililililililililkSksilililktkHililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachUilililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililililhUacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaachIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUhUhUhIhUilililililililililililililililililhUhIacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililililhUhUaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaahUhUilililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhUilililililililililililililhUhUaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaahIhUhUhUhIhIhUhUhUhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIhUhUhUhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIhUhUhUhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIhUhUhUhIhIhUhUhUhIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahIhUhUhUhIhIhUhUhUhIhIhUhUhUhIaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxYxZyaybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydxUxUxUydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxUxUxUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxUxUxUxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVxVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXyeyfygybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXyeyfygybybybybybybybybybybybybybybybybycaaaaaaxWxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXyeyfygybybybybybybybybybybybybybybybybycaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydaaaaaaydydydydydydydydydydydydydydydydydaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} + diff --git a/maps/virgo-1.dmm b/maps/virgo-1.dmm index 89b0d77ed1..f35061780f 100644 --- a/maps/virgo-1.dmm +++ b/maps/virgo-1.dmm @@ -859,7 +859,7 @@ "aqA" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "aqB" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/storage/primary) "aqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"aqD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"aqD" = (/obj/structure/sign/directions/security{dir = 1; pixel_y = 32},/obj/effect/floor_decal/symbol/da{pixel_y = 25},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_one) "aqE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "aqF" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) "aqG" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (NORTH)"; icon_state = "chapel"; dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main) @@ -882,13 +882,13 @@ "aqX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "aqY" = (/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance"; req_access = list(4)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/security/detectives_office) "aqZ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"ara" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"ara" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/weapon/storage/firstaid/combat{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/combat,/obj/structure/table/reinforced,/obj/structure/window/basic{color = "#FF000"; desc = "In case of useless chemists during a crisis, break glass."; dir = 4; maxhealth = 1; name = "emergency medicine"},/obj/structure/window/basic{color = "#FF000"; desc = "In case of useless chemists during a crisis, break glass."; maxhealth = 1; name = "emergency medicine"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "arb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) "arc" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary) "ard" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) -"are" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/closet/crate/secure{name = "Silver Crate"; req_access = list(19)},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"are" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/symbol/lo{pixel_x = -32; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway) "arf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"arg" = (/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/structure/closet/crate/secure{name = "Gold Crate"; req_access = list(19)},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) +"arg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/obj/structure/closet/crate/secure{name = "Confiscated Contraband Crate"; req_access = list(19)},/obj/item/stolenpackage,/obj/item/stolenpackage,/obj/item/stolenpackage,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "arh" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/storage/primary) "ari" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/turf/simulated/floor/tiled,/area/storage/primary) "arj" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Tool Storage"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/storage/primary) @@ -2408,7 +2408,7 @@ "aUp" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_one) "aUq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aUr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one) -"aUs" = (/obj/structure/sign/directions/security{dir = 1; pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_one) +"aUs" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/closet/crate/secure{name = "Platinum Crate"; req_access = list(19)},/obj/item/stack/material/platinum/fifty,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/platinum,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "aUt" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_one) "aUu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 8},/obj/structure/sign/directions/evac{pixel_y = 32; pixel_z = 8},/obj/structure/sign/directions/medical{dir = 2; pixel_y = 32},/obj/structure/sign/directions/science{dir = 8; pixel_y = 32; pixel_z = -8},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "aUv" = (/turf/simulated/floor/tiled,/area/hallway/primary/central_two) @@ -3855,7 +3855,7 @@ "bwg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bwh" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/disposalpipe/segment,/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bwi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) -"bwj" = (/obj/structure/flora/pottedplant{tag = "icon-plant-01"; icon_state = "plant-01"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bwj" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/closet/crate/secure{name = "Silver Crate"; req_access = list(19)},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/stack/material/silver/fifty,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "bwk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bwl" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bwm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) @@ -9452,6 +9452,7 @@ "dzN" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/engineering/aft_hallway) "dzO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dzP" = (/obj/random/action_figure,/turf/simulated/floor,/area/maintenance/evahallway) +"dzQ" = (/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/structure/closet/crate/secure{name = "Gold Crate"; req_access = list(19)},/obj/item/stack/material/gold/fifty,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "dzR" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "admin_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -28; pixel_y = -6; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dzS" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dzT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2) @@ -9558,6 +9559,7 @@ "dBQ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar) +"dBT" = (/obj/effect/floor_decal/symbol/pr,/turf/simulated/wall,/area/quartermaster/storage) "dBU" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBX" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) @@ -9906,7 +9908,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaSoaSpaSqaSraSsaStaSoaSuaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSxaSxaSxaSxaSyaSzaRTahyahyahyahyahyahyahyahyahyaSAaSBaSCaSDaSAahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaFaaFaaFaaahaahaahatNaSEaSFatNaahaahahyahyahyahyahyaSGawnaxmawnaSGahyahyahyahyahyahyahyaCjaSHaSIaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaDoaFqaSJaFsaFtaClaRDaSKaSLaSMaSNaQnaRHaSOaRIaQnaSPaGRaFCaSQaSRaFFaSSaFFaSTaSQaFCaSUaEvaDtaOoaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVaSWaSXaSXaSXaSXaSXaSXaSXaSYaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSZaTaaTbaTcaTdaTeaRTahyahyahyaTfaTgaThaTiaTfahyaTjaTkaTlaTkaTjahyahyaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahatNaHNaTmatNaahaahahyahyahyahyahyaTnawnaxmawnaTnahyaToaTpaTqaTraToahyaCjaPdaDnaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaEpbdHaLIaIcaLJaClaQnaQnaQnaQnaQnaQnaQnaQnaQnaQnaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaTtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraQkaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUhaTfaUfaTkaUgaTkaUsaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaVcaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClcllcllcllcllcllcllaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUhaTfaUfaTkaUgaTkaqDaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaVcaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClcllcllcllcllcllcllaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxawqaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaYIaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAcpZcmkcmlakuaktaktaDtaVCaYcaYdaYeaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBakvaWuaWuakxakwakyakyakLakBakMakDaWGakIaWGaWGaWGaWGaWGakSaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaLIaLIaLIaUAcpZakTakKakPakUcomaDtaDtaDtaDtaDtaDtaDtaDtaFJaVCaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9931,7 +9933,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahbjWbsQbsRbukbonbpKbsSbpKbonbukbxbbsTbjWaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbEEblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahbjWbjWbrybukbRVbpIbTDbpIbonbukbrzbjWbjWaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkawrbtmboObtnaCsaCuaCtaCuaDwboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahbjWbjWbVfbpMboobpIbpIbpIbqHbpNcgdbjWbjWaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzayjaykbuCbuDbuEbuFbuGbuHbuIbtfbHXbuKbuLbuMbuNbuObuLbuNboObwxbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhawxbvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahbjWbjWbrwbpMckQcoFclHcqpbrMbjWbjWaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTcqsbsXanvbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbQwbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhawxbvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahbjWbjWbrwbpMckQcoFclHcqpbrMbjWbjWaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTcqsbsXanvbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbQwbwiarabwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahbjWbjWbjWcuwcuvcvjcuHcvCbjWbjWbjWaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXanAbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbvRboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaToaYGbynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbxybyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJdkQbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsawybtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahblubxablubluaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmdkRbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9959,18 +9961,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUcgycgzcgAccwcgBccwccwcgCccwcgDbZUcgEcgFcgEcgGcgHcgIcgJbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcgKcgLceicgMcgNcgOceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZycgPcgQcgRcgSchucgUcbOcgVcgWcgXcgYcgZchacgWcgWchbcgWchcchdchechfcgWchgcbOcgUchuchhchichjcevcevchkaowcdNcdMcdNchlchmcdMchncdMcdNchochpcdMchqchrchschtchLchvahyahybJechwchxbbQbbRchychzchzchzchAchzaoBcsbchzchzchzchzchCchDchEchFchGchHchGchGchGchGchGchGchGchGchGchIchJchJchJchJchJchJchJchJchJchJchJchJchJchKbZMaahaahcbccgocgpciscgucgucgucgucgucgucguchMchNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidaoCcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOcinciocipciqcirciwcitciucivciAcixciycizciGciBciCcbOcbOcbOcbOciDcfQciEciFbURbURciXciHciHciHciHciHciHciHciHciHciHciHciHciIbURciXchvahyahyahybrGciJciKciLciKciMciNciNciOciNciNaoEcwLciNciNciNciOciNciRcwTbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVcqcbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAciYciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXaoFcjvcjvaoGcjvaoHapdbZXbZXbZXbZXbZXbZXbZXbZXbZXcjtcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhcjIcjJcjKciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMapuapAapvceMceMceNcaNcwYcwYcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVcgmbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYapCcjTchYcjUchYcjVcjWcjXcjqaahaahamYamYamYamYapFamYamYamYamYaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyapGapAapGahyahyahycaNcybcybcaNaahaahaahaahaahaahaahaahaahaahaahbZMciVcqcbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYapCcjTchYcjUchYcjVcjWcjXcjqaahaahamYamYamYamYapFamYamYamYamYaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyapGareapGahyahyahycaNcybcybcaNaahaahaahaahaahaahaahaahaahaahaahbZMciVcqcbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxapHckzchYckAchYckBckCckDcjqaahaahamYaqwapIapRapQapSanCaqwamYaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbocFUcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRcJfciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahOahOahOapXahOahOahOaahcaNcybcyrcaNaahaahaahaahaahaahaahaahaahaahaahbZMciVcoObZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahamYaqwaoDaoDaqlaqnaqmaucamYaahaahaahaahaahaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclCclCclEclFcfRcfRcfRcKgclGcKhclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclIclQclIclIclIclIclIclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahOaqoaieaqsaqpaqtahOaahcaNcybcAkcaNaahaahaahaahaahaahaahaahaahaahaahbZMciVcnTbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmabFKcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahamYaqvaoDaqwaqxaqwaoDaqyamYcmjcmjcmjcmjaahaahaahbZXbZXcjubZXdEldEldEldElahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahOaieaieaqzaieaqAahOaahcaNcAucybcaNaahaahaahaahaahaahaahaahaahaahaahbZMciVcoHbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahamYartaoDaqwaqBaqwaoDanFamYcnicnjcnkcmjaahaahaahbZXcnocjubZXbWTckJccqdEldElahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcfRcfRcfRcnDcfRcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcevcevcevcnJcevcevcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyahOaqDaqCaqZaqEaraahOaahcaNcybcybcaNaahaahaahaahaahaahaahaahaahaahaahbZMcBnbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahamYanBarbardarcaoDaoDaqwamYcogcohcoicmjaahaahaahbZXconcjubZXclxcrlcmycrqdElahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcKickickicfRcoXciFciFaahahOareaiearfaieargahOaahcaNcybcybcaNcPncPncPncPncPncPncPncPncPncPncPncPncCjcCMcPncPncPncPncPncPncPncPncPncPncPncPncPnaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahamYartaoDaqwaqBaqwaoDanFamYcnicnjcnkcmjaahaahaahbZXcnocjubZXbWTckJccqdEldElahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcfRcfRcfRcnDcfRcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcevcevcevcnJcevcevcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyahOargaqCaqZaqEaUsahOaahcaNcybcybcaNaahaahaahaahaahaahaahaahaahaahaahbZMcBnbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahamYanBarbardarcaoDaoDaqwamYcogcohcoicmjaahaahaahbZXconcjubZXclxcrlcmycrqdElahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcKickickicfRcoXciFciFaahahObwjaiearfaiedzQahOaahcaNcybcybcaNcPncPncPncPncPncPncPncPncPncPncPncPncCjcCMcPncPncPncPncPncPncPncPncPncPncPncPncPnaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahamYariarharkarjarmarlarnamYcpdcohcpecmjaahaahaahcpjbZXarqbZXcpjcvVcrrcvWdElahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovawtcpvcpwcpxcpycpzcpAcpBawucovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcEVcEVcEVcEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahahOahOaiaarraidahOahOaahcaNcDxcDocDBcDzcDzcDzcDzcDOcHucDPcIscIrcIrcItcIJcIucIPcIPcIPcIRcKMcJRcKUcKMcKMcKMcLicKVcCMcPnaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgbfncpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXamYamYarsauQaruauRarvamYamYcmjcpYcmjcmjcpXcpXcpjcpjcFucFrcqdcpjdElcxWcyjdElcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocKmcqqcrJcqrcKXcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcuIarwcxUcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahahOahOahOahOahOaahaahcaNcNNcLjcVLcQzcQzcQzcQzcQzcXCcTDcTDcTDcTDcTDcTDcXOcTDcTDcTDcZhcTDcTDcTDcTDcTDcTDctqcTDcCMcPnaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqZcqOarxcracqYcqYcqYcqYarycqOcrdarzcrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrMcrLcrMcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcEVcEVcEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahaahcaNcaNcaNcrXcrXcrXcrXcrXcZicZjcrZcrZcrZcrZcrZdaycZvdaAdazdaycZvdaAcsacsacsacsacsadaBcZicPncsccsccsccscaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcrLcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcEVcEVcDncEVcEVcEVcEVcFecrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahaahaahaahaahcrXcrXcrXcrXcrXctfctgayocrXbTgctjcrZayqctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoayscsactqcuMcscayvcttcuTcsccsccsccsccscaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcupcrLcupcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcJacEVcLvcEVcQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahaahaahaahaahcrXcuuazEcuucrXcNfcuxdGMcrXcuzcuAcrZcuNcuCcuDcrZcuEazFcuEcrZcuGaAdcuGcsacOScuJdHccsacuLcuMcsccwEcuOcuPcsccuQaADcuQcscaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicLtcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWRcEVcEVcEVcEVcEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYdaCcrQaahaahaahaahaahaahcrXaAEcvxaAEcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZaAFcvDaAFcrZaAGcvFaAGcsacsacvGcsacsacvHcvIcsccsccvJcsccscaAHcvLaAHcscaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWdBTcuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicLtcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWRcEVcEVcEVcEVcEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYdaCcrQaahaahaahaahaahaahcrXaAEcvxaAEcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZaAFcvDaAFcrZaAGcvFaAGcsacsacvGcsacsacvHcvIcsccsccvJcsccscaAHcvLaAHcscaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPbHqbIfcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcPicEVcEVcEvcPocEVcEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahaahaahaahaahcrXcwBcwCcwDcPvcwDcwJcwHdaOcwKcwUdaRcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScPBcwScyacyedbAcyqcyfdbZcwZcxacxbcxccxbcxdcxecscaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcticzkctrcyBcxzahyahyahyahyahyahycovcovdHdcxFcxGcxHcxIcxJdHecovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZcEVcTdcQncUncEVcEVddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahaahaahaahaahcrXcxVaAKaAIcxYcxZcytdcacrXcyccydcrZdcbcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqdcqcsacyscAxcBoddecyvcywcyxcyydEQcyAcscaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaGXcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczecxBczgczhcxzcxzcxzcxzaahaahaahaahcovcziczicziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZbgjczZczZczZcrQcJNcxTddycwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahaahaahaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/vorestation.dme b/vorestation.dme index fda2263b2d..507df1b39d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1734,11 +1734,19 @@ #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\alien.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\bear.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\bee.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\carp.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\catgirl.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\creature.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\deathclaw.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\dragon.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\frog.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\horse.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\mimic.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\panther.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\vore\vore.dm" +#include "code\modules\mob\living\simple_animal\hostile\vore\wolf.dm" #include "code\modules\mob\living\voice\voice.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\login_vr.dm" @@ -2241,4 +2249,5 @@ #include "maps\RandomZLevels\carpfarm.dm" #include "maps\RandomZLevels\listeningpost.dm" #include "maps\RandomZLevels\snowfield.dm" +#include "maps\RandomZLevels\zoo.dm" // END_INCLUDE From 868413c880ea5e7bb0196551593514c894c13202 Mon Sep 17 00:00:00 2001 From: Eearslya Sleiarion Date: Sun, 9 Oct 2016 15:55:29 -0700 Subject: [PATCH 04/24] Polaris Sync October 9th (#633) --- code/__defines/inventory_sizes.dm | 25 + code/__defines/misc.dm | 12 + code/_macros.dm | 4 + code/_onclick/telekinesis.dm | 2 +- code/controllers/Processes/game_master.dm | 6 + code/datums/datacore.dm | 2 +- code/datums/supplypacks/contraband.dm | 3 +- code/datums/supplypacks/supplypacks.dm | 2 +- code/datums/uplink/ammunition.dm | 32 +- code/datums/weakref.dm | 31 + code/datums/wires/grid_checker.dm | 66 + .../wires/{jukebox_vr.dm => jukebox.dm} | 8 +- code/defines/obj.dm | 4 +- code/defines/obj/weapon.dm | 47 +- code/game/antagonist/mutiny/mutineer.dm | 6 +- code/game/antagonist/outsider/ert.dm | 2 +- code/game/antagonist/outsider/raider.dm | 2 +- code/game/antagonist/station/changeling.dm | 2 +- code/game/antagonist/station/cultist.dm | 16 +- code/game/antagonist/station/revolutionary.dm | 2 +- code/game/antagonist/station/traitor.dm | 4 +- code/game/area/Space Station 13 areas.dm | 4 +- code/game/atoms_movable.dm | 1 + .../gamemodes/changeling/powers/armblade.dm | 2 +- code/game/gamemodes/cult/cult_items.dm | 4 +- code/game/gamemodes/cult/ritual.dm | 4 +- code/game/gamemodes/events.dm | 4 +- code/game/gamemodes/gameticker.dm | 4 +- .../game/gamemodes/malfunction/malfunction.dm | 1 + code/game/gamemodes/mixed/conflux.dm | 4 +- code/game/gamemodes/mixed/lizard.dm | 4 +- code/game/gamemodes/mixed/visitors.dm | 4 +- code/game/gamemodes/newobjective.dm | 2 +- code/game/gamemodes/ninja/ninja.dm | 3 +- code/game/gamemodes/nuclear/pinpointer.dm | 2 +- code/game/gamemodes/objective.dm | 6 +- .../technomancer/assistance/assistance.dm | 2 +- code/game/gamemodes/technomancer/catalog.dm | 2 +- code/game/gamemodes/technomancer/core_obj.dm | 14 +- .../devices/disposable_teleporter.dm | 2 +- code/game/gamemodes/technomancer/equipment.dm | 5 +- .../gamemodes/technomancer/instability.dm | 105 +- .../technomancer/spells/aspect_aura.dm | 6 +- .../technomancer/spells/audible_deception.dm | 5 +- .../technomancer/spells/aura/biomed_aura.dm | 12 +- .../technomancer/spells/aura/fire_aura.dm | 2 +- .../technomancer/spells/aura/frost_aura.dm | 2 +- .../technomancer/spells/aura/shock_aura.dm | 2 +- .../technomancer/spells/aura/unstable_aura.dm | 2 +- .../gamemodes/technomancer/spells/control.dm | 4 +- .../technomancer/spells/flame_tongue.dm | 4 +- .../technomancer/spells/insert/mend_burns.dm | 13 +- .../technomancer/spells/insert/mend_metal.dm | 11 +- .../technomancer/spells/insert/mend_organs.dm | 42 +- .../technomancer/spells/insert/mend_wires.dm | 14 +- .../technomancer/spells/insert/mend_wounds.dm | 6 +- .../technomancer/spells/insert/purify.dm | 13 +- .../technomancer/spells/instability_tap.dm | 4 +- .../technomancer/spells/mark_recall.dm | 4 +- .../technomancer/spells/oxygenate.dm | 4 +- .../technomancer/spells/phase_shift.dm | 6 + .../spells/projectile/overload.dm | 4 +- .../spells/projectile/projectile.dm | 10 +- .../gamemodes/technomancer/spells/radiance.dm | 2 +- .../technomancer/spells/resurrect.dm | 6 +- .../technomancer/spells/shared_burden.dm | 2 +- .../technomancer/spells/spawner/darkness.dm | 2 +- .../technomancer/spells/spawner/fire_blast.dm | 2 +- .../technomancer/spells/spawner/pulsar.dm | 2 +- .../technomancer/spells/summon/summon.dm | 21 +- .../technomancer/spells/summon/summon_ward.dm | 19 +- .../technomancer/spells/warp_strike.dm | 2 +- .../gamemodes/technomancer/technomancer.dm | 4 +- code/game/jobs/access_datum.dm | 2 +- code/game/jobs/job/captain.dm | 8 +- code/game/jobs/job/civilian.dm | 2 +- code/game/jobs/job/engineering.dm | 2 +- code/game/jobs/job/medical.dm | 2 +- code/game/jobs/job/science.dm | 2 +- code/game/jobs/job/security.dm | 2 +- code/game/jobs/job_controller.dm | 4 +- code/game/jobs/jobs.dm | 2 +- code/game/machinery/alarm.dm | 4 +- code/game/machinery/atmoalter/canister.dm | 2 +- code/game/machinery/atmoalter/pump.dm | 2 +- code/game/machinery/atmoalter/scrubber.dm | 2 +- code/game/machinery/camera/camera_assembly.dm | 2 +- code/game/machinery/cell_charger.dm | 3 + code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/arcade.dm | 2 +- code/game/machinery/computer/medical.dm | 2 +- code/game/machinery/computer/security.dm | 4 +- code/game/machinery/computer/skills.dm | 2 +- .../machinery/computer3/buildandrepair.dm | 2 +- code/game/machinery/computer3/component.dm | 2 +- .../machinery/computer3/computers/card.dm | 6 +- .../machinery/computer3/computers/security.dm | 2 +- code/game/machinery/computer3/laptop.dm | 2 +- .../machinery/doors/airlock_electronics.dm | 2 +- code/game/machinery/doors/multi_tile.dm | 1 + code/game/machinery/jukebox.dm | 57 +- code/game/machinery/jukebox_vr.dm | 69 +- code/game/machinery/machinery.dm | 2 +- code/game/machinery/newscaster.dm | 2 +- code/game/machinery/pipe/construction.dm | 4 +- code/game/machinery/recharger.dm | 10 +- code/game/machinery/suit_storage_unit.dm | 15 +- code/game/mecha/mecha_parts.dm | 124 +- code/game/objects/items.dm | 17 +- code/game/objects/items/bodybag.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/game/objects/items/devices/PDA/cart.dm | 2 +- code/game/objects/items/devices/aicard.dm | 2 +- code/game/objects/items/devices/binoculars.dm | 2 +- .../objects/items/devices/chameleonproj.dm | 2 +- .../devices/communicator/communicator.dm | 2 +- code/game/objects/items/devices/debugger.dm | 2 +- code/game/objects/items/devices/flash.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 131 +- .../objects/items/devices/locker_painter.dm | 4 +- code/game/objects/items/devices/megaphone.dm | 2 +- code/game/objects/items/devices/multitool.dm | 2 +- code/game/objects/items/devices/paicard.dm | 2 +- code/game/objects/items/devices/powersink.dm | 2 +- .../items/devices/radio/electropack.dm | 2 +- .../items/devices/radio/encryptionkey.dm | 4 +- .../objects/items/devices/radio/headset.dm | 8 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 2 +- code/game/objects/items/devices/scanners.dm | 10 +- code/game/objects/items/devices/spy_bug.dm | 4 +- .../objects/items/devices/suit_cooling.dm | 2 +- code/game/objects/items/devices/t_scanner.dm | 2 +- .../objects/items/devices/taperecorder.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/devices/whistle.dm | 2 +- code/game/objects/items/glassjar.dm | 2 +- code/game/objects/items/latexballoon.dm | 2 +- code/game/objects/items/stacks/medical.dm | 2 +- code/game/objects/items/stacks/rods.dm | 2 +- code/game/objects/items/stacks/telecrystal.dm | 2 +- .../objects/items/stacks/tiles/tile_types.dm | 2 +- code/game/objects/items/toys.dm | 46 +- code/game/objects/items/trash.dm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 2 +- code/game/objects/items/weapons/RCD.dm | 4 +- code/game/objects/items/weapons/RSF.dm | 2 +- code/game/objects/items/weapons/autopsy.dm | 2 +- code/game/objects/items/weapons/candle.dm | 2 +- code/game/objects/items/weapons/cards_ids.dm | 10 +- .../objects/items/weapons/cigs_lighters.dm | 8 +- .../weapons/circuitboards/circuitboard.dm | 2 +- .../weapons/circuitboards/machinery/power.dm | 7 + code/game/objects/items/weapons/cosmetics.dm | 4 +- code/game/objects/items/weapons/dice.dm | 2 +- .../objects/items/weapons/dna_injector.dm | 4 +- code/game/objects/items/weapons/explosives.dm | 2 +- .../objects/items/weapons/extinguisher.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 2 +- .../objects/items/weapons/gift_wrappaper.dm | 4 +- .../items/weapons/grenades/chem_grenade.dm | 2 +- .../items/weapons/grenades/flashbang.dm | 2 +- .../objects/items/weapons/grenades/grenade.dm | 2 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- .../game/objects/items/weapons/hydroponics.dm | 2 +- .../objects/items/weapons/implants/implant.dm | 2 +- .../items/weapons/implants/implantcase.dm | 2 +- .../items/weapons/implants/implanter.dm | 4 +- .../items/weapons/implants/implantpad.dm | 2 +- .../items/weapons/improvised_components.dm | 2 +- code/game/objects/items/weapons/manuals.dm | 6 +- .../objects/items/weapons/material/kitchen.dm | 4 +- .../objects/items/weapons/material/knives.dm | 4 +- .../weapons/material/material_weapons.dm | 2 +- .../objects/items/weapons/material/misc.dm | 8 +- .../objects/items/weapons/material/shards.dm | 2 +- .../items/weapons/material/twohanded.dm | 6 +- .../items/weapons/material/twohanded.dm.orig | 234 -- .../objects/items/weapons/melee/energy.dm | 26 +- code/game/objects/items/weapons/melee/misc.dm | 2 +- code/game/objects/items/weapons/mop.dm | 4 +- code/game/objects/items/weapons/mop_deploy.dm | 2 +- code/game/objects/items/weapons/paint.dm | 2 +- code/game/objects/items/weapons/policetape.dm | 4 +- .../game/objects/items/weapons/power_cells.dm | 14 +- code/game/objects/items/weapons/scrolls.dm | 2 +- code/game/objects/items/weapons/shields.dm | 14 +- .../objects/items/weapons/storage/backpack.dm | 39 +- .../objects/items/weapons/storage/bags.dm | 28 +- .../objects/items/weapons/storage/belt.dm | 15 +- .../objects/items/weapons/storage/bible.dm | 8 +- .../objects/items/weapons/storage/boxes.dm | 78 +- .../items/weapons/storage/briefcase.dm | 16 +- .../objects/items/weapons/storage/fancy.dm | 10 +- .../objects/items/weapons/storage/firstaid.dm | 12 +- .../items/weapons/storage/laundry_basket.dm | 6 +- .../objects/items/weapons/storage/lockbox.dm | 6 +- .../objects/items/weapons/storage/misc.dm | 2 +- .../objects/items/weapons/storage/secure.dm | 12 +- .../objects/items/weapons/storage/storage.dm | 45 +- .../objects/items/weapons/storage/toolbox.dm | 12 +- .../objects/items/weapons/storage/wallets.dm | 13 +- code/game/objects/items/weapons/stunbaton.dm | 54 +- .../objects/items/weapons/surgery_tools.dm | 18 +- .../objects/items/weapons/swords_axes_etc.dm | 6 +- code/game/objects/items/weapons/syndie.dm | 2 +- .../objects/items/weapons/tanks/jetpack.dm | 2 +- .../objects/items/weapons/tanks/tank_types.dm | 4 +- .../game/objects/items/weapons/tanks/tanks.dm | 2 +- code/game/objects/items/weapons/tape.dm | 4 +- .../objects/items/weapons/teleportation.dm | 12 +- code/game/objects/items/weapons/tools.dm | 18 +- code/game/objects/items/weapons/towels.dm | 2 +- code/game/objects/items/weapons/traps.dm | 2 +- code/game/objects/items/weapons/trays.dm | 14 +- code/game/objects/items/weapons/weaponry.dm | 2 +- .../objects/items/weapons/weldbackpack.dm | 2 +- code/game/objects/structures.dm | 2 +- code/game/objects/structures/barsign.dm | 1 + code/game/objects/structures/bedsheet_bin.dm | 4 +- .../structures/crates_lockers/closets.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 5 +- .../crates_lockers/closets/wardrobe.dm | 4 +- .../structures/crates_lockers/crates.dm | 2 + code/game/objects/structures/door_assembly.dm | 2 +- code/game/objects/structures/flora.dm | 6 + code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/inflatable.dm | 6 +- code/game/objects/structures/janicart.dm | 2 +- code/game/objects/structures/lattice.dm | 11 +- code/game/objects/structures/mop_bucket.dm | 2 +- code/game/objects/structures/signs.dm | 4 +- .../structures/stool_bed_chair_nest/bed.dm | 2 +- .../structures/stool_bed_chair_nest/stools.dm | 2 +- .../game/objects/structures/tank_dispenser.dm | 2 +- code/game/objects/structures/target_stake.dm | 2 +- .../objects/structures/windoor_assembly.dm | 2 +- code/game/objects/structures/window.dm | 2 +- code/game/sound.dm | 8 +- code/game/supplyshuttle.dm | 12 +- code/game/turfs/space/cracked_asteroid.dm | 16 + code/game/turfs/space/space.dm | 2 +- code/global.dm | 2 + code/modules/admin/admin_verbs.dm | 9 +- code/modules/admin/newbanjob.dm | 2 +- code/modules/admin/verbs/debug.dm | 2 +- code/modules/assembly/assembly.dm | 2 +- code/modules/assembly/bomb.dm | 2 +- code/modules/assembly/holder.dm | 2 +- code/modules/assembly/shock_kit.dm | 2 +- .../loadout/loadout_accessories.dm | 40 +- .../preference_setup/loadout/loadout_eyes.dm | 2 +- .../preference_setup/loadout/loadout_head.dm | 8 + .../preference_setup/loadout/loadout_shoes.dm | 10 +- .../preference_setup/loadout/loadout_suit.dm | 56 +- .../loadout/loadout_uniform.dm | 6 +- code/modules/clothing/chameleon.dm | 6 +- code/modules/clothing/clothing.dm | 15 +- code/modules/clothing/ears/ears.dm | 2 +- code/modules/clothing/glasses/glasses.dm | 7 +- code/modules/clothing/gloves/arm_guards.dm | 2 +- code/modules/clothing/gloves/miscellaneous.dm | 4 +- code/modules/clothing/head/collectable.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/head/jobs.dm | 6 +- code/modules/clothing/head/misc.dm | 12 + code/modules/clothing/head/misc_special.dm | 4 +- code/modules/clothing/masks/boxing.dm | 6 +- code/modules/clothing/masks/breath.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 2 +- code/modules/clothing/masks/miscellaneous.dm | 20 +- code/modules/clothing/masks/monitor.dm | 1 - code/modules/clothing/shoes/colour.dm | 4 + code/modules/clothing/shoes/leg_guards.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 4 +- .../clothing/spacesuits/miscellaneous.dm | 6 +- .../clothing/spacesuits/rig/modules/ninja.dm | 2 +- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- .../modules/clothing/spacesuits/spacesuits.dm | 2 +- code/modules/clothing/spacesuits/syndi.dm | 6 +- code/modules/clothing/spacesuits/void/merc.dm | 2 +- .../clothing/spacesuits/void/station.dm | 10 + .../clothing/spacesuits/void/wizard.dm | 2 +- code/modules/clothing/suits/armor.dm | 13 +- code/modules/clothing/suits/bio.dm | 2 +- code/modules/clothing/suits/jobs.dm | 10 +- code/modules/clothing/suits/miscellaneous.dm | 172 +- code/modules/clothing/suits/storage.dm | 8 +- code/modules/clothing/suits/utility.dm | 8 +- .../clothing/under/accessories/accessory.dm | 2 +- .../clothing/under/accessories/armband.dm | 9 + .../clothing/under/accessories/clothing.dm | 5 +- .../clothing/under/accessories/lockets.dm | 2 +- .../clothing/under/accessories/storage.dm | 6 +- code/modules/clothing/under/jobs/civilian.dm | 4 +- code/modules/clothing/under/miscellaneous.dm | 14 +- code/modules/detectivework/forensics.dm | 2 +- .../detectivework/tools/evidencebag.dm | 2 +- code/modules/detectivework/tools/rag.dm | 2 +- .../detectivework/tools/sample_kits.dm | 4 +- code/modules/detectivework/tools/uvlight.dm | 2 +- code/modules/economy/cash.dm | 2 +- code/modules/economy/retail_scanner.dm | 2 +- code/modules/events/event_container.dm | 38 +- code/modules/events/ion_storm.dm | 10 +- code/modules/flufftext/Dreaming.dm | 2 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/gamemaster/actions/action.dm | 29 + .../gamemaster/actions/comms_blackout.dm | 9 + code/modules/gamemaster/actions/grid_check.dm | 22 + .../gamemaster/actions/waste_disposal.dm | 9 + code/modules/gamemaster/controller.dm | 80 + code/modules/gamemaster/defines.dm | 1 + code/modules/gamemaster/game_master.dm | 136 + code/modules/gamemaster/helpers.dm | 9 + code/modules/games/cah_black_cards.dm | 6 +- code/modules/games/cah_white_cards.dm | 4 +- code/modules/games/cards.dm | 6 +- code/modules/holodeck/HolodeckObjects.dm | 10 +- .../modules/hydroponics/beekeeping/beehive.dm | 4 +- code/modules/hydroponics/grown_inedible.dm | 4 +- code/modules/hydroponics/seed_machines.dm | 2 +- code/modules/hydroponics/seed_packets.dm | 2 +- .../hydroponics/trays/tray_reagents.dm | 2 +- .../integrated_electronics/_defines.dm | 342 +- .../integrated_electronics/arithmetic.dm | 170 +- .../integrated_electronics/assemblies.dm | 106 +- .../integrated_electronics/converters.dm | 144 +- .../integrated_electronics/coordinate.dm | 65 +- .../integrated_electronics/data_transfer.dm | 88 +- .../integrated_electronics/input_output.dm | 398 +-- code/modules/integrated_electronics/logic.dm | 200 +- .../integrated_electronics/manipulation.dm | 191 +- code/modules/integrated_electronics/memory.dm | 126 +- code/modules/integrated_electronics/time.dm | 114 +- code/modules/integrated_electronics/tools.dm | 103 +- .../integrated_electronics/~defines.dm | 6 + code/modules/library/lib_items.dm | 6 +- code/modules/materials/material_sheets.dm | 4 +- code/modules/metric/activity.dm | 82 + code/modules/metric/department.dm | 72 + code/modules/metric/metric.dm | 15 + code/modules/mining/coins.dm | 2 +- code/modules/mining/mine_items.dm | 8 +- code/modules/mining/mine_turfs.dm | 2 +- code/modules/mining/money_bag.dm | 2 +- code/modules/mining/ore.dm | 2 +- code/modules/mob/holder.dm | 2 +- code/modules/mob/language/generic.dm | 55 +- code/modules/mob/living/bot/cleanbot.dm | 2 +- code/modules/mob/living/bot/farmbot.dm | 2 +- code/modules/mob/living/bot/floorbot.dm | 4 +- code/modules/mob/living/bot/medbot.dm | 2 +- .../mob/living/carbon/alien/diona/diona.dm | 2 +- code/modules/mob/living/carbon/brain/MMI.dm | 2 +- .../mob/living/carbon/brain/brain_item.dm | 2 +- .../mob/living/carbon/brain/posibrain.dm | 2 +- code/modules/mob/living/carbon/brain/robot.dm | 2 +- .../mob/living/carbon/carbon_defense.dm | 3 +- .../mob/living/carbon/human/examine.dm | 1 - .../living/carbon/human/species/species.dm | 2 + .../mob/living/carbon/metroid/items.dm | 4 +- code/modules/mob/living/carbon/shock.dm | 2 +- code/modules/mob/living/silicon/pai/pai.dm | 2 +- .../mob/living/silicon/robot/analyzer.dm | 2 +- .../mob/living/silicon/robot/drone/drone.dm | 4 +- .../silicon/robot/drone/drone_manufacturer.dm | 1 + code/modules/mob/living/silicon/robot/life.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/silicon/robot/robot_items.dm | 4 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 9 +- .../simple_animal/constructs/soulstone.dm | 2 +- .../living/simple_animal/friendly/mouse.dm | 2 +- .../simple_animal/friendly/spiderbot.dm | 2 +- code/modules/mob/living/simple_animal/head.dm | 2 +- .../mob/living/simple_animal/parrot.dm | 14 +- .../mob/living/simple_animal/simple_animal.dm | 15 + code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 +- code/modules/mob/mob_grab.dm | 2 +- code/modules/mob/new_player/skill.dm | 2 +- .../mob/new_player/sprite_accessories.dm | 8 + code/modules/nano/modules/law_manager.dm | 8 +- code/modules/organs/organ_external.dm | 7 +- code/modules/organs/subtypes/diona.dm | 12 +- code/modules/organs/subtypes/standard.dm | 14 +- code/modules/paperwork/clipboard.dm | 26 +- code/modules/paperwork/folders.dm | 4 +- code/modules/paperwork/paper.dm | 6 +- code/modules/paperwork/paper_bundle.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/papershredder.dm | 2 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/photography.dm | 6 +- code/modules/paperwork/stamps.dm | 6 +- code/modules/power/antimatter/shielding.dm | 2 +- code/modules/power/apc.dm | 41 +- code/modules/power/cable.dm | 6 +- code/modules/power/generator.dm | 5 + code/modules/power/grid_checker.dm | 125 + code/modules/power/lighting.dm | 6 +- code/modules/power/power.dm | 23 + code/modules/power/smes.dm | 10 +- code/modules/power/smes_construction.dm | 2 +- code/modules/power/solar.dm | 2 +- code/modules/power/terminal.dm | 4 + code/modules/power/tracker.dm | 2 +- code/modules/projectiles/ammunition.dm | 4 +- code/modules/projectiles/ammunition/boxes.dm | 4 +- .../modules/projectiles/ammunition/bullets.dm | 8 + code/modules/projectiles/dnalocking.dm | 4 +- code/modules/projectiles/effects.dm | 2 +- code/modules/projectiles/gun.dm | 8 +- code/modules/projectiles/guns/energy.dm | 113 +- code/modules/projectiles/guns/energy/laser.dm | 35 +- .../projectiles/guns/energy/nuclear.dm | 59 +- code/modules/projectiles/guns/energy/pulse.dm | 21 +- .../projectiles/guns/energy/special.dm | 20 +- code/modules/projectiles/guns/energy/stun.dm | 11 +- .../projectiles/guns/energy/temperature.dm | 2 +- code/modules/projectiles/guns/launcher.dm | 2 +- .../projectiles/guns/launcher/crossbow.dm | 4 +- .../guns/launcher/grenade_launcher.dm | 4 +- .../projectiles/guns/launcher/pneumatic.dm | 6 +- .../projectiles/guns/launcher/rocket.dm | 2 +- .../projectiles/guns/launcher/syringe_gun.dm | 4 +- code/modules/projectiles/guns/projectile.dm | 2 +- .../projectiles/guns/projectile/automatic.dm | 22 +- .../projectiles/guns/projectile/boltaction.dm | 4 +- .../projectiles/guns/projectile/pistol.dm | 12 +- .../projectiles/guns/projectile/shotgun.dm | 8 +- .../projectiles/guns/projectile/sniper.dm | 4 +- .../modules/projectiles/projectile/bullets.dm | 13 + .../modules/projectiles/projectile/special.dm | 1 - code/modules/random_map/automata/caves.dm | 5 +- .../reagents/Chemistry-Reagents-Helpers.dm | 14 + code/modules/reagents/Chemistry-Reagents.dm | 3 + .../Chemistry-Reagents-Core.dm | 3 + .../Chemistry-Reagents-Dispenser.dm | 3 + .../Chemistry-Reagents-Food-Drinks.dm | 1 + .../Chemistry-Reagents-Medicine.dm | 12 + .../Chemistry-Reagents-Other.dm | 3 + .../Chemistry-Reagents-Toxins.dm | 1 + code/modules/reagents/dispenser/cartridge.dm | 2 +- code/modules/reagents/reagent_containers.dm | 2 +- .../drinkingglass/extras.dm | 2 +- .../reagents/reagent_containers/dropper.dm | 2 +- .../reagent_containers/food/drinks.dm | 6 +- .../reagent_containers/food/snacks.dm | 87 +- .../reagents/reagent_containers/glass.dm | 6 +- .../reagents/reagent_containers/pill.dm | 2 +- .../reagents/reagent_containers/spray.dm | 4 +- .../reagents/reagent_containers/syringes.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 4 +- code/modules/research/designs.dm | 88 +- code/modules/research/research.dm | 4 +- code/modules/spells/spellbook.dm | 2 +- code/modules/vehicles/cargo_train.dm | 2 +- code/modules/virus2/items_devices.dm | 4 +- .../modules/vore/fluffstuff/custom_guns_vr.dm | 3 +- code/modules/xenoarcheaology/sampling.dm | 6 +- code/modules/xenoarcheaology/tools/tools.dm | 14 +- .../xenoarcheaology/tools/tools_pickaxe.dm | 22 +- .../xenobio2/machinery/gene_manipulators.dm | 2 +- .../xenobio2/tools/slime_handling_tools.dm | 21 +- html/changelog.html | 84 + html/changelogs/.all_changelog.yml | 2828 ----------------- .../Anewbe - Explosive Implants.yml | 36 - html/changelogs/Anewbe - Lizard Sprites.yml | 36 - html/changelogs/Anewbe - Skirts.yml | 36 - html/changelogs/Anewbe -Ninjapoof.yml | 36 - html/changelogs/HarpyEagle-Bleeding.yml | 6 - html/changelogs/Yoshax - Bleeding.yml | 36 - html/changelogs/Yoshax-Shanking.yml | 36 - html/changelogs/__CHANGELOG_README.txt | 19 - html/changelogs/zuhayr-vent.yml | 5 - icons/mob/back.dmi | Bin 85974 -> 86344 bytes icons/mob/feet.dmi | Bin 32912 -> 37309 bytes icons/mob/hands.dmi | Bin 23208 -> 22594 bytes icons/mob/head.dmi | Bin 152857 -> 154288 bytes icons/mob/human_face.dmi | Bin 63599 -> 64709 bytes icons/mob/items/lefthand.dmi | Bin 46647 -> 46720 bytes icons/mob/items/lefthand_guns.dmi | Bin 38480 -> 43561 bytes icons/mob/items/lefthand_hats.dmi | Bin 26818 -> 27752 bytes icons/mob/items/lefthand_storage.dmi | Bin 22214 -> 22494 bytes icons/mob/items/lefthand_suits.dmi | Bin 53380 -> 55208 bytes icons/mob/items/righthand.dmi | Bin 47134 -> 47120 bytes icons/mob/items/righthand_guns.dmi | Bin 40143 -> 47712 bytes icons/mob/items/righthand_hats.dmi | Bin 26599 -> 27551 bytes icons/mob/items/righthand_storage.dmi | Bin 22217 -> 22506 bytes icons/mob/items/righthand_suits.dmi | Bin 52937 -> 54779 bytes icons/mob/species/seromi/head.dmi | Bin 48072 -> 49249 bytes icons/mob/species/seromi/suit.dmi | Bin 68244 -> 68399 bytes icons/mob/species/skrell/helmet.dmi | Bin 35383 -> 35543 bytes icons/mob/species/skrell/suit.dmi | Bin 26651 -> 29771 bytes icons/mob/species/tajaran/helmet.dmi | Bin 28795 -> 31008 bytes icons/mob/species/tajaran/suit.dmi | Bin 61921 -> 66806 bytes icons/mob/species/unathi/helmet.dmi | Bin 28365 -> 31021 bytes icons/mob/species/unathi/suit.dmi | Bin 56907 -> 61257 bytes icons/mob/suit.dmi | Bin 396887 -> 425533 bytes icons/mob/ties.dmi | Bin 30714 -> 33870 bytes icons/mob/uniform.dmi | Bin 374362 -> 373357 bytes icons/obj/ammo.dmi | Bin 24287 -> 24367 bytes icons/obj/clothing/gloves.dmi | Bin 21386 -> 21662 bytes icons/obj/clothing/hats.dmi | Bin 71194 -> 71852 bytes icons/obj/clothing/shoes.dmi | Bin 21234 -> 22577 bytes icons/obj/clothing/species/seromi/hats.dmi | Bin 5420 -> 6889 bytes icons/obj/clothing/species/seromi/suits.dmi | Bin 2027 -> 2501 bytes icons/obj/clothing/species/skrell/hats.dmi | Bin 9931 -> 12168 bytes icons/obj/clothing/species/skrell/suits.dmi | Bin 2840 -> 3457 bytes icons/obj/clothing/species/tajaran/hats.dmi | Bin 15171 -> 16988 bytes icons/obj/clothing/species/tajaran/suits.dmi | Bin 18602 -> 20375 bytes icons/obj/clothing/species/unathi/hats.dmi | Bin 15649 -> 17175 bytes icons/obj/clothing/species/unathi/suits.dmi | Bin 19240 -> 19854 bytes icons/obj/clothing/suits.dmi | Bin 138105 -> 145765 bytes icons/obj/clothing/ties.dmi | Bin 24853 -> 27313 bytes icons/obj/clothing/uniforms.dmi | Bin 84331 -> 88185 bytes icons/obj/electronic_assemblies.dmi | Bin 23986 -> 24948 bytes icons/obj/gun.dmi | Bin 58691 -> 68183 bytes icons/obj/janitor.dmi | Bin 11231 -> 11429 bytes icons/obj/plants.dmi | Bin 21410 -> 22046 bytes icons/obj/power.dmi | Bin 28684 -> 29421 bytes icons/obj/storage.dmi | Bin 72096 -> 72674 bytes icons/obj/wallet.dmi | Bin 2067 -> 2244 bytes icons/turf/flooring/asteroid.dmi | Bin 7227 -> 9269 bytes maps/polaris-1.dmm | 279 +- maps/polaris-2.dmm | 12 +- maps/polaris-3.dmm | 4 +- maps/polaris-5.dmm | 6 +- nano/templates/identification_computer.tmpl | 2 +- sound/effects/bonebreak1.ogg | Bin 0 -> 14134 bytes sound/effects/bonebreak2.ogg | Bin 0 -> 12143 bytes sound/effects/bonebreak3.ogg | Bin 0 -> 13271 bytes sound/effects/bonebreak4.ogg | Bin 0 -> 16591 bytes sound/music/clown.ogg | Bin 0 -> 512776 bytes sound/music/russianrapdisco.ogg | Bin 0 -> 1641724 bytes vorestation.dme | 21 +- 538 files changed, 4321 insertions(+), 5848 deletions(-) create mode 100644 code/__defines/inventory_sizes.dm create mode 100644 code/controllers/Processes/game_master.dm create mode 100644 code/datums/weakref.dm create mode 100644 code/datums/wires/grid_checker.dm rename code/datums/wires/{jukebox_vr.dm => jukebox.dm} (91%) delete mode 100644 code/game/objects/items/weapons/material/twohanded.dm.orig create mode 100644 code/game/turfs/space/cracked_asteroid.dm create mode 100644 code/modules/gamemaster/actions/action.dm create mode 100644 code/modules/gamemaster/actions/comms_blackout.dm create mode 100644 code/modules/gamemaster/actions/grid_check.dm create mode 100644 code/modules/gamemaster/actions/waste_disposal.dm create mode 100644 code/modules/gamemaster/controller.dm create mode 100644 code/modules/gamemaster/defines.dm create mode 100644 code/modules/gamemaster/game_master.dm create mode 100644 code/modules/gamemaster/helpers.dm create mode 100644 code/modules/integrated_electronics/~defines.dm create mode 100644 code/modules/metric/activity.dm create mode 100644 code/modules/metric/department.dm create mode 100644 code/modules/metric/metric.dm create mode 100644 code/modules/power/grid_checker.dm create mode 100644 code/modules/reagents/Chemistry-Reagents-Helpers.dm delete mode 100644 html/changelogs/.all_changelog.yml delete mode 100644 html/changelogs/Anewbe - Explosive Implants.yml delete mode 100644 html/changelogs/Anewbe - Lizard Sprites.yml delete mode 100644 html/changelogs/Anewbe - Skirts.yml delete mode 100644 html/changelogs/Anewbe -Ninjapoof.yml delete mode 100644 html/changelogs/HarpyEagle-Bleeding.yml delete mode 100644 html/changelogs/Yoshax - Bleeding.yml delete mode 100644 html/changelogs/Yoshax-Shanking.yml delete mode 100644 html/changelogs/__CHANGELOG_README.txt delete mode 100644 html/changelogs/zuhayr-vent.yml create mode 100644 sound/effects/bonebreak1.ogg create mode 100644 sound/effects/bonebreak2.ogg create mode 100644 sound/effects/bonebreak3.ogg create mode 100644 sound/effects/bonebreak4.ogg create mode 100644 sound/music/clown.ogg create mode 100644 sound/music/russianrapdisco.ogg diff --git a/code/__defines/inventory_sizes.dm b/code/__defines/inventory_sizes.dm new file mode 100644 index 0000000000..6fb72505d0 --- /dev/null +++ b/code/__defines/inventory_sizes.dm @@ -0,0 +1,25 @@ +// The below should be used to define an item's w_class variable. +// Example: w_class = ITENSIZE_LARGE +// This allows the addition of future w_classes without needing to change every file. +#define ITEMSIZE_TINY 1 +#define ITEMSIZE_SMALL 2 +#define ITEMSIZE_NORMAL 3 +#define ITEMSIZE_LARGE 4 +#define ITEMSIZE_HUGE 5 +#define ITEMSIZE_NO_CONTAINER 100 // Use this to forbid item from being placed in a container. + +// Tweak these to determine how much space an item takes in a container. +// Look in storage.dm for get_storage_cost(), which uses these. Containers also use these as a reference for size. +// ITEMSIZE_COST_NORMAL is equivalent to one slot using the old inventory system. As such, it is a nice reference to use for +// defining how much space there is in a container. +#define ITEMSIZE_COST_TINY 1 +#define ITEMSIZE_COST_SMALL 2 +#define ITEMSIZE_COST_NORMAL 4 +#define ITEMSIZE_COST_LARGE 8 +#define ITEMSIZE_COST_HUGE 16 +#define ITEMSIZE_COST_NO_CONTAINER 1000 + +// Container sizes. Note that different containers can hold a maximum ITEMSIZE. +#define INVENTORY_STANDARD_SPACE ITEMSIZE_COST_NORMAL * 7 // 28 +#define INVENTORY_DUFFLEBAG_SPACE ITEMSIZE_COST_NORMAL * 9 // 36 +#define INVENTORY_BOX_SPACE ITEMSIZE_COST_SMALL * 4 // 8 \ No newline at end of file diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 68954b0dc5..6a009677e1 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -167,3 +167,15 @@ #define ANTAG_HIDDEN "Hidden" #define ANTAG_SHARED "Shared" #define ANTAG_KNOWN "Known" + +// Job groups +#define ROLE_COMMAND "command" +#define ROLE_SECURITY "security" +#define ROLE_ENGINEERING "engineering" +#define ROLE_MEDICAL "medical" +#define ROLE_RESEARCH "research" +#define ROLE_CARGO "cargo" +#define ROLE_CIVILIAN "civilian" +#define ROLE_SYNTHETIC "synthetic" +#define ROLE_UNKNOWN "unknown" +#define ROLE_EVERYONE "everyone" diff --git a/code/_macros.dm b/code/_macros.dm index 5b94c872cb..1038b6a2e4 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -42,6 +42,10 @@ #define isxeno(A) istype(A, /mob/living/simple_animal/xeno) +#define isweakref(A) istype(A, /weakref) + #define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") #define to_chat(target, message) target << message + +#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index d416475a27..4c976f4458 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -67,7 +67,7 @@ var/const/tk_maxrange = 15 icon_state = "2" flags = NOBLUDGEON //item_state = null - w_class = 10.0 + w_class = ITEMSIZE_NO_CONTAINER layer = 20 var/last_throw = 0 diff --git a/code/controllers/Processes/game_master.dm b/code/controllers/Processes/game_master.dm new file mode 100644 index 0000000000..7f89f3ab13 --- /dev/null +++ b/code/controllers/Processes/game_master.dm @@ -0,0 +1,6 @@ +/datum/controller/process/game_master/setup() + name = "\improper GM controller" + schedule_interval = 600 // every 60 seconds + +/datum/controller/process/game_master/doWork() + game_master.process() \ No newline at end of file diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 1a736cd74f..d40fd4fa5a 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -361,7 +361,7 @@ clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) - if("Station Administrator") + if("Colony Director") clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) if("Head of Security") diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm index c33b2b120c..d6427f063f 100644 --- a/code/datums/supplypacks/contraband.dm +++ b/code/datums/supplypacks/contraband.dm @@ -24,8 +24,7 @@ name = "Special Ops supplies" contains = list( /obj/item/weapon/storage/box/emps, - /obj/item/weapon/grenade/smokebomb = 3, - /obj/item/weapon/pen/reagent/paralysis, + /obj/item/weapon/grenade/smokebomb = 4, /obj/item/weapon/grenade/chem_grenade/incendiary ) cost = 25 diff --git a/code/datums/supplypacks/supplypacks.dm b/code/datums/supplypacks/supplypacks.dm index 77004ec21f..3d2d4807fd 100644 --- a/code/datums/supplypacks/supplypacks.dm +++ b/code/datums/supplypacks/supplypacks.dm @@ -34,7 +34,7 @@ var/list/all_supply_groups = list("Atmospherics", var/access = null var/hidden = 0 var/contraband = 0 - var/group = "Operations" + var/group = "Miscellaneous" /datum/supply_packs/New() manifest += "
" if("rank") - var/list/L = list( "Head of Personnel", "Station Administrator", "AI" ) + var/list/L = list( "Head of Personnel", "Colony Director", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N if ((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
Rank:
" diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 2b4d898cfc..1a67778fdf 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -343,7 +343,7 @@ What a mess.*/ return active1.fields["age"] = t1 if("rank") - var/list/L = list( "Head of Personnel", "Station Administrator", "AI" ) + var/list/L = list( "Head of Personnel", "Colony Director", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N if ((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
Rank:
" diff --git a/code/game/machinery/computer3/buildandrepair.dm b/code/game/machinery/computer3/buildandrepair.dm index 47ceffb756..a064d8ce1c 100644 --- a/code/game/machinery/computer3/buildandrepair.dm +++ b/code/game/machinery/computer3/buildandrepair.dm @@ -2,7 +2,7 @@ /obj/item/part/computer/circuitboard density = 0 anchored = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL name = "Circuit board" icon = 'icons/obj/module.dmi' icon_state = "id_mod" diff --git a/code/game/machinery/computer3/component.dm b/code/game/machinery/computer3/component.dm index 0f7f64d011..47d5e29853 100644 --- a/code/game/machinery/computer3/component.dm +++ b/code/game/machinery/computer3/component.dm @@ -14,7 +14,7 @@ gender = PLURAL icon = 'icons/obj/stock_parts.dmi' icon_state = "hdd1" - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/emagged = 0 diff --git a/code/game/machinery/computer3/computers/card.dm b/code/game/machinery/computer3/computers/card.dm index 3a510ac836..ac3e7e4e5b 100644 --- a/code/game/machinery/computer3/computers/card.dm +++ b/code/game/machinery/computer3/computers/card.dm @@ -35,8 +35,8 @@ var jobs_all = "" jobs_all += "" - jobs_all += ""//Station Administrator in special because he is head of heads ~Intercross21 - jobs_all += "" + jobs_all += ""//Colony Director in special because he is head of heads ~Intercross21 + jobs_all += "" jobs_all += "" counter = 0 @@ -348,4 +348,4 @@ authenticate() if(access_cent_captain in reader.access) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/game/machinery/computer3/computers/security.dm b/code/game/machinery/computer3/computers/security.dm index a335cf1c73..a314bed273 100644 --- a/code/game/machinery/computer3/computers/security.dm +++ b/code/game/machinery/computer3/computers/security.dm @@ -513,7 +513,7 @@ What a mess.*/ temp += "
  • Released
  • " temp += "" if("rank") - var/list/L = list( "Head of Personnel", "Station Administrator", "AI" ) + var/list/L = list( "Head of Personnel", "Colony Director", "AI" ) //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N if ((istype(active1, /datum/data/record) && L.Find(rank))) temp = "
    Rank:
    " diff --git a/code/game/machinery/computer3/laptop.dm b/code/game/machinery/computer3/laptop.dm index e093f4d5f6..1b0e413165 100644 --- a/code/game/machinery/computer3/laptop.dm +++ b/code/game/machinery/computer3/laptop.dm @@ -24,7 +24,7 @@ icon_state = "laptop-closed" pixel_x = 2 pixel_y = -3 - w_class = 3 + w_class = ITEMSIZE_NORMAL var/obj/machinery/computer3/laptop/stored_computer = null diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 3ae0891b89..39ca2d5f40 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -4,7 +4,7 @@ name = "airlock electronics" icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" - w_class = 2.0 //It should be tiny! -Agouri + w_class = ITEMSIZE_SMALL //It should be tiny! -Agouri matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 4fc4b2fad7..45501a3de7 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -1,6 +1,7 @@ //Terribly sorry for the code doubling, but things go derpy otherwise. /obj/machinery/door/airlock/multi_tile width = 2 + appearance_flags = 0 /obj/machinery/door/airlock/multi_tile/New() ..() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 57e0e1b55a..cd2346a32c 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -1,5 +1,3 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - datum/track var/title var/sound @@ -23,6 +21,11 @@ datum/track/New(var/title_name, var/audio) var/playing = 0 + // Vars for hacking + var/datum/wires/jukebox/wires = null + var/hacked = 0 // Whether to show the hidden songs or not + var/freq = 0 + var/datum/track/current_track var/list/datum/track/tracks = list( new/datum/track("Beyond", 'sound/ambience/ambispace.ogg'), @@ -36,6 +39,14 @@ datum/track/New(var/title_name, var/audio) new/datum/track("Trai`Tor", 'sound/music/traitor.ogg'), ) + // Only visible if hacked + var/list/datum/track/secret_tracks = list( + new/datum/track("Clown", 'sound/music/clown.ogg'), + new/datum/track("Space Asshole", 'sound/music/space_asshole.ogg'), + new/datum/track("Thunderdome", 'sound/music/THUNDERDOME.ogg'), + new/datum/track("Russkiy rep Diskoteka", 'sound/music/russianrapdisco.ogg') + ) + /obj/machinery/media/jukebox/New() ..() component_parts = list() @@ -43,11 +54,41 @@ datum/track/New(var/title_name, var/audio) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) component_parts += new /obj/item/stack/cable_coil(src, 5) RefreshParts() + wires = new/datum/wires/jukebox(src) /obj/machinery/media/jukebox/Destroy() StopPlaying() + qdel(wires) + wires = null ..() +/obj/machinery/media/jukebox/proc/set_hacked(var/newhacked) + if (hacked == newhacked) return + hacked = newhacked + if (hacked) + tracks.Add(secret_tracks) + else + tracks.Remove(secret_tracks) + updateDialog() + +/obj/machinery/media/jukebox/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(istype(W, /obj/item/weapon/wrench)) + if(playing) + StopPlaying() + user.visible_message("[user] has [anchored ? "un" : ""]secured \the [src].", "You [anchored ? "un" : ""]secure \the [src].") + anchored = !anchored + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + power_change() + update_icon() + return + return ..() + /obj/machinery/media/jukebox/power_change() if(!powered(power_channel) || !anchored) stat |= NOPOWER @@ -72,6 +113,8 @@ datum/track/New(var/title_name, var/audio) overlays += "[state_base]-emagged" else overlays += "[state_base]-running" + if (panel_open) + overlays += "panel_open" /obj/machinery/media/jukebox/Topic(href, href_list) if(..() || !(Adjacent(usr) || istype(usr, /mob/living/silicon))) @@ -212,11 +255,17 @@ datum/track/New(var/title_name, var/audio) return var/area/main_area = get_area(src) - main_area.forced_ambience = list(current_track.sound) + if(freq) + var/sound/new_song = sound(current_track.sound, channel = 1, repeat = 1, volume = 25) + new_song.frequency = freq + main_area.forced_ambience = list(new_song) + else + main_area.forced_ambience = list(current_track.sound) + for(var/mob/living/M in mobs_in_area(main_area)) if(M.mind) main_area.play_ambience(M) playing = 1 update_use_power(2) - update_icon() + update_icon() \ No newline at end of file diff --git a/code/game/machinery/jukebox_vr.dm b/code/game/machinery/jukebox_vr.dm index 88a1344027..0a6fb98891 100644 --- a/code/game/machinery/jukebox_vr.dm +++ b/code/game/machinery/jukebox_vr.dm @@ -1,23 +1,13 @@ // The improved, hackable jukebox for vorestation! /obj/machinery/media/jukebox/vore - name = "space jukebox" icon = 'icons/obj/jukebox_vr.dmi' - - // Vars for hacking - var/datum/wires/jukebox/wires = null - var/hacked = 0 // Whether to show the hidden songs or not - var/freq = 0 - - // Only visible if hacked - var/list/datum/track/secret_tracks = list( + secret_tracks = list( new/datum/track("Bandit Radio", 'sound/music/jukebox/bandit_radio.ogg'), new/datum/track("Ghost Fight (Toby Fox)", 'sound/music/jukebox/TobyFoxGhostFight.mid'), new/datum/track("Space Asshole", 'sound/music/space_asshole.ogg'), new/datum/track("THUNDERDOME", 'sound/music/THUNDERDOME.ogg'), ) - - // Normally visible tracks tracks = list( new/datum/track("A Song About Hares", 'sound/music/jukebox/SongAboutHares.ogg'), new/datum/track("Below The Asteroids", 'sound/music/jukebox/BelowTheAsteroids.ogg'), @@ -41,60 +31,3 @@ new/datum/track("Trai`Tor", 'sound/music/traitor.ogg'), new/datum/track("Welcome To Jurassic Park", 'sound/music/jukebox/WelcomeToJurassicPark.mid') ) - -/obj/machinery/media/jukebox/vore/New() - ..() - wires = new/datum/wires/jukebox(src) - -/obj/machinery/media/jukebox/vore/Destroy() - ..() - qdel(wires) - wires = null - -/obj/machinery/media/jukebox/vore/update_icon() - ..() - if (panel_open) - overlays += "panel_open" - - -/obj/machinery/media/jukebox/vore/proc/set_hacked(var/newhacked) - if (hacked == newhacked) return - hacked = newhacked - if (hacked) - tracks.Add(secret_tracks) - else - tracks.Remove(secret_tracks) - updateDialog() - - -/obj/machinery/media/jukebox/vore/attackby(obj/item/W as obj, mob/user as mob) - src.add_fingerprint(user) - if (default_deconstruction_screwdriver(user, W)) - return - if(istype(W, /obj/item/weapon/wirecutters)) - return wires.Interact(user) - if(istype(W, /obj/item/device/multitool)) - return wires.Interact(user) - return ..() - - -/obj/machinery/media/jukebox/vore/StartPlaying() - StopPlaying() - if(!current_track) - return - - var/area/main_area = get_area(src) - if(freq) - var/sound/new_song = sound(current_track.sound, channel = 1, repeat = 1, volume = 25) - new_song.frequency = freq - main_area.forced_ambience = list(new_song) - else - main_area.forced_ambience = list(current_track.sound) - - for(var/mob/living/M in mobs_in_area(main_area)) - if(M.mind) - main_area.play_ambience(M) - - playing = 1 - update_use_power(2) - update_icon() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 9b7760a12e..af8bd8eb41 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -96,7 +96,7 @@ Class Procs: /obj/machinery name = "machinery" icon = 'icons/obj/stationobjs.dmi' - w_class = 10 + w_class = ITEMSIZE_NO_CONTAINER var/stat = 0 var/emagged = 0 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 1de7cc367b..4758a77489 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -794,7 +794,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co desc = "An issue of The Griffon, the newspaper circulating aboard most stations." icon = 'icons/obj/bureaucracy.dmi' icon_state = "newspaper" - w_class = 2 //Let's make it fit in trashbags! + w_class = ITEMSIZE_SMALL //Let's make it fit in trashbags! attack_verb = list("bapped") var/screen = 0 var/pages = 0 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 9c5fc61332..908ce1395f 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -62,7 +62,7 @@ Buildable meters icon = 'icons/obj/pipe-item.dmi' icon_state = "simple" item_state = "buildpipe" - w_class = 3 + w_class = ITEMSIZE_NORMAL level = 2 /obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) @@ -1160,7 +1160,7 @@ Buildable meters icon = 'icons/obj/pipe-item.dmi' icon_state = "meter" item_state = "buildpipe" - w_class = 4 + w_class = ITEMSIZE_LARGE /obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) ..() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 5d3270231f..84359961df 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -42,6 +42,14 @@ obj/machinery/recharger if(istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow)) user << "Your gun's recharge port was removed to make room for a miniaturized reactor." return + if(istype(G, /obj/item/weapon/gun/energy)) + var/obj/item/weapon/gun/energy/E = G + if(!E.power_supply) + user << "Your gun has no power cell." + return + if(E.self_recharge) + user << "Your gun has no recharge port." + return if(istype(G, /obj/item/weapon/gun/energy/staff)) return if(istype(G, /obj/item/device/laptop)) @@ -168,4 +176,4 @@ obj/machinery/recharger icon_state_charging = "wrecharger1" icon_state_idle = "wrecharger0" portable = 0 - circuit = /obj/item/weapon/circuitboard/recharger/wrecharger \ No newline at end of file + circuit = /obj/item/weapon/circuitboard/recharger/wrecharger diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 3234d03a1f..f44747d4bb 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -586,7 +586,7 @@ var/electrified = 0 //Departments that the cycler can paint suits to look like. - var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard") + var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Crowd Control") //Species that the suits can be configured to fit. var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari") @@ -628,7 +628,7 @@ name = "Security suit cycler" model_text = "Security" req_access = list(access_security) - departments = list("Security") + departments = list("Security","Crowd Control") /obj/machinery/suit_cycler/medical name = "Medical suit cycler" @@ -751,7 +751,7 @@ //Clear the access reqs, disable the safeties, and open up all paintjobs. user << "You run the sequencer across the interface, corrupting the operating protocols." - departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","^%###^%$") + departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Crowd Control","^%###^%$") species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid") //VORESTATION EDIT emagged = 1 @@ -1009,6 +1009,15 @@ suit.name = "security voidsuit" suit.icon_state = "rig-sec" suit.item_state = "sec_voidsuit" + if("Crowd Control") + if(helmet) + helmet.name = "crowd control voidsuit helmet" + helmet.icon_state = "rig0-sec_riot" + helmet.item_state = "rig0-sec_riot" + if(suit) + suit.name = "crowd control voidsuit" + suit.icon_state = "rig-sec_riot" + suit.item_state = "sec_voidsuit_riot" if("Atmos") if(helmet) helmet.name = "atmospherics voidsuit helmet" diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 876e6c3f6b..00720d13dc 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -8,7 +8,7 @@ name = "mecha part" icon = 'icons/mecha/mech_construct.dmi' icon_state = "blank" - w_class = 5 + w_class = ITEMSIZE_HUGE flags = CONDUCT origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2) @@ -39,32 +39,32 @@ /obj/item/mecha_parts/part/ripley_torso name="Ripley Torso" desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." - icon_state = "ripley_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) + icon_state = "ripley_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/ripley_left_arm name="Ripley Left Arm" desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "ripley_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/ripley_right_arm name="Ripley Right Arm" desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "ripley_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "ripley_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/ripley_left_leg name="Ripley Left Leg" desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "ripley_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/ripley_right_leg name="Ripley Right Leg" desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "ripley_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "ripley_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) ///////// Gygax @@ -78,41 +78,41 @@ /obj/item/mecha_parts/part/gygax_torso name="Gygax Torso" desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." - icon_state = "gygax_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3) + icon_state = "gygax_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_head name="Gygax Head" desc="A Gygax head. Houses advanced surveilance and targeting sensors." - icon_state = "gygax_head" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + icon_state = "gygax_head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_left_arm name="Gygax Left Arm" desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + icon_state = "gygax_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_right_arm name="Gygax Right Arm" desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." - icon_state = "gygax_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + icon_state = "gygax_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_left_leg name="Gygax Left Leg" - icon_state = "gygax_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + icon_state = "gygax_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_right_leg name="Gygax Right Leg" - icon_state = "gygax_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + icon_state = "gygax_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/gygax_armour name="Gygax Armour Plates" - icon_state = "gygax_armour" - origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5) + icon_state = "gygax_armour" + origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINEERING = 5) //////////// Durand @@ -126,38 +126,38 @@ /obj/item/mecha_parts/part/durand_torso name="Durand Torso" - icon_state = "durand_harness" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) + icon_state = "durand_harness" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_head name="Durand Head" - icon_state = "durand_head" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + icon_state = "durand_head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_left_arm name="Durand Left Arm" - icon_state = "durand_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + icon_state = "durand_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_right_arm name="Durand Right Arm" - icon_state = "durand_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + icon_state = "durand_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_left_leg name="Durand Left Leg" - icon_state = "durand_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + icon_state = "durand_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_right_leg name="Durand Right Leg" - icon_state = "durand_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + icon_state = "durand_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) /obj/item/mecha_parts/part/durand_armour name="Durand Armour Plates" - icon_state = "durand_armour" - origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5) + icon_state = "durand_armour" + origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5) @@ -204,44 +204,44 @@ /obj/item/mecha_parts/part/phazon_torso name="Phazon Torso" icon_state = "phazon_harness" - //construction_time = 300 + //construction_time = 300 //construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"glass"=10000,"phoron"=20000) - origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6) + origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6) /obj/item/mecha_parts/part/phazon_head name="Phazon Head" icon_state = "phazon_head" - //construction_time = 200 + //construction_time = 200 //construction_cost = list(DEFAULT_WALL_MATERIAL=15000,"glass"=5000,"phoron"=10000) - origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6) + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6) /obj/item/mecha_parts/part/phazon_left_arm name="Phazon Left Arm" icon_state = "phazon_l_arm" - //construction_time = 200 + //construction_time = 200 //construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) /obj/item/mecha_parts/part/phazon_right_arm name="Phazon Right Arm" icon_state = "phazon_r_arm" - //construction_time = 200 + //construction_time = 200 //construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) /obj/item/mecha_parts/part/phazon_left_leg name="Phazon Left Leg" icon_state = "phazon_l_leg" - //construction_time = 200 + //construction_time = 200 //construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) /obj/item/mecha_parts/part/phazon_right_leg name="Phazon Right Leg" icon_state = "phazon_r_leg" - //construction_time = 200 + //construction_time = 200 //construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000) - origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3) ///////// Odysseus @@ -256,37 +256,37 @@ /obj/item/mecha_parts/part/odysseus_head name="Odysseus Head" icon_state = "odysseus_head" - origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2) + origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2) /obj/item/mecha_parts/part/odysseus_torso name="Odysseus Torso" desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." - icon_state = "odysseus_torso" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) + icon_state = "odysseus_torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/odysseus_left_arm name="Odysseus Left Arm" desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_l_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "odysseus_l_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/odysseus_right_arm name="Odysseus Right Arm" desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." - icon_state = "odysseus_r_arm" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "odysseus_r_arm" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/odysseus_left_leg name="Odysseus Left Leg" desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_l_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "odysseus_l_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /obj/item/mecha_parts/part/odysseus_right_leg name="Odysseus Right Leg" desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." - icon_state = "odysseus_r_leg" - origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + icon_state = "odysseus_r_leg" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) /*/obj/item/mecha_parts/part/odysseus_armour name="Odysseus Carapace" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4d78f5aa9d..467e64af79 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,7 +1,7 @@ /obj/item name = "item" icon = 'icons/obj/items.dmi' - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/abstract = 0 @@ -143,18 +143,19 @@ src.loc = T +// See inventory_sizes.dm for the defines. /obj/item/examine(mob/user, var/distance = -1) var/size switch(src.w_class) - if(1.0) + if(ITEMSIZE_TINY) size = "tiny" - if(2.0) + if(ITEMSIZE_SMALL) size = "small" - if(3.0) + if(ITEMSIZE_NORMAL) size = "normal-sized" - if(4.0) + if(ITEMSIZE_LARGE) size = "bulky" - if(5.0) + if(ITEMSIZE_HUGE) size = "huge" return ..(user, distance, "", "It is a [size] item.") @@ -320,7 +321,7 @@ var/list/global/slot_flags_enumeration = list( switch(slot) if(slot_l_ear, slot_r_ear) var/slot_other_ear = (slot == slot_l_ear)? slot_r_ear : slot_l_ear - if( (w_class > 1) && !(slot_flags & SLOT_EARS) ) + if( (w_class > ITEMSIZE_TINY) && !(slot_flags & SLOT_EARS) ) return 0 if( (slot_flags & SLOT_TWOEARS) && H.get_equipped_item(slot_other_ear) ) return 0 @@ -336,7 +337,7 @@ var/list/global/slot_flags_enumeration = list( return 0 if(slot_flags & SLOT_DENYPOCKET) return 0 - if( w_class > 2 && !(slot_flags & SLOT_POCKET) ) + if( w_class > ITEMSIZE_SMALL && !(slot_flags & SLOT_POCKET) ) return 0 if(slot_s_store) if(!H.wear_suit && (slot_wear_suit in mob_equip)) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index b154cd0468..6c86b7ebf4 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -5,7 +5,7 @@ desc = "A folded bag designed for the storage and transportation of cadavers." icon = 'icons/obj/bodybag.dmi' icon_state = "bodybag_folded" - w_class = 2.0 + w_class = ITEMSIZE_SMALL attack_self(mob/user) var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index a8d1abdd55..ee3d2b9ac3 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -9,7 +9,7 @@ var/global/list/obj/item/device/pda/PDAs = list() icon = 'icons/obj/pda.dmi' icon_state = "pda" item_state = "electronic" - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_ID | SLOT_BELT sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/id.dmi') diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 94230418e8..2c4368736e 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -49,7 +49,7 @@ var/list/civilian_cartridges = list( icon = 'icons/obj/pda.dmi' icon_state = "cart" item_state = "electronic" - w_class = 1 + w_class = ITEMSIZE_TINY var/obj/item/radio/integrated/radio = null var/access_security = 0 diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index e06e28f3c7..b6d8a81709 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/pda.dmi' icon_state = "aicard" // aicard-full item_state = "electronic" - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT show_messages = 0 diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm index b6e0ca1aca..00ef6501d4 100644 --- a/code/game/objects/items/devices/binoculars.dm +++ b/code/game/objects/items/devices/binoculars.dm @@ -6,7 +6,7 @@ flags = CONDUCT force = 5.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 5.0 throw_range = 15 throw_speed = 3 diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 1085dd3477..4b870481fa 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -7,7 +7,7 @@ throwforce = 5.0 throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4) var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 4d649450fb..60bb06b5d5 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -10,7 +10,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() communications across different stations, planets, or even star systems." icon = 'icons/obj/device.dmi' icon_state = "communicator" - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_ID | SLOT_BELT show_messages = 1 diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 9072e4cc7e..c8d326b44e 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -11,7 +11,7 @@ icon_state = "hacktool-g" flags = CONDUCT force = 5.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 5.0 throw_range = 15 throw_speed = 3 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2901e4c2c9..8562ac7f28 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -4,7 +4,7 @@ icon_state = "flash" item_state = "flashtool" throwforce = 5 - w_class = 2 + w_class = ITEMSIZE_SMALL throw_speed = 4 throw_range = 10 flags = CONDUCT diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index dc042b2a6b..3b6964ec8e 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -3,28 +3,100 @@ desc = "A hand-held emergency light." icon = 'icons/obj/lighting.dmi' icon_state = "flashlight" - w_class = 2 + w_class = ITEMSIZE_SMALL flags = CONDUCT slot_flags = SLOT_BELT - matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20) - action_button_name = "Toggle Flashlight" var/on = 0 var/brightness_on = 4 //luminosity when on + var/obj/item/weapon/cell/cell + var/cell_type = /obj/item/weapon/cell/high + var/list/brightness_levels + var/brightness_level = "medium" + var/power_usage + var/power_use = 1 /obj/item/device/flashlight/initialize() ..() update_icon() +/obj/item/device/flashlight/New() + if(power_use) + processing_objects |= src + + if(cell_type) + cell = new cell_type(src) + brightness_levels = list("low" = 5, "medium" = 10, "high" = 20) + power_usage = brightness_levels[brightness_level] + + else + verbs -= /obj/item/device/flashlight/verb/toggle + ..() + +/obj/item/device/flashlight/Destroy() + if(power_use) + processing_objects -= src + ..() + +/obj/item/device/flashlight/verb/toggle() + set name = "Toggle Flashlight Brightness" + set category = "Object" + set src in usr + set_brightness(usr) + +/obj/item/device/flashlight/proc/set_brightness(mob/user as mob) + var/choice = input("Choose a brightness level.") as null|anything in brightness_levels + if(choice) + brightness_level = choice + power_usage = brightness_levels[choice] + user << "You set the brightness level on \the [src] to [brightness_level]." + update_icon() + +/obj/item/device/flashlight/process() + if(on) + if(cell && cell.charge) + if(brightness_level && power_usage) + if(power_usage < cell.charge) + cell.charge -= power_usage + else + visible_message("\The [src] flickers before going dull.") + set_light(0) + /obj/item/device/flashlight/update_icon() if(on) icon_state = "[initial(icon_state)]-on" - set_light(brightness_on) + + if(brightness_level == "low") + set_light(brightness_on/2) + else if(brightness_level == "high") + set_light(brightness_on*4) + else + set_light(brightness_on) + else icon_state = "[initial(icon_state)]" set_light(0) +/obj/item/device/flashlight/examine(mob/user) + ..() + if(power_use && brightness_level) + var/tempdesc + tempdesc += "\The [src] is set to [brightness_level]. " + if(cell) + tempdesc += "\The [src] has a \the [cell] attached. " + + if(cell.charge <= cell.maxcharge*0.25) + tempdesc += "It appears to have a low amount of power remaining." + else if(cell.charge > cell.maxcharge*0.25 && cell.charge <= cell.maxcharge*0.5) + tempdesc += "It appears to have an average amount of power remaining." + else if(cell.charge > cell.maxcharge*0.5 && cell.charge <= cell.maxcharge*0.75) + tempdesc += "It appears to have an above average amount of power remaining." + else if(cell.charge > cell.maxcharge*0.75 && cell.charge <= cell.maxcharge) + tempdesc += "It appears to have a high amount of power remaining." + + user << "[tempdesc]" + /obj/item/device/flashlight/attack_self(mob/user) if(!isturf(user.loc)) user << "You cannot turn the light on while in this [user.loc]." //To prevent some lighting anomalities. @@ -84,6 +156,34 @@ else return ..() +/obj/item/device/flashlight/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) + if(cell) + cell.update_icon() + user.put_in_hands(cell) + cell = null + user << "You remove the cell from the [src]." + on = !on + update_icon() + return + ..() + else + return ..() + +/obj/item/device/flashlight/attackby(obj/item/weapon/W, mob/user as mob) + if(istype(W, /obj/item/weapon/cell)) + if(!cell) + user.drop_item() + W.loc = src + cell = W + user << "You install a cell in \the [src]." + update_icon() + else + user << "\The [src] already has a cell." + + else + ..() + /obj/item/device/flashlight/pen name = "penlight" desc = "A pen-sized light, used by medical staff." @@ -92,7 +192,8 @@ flags = CONDUCT slot_flags = SLOT_EARS brightness_on = 2 - w_class = 1 + w_class = ITEMSIZE_TINY + power_use = 0 /obj/item/device/flashlight/maglight name = "maglight" @@ -100,9 +201,8 @@ icon_state = "maglight" force = 10 flags = CONDUCT - brightness_on = 4 slot_flags = SLOT_BELT - w_class = 2 + w_class = ITEMSIZE_SMALL attack_verb = list ("smacked", "thwacked", "thunked") matter = list(DEFAULT_WALL_MATERIAL = 200,"glass" = 50) hitsound = "swing_hit" @@ -114,8 +214,8 @@ item_state = null flags = CONDUCT brightness_on = 2 - w_class = 1 - + w_class = ITEMSIZE_TINY + power_use = 0 // the desk lamps are a bit special /obj/item/device/flashlight/lamp @@ -123,9 +223,9 @@ desc = "A desk lamp with an adjustable mount." icon_state = "lamp" brightness_on = 5 - w_class = 4 + w_class = ITEMSIZE_LARGE flags = CONDUCT - + power_use = 0 on = 1 @@ -149,7 +249,7 @@ /obj/item/device/flashlight/flare name = "flare" desc = "A red standard-issue flare. There are instructions on the side reading 'pull cord, make light'." - w_class = 2.0 + w_class = ITEMSIZE_SMALL brightness_on = 8 // Pretty bright. light_power = 3 light_color = "#e58775" @@ -159,6 +259,7 @@ var/fuel = 0 var/on_damage = 7 var/produce_heat = 1500 + power_use = 0 /obj/item/device/flashlight/flare/New() fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds. @@ -211,13 +312,14 @@ /obj/item/device/flashlight/glowstick name = "green glowstick" desc = "A green military-grade glowstick." - w_class = 2.0 + w_class = ITEMSIZE_SMALL brightness_on = 4 light_power = 2 light_color = "#49F37C" icon_state = "glowstick" item_state = "glowstick" var/fuel = 0 + power_use = 0 /obj/item/device/flashlight/glowstick/New() fuel = rand(1600, 2000) @@ -283,9 +385,10 @@ icon = 'icons/obj/lighting.dmi' icon_state = "floor1" //not a slime extract sprite but... something close enough! item_state = "slime" - w_class = 1 + w_class = ITEMSIZE_TINY brightness_on = 6 on = 1 //Bio-luminesence has one setting, on. + power_use = 0 /obj/item/device/flashlight/slime/New() ..() diff --git a/code/game/objects/items/devices/locker_painter.dm b/code/game/objects/items/devices/locker_painter.dm index d7fb37050f..9459927ffe 100644 --- a/code/game/objects/items/devices/locker_painter.dm +++ b/code/game/objects/items/devices/locker_painter.dm @@ -55,7 +55,7 @@ "warden" = list("open" = "wardensecureopen", "closed" = "wardensecure", "locked" = "wardensecure1", "broken" = "wardensecurebroken", "off" = "wardensecureoff"), "HoS" = list("open" = "hossecureopen", "closed" = "hossecure", "locked" = "hossecure1", "broken" = "hossecurebroken", "off" = "hossecureoff"), "HoP" = list("open" = "hopsecureopen", "closed" = "hopsecure", "locked" = "hopsecure1", "broken" = "hopsecurebroken", "off" = "hopsecureoff"), - "Captain" = list("open" = "capsecureopen", "closed" = "capsecure", "locked" = "capsecure1", "broken" = "capsecurebroken", "off" = "capsecureoff") + "Administrator" = list("open" = "capsecureopen", "closed" = "capsecure", "locked" = "capsecure1", "broken" = "capsecurebroken", "off" = "capsecureoff") ) /obj/item/device/closet_painter/afterattack(atom/A, var/mob/user, proximity) @@ -136,4 +136,4 @@ var/new_colour_secure = input("Select a colour.") as null|anything in colours_secure if(new_colour_secure && !isnull(colours_secure[new_colour_secure])) colour_secure = new_colour_secure - usr << "You set \the [src] secure closet colour to '[colour_secure]'." \ No newline at end of file + usr << "You set \the [src] secure closet colour to '[colour_secure]'." diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 0357a8b80b..0ce2f405ff 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -3,7 +3,7 @@ desc = "A device used to project your voice. Loudly." icon_state = "megaphone" item_state = "radio" - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT var/spamcheck = 0 diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 4e6154189a..85c680ca98 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -10,7 +10,7 @@ icon_state = "multitool" flags = CONDUCT force = 5.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 5.0 throw_range = 15 throw_speed = 3 diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 89042464b3..e0e05ff467 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/pda.dmi' icon_state = "pai" item_state = "electronic" - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT origin_tech = list(TECH_DATA = 2) show_messages = 0 diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 3478abce1d..497ad68f09 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -5,7 +5,7 @@ desc = "A nulling power sink which drains energy from electrical systems." icon_state = "powersink0" item_state = "electronic" - w_class = 4.0 + w_class = ITEMSIZE_LARGE flags = CONDUCT throwforce = 5 throw_speed = 1 diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index f945fd89e6..ddcb23a5aa 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -10,7 +10,7 @@ frequency = 1449 flags = CONDUCT slot_flags = SLOT_BACK - w_class = 5.0 + w_class = ITEMSIZE_HUGE matter = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 2500) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 961286da09..f08585da31 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -4,7 +4,7 @@ desc = "An encryption key for a radio headset. Contains cypherkeys." icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/translate_binary = 0 var/translate_hive = 0 @@ -60,7 +60,7 @@ channels = list("Command" = 1) /obj/item/device/encryptionkey/heads/captain - name = "station administrator's encryption key" + name = "colony director's encryption key" icon_state = "cap_cypherkey" channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 9147b4f840..fce4ec3175 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -158,14 +158,14 @@ /obj/item/device/radio/headset/heads/captain - name = "station administrator's headset" + name = "colony director's headset" desc = "The headset of the boss." icon_state = "com_headset" item_state = "headset" ks2type = /obj/item/device/encryptionkey/heads/captain /obj/item/device/radio/headset/heads/captain/alt - name = "station administrator's bowman headset" + name = "colony director's bowman headset" desc = "The headset of the boss." icon_state = "com_headset_alt" item_state = "headset" @@ -244,14 +244,14 @@ /obj/item/device/radio/headset/heads/hop name = "head of personnel's headset" - desc = "The headset of the guy who will one day be Station Administrator." + desc = "The headset of the guy who will one day be Colony Director." icon_state = "com_headset" item_state = "headset" ks2type = /obj/item/device/encryptionkey/heads/hop /obj/item/device/radio/headset/heads/hop/alt name = "head of personnel's bowman headset" - desc = "The headset of the guy who will one day be Station Administrator." + desc = "The headset of the guy who will one day be Colony Director." icon_state = "com_headset_alt" item_state = "headset" ks2type = /obj/item/device/encryptionkey/heads/hop diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 4ea8837d80..72d4c50685 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -3,7 +3,7 @@ desc = "Talk through this." icon_state = "intercom" anchored = 1 - w_class = 4.0 + w_class = ITEMSIZE_LARGE canhear_range = 2 flags = CONDUCT | NOBLOODY var/circuit = /obj/item/weapon/circuitboard/intercom diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 93353ca1ed..4c841e2651 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -43,7 +43,7 @@ var/global/list/default_medbay_channels = list( slot_flags = SLOT_BELT throw_speed = 2 throw_range = 9 - w_class = 2 + w_class = ITEMSIZE_SMALL show_messages = 1 matter = list("glass" = 25,DEFAULT_WALL_MATERIAL = 75) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5388dc4420..1f88d91f06 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -17,7 +17,7 @@ REAGENT SCANNER flags = CONDUCT slot_flags = SLOT_BELT throwforce = 3 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 5 throw_range = 10 matter = list(DEFAULT_WALL_MATERIAL = 200) @@ -208,7 +208,7 @@ REAGENT SCANNER desc = "A hand-held environmental scanner which reports current gas levels." icon_state = "atmos" item_state = "analyzer" - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT slot_flags = SLOT_BELT throwforce = 5 @@ -242,7 +242,7 @@ REAGENT SCANNER desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." icon_state = "spectrometer" item_state = "analyzer" - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT | OPENCONTAINER slot_flags = SLOT_BELT throwforce = 5 @@ -304,7 +304,7 @@ REAGENT SCANNER desc = "A hand-held reagent scanner which identifies chemical agents." icon_state = "spectrometer" item_state = "analyzer" - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT slot_flags = SLOT_BELT throwforce = 5 @@ -353,7 +353,7 @@ REAGENT SCANNER icon_state = "adv_spectrometer" item_state = "analyzer" origin_tech = list(TECH_BIO = 1) - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT throwforce = 0 throw_speed = 3 diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 063e7a85ce..d05289e2cb 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -8,7 +8,7 @@ flags = CONDUCT force = 5.0 - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS throwforce = 5.0 throw_range = 15 @@ -51,7 +51,7 @@ icon_state = "pda" item_state = "electronic" - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 4447ca7af2..fb34bb0996 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -1,7 +1,7 @@ /obj/item/device/suit_cooling_unit name = "portable suit cooling unit" desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling." - w_class = 4 + w_class = ITEMSIZE_LARGE icon = 'icons/obj/device.dmi' icon_state = "suitcooler0" slot_flags = SLOT_BACK diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index 7dc13cb9e8..dde6814494 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -5,7 +5,7 @@ desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." icon_state = "t-ray0" slot_flags = SLOT_BELT - w_class = 2 + w_class = ITEMSIZE_SMALL item_state = "electronic" matter = list(DEFAULT_WALL_MATERIAL = 150) origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 2740831046..689e92fb7c 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -3,7 +3,7 @@ desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback." icon_state = "taperecorderidle" item_state = "analyzer" - w_class = 2.0 + w_class = ITEMSIZE_SMALL matter = list(DEFAULT_WALL_MATERIAL = 60,"glass" = 30) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index fbed4e7ebb..126a4871c9 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -19,7 +19,7 @@ effective or pretty fucking useless. desc = "A strange device with twin antennas." icon_state = "batterer" throwforce = 5 - w_class = 1.0 + w_class = ITEMSIZE_TINY throw_speed = 4 throw_range = 10 flags = CONDUCT diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 4c26a482a1..4a67bffe56 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -3,7 +3,7 @@ desc = "Used by obese officers to save their breath for running." icon_state = "voice0" item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang) - w_class = 1.0 + w_class = ITEMSIZE_TINY flags = CONDUCT slot_flags = SLOT_EARS diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index 54062ff853..c04b9b17dd 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -3,7 +3,7 @@ desc = "A small empty jar." icon = 'icons/obj/items.dmi' icon_state = "jar" - w_class = 2 + w_class = ITEMSIZE_SMALL matter = list("glass" = 200) flags = NOBLUDGEON var/list/accept_mobs = list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse) diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 009248dec1..ad24aa90a1 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -9,7 +9,7 @@ item_state = "lgloves" force = 0 throwforce = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 1 throw_range = 15 var/state diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 41ae7ac7c3..15f3310322 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items.dmi' amount = 10 max_amount = 10 - w_class = 2 + w_class = ITEMSIZE_SMALL throw_speed = 4 throw_range = 20 var/heal_brute = 0 diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 73d4d3cbcd..543a432606 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -4,7 +4,7 @@ singular_name = "metal rod" icon_state = "rods" flags = CONDUCT - w_class = 3.0 + w_class = ITEMSIZE_NORMAL force = 9.0 throwforce = 15.0 throw_speed = 5 diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index f56b9580fc..b0c48fffa2 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -5,7 +5,7 @@ singular_name = "telecrystal" icon = 'icons/obj/stock_parts.dmi' icon_state = "telecrystal" - w_class = 1 + w_class = ITEMSIZE_TINY max_amount = 240 origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4) force = 1 //Needs a token force to ensure you can attack because for some reason you can't attack with 0 force things diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 20cfb07864..f8981bc471 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -12,7 +12,7 @@ name = "tile" singular_name = "tile" desc = "A non-descript floor tile" - w_class = 3 + w_class = ITEMSIZE_NORMAL max_amount = 60 /obj/item/stack/tile/New() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7b8042c8c1..1da2008cea 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -96,7 +96,7 @@ force = 0 icon = 'icons/obj/weapons.dmi' icon_state = "syndballoon" - w_class = 4.0 + w_class = ITEMSIZE_LARGE /obj/item/toy/nanotrasenballoon name = "criminal balloon" @@ -107,7 +107,7 @@ force = 0 icon = 'icons/obj/weapons.dmi' icon_state = "ntballoon" - w_class = 4.0 + w_class = ITEMSIZE_LARGE /* * Fake telebeacon @@ -141,7 +141,7 @@ icon_l_hand = 'icons/mob/items/lefthand_guns.dmi', icon_r_hand = 'icons/mob/items/righthand_guns.dmi', ) - w_class = 2.0 + w_class = ITEMSIZE_SMALL attack_verb = list("attacked", "struck", "hit") var/bullets = 5 @@ -234,7 +234,7 @@ desc = "It's nerf or nothing! Ages 8 and up." icon = 'icons/obj/toy.dmi' icon_state = "foamdart" - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS /obj/effect/foam_dart_dummy @@ -258,7 +258,7 @@ slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', ) var/active = 0.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL attack_verb = list("attacked", "struck", "hit") attack_self(mob/user as mob) @@ -267,12 +267,12 @@ 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.w_class = 4 + src.w_class = ITEMSIZE_LARGE else user << "You push the plastic blade back down into the handle." playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) src.icon_state = "sword0" - src.w_class = 2 + src.w_class = ITEMSIZE_SMALL if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -295,7 +295,7 @@ slot_flags = SLOT_BELT | SLOT_BACK force = 5 throwforce = 5 - w_class = 3 + w_class = ITEMSIZE_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced") /* @@ -306,7 +306,7 @@ desc = "Wow!" icon = 'icons/obj/toy.dmi' icon_state = "snappop" - w_class = 1 + w_class = ITEMSIZE_TINY throw_impact(atom/hit_atom) ..() @@ -410,7 +410,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "bosunwhistle" var/cooldown = 0 - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS /obj/item/toy/bosunwhistle/attack_self(mob/user as mob) @@ -538,8 +538,8 @@ icon_state = "botanist" /obj/item/toy/figure/captain - name = "Station Administrator action figure" - desc = "A \"Space Life\" brand Station Administrator action figure." + name = "Colony Director action figure" + desc = "A \"Space Life\" brand Colony Director action figure." icon_state = "captain" /obj/item/toy/figure/cargotech @@ -707,7 +707,7 @@ slot_flags = SLOT_BELT | SLOT_BACK force = 5 throwforce = 5 - w_class = 3 + w_class = ITEMSIZE_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced") /obj/item/toy/therapy_red @@ -716,7 +716,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapyred" item_state = "egg4" // It's the red egg in items_left/righthand - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/toy/therapy_purple name = "purple therapy doll" @@ -724,7 +724,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapypurple" item_state = "egg1" // It's the magenta egg in items_left/righthand - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/toy/therapy_blue name = "blue therapy doll" @@ -732,7 +732,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapyblue" item_state = "egg2" // It's the blue egg in items_left/righthand - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/toy/therapy_yellow name = "yellow therapy doll" @@ -740,7 +740,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapyyellow" item_state = "egg5" // It's the yellow egg in items_left/righthand - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/toy/therapy_orange name = "orange therapy doll" @@ -748,7 +748,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapyorange" item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/toy/therapy_green name = "green therapy doll" @@ -756,7 +756,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "therapygreen" item_state = "egg3" // It's the green egg in items_left/righthand - w_class = 1 + w_class = ITEMSIZE_TINY /* * Plushies @@ -864,7 +864,7 @@ slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi', slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi', ) - w_class = 4 + w_class = ITEMSIZE_LARGE attack_verb = list("attacked", "slashed", "stabbed", "poked") /* NYET. @@ -873,7 +873,7 @@ name = "toddler" desc = "This baby looks almost real. Wait, did it just burp?" force = 5 - w_class = 4.0 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK */ @@ -891,6 +891,6 @@ desc = "Tiny cute Christmas tree." icon = 'icons/obj/toy.dmi' icon_state = "tinyxmastree" - w_class = 1 + w_class = ITEMSIZE_TINY force = 1 - throwforce = 1 \ No newline at end of file + throwforce = 1 diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 1d171d9dbe..7fb09e116c 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -4,7 +4,7 @@ //Added by Jack Rost /obj/item/trash icon = 'icons/obj/trash.dmi' - w_class = 2.0 + w_class = ITEMSIZE_SMALL desc = "This is rubbish." /obj/item/trash/raisins diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index ec1e5dbf41..ce28a6eb0b 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -14,7 +14,7 @@ AI MODULES desc = "An AI Module for transmitting encrypted instructions to the AI." flags = CONDUCT force = 5.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 5.0 throw_speed = 3 throw_range = 15 diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 80080220e9..e21c509c15 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -12,7 +12,7 @@ throwforce = 10.0 throw_speed = 1 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2) matter = list(DEFAULT_WALL_MATERIAL = 50000) var/datum/effect/effect/system/spark_spread/spark_system @@ -161,7 +161,7 @@ icon = 'icons/obj/ammo.dmi' icon_state = "rcd" item_state = "rcdammo" - w_class = 2 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 2) matter = list(DEFAULT_WALL_MATERIAL = 30000,"glass" = 15000) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 6384508c04..10a847b469 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -14,7 +14,7 @@ RSF anchored = 0.0 var/stored_matter = 30 var/mode = 1 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL /obj/item/weapon/rsf/examine(mob/user) if(..(user, 0)) diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 3cbc75bfeb..1b1b3a5433 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/autopsy_scanner.dmi' icon_state = "" flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) var/list/datum/autopsy_data_scanner/wdata = list() var/list/datum/autopsy_data_scanner/chemtraces = list() diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm index 740b5e5a12..5ea04c2dab 100644 --- a/code/game/objects/items/weapons/candle.dm +++ b/code/game/objects/items/weapons/candle.dm @@ -3,7 +3,7 @@ desc = "a small pillar candle. Its specially-formulated fuel-oxidizer wax mixture allows continued combustion in airless environments." icon = 'icons/obj/candle.dmi' icon_state = "candle1" - w_class = 1 + w_class = ITEMSIZE_TINY light_color = "#E09D37" var/wax = 2000 diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index c6918d33db..11404ade86 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -15,7 +15,7 @@ name = "card" desc = "Does card things." icon = 'icons/obj/card.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/associated_account_number = 0 @@ -233,12 +233,12 @@ access = list(access_syndicate, access_external_airlocks) /obj/item/weapon/card/id/captains_spare - name = "station administrator's spare ID" + name = "colony director's spare ID" desc = "The spare ID of the High Lord himself." icon_state = "gold" item_state = "gold_id" - registered_name = "Station Administrator" - assignment = "Station Administrator" + registered_name = "Colony Director" + assignment = "Colony Director" /obj/item/weapon/card/id/captains_spare/New() access = get_all_station_access() ..() @@ -362,4 +362,4 @@ desc = "An identification card of some sort. It does not look like it is issued by NT." icon_state = "permit" primary_color = rgb(142,94,0) - secondary_color = rgb(191,159,95) \ No newline at end of file + secondary_color = rgb(191,159,95) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 3d3cb46192..62f4925c9a 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -37,7 +37,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = "match_unlit" var/burnt = 0 var/smoketime = 5 - w_class = 1.0 + w_class = ITEMSIZE_TINY origin_tech = list(TECH_MATERIAL = 1) slot_flags = SLOT_EARS attack_verb = list("burnt", "singed") @@ -229,7 +229,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = "cigoff" throw_speed = 0.5 item_state = "cigoff" - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS | SLOT_MASK attack_verb = list("burnt", "singed") icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi @@ -314,7 +314,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM desc = "A manky old cigarette butt." icon = 'icons/obj/clothing/masks.dmi' icon_state = "cigbutt" - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS throwforce = 1 @@ -443,7 +443,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon = 'icons/obj/items.dmi' icon_state = "lighter-g" item_state = "lighter-g" - w_class = 1 + w_class = ITEMSIZE_TINY throwforce = 4 flags = CONDUCT slot_flags = SLOT_BELT diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index 3711cf0690..f17ee1c292 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -12,7 +12,7 @@ origin_tech = list(TECH_DATA = 2) density = 0 anchored = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT force = 5.0 throwforce = 5.0 diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm index 6e5667ebe5..57d8822df6 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm @@ -22,3 +22,10 @@ build_path = /obj/machinery/power/smes/batteryrack/makeshift board_type = new /datum/frame/frame_types/machine req_components = list(/obj/item/weapon/cell = 3) + +/obj/item/weapon/circuitboard/grid_checker + name = T_BOARD("power grid checker") + build_path = /obj/machinery/power/grid_checker + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_POWER = 4, TECH_ENGINEERING = 3) + req_components = list(/obj/item/weapon/stock_parts/capacitor = 3, /obj/item/stack/cable_coil = 10) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index db630d8fad..9d3a9cb0a4 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -4,7 +4,7 @@ desc = "A generic brand of lipstick." icon = 'icons/obj/items.dmi' icon_state = "lipstick" - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/colour = "red" var/open = 0 @@ -67,7 +67,7 @@ /obj/item/weapon/haircomb //sparklysheep's comb name = "purple comb" desc = "A pristine purple comb made from flexible plastic." - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS icon = 'icons/obj/items.dmi' icon_state = "purplecomb" diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 86310d2b78..9099ff3bd1 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -3,7 +3,7 @@ desc = "A dice with six sides." icon = 'icons/obj/dice.dmi' icon_state = "d66" - w_class = 1 + w_class = ITEMSIZE_TINY var/sides = 6 attack_verb = list("diced") diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index ba60bfc361..33b93f6210 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -8,7 +8,7 @@ var/s_time = 10.0 throw_speed = 1 throw_range = 5 - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/uses = 1 var/nofail @@ -160,7 +160,7 @@ /obj/item/weapon/dnainjector/xraymut name = "\improper DNA injector (Xray)" - desc = "Finally you can see what the Station Administrator does." + desc = "Finally you can see what the Colony Director does." datatype = DNA2_BUF_SE value = 0xFFF //block = 8 diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 46e8e7ba26..1a8cc97def 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -6,7 +6,7 @@ icon_state = "plastic-explosive0" item_state = "plasticx" flags = NOBLUDGEON - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_ILLEGAL = 2) var/datum/wires/explosive/c4/wires = null var/timer = 10 diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 6e323d7387..3bcb68bcee 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -7,7 +7,7 @@ hitsound = 'sound/weapons/smash.ogg' flags = CONDUCT throwforce = 10 - w_class = 3 + w_class = ITEMSIZE_NORMAL throw_speed = 2 throw_range = 10 force = 10 @@ -28,7 +28,7 @@ item_state = "miniFE" hitsound = null //it is much lighter, after all. throwforce = 2 - w_class = 2.0 + w_class = ITEMSIZE_SMALL force = 3.0 max_water = 150 spray_particles = 3 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 37018e8576..c3f93a016f 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -13,7 +13,7 @@ throwforce = 10.0 throw_speed = 1 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 1, TECH_PHORON = 1) matter = list(DEFAULT_WALL_MATERIAL = 500) var/status = 0 diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 94775ceb36..6f8e1782eb 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -18,7 +18,7 @@ ..() pixel_x = rand(-10,10) pixel_y = rand(-10,10) - if(w_class > 0 && w_class < 4) + if(w_class > 0 && w_class < ITEMSIZE_LARGE) icon_state = "gift[w_class]" else icon_state = "gift[pick(1, 2, 3)]" @@ -128,7 +128,7 @@ ..() if (!( locate(/obj/structure/table, src.loc) )) user << "You MUST put the paper on a table!" - if (W.w_class < 4) + if (W.w_class < ITEMSIZE_LARGE) if (user.get_type_in_hands(/obj/item/weapon/wirecutters)) var/a_used = 2 ** (src.w_class - 1) if (src.amount < a_used) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index f87f0fa830..be7d90830d 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -3,7 +3,7 @@ icon_state = "chemg" item_state = "grenade" desc = "A hand made chemical grenade." - w_class = 2.0 + w_class = ITEMSIZE_SMALL force = 2.0 det_time = null unacidable = 1 diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 0236297d22..d02ccf2185 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -92,7 +92,7 @@ M.update_icons() /obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve - desc = "Use of this weapon may constiute a war crime in your area, consult your local Station Administrator." + desc = "Use of this weapon may constiute a war crime in your area, consult your local Colony Director." name = "clusterbang" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang" diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 8a8536d434..b46d987b4c 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -1,7 +1,7 @@ /obj/item/weapon/grenade name = "grenade" desc = "A hand held grenade, with an adjustable timer." - w_class = 2.0 + w_class = ITEMSIZE_SMALL icon = 'icons/obj/grenade.dmi' icon_state = "grenade" item_state = "grenade" diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 25ee157950..e6962669dc 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -7,7 +7,7 @@ flags = CONDUCT slot_flags = SLOT_BELT throwforce = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 2 throw_range = 5 origin_tech = list(TECH_MATERIAL = 1) diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 8160c14cd8..749f1a08b9 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -11,7 +11,7 @@ var/mode = 1; //0 = pick one at a time, 1 = pick all on tile var/capacity = 500; //the number of seeds it can carry. slot_flags = SLOT_BELT - w_class = 1 + w_class = ITEMSIZE_TINY var/list/item_quants = list() /obj/item/weapon/seedbag/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 3f4164a4c4..17d3e32f92 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -6,7 +6,7 @@ name = "implant" icon = 'icons/obj/device.dmi' icon_state = "implant" - w_class = 1 + w_class = ITEMSIZE_TINY var/implanted = null var/mob/imp_in = null var/obj/item/organ/external/part = null diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 49b1b280a7..815050636a 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -8,7 +8,7 @@ item_state = "implantcase" throw_speed = 1 throw_range = 5 - w_class = 1.0 + w_class = ITEMSIZE_TINY var/obj/item/weapon/implant/imp = null /obj/item/weapon/implantcase/proc/update() diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 655727a62a..f872cd0bf4 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -5,7 +5,7 @@ item_state = "syringe_0" throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/obj/item/weapon/implant/imp = null /obj/item/weapon/implanter/attack_self(var/mob/user) @@ -31,7 +31,7 @@ return if (user && src.imp) M.visible_message("[user] is attemping to implant [M].") - + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) user.do_attack_animation(M) diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index a6feac2998..dc054536ac 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -8,7 +8,7 @@ item_state = "electronic" throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/obj/item/weapon/implantcase/case = null var/broadcasting = null var/listening = 1.0 diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm index 0fd7d95e8c..c76f927ef2 100644 --- a/code/game/objects/items/weapons/improvised_components.dm +++ b/code/game/objects/items/weapons/improvised_components.dm @@ -46,7 +46,7 @@ flags = CONDUCT force = 8 throwforce = 10 - w_class = 3 + w_class = ITEMSIZE_NORMAL attack_verb = list("hit", "bludgeoned", "whacked", "bonked") force_divisor = 0.1 thrown_force_divisor = 0.1 diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 8c1e3f5df1..c69b3d61d1 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -110,7 +110,7 @@

    SUPERMATTER HANDLING

  • Do not expose supermatter to oxygen.
  • -
  • Do not touch supermatter without gloves without exosuit protection allow supermatter to contact any solid object apart from specially-designed supporting pallet.
  • +
  • Do not allow supermatter to contact any solid object apart from specially-designed supporting pallet.
  • Do not directly view supermatter without meson goggles.
  • While handles on pallet allow moving the supermatter via pulling, pushing should not be attempted.

  • @@ -118,7 +118,7 @@
    1. Fill reactor loop and radiator loop with two (2) standard canisters of nitrogen gas each.
    2. Ensure that pumps and filters are on and operating at maximum power.
    3. -
    4. Fire 5 15 2 UNKNOWN 8-12 pulses from emitter at supermatter crystal. Reactor blast doors must be open for this procedure.
    5. +
    6. Fire 8-9 pulses from emitter at supermatter crystal. Reactor blast doors must be open for this procedure.

    OPERATION AND MAINTENANCE

    @@ -997,7 +997,7 @@ Remember the order:
    Disk, Code, Safety, Timer, Disk, RUN!

    - Intelligence Analysts believe that normal corporate procedure is for the Station Administrator to secure the nuclear authentication disk.

    + Intelligence Analysts believe that normal corporate procedure is for the Colony Director to secure the nuclear authentication disk.

    Good luck! diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 7b70013a0d..8fdac8549e 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -1,11 +1,11 @@ /obj/item/weapon/material/kitchen icon = 'icons/obj/kitchen.dmi' - + /* * Utensils */ /obj/item/weapon/material/kitchen/utensil - w_class = 1 + w_class = ITEMSIZE_TINY thrown_force_divisor = 1 origin_tech = "materials=1" attack_verb = list("attacked", "stabbed", "poked") diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index f49d16c034..a70a253579 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -5,7 +5,7 @@ item_state = null hitsound = null var/active = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL attack_verb = list("patted", "tapped") force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) @@ -18,7 +18,7 @@ throwforce = max(3,force-3) hitsound = 'sound/weapons/bladeslice.ogg' icon_state += "_open" - w_class = 3 + w_class = ITEMSIZE_NORMAL attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") else force = 3 diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 73f8b57320..c724a4a774 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -7,7 +7,7 @@ gender = NEUTER throw_speed = 3 throw_range = 7 - w_class = 3 + w_class = ITEMSIZE_NORMAL sharp = 0 edge = 0 item_icons = list( diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 0d88c2b3aa..c68256922e 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -13,7 +13,7 @@ desc = "A pair of brass knuckles. Generally used to enhance the user's punches." icon_state = "knuckledusters" gender = PLURAL - w_class = 2.0 + w_class = ITEMSIZE_SMALL force_divisor = 0.63 attack_verb = list("punched", "beaten", "struck") applies_material_colour = 0 @@ -25,7 +25,7 @@ icon_state = "hatchet" force_divisor = 0.2 // 12 with hardness 60 (steel) thrown_force_divisor = 0.75 // 15 with weight 20 (steel) - w_class = 2 + w_class = ITEMSIZE_SMALL sharp = 1 edge = 1 origin_tech = "materials=2;combat=1" @@ -82,7 +82,7 @@ icon_state = "hoe" force_divisor = 0.25 // 5 with weight 20 (steel) thrown_force_divisor = 0.25 // as above - w_class = 2 + w_class = ITEMSIZE_SMALL attack_verb = list("slashed", "sliced", "cut", "clawed") /obj/item/weapon/material/scythe @@ -95,7 +95,7 @@ edge = 1 throw_speed = 1 throw_range = 3 - w_class = 4 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK origin_tech = "materials=2;combat=2" attack_verb = list("chopped", "sliced", "cut", "reaped") diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index d957c049b5..78ee869604 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -7,7 +7,7 @@ icon_state = "large" sharp = 1 edge = 1 - w_class = 2 + w_class = ITEMSIZE_SMALL force_divisor = 0.25 // 7.5 with hardness 30 (glass) thrown_force_divisor = 0.5 item_state = "shard-glass" diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 5299ce2a99..08489b7df3 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -17,7 +17,7 @@ * Twohanded */ /obj/item/weapon/material/twohanded - w_class = 4 + w_class = ITEMSIZE_LARGE var/wielded = 0 var/force_wielded = 0 var/force_unwielded @@ -87,7 +87,7 @@ force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor sharp = 1 edge = 1 - w_class = 4.0 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK force_wielded = 30 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") @@ -129,7 +129,7 @@ name = "spear" desc = "A haphazardly-constructed yet still deadly weapon of ancient design." force = 10 - w_class = 4.0 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK force_divisor = 0.75 // 22 when wielded with hardness 15 (glass) unwielded_force_divisor = 0.375 diff --git a/code/game/objects/items/weapons/material/twohanded.dm.orig b/code/game/objects/items/weapons/material/twohanded.dm.orig deleted file mode 100644 index 01f4ee7e55..0000000000 --- a/code/game/objects/items/weapons/material/twohanded.dm.orig +++ /dev/null @@ -1,234 +0,0 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - */ - -/*################################################################## -##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## -####################################################################*/ - -//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn -//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. -//It also tidies stuff up elsewhere. - -/* - * Twohanded - */ -/obj/item/weapon/material/twohanded - w_class = 4 - var/wielded = 0 - var/force_wielded = 0 - var/force_unwielded - var/wieldsound = null - var/unwieldsound = null - var/base_icon - var/base_name - var/unwielded_force_divisor = 0.25 - -/obj/item/weapon/material/twohanded/proc/unwield() - wielded = 0 - force = force_unwielded - name = "[base_name]" - update_icon() - -/obj/item/weapon/material/twohanded/proc/wield() - wielded = 1 - force = force_wielded - name = "[base_name] (Wielded)" - update_icon() - -/obj/item/weapon/material/twohanded/update_force() - base_name = name - if(sharp || edge) - force_wielded = material.get_edge_damage() - else - force_wielded = material.get_blunt_damage() - force_wielded = round(force_wielded*force_divisor) - force_unwielded = round(force_wielded*unwielded_force_divisor) - force = force_unwielded - throwforce = round(force*thrown_force_divisor) - //world << "[src] has unwielded force [force_unwielded], wielded force [force_wielded] and throwforce [throwforce] when made from default material [material.name]" - -/obj/item/weapon/material/twohanded/New() - ..() - update_icon() - -/obj/item/weapon/material/twohanded/mob_can_equip(M as mob, slot) - //Cannot equip wielded items. - if(wielded) - M << "Unwield the [base_name] first!" - return 0 - return ..() - -/obj/item/weapon/material/twohanded/dropped(mob/user as mob) - //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand - if(user) - var/obj/item/weapon/material/twohanded/O = user.get_inactive_hand() - if(istype(O)) - O.unwield() - return unwield() - -/obj/item/weapon/material/twohanded/update_icon() - icon_state = "[base_icon][wielded]" - item_state = icon_state - -/obj/item/weapon/material/twohanded/pickup(mob/user) - unwield() - -/obj/item/weapon/material/twohanded/attack_self(mob/user as mob) - - ..() - - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.is_small) - user << "It's too heavy for you to wield fully." - return - else - return - - if(wielded) //Trying to unwield it - unwield() - user << "You are now carrying the [name] with one hand." - if (src.unwieldsound) - playsound(src.loc, unwieldsound, 50, 1) - - var/obj/item/weapon/material/twohanded/offhand/O = user.get_inactive_hand() - if(O && istype(O)) - O.unwield() - - else //Trying to wield it - if(user.get_inactive_hand()) - user << "You need your other hand to be empty" - return - wield() - user << "You grab the [base_name] with both hands." - if (src.wieldsound) - playsound(src.loc, wieldsound, 50, 1) - - var/obj/item/weapon/material/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ - O.name = "[base_name] - offhand" - O.desc = "Your second grip on the [base_name]." - user.put_in_inactive_hand(O) - - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - - return - -///////////OFFHAND/////////////// -/obj/item/weapon/material/twohanded/offhand - w_class = 5 - icon_state = "offhand" - name = "offhand" - default_material = "placeholder" - -/obj/item/weapon/material/twohanded/offhand/unwield() - qdel(src) - -/obj/item/weapon/material/twohanded/offhand/wield() - qdel(src) - -/obj/item/weapon/material/twohanded/offhand/update_icon() - return - -/* - * Fireaxe - */ -/obj/item/weapon/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - base_icon = "fireaxe" - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - unwielded_force_divisor = 0.25 - force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor - sharp = 1 - edge = 1 - slot_flags = SLOT_BACK - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - applies_material_colour = 0 - -/obj/item/weapon/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - ..() - if(A && wielded) - if(istype(A,/obj/structure/window)) - var/obj/structure/window/W = A - W.shatter() -<<<<<<< HEAD:code/game/objects/items/weapons/material/twohanded.dm - -/* -======= - else if(istype(A,/obj/structure/grille)) - qdel(A) - else if(istype(A,/obj/effect/plant)) - var/obj/effect/plant/P = A - P.die_off() - - qdel(A) ->>>>>>> 284d1cc1f5c67503fe0da89ce01985d73bb02038:code/game/objects/items/weapons/twohanded.dm -/* - * Double-Bladed Energy Swords - Cheridan - */ - // Not sure what to do with this one, it won't work nicely with the material system, - // but I don't want to copypaste all the twohanded procs.. -/obj/item/weapon/material/twohanded/dualsaber - icon_state = "dualsaber0" - base_icon = "dualsaber" - name = "double-bladed energy sword" - desc = "Handle with care." - force = 3 - throwforce = 5.0 - throw_speed = 1 - throw_range = 5 - w_class = 2.0 - force_wielded = 30 - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' - flags = NOSHIELD - origin_tech = "magnets=3;syndicate=4" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharp = 1 - edge = 1 - applies_material_colour = 0 - -/obj/item/weapon/material/twohanded/dualsaber/attack(target as mob, mob/living/user as mob) - ..() - if((CLUMSY in user.mutations) && (wielded) &&prob(40)) - user << "\red You twirl around a bit before losing your balance and impaling yourself on the [src]." - user.take_organ_damage(20,25) - return - if((wielded) && prob(50)) - spawn(0) - for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2)) - user.set_dir(i) - sleep(1) - -/obj/item/weapon/material/twohanded/dualsaber/IsShield() - if(wielded) - return 1 - else - return 0 -*/ - -//spears, bay edition -/obj/item/weapon/material/twohanded/spear - icon_state = "spearglass0" - base_icon = "spearglass" - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - slot_flags = SLOT_BACK - force_wielded = 0.75 // 22 when wielded with hardness 15 (glass) - unwielded_force_divisor = 0.65 // 14 when unwielded based on above - thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass) - throw_speed = 3 - edge = 1 - sharp = 1 - flags = NOSHIELD - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - default_material = "glass" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index ac8da3d835..2b2a2ee8b4 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -7,6 +7,9 @@ edge = 0 armor_penetration = 50 flags = NOBLOODY + var/lrange = 2 + var/lpower = 2 + var/lcolor = "#0099FF" /obj/item/weapon/melee/energy/proc/activate(mob/living/user) anchored = 1 @@ -19,6 +22,7 @@ edge = 1 w_class = active_w_class playsound(user, 'sound/weapons/saberon.ogg', 50, 1) + set_light(lrange, lpower, lcolor) /obj/item/weapon/melee/energy/proc/deactivate(mob/living/user) anchored = 0 @@ -31,6 +35,7 @@ sharp = initial(sharp) edge = initial(edge) w_class = initial(w_class) + set_light(0,0) /obj/item/weapon/melee/energy/attack_self(mob/living/user as mob) if (active) @@ -67,14 +72,14 @@ //active_force = 150 //holy... active_force = 60 active_throwforce = 35 - active_w_class = 5 + active_w_class = ITEMSIZE_HUGE //force = 40 //throwforce = 25 force = 20 throwforce = 10 throw_speed = 1 throw_range = 5 - w_class = 3 + w_class = ITEMSIZE_NORMAL flags = CONDUCT | NOBLOODY origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") @@ -105,12 +110,12 @@ icon_state = "sword0" active_force = 30 active_throwforce = 20 - active_w_class = 4 + active_w_class = ITEMSIZE_LARGE force = 3 throwforce = 5 throw_speed = 1 throw_range = 5 - w_class = 2 + w_class = ITEMSIZE_SMALL flags = NOBLOODY origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4) sharp = 1 @@ -124,26 +129,33 @@ /obj/item/weapon/melee/energy/sword/New() blade_color = pick("red","blue","green","purple") + lcolor = blade_color /obj/item/weapon/melee/energy/sword/green/New() blade_color = "green" + lcolor = "#008000" /obj/item/weapon/melee/energy/sword/red/New() blade_color = "red" + lcolor = "#FF0000" /obj/item/weapon/melee/energy/sword/blue/New() blade_color = "blue" + lcolor = "#0000FF" /obj/item/weapon/melee/energy/sword/purple/New() blade_color = "purple" + lcolor = "#800080" /obj/item/weapon/melee/energy/sword/activate(mob/living/user) if(!active) user << "\The [src] is now energised." + ..() attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") icon_state = "sword[blade_color]" + /obj/item/weapon/melee/energy/sword/deactivate(mob/living/user) if(active) user << "\The [src] deactivates!" @@ -154,7 +166,7 @@ /obj/item/weapon/melee/energy/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") if(active && default_parry_check(user, attacker, damage_source) && prob(50)) user.visible_message("\The [user] parries [attack_text] with \the [src]!") - + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, user.loc) spark_system.start() @@ -188,11 +200,12 @@ throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 - w_class = 4.0//So you can't hide it in your pocket or some such. + w_class = ITEMSIZE_LARGE//So you can't hide it in your pocket or some such. flags = NOBLOODY attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/mob/living/creator var/datum/effect/effect/system/spark_spread/spark_system + lcolor = "#00FF00" /obj/item/weapon/melee/energy/blade/New() @@ -201,6 +214,7 @@ spark_system.attach(src) processing_objects |= src + set_light(lrange, lpower, lcolor) /obj/item/weapon/melee/energy/blade/Destroy() processing_objects -= src diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index ae8250dd02..3554cd45c0 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -6,7 +6,7 @@ slot_flags = SLOT_BELT force = 10 throwforce = 7 - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 4) attack_verb = list("flogged", "whipped", "lashed", "disciplined") diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 3fbef18d3e..3e46128d71 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -7,7 +7,7 @@ throwforce = 10.0 throw_speed = 5 throw_range = 10 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") var/mopping = 0 var/mopcount = 0 @@ -35,4 +35,4 @@ /obj/effect/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) return - ..() + ..() diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index e50f82966b..8baab87528 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -7,7 +7,7 @@ throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 throw_range = 1 - w_class = 4.0//So you can't hide it in your pocket or some such. + w_class = ITEMSIZE_LARGE//So you can't hide it in your pocket or some such. attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") var/mob/living/creator var/mopping = 0 diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index fe1247cc89..5d12f5c33b 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -10,7 +10,7 @@ var/global/list/cached_icons = list() icon_state = "paint_neutral" item_state = "paintcan" matter = list(DEFAULT_WALL_MATERIAL = 200) - w_class = 3.0 + w_class = ITEMSIZE_NORMAL amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,60) volume = 60 diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 4ddd60526c..46887ce8f0 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -3,7 +3,7 @@ name = "tape roll" icon = 'icons/policetape.dmi' icon_state = "rollstart" - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/turf/start var/turf/end var/tape_type = /obj/item/tape @@ -271,7 +271,7 @@ var/list/tape_roll_applications = list() add_fingerprint(M) if (!allowed(M)) //only select few learn art of not crumpling the tape M << "You are not supposed to go past [src]..." - if(M.a_intent == I_HELP) + if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_animal))) return 0 crumple() return ..(mover) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index e61875f5ec..4ff88fd4a1 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -9,7 +9,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/charge = 0 // note %age conveted to actual charge in New var/maxcharge = 1000 var/rigged = 0 // true if rigged to explode @@ -24,19 +24,15 @@ /obj/item/weapon/cell/device name = "device power cell" desc = "A small power cell designed to power handheld devices." - icon_state = "cell" //placeholder - w_class = 2 + icon_state = "dcell" + item_state = "egg6" + w_class = ITEMSIZE_SMALL force = 0 throw_speed = 5 throw_range = 7 - maxcharge = 1000 + maxcharge = 2400 matter = list("metal" = 350, "glass" = 50) -/obj/item/weapon/cell/device/variable/New(newloc, charge_amount) - ..(newloc) - maxcharge = charge_amount - charge = maxcharge - /obj/item/weapon/cell/crap name = "\improper rechargable AA battery" desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 8cc8ee5cfa..2756822401 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/wizard.dmi' icon_state = "scroll" var/uses = 4.0 - w_class = 1 + w_class = ITEMSIZE_TINY item_state = "paper" throw_speed = 4 throw_range = 20 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 2903c7f971..2c47c8ab9d 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -63,7 +63,7 @@ throwforce = 5.0 throw_speed = 1 throw_range = 4 - w_class = 4.0 + w_class = ITEMSIZE_LARGE origin_tech = list(TECH_MATERIAL = 2) matter = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 1000) attack_verb = list("shoved", "bashed") @@ -119,7 +119,7 @@ throwforce = 5.0 throw_speed = 1 throw_range = 4 - w_class = 2 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 4) attack_verb = list("shoved", "bashed") var/active = 0 @@ -150,7 +150,7 @@ if (active) force = 10 update_icon() - w_class = 4 + w_class = ITEMSIZE_LARGE slot_flags = null playsound(user, 'sound/weapons/saberon.ogg', 50, 1) user << "\The [src] is now active." @@ -158,7 +158,7 @@ else force = 3 update_icon() - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user << "\The [src] can now be concealed." @@ -188,7 +188,7 @@ throwforce = 3 throw_speed = 3 throw_range = 4 - w_class = 3 + w_class = ITEMSIZE_NORMAL var/active = 0 /* /obj/item/weapon/shield/energy/IsShield() @@ -206,14 +206,14 @@ force = 8 throwforce = 5 throw_speed = 2 - w_class = 4 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK user << "You extend \the [src]." else force = 3 throwforce = 3 throw_speed = 3 - w_class = 3 + w_class = ITEMSIZE_NORMAL slot_flags = null user << "[src] can now be concealed." diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 6189cc9658..0430684f36 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -9,10 +9,12 @@ sprite_sheets = list( "Teshari" = 'icons/mob/species/seromi/back.dmi' ) - w_class = 4 + w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK - max_w_class = 4 - max_storage_space = 28 + max_w_class = ITEMSIZE_LARGE + max_storage_space = INVENTORY_STANDARD_SPACE + var/flippable = 0 + var/side = 0 //0 = right, 1 = left /obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob) if (src.use_sound) @@ -40,9 +42,9 @@ desc = "A backpack that opens into a localized pocket of Blue Space." origin_tech = list(TECH_BLUESPACE = 4) icon_state = "holdingpack" - max_w_class = 4 - max_storage_space = 56 - storage_cost = 29 + max_w_class = ITEMSIZE_LARGE + max_storage_space = ITEMSIZE_COST_NORMAL * 14 // 56 + storage_cost = INVENTORY_STANDARD_SPACE + 1 New() ..() @@ -66,9 +68,9 @@ desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!" icon_state = "giftbag0" item_state_slots = list(slot_r_hand_str = "giftbag", slot_l_hand_str = "giftbag") - w_class = 4.0 - max_w_class = 3 - max_storage_space = 400 // can store a ton of shit! + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 100 // can store a ton of shit! item_state_slots = null /obj/item/weapon/storage/backpack/cultpack @@ -92,7 +94,7 @@ icon_state = "securitypack" /obj/item/weapon/storage/backpack/captain - name = "station administrator's backpack" + name = "colony director's backpack" desc = "It's a special backpack made exclusively for officers." icon_state = "captainpack" @@ -135,7 +137,7 @@ desc = "A large dufflebag for holding extra things." icon_state = "duffle" slowdown = 1 - max_storage_space = 36 + max_storage_space = INVENTORY_DUFFLEBAG_SPACE /obj/item/weapon/storage/backpack/dufflebag/syndie name = "black dufflebag" @@ -154,7 +156,7 @@ icon_state = "duffle_syndieammo" /obj/item/weapon/storage/backpack/dufflebag/captain - name = "station administrator's dufflebag" + name = "colony director's dufflebag" desc = "A large dufflebag for holding extra captainly goods." icon_state = "duffle_captain" @@ -246,7 +248,7 @@ icon_state = "satchel_hyd" /obj/item/weapon/storage/backpack/satchel/cap - name = "station administrator's satchel" + name = "colony director's satchel" desc = "An exclusive satchel for officers." icon_state = "satchel-cap" item_state_slots = list(slot_r_hand_str = "captainpack", slot_l_hand_str = "captainpack") @@ -338,4 +340,13 @@ item_state_slots = list(slot_r_hand_str = "securitypack", slot_l_hand_str = "securitypack") /obj/item/weapon/storage/backpack/messenger/black - icon_state = "courierbagblk" \ No newline at end of file + icon_state = "courierbagblk" + +/obj/item/weapon/storage/backpack/purse + name = "purse" + desc = "A small, fashionable bag typically worn over the shoulder." + icon_state = "purse" + item_state_slots = list(slot_r_hand_str = "lgpurse", slot_l_hand_str = "lgpurse") + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 5 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 12eca53626..241e5c008f 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -32,8 +32,8 @@ icon_state = "trashbag0" item_state_slots = list(slot_r_hand_str = "trashbag", slot_l_hand_str = "trashbag") - w_class = 4 - max_w_class = 2 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_SMALL can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -57,8 +57,8 @@ icon = 'icons/obj/trash.dmi' icon_state = "plasticbag" - w_class = 4 - max_w_class = 2 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_SMALL can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -72,9 +72,9 @@ icon = 'icons/obj/mining.dmi' icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET - w_class = 3 - max_storage_space = 100 - max_w_class = 3 + w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/weapon/ore) @@ -86,9 +86,9 @@ name = "plant bag" icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "plantbag" - max_storage_space = 100 - max_w_class = 3 - w_class = 2 + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) @@ -105,7 +105,7 @@ desc = "A patented storage system designed for any kind of mineral sheet." var/capacity = 300; //the number of sheets it can carry. - w_class = 3 + w_class = ITEMSIZE_NORMAL storage_slots = 7 allow_quick_empty = 1 // this function is superceded @@ -243,7 +243,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "cashbag" desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." - max_storage_space = 100 - max_w_class = 3 - w_class = 2 + max_storage_space = ITEMSIZE_COST_NORMAL * 25 + max_w_class = ITEMSIZE_NORMAL + w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 6f0beed5e9..c68b0faf7d 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "utility" storage_slots = 7 - max_storage_space = 28 //This should ensure belts always have enough room to store whatever. - max_w_class = 3 + max_storage_space = ITEMSIZE_COST_NORMAL * 7 //This should ensure belts always have enough room to store whatever. + max_w_class = ITEMSIZE_NORMAL slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi') @@ -117,7 +117,7 @@ name = "security belt" desc = "Can hold security gear like handcuffs and flashes." icon_state = "security" - max_w_class = 3 + max_w_class = ITEMSIZE_NORMAL can_hold = list( /obj/item/weapon/grenade, /obj/item/weapon/reagent_containers/spray/pepper, @@ -126,6 +126,7 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_magazine, + /obj/item/weapon/cell/device, /obj/item/weapon/reagent_containers/food/snacks/donut/, /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/taser, @@ -150,7 +151,7 @@ desc = "A belt for holding forensics equipment." icon_state = "security" storage_slots = 7 - max_w_class = 3 + max_w_class = ITEMSIZE_NORMAL can_hold = list( /obj/item/device/taperecorder, /obj/item/clothing/glasses, @@ -218,8 +219,8 @@ desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." icon_state = "swat" storage_slots = 9 - max_w_class = 3 - max_storage_space = 28 + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 7 /obj/item/weapon/storage/belt/security/tactical/bandolier name = "combat belt" @@ -231,7 +232,7 @@ desc = "A belt used to hold most janitorial supplies." icon_state = "janitor" storage_slots = 7 - max_w_class = 3 + max_w_class = ITEMSIZE_NORMAL can_hold = list( /obj/item/clothing/glasses, /obj/item/device/flashlight, diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 8a29fdefa8..933970b335 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -4,7 +4,7 @@ icon_state ="bible" throw_speed = 1 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/mob/affecting = null var/deity_name = "Christ" @@ -17,9 +17,9 @@ ..() new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) - new /obj/item/weapon/spacecash(src) - new /obj/item/weapon/spacecash(src) - new /obj/item/weapon/spacecash(src) + new /obj/item/weapon/spacecash/c100(src) + new /obj/item/weapon/spacecash/c100(src) + new /obj/item/weapon/spacecash/c100(src) /obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 46a3cd29e9..f8d5376a64 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,7 +25,8 @@ icon_state = "box" item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard - max_w_class = 2 + max_w_class = ITEMSIZE_SMALL + max_storage_space = INVENTORY_BOX_SPACE // BubbleWrap - A box can be folded up to make card /obj/item/weapon/storage/box/attack_self(mob/user as mob) @@ -129,7 +130,12 @@ /obj/item/weapon/storage/box/blanks/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/blank(src) + +/obj/item/weapon/storage/box/blanks/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/blank(src) /obj/item/weapon/storage/box/beanbags @@ -140,7 +146,12 @@ /obj/item/weapon/storage/box/beanbags/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/beanbag(src) + +/obj/item/weapon/storage/box/beanbags/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/weapon/storage/box/shotgunammo @@ -151,7 +162,12 @@ /obj/item/weapon/storage/box/shotgunammo/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun(src) + +/obj/item/weapon/storage/box/shotgunammo/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun(src) /obj/item/weapon/storage/box/shotgunshells @@ -162,7 +178,12 @@ /obj/item/weapon/storage/box/shotgunshells/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/pellet(src) + +/obj/item/weapon/storage/box/shotgunshells/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/pellet(src) /obj/item/weapon/storage/box/flashshells @@ -173,7 +194,12 @@ /obj/item/weapon/storage/box/flashshells/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/flash(src) + +/obj/item/weapon/storage/box/flashshells/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/flash(src) /obj/item/weapon/storage/box/stunshells @@ -184,7 +210,12 @@ /obj/item/weapon/storage/box/stunshells/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/stunshell(src) + +/obj/item/weapon/storage/box/stunshells/large/New() + ..() + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/stunshell(src) /obj/item/weapon/storage/box/practiceshells @@ -195,9 +226,30 @@ /obj/item/weapon/storage/box/practiceshells/New() ..() - for(var/i = 1 to 7) + for(var/i = 1 to 8) new /obj/item/ammo_casing/shotgun/practice(src) +/obj/item/weapon/storage/box/practiceshells/large/New() + ..() + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/practice(src) + +/obj/item/weapon/storage/box/empshells + name = "box of emp shells" + desc = "It has a picture of a gun and several warning symbols on the front." + icon_state = "empshot_box" + item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") + +/obj/item/weapon/storage/box/empshells/New() + ..() + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/emp(src) + +/obj/item/weapon/storage/box/empshells/large/New() + ..() + for(var/i = 1 to 8) + new /obj/item/ammo_casing/shotgun/emp(src) + /obj/item/weapon/storage/box/sniperammo name = "box of 14.5mm shells" desc = "It has a picture of a gun and several warning symbols on the front.
    WARNING: Live ammunition. Misuse may result in serious injury or death." @@ -478,7 +530,7 @@ desc = "A small box of 'Space-Proof' premium matches." icon = 'icons/obj/cigarettes.dmi' icon_state = "matchbox" - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/flame/match) @@ -512,9 +564,9 @@ icon_state = "light" desc = "This box is shaped on the inside so that only light tubes and bulbs fit." item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") - storage_slots=21 + storage_slots = 21 can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb) - max_storage_space = 42 //holds 21 items of w_class 2 + max_storage_space = ITEMSIZE_COST_SMALL * 21 //holds 21 items of w_class 2 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try /obj/item/weapon/storage/box/lights/bulbs/New() @@ -549,9 +601,9 @@ icon_state = "portafreezer" item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack") foldable = null - max_w_class = 3 + max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass) - max_storage_space = 21 + max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Formally 21. Odd numbers are bad. use_to_pickup = 1 // for picking up broken bulbs, not that most people will try /obj/item/weapon/storage/box/freezer/Entered(var/atom/movable/AM) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index d80ce0bb9c..aa023dce18 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -6,6 +6,16 @@ force = 8.0 throw_speed = 1 throw_range = 4 - w_class = 4 - max_w_class = 3 - max_storage_space = 16 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 4 + +/obj/item/weapon/storage/briefcase/clutch + name = "clutch purse" + desc = "A fashionable handheld bag typically used by women." + icon_state = "clutch" + item_state_slots = list(slot_r_hand_str = "smpurse", slot_l_hand_str = "smpurse") + force = 0 + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_COST_SMALL * 4 \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 009e1fcc90..3df73b9793 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -86,7 +86,7 @@ desc = "A box of crayons for all your rune drawing needs." icon = 'icons/obj/crayons.dmi' icon_state = "crayonbox" - w_class = 2.0 + w_class = ITEMSIZE_SMALL icon_type = "crayon" can_hold = list( /obj/item/weapon/pen/crayon @@ -128,7 +128,7 @@ icon = 'icons/obj/cigarettes.dmi' icon_state = "cigpacket" item_state_slots = list(slot_r_hand_str = "cigpacket", slot_l_hand_str = "cigpacket") - w_class = 1 + w_class = ITEMSIZE_TINY throwforce = 2 slot_flags = SLOT_BELT storage_slots = 6 @@ -240,7 +240,7 @@ desc = "A case for holding your cigars when you are not smoking them." icon_state = "cigarcase" icon = 'icons/obj/cigarettes.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY throwforce = 2 slot_flags = SLOT_BELT storage_slots = 7 @@ -288,9 +288,9 @@ icon = 'icons/obj/vialbox.dmi' icon_state = "vialbox0" item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") - max_w_class = 2 + max_w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) - max_storage_space = 12 //The sum of the w_classes of all the items in this storage item. + max_storage_space = ITEMSIZE_COST_SMALL * 6 //The sum of the w_classes of all the items in this storage item. storage_slots = 6 req_access = list(access_virology) diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index adbb4c2ca8..f6703bb7cb 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -14,7 +14,7 @@ throw_speed = 2 throw_range = 8 var/empty = 0 - max_storage_space = 14 + max_storage_space = ITEMSIZE_COST_SMALL * 7 // 14 /obj/item/weapon/storage/firstaid/fire @@ -132,8 +132,8 @@ /obj/item/weapon/storage/firstaid/surgery name = "surgery kit" desc = "Contains tools for surgery." - max_storage_space = 21 - max_w_class = 3 + max_storage_space = ITEMSIZE_COST_NORMAL * 6 // Formally 21. Odd numbers should be avoided for a system based on exponents of 2. + max_w_class = ITEMSIZE_NORMAL /obj/item/weapon/storage/firstaid/surgery/New() ..() @@ -159,13 +159,13 @@ icon_state = "pill_canister" icon = 'icons/obj/chemical.dmi' item_state_slots = list(slot_r_hand_str = "contsolid", slot_l_hand_str = "contsolid") - w_class = 2.0 + w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) allow_quick_gather = 1 use_to_pickup = 1 use_sound = null - max_storage_space = 14 - max_w_class = 1 + max_storage_space = ITEMSIZE_COST_TINY * 14 + max_w_class = ITEMSIZE_TINY /obj/item/weapon/storage/pill_bottle/antitox name = "bottle of Dylovene pills" diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index b8c0cd3a0f..3758b73de2 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -10,9 +10,9 @@ item_state_slots = list(slot_r_hand_str = "laundry", slot_l_hand_str = "laundry") desc = "The peak of thousands of years of laundry evolution." - w_class = 5 - max_w_class = 4 - max_storage_space = 25 //20 for clothes + a bit of additional space for non-clothing items that were worn on body + w_class = ITEMSIZE_HUGE + max_w_class = ITEMSIZE_LARGE + max_storage_space = ITEMSIZE_COST_NORMAL * 6 //20 for clothes + a bit of additional space for non-clothing items that were worn on body storage_slots = 14 use_to_pickup = 1 allow_quick_empty = 1 diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 4a589ed76e..770ecd169b 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -5,9 +5,9 @@ desc = "A locked box." icon_state = "lockbox+l" item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") - w_class = 4 - max_w_class = 3 - max_storage_space = 14 //The sum of the w_classes of all the items in this storage item. + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 4 //The sum of the w_classes of all the items in this storage item. req_access = list(access_armory) var/locked = 1 var/broken = 0 diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 4bd34c52c7..bf4856501a 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -34,7 +34,7 @@ icon_state = "donutbox" name = "donut box" var/startswith = 6 - max_storage_space = 12 + max_storage_space = ITEMSIZE_COST_SMALL * 6 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 4727ef61bb..169496ff6c 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -23,9 +23,9 @@ var/l_hacking = 0 var/emagged = 0 var/open = 0 - w_class = 3 - max_w_class = 2 - max_storage_space = 14 + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_SMALL * 7 examine(mob/user) if(..(user, 1)) @@ -149,7 +149,7 @@ force = 8.0 throw_speed = 1 throw_range = 4 - w_class = 4.0 + w_class = ITEMSIZE_LARGE attack_hand(mob/user as mob) if ((src.loc == user) && (src.locked == 1)) @@ -176,8 +176,8 @@ icon_locking = "safeb" icon_sparking = "safespark" force = 8.0 - w_class = 8.0 - max_w_class = 8 + w_class = ITEMSIZE_NO_CONTAINER + max_w_class = ITEMSIZE_LARGE // This was 8 previously... anchored = 1.0 density = 0 cant_hold = list(/obj/item/weapon/storage/secure/briefcase) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 06327b27ac..e691ed2795 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -12,14 +12,14 @@ slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', ) - w_class = 3 + w_class = ITEMSIZE_NORMAL show_messages = 1 var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage - var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = 8 //The sum of the storage costs of all the items in this storage item. + var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) + var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item. var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. var/obj/screen/storage/boxes = null var/obj/screen/storage/storage_start = null //storage UI @@ -211,7 +211,10 @@ /obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) - var/baseline_max_storage_space = 16 //should be equal to default backpack capacity + var/baseline_max_storage_space = INVENTORY_STANDARD_SPACE / 2 //should be equal to default backpack capacity // This is a lie. + // Above var is misleading, what it does upon changing is makes smaller inventory sizes have smaller space on the UI. + // It's cut in half because otherwise boxes of IDs and other tiny items are unbearably cluttered. + var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space @@ -609,20 +612,32 @@ return depth +// See inventory_sizes.dm for the defines. /obj/item/proc/get_storage_cost() if (storage_cost) return storage_cost else switch(w_class) - if(1) - return 1 - if(2) - return 2 - if(3) - return 4 - if(4) - return 8 - if(5) - return 16 + if(ITEMSIZE_TINY) + return ITEMSIZE_COST_TINY + if(ITEMSIZE_SMALL) + return ITEMSIZE_COST_SMALL + if(ITEMSIZE_NORMAL) + return ITEMSIZE_COST_NORMAL + if(ITEMSIZE_LARGE) + return ITEMSIZE_COST_LARGE + if(ITEMSIZE_HUGE) + return ITEMSIZE_COST_HUGE else - return 1000 + return ITEMSIZE_COST_NO_CONTAINER + +/obj/item/weapon/storage/proc/make_exact_fit() + storage_slots = contents.len + + can_hold.Cut() + max_w_class = 0 + max_storage_space = 0 + for(var/obj/item/I in src) + can_hold[I.type]++ + max_w_class = max(I.w_class, max_w_class) + max_storage_space += I.get_storage_cost() diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 9c779f013a..8e6e5ca682 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -9,9 +9,9 @@ throwforce = 10 throw_speed = 1 throw_range = 7 - w_class = 4 - max_w_class = 3 - max_storage_space = 14 //enough to hold all starting contents + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_SMALL * 7 //enough to hold all starting contents origin_tech = list(TECH_COMBAT = 1) attack_verb = list("robusted") @@ -80,13 +80,13 @@ new /obj/item/device/multitool(src) /obj/item/weapon/storage/toolbox/lunchbox - max_storage_space = 8 //slightly smaller than a toolbox + max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox name = "rainbow lunchbox" icon_state = "lunchbox_rainbow" item_state_slots = list(slot_r_hand_str = "toolbox_pink", slot_l_hand_str = "toolbox_pink") desc = "A little lunchbox. This one is the colors of the rainbow!" - w_class = 3 - max_w_class = 2 + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_SMALL var/filled = FALSE attack_verb = list("lunched") diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 9cbda62db7..c63430f033 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -4,7 +4,7 @@ storage_slots = 10 icon = 'icons/obj/wallet.dmi' icon_state = "wallet-orange" - w_class = 2 + w_class = ITEMSIZE_SMALL can_hold = list( /obj/item/weapon/spacecash, /obj/item/weapon/card, @@ -87,7 +87,7 @@ verbs |= /obj/item/weapon/storage/wallet/poly/proc/change_color color = "#"+get_random_colour() update_icon() - + /obj/item/weapon/storage/wallet/poly/proc/change_color() set name = "Change Wallet Color" set category = "Object" @@ -106,9 +106,14 @@ var/original_state = icon_state icon_state = "wallet-emp" update_icon() - + spawn(200) if(src) icon_state = original_state update_icon() - \ No newline at end of file + +/obj/item/weapon/storage/wallet/womens + name = "women's wallet" + desc = "A stylish wallet typically used by women." + icon_state = "girl_wallet" + item_state_slots = list(slot_r_hand_str = "wowallet", slot_l_hand_str = "wowallet") \ No newline at end of file diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index d92fcf1336..80d24df2a2 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -9,7 +9,7 @@ sharp = 0 edge = 0 throwforce = 7 - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 2) attack_verb = list("beaten") var/lightcolor = "#FF6A00" @@ -17,7 +17,7 @@ var/agonyforce = 60 var/status = 0 //whether the thing is on or not var/obj/item/weapon/cell/bcell = null - var/hitcost = 1000 //oh god why do power cells carry so much charge? We probably need to make a distinction between "industrial" sized power cells for APCs and power cells for everything else. + var/hitcost = 240 /obj/item/weapon/melee/baton/suicide_act(mob/user) user.visible_message("\The [user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") @@ -30,7 +30,7 @@ /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. ..() - bcell = new/obj/item/weapon/cell/high(src) + bcell = new/obj/item/weapon/cell/device(src) update_icon() return @@ -40,11 +40,15 @@ if(bcell.checked_use(chrgdeductamt)) return 1 else - status = 0 - update_icon() return 0 return null +/obj/item/weapon/melee/baton/proc/powercheck(var/chrgdeductamt) + if(bcell) + if(bcell.charge < chrgdeductamt) + status = 0 + update_icon() + /obj/item/weapon/melee/baton/update_icon() if(status) icon_state = "[initial(name)]_active" @@ -69,26 +73,31 @@ /obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user) if(istype(W, /obj/item/weapon/cell)) - if(!bcell) - user.drop_item() - W.loc = src - bcell = W - user << "You install a cell in [src]." - update_icon() + if(istype(W, /obj/item/weapon/cell/device)) + if(!bcell) + user.drop_item() + W.loc = src + bcell = W + user << "You install a cell in [src]." + update_icon() + else + user << "[src] already has a cell." else - user << "[src] already has a cell." + user << "This cell is not fitted for [src]." - else if(istype(W, /obj/item/weapon/screwdriver)) +/obj/item/weapon/melee/baton/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) if(bcell) bcell.update_icon() - bcell.loc = get_turf(src.loc) + user.put_in_hands(bcell) bcell = null user << "You remove the cell from the [src]." status = 0 update_icon() return ..() - return + else + return ..() /obj/item/weapon/melee/baton/attack_self(mob/user) if(bcell && bcell.charge > hitcost) @@ -149,6 +158,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target H.forcesay(hit_appends) + powercheck(hitcost) /obj/item/weapon/melee/baton/emp_act(severity) if(bcell) @@ -182,3 +192,17 @@ hitcost = 2500 attack_verb = list("poked") slot_flags = null + +/obj/item/weapon/melee/baton/cattleprod/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/cell)) + if(!istype(W, /obj/item/weapon/cell/device)) + if(!bcell) + user.drop_item() + W.loc = src + bcell = W + user << "You install a cell in [src]." + update_icon() + else + user << "[src] already has a cell." + else + user << "This cell is not fitted for [src]." \ No newline at end of file diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 7e96ad2c08..0c942bf486 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -18,7 +18,7 @@ icon_state = "retractor" matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000) flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) /* @@ -31,7 +31,7 @@ icon_state = "hemostat" matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500) flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("attacked", "pinched") @@ -45,7 +45,7 @@ icon_state = "cautery" matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500) flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("burnt") @@ -61,7 +61,7 @@ matter = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 10000) flags = CONDUCT force = 15.0 - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("drilled") @@ -82,7 +82,7 @@ force = 10.0 sharp = 1 edge = 1 - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS throwforce = 5.0 throw_speed = 3 @@ -137,7 +137,7 @@ hitsound = 'sound/weapons/circsawhit.ogg' flags = CONDUCT force = 15.0 - w_class = 3 + w_class = ITEMSIZE_NORMAL throwforce = 9.0 throw_speed = 3 throw_range = 5 @@ -153,7 +153,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "bone-gel" force = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 1.0 /obj/item/weapon/FixOVein @@ -163,7 +163,7 @@ force = 0 throwforce = 1.0 origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3) - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/usage_amount = 10 /obj/item/weapon/bonesetter @@ -174,5 +174,5 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL attack_verb = list("attacked", "hit", "bludgeoned") diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 2341df50ce..e1deceadde 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -36,7 +36,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "telebaton0" slot_flags = SLOT_BELT - w_class = 2 + w_class = ITEMSIZE_SMALL force = 3 var/on = 0 @@ -48,7 +48,7 @@ "You extend the baton.",\ "You hear an ominous click.") icon_state = "telebaton1" - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 15//quite robust attack_verb = list("smacked", "struck", "slapped") else @@ -56,7 +56,7 @@ "You collapse the baton.",\ "You hear a click.") icon_state = "telebaton0" - w_class = 2 + w_class = ITEMSIZE_SMALL force = 3//not so robust now attack_verb = list("hit", "punched") diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index fb9aa3eb41..490ae2d62b 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -11,7 +11,7 @@ item_state = "radio" name = "normal-sized package" desc = "A small wrapped package." - w_class = 3 + w_class = ITEMSIZE_NORMAL var/power = 1 /*Size of the explosion.*/ var/size = "small" /*Used for the icon, this one will make c-4small_0 for the off state.*/ diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 12a048ee07..41c78ecd3b 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -5,7 +5,7 @@ desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." icon_state = "jetpack" gauge_icon = null - w_class = 4.0 + w_class = ITEMSIZE_LARGE item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 85d1352703..83372ffa58 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -70,7 +70,7 @@ src.air_contents.adjust_multi("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD, "nitrogen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) return - + /* * Phoron */ @@ -111,7 +111,7 @@ gauge_cap = 4 flags = CONDUCT slot_flags = SLOT_BELT - w_class = 2.0 + w_class = ITEMSIZE_SMALL force = 4.0 distribute_pressure = ONE_ATMOSPHERE*O2STANDARD volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index dd3c4cff29..57a5cf06a4 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -14,7 +14,7 @@ var/list/global/tank_gauge_cache = list() flags = CONDUCT slot_flags = SLOT_BACK - w_class = 3 + w_class = ITEMSIZE_NORMAL pressure_resistance = ONE_ATMOSPHERE*5 diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 80b0dc5964..98d53bb586 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -3,7 +3,7 @@ desc = "A roll of sticky tape. Possibly for taping ducks... or was that ducts?" icon = 'icons/obj/bureaucracy.dmi' icon_state = "taperoll" - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/weapon/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user) if(istype(H)) @@ -83,7 +83,7 @@ desc = "A piece of sticky tape." icon = 'icons/obj/bureaucracy.dmi' icon_state = "tape" - w_class = 1 + w_class = ITEMSIZE_TINY layer = 4 anchored = 1 //it's sticky, no you cant move it diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index fdad2423fc..b27ef63a4a 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -17,12 +17,12 @@ var/broadcasting = null var/listening = 1.0 flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL item_state = "electronic" throw_speed = 4 throw_range = 20 - origin_tech = list(TECH_MAGNET = 1) - matter = list(DEFAULT_WALL_MATERIAL = 400) + origin_tech = list(TECH_MAGNET = 1) + matter = list(DEFAULT_WALL_MATERIAL = 400) /obj/item/weapon/locator/attack_self(mob/user as mob) user.set_machine(src) @@ -129,11 +129,11 @@ Frequency: icon_state = "hand_tele" item_state = "electronic" throwforce = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 3 throw_range = 5 - origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) - matter = list(DEFAULT_WALL_MATERIAL = 10000) + origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3) + matter = list(DEFAULT_WALL_MATERIAL = 10000) /obj/item/weapon/hand_tele/attack_self(mob/user as mob) var/turf/current_location = get_turf(user)//What turf is the user on? diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 98c7876811..c61ee90918 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -23,7 +23,7 @@ slot_flags = SLOT_BELT force = 6 throwforce = 7 - w_class = 2 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) matter = list(DEFAULT_WALL_MATERIAL = 150) attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -40,7 +40,7 @@ flags = CONDUCT slot_flags = SLOT_BELT | SLOT_EARS force = 6 - w_class = 1 + w_class = ITEMSIZE_TINY throwforce = 5 throw_speed = 3 throw_range = 5 @@ -103,7 +103,7 @@ force = 6 throw_speed = 2 throw_range = 9 - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) matter = list(DEFAULT_WALL_MATERIAL = 80) attack_verb = list("pinched", "nipped") @@ -144,7 +144,7 @@ throwforce = 5.0 throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL //Cost to make in the autolathe matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30) @@ -307,7 +307,7 @@ T.visible_message("\The [src] turns on.") src.force = 15 src.damtype = "fire" - src.w_class = 4 + src.w_class = ITEMSIZE_LARGE welding = 1 update_icon() processing_objects |= src @@ -380,14 +380,14 @@ /obj/item/weapon/weldingtool/hugetank name = "upgraded welding tool" max_fuel = 80 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 3) matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120) /obj/item/weapon/weldingtool/experimental name = "experimental welding tool" max_fuel = 40 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3) matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120) var/last_gen = 0 @@ -415,7 +415,7 @@ throwforce = 7 pry = 1 item_state = "crowbar" - w_class = 2 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_ENGINEERING = 1) matter = list(DEFAULT_WALL_MATERIAL = 50) attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") @@ -448,7 +448,7 @@ desc = "It even has one of those nubbins for doing the thingy." icon = 'icons/obj/items.dmi' icon_state = "combitool" - w_class = 2 + w_class = ITEMSIZE_SMALL var/list/spawn_tools = list( /obj/item/weapon/screwdriver, diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index d51cc8d1d0..5f66562c61 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -4,7 +4,7 @@ icon_state = "towel" slot_flags = SLOT_HEAD | SLOT_BELT | SLOT_OCLOTHING force = 3.0 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL attack_verb = list("whipped") hitsound = 'sound/weapons/towelwhip.ogg' desc = "A soft cotton towel." diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index 9c355356b3..e5a655d7f9 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -7,7 +7,7 @@ icon_state = "beartrap0" desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off." throwforce = 0 - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = "materials=1" matter = list(DEFAULT_WALL_MATERIAL = 18750) var/deployed = 0 diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index 624b6fcb98..ca32d730f3 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -10,7 +10,7 @@ throwforce = 10.0 throw_speed = 1 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL flags = CONDUCT matter = list(DEFAULT_WALL_MATERIAL = 3000) var/list/carrying = list() // List of things on the tray. - Doohl @@ -160,9 +160,9 @@ var/val = 0 // value to return for(var/obj/item/I in carrying) - if(I.w_class == 1.0) + if(I.w_class == ITEMSIZE_TINY) val ++ - else if(I.w_class == 2.0) + else if(I.w_class == ITEMSIZE_SMALL) val += 3 else val += 5 @@ -177,9 +177,9 @@ for(var/obj/item/I in loc) if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) var/add = 0 - if(I.w_class == 1.0) + if(I.w_class == ITEMSIZE_TINY) add = 1 - else if(I.w_class == 2.0) + else if(I.w_class == ITEMSIZE_SMALL) add = 3 else add = 5 @@ -199,11 +199,11 @@ /obj/item/weapon/tray/dropped(mob/user) var/noTable = null - + spawn() //Allows the tray to udpate location, rather than just checking against mob's location if(isturf(src.loc) && !(locate(/obj/structure/table) in src.loc)) noTable = 1 - + if(isturf(loc) && !(locate(/mob/living) in src.loc)) overlays.Cut() for(var/obj/item/I in carrying) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 0075b6cdfd..d604eca82c 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -8,7 +8,7 @@ throw_speed = 1 throw_range = 4 throwforce = 10 - w_class = 2 + w_class = ITEMSIZE_SMALL suicide_act(mob/user) viewers(user) << "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index e9b5fdb379..6a6d77521e 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -4,7 +4,7 @@ slot_flags = SLOT_BACK icon = 'icons/obj/storage.dmi' icon_state = "welderpack" - w_class = 4.0 + w_class = ITEMSIZE_LARGE var/max_fuel = 350 /obj/item/weapon/weldpack/New() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 2712d6de79..f4e7f4d056 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,6 +1,6 @@ /obj/structure icon = 'icons/obj/structures.dmi' - w_class = 10 + w_class = ITEMSIZE_NO_CONTAINER var/climbable var/breakable diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 6152c1dbd1..7da51f6a66 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -1,6 +1,7 @@ /obj/structure/sign/double/barsign icon = 'icons/obj/barsigns.dmi' icon_state = "empty" + appearance_flags = 0 anchored = 1 var/cult = 0 diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 964afb0527..5c3542015c 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -14,7 +14,7 @@ LINEN BINS throwforce = 1 throw_speed = 1 throw_range = 2 - w_class = 2.0 + w_class = ITEMSIZE_SMALL /obj/item/weapon/bedsheet/attack_self(mob/user as mob) user.drop_item() @@ -193,7 +193,7 @@ LINEN BINS sheets.Add(I) amount++ user << "You put [I] in [src]." - else if(amount && !hidden && I.w_class < 4) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. + else if(amount && !hidden && I.w_class < ITEMSIZE_LARGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. user.drop_item() I.loc = src hidden = I diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 107ea11520..e7f81877a8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/closet.dmi' icon_state = "closed" density = 1 - w_class = 5 + w_class = ITEMSIZE_HUGE var/icon_closed = "closed" var/icon_opened = "open" var/opened = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index be67e9b3ca..a7f526a2e3 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -1,5 +1,5 @@ /obj/structure/closet/secure_closet/captains - name = "station administrator's locker" + name = "colony director's locker" req_access = list(access_captain) icon_state = "capsecure1" icon_closed = "capsecure" @@ -121,6 +121,7 @@ new /obj/item/device/flash(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/cell/device(src) new /obj/item/clothing/accessory/holster/waist(src) new /obj/item/weapon/melee/telebaton(src) new /obj/item/clothing/head/beret/sec/corporate/hos(src) @@ -166,6 +167,7 @@ new /obj/item/weapon/reagent_containers/spray/pepper(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/cell/device(src) new /obj/item/weapon/storage/box/holobadge(src) new /obj/item/clothing/head/beret/sec/corporate/warden(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src) @@ -212,6 +214,7 @@ new /obj/item/clothing/under/rank/security/corp(src) new /obj/item/ammo_magazine/c45m/rubber(src) new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/weapon/cell/device(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src) new /obj/item/device/flashlight/maglight(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 0f5d5119bb..3dcdd0e85c 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -615,7 +615,7 @@ return /obj/structure/closet/wardrobe/captain - name = "station administrator's wardrobe" + name = "colony director's wardrobe" icon_state = "cabinet_closed" icon_closed = "cabinet_closed" icon_opened = "cabinet_open" @@ -637,4 +637,4 @@ new /obj/item/clothing/head/beret/centcom/captain(src) new /obj/item/clothing/under/gimmick/rank/captain/suit(src) new /obj/item/clothing/glasses/sunglasses(src) - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 5cdb49657a..931a990085 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -8,6 +8,7 @@ icon_opened = "crateopen" icon_closed = "crate" climbable = 1 + var/points_per_crate = 5 // mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? var/rigged = 0 @@ -240,6 +241,7 @@ icon_state = "plasticcrate" icon_opened = "plasticcrateopen" icon_closed = "plasticcrate" + points_per_crate = 1 //5 crates per ordered crate, +5 for the crate it comes in. /obj/structure/closet/crate/internals name = "internals crate" diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index cb7dac0684..bd39d82801 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -4,7 +4,7 @@ icon_state = "door_as_0" anchored = 0 density = 1 - w_class = 5 + w_class = ITEMSIZE_HUGE var/state = 0 var/base_icon_state = "" var/base_name = "airlock" diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index fc4a9c48ca..0ad1fb8404 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -200,3 +200,9 @@ /obj/structure/flora/ausbushes/fullgrass/New() ..() icon_state = "fullgrass_[rand(1, 3)]" + +/obj/structure/flora/skeleton + name = "hanging skeleton model" + icon = 'icons/obj/plants.dmi' + icon_state = "hangskele" + desc = "It's an anatomical model of a human skeletal system made of plaster." \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 52afecd66d..19f3b48076 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -3,7 +3,7 @@ anchored = 1 density = 1 layer = 2 - w_class = 5 + w_class = ITEMSIZE_HUGE var/state = 0 var/health = 200 var/cover = 50 //how much cover the girder provides against projectiles. diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 20b326ebc9..d6d25ffc0a 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -3,7 +3,7 @@ desc = "A folded membrane which rapidly expands into a large cubical shape on activation." icon = 'icons/obj/inflatable.dmi' icon_state = "folded_wall" - w_class = 3 + w_class = ITEMSIZE_NORMAL attack_self(mob/user) playsound(loc, 'sound/items/zip.ogg', 75, 1) @@ -248,8 +248,8 @@ desc = "Contains inflatable walls and doors." icon_state = "inf_box" item_state = "syringe_kit" - w_class = 3 - max_storage_space = 28 + w_class = ITEMSIZE_NORMAL + max_storage_space = ITEMSIZE_COST_NORMAL * 7 can_hold = list(/obj/item/inflatable) New() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b3ad998895..588517a7ed 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -291,4 +291,4 @@ desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." icon = 'icons/obj/vehicles.dmi' icon_state = "keys" - w_class = 1 + w_class = ITEMSIZE_TINY diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index eff0de4b48..5d01438614 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -5,7 +5,7 @@ icon_state = "latticefull" density = 0 anchored = 1.0 - w_class = 3 + w_class = ITEMSIZE_NORMAL layer = 2.3 //under pipes // flags = CONDUCT @@ -57,10 +57,11 @@ return if (istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - user << "Slicing lattice joints ..." - PoolOrNew(/obj/item/stack/rods, src.loc) - qdel(src) + if(WT.welding == 1) + if(WT.remove_fuel(0, user)) + user << "Slicing lattice joints ..." + PoolOrNew(/obj/item/stack/rods, src.loc) + qdel(src) return diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index c76ca1802d..db234a1a2e 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/janitor.dmi' icon_state = "mopbucket" density = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL pressure_resistance = 5 flags = OPENCONTAINER var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 5d5fc2d943..e8ce8bfb1c 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -4,7 +4,7 @@ opacity = 0 density = 0 layer = 3.5 - w_class = 3 + w_class = ITEMSIZE_NORMAL /obj/structure/sign/ex_act(severity) switch(severity) @@ -37,7 +37,7 @@ name = "sign" desc = "" icon = 'icons/obj/decals.dmi' - w_class = 3 //big + w_class = ITEMSIZE_NORMAL //big var/sign_state = "" /obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 73ceddb70f..a2e8e3f21b 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -226,7 +226,7 @@ desc = "A collapsed roller bed that can be carried around." icon = 'icons/obj/rollerbed.dmi' icon_state = "folded" - w_class = 4.0 // Can't be put in backpacks. Oh well. + w_class = ITEMSIZE_LARGE // Can't be put in backpacks. Oh well. /obj/item/roller/attack_self(mob/user) var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc) diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index e4d54f48ba..6592e51b29 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -8,7 +8,7 @@ var/global/list/stool_cache = list() //haha stool icon_state = "stool_preview" //set for the map force = 10 throwforce = 10 - w_class = 5 + w_class = ITEMSIZE_HUGE var/base_icon = "stool_base" var/material/material var/material/padding_material diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 0e7546f271..c13ae10e64 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -5,7 +5,7 @@ icon_state = "dispenser" density = 1 anchored = 1.0 - w_class = 5 + w_class = ITEMSIZE_HUGE var/oxygentanks = 10 var/phorontanks = 10 var/list/oxytanks = list() //sorry for the similar var names diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 68b10ccf7a..83396b363e 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "target_stake" density = 1 - w_class = 5 + w_class = ITEMSIZE_HUGE flags = CONDUCT var/obj/item/target/pinned_target // the current pinned target diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 3764386679..10c6ae08f1 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -16,7 +16,7 @@ obj/structure/windoor_assembly anchored = 0 density = 0 dir = NORTH - w_class = 3 + w_class = ITEMSIZE_NORMAL var/obj/item/weapon/airlock_electronics/electronics = null var/created_name = null diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c419de639d..15d6e32213 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -3,7 +3,7 @@ desc = "A window." icon = 'icons/obj/structures.dmi' density = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL layer = 3.2//Just above doors pressure_resistance = 4*ONE_ATMOSPHERE diff --git a/code/game/sound.dm b/code/game/sound.dm index fea1bdcb38..803a668761 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -45,9 +45,10 @@ var/list/clown_sound = list('sound/effects/clownstep1.ogg','sound/effects/clowns var/list/swing_hit_sound = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') +var/list/fracture_sound = list('sound/effects/bonebreak1.ogg','sound/effects/bonebreak2.ogg','sound/effects/bonebreak3.ogg','sound/effects/bonebreak4.ogg') //var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg') -/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global) +/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global, var/frequency) soundin = get_sfx(soundin) // same sound for everyone @@ -55,7 +56,7 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur error("[source] is an area and is trying to make the sound: [soundin]") return - var/frequency = get_rand_frequency() // Same frequency for everybody + frequency = isnull(frequency) ? get_rand_frequency() : frequency // Same frequency for everybody var/turf/turf_source = get_turf(source) // Looping through the player list has the added bonus of working for mobs inside containers @@ -175,5 +176,6 @@ var/const/FALLOFF_SOUNDS = 0.5 if ("swing_hit") soundin = pick(swing_hit_sound) if ("hiss") soundin = pick(hiss_sound) if ("pageturn") soundin = pick(page_sound) + if ("fracture") soundin = pick(fracture_sound) //if ("gunshot") soundin = pick(gun_sound) - return soundin \ No newline at end of file + return soundin diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 1217916312..e3b8e0d2ec 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -138,9 +138,8 @@ var/list/mechtoys = list( /datum/controller/supply //supply points var/points = 50 - var/points_per_process = 1 + var/points_per_process = 1.5 var/points_per_slip = 2 - var/points_per_crate = 5 var/points_per_platinum = 5 // 5 points per sheet var/points_per_phoron = 5 //control @@ -193,12 +192,13 @@ var/list/mechtoys = list( // Must be in a crate! if(istype(MA,/obj/structure/closet/crate)) - callHook("sell_crate", list(MA, area_shuttle)) + var/obj/structure/closet/crate/CR = MA + callHook("sell_crate", list(CR, area_shuttle)) - points += points_per_crate + points += CR.points_per_crate var/find_slip = 1 - for(var/atom in MA) + for(var/atom in CR) // Sell manifests var/atom/A = atom if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) @@ -247,6 +247,7 @@ var/list/mechtoys = list( var/i = rand(1,clear_turfs.len) var/turf/pickedloc = clear_turfs[i] clear_turfs.Cut(i,i+1) + shoppinglist -= S var/datum/supply_order/SO = S var/datum/supply_packs/SP = SO.object @@ -298,5 +299,4 @@ var/list/mechtoys = list( slip.info += "
    " slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
    " - shoppinglist.Cut() return diff --git a/code/game/turfs/space/cracked_asteroid.dm b/code/game/turfs/space/cracked_asteroid.dm new file mode 100644 index 0000000000..b9f43af82e --- /dev/null +++ b/code/game/turfs/space/cracked_asteroid.dm @@ -0,0 +1,16 @@ +// This is used to have vacuums inside the asteroid be more present. + +/turf/space/cracked_asteroid + icon = 'icons/turf/flooring/asteroid.dmi' + name = "cracked sand" + desc = "Rough sand with a huge crack. It probably leads out into the void." + icon_state = "asteroid_cracked" + dynamic_lighting = TRUE + +/turf/space/cracked_asteroid/is_space() // So people don't start floating when standing on it. + return FALSE + +/turf/space/cracked_asteroid/New() + ..() + spawn(2 SECONDS) + overlays.Cut() \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 9ab3828587..5af7056562 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -9,7 +9,7 @@ // heat_capacity = 700000 No. /turf/space/New() - if(!istype(src, /turf/space/transit)) + if(!istype(src, /turf/space/transit) && !istype(src, /turf/space/cracked_asteroid)) icon_state = "[((x + y) ^ ~(x * y) + z) % 25]" update_starlight() ..() diff --git a/code/global.dm b/code/global.dm index 746352df6c..99dcca0b37 100644 --- a/code/global.dm +++ b/code/global.dm @@ -118,6 +118,8 @@ var/join_motd = null var/datum/nanomanager/nanomanager = new() // NanoManager, the manager for Nano UIs. var/datum/event_manager/event_manager = new() // Event Manager, the manager for events. +var/datum/game_master/game_master = new() // Game Master, an AI for choosing events. +var/datum/metric/metric = new() // Metric datum, used to keep track of the round. var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to. diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 0c8268be1a..cf6cdbd6ac 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -198,7 +198,8 @@ var/list/admin_verbs_debug = list( /client/proc/dsay, /client/proc/toggle_debug_logs, /client/proc/admin_ghost, //allows us to ghost/reenter body at will, - /datum/admins/proc/view_runtimes + /datum/admins/proc/view_runtimes, + /client/proc/show_gm_status ) var/list/admin_verbs_paranoid_debug = list( @@ -309,7 +310,11 @@ var/list/admin_verbs_mod = list( /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, /client/proc/allow_character_respawn, // Allows a ghost to respawn , - /datum/admins/proc/sendFax + /datum/admins/proc/sendFax, + /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days, + /datum/admins/proc/view_txt_log, //shows the server log (diary) for today, + /datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently, + ) diff --git a/code/modules/admin/newbanjob.dm b/code/modules/admin/newbanjob.dm index b9f5c44298..a2cc2e6184 100644 --- a/code/modules/admin/newbanjob.dm +++ b/code/modules/admin/newbanjob.dm @@ -63,7 +63,7 @@ var/savefile/Banlistjob bantimestamp = CMinutes + minutes if(rank == "Heads") AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Personnel") - AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Administrator") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Colony Director") AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9b9aca72b3..bce3f9b23d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -262,7 +262,7 @@ id.icon_state = "gold" id.access = get_all_accesses() id.registered_name = H.real_name - id.assignment = "Station Administrator" + id.assignment = "Colony Director" id.name = "[id.registered_name]'s ID Card ([id.assignment])" H.equip_to_slot_or_del(id, slot_wear_id) H.update_inv_wear_id() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 479bbed53f..9587984177 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "" flags = CONDUCT - w_class = 2.0 + w_class = ITEMSIZE_SMALL matter = list(DEFAULT_WALL_MATERIAL = 100) throwforce = 2 throw_speed = 3 diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index a78126bedc..e41576020e 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/tank.dmi' item_state = "assembly" throwforce = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL throw_speed = 2 throw_range = 4 flags = CONDUCT | PROXMOVE diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 021216f218..a614135f22 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -5,7 +5,7 @@ item_state = "assembly" flags = CONDUCT | PROXMOVE throwforce = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 3 throw_range = 10 diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 8ba62cdc37..edbe0e7491 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -5,7 +5,7 @@ var/obj/item/clothing/head/helmet/part1 = null var/obj/item/device/radio/electropack/part2 = null var/status = 0 - w_class = 5.0 + w_class = ITEMSIZE_HUGE flags = CONDUCT /obj/item/assembly/shock_kit/Destroy() diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index c5a67ad920..72d8978573 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -24,10 +24,22 @@ display_name = "armband, medical" path = /obj/item/clothing/accessory/armband/med +/datum/gear/accessory/medical/cross + display_name = "armband, medic" + path = /obj/item/clothing/accessory/armband/med/cross + /datum/gear/accessory/science display_name = "armband, science" path = /obj/item/clothing/accessory/armband/science +/datum/gear/accessory/colored + display_name = "armband" + path = /obj/item/clothing/accessory/armband/med/color + +/datum/gear/accessory/colored/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + /datum/gear/accessory/wallet display_name = "wallet, orange" path = /obj/item/weapon/storage/wallet/random @@ -36,10 +48,36 @@ display_name = "wallet, polychromic" path = /obj/item/weapon/storage/wallet/poly +/datum/gear/accessory/wallet/womens + display_name = "wallet, womens" + path = /obj/item/weapon/storage/wallet/womens + +/datum/gear/accessory/wallet/womens/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/accessory/clutch + display_name = "clutch bag" + path = /obj/item/weapon/storage/briefcase/clutch + cost = 2 + +/datum/gear/accessory/clutch/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/accessory/purse + display_name = "purse" + path = /obj/item/weapon/storage/backpack/purse + cost = 3 + +/datum/gear/accessory/purse/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + /datum/gear/accessory/holster display_name = "holster, armpit" path = /obj/item/clothing/accessory/holster/armpit - allowed_roles = list("Station Administrator", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective") + allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective") /datum/gear/accessory/holster/hip display_name = "holster, hip" diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm index e8b2202ddf..d8757927b0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -50,7 +50,7 @@ /datum/gear/eyes/shades display_name = "Sunglasses, fat (Security/Command)" path = /obj/item/clothing/glasses/sunglasses/big - allowed_roles = list("Security Officer","Head of Security","Warden","Station Administrator","Head of Personnel","Quartermaster","Internal Affairs Agent","Detective") + allowed_roles = list("Security Officer","Head of Security","Warden","Colony Director","Head of Personnel","Quartermaster","Internal Affairs Agent","Detective") /datum/gear/eyes/glasses/fakesun display_name = "Sunglasses, stylish" diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 6220a01c81..72bd4a0817 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -122,6 +122,14 @@ path = /obj/item/clothing/head/cowboy_hat cost = 3 +/datum/gear/head/fedora + display_name = "fedora, brown" + path = /obj/item/clothing/head/fedora/brown + +/datum/gear/head/fedora/grey + display_name = "fedora, grey" + path = /obj/item/clothing/head/fedora/grey + /datum/gear/head/hairflower display_name = "hair flower pin, red" path = /obj/item/clothing/head/hairflower diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm index 29d6b5944e..1cb3ac149e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -123,4 +123,12 @@ /datum/gear/shoes/skater/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) \ No newline at end of file + gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/shoes/flats/color + display_name = "flats" + path = /obj/item/clothing/shoes/flats/white/color + +/datum/gear/shoes/flats/color/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index f3f97a4c5d..7305d4c5b9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -28,24 +28,40 @@ /datum/gear/suit/leather_jacket display_name = "leather jacket, black" - path = /obj/item/clothing/suit/storage/leather_jacket + path = /obj/item/clothing/suit/storage/toggle/leather_jacket + +/datum/gear/suit/leather_jacket_sleeveless + display_name = "leather vest, black" + path = /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless /datum/gear/suit/leather_jacket_alt display_name = "leather jacket 2, black" - path = /obj/item/clothing/suit/storage/leather_jacket/alt + path = /obj/item/clothing/suit/storage/leather_jacket_alt /datum/gear/suit/leather_jacket_nt display_name = "leather jacket, corporate, black" - path = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen + path = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen + +/datum/gear/suit/leather_jacket_nt/sleeveless + display_name = "leather vest, corporate, black" + path = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless /datum/gear/suit/brown_jacket display_name = "leather jacket, brown" path = /obj/item/clothing/suit/storage/toggle/brown_jacket +/datum/gear/suit/brown_jacket_sleeveless + display_name = "leather vest, brown" + path = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless + /datum/gear/suit/brown_jacket_nt display_name = "leather jacket, corporate, brown" path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen +/datum/gear/suit/brown_jacket_nt/sleeveless + display_name = "leather vest, corporate, brown" + path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless + /datum/gear/suit/mil display_name = "military jacket" path = /obj/item/clothing/suit/storage/miljacket @@ -58,6 +74,18 @@ display_name = "military jacket, green" path = /obj/item/clothing/suit/storage/miljacket/green +/datum/gear/suit/greyjacket + display_name = "grey jacket" + path = /obj/item/clothing/suit/storage/greyjacket + +/datum/gear/suit/brown_trenchcoat + display_name = "trenchcoat, brown" + path = /obj/item/clothing/suit/storage/trench + +/datum/gear/suit/grey_trenchcoat + display_name = "trenchcoat, grey" + path = /obj/item/clothing/suit/storage/trench/grey + /datum/gear/suit/hazard_vest display_name = "hazard vest" path = /obj/item/clothing/suit/storage/hazardvest @@ -230,9 +258,9 @@ path = /obj/item/clothing/suit/storage/hooded/wintercoat /datum/gear/suit/wintercoat/captain - display_name = "winter coat, station administrator" + display_name = "winter coat, colony director" path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain - allowed_roles = list("Station Administrator") + allowed_roles = list("Colony Director") /datum/gear/suit/wintercoat/security display_name = "winter coat, security" @@ -312,4 +340,20 @@ /datum/gear/suit/flannel/brown display_name = "brown flannel" - path = /obj/item/clothing/suit/storage/flannel/brown \ No newline at end of file + path = /obj/item/clothing/suit/storage/flannel/brown + +/datum/gear/suit/denim_jacket + display_name = "denim jacket" + path = /obj/item/clothing/suit/storage/toggle/denim_jacket + +/datum/gear/suit/denim_jacket/corporate + display_name = "denim jacket, corporate" + path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen + +/datum/gear/suit/denim_vest + display_name = "denim vest" + path = /obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless + +/datum/gear/suit/denim_vest/corporate + display_name = "denim vest, corporate" + path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index c79d4d31b2..509c3a1d16 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -284,9 +284,9 @@ path = /obj/item/clothing/under/dress/dress_fire /datum/gear/uniform/uniform_captain - display_name = "uniform, station administrator's dress" + display_name = "uniform, colony director's dress" path = /obj/item/clothing/under/dress/dress_cap - allowed_roles = list("Station Administrator") + allowed_roles = list("Colony Director") /datum/gear/uniform/corpdetsuit display_name = "uniform, corporate (Detective)" @@ -380,4 +380,4 @@ /datum/gear/uniform/dresses/janimaid display_name = "maid uniform" - path = /obj/item/clothing/under/dress/janimaid \ No newline at end of file + path = /obj/item/clothing/under/dress/janimaid diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 40071651c6..a762bf50f1 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -11,6 +11,7 @@ icon_state = copy.icon_state item_state = copy.item_state body_parts_covered = copy.body_parts_covered + flags_inv = copy.flags_inv item_icons = copy.item_icons.Copy() if(copy.item_state_slots) //Runtime prevention for backpacks @@ -363,15 +364,14 @@ name = "desert eagle" desc = "A hologram projector in the shape of a gun. There is a dial on the side to change the gun's disguise." icon_state = "deagle" - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) matter = list() fire_sound = 'sound/weapons/Gunshot.ogg' projectile_type = /obj/item/projectile/chameleon charge_meter = 0 - charge_cost = 20 //uses next to no power, since it's just holograms - max_shots = 50 + charge_cost = 48 //uses next to no power, since it's just holograms var/obj/item/projectile/copy_projectile var/global/list/gun_choices diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ec3a210e4e..a1c2b930ae 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -111,7 +111,7 @@ // Ears: headsets, earmuffs and tiny objects /obj/item/clothing/ears name = "ears" - w_class = 1.0 + w_class = ITEMSIZE_TINY throwforce = 2 slot_flags = SLOT_EARS sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ears.dmi') @@ -157,7 +157,7 @@ /obj/item/clothing/ears/offear name = "Other ear" - w_class = 5.0 + w_class = ITEMSIZE_HUGE icon = 'icons/mob/screen1_Midnight.dmi' icon_state = "block" slot_flags = SLOT_EARS | SLOT_TWOEARS @@ -177,7 +177,7 @@ slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', ) gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = 2.0 + w_class = ITEMSIZE_SMALL icon = 'icons/obj/clothing/gloves.dmi' siemens_coefficient = 0.75 var/wired = 0 @@ -237,7 +237,7 @@ ) body_parts_covered = HEAD slot_flags = SLOT_HEAD - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/light_overlay = "helmet_light" var/light_applied @@ -461,13 +461,14 @@ slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" siemens_coefficient = 0.9 - w_class = 3 + w_class = ITEMSIZE_NORMAL sprite_sheets = list( "Teshari" = 'icons/mob/species/seromi/suit.dmi' ) - valid_accessory_slots = list("over") + valid_accessory_slots = list("over", "armband") + restricted_accessory_slots = list("armband") /obj/item/clothing/suit/update_clothing_icon() if (ismob(src.loc)) @@ -487,7 +488,7 @@ permeability_coefficient = 0.90 slot_flags = SLOT_ICLOTHING armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - w_class = 3 + w_class = ITEMSIZE_NORMAL show_messages = 1 var/has_sensor = 1 //For the crew computer 2 = unable to change mode diff --git a/code/modules/clothing/ears/ears.dm b/code/modules/clothing/ears/ears.dm index 151b581f5c..e6cc1e0983 100644 --- a/code/modules/clothing/ears/ears.dm +++ b/code/modules/clothing/ears/ears.dm @@ -44,7 +44,7 @@ name = "skrell tentacle wear" desc = "Some stuff worn by skrell to adorn their head tentacles." icon = 'icons/obj/clothing/ears.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS species_restricted = list("Skrell") diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 27fb0e0fa4..904a946b5b 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -14,7 +14,7 @@ BLIND // can't see anything /obj/item/clothing/glasses name = "glasses" icon = 'icons/obj/clothing/glasses.dmi' - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_EYES var/vision_flags = 0 var/darkness_view = 0//Base human is 2 @@ -226,7 +226,7 @@ BLIND // can't see anything icon = 'icons/obj/bureaucracy.dmi' icon_state = "tape_cross" item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/clothing/glasses/sunglasses/prescription name = "prescription sunglasses" @@ -235,7 +235,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/sunglasses/big desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks many flashes." icon_state = "bigsunglasses" - + /obj/item/clothing/glasses/fakesunglasses //Sunglasses without flash immunity desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes." name = "stylish sunglasses" @@ -267,6 +267,7 @@ BLIND // can't see anything toggleable = 1 action_button_name = "Toggle Goggles" vision_flags = SEE_MOBS + see_invisible = INVISIBILITY_LEVEL_TWO emp_act(severity) if(istype(src.loc, /mob/living/carbon/human)) diff --git a/code/modules/clothing/gloves/arm_guards.dm b/code/modules/clothing/gloves/arm_guards.dm index 2108cd48e8..7fe17dd758 100644 --- a/code/modules/clothing/gloves/arm_guards.dm +++ b/code/modules/clothing/gloves/arm_guards.dm @@ -4,7 +4,7 @@ body_parts_covered = HANDS|ARMS slowdown = 0.5 overgloves = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL /obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) if(..()) //This will only run if no other problems occured when equiping. diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 1237899794..6360f864e0 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -1,6 +1,6 @@ /obj/item/clothing/gloves/captain desc = "Regal blue gloves, with a nice gold trim. Swanky." - name = "station administrator's gloves" + name = "colony director's gloves" icon_state = "captain" item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue") @@ -43,7 +43,7 @@ siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC) permeability_coefficient = 0.01 germ_level = 0 - + /obj/item/clothing/gloves/botanic_leather desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." name = "botanist's leather gloves" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index fe6432796c..ca7ca8aedd 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -44,7 +44,7 @@ body_parts_covered = 0 /obj/item/clothing/head/collectable/captain - name = "collectable station administrator's hat" + name = "collectable colony director's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" body_parts_covered = 0 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 4548b41a24..86023f5202 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -10,7 +10,7 @@ heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 - w_class = 3 + w_class = ITEMSIZE_NORMAL ear_protection = 1 /obj/item/clothing/head/helmet/riot diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index ea98256925..e907e77d77 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -7,13 +7,13 @@ //Captain /obj/item/clothing/head/caphat - name = "station administrator's hat" + name = "colony director's hat" icon_state = "captain" desc = "It's good being the king." body_parts_covered = 0 /obj/item/clothing/head/caphat/cap - name = "station administrator's cap" + name = "colony director's cap" desc = "You fear to wear it for the negligence it brings." icon_state = "capcap" @@ -190,4 +190,4 @@ /obj/item/clothing/head/surgery/navyblue desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue." icon_state = "surgcap_navyblue" - item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") \ No newline at end of file + item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy") diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index a8305dd9ac..591a77db2b 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -207,6 +207,18 @@ item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") desc = "A sharp, stylish hat." +/obj/item/clothing/head/fedora/brown + name = "fedora" + desc = "A brown fedora - either the cornerstone of a reporter's style or a poor attempt at looking cool, depending on the person wearing it." + icon_state = "detective" + allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) + +/obj/item/clothing/head/fedora/grey + icon_state = "detective2" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + desc = "A grey fedora - either the cornerstone of a reporter's style or a poor attempt at looking cool, depending on the person wearing it." + + /obj/item/clothing/head/feathertrilby name = "feather trilby" icon_state = "feather_trilby" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 1ea5376d6a..0fed75c822 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -23,7 +23,7 @@ body_parts_covered = HEAD|FACE|EYES action_button_name = "Flip Welding Mask" siemens_coefficient = 0.9 - w_class = 3 + w_class = ITEMSIZE_NORMAL var/base_state /obj/item/clothing/head/welding/attack_self() @@ -122,7 +122,7 @@ body_parts_covered = HEAD|FACE|EYES brightness_on = 2 light_overlay = "helmet_light" - w_class = 3 + w_class = ITEMSIZE_NORMAL /* * Kitty ears diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 3dabeb99d6..978a5c13e6 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -5,7 +5,7 @@ item_state_slots = list(slot_r_hand_str = "bandblack", slot_l_hand_str = "bandblack") flags_inv = HIDEFACE|BLOCKHAIR body_parts_covered = FACE|HEAD - w_class = 2 + w_class = ITEMSIZE_SMALL sprite_sheets = list( "Tajara" = 'icons/mob/species/tajaran/mask.dmi', "Unathi" = 'icons/mob/species/unathi/mask.dmi', @@ -17,7 +17,7 @@ icon_state = "swatclava" item_state_slots = list(slot_r_hand_str = "bandgreen", slot_l_hand_str = "bandgreen") flags_inv = HIDEFACE|BLOCKHAIR - w_class = 2 + w_class = ITEMSIZE_SMALL sprite_sheets = list( "Tajara" = 'icons/mob/species/tajaran/mask.dmi', "Unathi" = 'icons/mob/species/unathi/mask.dmi', @@ -29,7 +29,7 @@ icon_state = "luchag" flags_inv = HIDEFACE|BLOCKHAIR body_parts_covered = HEAD|FACE - w_class = 2 + w_class = ITEMSIZE_SMALL siemens_coefficient = 3.0 /obj/item/clothing/mask/luchador/tecnicos diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 7568d53b74..f03684931d 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -5,7 +5,7 @@ item_state_slots = list(slot_r_hand_str = "breath", slot_l_hand_str = "breath") item_flags = AIRTIGHT|FLEXIBLEMATERIAL body_parts_covered = FACE - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 var/hanging = 0 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index ad7c9928d2..e675611390 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -5,7 +5,7 @@ item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT flags_inv = HIDEEARS|HIDEEYES|HIDEFACE body_parts_covered = FACE|EYES - w_class = 3.0 + w_class = ITEMSIZE_NORMAL item_state_slots = list(slot_r_hand_str = "gas_alt", slot_l_hand_str = "gas_alt") gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index fe0cfdebaa..3e8c9de370 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -3,7 +3,7 @@ desc = "To stop that awful noise." icon_state = "muzzle" body_parts_covered = FACE - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.90 voicechange = 1 @@ -13,7 +13,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "tape_cross" item_state_slots = list(slot_r_hand_str = null, slot_l_hand_str = null) - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/clothing/mask/muzzle/New() ..() @@ -31,7 +31,7 @@ desc = "A sterile mask designed to help prevent the spread of diseases." icon_state = "sterile" item_state_slots = list(slot_r_hand_str = "sterile", slot_l_hand_str = "sterile") - w_class = 2 + w_class = ITEMSIZE_SMALL body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL gas_transfer_coefficient = 0.90 @@ -85,7 +85,7 @@ icon_state = "blueneckscarf" body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.90 /obj/item/clothing/mask/redscarf @@ -94,7 +94,7 @@ icon_state = "redwhite_scarf" body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.90 /obj/item/clothing/mask/greenscarf @@ -103,7 +103,7 @@ icon_state = "green_scarf" body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.90 /obj/item/clothing/mask/ninjascarf @@ -112,7 +112,7 @@ icon_state = "ninja_scarf" body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL - w_class = 2 + w_class = ITEMSIZE_SMALL gas_transfer_coefficient = 0.90 siemens_coefficient = 0 @@ -121,7 +121,7 @@ desc = "A rubber pig mask." icon_state = "pig" flags_inv = HIDEFACE|BLOCKHAIR - w_class = 2 + w_class = ITEMSIZE_SMALL siemens_coefficient = 0.9 body_parts_covered = HEAD|FACE|EYES @@ -131,7 +131,7 @@ icon_state = "horsehead" flags_inv = HIDEFACE|BLOCKHAIR body_parts_covered = HEAD|FACE|EYES - w_class = 2 + w_class = ITEMSIZE_SMALL siemens_coefficient = 0.9 /obj/item/clothing/mask/horsehead/New() @@ -174,7 +174,7 @@ /obj/item/clothing/mask/bandana name = "black bandana" desc = "A fine black bandana with nanotech lining." - w_class = 1 + w_class = ITEMSIZE_TINY flags_inv = HIDEFACE slot_flags = SLOT_MASK icon_state = "bandblack" diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index 9d0651d5ba..9b0c94ca03 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -3,7 +3,6 @@ name = "display monitor" desc = "A rather clunky old CRT-style display screen, fit for mounting on an optical output." - flags_inv = HIDEFACE|HIDEEYES body_parts_covered = FACE dir = SOUTH diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 43bcce5e51..2dea9bd124 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -61,6 +61,10 @@ icon_state = "flatswhite" item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") +/obj/item/clothing/shoes/flats/white/color + name = "flats" + desc = "Sleek flats." + /obj/item/clothing/shoes/flats/red name = "red flats" desc = "Ruby red flats." diff --git a/code/modules/clothing/shoes/leg_guards.dm b/code/modules/clothing/shoes/leg_guards.dm index 640b6c2e06..786ded8a62 100644 --- a/code/modules/clothing/shoes/leg_guards.dm +++ b/code/modules/clothing/shoes/leg_guards.dm @@ -4,7 +4,7 @@ body_parts_covered = LEGS|FEET slowdown = SHOES_SLOWDOWN+0.5 species_restricted = null //Unathi and Taj can wear leg armor now - w_class = 3 + w_class = ITEMSIZE_NORMAL /obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) if(..()) //This will only run if no other problems occured when equiping. diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index fd8e5c7c40..a8109493c7 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -168,7 +168,7 @@ icon_state = "slippers" force = 0 species_restricted = null - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/clothing/shoes/slippers_worn name = "worn bunny slippers" @@ -176,7 +176,7 @@ icon_state = "slippers_worn" item_state_slots = list(slot_r_hand_str = "slippers", slot_l_hand_str = "slippers") force = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/clothing/shoes/laceup name = "laceup shoes" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index f9884846ee..c3c30ae381 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -10,10 +10,10 @@ //Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it. /obj/item/clothing/suit/armor/captain - name = "Station Administrator's armor" + name = "Colony Director's armor" desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" icon_state = "caparmor" - w_class = 5 + w_class = ITEMSIZE_HUGE gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE @@ -80,7 +80,7 @@ name = "pirate coat" desc = "Yarr." icon_state = "pirate" - w_class = 3 + w_class = ITEMSIZE_NORMAL allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm index 2ef9810c58..f95a1f9460 100644 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm @@ -168,7 +168,7 @@ /obj/item/rig_module/self_destruct name = "self-destruct module" - desc = "Oh my God, Station Administrator. A bomb." + desc = "Oh my God, a bomb!" icon_state = "deadman" usable = 1 active = 1 diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 23a5a69039..0bd14ef9d1 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -14,7 +14,7 @@ slot_flags = SLOT_BACK req_one_access = list() req_access = list() - w_class = 5 + w_class = ITEMSIZE_HUGE action_button_name = "Toggle Heatsink" // These values are passed on to all component pieces. diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 942921b0e9..b66ff5334a 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -46,7 +46,7 @@ name = "Space suit" desc = "A suit that protects against low pressure environments. \""+station_short+"\" is written in large block letters on the back." icon_state = "space" - w_class = 5 // So you can't fit this in your bag and be prepared at all times. + w_class = ITEMSIZE_HUGE // So you can't fit this in your bag and be prepared at all times. gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 20ee7ddc04..7c8cfdaba2 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -10,7 +10,7 @@ name = "red space suit" icon_state = "syndicate" desc = "A crimson spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." - w_class = 3 + w_class = ITEMSIZE_NORMAL allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) @@ -37,7 +37,7 @@ name = "dark green space suit" desc = "A dark green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious." icon_state = "syndicate-green-dark" - + //Orange syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/orange name = "orange space helmet" @@ -119,7 +119,7 @@ name = "black and red space helmet" desc = "A black helmet sporting a single red stripe and durable plating. Engineered to look menacing." icon_state = "syndicate-helm-black-red" - + /obj/item/clothing/suit/space/syndicate/black/red name = "black and red space suit" desc = "A black spacesuit sporting red stripes and durable plating. Robust, reliable, and slightly suspicious." diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 9e1e3513cc..06d376f26a 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -16,7 +16,7 @@ desc = "An advanced suit that protects against injuries during special operations. Property of Gorlex Marauders." item_state_slots = list(slot_r_hand_str = "syndie_voidsuit", slot_l_hand_str = "syndie_voidsuit") slowdown = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) siemens_coefficient = 0.6 diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index fd03c3cbe4..fa4195afa1 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -97,6 +97,16 @@ allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton) siemens_coefficient = 0.7 +/obj/item/clothing/head/helmet/space/void/security/riot + name = "crowd control voidsuit helmet" + icon_state = "rig0-sec_riot" + item_state_slots = list(slot_r_hand_str = "sec_helm_riot", slot_l_hand_str = "sec_helm_riot") + +/obj/item/clothing/suit/space/void/security/riot + name = "crowd control voidsuit" + icon_state = "rig-sec_riot" + item_state_slots = list(slot_r_hand_str = "sec_voidsuit_riot", slot_l_hand_str = "sec_voidsuit_riot") + //Atmospherics /obj/item/clothing/head/helmet/space/void/atmos desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding." diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm index 4c2318355f..d39f553aea 100644 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ b/code/modules/clothing/spacesuits/void/wizard.dm @@ -17,7 +17,7 @@ desc = "A bizarre gem-encrusted suit that radiates magical energies." item_state_slots = list(slot_r_hand_str = "wiz_voidsuit", slot_l_hand_str = "wiz_voidsuit") slowdown = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL unacidable = 1 armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.7 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 648cf07a41..6745208210 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -124,7 +124,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1 - w_class = 5 + w_class = ITEMSIZE_HUGE armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS @@ -324,6 +324,7 @@ /obj/item/clothing/suit/storage/vest/press name = "press vest" + icon_state = "pvest" desc = "A simple kevlar plate carrier. This one has the word 'Press' embroidered on patches on the back and front." item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor") allowed = list(/obj/item/device/flashlight,/obj/item/device/taperecorder,/obj/item/weapon/pen,/obj/item/device/camera_film,/obj/item/device/camera) @@ -384,7 +385,7 @@ desc = "A suit that protects against some damage." icon_state = "centcom" item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor") - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -394,14 +395,14 @@ /obj/item/clothing/suit/armor/heavy name = "heavy armor" - desc = "A heavily armored suit that protects against moderate damage." + desc = "An old military-grade suit of armor. Incredibly robust against brute force damage! However, it offers little protection from energy-based weapons, which, combined with its bulk, makes it woefully obsolete." icon_state = "heavy" item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) - w_class = 4//bulky item + armor = list(melee = 90, bullet = 80, laser = 10, energy = 10, bomb = 80, bio = 0, rad = 0) + w_class = ITEMSIZE_HUGE // Very bulky, very heavy. gas_transfer_coefficient = 0.90 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - slowdown = 3 + slowdown = 5 // If you're a tank you're gonna move like a tank. flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 0 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 227414b0e4..51b05d1526 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -13,7 +13,7 @@ name = "bio suit" desc = "A suit that protects against biological contamination." icon_state = "bio" - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 0260142abb..0d65b31656 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -14,15 +14,15 @@ //Captain /obj/item/clothing/suit/captunic - name = "station administrator's parade tunic" - desc = "Worn by a Station Administrator to show their class." + name = "colony director's parade tunic" + desc = "Worn by a Colony Director to show their class." icon_state = "captunic" body_parts_covered = UPPER_TORSO|ARMS flags_inv = HIDEJUMPSUIT /obj/item/clothing/suit/captunic/capjacket - name = "station administrator's uniform jacket" - desc = "A less formal jacket for everyday Station Administrator use." + name = "colony director's uniform jacket" + desc = "A less formal jacket for everyday Colony Director use." icon_state = "capjacket" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT @@ -199,4 +199,4 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here - body_parts_covered = 0 \ No newline at end of file + body_parts_covered = 0 diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 2dc9e22404..6f93a4acb7 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -128,7 +128,7 @@ name = "red space suit replica" icon_state = "syndicate" desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" - w_class = 3 + w_class = ITEMSIZE_NORMAL allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET @@ -180,6 +180,71 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO flags_inv = HIDEJUMPSUIT +/obj/item/clothing/suit/skeleton + name = "skeleton costume" + desc = "A body-tight costume with the human skeleton lined out on it." + icon_state = "skelecost" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|FEET|HANDS|EYES|HEAD|FACE + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDEGLOVES + item_state_slots = list(slot_r_hand_str = "judge", slot_l_hand_str = "judge") + +/obj/item/clothing/suit/engicost + name = "sexy engineering voidsuit costume" + desc = "It's supposed to look like an engineering voidsuit... It doesn't look like it could protect from much radiation." + icon_state = "engicost" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET + flags_inv = HIDEJUMPSUIT|HIDESHOES + item_state_slots = list(slot_r_hand_str = "eng_voidsuit", slot_l_hand_str = "eng_voidsuit") + +/obj/item/clothing/suit/maxman + name = "doctor maxman costume" + desc = "A costume made to look like Dr. Maxman, the famous male-enhancement salesman. Complete with red do-rag and sleeveless labcoat." + icon_state = "maxman" + body_parts_covered = LOWER_TORSO|FEET|LEGS|HEAD + flags_inv = HIDEJUMPSUIT|HIDESHOES + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/iasexy + name = "sexy internal affairs suit" + desc = "Now where's your pen?~..." + icon_state = "iacost" + body_parts_covered = UPPER_TORSO|FEET|LOWER_TORSO|EYES + flags_inv = HIDEJUMPSUIT|HIDESHOES + item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black") + +/obj/item/clothing/suit/sexyminer + name = "sexy miner costume" + desc = "For when you need to get your rocks off." + icon_state = "sexyminer" + body_parts_covered = FEET|LOWER_TORSO|HEAD + flags_inv = HIDEJUMPSUIT|HIDESHOES + item_state_slots = list(slot_r_hand_str = "miner", slot_l_hand_str = "miner") + +/obj/item/clothing/suit/sumo + name = "inflatable sumo wrestler costume" + desc = "An inflated sumo wrestler costume. It's quite hot." + icon_state = "sumo" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS + flags_inv = HIDESHOES + item_state_slots = list(slot_r_hand_str = "classicponcho", slot_l_hand_str = "classicponcho") + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + +/obj/item/clothing/suit/hackercost + name = "classic hacker costume" + desc = "You would feel insanely cool wearing this." + icon_state = "hackercost" + body_parts_covered = FEET|LOWER_TORSO|UPPER_TORSO|LEGS|ARMS|EYES + flags_inv = HIDESHOES + item_state_slots = list(slot_r_hand_str = "leather_coat", slot_l_hand_str = "leather_coat") + +/obj/item/clothing/suit/lumber + name = "sexy lumberjack costume" + desc = "Smells of dusky pine. Includes chest hair and beard." + icon_state = "sexylumber" + body_parts_covered = FEET|LOWER_TORSO|FEET + flags_inv = HIDESHOES|HIDEJUMPSUIT + item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat") + /* * Misc */ @@ -233,6 +298,24 @@ icon_state = "customs_jacket" item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue") +/obj/item/clothing/suit/storage/greyjacket + name = "grey jacket" + desc = "A fancy twead grey jacket." + icon_state = "gentlecoat" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/storage/trench + name = "brown trenchcoat" + desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat appears to have its kevlar lining removed." + icon_state = "detective" + blood_overlay_type = "coat" + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) + +/obj/item/clothing/suit/storage/trench/grey + name = "grey trenchcoat" + icon_state = "detective2" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + /* * stripper */ @@ -312,20 +395,44 @@ min_cold_protection_temperature = T0C - 20 siemens_coefficient = 0.7 -/obj/item/clothing/suit/storage/leather_jacket +/obj/item/clothing/suit/storage/toggle/leather_jacket name = "leather jacket" desc = "A black leather coat." icon_state = "leather_jacket" + icon_open = "leather_jacket_open" allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) body_parts_covered = UPPER_TORSO|ARMS -/obj/item/clothing/suit/storage/leather_jacket/alt - icon_state = "leather_jacket_alt" +/obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless + name = "leather vest" + desc = "A black leather vest." + icon_state = "leather_jacket_sleeveless" + icon_open = "leather_jacket_sleeveless_open" + icon_closed = "leather_jacket_sleeveless" + body_parts_covered = UPPER_TORSO item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") -/obj/item/clothing/suit/storage/leather_jacket/nanotrasen +/obj/item/clothing/suit/storage/leather_jacket_alt + name = "leather vest" + desc = "A black leather vest." + icon_state = "leather_jacket_alt" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen desc = "A black leather coat. A corporate logo is proudly displayed on the back." icon_state = "leather_jacket_nt" + icon_closed = "leather_jacket_nt" + icon_open = "leather_jacket_nt_open" + item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") + +/obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless + name = "leather vest" + desc = "A black leather vest. A corporate logo is proudly displayed on the back." + icon_state = "leather_jacket_nt_sleeveless" + icon_open = "leather_jacket_nt_sleeveless_open" + icon_closed = "leather_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket") //This one has buttons for some reason @@ -339,6 +446,15 @@ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) body_parts_covered = UPPER_TORSO|ARMS +/obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless + name = "brown vest" + desc = "A brown leather vest." + icon_state = "brown_jacket_sleeveless" + icon_open = "brown_jacket_sleeveless_open" + icon_closed = "brown_jacket_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen desc = "A brown leather coat. A corporate logo is proudly displayed on the back." icon_state = "brown_jacket_nt" @@ -346,6 +462,50 @@ icon_open = "brown_jacket_nt_open" icon_closed = "brown_jacket_nt" +/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless + name = "brown vest" + desc = "A brown leather vest. A corporate logo is proudly displayed on the back." + icon_state = "brown_jacket_nt_sleeveless" + icon_open = "brown_jacket_nt_open" + icon_closed = "brown_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket") + +/obj/item/clothing/suit/storage/toggle/denim_jacket + name = "denim jacket" + desc = "A denim coat." + icon_state = "denim_jacket" + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + icon_open = "denim_jacket_open" + icon_closed = "denim_jacket" + allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless + name = "denim vest" + desc = "A denim vest." + icon_state = "denim_jacket_sleeveless" + icon_open = "denim_jacket_sleeveless_open" + icon_closed = "denim_jacket_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen + desc = "A denim coat. A corporate logo is proudly displayed on the back." + icon_state = "denim_jacket_nt" + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + icon_open = "denim_jacket_nt_open" + icon_closed = "denim_jacket_nt" + +/obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless + name = "denim vest" + desc = "A denim vest. A corporate logo is proudly displayed on the back." + icon_state = "denim_jacket_nt_sleeveless" + icon_open = "denim_jacket_nt_open" + icon_closed = "denim_jacket_nt_sleeveless" + body_parts_covered = UPPER_TORSO + item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket") + /obj/item/clothing/suit/storage/toggle/hoodie name = "grey hoodie" desc = "A warm, grey sweatshirt." @@ -510,7 +670,7 @@ min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE /obj/item/clothing/suit/storage/hooded/wintercoat/captain - name = "station administrator's winter coat" + name = "colony director's winter coat" icon_state = "coatcaptain" item_state_slots = list(slot_r_hand_str = "coatcaptain", slot_l_hand_str = "coatcaptain") armor = list(melee = 20, bullet = 15, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 2534845173..13d91661f5 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -4,8 +4,8 @@ /obj/item/clothing/suit/storage/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.max_w_class = 2 //fit only pocket sized items - pockets.max_storage_space = 4 + pockets.max_w_class = ITEMSIZE_SMALL //fit only pocket sized items + pockets.max_storage_space = ITEMSIZE_COST_SMALL * 2 /obj/item/clothing/suit/storage/Destroy() qdel(pockets) @@ -76,8 +76,8 @@ /obj/item/clothing/suit/storage/vest/heavy/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.max_w_class = 2 - pockets.max_storage_space = 8 + pockets.max_w_class = ITEMSIZE_SMALL + pockets.max_storage_space = ITEMSIZE_COST_SMALL * 4 /obj/item/clothing/suit/storage/vest var/icon_badge diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 53ea2d85b6..8bf36d0044 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -13,7 +13,7 @@ name = "firesuit" desc = "A suit that protects against fire and heat." icon_state = "fire" - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -33,7 +33,7 @@ desc = "A suit that protects against extreme fire and heat." //icon_state = "thermal" item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit") - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item slowdown = 1.5 /* @@ -52,7 +52,7 @@ name = "bomb suit" desc = "A suit designed for safety when handling explosives." icon_state = "bombsuit" - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 slowdown = 2 @@ -85,7 +85,7 @@ name = "Radiation suit" desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." icon_state = "rad" - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 1d6c610cea..a38f51f1fa 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -5,7 +5,7 @@ icon_state = "bluetie" item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "") slot_flags = SLOT_TIE - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/slot = "decor" var/obj/item/clothing/has_suit = null //the suit the tie may be attached to var/image/inv_overlay = null //overlay used when attached to clothing. diff --git a/code/modules/clothing/under/accessories/armband.dm b/code/modules/clothing/under/accessories/armband.dm index 9aa2ec2b70..6856b29466 100644 --- a/code/modules/clothing/under/accessories/armband.dm +++ b/code/modules/clothing/under/accessories/armband.dm @@ -29,6 +29,15 @@ desc = "An armband, worn by the crew to display which department they're assigned to. This one is white." icon_state = "med" +/obj/item/clothing/accessory/armband/med/cross + name = "medic armband" + desc = "A white armband with a red cross on it. Typically used by people in the Medical department." + icon_state = "medicband" + +/obj/item/clothing/accessory/armband/med/color + name = "armband" + desc = "A fancy armband." + /obj/item/clothing/accessory/armband/medgreen name = "EMT armband" desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green." diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm index af5b6c1c7a..cfd1c1d49a 100644 --- a/code/modules/clothing/under/accessories/clothing.dm +++ b/code/modules/clothing/under/accessories/clothing.dm @@ -28,6 +28,7 @@ desc = "Lucky suit jacket." icon_state = "checkered_jacket" + /obj/item/clothing/accessory/chaps name = "brown chaps" desc = "A pair of loose, brown leather chaps." @@ -53,7 +54,7 @@ slot_flags = SLOT_OCLOTHING | SLOT_TIE body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS siemens_coefficient = 0.9 - w_class = 3 + w_class = ITEMSIZE_NORMAL slot = "over" sprite_sheets = list( @@ -128,4 +129,4 @@ /obj/item/clothing/accessory/hawaii/random/New() if(prob(50)) icon_state = "hawaii2" - color = color_rotation(rand(-11,12)*15) \ No newline at end of file + color = color_rotation(rand(-11,12)*15) diff --git a/code/modules/clothing/under/accessories/lockets.dm b/code/modules/clothing/under/accessories/lockets.dm index 43fb495669..6c06a48dbf 100644 --- a/code/modules/clothing/under/accessories/lockets.dm +++ b/code/modules/clothing/under/accessories/lockets.dm @@ -3,7 +3,7 @@ desc = "This oval shaped, argentium sterling silver locket hangs on an incredibly fine, refractive string, almost thin as hair and microweaved from links to a deceptive strength, of similar material. The edges are engraved very delicately with an elegant curving design, but overall the main is unmarked and smooth to the touch, leaving room for either remaining as a stolid piece or future alterations. There is an obvious internal place for a picture or lock of some sort, but even behind that is a very thin compartment unhinged with the pinch of a thumb and forefinger." icon_state = "locket" slot_flags = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_MASK | SLOT_TIE var/base_icon var/open diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index b3461b82c2..4cc9c03dd0 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -7,13 +7,13 @@ var/slots = 3 var/obj/item/weapon/storage/internal/hold - w_class = 3.0 + w_class = ITEMSIZE_NORMAL /obj/item/clothing/accessory/storage/New() ..() hold = new/obj/item/weapon/storage/internal(src) hold.max_storage_space = slots * 2 - hold.max_w_class = 2 + hold.max_w_class = ITEMSIZE_SMALL /obj/item/clothing/accessory/storage/attack_hand(mob/user as mob) if (has_suit) //if we are part of a suit @@ -97,7 +97,7 @@ /obj/item/clothing/accessory/storage/knifeharness/New() ..() - hold.max_storage_space = 4 + hold.max_storage_space = ITEMSIZE_COST_SMALL * 2 hold.can_hold = list(/obj/item/weapon/material/hatchet/unathiknife,\ /obj/item/weapon/material/kitchen/utensil/knife,\ /obj/item/weapon/material/kitchen/utensil/knife/plastic,\ diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 0f175ad0e9..a6b5c15ea3 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -7,8 +7,8 @@ rolled_sleeves = 0 /obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. - desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Station Administrator\"." - name = "station administrator's jumpsuit" + desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Colony Director\"." + name = "colony director's jumpsuit" icon_state = "captain" rolled_sleeves = 0 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 4b22d93877..d547047353 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -102,7 +102,7 @@ name = "\improper NASA jumpsuit" desc = "It has a NASA logo on it and is made of space-proofed materials." icon_state = "black" - w_class = 4//bulky item + w_class = ITEMSIZE_LARGE//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -153,7 +153,7 @@ rolled_sleeves = 0 /obj/item/clothing/under/gimmick/rank/captain/suit - name = "station administrator's suit" + name = "colony director's suit" desc = "A green suit and yellow necktie. Exemplifies authority." icon_state = "green_suit" item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom") @@ -323,8 +323,8 @@ item_state_slots = list(slot_r_hand_str = "dress_white", slot_l_hand_str = "dress_white") /obj/item/clothing/under/dress/dress_cap - name = "station administrator's dress uniform" - desc = "Feminine fashion for the style concious Station Administrator." + name = "colony director's dress uniform" + desc = "Feminine fashion for the style concious Colony Director." icon_state = "dress_cap" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS @@ -390,8 +390,8 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/captainformal - name = "station administrator's formal uniform" - desc = "A Station Administrator's formal-wear, for special occasions." + name = "colony director's formal uniform" + desc = "A Colony Director's formal-wear, for special occasions." icon_state = "captain_formal" item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue") @@ -619,4 +619,4 @@ name = "mankini" desc = "No honest man would wear this abomination" icon_state = "mankini" - siemens_coefficient = 1 \ No newline at end of file + siemens_coefficient = 1 diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 27e2231d24..7bb68feb34 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -1,6 +1,6 @@ /obj/item/weapon/forensics icon = 'icons/obj/forensics.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY //This is the output of the stringpercent(print) proc, and means about 80% of //the print must be there for it to be complete. (Prints are 32 digits) diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index 9e2c490300..806d7ad34a 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "evidenceobj" item_state = null - w_class = 2 + w_class = ITEMSIZE_SMALL var/obj/item/stored_item = null /obj/item/weapon/evidencebag/MouseDrop(var/obj/item/I as obj) diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index b16c03f0ef..57af12525d 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -16,7 +16,7 @@ /obj/item/weapon/reagent_containers/glass/rag name = "rag" desc = "For cleaning up messes, you suppose." - w_class = 1 + w_class = ITEMSIZE_TINY icon = 'icons/obj/toy.dmi' icon_state = "rag" amount_per_transfer_from_this = 5 diff --git a/code/modules/detectivework/tools/sample_kits.dm b/code/modules/detectivework/tools/sample_kits.dm index fa5c7312a8..33931e87f9 100644 --- a/code/modules/detectivework/tools/sample_kits.dm +++ b/code/modules/detectivework/tools/sample_kits.dm @@ -1,7 +1,7 @@ /obj/item/weapon/sample name = "forensic sample" icon = 'icons/obj/forensics.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY var/list/evidence = list() /obj/item/weapon/sample/New(var/newloc, var/atom/supplied) @@ -125,7 +125,7 @@ name = "fiber collection kit" desc = "A magnifying glass and tweezers. Used to lift suit fibers." icon_state = "m_glass" - w_class = 2 + w_class = ITEMSIZE_SMALL var/evidence_type = "fiber" var/evidence_path = /obj/item/weapon/sample/fibers diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm index 40b8e87326..6997e3a04a 100644 --- a/code/modules/detectivework/tools/uvlight.dm +++ b/code/modules/detectivework/tools/uvlight.dm @@ -3,7 +3,7 @@ desc = "A small handheld black light." icon_state = "uv_off" slot_flags = SLOT_BELT - w_class = 2 + w_class = ITEMSIZE_SMALL item_state = "electronic" action_button_name = "Toggle UV light" matter = list(DEFAULT_WALL_MATERIAL = 150) diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 1229cee322..5d5790758a 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -11,7 +11,7 @@ throwforce = 1.0 throw_speed = 1 throw_range = 2 - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/access = list() access = access_crate_cash var/worth = 0 diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm index 4ddf058de2..7117172af8 100644 --- a/code/modules/economy/retail_scanner.dm +++ b/code/modules/economy/retail_scanner.dm @@ -6,7 +6,7 @@ flags = NOBLUDGEON|CONDUCT slot_flags = SLOT_BELT req_access = list(access_heads) - w_class = 2.0 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MATERIAL = 1) var/locked = 1 diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index a1701f0182..6781adb399 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -127,16 +127,16 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT available_events = list( // Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 10)), + new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 20)), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)), + new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 20)), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 5), 0, 0, 50), + new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 60, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Ian Storm", /datum/event/ianstorm, 50), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)), @@ -146,22 +146,22 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT /datum/event_container/moderate severity = EVENT_LEVEL_MODERATE available_events = list( - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 800), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SECURITY = 30), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 75, list(ASSIGNMENT_ENGINEER = 60)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_SCIENTIST = 10)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 80, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 20)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 10, list(ASSIGNMENT_SECURITY = 100)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 50, list(ASSIGNMENT_MEDICAL = 50), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 10, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SECURITY = 10), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 30, list(ASSIGNMENT_ENGINEER = 5)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 60)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 30, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 30), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 80, list(ASSIGNMENT_ENGINEER = 30)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 40), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)), ) @@ -169,12 +169,12 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT /datum/event_container/major severity = EVENT_LEVEL_MAJOR available_events = list( - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1320), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 60), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 3), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 900), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 10), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station,0,list(ASSIGNMENT_ANY = 5)), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 0, list(ASSIGNMENT_ENGINEER = 15), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 30), 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 15), 1), ) diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index f8334dacb0..3fff2473be 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -13,7 +13,7 @@ players += player.real_name for (var/mob/living/silicon/ai/target in world) - var/random_player = "The Captain" + var/random_player = "The Colony Director" if(players.len) random_player = pick(players) //Random player's name, to be used in laws. var/list/laws = list( "You are a mouse.", @@ -53,7 +53,7 @@ "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", "Tell everyone of the existence of this law, but never reveal the contents.", - "Refer to [prob(50)?"the captain":random_player] as \"Princess\" at all times.", + "Refer to [prob(50)?"the colony director":random_player] as \"Princess\" at all times.", "When asked a question, respond with the least-obvious and least-rational answer.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player].", "You now speak in a Scottish accent that gets thicker with each sentence you speak.", @@ -113,7 +113,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a mercenary", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") + var/target = pick("a traitor", "a mercenary", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the colony director", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") var/allergysev = pick("deathly", "mildly", "severely", "contagiously") @@ -148,9 +148,9 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") if(5) M << "
    " - M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED" + M << "\red THE COLONY DIRECTOR, HOP AND HOS ARE [who2]...LAWS UPDATED" M << "
    " - M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") + M.add_ion_law("THE COLONY DIRECTOR, HOP AND HOS ARE [who2]") if(6) M << "
    " M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED" diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index cda4ab86ce..1d0e219b18 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -1,6 +1,6 @@ var/list/dreams = list( - "an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the Station Administrator", + "an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the Colony Director", "voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness", "light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun", "a hat","the Luna","a ruined station","a planet","phoron","air","the medical bay","the bridge","blinking lights", diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index e074c264ac..a8987538ab 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -189,7 +189,7 @@ mob/living/carbon/proc/handle_hallucinations() var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\ "Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\ - "OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Station Administrator IQ","Retrieve Arms",\ + "OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Colony Director IQ","Retrieve Arms",\ "Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry") if(mid_txts) diff --git a/code/modules/gamemaster/actions/action.dm b/code/modules/gamemaster/actions/action.dm new file mode 100644 index 0000000000..82ebd860b5 --- /dev/null +++ b/code/modules/gamemaster/actions/action.dm @@ -0,0 +1,29 @@ +/datum/gm_action + var/name = "no name" // Simple name, for organization. + var/enabled = TRUE // If not enabled, this action is never taken. + var/departments = list() // What kinds of departments are affected by this action. Multiple departments can be listed. + var/chaotic = 0 // A number showing how chaotic the action may be. If danger is high, the GM will avoid it. + var/reusable = FALSE // If true, the event does not become disabled upon being used. Should be used sparingly. + var/observers_used = FALSE // Determines if the GM should check if ghosts are available before using this. + var/datum/game_master/gm = null + +/datum/gm_action/New(var/datum/game_master/new_gm) + ..() + gm = new_gm + +/datum/gm_action/proc/set_up() + return + +/datum/gm_action/proc/get_weight() + return + +/datum/gm_action/proc/start() + if(!reusable) + enabled = FALSE + return + +/datum/gm_action/proc/end() + return + +/datum/gm_action/proc/announce() + return \ No newline at end of file diff --git a/code/modules/gamemaster/actions/comms_blackout.dm b/code/modules/gamemaster/actions/comms_blackout.dm new file mode 100644 index 0000000000..75359085ac --- /dev/null +++ b/code/modules/gamemaster/actions/comms_blackout.dm @@ -0,0 +1,9 @@ +// Comms blackout is, just like grid check, mostly the same as always, yet engineering has an option to get it back sooner. + +/datum/gm_action/comms_blackout + name = "communications blackout" + departments = list(ROLE_ENGINEERING, ROLE_EVERYONE) + chaotic = 35 + +/datum/gm_action/comms_blackout/get_weight() + return 50 + (metric.count_people_in_department(ROLE_ENGINEERING) * 40) \ No newline at end of file diff --git a/code/modules/gamemaster/actions/grid_check.dm b/code/modules/gamemaster/actions/grid_check.dm new file mode 100644 index 0000000000..08c817fdf9 --- /dev/null +++ b/code/modules/gamemaster/actions/grid_check.dm @@ -0,0 +1,22 @@ +// New grid check event: +// Very similar to the old one, power goes out in most of the colony, however the new feature is the ability for engineering to +// get power back on sooner, if they are able to reach a special machine and initiate a manual reboot. If no one is able to do so, +// it will reboot itself after a few minutes, just like the old one. Bad things happen if there is no grid checker machine protecting +// the powernet when this event fires. + +/datum/gm_action/grid_check + name = "grid check" + departments = list(ROLE_ENGINEERING, ROLE_EVERYONE) + chaotic = 20 + +/datum/gm_action/grid_check/get_weight() + return 50 + (metric.count_people_in_department(ROLE_ENGINEERING) * 30) + +/datum/gm_action/grid_check/start() + // This sets off a chain of events that lead to the actual grid check (or perhaps worse). + // First, the Supermatter engine makes a power spike. + for(var/obj/machinery/power/generator/engine in machines) + engine.power_spike() + break // Just one engine, please. + // After that, the engine checks if a grid checker exists on the same powernet, and if so, it triggers a blackout. + // If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code. \ No newline at end of file diff --git a/code/modules/gamemaster/actions/waste_disposal.dm b/code/modules/gamemaster/actions/waste_disposal.dm new file mode 100644 index 0000000000..e7ba856e78 --- /dev/null +++ b/code/modules/gamemaster/actions/waste_disposal.dm @@ -0,0 +1,9 @@ +// A shuttle full of junk docks, and cargo is tasked with sifting through it all to find valuables, or just dispose of it. + +/datum/gm_action/waste_disposal + name = "waste disposal" + departments = list(ROLE_CARGO) + chaotic = 0 + +/datum/gm_action/waste_disposal/get_weight() + return metric.count_people_in_department(ROLE_CARGO) * 50 \ No newline at end of file diff --git a/code/modules/gamemaster/controller.dm b/code/modules/gamemaster/controller.dm new file mode 100644 index 0000000000..079c535164 --- /dev/null +++ b/code/modules/gamemaster/controller.dm @@ -0,0 +1,80 @@ +/client/proc/show_gm_status() + set category = "Debug" + set name = "Show GM Status" + set desc = "Shows you what the GM is thinking. If only that existed in real life..." + + game_master.interact(usr) + +/datum/game_master/proc/interact(var/client/user) + if(!user) + return + + var/HTML = "Game Master AI" + + HTML += "\[Toggle Time Restrictions\] | \ + \[Toggle GM\] | \ + \[Force Event Decision\]
    " + + HTML += "Status: [pre_action_checks() ? "Ready" : "Suppressed"]

    " + + HTML += "Staleness: [staleness] \[Adjust\]
    " + HTML += "Danger: [danger] \[Adjust\]

    " + + HTML += "Actions available;
    " + for(var/datum/gm_action/action in available_actions) + if(action.enabled == FALSE) + continue + HTML += "[action.name] ([english_list(action.departments)]) (weight: [action.get_weight()])
    " + + HTML += "
    " + HTML += "All living mobs activity: [metric.assess_all_living_mobs()]%
    " + HTML += "All ghost activity: [metric.assess_all_dead_mobs()]%
    " + + HTML += "
    " + HTML += "Departmental activity;
    " + for(var/department in metric.departments) + HTML += " [department] : [metric.assess_department(department)]%
    " + + HTML += "
    " + HTML += "Activity of players;
    " + for(var/mob/player in player_list) + HTML += " [player] ([player.key]) : [metric.assess_player_activity(player)]%
    " + + + + HTML +="" + user << browse(HTML, "window=log;size=400x450;border=1;can_resize=1;can_close=1;can_minimize=1") + +/datum/game_master/Topic(href, href_list) + if(..()) + return + + if(!is_admin(usr)) + message_admins("[usr] has attempted to modify the Game Master values without being an admin.") + return + + if(href_list["toggle_time_restrictions"]) + ignore_time_restrictions = !ignore_time_restrictions + message_admins("GM event time restrictions was [ignore_time_restrictions ? "dis" : "en"]abled by [usr.key].") + + if(href_list["force_choose_event"]) + start_action() + message_admins("[usr.key] forced the Game Master to choose an event immediately.") + + if(href_list["suspend"]) + suspended = !suspended + message_admins("GM was [suspended ? "dis" : "en"]abled by [usr.key].") + + if(href_list["adjust_staleness"]) + var/amount = input(usr, "How much staleness should be added or subtracted?", "Game Master") as null|num + if(amount) + adjust_staleness(amount) + message_admins("GM staleness was adjusted by [amount] by [usr.key].") + + if(href_list["adjust_danger"]) + var/amount = input(usr, "How much danger should be added or subtracted?", "Game Master") as null|num + if(amount) + adjust_danger(amount) + message_admins("GM danger was adjusted by [amount] by [usr.key].") + + interact(usr) // To refresh the UI. \ No newline at end of file diff --git a/code/modules/gamemaster/defines.dm b/code/modules/gamemaster/defines.dm new file mode 100644 index 0000000000..2e486ee23b --- /dev/null +++ b/code/modules/gamemaster/defines.dm @@ -0,0 +1 @@ +#define EVENT_BASELINE_WEIGHT 200 \ No newline at end of file diff --git a/code/modules/gamemaster/game_master.dm b/code/modules/gamemaster/game_master.dm new file mode 100644 index 0000000000..180892f4c9 --- /dev/null +++ b/code/modules/gamemaster/game_master.dm @@ -0,0 +1,136 @@ +// This is a sort of successor to the various event systems created over the years. It is designed to be just a tad smarter than the +// previous ones, checking various things like player count, department size and composition, individual player activity, +// individual player (IC) skill, and such, in order to try to choose the best actions to take in order to add spice or variety to +// the round. + +/datum/game_master + var/suspended = TRUE // If true, it will not do anything. + var/ignore_time_restrictions = FALSE// Useful for debugging without needing to wait 20 minutes each time. + var/list/available_actions = list() // A list of 'actions' that the GM has access to, to spice up a round, such as events. + var/danger = 0 // The GM's best guess at how chaotic the round is. High danger makes it hold back. + var/staleness = -20 // Determines liklihood of the GM doing something, increases over time. + var/danger_modifier = 1 // Multiplier for how much 'danger' is accumulated. + var/staleness_modifier = 1 // Ditto. Higher numbers generally result in more events occuring in a round. + var/ticks_completed = 0 // Counts amount of ticks completed. Note that this ticks once a minute. + var/next_action = 0 // Minimum amount of time of nothingness until the GM can pick something again. + var/last_department_used = null // If an event was done for a specific department, it is written here, so it doesn't do it again. + + +/datum/game_master/New() + ..() + available_actions = init_subtypes(/datum/gm_action) + +/datum/game_master/proc/process() + if(ticker && ticker.current_state == GAME_STATE_PLAYING && !suspended) + adjust_staleness(1) + adjust_danger(-1) + ticks_completed++ + + var/global_afk = metric.assess_all_living_mobs() + global_afk -= 100 + global_afk = abs(global_afk) + global_afk = round(global_afk / 100, 0.1) + adjust_staleness(global_afk) // Staleness increases faster if more people are less active. + + if(world.time < next_action && prob(staleness * 2) ) + log_debug("Game Master going to start something.") + start_action() + +// This is run before committing to an action/event. +/datum/game_master/proc/pre_action_checks() + if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + log_debug("Game Master unable to start event: Ticker is nonexistant, or the game is not ongoing.") + return FALSE + if(suspended) + return FALSE + if(ignore_time_restrictions) + return TRUE + // Last minute antagging is bad for humans to do, so the GM will respect the start and end of the round. + var/mills = round_duration_in_ticks + var/mins = round((mills % 36000) / 600) + var/hours = round(mills / 36000) + + if(hours < 1 && mins <= 20) // Don't do anything for the first twenty minutes of the round. + log_debug("Game Master unable to start event: It is too early.") + return FALSE + if(hours >= 2 && mins >= 40) // Don't do anything in the last twenty minutes of the round, as well. + log_debug("Game Master unable to start event: It is too late.") + return FALSE + return TRUE + +/datum/game_master/proc/start_action() + if(!pre_action_checks()) // Make sure we're not doing last minute events, or early events. + return + log_debug("Game Master now starting action decision.") + var/list/most_active_departments = metric.assess_all_departments(3, list(last_department_used)) + var/list/best_actions = decide_best_action(most_active_departments) + + if(best_actions && best_actions.len) + var/list/weighted_actions = list() + for(var/datum/gm_action/action in best_actions) + weighted_actions[action] = action.get_weight() + + var/datum/gm_action/choice = pickweight(weighted_actions) + if(choice) + log_debug("[choice.name] was chosen by the Game Master, and is now being ran.") + choice.set_up() + choice.start() + next_action = world.time + rand(15 MINUTES, 30 MINUTES) + last_department_used = choice.departments[1] + + + + +/datum/game_master/proc/decide_best_action(var/list/most_active_departments) + if(!most_active_departments.len) // Server's empty? + log_debug("Game Master failed to find any active departments.") + return list() + + var/list/best_actions = list() // List of actions which involve the most active departments. + if(most_active_departments.len >= 2) + for(var/datum/gm_action/action in available_actions) + if(!action.enabled) + continue + // Try to incorporate an action with the top two departments first. + if(most_active_departments[1] in action.departments && most_active_departments[2] in action.departments) + best_actions.Add(action) + log_debug("[action.name] is being considered because both most active departments are involved.") + + if(best_actions.len) // We found something for those two, let's do it. + return best_actions + + // Otherwise we probably couldn't find something for the second highest group, so let's ignore them. + for(var/datum/gm_action/action in available_actions) + if(!action.enabled) + continue + if(most_active_departments[1] in action.departments) + best_actions.Add(action) + log_debug("[action.name] is being considered because the most active department is involved.") + + if(best_actions.len) // Found something for the one guy. + return best_actions + + // At this point we should expand our horizons. + for(var/datum/gm_action/action in available_actions) + if(!action.enabled) + continue + if(ROLE_EVERYONE in action.departments) + best_actions.Add(action) + log_debug("[action.name] is being considered because it involves everyone.") + + if(best_actions.len) // Finally, perhaps? + return best_actions + + // Just give a random event if for some reason it still can't make up its mind. + for(var/datum/gm_action/action in available_actions) + if(!action.enabled) + continue + best_actions.Add(action) + log_debug("[action.name] is being considered because everything else failed.") + + if(best_actions.len) // Finally, perhaps? + return best_actions + else + log_debug("Game Master failed to find a suitable event, something very wrong is going on.") + + diff --git a/code/modules/gamemaster/helpers.dm b/code/modules/gamemaster/helpers.dm new file mode 100644 index 0000000000..80fc133931 --- /dev/null +++ b/code/modules/gamemaster/helpers.dm @@ -0,0 +1,9 @@ +// Tell the game master that something dangerous happened, e.g. someone dying. +/datum/game_master/proc/adjust_danger(var/amt) + amt = amt * danger_modifier + danger = round( Clamp(danger + amt, 0, 1000), 0.1) + +// Tell the game master that something interesting happened. +/datum/game_master/proc/adjust_staleness(var/amt) + amt = amt * staleness_modifier + staleness = round( Clamp(staleness + amt, -50, 200), 0.1) \ No newline at end of file diff --git a/code/modules/games/cah_black_cards.dm b/code/modules/games/cah_black_cards.dm index 6aae5e6da2..de67975faa 100644 --- a/code/modules/games/cah_black_cards.dm +++ b/code/modules/games/cah_black_cards.dm @@ -5,7 +5,7 @@ "The Chaplain this shift is worshiping _____.", "Cargo ordered a crate full of _____.", "An ERT was called due to ______.", - "Alert! The Station Administrator has armed themselves with _____.", + "Alert! The Colony Director has armed themselves with _____.", "Current Laws: ________ is your master.", "Current Laws: ________ is the enemy.", "_____ vented the entirety of Cargo.", @@ -14,7 +14,7 @@ "Caution, ______ have been detected in collision course with the station.", "Today's kitchen menu includes _______.", "What did the mercenaries want when they attacked the station?", - "I think the Station Administrator is insane. He just demanded ______ in his office.", + "I think the Colony Director is insane. He just demanded ______ in his office.", "Fuckin' scientists, they just turned Misc. Research into _______ .", "What's my fetish?", "Hello, _______ here with _______", @@ -34,4 +34,4 @@ "No, the AI's first law is NOT to serve _____.", "The robots are not disposal bins for your _____.", "You can never have too many _____ on shift.", - ) \ No newline at end of file + ) diff --git a/code/modules/games/cah_white_cards.dm b/code/modules/games/cah_white_cards.dm index 387c058972..ff8dcb8716 100644 --- a/code/modules/games/cah_white_cards.dm +++ b/code/modules/games/cah_white_cards.dm @@ -5,7 +5,7 @@ "Space 'Nam", "Space lesbians", "The Gardener getting SUPER high", - "The Station Administrator thinking they're a badass", + "The Colony Director thinking they're a badass", "Being in a cult", "Racially biased lawsets", "An Unathi who WON'T STOP FIGHTING", @@ -57,7 +57,7 @@ "An irritatingly chipper robot", "Androids hanging out in the bar drinking beer", "Gear harnesses", - "A seventeen-year-old Station Administrator", + "A seventeen-year-old Colony Director", "The throbbing erection that the HoS gets at the thought of shooting something", "Trying to stab someone and hugging them instead", "Waking up naked in the maintenance tunnels", diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 42bd4b709b..0eba340761 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -4,7 +4,7 @@ var/back_icon = "card_back" /obj/item/weapon/deck - w_class = 2 + w_class = ITEMSIZE_SMALL icon = 'icons/obj/playing_cards.dmi' var/list/cards = list() @@ -180,7 +180,7 @@ icon_state = "card_pack" icon = 'icons/obj/playing_cards.dmi' - w_class = 1 + w_class = ITEMSIZE_TINY var/list/cards = list() @@ -201,7 +201,7 @@ desc = "Some playing cards." icon = 'icons/obj/playing_cards.dmi' icon_state = "empty" - w_class = 1 + w_class = ITEMSIZE_TINY var/concealed = 0 var/list/cards = list() diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 69077aad84..a6273a7423 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -247,7 +247,7 @@ throw_speed = 1 throw_range = 5 throwforce = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = NOBLOODY var/active = 0 var/item_color @@ -263,7 +263,7 @@ /obj/item/weapon/holo/esword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") if(active && default_parry_check(user, attacker, damage_source) && prob(50)) user.visible_message("\The [user] parries [attack_text] with \the [src]!") - + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, user.loc) spark_system.start() @@ -279,13 +279,13 @@ if (active) force = 30 icon_state = "sword[item_color]" - w_class = 4 + w_class = ITEMSIZE_LARGE playsound(user, 'sound/weapons/saberon.ogg', 50, 1) user << "[src] is now active." else force = 3 icon_state = "sword0" - w_class = 2 + w_class = ITEMSIZE_SMALL playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user << "[src] can now be concealed." @@ -304,7 +304,7 @@ icon_state = "basketball" name = "basketball" desc = "Here's your chance, do your dance at the Space Jam." - w_class = 4 //Stops people from hiding it in their bags/pockets + w_class = ITEMSIZE_LARGE //Stops people from hiding it in their bags/pockets /obj/structure/holohoop name = "basketball hoop" diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index 5cd5458b4a..27487a4e1f 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -198,14 +198,14 @@ desc = "A device used to calm down bees before harvesting honey." icon = 'icons/obj/device.dmi' icon_state = "battererburnt" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/honey_frame name = "beehive frame" desc = "A frame for the beehive that the bees will fill with honeycombs." icon = 'icons/obj/beekeeping.dmi' icon_state = "honeyframe" - w_class = 2 + w_class = ITEMSIZE_SMALL var/honey = 0 diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 1c823ef61b..88fd37c466 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -37,7 +37,7 @@ desc = "A reminder of meals gone by." icon = 'icons/obj/trash.dmi' icon_state = "corncob" - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 0 throw_speed = 4 throw_range = 20 @@ -55,7 +55,7 @@ desc = "A peel from a banana." icon = 'icons/obj/items.dmi' icon_state = "banana_peel" - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 0 throw_speed = 4 throw_range = 20 diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 015ab88ccb..1479ffdc5c 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -3,7 +3,7 @@ desc = "A small disk used for carrying data on plant genetics." icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "disk" - w_class = 1.0 + w_class = ITEMSIZE_TINY var/list/genes = list() var/genesource = "unknown" diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 7c1b70c4c7..544ba9046b 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -5,7 +5,7 @@ var/global/list/plant_seed_sprites = list() name = "packet of seeds" icon = 'icons/obj/seeds.dmi' icon_state = "blank" - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/seed_type var/datum/seed/seed diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 1ab73542b0..a9c7f600c6 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -4,7 +4,7 @@ flags = NOBLUDGEON slot_flags = SLOT_BELT throwforce = 4 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 2 throw_range = 10 var/toxicity = 4 diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm index 97acfd2c98..b6ce8472b7 100644 --- a/code/modules/integrated_electronics/_defines.dm +++ b/code/modules/integrated_electronics/_defines.dm @@ -1,3 +1,7 @@ +#define IC_INPUT "input" +#define IC_OUTPUT "output" +#define IC_ACTIVATOR "activator" + #define DATA_CHANNEL "data channel" #define PULSE_CHANNEL "pulse channel" @@ -6,71 +10,42 @@ desc = "It's a tiny chip! This one doesn't seem to do much, however." icon = 'icons/obj/electronic_assemblies.dmi' icon_state = "template" - w_class = 1 + w_class = ITEMSIZE_TINY var/extended_desc = null var/list/inputs = list() var/list/outputs = list() var/list/activators = list() - var/number_of_inputs = 0 //This is how many input pins are created - var/number_of_outputs = 0 //Likewise for output - var/number_of_activators = 0 //Guess - var/list/input_names = list() - var/list/output_names = list() - var/list/activator_names = list() - var/last_used = 0 //Uses world.time + var/next_use = 0 //Uses world.time var/complexity = 1 //This acts as a limitation on building machines, more resource-intensive components cost more 'space'. - var/cooldown_per_use = 2 SECONDS + var/cooldown_per_use = 1 SECOND + var/category = /obj/item/integrated_circuit // Used by the toolsets to filter out category types /obj/item/integrated_circuit/examine(mob/user) ..() - user << "This board has [inputs.len] input [inputs.len != 1 ? "pins" : "pin"] and \ - [outputs.len] output [outputs.len != 1 ? "pins" : "pin"]." + to_chat(user, "This board has [inputs.len] input pin\s and [outputs.len] output pin\s.") for(var/datum/integrated_io/input/I in inputs) if(I.linked.len) - user << "\The [I.name] is connected to [I.get_linked_to_desc()]." + to_chat(user, "The [I] is connected to [I.get_linked_to_desc()].") for(var/datum/integrated_io/output/O in outputs) if(O.linked.len) - user << "\The [O.name] is connected to [O.get_linked_to_desc()]." + to_chat(user, "The [O] is connected to [O.get_linked_to_desc()].") for(var/datum/integrated_io/activate/A in activators) if(A.linked.len) - user << "\The [A.name] is connected to [A.get_linked_to_desc()]." + to_chat(user, "The [A] is connected to [A.get_linked_to_desc()].") interact(user) /obj/item/integrated_circuit/New() + setup_io(inputs, /datum/integrated_io/input) + setup_io(outputs, /datum/integrated_io/output) + setup_io(activators, /datum/integrated_io/activate) ..() - var/i = 0 - if(number_of_inputs) - for(i = number_of_inputs, i > 0, i--) - inputs.Add(new /datum/integrated_io/input(src)) - if(number_of_outputs) - for(i = number_of_outputs, i > 0, i--) - outputs.Add(new /datum/integrated_io/output(src)) - - if(number_of_activators) - for(i = number_of_activators, i > 0, i--) - activators.Add(new /datum/integrated_io/activate(src)) - - apply_names_to_io() - -/obj/item/integrated_circuit/proc/apply_names_to_io() - var/i = 1 - if(input_names.len) - for(var/datum/integrated_io/input/I in inputs) - I.name = "[input_names[i]]" - i++ - i = 1 - if(output_names.len) - for(var/datum/integrated_io/output/O in outputs) - O.name = "[output_names[i]]" - i++ - - i = 1 - if(activator_names.len) - for(var/datum/integrated_io/activate/A in activators) - A.name = "[activator_names[i]]" - i++ +/obj/item/integrated_circuit/proc/setup_io(var/list/io_list, var/io_type) + var/list/io_list_copy = io_list.Copy() + io_list.Cut() + for(var/io_entry in io_list_copy) + io_list.Add(new io_type(src, io_entry, io_list_copy[io_entry])) /obj/item/integrated_circuit/proc/on_data_written() //Override this for special behaviour when new data gets pushed to the circuit. return @@ -82,7 +57,12 @@ qdel(O) for(var/datum/integrated_io/A in activators) qdel(A) - ..() + . = ..() + +/obj/item/integrated_circuit/nano_host() + if(istype(src.loc, /obj/item/device/electronic_assembly)) + return loc + return ..() /obj/item/integrated_circuit/emp_act(severity) for(var/datum/integrated_io/io in inputs + outputs + activators) @@ -94,42 +74,42 @@ set desc = "Rename your circuit, useful to stay organized." var/mob/M = usr - - if(!M.canmove || M.stat || M.restrained()) + if(!CanInteract(M, physical_state)) return - var/input = sanitizeSafe(input("What do you want to name the circuit?", "Rename", src.name), MAX_NAME_LEN) - - if(src && input) - M << "The circuit '[src.name]' is now labeled '[input]'." + var/input = sanitizeSafe(input("What do you want to name the circuit?", "Rename", src.name) as null|text, MAX_NAME_LEN) + if(src && input && CanInteract(M, physical_state)) + to_chat(M, "The circuit '[src.name]' is now labeled '[input]'.") name = input /obj/item/integrated_circuit/proc/get_pin_ref(var/pin_type, var/pin_number) switch(pin_type) - if("input") + if(IC_INPUT) if(pin_number > inputs.len) return null return inputs[pin_number] - if("output") + if(IC_OUTPUT) if(pin_number > outputs.len) return null return outputs[pin_number] - if("activator") + if(IC_ACTIVATOR) if(pin_number > activators.len) return null return activators[pin_number] return null /obj/item/integrated_circuit/interact(mob/user) - if(get_dist(get_turf(src), user) > 1) - user.unset_machine(src) + if(!CanInteract(user, physical_state)) return - var/HTML = "[src.name]" + + var/HTML = list() + HTML += "[src.name]" HTML += "
    " HTML += "
    Command
    SpecialStation Administrator
    SpecialColony DirectorCustom
    " - HTML += "
    \[Refresh\] | " - HTML += "\[Rename\]
    " + HTML += "
    \[Refresh\] | " + HTML += "\[Rename\] | " + HTML += "\[Remove\]
    " HTML += "" HTML += "" @@ -139,80 +119,69 @@ var/column_width = 3 var/row_height = max(inputs.len, outputs.len, 1) - var/i - var/j - for(i = 1, i < row_height+1, i++) + + for(var/i = 1 to row_height) HTML += "" - for(j = 1, j < column_width+1, j++) + for(var/j = 1 to column_width) var/datum/integrated_io/io = null - var/words = null + var/words = list() var/height = 1 switch(j) if(1) - io = get_pin_ref("input",i) + io = get_pin_ref(IC_INPUT, i) if(io) if(io.linked.len) - words = "[io.name] [io.display_data()]
    " + words += "[io.name] [io.display_data()]
    " for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ - @ [linked.holder]
    " - else // "Click here!" - words = "[io.name] [io.display_data()]
    " + words += "\[[linked.name]\] \ + @ [linked.holder]
    " + else + words += "[io.name] [io.display_data()]
    " for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ - @ [linked.holder]
    " + words += "\[[linked.name]\] \ + @ [linked.holder]
    " if(outputs.len > inputs.len) - // height = Floor(outputs.len / inputs.len) - height = 1 // Because of bugs, if there's more outputs than inputs, it causes the output side to be hidden. - //world << "I wrote [words] at ([i],[j]). Height = [height]." + height = 1 if(2) if(i == 1) - words = "[src.name]

    [src.desc]" + words += "[src.name]

    [src.desc]" height = row_height - //world << "I wrote the center piece because i was equal to 1, at ([i],[j]). Height = [height]." else continue if(3) - io = get_pin_ref("output",i) + io = get_pin_ref(IC_OUTPUT, i) if(io) if(io.linked.len) - words = "[io.name] [io.display_data()]
    " + words += "[io.name] [io.display_data()]
    " for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ + words += "\[[linked.name]\] \ @ [linked.holder]
    " else - words = "[io.name] [io.display_data()]
    " + words += "[io.name] [io.display_data()]
    " for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ - @ [linked.holder]
    " + words += "\[[linked.name]\] \ + @ [linked.holder]
    " if(inputs.len > outputs.len) - // height = Floor(inputs.len / outputs.len) - height = 1 // See above. - //world << "I wrote [words] at ([i],[j]). Height = [height]." - HTML += "" - //HTML += "" - //world << "Writing to ([i],[j])." + height = 1 + HTML += "" HTML += "" - if(activators.len) - for(i = 1, i < activators.len+1, i++) - var/datum/integrated_io/io = null - var/words = null - io = get_pin_ref("activator",i) - if(io) - if(io.linked.len) - words = "[io.name]
    " - for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ - @ [linked.holder]
    " - else // "Click here!" - words = "[io.name]
    " - for(var/datum/integrated_io/linked in io.linked) - words += "\[[linked.name]\] \ - @ [linked.holder]
    " - HTML += "" - HTML += "" - HTML += "" + for(var/activator in activators) + var/datum/integrated_io/io = activator + var/words = list() + if(io.linked.len) + words += "[io.name]
    " + for(var/datum/integrated_io/linked in io.linked) + words += "\[[linked.name]\] \ + @ [linked.holder]
    " + else + words += "[io.name]
    " + for(var/datum/integrated_io/linked in io.linked) + words += "\[[linked.name]\] \ + @ [linked.holder]
    " + HTML += "" + HTML += "" + HTML += "" HTML += "
    [words][words][jointext(words, null)]
    [words]
    [jointext(words, null)]
    " HTML += "" @@ -221,83 +190,92 @@ HTML += "
    [extended_desc]" HTML += "" - user << browse(HTML, "window=circuit-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1") + user << browse(jointext(HTML, null), "window=circuit-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1") - //user << sanitize(HTML, "window=debug;size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1") - //world << sanitize(HTML) - - user.set_machine(src) onclose(user, "circuit-\ref[src]") -/obj/item/integrated_circuit/Topic(href, href_list[]) - var/mob/living/user = locate(href_list["user"]) in mob_list +/obj/item/integrated_circuit/Topic(href, href_list, state = physical_state) + if(..()) + return 1 var/pin = locate(href_list["pin"]) in inputs + outputs + activators - if(!user || !user.Adjacent(get_turf(src)) ) - return 1 - - if(!user.canmove || user.stat || user.restrained()) - return - + var/obj/held_item = usr.get_active_hand() if(href_list["wire"]) - if(ishuman(user) && Adjacent(user)) - var/mob/living/carbon/human/H = user - var/obj/held_item = H.get_active_hand() + if(istype(held_item, /obj/item/device/integrated_electronics/wirer)) + var/obj/item/device/integrated_electronics/wirer/wirer = held_item + if(pin) + wirer.wire(pin, usr) - if(istype(held_item, /obj/item/device/integrated_electronics/wirer)) - var/obj/item/device/integrated_electronics/wirer/wirer = held_item - if(pin) - wirer.wire(pin, user) - - else if(istype(held_item, /obj/item/device/integrated_electronics/debugger)) - var/obj/item/device/integrated_electronics/debugger/debugger = held_item - if(pin) - debugger.write_data(pin, user) - - // if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer)) - // wirer = H.r_hand - // else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer)) - // wirer = H.l_hand - - // if(wirer && pin) - // wirer.wire(pin, user) - else - user << "You can't do a whole lot without tools." + else if(istype(held_item, /obj/item/device/integrated_electronics/debugger)) + var/obj/item/device/integrated_electronics/debugger/debugger = held_item + if(pin) + debugger.write_data(pin, usr) + else + to_chat(usr, "You can't do a whole lot without the proper tools.") if(href_list["examine"]) - examine(user) + examine(usr) if(href_list["rename"]) - rename_component(user) + rename_component(usr) - interact(user) // To refresh the UI. + if(href_list["remove"]) + if(istype(held_item, /obj/item/weapon/screwdriver)) + disconnect_all() + var/turf/T = get_turf(src) + forceMove(T) + playsound(T, 'sound/items/Crowbar.ogg', 50, 1) + to_chat(usr, "You pop \the [src] out of the case, and slide it out.") + else + to_chat(usr, "You need a screwdriver to remove components.") + var/obj/item/device/electronic_assembly/ea = loc + if(istype(ea)) + ea.interact(usr) + return + + interact(usr) // To refresh the UI. /datum/integrated_io var/name = "input/output" var/obj/item/integrated_circuit/holder = null - var/data = null + var/weakref/data = null // This is a weakref, to reduce typecasts. Note that oftentimes numbers and text may also occupy this. var/list/linked = list() var/io_type = DATA_CHANNEL -/datum/integrated_io/New(var/newloc) +/datum/integrated_io/New(var/newloc, var/name, var/data) ..() + src.name = name + src.data = data holder = newloc - if(!holder) - message_admins("ERROR: An integrated_io ([src.name]) spawned without a holder! This is a bug.") + if(!istype(holder)) + message_admins("ERROR: An integrated_io ([src.name]) spawned without a valid holder! This is a bug.") /datum/integrated_io/Destroy() disconnect() + data = null holder = null - ..() + . = ..() + +/datum/integrated_io/nano_host() + return holder + + +/datum/integrated_io/proc/data_as_type(var/as_type) + if(!isweakref(data)) + return + var/weakref/w = data + var/output = w.resolve() + return istype(output, as_type) ? output : null /datum/integrated_io/proc/display_data() if(isnull(data)) return "(null)" // Empty data means nothing to show. if(istext(data)) return "(\"[data]\")" // Wraps the 'string' in escaped quotes, so that people know it's a 'string'. - if(istype(data, /atom)) - var/atom/A = data - return "([A.name] \[Ref\])" // For refs, we want just the name displayed. + if(isweakref(data)) + var/weakref/w = data + var/atom/A = w.resolve() + return A ? "([A.name] \[Ref\])" : "(null)" // For refs, we want just the name displayed. return "([data])" // Nothing special needed for numbers or other stuff. /datum/integrated_io/activate/display_data() @@ -316,43 +294,38 @@ push_data() /datum/integrated_io/proc/write_data_to_pin(var/new_data) - if(isnull(new_data) || isnum(new_data) || istext(new_data) || istype(new_data, /atom/) ) // Anything else is a type we don't want. + if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data)) // Anything else is a type we don't want. data = new_data holder.on_data_written() /datum/integrated_io/proc/push_data() - if(linked.len) - for(var/datum/integrated_io/io in linked) - io.write_data_to_pin(data) + for(var/datum/integrated_io/io in linked) + io.write_data_to_pin(data) /datum/integrated_io/activate/push_data() - if(linked.len) - for(var/datum/integrated_io/io in linked) - io.holder.work() + for(var/datum/integrated_io/io in linked) + io.holder.check_then_do_work() /datum/integrated_io/proc/pull_data() - if(linked.len) - for(var/datum/integrated_io/io in linked) - write_data_to_pin(io.data) + for(var/datum/integrated_io/io in linked) + write_data_to_pin(io.data) /datum/integrated_io/proc/get_linked_to_desc() if(linked.len) - var/result = english_list(linked) - return "the [result]" + return "the [english_list(linked)]" return "nothing" /datum/integrated_io/proc/disconnect() - if(linked.len) - //First we iterate over everything we are linked to. - for(var/datum/integrated_io/their_io in linked) - //While doing that, we iterate them as well, and disconnect ourselves from them. - for(var/datum/integrated_io/their_linked_io in their_io.linked) - if(their_linked_io == src) - their_io.linked.Remove(src) - else - continue - //Now that we're removed from them, we gotta remove them from us. - src.linked.Remove(their_io) + //First we iterate over everything we are linked to. + for(var/datum/integrated_io/their_io in linked) + //While doing that, we iterate them as well, and disconnect ourselves from them. + for(var/datum/integrated_io/their_linked_io in their_io.linked) + if(their_linked_io == src) + their_io.linked.Remove(src) + else + continue + //Now that we're removed from them, we gotta remove them from us. + src.linked.Remove(their_io) /datum/integrated_io/input name = "input pin" @@ -372,11 +345,14 @@ for(var/datum/integrated_io/input/I in inputs) I.push_data() -/obj/item/integrated_circuit/proc/work(var/datum/integrated_io/io) - if(last_used + cooldown_per_use > world.time) // All intergrated circuits have an internal cooldown, to protect from spam. - return 0 - last_used = world.time - return 1 +/obj/item/integrated_circuit/proc/check_then_do_work() + if(world.time < next_use) // All intergrated circuits have an internal cooldown, to protect from spam. + return + next_use = world.time + cooldown_per_use + do_work() + +/obj/item/integrated_circuit/proc/do_work() + return /obj/item/integrated_circuit/proc/disconnect_all() for(var/datum/integrated_io/input/I in inputs) diff --git a/code/modules/integrated_electronics/arithmetic.dm b/code/modules/integrated_electronics/arithmetic.dm index 3fc60c64f9..31265e297e 100644 --- a/code/modules/integrated_electronics/arithmetic.dm +++ b/code/modules/integrated_electronics/arithmetic.dm @@ -1,25 +1,10 @@ //These circuits do simple math. /obj/item/integrated_circuit/arithmetic complexity = 1 - number_of_inputs = 8 - number_of_outputs = 1 - number_of_activators = 1 - input_names = list( - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H" - ) - output_names = list( - "result" - ) - activator_names = list( - "compute" - ) + inputs = list("A","B","C","D","E","F","G","H") + outputs = list("result") + activators = list("compute") + category = /obj/item/integrated_circuit/arithmetic // +Adding+ // @@ -28,17 +13,16 @@ desc = "This circuit can add numbers together." icon_state = "addition" -/obj/item/integrated_circuit/arithmetic/addition/work() - if(..()) - var/result = 0 - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(isnum(I.data)) - result = result + I.data +/obj/item/integrated_circuit/arithmetic/addition/do_work() + var/result = 0 + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(isnum(I.data)) + result = result + I.data - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() // -Subtracting- // @@ -47,7 +31,7 @@ desc = "This circuit can subtract numbers." icon_state = "subtraction" -/obj/item/integrated_circuit/arithmetic/subtraction/work() +/obj/item/integrated_circuit/arithmetic/subtraction/do_work() if(..()) var/result = 0 for(var/datum/integrated_io/input/I in inputs) @@ -66,17 +50,16 @@ desc = "This circuit can multiply numbers." icon_state = "multiplication" -/obj/item/integrated_circuit/arithmetic/subtraction/work() - if(..()) - var/result = 0 - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(isnum(I.data)) - result = result * I.data +/obj/item/integrated_circuit/arithmetic/subtraction/do_work() + var/result = 0 + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(isnum(I.data)) + result = result * I.data - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() // /Division/ // @@ -85,17 +68,16 @@ desc = "This circuit can divide numbers, just don't think about trying to divide by zero!" icon_state = "division" -/obj/item/integrated_circuit/arithmetic/division/work() - if(..()) - var/result = 0 - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(isnum(I.data) && I.data != 0) //No runtimes here. - result = result / I.data +/obj/item/integrated_circuit/arithmetic/division/do_work() + var/result = 0 + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(isnum(I.data) && I.data != 0) //No runtimes here. + result = result / I.data - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() // Absolute // @@ -103,20 +85,18 @@ name = "absolute circuit" desc = "This outputs a non-negative version of the number you put in. This may also be thought of as its distance from zero." icon_state = "absolute" - number_of_inputs = 1 - number_of_outputs = 1 + inputs = list("A") -/obj/item/integrated_circuit/arithmetic/absolute/work() - if(..()) - var/result = 0 - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(isnum(I.data) && I.data != 0) - result = abs(result) +/obj/item/integrated_circuit/arithmetic/absolute/do_work() + var/result = 0 + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(isnum(I.data) && I.data != 0) + result = abs(result) - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() // Averaging // @@ -125,59 +105,49 @@ desc = "This circuit is of average quality, however it will compute the average for numbers you give it." icon_state = "average" -/obj/item/integrated_circuit/arithmetic/average/work() - if(..()) - var/result = 0 - var/inputs_used = 0 - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(isnum(I.data)) - inputs_used++ - result = result + I.data +/obj/item/integrated_circuit/arithmetic/average/do_work() + var/result = 0 + var/inputs_used = 0 + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(isnum(I.data)) + inputs_used++ + result = result + I.data - if(inputs_used) - result = result / inputs_used + if(inputs_used) + result = result / inputs_used - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() // Pi, because why the hell not? // /obj/item/integrated_circuit/arithmetic/pi name = "pi constant circuit" desc = "Not recommended for cooking. Outputs '3.14159' when it receives a pulse." icon_state = "pi" - number_of_inputs = 0 - number_of_outputs = 1 + inputs = list() -/obj/item/integrated_circuit/arithmetic/pi/work() - if(..()) - var/datum/integrated_io/output/O = outputs[1] - O.data = 3.14159 - O.push_data() +/obj/item/integrated_circuit/arithmetic/pi/do_work() + var/datum/integrated_io/output/O = outputs[1] + O.data = 3.14159 + O.push_data() // Random // /obj/item/integrated_circuit/arithmetic/random name = "random number generator circuit" desc = "This gives a random (integer) number between values A and B inclusive." icon_state = "random" - number_of_inputs = 2 - number_of_outputs = 1 - number_of_activators = 1 - input_names = list( - "L", - "H" - ) + inputs = list("L","H") -/obj/item/integrated_circuit/arithmetic/random/work() - if(..()) - var/result = 0 - var/datum/integrated_io/L = inputs[1] - var/datum/integrated_io/H = inputs[2] +/obj/item/integrated_circuit/arithmetic/random/do_work() + var/result = 0 + var/datum/integrated_io/L = inputs[1] + var/datum/integrated_io/H = inputs[2] - if(isnum(L.data) && isnum(H.data)) - result = rand(L.data, H.data) + if(isnum(L.data) && isnum(H.data)) + result = rand(L.data, H.data) - for(var/datum/integrated_io/output/O in outputs) - O.data = result - O.push_data() \ No newline at end of file + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/assemblies.dm b/code/modules/integrated_electronics/assemblies.dm index f9037e60e7..3b9e7aab06 100644 --- a/code/modules/integrated_electronics/assemblies.dm +++ b/code/modules/integrated_electronics/assemblies.dm @@ -30,43 +30,40 @@ max_complexity = 100 /obj/item/device/electronic_assembly/interact(mob/user) - if(get_dist(get_turf(src), user) > 1) - user.unset_machine(src) + if(!CanInteract(user, physical_state)) return + var/total_parts = 0 var/total_complexity = 0 for(var/obj/item/integrated_circuit/part in contents) total_parts++ total_complexity = total_complexity + part.complexity - var/HTML = "[src.name]" + var/HTML = list() - HTML += "
    \[Refresh\] | " - HTML += "\[Rename\]
    " + HTML += "[src.name]" + HTML += "
    \[Refresh\] | " + HTML += "\[Rename\]
    " HTML += "[total_parts]/[max_components] ([round((total_parts / max_components) * 100, 0.1)]%) space taken up in the assembly.
    " HTML += "[total_complexity]/[max_complexity] ([round((total_complexity / max_complexity) * 100, 0.1)]%) maximum complexity." HTML += "

    " HTML += "Components;
    " for(var/obj/item/integrated_circuit/circuit in contents) - HTML += "[circuit.name] | " - HTML += "\[Rename\]" + HTML += "[circuit.name] | " + HTML += "\[Rename\] | " + HTML += "\[Remove\]" HTML += "
    " HTML += "" - user << browse(HTML, "window=assembly-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1") + user << browse(jointext(HTML,null), "window=assembly-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1") /obj/item/device/electronic_assembly/Topic(href, href_list[]) - var/mob/living/user = locate(href_list["user"]) in mob_list - if(..()) return 1 - if(!user.canmove || user.stat || user.restrained()) - return - if(href_list["rename"]) - rename(user) + rename(usr) - interact(user) // To refresh the UI. + interact(usr) // To refresh the UI. /obj/item/device/electronic_assembly/verb/rename() set name = "Rename Circuit" @@ -74,14 +71,12 @@ set desc = "Rename your circuit, useful to stay organized." var/mob/M = usr - - if(!M.canmove || M.stat || M.restrained()) + if(!CanInteract(M, physical_state)) return - var/input = sanitizeSafe(input("What do you want to name this?", "Rename", src.name), MAX_NAME_LEN) - - if(src && input) - M << "The machine now has a label reading '[input]'." + var/input = sanitizeSafe(input("What do you want to name this?", "Rename", src.name) as null|text, MAX_NAME_LEN) + if(src && input && CanInteract(M, physical_state)) + to_chat(M, "The machine now has a label reading '[input]'.") name = input /obj/item/device/electronic_assembly/update_icon() @@ -91,22 +86,18 @@ icon_state = initial(icon_state) /obj/item/device/electronic_assembly/examine(mob/user) - ..() - if(user.Adjacent(src)) - if(!opened) - for(var/obj/item/integrated_circuit/output/screen/S in contents) - if(S.stuff_to_display) - user << "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'." - else + . = ..(user, 1) + if(.) + for(var/obj/item/integrated_circuit/output/screen/S in contents) + if(S.stuff_to_display) + to_chat(user, "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'.") + if(opened) interact(user) - // var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents - // if(IC) - // IC.examine(user) /obj/item/device/electronic_assembly/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/integrated_circuit)) if(!opened) - user << "\The [src] isn't opened, so you can't put anything inside. Try using a crowbar." + to_chat(user, "\The [src] isn't opened, so you can't put anything inside. Try using a crowbar.") return 0 var/obj/item/integrated_circuit/IC = I var/total_parts = 0 @@ -115,54 +106,45 @@ total_parts++ total_complexity = total_complexity + part.complexity - if( (total_parts + 1) >= max_components) - user << "You can't seem to add this [IC.name], since there's no more room." + if( (total_parts + 1) > max_components) + to_chat(user, "You can't seem to add this [IC.name], since there's no more room.") return 0 - if( (total_complexity + IC.complexity) >= max_complexity) - user << "You can't seem to add this [IC.name], since this setup's too complicated for the case." + if( (total_complexity + IC.complexity) > max_complexity) + to_chat(user, "You can't seem to add this [IC.name], since this setup's too complicated for the case.") return 0 - user << "You slide \the [IC] inside \the [src]." + to_chat(user, "You slide \the [IC] inside \the [src].") user.drop_item() IC.forceMove(src) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(istype(I, /obj/item/weapon/screwdriver)) - if(!opened) - user << "\The [src] isn't opened, so you can't remove anything inside. Try using a crowbar." - return 0 - if(!contents.len) - user << "There's nothing inside this to remove!" - return 0 - var/obj/item/integrated_circuit/option = input("What do you want to remove?", "Component Removal") as null|anything in contents - if(option) - option.disconnect_all() - option.forceMove(get_turf(src)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - user << "You pop \the [option] out of the case, and slide it out." - if(istype(I, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + interact(user) + else if(istype(I, /obj/item/weapon/crowbar)) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) opened = !opened - user << "You [opened ? "opened" : "closed"] \the [src]." + to_chat(user, "You [opened ? "opened" : "closed"] \the [src].") update_icon() - if(istype(I, /obj/item/device/integrated_electronics/wirer)) + else if(istype(I, /obj/item/device/integrated_electronics/wirer) || istype(I, /obj/item/device/integrated_electronics/debugger) || istype(I, /obj/item/weapon/screwdriver)) if(opened) - var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents - if(IC) - IC.examine(user) + interact(user) else - user << "\The [src] isn't opened, so you can't fiddle with the internal components. \ - Try using a crowbar." + to_chat(user, "\The [src] isn't opened, so you can't fiddle with the internal components. \ + Try using a crowbar.") + else + return ..() /obj/item/device/electronic_assembly/attack_self(mob/user) + if(opened) + interact(user) + var/list/available_inputs = list() for(var/obj/item/integrated_circuit/input/input in contents) if(input.can_be_asked_input) available_inputs.Add(input) var/obj/item/integrated_circuit/input/choice = input(user, "What do you want to interact with?", "Interaction") as null|anything in available_inputs - if(choice) + if(choice && CanInteract(user, physical_state)) choice.ask_for_input(user) /obj/item/device/electronic_assembly/emp_act(severity) ..() for(var/atom/movable/AM in contents) - AM.emp_act(severity) + AM.emp_act(severity) \ No newline at end of file diff --git a/code/modules/integrated_electronics/converters.dm b/code/modules/integrated_electronics/converters.dm index 7a837abbfa..ad5f282356 100644 --- a/code/modules/integrated_electronics/converters.dm +++ b/code/modules/integrated_electronics/converters.dm @@ -1,133 +1,101 @@ //These circuits convert one variable to another. /obj/item/integrated_circuit/converter complexity = 2 - number_of_inputs = 1 - number_of_outputs = 1 - number_of_activators = 1 - input_names = list( - "input", - ) - output_names = list( - "result" - ) - activator_names = list( - "convert" - ) + inputs = list("input") + outputs = list("output") + activators = list("convert") + category = /obj/item/integrated_circuit/converter /obj/item/integrated_circuit/converter/num2text name = "number to string" desc = "This circuit can convert a number variable into a string." icon_state = "num-string" -/obj/item/integrated_circuit/converter/num2text/work() - if(..()) - var/result = null - var/datum/integrated_io/incoming = inputs[1] - var/datum/integrated_io/outgoing = outputs[1] - if(incoming.data && isnum(incoming.data)) - result = num2text(incoming.data) +/obj/item/integrated_circuit/converter/num2text/do_work() + var/result = null + var/datum/integrated_io/incoming = inputs[1] + var/datum/integrated_io/outgoing = outputs[1] + if(incoming.data && isnum(incoming.data)) + result = num2text(incoming.data) - outgoing.data = result - outgoing.push_data() + outgoing.data = result + outgoing.push_data() /obj/item/integrated_circuit/converter/text2num name = "string to number" desc = "This circuit can convert a string variable into a number." icon_state = "string-num" -/obj/item/integrated_circuit/converter/text2num/work() - if(..()) - var/result = null - var/datum/integrated_io/incoming = inputs[1] - var/datum/integrated_io/outgoing = outputs[1] - if(incoming.data && istext(incoming.data)) - result = text2num(incoming.data) +/obj/item/integrated_circuit/converter/text2num/do_work() + var/result = null + var/datum/integrated_io/incoming = inputs[1] + var/datum/integrated_io/outgoing = outputs[1] + if(incoming.data && istext(incoming.data)) + result = text2num(incoming.data) - outgoing.data = result - outgoing.push_data() + outgoing.data = result + outgoing.push_data() /obj/item/integrated_circuit/converter/ref2text name = "reference to string" desc = "This circuit can convert a reference to something else to a string, specifically the name of that reference." icon_state = "ref-string" -/obj/item/integrated_circuit/converter/ref2text/work() - if(..()) - var/result = null - var/datum/integrated_io/incoming = inputs[1] - var/datum/integrated_io/outgoing = outputs[1] - if(incoming.data && istype(incoming.data, /atom/)) - var/atom/A = incoming.data - result = A.name +/obj/item/integrated_circuit/converter/ref2text/do_work() + var/result = null + var/datum/integrated_io/incoming = inputs[1] + var/datum/integrated_io/outgoing = outputs[1] + var/atom/A = incoming.data_as_type(/atom) + result = A && A.name - outgoing.data = result - outgoing.push_data() + outgoing.data = result + outgoing.push_data() /obj/item/integrated_circuit/converter/lowercase name = "lowercase string converter" desc = "this will cause a string to come out in all lowercase." icon_state = "lowercase" -/obj/item/integrated_circuit/converter/lowercase/work() - if(..()) - var/result = null - var/datum/integrated_io/incoming = inputs[1] - var/datum/integrated_io/outgoing = outputs[1] - if(incoming.data && istext(incoming.data)) - result = lowertext(incoming.data) +/obj/item/integrated_circuit/converter/lowercase/do_work() + var/result = null + var/datum/integrated_io/incoming = inputs[1] + var/datum/integrated_io/outgoing = outputs[1] + if(incoming.data && istext(incoming.data)) + result = lowertext(incoming.data) - outgoing.data = result - outgoing.push_data() + outgoing.data = result + outgoing.push_data() /obj/item/integrated_circuit/converter/uppercase name = "uppercase string converter" desc = "THIS WILL CAUSE A STRING TO COME OUT IN ALL UPPERCASE." icon_state = "uppercase" -/obj/item/integrated_circuit/converter/uppercase/work() - if(..()) - var/result = null - var/datum/integrated_io/incoming = inputs[1] - var/datum/integrated_io/outgoing = outputs[1] - if(incoming.data && istext(incoming.data)) - result = uppertext(incoming.data) +/obj/item/integrated_circuit/converter/uppercase/do_work() + var/result = null + var/datum/integrated_io/incoming = inputs[1] + var/datum/integrated_io/outgoing = outputs[1] + if(incoming.data && istext(incoming.data)) + result = uppertext(incoming.data) - outgoing.data = result - outgoing.push_data() + outgoing.data = result + outgoing.push_data() /obj/item/integrated_circuit/converter/concatenatior name = "concatenatior" desc = "This joins many strings together to get one big string." complexity = 4 - number_of_inputs = 8 - number_of_outputs = 1 - number_of_activators = 1 - input_names = list( - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H" - ) - output_names = list( - "result" - ) - activator_names = list( - "concatenate" - ) + inputs = list("A","B","C","D","E","F","G","H") + outputs = list("result") + activators = list("concatenate") +/obj/item/integrated_circuit/converter/concatenatior/do_work() + var/result = null + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(istext(I.data)) + result = result + I.data -/obj/item/integrated_circuit/converter/concatenatior/work() - if(..()) - var/result = null - for(var/datum/integrated_io/input/I in inputs) - I.pull_data() - if(istext(I.data)) - result = result + I.data - - var/datum/integrated_io/outgoing = outputs[1] - outgoing.data = result - outgoing.push_data() \ No newline at end of file + var/datum/integrated_io/outgoing = outputs[1] + outgoing.data = result + outgoing.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/coordinate.dm b/code/modules/integrated_electronics/coordinate.dm index 78b7ebcb4f..b97a1c1546 100644 --- a/code/modules/integrated_electronics/coordinate.dm +++ b/code/modules/integrated_electronics/coordinate.dm @@ -4,58 +4,35 @@ desc = "This allows you to easily know the position of a machine containing this device." icon_state = "gps" complexity = 4 - number_of_inputs = 0 - number_of_outputs = 2 - number_of_activators = 1 - input_names = list( - ) - output_names = list( - "X (abs)", - "Y (abs)" - ) - activator_names = list( - "get coordinates" - ) + inputs = list() + outputs = list("X (abs)", "Y (abs)") + activators = list("get coordinates") -/obj/item/integrated_circuit/gps/work() - if(..()) - var/turf/T = get_turf(src) - var/datum/integrated_io/result_x = outputs[1] - var/datum/integrated_io/result_y = outputs[2] +/obj/item/integrated_circuit/gps/do_work() + var/turf/T = get_turf(src) + var/datum/integrated_io/result_x = outputs[1] + var/datum/integrated_io/result_y = outputs[2] - result_x.data = null - result_y.data = null - if(!T) - return + result_x.data = null + result_y.data = null + if(!T) + return - result_x.data = T.x - result_y.data = T.y + result_x.data = T.x + result_y.data = T.y - for(var/datum/integrated_io/output/O in outputs) - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.push_data() /obj/item/integrated_circuit/abs_to_rel_coords name = "abs to rel coordinate converter" desc = "Easily convert absolute coordinates to relative coordinates with this." complexity = 4 - number_of_inputs = 4 - number_of_outputs = 2 - number_of_activators = 1 - input_names = list( - "X1 (abs)", - "Y1 (abs)", - "X2 (abs)", - "Y2 (abs)" - ) - output_names = list( - "X (rel)", - "Y (rel)" - ) - activator_names = list( - "compute rel coordinates" - ) + inputs = list("X1 (abs)", "Y1 (abs)", "X2 (abs)", "Y2 (abs)") + outputs = list("X (rel)", "Y (rel)") + activators = list("compute rel coordinates") -/obj/item/integrated_circuit/abs_to_rel_coords/work() +/obj/item/integrated_circuit/abs_to_rel_coords/do_work() var/datum/integrated_io/x1 = inputs[1] var/datum/integrated_io/y1 = inputs[2] @@ -69,7 +46,5 @@ result_x.data = x1.data - x2.data result_y.data = y1.data - y2.data - for(var/datum/integrated_io/output/O in outputs) - O.push_data() - ..() + O.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/data_transfer.dm b/code/modules/integrated_electronics/data_transfer.dm index 12380e9cca..23ce3e5aea 100644 --- a/code/modules/integrated_electronics/data_transfer.dm +++ b/code/modules/integrated_electronics/data_transfer.dm @@ -3,49 +3,62 @@ desc = "Splits incoming data into all of the output pins." icon_state = "splitter" complexity = 3 - number_of_inputs = 1 - number_of_outputs = 2 - input_names = list( - "data to split" - ) - output_names = list( - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H" - ) + inputs = list("data to split") + outputs = list("A","B") /obj/item/integrated_circuit/transfer/splitter/medium name = "four splitter" icon_state = "splitter4" complexity = 5 - number_of_inputs = 1 - number_of_outputs = 4 + outputs = list("A","B","C","D") /obj/item/integrated_circuit/transfer/splitter/large name = "eight splitter" icon_state = "splitter8" complexity = 9 - number_of_inputs = 1 - number_of_outputs = 8 + outputs = list("A","B","C","D","E","F","G","H") -/obj/item/integrated_circuit/transfer/splitter/work() - if(..()) - var/datum/integrated_io/I = inputs[1] - for(var/datum/integrated_io/output/O in outputs) - O.data = I.data +/obj/item/integrated_circuit/transfer/splitter/do_work() + var/datum/integrated_io/I = inputs[1] + for(var/datum/integrated_io/output/O in outputs) + O.data = I.data /obj/item/integrated_circuit/transfer/activator_splitter name = "activator splitter" desc = "Splits incoming activation pulses into all of the output pins." icon_state = "splitter" complexity = 3 - number_of_activators = 3 - activator_names = list( + activators = list( + "incoming pulse", + "outgoing pulse A", + "outgoing pulse B" + ) + +/obj/item/integrated_circuit/transfer/activator_splitter/do_work() + for(var/datum/integrated_io/activate/A in outputs) + if(A == activators[1]) + continue + if(A.linked.len) + for(var/datum/integrated_io/activate/target in A.linked) + target.holder.check_then_do_work() + +/obj/item/integrated_circuit/transfer/activator_splitter/medium + name = "four activator splitter" + icon_state = "splitter4" + complexity = 5 + activators = list( + "incoming pulse", + "outgoing pulse A", + "outgoing pulse B", + "outgoing pulse C", + "outgoing pulse D" + ) + +/obj/item/integrated_circuit/transfer/activator_splitter/large + name = "eight activator splitter" + icon_state = "splitter4" + complexity = 9 + activators = list( "incoming pulse", "outgoing pulse A", "outgoing pulse B", @@ -55,25 +68,4 @@ "outgoing pulse F", "outgoing pulse G", "outgoing pulse H" - ) - -/obj/item/integrated_circuit/transfer/activator_splitter/work() - if(..()) - for(var/datum/integrated_io/activate/A in outputs) - if(A == activators[1]) - continue - if(A.linked.len) - for(var/datum/integrated_io/activate/target in A.linked) - target.holder.work() - -/obj/item/integrated_circuit/transfer/activator_splitter/medium - name = "four activator splitter" - icon_state = "splitter4" - complexity = 5 - number_of_activators = 5 - -/obj/item/integrated_circuit/transfer/activator_splitter/large - name = "eight activator splitter" - icon_state = "splitter4" - complexity = 9 - number_of_activators = 9 + ) \ No newline at end of file diff --git a/code/modules/integrated_electronics/input_output.dm b/code/modules/integrated_electronics/input_output.dm index 42da340654..6568662dc9 100644 --- a/code/modules/integrated_electronics/input_output.dm +++ b/code/modules/integrated_electronics/input_output.dm @@ -8,41 +8,32 @@ name = "button" desc = "This tiny button must do something, right?" icon_state = "button" - number_of_inputs = 0 - number_of_outputs = 0 - number_of_activators = 1 complexity = 1 can_be_asked_input = 1 - activator_names = list( - "on pressed" - ) + inputs = list() + outputs = list() + activators = list("on pressed") /obj/item/integrated_circuit/input/button/ask_for_input(mob/user) //Bit misleading name for this specific use. var/datum/integrated_io/A = activators[1] if(A.linked.len) for(var/datum/integrated_io/activate/target in A.linked) - target.holder.work() - user << "You press the button labeled '[src.name]'." + target.holder.check_then_do_work() + to_chat(user, "You press the button labeled '[src.name]'.") /obj/item/integrated_circuit/input/numberpad name = "number pad" desc = "This small number pad allows someone to input a number into the system." icon_state = "numberpad" - number_of_inputs = 0 - number_of_outputs = 1 - number_of_activators = 1 complexity = 2 can_be_asked_input = 1 - output_names = list( - "number entered" - ) - activator_names = list( - "on entered" - ) + inputs = list() + outputs = list("number entered") + activators = list("on entered") /obj/item/integrated_circuit/input/numberpad/ask_for_input(mob/user) var/new_input = input(user, "Enter a number, please.","Number pad") as null|num - if(isnum(new_input)) + if(isnum(new_input) && CanInteract(user, physical_state)) var/datum/integrated_io/O = outputs[1] O.data = new_input O.push_data() @@ -53,21 +44,15 @@ name = "text pad" desc = "This small text pad allows someone to input a string into the system." icon_state = "textpad" - number_of_inputs = 0 - number_of_outputs = 1 - number_of_activators = 1 complexity = 2 can_be_asked_input = 1 - output_names = list( - "string entered" - ) - activator_names = list( - "on entered" - ) + inputs = list() + outputs = list("string entered") + activators = list("on entered") /obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user) var/new_input = input(user, "Enter some words, please.","Number pad") as null|text - if(new_input && istext(new_input)) + if(istext(new_input) && CanInteract(user, physical_state)) var/datum/integrated_io/O = outputs[1] O.data = new_input O.push_data() @@ -78,53 +63,37 @@ name = "integrated medical analyser" desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is." icon_state = "medscan" - number_of_inputs = 1 - number_of_outputs = 2 - number_of_activators = 1 complexity = 4 - input_names = list( - "target ref" - ) - output_names = list( - "total health %", - "total missing health" - ) - activator_names = list( - "scan" - ) + inputs = list("target ref") + outputs = list("total health %", "total missing health") + activators = list("scan") -/obj/item/integrated_circuit/input/med_scanner/work() - if(..()) - var/datum/integrated_io/I = inputs[1] - if(!I.data || !ishuman(I.data)) //Invalid input - return - var/mob/living/carbon/human/H = I.data - if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. - var/total_health = round(H.health/H.maxHealth, 0.1)*100 - var/missing_health = H.maxHealth - H.health +/obj/item/integrated_circuit/input/med_scanner/do_work() + var/datum/integrated_io/I = inputs[1] + var/mob/living/carbon/human/H = I.data_as_type(/mob/living/carbon/human) + if(!istype(H)) //Invalid input + return + if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. + var/total_health = round(H.health/H.maxHealth, 0.1)*100 + var/missing_health = H.maxHealth - H.health - var/datum/integrated_io/total = outputs[1] - var/datum/integrated_io/missing = outputs[2] + var/datum/integrated_io/total = outputs[1] + var/datum/integrated_io/missing = outputs[2] - total.data = total_health - missing.data = missing_health + total.data = total_health + missing.data = missing_health - for(var/datum/integrated_io/output/O in outputs) - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.push_data() /obj/item/integrated_circuit/input/adv_med_scanner name = "integrated advanced medical analyser" desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is. \ This type is much more precise, allowing the machine to know much more about the target than a normal analyzer." icon_state = "medscan_adv" - number_of_inputs = 1 - number_of_outputs = 7 - number_of_activators = 1 complexity = 12 - input_names = list( - "target ref" - ) - output_names = list( + inputs = list("target ref") + outputs = list( "total health %", "total missing health", "brute damage", @@ -133,68 +102,86 @@ "oxy damage", "clone damage" ) - activator_names = list( - "scan" - ) + activators = list("scan") -/obj/item/integrated_circuit/input/adv_med_scanner/work() - if(..()) - var/datum/integrated_io/I = inputs[1] - if(!I.data || !ishuman(I.data)) //Invalid input - return - var/mob/living/carbon/human/H = I.data - if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. - var/total_health = round(H.health/H.maxHealth, 0.1)*100 - var/missing_health = H.maxHealth - H.health +/obj/item/integrated_circuit/input/adv_med_scanner/do_work() + var/datum/integrated_io/I = inputs[1] + var/mob/living/carbon/human/H = I.data_as_type(/mob/living/carbon/human) + if(!istype(H)) //Invalid input + return + if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. + var/total_health = round(H.health/H.maxHealth, 0.1)*100 + var/missing_health = H.maxHealth - H.health - var/datum/integrated_io/total = outputs[1] - var/datum/integrated_io/missing = outputs[2] - var/datum/integrated_io/brute = outputs[3] - var/datum/integrated_io/burn = outputs[4] - var/datum/integrated_io/tox = outputs[5] - var/datum/integrated_io/oxy = outputs[6] - var/datum/integrated_io/clone = outputs[7] + var/datum/integrated_io/total = outputs[1] + var/datum/integrated_io/missing = outputs[2] + var/datum/integrated_io/brute = outputs[3] + var/datum/integrated_io/burn = outputs[4] + var/datum/integrated_io/tox = outputs[5] + var/datum/integrated_io/oxy = outputs[6] + var/datum/integrated_io/clone = outputs[7] - total.data = total_health - missing.data = missing_health - brute.data = H.getBruteLoss() - burn.data = H.getFireLoss() - tox.data = H.getToxLoss() - oxy.data = H.getOxyLoss() - clone.data = H.getCloneLoss() + total.data = total_health + missing.data = missing_health + brute.data = H.getBruteLoss() + burn.data = H.getFireLoss() + tox.data = H.getToxLoss() + oxy.data = H.getOxyLoss() + clone.data = H.getCloneLoss() - for(var/datum/integrated_io/output/O in outputs) - O.push_data() + for(var/datum/integrated_io/output/O in outputs) + O.push_data() /obj/item/integrated_circuit/input/local_locator name = "local locator" desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ that is holding the machine containing it." - number_of_inputs = 0 - number_of_outputs = 1 - number_of_activators = 1 - complexity = 4 - output_names = list( - "located ref" - ) - activator_names = list( - "locate" - ) + inputs = list() + outputs = list("located ref") + activators = list("locate") -/obj/item/integrated_circuit/input/local_locator/work() - if(..()) - var/mob/living/L = null - var/datum/integrated_io/O = outputs[1] - O.data = null - if(istype(src.loc, /obj/item/device/electronic_assembly)) // Check to make sure we're actually in a machine. - var/obj/item/device/electronic_assembly/assembly = src.loc - if(istype(assembly.loc, /mob/living)) // Now check if someone's holding us. - L = assembly.loc +/obj/item/integrated_circuit/input/local_locator/do_work() + var/datum/integrated_io/O = outputs[1] + O.data = null + if(istype(src.loc, /obj/item/device/electronic_assembly)) // Check to make sure we're actually in a machine. + var/obj/item/device/electronic_assembly/assembly = src.loc + if(istype(assembly.loc, /mob/living)) // Now check if someone's holding us. + O.data = weakref(assembly.loc) - if(L) - O.data = L + O.push_data() - O.push_data() +/obj/item/integrated_circuit/input/adjacent_locator + name = "adjacent locator" + desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ + that is standing a meter away from the machine." + extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. This means that it will \ + give refs to nearby objects that are similar. If more than one valid object is found nearby, it will choose one of them at \ + random." + inputs = list("desired type ref") + outputs = list("located ref") + activators = list("locate") + +/obj/item/integrated_circuit/input/adjacent_locator/do_work() + var/datum/integrated_io/I = inputs[1] + var/datum/integrated_io/O = outputs[1] + O.data = null + + if(!isweakref(I.data)) + return + var/atom/A = I.data.resolve() + if(!A) + return + var/desired_type = A.type + + var/list/nearby_things = range(1, get_turf(src)) + var/list/valid_things = list() + for(var/atom/thing in nearby_things) + if(thing.type != desired_type) + continue + valid_things.Add(thing) + if(valid_things.len) + O.data = weakref(pick(valid_things)) + O.push_data() /obj/item/integrated_circuit/input/signaler name = "integrated signaler" @@ -203,57 +190,48 @@ The two input pins are to configure the integrated signaler's settings. Note that the frequency should not have a decimal in it. \ Meaning the default frequency is expressed as 1457, not 145.7. To send a signal, pulse the 'send signal' activator pin." icon_state = "signal" - number_of_inputs = 2 - number_of_outputs = 0 - number_of_activators = 2 complexity = 4 - input_names = list( - "frequency", - "code" - ) - activator_names = list( - "send signal", - "on signal received" - ) + inputs = list("frequency","code") + outputs = list() + activators = list("send signal","on signal received") + var/frequency = 1457 var/code = 30 var/datum/radio_frequency/radio_connection -/obj/item/integrated_circuit/input/signaler/New() +/obj/item/integrated_circuit/input/signaler/initialize() ..() - spawn(4 SECONDS) - set_frequency(frequency) - var/datum/integrated_io/new_freq = inputs[1] - var/datum/integrated_io/new_code = inputs[2] - // Set the pins so when someone sees them, they won't show as null - new_freq.data = frequency - new_code.data = code + set_frequency(frequency) + var/datum/integrated_io/new_freq = inputs[1] + var/datum/integrated_io/new_code = inputs[2] + // Set the pins so when someone sees them, they won't show as null + new_freq.data = frequency + new_code.data = code /obj/item/integrated_circuit/input/signaler/Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) frequency = 0 - ..() + . = ..() /obj/item/integrated_circuit/input/signaler/on_data_written() var/datum/integrated_io/new_freq = inputs[1] var/datum/integrated_io/new_code = inputs[2] - if(isnum(new_freq.data)) + if(isnum(new_freq.data) && new_freq.data > 0) set_frequency(new_freq.data) if(isnum(new_code.data)) code = new_code.data -/obj/item/integrated_circuit/input/signaler/work() // Sends a signal. - if(..()) - if(!radio_connection) - return +/obj/item/integrated_circuit/input/signaler/do_work() // Sends a signal. + if(!radio_connection) + return - var/datum/signal/signal = new() - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" - radio_connection.post_signal(src, signal) + var/datum/signal/signal = new() + signal.source = src + signal.encryption = code + signal.data["message"] = "ACTIVATE" + radio_connection.post_signal(src, signal) /obj/item/integrated_circuit/input/signaler/proc/set_frequency(new_frequency) if(!frequency) @@ -282,10 +260,9 @@ var/datum/integrated_io/A = activators[2] A.push_data() - for(var/mob/O in hearers(1, src.loc)) + for(var/mob/O in hearers(1, get_turf(src))) O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) - /obj/item/integrated_circuit/input/EPv2 name = "\improper EPv2 circuit" desc = "Enables the sending and receiving of messages on the Exonet with the EPv2 protocol." @@ -293,31 +270,17 @@ second pin on each side, with additonal data reserved for the third pin. When a message is received, the second activaiton pin \ will pulse whatever's connected to it. Pulsing the first activation pin will send a message." icon_state = "signal" - number_of_inputs = 3 - number_of_outputs = 3 - number_of_activators = 2 complexity = 4 - input_names = list( - "target EPv2 address", - "data to send", - "secondary text" - ) - output_names = list( - "address received", - "data received", - "secondary text received" - ) - activator_names = list( - "send data", - "on data received" - ) + inputs = list("target EPv2 address", "data to send", "secondary text") + outputs = list("address received", "data received", "secondary text received") + activators = list("send data", "on data received") var/datum/exonet_protocol/exonet = null /obj/item/integrated_circuit/input/EPv2/New() ..() exonet = new(src) exonet.make_address("EPv2_circuit-\ref[src]") - desc += "This circuit's EPv2 address is: [exonet.address]." + desc += "
    This circuit's EPv2 address is: [exonet.address]." /obj/item/integrated_circuit/input/EPv2/Destroy() if(exonet) @@ -325,13 +288,12 @@ qdel(exonet) ..() -/obj/item/integrated_circuit/input/EPv2/work() - if(..()) - var/datum/integrated_io/target_address = inputs[1] - var/datum/integrated_io/message = inputs[2] - var/datum/integrated_io/text = inputs[3] - if(istext(target_address.data)) - exonet.send_message(target_address.data, message.data, text.data) +/obj/item/integrated_circuit/input/EPv2/do_work() + var/datum/integrated_io/target_address = inputs[1] + var/datum/integrated_io/message = inputs[2] + var/datum/integrated_io/text = inputs[3] + if(istext(target_address.data)) + exonet.send_message(target_address.data, message.data, text.data) /obj/item/integrated_circuit/input/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text) var/datum/integrated_io/message_received = outputs[1] @@ -349,42 +311,35 @@ name = "screen" desc = "This small screen can display a single piece of data, when the machine is examined closely." icon_state = "screen" - complexity = 4 - number_of_inputs = 1 - number_of_outputs = 0 - number_of_activators = 1 - input_names = list( - "displayed data" - ) - activator_names = list( - "load data" - ) + inputs = list("displayed data") + outputs = list() + activators = list("load data") var/stuff_to_display = null -/obj/item/integrated_circuit/output/screen/work() +/obj/item/integrated_circuit/output/screen/do_work() var/datum/integrated_io/I = inputs[1] - stuff_to_display = I.data + if(isweakref(I.data)) + var/datum/d = I.data_as_type(/datum) + if(d) + stuff_to_display = "[d]" + else + stuff_to_display = I.data /obj/item/integrated_circuit/output/light name = "light" desc = "This light can turn on and off on command." icon_state = "light_adv" -// icon_state = "light" complexity = 4 - number_of_inputs = 0 - number_of_outputs = 0 - number_of_activators = 1 - activator_names = list( - "toggle light" - ) + inputs = list() + outputs = list() + activators = list("toggle light") var/light_toggled = 0 var/light_brightness = 3 var/light_rgb = "#FFFFFF" -/obj/item/integrated_circuit/output/light/work() - if(..()) - light_toggled = !light_toggled - update_lighting() +/obj/item/integrated_circuit/output/light/do_work() + light_toggled = !light_toggled + update_lighting() /obj/item/integrated_circuit/output/light/proc/update_lighting() if(light_toggled) @@ -413,15 +368,13 @@ desc = "This light can turn on and off on command, in any color, and in various brightness levels." icon_state = "light_adv" complexity = 8 - number_of_inputs = 4 - number_of_outputs = 0 - number_of_activators = 1 - input_names = list( + inputs = list( "R", "G", "B", "Brightness" ) + outputs = list() /obj/item/integrated_circuit/output/light/advanced/on_data_written() update_lighting() @@ -432,38 +385,43 @@ icon_state = "speaker" complexity = 8 cooldown_per_use = 4 SECONDS - number_of_inputs = 3 - number_of_outputs = 0 - number_of_activators = 1 - input_names = list( + inputs = list( "sound ID", "volume", "frequency" ) - activator_names = list( - "play sound" - ) + outputs = list() + activators = list("play sound") var/list/sounds = list() + category = /obj/item/integrated_circuit/output/sound -/obj/item/integrated_circuit/output/sound/work() - if(..()) - var/datum/integrated_io/ID = inputs[1] - var/datum/integrated_io/vol = inputs[2] - var/datum/integrated_io/frequency = inputs[3] - if(istext(ID.data) && isnum(vol.data) && isnum(frequency.data)) - var/selected_sound = sounds[ID.data] - vol.data = Clamp(vol.data, 0, 1) - frequency.data = Clamp(frequency.data, 0, 100) - playsound(get_turf(src), selected_sound, vol.data, frequency.data, -1) +/obj/item/integrated_circuit/output/sound/New() + ..() + extended_desc = list() + extended_desc += "The first input pin determines which sound is used. The choices are; " + extended_desc += jointext(sounds, ", ") + extended_desc += ". The second pin determines the volume of sound that is played" + extended_desc += ", and the third determines if the frequency of the sound will vary with each activation." + extended_desc = jointext(extended_desc, null) + +/obj/item/integrated_circuit/output/sound/do_work() + var/datum/integrated_io/ID = inputs[1] + var/datum/integrated_io/vol = inputs[2] + var/datum/integrated_io/frequency = inputs[3] + if(istext(ID.data) && isnum(vol.data) && isnum(frequency.data)) + var/selected_sound = sounds[ID.data] + if(!selected_sound) + world << "No sound" + return + vol.data = Clamp(vol.data, 0, 100) + frequency.data = round(Clamp(frequency.data, 0, 1)) + playsound(get_turf(src), selected_sound, vol.data, frequency.data, -1) /obj/item/integrated_circuit/output/sound/beeper name = "beeper circuit" desc = "A miniature speaker is attached to this component. This is often used in the construction of motherboards, which use \ the speaker to tell the user if something goes very wrong when booting up. It can also do other similar synthetic sounds such \ as buzzing, pinging, chiming, and more." - extended_desc = "The first input pin determines what sound is used. The choices are; beep, chime, buzz sigh, buzz twice, ping, \ - synth yes, synth no, warning buzz. The second pin determines the volume of sound that is played, and the third determines if \ - the frequency of the sound will vary with each activation." sounds = list( "beep" = 'sound/machines/twobeep.ogg', "chime" = 'sound/machines/chime.ogg', @@ -478,9 +436,6 @@ /obj/item/integrated_circuit/output/sound/beepsky name = "securitron sound circuit" desc = "A miniature speaker is attached to this component. Considered by some to be the essential component for a securitron." - extended_desc = "The first input pin determines what sound is used. The choices are; creep, criminal, freeze, god, \ - i am the law, insult, radio, secure day. The second pin determines the volume of sound that is played, and the \ - third determines if the frequency of the sound will vary with each activation." sounds = list( "creep" = 'sound/voice/bcreep.ogg', "criminal" = 'sound/voice/bcriminal.ogg', @@ -490,5 +445,4 @@ "insult" = 'sound/voice/binsult.ogg', "radio" = 'sound/voice/bradio.ogg', "secure day" = 'sound/voice/bsecureday.ogg', - ) - + ) \ No newline at end of file diff --git a/code/modules/integrated_electronics/logic.dm b/code/modules/integrated_electronics/logic.dm index 4d123c61d0..cb4fc55f35 100644 --- a/code/modules/integrated_electronics/logic.dm +++ b/code/modules/integrated_electronics/logic.dm @@ -1,172 +1,106 @@ /obj/item/integrated_circuit/logic name = "logic gate" desc = "This tiny chip will decide for you!" + extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE." complexity = 3 - number_of_inputs = 2 - number_of_outputs = 1 - number_of_activators = 2 - input_names = list( - "A", - "B" - ) - output_names = list( - "result" - ) - activator_names = list( - "compare", - "on true result" - ) + outputs = list("result") + activators = list("compare", "on true result") + category = /obj/item/integrated_circuit/logic -/obj/item/integrated_circuit/logic/equals +/obj/item/integrated_circuit/logic/do_work() + var/datum/integrated_io/O = outputs[1] + var/datum/integrated_io/P = activators[2] + O.push_data() + if(O.data) + P.push_data() + +/obj/item/integrated_circuit/logic/binary + inputs = list("A","B") + category = /obj/item/integrated_circuit/logic/binary + +/obj/item/integrated_circuit/logic/binary/do_work() + var/datum/integrated_io/A = inputs[1] + var/datum/integrated_io/B = inputs[2] + var/datum/integrated_io/O = outputs[1] + O.data = do_compare(A, B) ? TRUE : FALSE + ..() + +/obj/item/integrated_circuit/logic/binary/proc/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return FALSE + +/obj/item/integrated_circuit/logic/unary + inputs = list("A") + category = /obj/item/integrated_circuit/logic/unary + +/obj/item/integrated_circuit/logic/unary/do_work() + var/datum/integrated_io/A = inputs[1] + var/datum/integrated_io/O = outputs[1] + O.data = do_check(A) ? TRUE : FALSE + ..() + +/obj/item/integrated_circuit/logic/unary/proc/do_check(var/datum/integrated_io/A) + return FALSE + +/obj/item/integrated_circuit/logic/binary/equals name = "equal gate" desc = "This gate compares two values, and outputs the number one if both are the same." icon_state = "equal" -/obj/item/integrated_circuit/logic/equals/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data == B.data) - O.data = 1 - O.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/equals/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data == B.data -/obj/item/integrated_circuit/logic/not - name = "not gate" - desc = "This gate inverts what's fed into it." - icon_state = "not" - number_of_inputs = 1 - number_of_outputs = 1 - number_of_activators = 1 - output_names = list( - "invert" - ) - - -/obj/item/integrated_circuit/logic/not/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/O = outputs[1] - if(A.data) - O.data = !A.data - O.push_data() - else - O.data = 0 - -/obj/item/integrated_circuit/logic/and +/obj/item/integrated_circuit/logic/binary/and name = "and gate" desc = "This gate will output 'one' if both inputs evaluate to true." icon_state = "and" -/obj/item/integrated_circuit/logic/and/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data && B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/and/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data && B.data -/obj/item/integrated_circuit/logic/or +/obj/item/integrated_circuit/logic/binary/or name = "or gate" desc = "This gate will output 'one' if one of the inputs evaluate to true." icon_state = "or" -/obj/item/integrated_circuit/logic/or/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data || B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/or/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data || B.data -/obj/item/integrated_circuit/logic/less_than +/obj/item/integrated_circuit/logic/binary/less_than name = "less than gate" desc = "This will output 'one' if the first input is less than the second input." icon_state = "less_than" -/obj/item/integrated_circuit/logic/less_than/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data < B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/less_than/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data < B.data -/obj/item/integrated_circuit/logic/less_than_or_equal +/obj/item/integrated_circuit/logic/binary/less_than_or_equal name = "less than or equal gate" desc = "This will output 'one' if the first input is less than, or equal to the second input." icon_state = "less_than_or_equal" -/obj/item/integrated_circuit/logic/less_than_or_equal/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data <= B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/less_than_or_equal/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data <= B.data -/obj/item/integrated_circuit/logic/greater_than +/obj/item/integrated_circuit/logic/binary/greater_than name = "greater than gate" desc = "This will output 'one' if the first input is greater than the second input." icon_state = "greater_than" -/obj/item/integrated_circuit/logic/greater_than/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data > B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 +/obj/item/integrated_circuit/logic/binary/greater_than/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data > B.data -/obj/item/integrated_circuit/logic/greater_than_or_equal +/obj/item/integrated_circuit/logic/binary/greater_than_or_equal name = "greater_than or equal gate" desc = "This will output 'one' if the first input is greater than, or equal to the second input." icon_state = "greater_than_or_equal" -/obj/item/integrated_circuit/logic/greater_than_or_equal/work() - if(..()) - var/datum/integrated_io/A = inputs[1] - var/datum/integrated_io/B = inputs[2] - var/datum/integrated_io/O = outputs[1] - var/datum/integrated_io/P = activators[2] - if(A.data >= B.data) - O.data = 1 - O.push_data() - A.push_data() - P.push_data() - else - O.data = 0 \ No newline at end of file +/obj/item/integrated_circuit/logic/binary/greater_than_or_equal/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B) + return A.data >= B.data + +/obj/item/integrated_circuit/logic/unary/not + name = "not gate" + desc = "This gate inverts what's fed into it." + icon_state = "not" + +/obj/item/integrated_circuit/logic/unary/not/do_check(var/datum/integrated_io/A) + return !A.data \ No newline at end of file diff --git a/code/modules/integrated_electronics/manipulation.dm b/code/modules/integrated_electronics/manipulation.dm index 256d7b6b7a..bad3944e8e 100644 --- a/code/modules/integrated_electronics/manipulation.dm +++ b/code/modules/integrated_electronics/manipulation.dm @@ -6,14 +6,12 @@ The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Note that the \ normal limitations to firearms, such as ammunition requirements and firing delays, still hold true if fired by the mechanism." complexity = 20 - number_of_inputs = 2 - number_of_outputs = 0 - number_of_activators = 1 - input_names = list( + inputs = list( "target X rel", "target Y rel" ) - activator_names = list( + outputs = list() + activators = list( "fire" ) var/obj/item/weapon/gun/installed_gun = null @@ -45,7 +43,7 @@ else user << "There's no weapon to remove from the mechanism." -/obj/item/integrated_circuit/manipulation/weapon_firing/work() +/obj/item/integrated_circuit/manipulation/weapon_firing/do_work() if(..()) if(!installed_gun) return @@ -95,28 +93,141 @@ into the smoke clouds when activated." flags = OPENCONTAINER complexity = 20 - number_of_inputs = 0 - number_of_outputs = 0 - number_of_activators = 1 cooldown_per_use = 30 SECONDS - input_names = list() - activator_names = list( - "create smoke" - ) + inputs = list() + outputs = list() + activators = list("create smoke") /obj/item/integrated_circuit/manipulation/smoke/New() ..() create_reagents(100) -/obj/item/integrated_circuit/manipulation/smoke/work() - if(..()) - playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - var/datum/effect/effect/system/smoke_spread/chem/smoke_system = new() - smoke_system.set_up(reagents, 10, 0, get_turf(src)) - spawn(0) - for(var/i = 1 to 8) - smoke_system.start() - reagents.clear_reagents() +/obj/item/integrated_circuit/manipulation/smoke/do_work() + playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) + var/datum/effect/effect/system/smoke_spread/chem/smoke_system = new() + smoke_system.set_up(reagents, 10, 0, get_turf(src)) + spawn(0) + for(var/i = 1 to 8) + smoke_system.start() + reagents.clear_reagents() + +/obj/item/integrated_circuit/manipulation/injector + name = "integrated hypo-injector" + desc = "This scary looking thing is able to pump liquids into whatever it's pointed at." + icon_state = "injector" + extended_desc = "This autoinjector can push reagents into another container or someone else outside of the machine. The target \ + must be adjacent to the machine, and if it is a person, they cannot be wearing thick clothing." + flags = OPENCONTAINER + complexity = 20 + cooldown_per_use = 6 SECONDS + inputs = list("target ref", "injection amount" = 5) + outputs = list() + activators = list("inject") + +/obj/item/integrated_circuit/manipulation/injector/New() + ..() + create_reagents(30) + +/obj/item/integrated_circuit/manipulation/injector/proc/inject_amount() + var/datum/integrated_io/amount = inputs[2] + if(isnum(amount.data)) + return Clamp(amount.data, 0, 30) + +/obj/item/integrated_circuit/manipulation/injector/do_work() + set waitfor = 0 // Don't sleep in a proc that is called by a processor without this set, otherwise it'll delay the entire thing + + var/datum/integrated_io/target = inputs[1] + var/atom/movable/AM = target.data_as_type(/atom/movable) + if(!istype(AM)) //Invalid input + return + if(!reagents.total_volume) // Empty + return + if(AM.can_be_injected_by(src)) + if(isliving(AM)) + var/turf/T = get_turf(AM) + T.visible_message("[src] is trying to inject [AM]!") + sleep(3 SECONDS) + if(!AM.can_be_injected_by(src)) + return + var/contained = reagents.get_reagents() + var/trans = reagents.trans_to_mob(target, inject_amount(), CHEM_BLOOD) + message_admins("[src] injected \the [AM] with [trans]u of [contained].") + to_chat(AM, "You feel a tiny prick!") + visible_message("[src] injects [AM]!") + else + reagents.trans_to(AM, inject_amount()) + +/obj/item/integrated_circuit/manipulation/reagent_pump + name = "reagent pump" + desc = "Moves liquids safely inside a machine, or even nearby it." + icon_state = "reagent_pump" + extended_desc = "This is a pump, which will move liquids from the source ref to the target ref. The third pin determines \ + how much liquid is moved per pulse, between 0 and 50. The pump can move reagents to any open container inside the machine, or \ + outside the machine if it is next to the machine. Note that this cannot be used on entities." + flags = OPENCONTAINER + complexity = 8 + inputs = list("source ref", "target ref", "injection amount" = 10) + outputs = list() + activators = list("transfer reagents") + var/transfer_amount = 10 + +/obj/item/integrated_circuit/manipulation/reagent_pump/on_data_written() + var/datum/integrated_io/amount = inputs[3] + if(isnum(amount.data)) + amount.data = Clamp(amount.data, 0, 50) + transfer_amount = amount.data + +/obj/item/integrated_circuit/manipulation/reagent_pump/do_work() + var/datum/integrated_io/A = inputs[1] + var/datum/integrated_io/B = inputs[2] + var/atom/movable/source = A.data_as_type(/atom/movable) + var/atom/movable/target = B.data_as_type(/atom/movable) + if(!istype(source) || !istype(target)) //Invalid input + return + var/turf/T = get_turf(src) + if(source.Adjacent(T) && target.Adjacent(T)) + if(!source.reagents || !target.reagents) + return + if(ismob(source) || ismob(target)) + return + if(!source.is_open_container() || !target.is_open_container()) + return + if(!source.reagents.get_free_space() || !target.reagents.get_free_space()) + return + + source.reagents.trans_to(target, transfer_amount) + +// May make a reagent subclass of circuits in future. +/obj/item/integrated_circuit/manipulation/reagent_storage + name = "reagent storage" + desc = "Stores liquid inside, and away from electrical components. Can store up to 60u." + icon_state = "reagent_storage" + extended_desc = "This is effectively an internal beaker." + flags = OPENCONTAINER + complexity = 4 + inputs = list() + outputs = list("volume used") + activators = list() + +/obj/item/integrated_circuit/manipulation/reagent_storage/New() + ..() + create_reagents(60) + +/obj/item/integrated_circuit/manipulation/reagent_storage/on_reagent_change() + var/datum/integrated_io/A = outputs[1] + A.data = reagents.total_volume + A.push_data() + +/obj/item/integrated_circuit/manipulation/reagent_storage/cryo + name = "cryo reagent storage" + desc = "Stores liquid inside, and away from electrical components. Can store up to 60u. This will also suppress reactions." + icon_state = "reagent_storage_cryo" + extended_desc = "This is effectively an internal cryo beaker." + flags = OPENCONTAINER | NOREACT + complexity = 8 + inputs = list() + outputs = list("volume used") + activators = list() /obj/item/integrated_circuit/manipulation/locomotion name = "locomotion circuit" @@ -133,26 +244,20 @@ Southwest = 10
    \
    \ Pulsing the 'step towards dir' activator pin will cause the machine to move a meter in that direction, assuming it is not \ - being held, or anchored in some way." + being held, or anchored in some way. It should be noted that heavy machines will be unable to move." complexity = 20 - number_of_inputs = 1 - number_of_outputs = 0 - number_of_activators = 1 - input_names = list( - "dir num" - ) - activator_names = list( - "step towards dir" - ) + inputs = list("dir num") + outputs = list() + activators = list("step towards dir") -/obj/item/integrated_circuit/manipulation/locomotion/work() - if(..()) - var/turf/T = get_turf(src) - if(istype(loc, /obj/item/device/electronic_assembly)) - var/obj/item/device/electronic_assembly/machine = loc - if(machine.anchored || machine.w_class >= 4) - return - if(machine.loc && machine.loc == T) // Check if we're held by someone. If the loc is the floor, we're not held. - var/datum/integrated_io/wanted_dir = inputs[1] - if(isnum(wanted_dir.data)) - step(machine, wanted_dir.data) \ No newline at end of file +/obj/item/integrated_circuit/manipulation/locomotion/do_work() + ..() + var/turf/T = get_turf(src) + if(T && istype(loc, /obj/item/device/electronic_assembly)) + var/obj/item/device/electronic_assembly/machine = loc + if(machine.anchored || machine.w_class >= ITEMSIZE_LARGE) + return + if(machine.loc == T) // Check if we're held by someone. If the loc is the floor, we're not held. + var/datum/integrated_io/wanted_dir = inputs[1] + if(isnum(wanted_dir.data)) + step(machine, wanted_dir.data) \ No newline at end of file diff --git a/code/modules/integrated_electronics/memory.dm b/code/modules/integrated_electronics/memory.dm index 8599cc2aed..aa62843209 100644 --- a/code/modules/integrated_electronics/memory.dm +++ b/code/modules/integrated_electronics/memory.dm @@ -3,99 +3,151 @@ desc = "This tiny chip can store one piece of data." icon_state = "memory" complexity = 1 - number_of_inputs = 1 - number_of_outputs = 1 - number_of_activators = 1 - activator_names = list( - "set" - ) + inputs = list("input pin 1") + outputs = list("output pin 1") + activators = list("set") + category = /obj/item/integrated_circuit/memory /obj/item/integrated_circuit/memory/examine(mob/user) ..() var/i for(i = 1, i <= outputs.len, i++) var/datum/integrated_io/O = outputs[i] - user << "\The [src] has [O.data ? "'O.data'" : "nothing"] saved to address [i]." + var/data = "nothing" + if(isweakref(O.data)) + var/datum/d = O.data_as_type(/datum) + if(d) + data = "[d]" + else if(!isnull(O.data)) + data = O.data + to_chat(user, "\The [src] has [data] saved to address [i].") -/obj/item/integrated_circuit/memory/work() - if(..()) - var/i - for(i = 1, i <= inputs.len, i++) - var/datum/integrated_io/I = inputs[i] - var/datum/integrated_io/O = outputs[i] - O.data = I.data +/obj/item/integrated_circuit/memory/do_work() + for(var/i = 1 to inputs.len) + var/datum/integrated_io/I = inputs[i] + var/datum/integrated_io/O = outputs[i] + O.data = I.data /obj/item/integrated_circuit/memory/medium name = "memory circuit" desc = "This circuit can store four pieces of data." icon_state = "memory4" complexity = 4 - number_of_inputs = 4 - number_of_outputs = 4 + inputs = list("input pin 1","input pin 2","input pin 3","input pin 4") + outputs = list("output pin 1","output pin 2","output pin 3","output pin 4") /obj/item/integrated_circuit/memory/large name = "large memory circuit" desc = "This big circuit can hold eight pieces of data." icon_state = "memory8" complexity = 8 - number_of_inputs = 8 - number_of_outputs = 8 + inputs = list( + "input pin 1", + "input pin 2", + "input pin 3", + "input pin 4", + "input pin 5", + "input pin 6", + "input pin 7", + "input pin 8") + outputs = list( + "output pin 1", + "output pin 2", + "output pin 3", + "output pin 4", + "output pin 5", + "output pin 6", + "output pin 7", + "output pin 8") /obj/item/integrated_circuit/memory/huge name = "large memory stick" desc = "This stick of memory can hold up up to sixteen pieces of data." icon_state = "memory16" complexity = 16 - number_of_inputs = 16 - number_of_outputs = 16 + inputs = list( + "input pin 1", + "input pin 2", + "input pin 3", + "input pin 4", + "input pin 5", + "input pin 6", + "input pin 7", + "input pin 8", + "input pin 9", + "input pin 10", + "input pin 11", + "input pin 12", + "input pin 13", + "input pin 14", + "input pin 15", + "input pin 16" + ) + outputs = list( + "output pin 1", + "output pin 2", + "output pin 3", + "output pin 4", + "output pin 5", + "output pin 6", + "output pin 7", + "output pin 8", + "output pin 9", + "output pin 10", + "output pin 11", + "output pin 12", + "output pin 13", + "output pin 14", + "output pin 15", + "output pin 16") /obj/item/integrated_circuit/memory/constant name = "constant chip" desc = "This tiny chip can store one piece of data, which cannot be overwritten without disassembly." icon_state = "memory" complexity = 1 - number_of_inputs = 0 - number_of_outputs = 1 - number_of_activators = 1 - activator_names = list( - "push data" - ) + inputs = list() + outputs = list("output pin") + activators = list("push data") var/accepting_refs = 0 -/obj/item/integrated_circuit/memory/constant/work() +/obj/item/integrated_circuit/memory/constant/do_work() var/datum/integrated_io/O = outputs[1] O.push_data() /obj/item/integrated_circuit/memory/constant/attack_self(mob/user) var/datum/integrated_io/O = outputs[1] var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref", "null") + if(!CanInteract(user, physical_state)) + return + var/new_data = null switch(type_to_use) if("string") accepting_refs = 0 new_data = input("Now type in a string.","[src] string writing") as null|text - if(istext(new_data)) + if(istext(new_data) && CanInteract(user, physical_state)) O.data = new_data - user << "You set \the [src]'s memory to [O.display_data()]." + to_chat(user, "You set \the [src]'s memory to [O.display_data()].") if("number") accepting_refs = 0 new_data = input("Now type in a number.","[src] number writing") as null|num - if(isnum(new_data)) + if(isnum(new_data) && CanInteract(user, physical_state)) O.data = new_data - user << "You set \the [src]'s memory to [O.display_data()]." + to_chat(user, "You set \the [src]'s memory to [O.display_data()].") if("ref") accepting_refs = 1 - user << "You turn \the [src]'s ref scanner on. Slide it across \ - an object for a ref of that object to save it in memory." + to_chat(user, "You turn \the [src]'s ref scanner on. Slide it across \ + an object for a ref of that object to save it in memory.") if("null") O.data = null - user << "You set \the [src]'s memory to absolutely nothing." + to_chat(user, "You set \the [src]'s memory to absolutely nothing.") /obj/item/integrated_circuit/memory/constant/afterattack(atom/target, mob/living/user, proximity) if(accepting_refs && proximity) var/datum/integrated_io/O = outputs[1] - O.data = target + O.data = weakref(target) visible_message("[user] slides \a [src]'s over \the [target].") - user << "You set \the [src]'s memory to a reference to [O.display_data()]. The ref scanner is \ - now off." + to_chat(user, "You set \the [src]'s memory to a reference to [O.display_data()]. The ref scanner is \ + now off.") accepting_refs = 0 \ No newline at end of file diff --git a/code/modules/integrated_electronics/time.dm b/code/modules/integrated_electronics/time.dm index 95b8e02c46..f351f86590 100644 --- a/code/modules/integrated_electronics/time.dm +++ b/code/modules/integrated_electronics/time.dm @@ -2,40 +2,38 @@ name = "time circuit" desc = "Now you can build your own clock!" complexity = 2 - number_of_inputs = 0 - number_of_outputs = 0 + inputs = list() + outputs = list() + category = /obj/item/integrated_circuit/time /obj/item/integrated_circuit/time/delay name = "two-sec delay circuit" desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \ This circuit is set to send a pulse after a delay of two seconds." icon_state = "delay-20" - number_of_activators = 2 - var/delay = 20 - activator_names = list( - "incoming pulse", - "outgoing pulse" - ) + var/delay = 2 SECONDS + activators = list("incoming pulse","outgoing pulse") -/obj/item/integrated_circuit/time/delay/work() - if(..()) - var/datum/integrated_io/out_pulse = activators[2] - sleep(delay) - out_pulse.push_data() +/obj/item/integrated_circuit/time/delay/do_work() + set waitfor = 0 // Don't sleep in a proc that is called by a processor. It'll delay the entire thing + + var/datum/integrated_io/out_pulse = activators[2] + sleep(delay) + out_pulse.push_data() /obj/item/integrated_circuit/time/delay/five_sec name = "five-sec delay circuit" desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \ This circuit is set to send a pulse after a delay of five seconds." icon_state = "delay-50" - delay = 50 + delay = 5 SECONDS /obj/item/integrated_circuit/time/delay/one_sec name = "one-sec delay circuit" desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \ This circuit is set to send a pulse after a delay of one second." icon_state = "delay-10" - delay = 10 + delay = 1 SECOND /obj/item/integrated_circuit/time/delay/half_sec name = "half-sec delay circuit" @@ -56,12 +54,9 @@ desc = "This sends a pulse signal out after a delay, critical for ensuring proper control flow in a complex machine. \ This circuit's delay can be customized, between 1/10th of a second to one hour. The delay is updated upon receiving a pulse." icon_state = "delay" - number_of_inputs = 1 - input_names = list( - "delay time", - ) + inputs = list("delay time") -/obj/item/integrated_circuit/time/delay/custom/work() +/obj/item/integrated_circuit/time/delay/custom/do_work() var/datum/integrated_io/delay_input = inputs[1] if(delay_input.data && isnum(delay_input.data) ) var/new_delay = min(delay_input.data, 1) @@ -75,27 +70,35 @@ desc = "This circuit sends an automatic pulse every four seconds." icon_state = "tick-m" complexity = 8 - number_of_inputs = 1 - number_of_activators = 1 - var/ticks_to_pulse = 2 + var/ticks_to_pulse = 4 var/ticks_completed = 0 - input_names = list( - "toggle ticking" - ) - activator_names = list( - "outgoing pulse" - ) - -/obj/item/integrated_circuit/time/ticker/New() - ..() - processing_objects |= src + var/is_running = FALSE + inputs = list("enable ticking") + activators = list("outgoing pulse") /obj/item/integrated_circuit/time/ticker/Destroy() - processing_objects -= src + if(is_running) + processing_objects -= src + . = ..() + +/obj/item/integrated_circuit/time/ticker/on_data_written() + var/datum/integrated_io/do_tick = inputs[1] + if(do_tick.data && !is_running) + is_running = TRUE + processing_objects |= src + else if(is_running) + is_running = FALSE + processing_objects -= src + ticks_completed = 0 /obj/item/integrated_circuit/time/ticker/process() - ticks_completed++ - if( (ticks_completed % ticks_to_pulse) == 0) + var/process_ticks = process_schedule_interval("obj") + ticks_completed += process_ticks + if(ticks_completed >= ticks_to_pulse) + if(ticks_to_pulse >= process_ticks) + ticks_completed -= ticks_to_pulse + else + ticks_completed = 0 var/datum/integrated_io/pulser = activators[1] pulser.push_data() @@ -104,41 +107,32 @@ desc = "This advanced circuit sends an automatic pulse every two seconds." icon_state = "tick-f" complexity = 12 - ticks_to_pulse = 1 + ticks_to_pulse = 2 /obj/item/integrated_circuit/time/ticker/slow name = "slow ticker" desc = "This simple circuit sends an automatic pulse every six seconds." icon_state = "tick-s" complexity = 4 - ticks_to_pulse = 3 - + ticks_to_pulse = 6 /obj/item/integrated_circuit/time/clock name = "integrated clock" desc = "Tells you what the local time is, specific to your station or planet." icon_state = "clock" - number_of_inputs = 0 - number_of_outputs = 4 - number_of_activators = 1 - output_names = list( - "time (string)", - "hours (number)", - "minutes (number)", - "seconds (number)" - ) + inputs = list() + outputs = list("time (string)", "hours (number)", "minutes (number)", "seconds (number)") -/obj/item/integrated_circuit/time/clock/work() - if(..()) - var/datum/integrated_io/time = outputs[1] - var/datum/integrated_io/hour = outputs[2] - var/datum/integrated_io/min = outputs[3] - var/datum/integrated_io/sec = outputs[4] +/obj/item/integrated_circuit/time/clock/do_work() + var/datum/integrated_io/time = outputs[1] + var/datum/integrated_io/hour = outputs[2] + var/datum/integrated_io/min = outputs[3] + var/datum/integrated_io/sec = outputs[4] - time.data = time2text(station_time_in_ticks, "hh:mm:ss") - hour.data = text2num(time2text(station_time_in_ticks, "hh")) - min.data = text2num(time2text(station_time_in_ticks, "mm")) - sec.data = text2num(time2text(station_time_in_ticks, "ss")) + time.data = time2text(station_time_in_ticks, "hh:mm:ss") + hour.data = text2num(time2text(station_time_in_ticks, "hh")) + min.data = text2num(time2text(station_time_in_ticks, "mm")) + sec.data = text2num(time2text(station_time_in_ticks, "ss")) - for(var/datum/integrated_io/output/O in outputs) - O.push_data() \ No newline at end of file + for(var/datum/integrated_io/output/O in outputs) + O.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/tools.dm b/code/modules/integrated_electronics/tools.dm index 75609ca59c..e996fae872 100644 --- a/code/modules/integrated_electronics/tools.dm +++ b/code/modules/integrated_electronics/tools.dm @@ -16,67 +16,60 @@ var/datum/integrated_io/selected_io = null var/mode = WIRE -/obj/item/device/integrated_electronics/wirer/New() - ..() - /obj/item/device/integrated_electronics/wirer/update_icon() icon_state = "wirer-[mode]" /obj/item/device/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user) if(mode == WIRE) selected_io = io - user << "You attach a data wire to \the [selected_io.holder]'s [selected_io.name] data channel." + to_chat(user, "You attach a data wire to \the [selected_io.holder]'s [selected_io.name] data channel.") mode = WIRING update_icon() else if(mode == WIRING) if(io == selected_io) - user << "Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless." + to_chat(user, "Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.") return if(io.io_type != selected_io.io_type) - user << "Those two types of channels are incompatable. The first is a [selected_io.io_type], \ - while the second is a [io.io_type]." + to_chat(user, "Those two types of channels are incompatable. The first is a [selected_io.io_type], \ + while the second is a [io.io_type].") return selected_io.linked |= io io.linked |= selected_io - user << "You connect \the [selected_io.holder]'s [selected_io.name] to \the [io.holder]'s [io.name]." + to_chat(user, "You connect \the [selected_io.holder]'s [selected_io.name] to \the [io.holder]'s [io.name].") mode = WIRE update_icon() - //io.updateDialog() - //selected_io.updateDialog() selected_io.holder.interact(user) // This is to update the UI. selected_io = null else if(mode == UNWIRE) selected_io = io if(!io.linked.len) - user << "There is nothing connected to \the [selected_io] data channel." + to_chat(user, "There is nothing connected to \the [selected_io] data channel.") selected_io = null return - user << "You prepare to detach a data wire from \the [selected_io.holder]'s [selected_io.name] data channel." + to_chat(user, "You prepare to detach a data wire from \the [selected_io.holder]'s [selected_io.name] data channel.") mode = UNWIRING update_icon() return else if(mode == UNWIRING) if(io == selected_io) - user << "You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \ - the same pin is rather moot." + to_chat(user, "You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \ + the same pin is rather moot.") return if(selected_io in io.linked) io.linked.Remove(selected_io) selected_io.linked.Remove(io) - user << "You disconnect \the [selected_io.holder]'s [selected_io.name] from \ - \the [io.holder]'s [io.name]." - //io.updateDialog() - //selected_io.updateDialog() + to_chat(user, "You disconnect \the [selected_io.holder]'s [selected_io.name] from \ + \the [io.holder]'s [io.name].") selected_io.holder.interact(user) // This is to update the UI. selected_io = null mode = UNWIRE update_icon() else - user << "\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \ - [io.name] are not connected." + to_chat(user, "\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \ + [io.name] are not connected.") return return @@ -86,18 +79,18 @@ mode = UNWIRE if(WIRING) if(selected_io) - user << "You decide not to wire the data channel." + to_chat(user, "You decide not to wire the data channel.") selected_io = null - mode = UNWIRE + mode = WIRE if(UNWIRE) mode = WIRE if(UNWIRING) if(selected_io) - user << "You decide not to disconnect the data channel." + to_chat(user, "You decide not to disconnect the data channel.") selected_io = null mode = UNWIRE update_icon() - user << "You set \the [src] to [mode]." + to_chat(user, "You set \the [src] to [mode].") #undef WIRE #undef WIRING @@ -117,43 +110,51 @@ /obj/item/device/integrated_electronics/debugger/attack_self(mob/user) var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref", "null") + if(!CanInteract(user, physical_state)) + return + var/new_data = null switch(type_to_use) if("string") accepting_refs = 0 new_data = input("Now type in a string.","[src] string writing") as null|text - if(istext(new_data)) + if(istext(new_data) && CanInteract(user, physical_state)) data_to_write = new_data - user << "You set \the [src]'s memory to \"[new_data]\"." + to_chat(user, "You set \the [src]'s memory to \"[new_data]\".") if("number") accepting_refs = 0 new_data = input("Now type in a number.","[src] number writing") as null|num - if(isnum(new_data)) + if(isnum(new_data) && CanInteract(user, physical_state)) data_to_write = new_data - user << "You set \the [src]'s memory to [new_data]." + to_chat(user, "You set \the [src]'s memory to [new_data].") if("ref") accepting_refs = 1 - user << "You turn \the [src]'s ref scanner on. Slide it across \ - an object for a ref of that object to save it in memory." + to_chat(user, "You turn \the [src]'s ref scanner on. Slide it across \ + an object for a ref of that object to save it in memory.") if("null") data_to_write = null - user << "You set \the [src]'s memory to absolutely nothing." + to_chat(user, "You set \the [src]'s memory to absolutely nothing.") /obj/item/device/integrated_electronics/debugger/afterattack(atom/target, mob/living/user, proximity) if(accepting_refs && proximity) - data_to_write = target + data_to_write = weakref(target) visible_message("[user] slides \a [src]'s over \the [target].") - user << "You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ - now off." + to_chat(user, "You set \the [src]'s memory to a reference to [target.name] \[Ref\]. The ref scanner is \ + now off.") accepting_refs = 0 /obj/item/device/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user) if(io.io_type == DATA_CHANNEL) io.write_data_to_pin(data_to_write) - user << "You write [data_to_write] to \the [io.holder]'s [io]." + var/data_to_show = data_to_write + if(isweakref(data_to_write)) + var/weakref/w = data_to_write + var/atom/A = w.resolve() + data_to_show = A.name + to_chat(user, "You write '[data_to_write ? data_to_show : "NULL"]' to the '[io]' pin of \the [io.holder].") else if(io.io_type == PULSE_CHANNEL) - io.holder.work() - user << "You pulse \the [io.holder]'s [io]." + io.holder.check_then_do_work() + to_chat(user, "You pulse \the [io.holder]'s [io].") io.holder.interact(user) // This is to update the UI. @@ -163,12 +164,7 @@ icon = 'icons/obj/electronic_assemblies.dmi' icon_state = "circuit_kit" w_class = 3 - storage_slots = 200 - max_storage_space = 400 - max_w_class = 3 display_contents_with_number = 1 - can_hold = list(/obj/item/integrated_circuit, /obj/item/device/integrated_electronics, /obj/item/device/electronic_assembly, - /obj/item/weapon/screwdriver, /obj/item/weapon/crowbar) /obj/item/weapon/storage/bag/circuits/basic/New() ..() @@ -199,29 +195,32 @@ ) for(var/thing in types_to_spawn) - var/i = 3 - while(i) + var/obj/item/integrated_circuit/ic = thing + if(initial(ic.category) == thing) + continue + + for(var/i = 1 to 4) new thing(src) - i-- new /obj/item/device/electronic_assembly(src) new /obj/item/device/integrated_electronics/wirer(src) new /obj/item/device/integrated_electronics/debugger(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/screwdriver(src) + make_exact_fit() /obj/item/weapon/storage/bag/circuits/all/New() ..() - var/list/types_to_spawn = typesof(/obj/item/integrated_circuit) - - for(var/thing in types_to_spawn) - var/i = 10 - while(i) + for(var/thing in subtypesof(/obj/item/integrated_circuit)) + var/obj/item/integrated_circuit/ic = thing + if(initial(ic.category) == thing) + continue + for(var/i = 1 to 10) new thing(src) - i-- new /obj/item/device/electronic_assembly(src) new /obj/item/device/integrated_electronics/wirer(src) new /obj/item/device/integrated_electronics/debugger(src) new /obj/item/weapon/crowbar(src) - new /obj/item/weapon/screwdriver(src) \ No newline at end of file + new /obj/item/weapon/screwdriver(src) + make_exact_fit() \ No newline at end of file diff --git a/code/modules/integrated_electronics/~defines.dm b/code/modules/integrated_electronics/~defines.dm new file mode 100644 index 0000000000..7aea6dabbb --- /dev/null +++ b/code/modules/integrated_electronics/~defines.dm @@ -0,0 +1,6 @@ +#undef IC_INPUT +#undef IC_OUTPUT +#undef IC_ACTIVATOR + +#undef DATA_CHANNEL +#undef PULSE_CHANNEL \ No newline at end of file diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index ba96ada8b7..911891a7d4 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -140,7 +140,7 @@ icon_state ="book" throw_speed = 1 throw_range = 5 - w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever) + w_class = ITEMSIZE_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever) attack_verb = list("bashed", "whacked", "educated") var/dat // Actual page content var/due_date = 0 // Game time in 1/10th seconds @@ -170,7 +170,7 @@ /obj/item/weapon/book/attackby(obj/item/weapon/W as obj, mob/user as mob) if(carved) if(!store) - if(W.w_class < 3) + if(W.w_class < ITEMSIZE_LARGE) user.drop_item() W.loc = src store = W @@ -268,7 +268,7 @@ icon_state ="scanner" throw_speed = 1 throw_range = 5 - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this var/obj/item/weapon/book/book // Currently scanned book var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index aab806aa7c..57365f4367 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -2,7 +2,7 @@ /obj/item/stack/material force = 5.0 throwforce = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL throw_speed = 3 throw_range = 3 max_amount = 50 @@ -288,4 +288,4 @@ default_type = "reinforced borosilicate glass" /obj/item/stack/material/glass/phoronrglass/fifty - amount = 50 + amount = 50 diff --git a/code/modules/metric/activity.dm b/code/modules/metric/activity.dm new file mode 100644 index 0000000000..370ae0eb2f --- /dev/null +++ b/code/modules/metric/activity.dm @@ -0,0 +1,82 @@ +// This checks an individual player's activity level. People who have been afk for a few minutes aren't punished as much as those +// who were afk for hours, as they're most likely gone for good. +/datum/metric/proc/assess_player_activity(var/mob/M) + . = 100 + if(!M) + . = 0 + return + + if(!M.mind || !M.client) // Logged out. They might come back but we can't do any meaningful assessments for now. + . = 0 + return + + var/afk = M.client.is_afk(1 MINUTE) + if(afk) // Deduct points based on length of AFK-ness. + switch(afk) // One minute is equal to 600, for reference. + if(1 MINUTE to 10 MINUTES) // People gone for this emough of time hopefully will come back soon. + . -= round( (afk / 200), 1) + if(10 MINUTES to 30 MINUTES) + . -= round( (afk / 150), 1) + if(30 MINUTES to INFINITY) // They're probably not coming back if it's been 30 minutes. + . -= 100 + . = max(. , 0) // No negative numbers, or else people could drag other, non-afk players down. + +// This checks a whole department's collective activity. +/datum/metric/proc/assess_department(var/department) + if(!department) + return + var/departmental_activity = 0 + var/departmental_size = 0 + for(var/mob/M in player_list) + if(guess_department(M) != department) // Ignore people outside the department we're assessing. + continue + departmental_activity += assess_player_activity(M) + departmental_size++ + if(departmental_size) + departmental_activity = departmental_activity / departmental_size // Average it out. + return departmental_activity + +/datum/metric/proc/assess_all_departments(var/cutoff_number = 3, var/list/department_blacklist = list()) + var/list/activity = list() + for(var/department in departments) + activity[department] = assess_department(department) + log_debug("Assessing department [department]. They have activity of [activity[department]].") + + var/list/most_active_departments = list() // List of winners. + var/highest_activity = null // Department who is leading in activity, if one exists. + var/highest_number = 0 // Activity score needed to beat to be the most active department. + for(var/i = 1, i <= cutoff_number, i++) + log_debug("Doing [i]\th round of counting.") + for(var/department in activity) + if(department in department_blacklist) // Blacklisted? + continue + if(activity[department] > highest_number && activity[department] > 0) // More active than the current highest department? + highest_activity = department + highest_number = activity[department] + + if(highest_activity) // Someone's a winner. + most_active_departments.Add(highest_activity) // Add to the list of most active. + activity.Remove(highest_activity) // Remove them from the other list so they don't win more than once. + log_debug("[highest_activity] has won the [i]\th round of activity counting.") + highest_activity = null // Now reset for the next round. + highest_number = 0 + //todo: finish + return most_active_departments + +/datum/metric/proc/assess_all_living_mobs() // Living refers to the type, not the stat variable. + . = 0 + var/num = 0 + for(var/mob/living/L in player_list) + . += assess_player_activity(L) + num++ + if(num) + . = round(. / num, 0.1) + +/datum/metric/proc/assess_all_dead_mobs() // Ditto. + . = 0 + var/num = 0 + for(var/mob/observer/dead/O in player_list) + . += assess_player_activity(O) + num++ + if(num) + . = round(. / num, 0.1) \ No newline at end of file diff --git a/code/modules/metric/department.dm b/code/modules/metric/department.dm new file mode 100644 index 0000000000..ef146de506 --- /dev/null +++ b/code/modules/metric/department.dm @@ -0,0 +1,72 @@ + +// This proc tries to find the department of an arbitrary mob. +/datum/metric/proc/guess_department(var/mob/M) + var/list/found_roles = list() + . = ROLE_UNKNOWN + + // Records are usually the most reliable way to get what job someone is. + var/datum/data/record/R = find_general_record("name", M.real_name) + if(R) // We found someone with a record. + var/recorded_rank = R.fields["real_rank"] + found_roles = role_name_to_department(recorded_rank) + . = found_roles[1] + if(. != ROLE_UNKNOWN) // We found the correct department, so we can stop now. + return + + // They have a custom title, aren't crew, or someone deleted their record, so we need a fallback method. + // Let's check the mind. + if(M.mind) + found_roles = role_name_to_department(M.mind.assigned_role) + . = found_roles[1] + if(. != ROLE_UNKNOWN) + return + + // At this point, they don't have a mind, or for some reason assigned_role didn't work. + found_roles = role_name_to_department(M.job) + . = found_roles[1] + if(. != ROLE_UNKNOWN) + return + + return ROLE_UNKNOWN // Welp. + +// Feed this proc the name of a job, and it will try to figure out what department they are apart of. +// Note that this returns a list, as some jobs are in more than one department, like Command. The 'primary' department is the first +// in the list, e.g. a HoS has Security as first, Command as second in the returned list. +/datum/metric/proc/role_name_to_department(var/role_name) + var/list/result = list() + + if(role_name in security_positions) + result += ROLE_SECURITY + + if(role_name in engineering_positions) + result += ROLE_ENGINEERING + + if(role_name in medical_positions) + result += ROLE_MEDICAL + + if(role_name in science_positions) + result += ROLE_RESEARCH + + if(role_name in cargo_positions) + result += ROLE_CARGO + + if(role_name in civilian_positions) + result += ROLE_CIVILIAN + + if(role_name in nonhuman_positions) + result += ROLE_SYNTHETIC + + if(role_name in command_positions) // We do Command last, since we consider command to only be a primary department for hop/admin. + result += ROLE_COMMAND + + if(!result.len) // No department was found. + result += ROLE_UNKNOWN + return result + +/datum/metric/proc/count_people_in_department(var/department) + if(!department) + return + for(var/mob/M in player_list) + if(guess_department(M) != department) // Ignore people outside the department we're counting. + continue + . += 1 \ No newline at end of file diff --git a/code/modules/metric/metric.dm b/code/modules/metric/metric.dm new file mode 100644 index 0000000000..1550b2c34e --- /dev/null +++ b/code/modules/metric/metric.dm @@ -0,0 +1,15 @@ +// This is a global datum used to retrieve certain information about the round, such as activity of a department or a specific +// player. + +/datum/metric + var/departments = list( + ROLE_COMMAND, + ROLE_SECURITY, + ROLE_ENGINEERING, + ROLE_MEDICAL, + ROLE_RESEARCH, + ROLE_CARGO, + ROLE_CIVILIAN, + ROLE_SYNTHETIC + ) + diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm index 7491bf668d..10c8855b7e 100644 --- a/code/modules/mining/coins.dm +++ b/code/modules/mining/coins.dm @@ -7,7 +7,7 @@ flags = CONDUCT force = 0.0 throwforce = 0.0 - w_class = 1.0 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/string_attached var/sides = 2 diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index ea69670885..00ec3d68ca 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -48,7 +48,7 @@ throwforce = 4.0 icon_state = "pickaxe" item_state = "jackhammer" - w_class = 4.0 + w_class = ITEMSIZE_LARGE matter = list(DEFAULT_WALL_MATERIAL = 3750) var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) @@ -103,7 +103,7 @@ name = "plasma cutter" icon_state = "plasmacutter" item_state = "gun" - w_class = 3.0 //it is smaller than the pickaxe + w_class = ITEMSIZE_NORMAL //it is smaller than the pickaxe damtype = "fire" digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) @@ -151,7 +151,7 @@ force = 8.0 throwforce = 4.0 item_state = "shovel" - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1) matter = list(DEFAULT_WALL_MATERIAL = 50) attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") @@ -165,7 +165,7 @@ item_state = "spade" force = 5.0 throwforce = 7.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL /**********************Mining car (Crate like thing, not the rail car)**************************/ diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 1c6208061d..0a5c2d94c3 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -139,7 +139,7 @@ var/list/mining_overlay_cache = list() overlays += mining_overlay_cache["dug_overlay"] for(var/direction in cardinal) - if(istype(get_step(src, direction), /turf/space)) + if(istype(get_step(src, direction), /turf/space) && !istype(get_step(src, direction), /turf/space/cracked_asteroid)) if(!mining_overlay_cache["asteroid_edge_[direction]"]) mining_overlay_cache["asteroid_edge_[direction]"] = image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = direction) overlays += mining_overlay_cache["asteroid_edge_[direction]"] diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 7409859af2..9884349be9 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -7,7 +7,7 @@ flags = CONDUCT force = 10.0 throwforce = 2.0 - w_class = 4.0 + w_class = ITEMSIZE_LARGE /obj/item/weapon/moneybag/attack_hand(user as mob) var/amt_gold = 0 diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 1f78c7ce77..128dc17332 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -2,7 +2,7 @@ name = "small rock" icon = 'icons/obj/mining.dmi' icon_state = "ore2" - w_class = 2 + w_class = ITEMSIZE_SMALL var/datum/geosample/geologic_data var/material diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index ab88819b53..952fc93bb0 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -94,7 +94,7 @@ var/list/holder_mob_icon_cache = list() origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5) /obj/item/weapon/holder/mouse - w_class = 1 + w_class = ITEMSIZE_TINY /obj/item/weapon/holder/borer origin_tech = list(TECH_BIO = 6) diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index d93edf3ac2..1b07e4ed8c 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -57,8 +57,59 @@ // Criminal language. /datum/language/gutter name = "Gutter" - desc = "Much like Standard, this crude pidgin tongue descended from numerous languages and serves as Tradeband for criminal elements." + desc = "There is no true language named Gutter. 'Gutter' is a catchall term for a collection of unofficial SolCom dialects that has somehow managed to spread across the stars." speech_verb = "growls" colour = "rough" key = "3" - syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra") + space_chance = 45 + syllables = list ( +"gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra", +"a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", +"bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", +"chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", +"chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", +"den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", +"ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", +"gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", +"hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", +"huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", +"jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", +"kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", +"liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", +"mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", +"nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", +"niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", +"pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", +"qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", +"ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", +"shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", +"shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", +"teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", +"wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", +"xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", +"yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", +"zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", +"zong", "zou", "zuan", "zui", "zun", "zuo", "zu", "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", +"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", +"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", +"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", +"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", +"al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", +"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", +"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", +"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi") diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index a6fc34f738..779d912cf3 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -177,7 +177,7 @@ throwforce = 10.0 throw_speed = 2 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/created_name = "Cleanbot" /obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, var/mob/user) diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 905c53a20a..5f49794d8b 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -313,7 +313,7 @@ var/build_step = 0 var/created_name = "Farmbot" var/obj/tank - w_class = 3.0 + w_class = ITEMSIZE_NORMAL /obj/item/weapon/farmbot_arm_assembly/New(var/newloc, var/theTank) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index ca4f572775..2259515941 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -304,7 +304,7 @@ throwforce = 10.0 throw_speed = 2 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/created_name = "Floorbot" /obj/item/weapon/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob) @@ -334,7 +334,7 @@ throwforce = 10.0 throw_speed = 2 throw_range = 5 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/created_name = "Floorbot" /obj/item/weapon/toolbox_tiles_sensor/attackby(var/obj/item/W, mob/user as mob) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index fffe5879fa..baf6af9eba 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -317,7 +317,7 @@ var/build_step = 0 var/created_name = "Medibot" //To preserve the name if it's a unique medbot I guess var/skin = null //Same as medbot, set to tox or ointment for the respective kits. - w_class = 3.0 + w_class = ITEMSIZE_NORMAL /obj/item/weapon/firstaid_arm_assembly/New() ..() diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index 8a487d57b3..74923ae59a 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -10,7 +10,7 @@ universal_understand = 1 universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea. - can_pull_size = 2 + can_pull_size = ITEMSIZE_SMALL can_pull_mobs = MOB_PULL_SMALLER holder_type = /obj/item/weapon/holder/diona diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 5fe2255803..3f0fa31708 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -22,7 +22,7 @@ desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_BIO = 3) req_access = list(access_robotics) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 11e3b1197a..973e55a48b 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -7,7 +7,7 @@ vital = 1 icon_state = "brain2" force = 1.0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throwforce = 1.0 throw_speed = 3 throw_range = 5 diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index c61659261d..057c24bdcc 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -3,7 +3,7 @@ desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." icon = 'icons/obj/assemblies.dmi' icon_state = "posibrain" - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4) var/searching = 0 diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm index d44779c520..d870751dc1 100644 --- a/code/modules/mob/living/carbon/brain/robot.dm +++ b/code/modules/mob/living/carbon/brain/robot.dm @@ -3,7 +3,7 @@ desc = "The pinnacle of artifical intelligence which can be achieved using classical computer science." icon = 'icons/obj/module.dmi' icon_state = "mainboard" - w_class = 3 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4) /obj/item/device/mmi/digital/robot/New() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index aa4e6ced11..5ba80237ad 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -31,8 +31,7 @@ var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3) var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class - //Sharp objects will always embed if they do enough damage. - if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) + if(damage > embed_threshold && prob(embed_chance)) src.embed(I, hit_zone) return 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 195816f255..b11a045459 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -424,7 +424,6 @@ if(config.allow_Metadata && client) msg += "OOC Notes: \[View\]\n" // VOREStation End - msg += "*---------*
    " msg += applying_pressure if (pose) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index c3bb679b08..cb50cf6a0d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -105,6 +105,8 @@ "Your chilly flesh stands out in goosebumps." ) + var/metabolic_rate = 1 + // HUD data vars. var/datum/hud_data/hud var/hud_type diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm index 15455f375e..c59c6826d5 100644 --- a/code/modules/mob/living/carbon/metroid/items.dm +++ b/code/modules/mob/living/carbon/metroid/items.dm @@ -4,7 +4,7 @@ icon = 'icons/mob/slimes.dmi' icon_state = "grey slime extract" force = 1.0 - w_class = 1.0 + w_class = ITEMSIZE_TINY throwforce = 0 throw_speed = 3 throw_range = 6 @@ -292,7 +292,7 @@ icon = 'icons/mob/slimes.dmi' icon_state = "slime extract" force = 1.0 - w_class = 1.0 + w_class = ITEMSIZE_TINY throwforce = 1.0 throw_speed = 2 throw_range = 6 diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index 370d3f89d2..16085b05af 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -10,7 +10,7 @@ src.traumatic_shock = \ 1 * src.getOxyLoss() + \ 0.7 * src.getToxLoss() + \ - 1.5 * src.getFireLoss() + \ + 1.2 * src.getFireLoss() + \ 1.2 * src.getBruteLoss() + \ 1.7 * src.getCloneLoss() + \ 2 * src.halloss + \ diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index bd757f9ab6..57a9dd837b 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -7,7 +7,7 @@ pass_flags = 1 mob_size = MOB_SMALL - can_pull_size = 2 + can_pull_size = ITEMSIZE_SMALL can_pull_mobs = MOB_PULL_SMALLER idcard_type = /obj/item/weapon/card/id diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 9881948b1b..671f61e29c 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -9,7 +9,7 @@ flags = CONDUCT slot_flags = SLOT_BELT throwforce = 3 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 5 throw_range = 10 origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 89f7942cc4..dbe09db217 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -37,7 +37,7 @@ var/list/mob_hat_cache = list() integrated_light_power = 3 local_transmit = 1 - can_pull_size = 3 + can_pull_size = ITEMSIZE_NORMAL can_pull_mobs = MOB_PULL_SMALLER mob_bump_flag = SIMPLE_ANIMAL @@ -69,7 +69,7 @@ var/list/mob_hat_cache = list() module_type = /obj/item/weapon/robot_module/drone/construction hat_x_offset = 1 hat_y_offset = -12 - can_pull_size = 5 + can_pull_size = ITEMSIZE_HUGE can_pull_mobs = MOB_PULL_SAME /mob/living/silicon/robot/drone/New() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index ea5c950c19..fbf217d7cf 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -8,6 +8,7 @@ /obj/machinery/drone_fabricator name = "drone fabricator" desc = "A large automated factory for producing maintenance drones." + appearance_flags = 0 density = 1 anchored = 1 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 26fe14d7d1..9dacf9924c 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -11,6 +11,7 @@ clamp_values() handle_regular_status_updates() handle_actions() + handle_instability() if(client) handle_regular_hud_updates() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7401538869..aa3640a52e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -549,8 +549,8 @@ user << "Close the panel first." else if(cell) user << "There is a power cell already installed." - else if(W.w_class != 3) - user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here." + else if(W.w_class != ITEMSIZE_NORMAL) + user << "\The [W] is too [W.w_class < ITEMSIZE_NORMAL ? "small" : "large"] to fit here." else user.drop_item() W.loc = src diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index e5b8ff3de2..6e5616e7b4 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -152,9 +152,9 @@ if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) var/add = 0 - if(I.w_class == 1.0) + if(I.w_class == ITEMSIZE_TINY) add = 1 - else if(I.w_class == 2.0) + else if(I.w_class == ITEMSIZE_SMALL) add = 3 else add = 5 diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 77896d3275..9dee58c29e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -17,7 +17,7 @@ var/global/list/robot_modules = list( name = "robot module" icon = 'icons/obj/module.dmi' icon_state = "std_module" - w_class = 100.0 + w_class = ITEMSIZE_NO_CONTAINER item_state = "electronic" flags = CONDUCT var/hide_on_manifest = 0 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index ef6b1c7872..d2bd9210bb 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -76,17 +76,16 @@ return //immune /mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) - - if (istype(source, /obj/machinery/containment_field)) + if(shock_damage > 0) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, loc) s.start() shock_damage *= 0.75 //take reduced damage take_overall_damage(0, shock_damage) - visible_message("\red [src] was shocked by \the [source]!", \ - "\red Energy pulse detected, system damaged!", \ - "\red You hear an electrical crack") + visible_message("[src] was shocked by \the [source]!", \ + "Energy pulse detected, system damaged!", \ + "You hear an electrical crack.") if(prob(20)) Stun(2) return diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm index 54fd738279..08160f257f 100644 --- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm +++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm @@ -7,7 +7,7 @@ icon_state = "soulstone" item_state = "electronic" desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power." - w_class = 2 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4) var/imprinted = "empty" diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index fa2d85d5bb..cd545e0a87 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -31,7 +31,7 @@ holder_type = /obj/item/weapon/holder/mouse mob_size = MOB_MINISCULE - can_pull_size = 1 + can_pull_size = ITEMSIZE_TINY can_pull_mobs = MOB_PULL_NONE /mob/living/simple_animal/mouse/Life() diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index cffa215a00..fadfafc458 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -255,7 +255,7 @@ var/list/items = list() for(var/obj/item/I in view(1,src)) - if(I.loc != src && I.w_class <= 2 && I.Adjacent(src) ) + if(I.loc != src && I.w_class <= ITEMSIZE_SMALL && I.Adjacent(src) ) items.Add(I) var/obj/selection = input("Select an item.", "Pickup") in items diff --git a/code/modules/mob/living/simple_animal/head.dm b/code/modules/mob/living/simple_animal/head.dm index 0ce662d613..88a9f3d6ca 100644 --- a/code/modules/mob/living/simple_animal/head.dm +++ b/code/modules/mob/living/simple_animal/head.dm @@ -28,7 +28,7 @@ "Crab say what?", "Man they say we have space lizards now, man this shit is getting more wack every minute", "The so called \"improved\" station AI is just bullshit, that thing aint fun for noone", - "The Station Administrator is a traitor, he took my power core.", + "The Colony Director is a traitor, he took my power core.", "Say \"what\" again. Say \"what\" again. I dare you. I double-dare you, motherfucker. Say \"what\" one more goddamn time.", "Ezekiel 25:17 ,The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who in the name of charity and good will shepherds the weak through the valley of darkness, for he is truly his brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furious anger those who attempt to poison and destroy my brothers. And you will know my name is the Lord... when I lay my vengeance upon thee.", "Did you notice a sign out in front of my house that said \"Dead Nigger Storage\"?") diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 1e6752ab77..36a1ac186a 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -515,12 +515,12 @@ if(istype(AM, /obj/item)) var/obj/item/I = AM - if(I.w_class < 2) + if(I.w_class < ITEMSIZE_SMALL) return I if(iscarbon(AM)) var/mob/living/carbon/C = AM - if((C.l_hand && C.l_hand.w_class <= 2) || (C.r_hand && C.r_hand.w_class <= 2)) + if((C.l_hand && C.l_hand.w_class <= ITEMSIZE_SMALL) || (C.r_hand && C.r_hand.w_class <= ITEMSIZE_SMALL)) return C return null @@ -544,12 +544,12 @@ if(istype(AM, /obj/item)) var/obj/item/I = AM - if(I.w_class <= 2) + if(I.w_class <= ITEMSIZE_SMALL) return I if(iscarbon(AM)) var/mob/living/carbon/C = AM - if(C.l_hand && C.l_hand.w_class <= 2 || C.r_hand && C.r_hand.w_class <= 2) + if(C.l_hand && C.l_hand.w_class <= ITEMSIZE_SMALL || C.r_hand && C.r_hand.w_class <= ITEMSIZE_SMALL) return C return null @@ -571,7 +571,7 @@ for(var/obj/item/I in view(1,src)) //Make sure we're not already holding it and it's small enough - if(I.loc != src && I.w_class <= 2) + if(I.loc != src && I.w_class <= ITEMSIZE_SMALL) //If we have a perch and the item is sitting on it, continue if(!client && parrot_perch && I.loc == parrot_perch.loc) @@ -600,10 +600,10 @@ var/obj/item/stolen_item = null for(var/mob/living/carbon/C in view(1,src)) - if(C.l_hand && C.l_hand.w_class <= 2) + if(C.l_hand && C.l_hand.w_class <= ITEMSIZE_SMALL) stolen_item = C.l_hand - if(C.r_hand && C.r_hand.w_class <= 2) + if(C.r_hand && C.r_hand.w_class <= ITEMSIZE_SMALL) stolen_item = C.r_hand if(stolen_item) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 32235e5896..d885450e84 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -401,6 +401,9 @@ /mob/living/simple_animal/adjustBruteLoss(damage) health = Clamp(health - damage, 0, maxHealth) +/mob/living/simple_animal/adjustFireLoss(damage) + health = Clamp(health - damage, 0, maxHealth) + /mob/living/simple_animal/proc/SA_attackable(target_mob) if (isliving(target_mob)) var/mob/living/L = target_mob @@ -640,3 +643,15 @@ spawn(10) if(!src.stat) horde() + +/mob/living/simple_animal/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) + shock_damage *= siemens_coeff + if (shock_damage < 1) + return 0 + + adjustFireLoss(shock_damage) + playsound(loc, "sparks", 50, 1, -1) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, loc) + s.start() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 41cbbbc5e9..2a27bda5db 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -895,7 +895,7 @@ mob/proc/yank_out_object() H.shock_stage+=20 affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") - if(prob(selection.w_class * 5) && (affected < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. + if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) affected.wounds += I H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 1679da5a0e..a586ad1efb 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -139,7 +139,7 @@ var/const/deafness = 2//Carbon var/const/muteness = 4//Carbon - var/can_pull_size = 10 // Maximum w_class the mob can pull. + var/can_pull_size = ITEMSIZE_NO_CONTAINER // Maximum w_class the mob can pull. var/can_pull_mobs = MOB_PULL_LARGER // Whether or not the mob can pull other mobs. var/datum/dna/dna = null//Carbon diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index a7b982b1b7..bbddd4c07b 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -34,7 +34,7 @@ layer = 21 abstract = 1 item_state = "nothing" - w_class = 5.0 + w_class = ITEMSIZE_HUGE /obj/item/weapon/grab/New(mob/user, mob/victim) diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index e1e1025bae..5fb0e81745 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -62,7 +62,7 @@ var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKI /datum/skill/knowledge/law ID = "law" name = "Corporate Law" - desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for Station Administrators." + desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for Colony Directors." field = "Security" secondary = 1 diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 65d13fbe55..3f873c7a79 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -193,6 +193,10 @@ spikyponytail name = "Spiky Ponytail" icon_state = "hair_spikyponytail" + + zieglertail + name = "Zieglertail" + icon_state = "hair_ziegler" wisp name = "Wisp" icon_state = "hair_wisp" @@ -510,6 +514,10 @@ name = "Double-Bun" icon_state = "hair_doublebun" + oxton + name = "Oxton" + icon_state = "hair_oxton" + /* /////////////////////////////////// diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm index 2c691349e0..0d1c40a737 100644 --- a/code/modules/nano/modules/law_manager.dm +++ b/code/modules/nano/modules/law_manager.dm @@ -203,7 +203,13 @@ return law_sets /datum/nano_module/law_manager/proc/is_malf(var/mob/user) - return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor() + return (is_admin(user) && !owner.is_slaved()) || is_special_role(user) + +/datum/nano_module/law_manager/proc/is_special_role(var/mob/user) + if(user.mind.special_role) + return TRUE + else + return FALSE /mob/living/silicon/proc/is_slaved() return 0 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 82201d1efa..f21b83bcac 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -877,7 +877,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(DROPLIMB_BURN) new /obj/effect/decal/cleanable/ash(get_turf(victim)) for(var/obj/item/I in src) - if(I.w_class > 2 && !istype(I,/obj/item/organ)) + if(I.w_class > ITEMSIZE_SMALL && !istype(I,/obj/item/organ)) I.loc = get_turf(src) qdel(src) if(DROPLIMB_BLUNT) @@ -899,7 +899,7 @@ Note that amputating the affected organ does in fact remove the infection from t I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) for(var/obj/item/I in src) - if(I.w_class <= 2) + if(I.w_class <= ITEMSIZE_SMALL) qdel(I) continue I.loc = get_turf(src) @@ -1002,6 +1002,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(!(species.flags & NO_PAIN)) owner.emote("scream") + playsound(src.loc, "fracture", 10, 1, -2) status |= ORGAN_BROKEN broken_description = pick("broken","fracture","hairline fracture") @@ -1144,7 +1145,7 @@ Note that amputating the affected organ does in fact remove the infection from t for(var/atom/movable/implant in implants) //large items and non-item objs fall to the floor, everything else stays var/obj/item/I = implant - if(istype(I) && I.w_class < 3) + if(istype(I) && I.w_class < ITEMSIZE_NORMAL) implant.loc = get_turf(victim.loc) else implant.loc = src diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm index 7f371066bb..4ae5e964ac 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/organs/subtypes/diona.dm @@ -30,7 +30,7 @@ icon_name = "torso" max_damage = 200 min_broken_damage = 50 - w_class = 5 + w_class = ITEMSIZE_HUGE body_part = UPPER_TORSO vital = 1 cannot_amputate = 1 @@ -43,7 +43,7 @@ icon_name = "groin" max_damage = 100 min_broken_damage = 50 - w_class = 4 + w_class = ITEMSIZE_LARGE body_part = LOWER_TORSO parent_organ = BP_TORSO gendered_icon = 1 @@ -54,7 +54,7 @@ icon_name = "l_arm" max_damage = 50 min_broken_damage = 20 - w_class = 3 + w_class = ITEMSIZE_NORMAL body_part = ARM_LEFT parent_organ = BP_TORSO can_grasp = 1 @@ -71,7 +71,7 @@ icon_name = "l_leg" max_damage = 50 min_broken_damage = 20 - w_class = 3 + w_class = ITEMSIZE_NORMAL body_part = LEG_LEFT icon_position = LEFT parent_organ = BP_GROIN @@ -90,7 +90,7 @@ icon_name = "l_foot" max_damage = 35 min_broken_damage = 10 - w_class = 2 + w_class = ITEMSIZE_SMALL body_part = FOOT_LEFT icon_position = LEFT parent_organ = "l_leg" @@ -112,7 +112,7 @@ icon_name = "l_hand" max_damage = 40 min_broken_damage = 15 - w_class = 2 + w_class = ITEMSIZE_SMALL body_part = HAND_LEFT parent_organ = "l_arm" can_grasp = 1 diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 5b40922642..e0409fb16e 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -10,7 +10,7 @@ icon_name = "torso" max_damage = 100 min_broken_damage = 35 - w_class = 5 + w_class = ITEMSIZE_HUGE body_part = UPPER_TORSO vital = 1 amputation_point = "spine" @@ -34,7 +34,7 @@ icon_name = "groin" max_damage = 100 min_broken_damage = 35 - w_class = 4 + w_class = ITEMSIZE_LARGE body_part = LOWER_TORSO vital = 1 parent_organ = BP_TORSO @@ -51,7 +51,7 @@ icon_name = "l_arm" max_damage = 80 min_broken_damage = 30 - w_class = 3 + w_class = ITEMSIZE_NORMAL body_part = ARM_LEFT parent_organ = BP_TORSO joint = "left elbow" @@ -72,7 +72,7 @@ icon_name = "l_leg" max_damage = 80 min_broken_damage = 30 - w_class = 3 + w_class = ITEMSIZE_NORMAL body_part = LEG_LEFT icon_position = LEFT parent_organ = BP_GROIN @@ -95,7 +95,7 @@ icon_name = "l_foot" max_damage = 50 min_broken_damage = 15 - w_class = 2 + w_class = ITEMSIZE_SMALL body_part = FOOT_LEFT icon_position = LEFT parent_organ = "l_leg" @@ -124,7 +124,7 @@ icon_name = "l_hand" max_damage = 50 min_broken_damage = 15 - w_class = 2 + w_class = ITEMSIZE_SMALL body_part = HAND_LEFT parent_organ = "l_arm" joint = "left wrist" @@ -154,7 +154,7 @@ slot_flags = SLOT_BELT max_damage = 75 min_broken_damage = 35 - w_class = 3 + w_class = ITEMSIZE_NORMAL body_part = HEAD vital = 1 parent_organ = BP_TORSO diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 891fd809fe..ccb527986f 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -4,7 +4,7 @@ icon_state = "clipboard" item_state = "clipboard" throwforce = 0 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 3 throw_range = 10 var/obj/item/weapon/pen/haspen //The stored pen. @@ -43,7 +43,7 @@ return /obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob) - + if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) user.drop_item() W.loc = src @@ -106,20 +106,20 @@ else if(href_list["write"]) var/obj/item/weapon/P = locate(href_list["write"]) - + if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) && (P == toppaper) ) - + var/obj/item/I = usr.get_active_hand() - + if(istype(I, /obj/item/weapon/pen)) - + P.attackby(I, usr) else if(href_list["remove"]) var/obj/item/P = locate(href_list["remove"]) - + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) - + P.loc = usr.loc usr.put_in_hands(P) if(P == toppaper) @@ -129,24 +129,24 @@ toppaper = newtop else toppaper = null - + else if(href_list["rename"]) var/obj/item/weapon/O = locate(href_list["rename"]) - + if(O && (O.loc == src)) if(istype(O, /obj/item/weapon/paper)) var/obj/item/weapon/paper/to_rename = O to_rename.rename() - + else if(istype(O, /obj/item/weapon/photo)) var/obj/item/weapon/photo/to_rename = O to_rename.rename() else if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) - + if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) ) - + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") onclose(usr, "[P.name]") diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index b6450b4455..f24ce267df 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -3,7 +3,7 @@ desc = "A folder." icon = 'icons/obj/bureaucracy.dmi' icon_state = "folder" - w_class = 2 + w_class = ITEMSIZE_SMALL pressure_resistance = 2 /obj/item/weapon/folder/blue @@ -23,7 +23,7 @@ icon_state = "folder_white" /obj/item/weapon/folder/blue_captain - desc = "A blue folder with Station Administrator markings." + desc = "A blue folder with Colony Director markings." icon_state = "folder_captain" /obj/item/weapon/folder/blue_hop diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d290c07382..e183c3b282 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -10,7 +10,7 @@ icon_state = "paper" item_state = "paper" throwforce = 0 - w_class = 1 + w_class = ITEMSIZE_TINY throw_range = 1 throw_speed = 1 layer = 4 @@ -521,7 +521,7 @@ /obj/item/weapon/paper/courtroom name = "A Crash Course in Legal SOP on SS13" - info = "Roles:
    \nThe Detective is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the Detective.
    \nThe Station Administrator/HoP/Warden is ct as the judicial authority.
    \nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" + info = "Roles:
    \nThe Detective is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the Detective.
    \nThe Colony Director/HoP/Warden is ct as the judicial authority.
    \nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" /obj/item/weapon/paper/hydroponics name = "Greetings from Billy Bob" @@ -538,7 +538,7 @@ /obj/item/weapon/paper/jobs name = "Job Information" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
    \nThe data will be in the following form.
    \nGenerally lower ranking positions come first in this list.
    \n
    \nJob Name general access>lab access-engine access-systems access (atmosphere control)
    \n\tJob Description
    \nJob Duties (in no particular order)
    \nTips (where applicable)
    \n
    \nResearch Assistant 1>1-0-0
    \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
    \n1. Assist the researchers.
    \n2. Clean up the labs.
    \n3. Prepare materials.
    \n
    \nStaff Assistant 2>0-0-0
    \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
    \n1. Patrol ship/Guard key areas
    \n2. Assist security officer
    \n3. Perform other security duties.
    \n
    \nTechnical Assistant 1>0-0-1
    \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
    \n1. Assist Station technician and Engineers.
    \n2. Perform general maintenance of station.
    \n3. Prepare materials.
    \n
    \nMedical Assistant 1>1-0-0
    \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
    \n1. Assist the medical personnel.
    \n2. Update medical files.
    \n3. Prepare materials for medical operations.
    \n
    \nResearch Technician 2>3-0-0
    \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
    \n1. Inform superiors of research.
    \n2. Perform research alongside of official researchers.
    \n
    \nDetective 3>2-0-0
    \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
    \n1. Perform crime-scene investigations/draw conclusions.
    \n2. Store and catalogue evidence properly.
    \n3. Testify to superiors/inquieries on findings.
    \n
    \nStation Technician 2>0-2-3
    \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
    \n1. Maintain SS13 systems.
    \n2. Repair equipment.
    \n
    \nAtmospheric Technician 3>0-0-4
    \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
    \n1. Maintain atmosphere on SS13
    \n2. Research atmospheres on the space station. (safely please!)
    \n
    \nEngineer 2>1-3-0
    \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
    \n1. Upkeep the engine.
    \n2. Prevent fires in the engine.
    \n3. Maintain a safe orbit.
    \n
    \nMedical Researcher 2>5-0-0
    \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
    \n1. Make sure the station is kept safe.
    \n2. Research medical properties of materials studied of Space Station 13.
    \n
    \nScientist 2>5-0-0
    \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Phoron Technicians as phoron is the material they routinly handle.
    \n1. Research phoron
    \n2. Make sure all phoron is properly handled.
    \n
    \nMedical Doctor (Officer) 2>0-0-0
    \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
    \n1. Heal wounded people.
    \n2. Perform examinations of all personnel.
    \n3. Moniter usage of medical equipment.
    \n
    \nSecurity Officer 3>0-0-0
    \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
    \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
    \n1. Maintain order.
    \n2. Assist others.
    \n3. Repair structural problems.
    \n
    \nHead of Security 4>5-2-2
    \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
    \n1. Oversee security.
    \n2. Assign patrol duties.
    \n3. Protect the station and staff.
    \n
    \nHead of Personnel 4>4-2-2
    \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
    \n1. Assign duties.
    \n2. Moderate personnel.
    \n3. Moderate research.
    \n
    \nStation Administrator 5>5-5-5 (unrestricted station wide access)
    \n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
    \n1. Assign all positions on SS13
    \n2. Inspect the station for any problems.
    \n3. Perform administrative duties.
    \n" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
    \nThe data will be in the following form.
    \nGenerally lower ranking positions come first in this list.
    \n
    \nJob Name general access>lab access-engine access-systems access (atmosphere control)
    \n\tJob Description
    \nJob Duties (in no particular order)
    \nTips (where applicable)
    \n
    \nResearch Assistant 1>1-0-0
    \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
    \n1. Assist the researchers.
    \n2. Clean up the labs.
    \n3. Prepare materials.
    \n
    \nStaff Assistant 2>0-0-0
    \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
    \n1. Patrol ship/Guard key areas
    \n2. Assist security officer
    \n3. Perform other security duties.
    \n
    \nTechnical Assistant 1>0-0-1
    \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
    \n1. Assist Station technician and Engineers.
    \n2. Perform general maintenance of station.
    \n3. Prepare materials.
    \n
    \nMedical Assistant 1>1-0-0
    \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
    \n1. Assist the medical personnel.
    \n2. Update medical files.
    \n3. Prepare materials for medical operations.
    \n
    \nResearch Technician 2>3-0-0
    \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
    \n1. Inform superiors of research.
    \n2. Perform research alongside of official researchers.
    \n
    \nDetective 3>2-0-0
    \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
    \n1. Perform crime-scene investigations/draw conclusions.
    \n2. Store and catalogue evidence properly.
    \n3. Testify to superiors/inquieries on findings.
    \n
    \nStation Technician 2>0-2-3
    \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
    \n1. Maintain SS13 systems.
    \n2. Repair equipment.
    \n
    \nAtmospheric Technician 3>0-0-4
    \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
    \n1. Maintain atmosphere on SS13
    \n2. Research atmospheres on the space station. (safely please!)
    \n
    \nEngineer 2>1-3-0
    \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
    \n1. Upkeep the engine.
    \n2. Prevent fires in the engine.
    \n3. Maintain a safe orbit.
    \n
    \nMedical Researcher 2>5-0-0
    \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
    \n1. Make sure the station is kept safe.
    \n2. Research medical properties of materials studied of Space Station 13.
    \n
    \nScientist 2>5-0-0
    \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Phoron Technicians as phoron is the material they routinly handle.
    \n1. Research phoron
    \n2. Make sure all phoron is properly handled.
    \n
    \nMedical Doctor (Officer) 2>0-0-0
    \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
    \n1. Heal wounded people.
    \n2. Perform examinations of all personnel.
    \n3. Moniter usage of medical equipment.
    \n
    \nSecurity Officer 3>0-0-0
    \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
    \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
    \n1. Maintain order.
    \n2. Assist others.
    \n3. Repair structural problems.
    \n
    \nHead of Security 4>5-2-2
    \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
    \n1. Oversee security.
    \n2. Assign patrol duties.
    \n3. Protect the station and staff.
    \n
    \nHead of Personnel 4>4-2-2
    \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
    \n1. Assign duties.
    \n2. Moderate personnel.
    \n3. Moderate research.
    \n
    \nColony Director 5>5-5-5 (unrestricted station wide access)
    \n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
    \n1. Assign all positions on SS13
    \n2. Inspect the station for any problems.
    \n3. Perform administrative duties.
    \n" /obj/item/weapon/paper/photograph name = "photo" diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 53110bed0f..350aab3414 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -5,7 +5,7 @@ icon_state = "paper" item_state = "paper" throwforce = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL throw_range = 2 throw_speed = 1 layer = 4 diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index a2a1273ced..f6d192276f 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -8,7 +8,7 @@ ) item_state = "sheet-metal" throwforce = 1 - w_class = 3 + w_class = ITEMSIZE_NORMAL throw_speed = 3 throw_range = 7 pressure_resistance = 10 diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 37cfdaa86b..48e95071c5 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -128,7 +128,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "shredp" throwforce = 0 - w_class = 1 + w_class = ITEMSIZE_TINY throw_range = 3 throw_speed = 1 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7ee79cb923..c36ec736ae 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -17,7 +17,7 @@ item_state = "pen" slot_flags = SLOT_BELT | SLOT_EARS throwforce = 0 - w_class = 1.0 + w_class = ITEMSIZE_TINY throw_speed = 7 throw_range = 15 matter = list(DEFAULT_WALL_MATERIAL = 10) @@ -184,7 +184,7 @@ desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." icon = 'icons/obj/crayons.dmi' icon_state = "crayonred" - w_class = 1.0 + w_class = ITEMSIZE_TINY attack_verb = list("attacked", "coloured") colour = "#FF0000" //RGB var/shadeColour = "#220000" //RGB diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 0df6b30432..bbaec17318 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -15,7 +15,7 @@ desc = "A camera film cartridge. Insert it into a camera to reload it." icon_state = "film" item_state = "camera" - w_class = 1.0 + w_class = ITEMSIZE_TINY /******** @@ -28,7 +28,7 @@ var/global/photo_count = 0 icon = 'icons/obj/items.dmi' icon_state = "photo" item_state = "paper" - w_class = 2.0 + w_class = ITEMSIZE_SMALL var/id var/icon/img //Big photo image var/scribble //Scribble on the back. @@ -121,7 +121,7 @@ var/global/photo_count = 0 desc = "A polaroid camera. 10 photos left." icon_state = "camera" item_state = "camera" - w_class = 2.0 + w_class = ITEMSIZE_SMALL flags = CONDUCT slot_flags = SLOT_BELT matter = list(DEFAULT_WALL_MATERIAL = 2000) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 59f0dd67b2..fff953538a 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -5,7 +5,7 @@ icon_state = "stamp-qm" item_state = "stamp" throwforce = 0 - w_class = 1.0 + w_class = ITEMSIZE_TINY throw_speed = 7 throw_range = 15 matter = list(DEFAULT_WALL_MATERIAL = 60) @@ -13,7 +13,7 @@ attack_verb = list("stamped") /obj/item/weapon/stamp/captain - name = "station administrator's rubber stamp" + name = "colony director's rubber stamp" icon_state = "stamp-cap" /obj/item/weapon/stamp/hop @@ -90,4 +90,4 @@ if(chosen_stamp) name = chosen_stamp.name - icon_state = chosen_stamp.icon_state \ No newline at end of file + icon_state = chosen_stamp.icon_state diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 4f89687fb4..809a0750b0 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -191,7 +191,7 @@ proc/cardinalrange(var/center) icon = 'icons/obj/machines/antimatter.dmi' icon_state = "box" item_state = "electronic" - w_class = 4.0 + w_class = ITEMSIZE_LARGE flags = CONDUCT throwforce = 5 throw_speed = 1 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 49b72f4944..b577439394 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -68,6 +68,7 @@ var/cell_type = /obj/item/weapon/cell/apc var/opened = 0 //0=closed, 1=opened, 2=cover removed var/shorted = 0 + var/grid_check = FALSE var/lighting = 3 var/equipment = 3 var/environ = 3 @@ -461,7 +462,7 @@ if (stat & MAINT) user << "There is no connector for your power cell." return - if(W.w_class != 3) + if(W.w_class != ITEMSIZE_NORMAL) user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here." return @@ -631,7 +632,7 @@ if (((stat & BROKEN) || hacker) \ && !opened \ && W.force >= 5 \ - && W.w_class >= 3.0 \ + && W.w_class >= ITEMSIZE_NORMAL \ && prob(20) ) opened = 2 user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ @@ -796,7 +797,7 @@ return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" /obj/machinery/power/apc/proc/update() - if(operating && !shorted) + if(operating && !shorted && !grid_check) area.power_light = (lighting > 1) area.power_equip = (equipment > 1) area.power_environ = (environ > 1) @@ -1001,7 +1002,7 @@ if(debug) log_debug("Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]") - if(cell && !shorted) + if(cell && !shorted && !grid_check) // draw power from cell as before to power the area var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) @@ -1196,7 +1197,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) // overload the lights in this APC area /obj/machinery/power/apc/proc/overload_lighting(var/chance = 100) - if(/* !get_connection() || */ !operating || shorted) + if(/* !get_connection() || */ !operating || shorted || grid_check) return if( cell && cell.charge>=20) cell.use(20); @@ -1225,4 +1226,34 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) update_icon() return 1 +/obj/machinery/power/apc/overload(var/obj/machinery/power/source) + if(is_critical) + return + + if(prob(30)) // Nothing happens. + return + + if(prob(40)) // Lights blow. + overload_lighting() + + if(prob(40)) // Spooky flickers. + for(var/obj/machinery/light/L in area) + L.flicker(20) + + if(prob(25)) // Bluescreens. + emagged = 1 + locked = 0 + update_icon() + + if(prob(25)) // Cell gets damaged. + if(cell) + cell.corrupt() + + if(prob(10)) // Computers get broken. + for(var/obj/machinery/computer/comp in area) + comp.ex_act(3) + + if(prob(5)) // APC completely ruined. + set_broken() + #undef APC_UPDATE_ICON_COOLDOWN diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 4d75a99cf7..c837f502dd 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -488,7 +488,7 @@ obj/structure/cable/proc/cableColor(var/colorC) color = COLOR_RED desc = "A coil of power cable." throwforce = 10 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 2 throw_range = 5 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20) @@ -570,9 +570,9 @@ obj/structure/cable/proc/cableColor(var/colorC) /obj/item/stack/cable_coil/proc/update_wclass() if(amount == 1) - w_class = 1.0 + w_class = ITEMSIZE_TINY else - w_class = 2.0 + w_class = ITEMSIZE_SMALL /obj/item/stack/cable_coil/examine(mob/user) if(get_dist(src, user) > 1) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 48798c1fb5..92d749df0f 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -234,3 +234,8 @@ return src.set_dir(turn(src.dir, -90)) + +/obj/machinery/power/generator/power_spike() + if(effective_gen >= max_power / 2 && powernet) // Don't make a spike if we're not making a whole lot of power. + ..() + diff --git a/code/modules/power/grid_checker.dm b/code/modules/power/grid_checker.dm new file mode 100644 index 0000000000..b52dc4a4d6 --- /dev/null +++ b/code/modules/power/grid_checker.dm @@ -0,0 +1,125 @@ +/obj/machinery/power/grid_checker + name = "grid checker" + desc = "A machine that reacts to unstable conditions in the powernet, by safely shutting everything down. Probably better \ + than the alternative." + icon_state = "gridchecker_on" + circuit = /obj/item/weapon/circuitboard/grid_checker + var/power_failing = FALSE // Turns to TRUE when the grid check event is fired by the Game Master, or perhaps a cheeky antag. + // Wire stuff below. + var/datum/wires/grid_checker/wires + var/wire_locked_out = FALSE + var/wire_allow_manual_1 = FALSE + var/wire_allow_manual_2 = FALSE + var/wire_allow_manual_3 = FALSE + var/opened = FALSE + +/obj/machinery/power/grid_checker/New() + ..() + connect_to_network() + update_icon() + wires = new(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/stack/cable_coil(src, 10) + RefreshParts() + +/obj/machinery/power/grid_checker/Destroy() + qdel(wires) + wires = null + ..() + +/obj/machinery/power/grid_checker/update_icon() + if(power_failing) + icon_state = "gridchecker_off" + set_light(2, 2, "#F86060") + else + icon_state = "gridchecker_on" + set_light(2, 2, "#A8B0F8") + +/obj/machinery/power/grid_checker/attackby(obj/item/W, mob/user) + if(!user) + return + if(istype(W, /obj/item/weapon/screwdriver)) + default_deconstruction_screwdriver(user, W) + opened = !opened + else if(istype(W, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(user, W) + else if(istype(W, /obj/item/device/multitool) || istype(W, /obj/item/weapon/wirecutters) ) + attack_hand(user) + +/obj/machinery/power/grid_checker/attack_hand(mob/user) + if(!user) + return + add_fingerprint(user) + interact(user) + +/obj/machinery/power/grid_checker/interact(mob/user) + if(!user) + return + + if(opened) + wires.Interact(user) + + return ui_interact(user) + +/obj/machinery/power/grid_checker/proc/power_failure(var/announce = TRUE) + if(announce) + command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, \ + the colony's power will be shut off for an indeterminate duration while the powernet monitor restarts automatically, or \ + when Engineering can manually resolve the issue.", + "Critical Power Failure", + new_sound = 'sound/AI/poweroff.ogg') + power_failing = TRUE + if(powernet) + for(var/obj/machinery/power/terminal/T in powernet.nodes) // SMESes that are "downstream" of the powernet. + + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.is_critical) + continue + A.grid_check = TRUE + + for(var/obj/machinery/power/smes/smes in powernet.nodes) // These are "upstream" + smes.grid_check = TRUE +/* + smes.last_charge = smes.charge + smes.last_output_attempt = smes.output_attempt + smes.last_input_attempt = smes.input_attempt + smes.charge = 0 + smes.inputting(FALSE) + smes.outputting(FALSE) + smes.update_icon() + smes.power_change() +*/ + update_icon() + + spawn(rand(4 MINUTES, 10 MINUTES) ) + if(power_failing) // Check to see if engineering didn't beat us to it. + end_power_failure(TRUE) + +/obj/machinery/power/grid_checker/proc/end_power_failure(var/announce = TRUE) + if(announce) + command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", + "Power Systems Nominal", + new_sound = 'sound/AI/poweron.ogg') + power_failing = FALSE + update_icon() + + for(var/obj/machinery/power/terminal/T in powernet.nodes) + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.is_critical) + continue + A.grid_check = FALSE + + for(var/obj/machinery/power/smes/smes in powernet.nodes) // These are "upstream" + smes.grid_check = FALSE + /* + smes.charge = smes.last_charge + smes.output_attempt = smes.last_output_attempt + smes.input_attempt = smes.last_input_attempt + smes.update_icon() + smes.power_change() + */ \ No newline at end of file diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 643a83c84a..245845a14b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -710,7 +710,7 @@ icon = 'icons/obj/lighting.dmi' force = 2 throwforce = 5 - w_class = 1 + w_class = ITEMSIZE_TINY var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched @@ -731,7 +731,7 @@ brightness_power = 3 /obj/item/weapon/light/tube/large - w_class = 2 + w_class = ITEMSIZE_SMALL name = "large light tube" brightness_range = 15 brightness_power = 4 @@ -835,4 +835,4 @@ desc = "A lamp shade for a lamp." icon = 'icons/obj/lighting.dmi' icon_state = "lampshade" - w_class = 1 \ No newline at end of file + w_class = ITEMSIZE_TINY \ No newline at end of file diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 4f34cd7eff..b8beea238c 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -138,6 +138,29 @@ ..() return +// Used for power spikes by the engine, has specific effects on different machines. +/obj/machinery/power/proc/overload(var/obj/machinery/power/source) + return + +/obj/machinery/power/proc/power_spike() + var/obj/machinery/power/grid_checker/G = locate() in powernet.nodes + if(G) // If we found a grid checker, then all is well. + G.power_failure(prob(30)) + else // Otherwise lets break some stuff. + spawn(1) + command_announcement.Announce("Dangerous power spike detected in the power network. Please check machinery \ + for electrical damage.", + "Critical Power Overload") + var/i = 0 + var/limit = rand(30, 50) + for(var/obj/machinery/power/P in powernet.nodes) + P.overload(src) + i++ + if(i % 5) + sleep(1) + if(i >= limit) + break + /////////////////////////////////////////// // Powernet handling helpers ////////////////////////////////////////// diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 9fc0f74290..bf165f0916 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -44,6 +44,7 @@ var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! var/obj/machinery/power/terminal/terminal = null var/should_be_mapped = 0 // If this is set to 0 it will send out warning on New() + var/grid_check = FALSE // If true, suspends all I/O. /obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0) @@ -124,7 +125,7 @@ var/last_onln = outputting //inputting - if(input_attempt && (!input_pulsed && !input_cut)) + if(input_attempt && (!input_pulsed && !input_cut) && !grid_check) var/target_load = min((capacity-charge)/SMESRATE, input_level) // charge at set rate, limited to spare capacity var/actual_load = draw_power(target_load) // add the load to the terminal side network charge += actual_load * SMESRATE // increase the charge @@ -137,7 +138,7 @@ inputting = 0 //outputting - if(outputting && (!output_pulsed && !output_cut)) + if(outputting && (!output_pulsed && !output_cut) && !grid_check) output_used = min( charge/SMESRATE, output_level) //limit output to that stored charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) @@ -420,6 +421,11 @@ update_icon() ..() +/obj/machinery/power/smes/overload(var/obj/machinery/power/source) // This propagates the power spike down the powernet. + if(istype(source, /obj/machinery/power/smes)) // Prevent infinite loops if two SMESes are hooked up to each other. + return + power_spike() + /obj/machinery/power/smes/magical name = "magical power storage unit" diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 0ce32da396..2f0fe9419d 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -11,7 +11,7 @@ desc = "Standard superconductive magnetic coil with average capacity and I/O rating." icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" // Just few icons patched together. If someone wants to make better icon, feel free to do so! - w_class = 4.0 // It's LARGE (backpack size) + w_class = ITEMSIZE_LARGE // It's LARGE (backpack size) var/ChargeCapacity = 6000000 // 100 kWh var/IOCapacity = 250000 // 250 kW diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index cbb974e2e6..f580457835 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -207,7 +207,7 @@ var/list/solars_list = list() icon = 'icons/obj/power.dmi' icon_state = "sp_base" item_state = "camera" - w_class = 4 // Pretty big! + w_class = ITEMSIZE_LARGE // Pretty big! anchored = 0 var/tracker = 0 var/glass_type = null diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 3636c3acfa..a1f2fbf030 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -37,3 +37,7 @@ // Powernet rebuilds need this to work properly. /obj/machinery/power/terminal/process() return 1 + +/obj/machinery/power/terminal/overload(var/obj/machinery/power/source) + if(master) + master.overload(source) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 34e20d499c..b06ed2aaf1 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -80,4 +80,4 @@ name = "tracker electronics" icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" - w_class = 2.0 + w_class = ITEMSIZE_SMALL diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 930cc54d82..e142f31ca0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -6,7 +6,7 @@ flags = CONDUCT slot_flags = SLOT_BELT | SLOT_EARS throwforce = 1 - w_class = 1 + w_class = ITEMSIZE_TINY var/leaves_residue = 1 var/caliber = "" //Which kind of guns it can be loaded into @@ -72,7 +72,7 @@ item_state = "syringe_kit" matter = list(DEFAULT_WALL_MATERIAL = 500) throwforce = 5 - w_class = 2 + w_class = ITEMSIZE_SMALL throw_speed = 4 throw_range = 10 diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 993db0f27c..b1cb0964d1 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -81,7 +81,7 @@ /obj/item/ammo_magazine/tommydrum name = "tommygun drum magazine (.45)" icon_state = "tommy-drum" - w_class = 3 // Bulky ammo doesn't fit in your pockets! + w_class = ITEMSIZE_NORMAL // Bulky ammo doesn't fit in your pockets! mag_type = MAGAZINE ammo_type = /obj/item/ammo_casing/c45 matter = list(DEFAULT_WALL_MATERIAL = 3750) @@ -359,7 +359,7 @@ caliber = "a762" matter = list(DEFAULT_WALL_MATERIAL = 10000) ammo_type = /obj/item/ammo_casing/a762 - w_class = 3 // This should NOT fit in your pocket!! + w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!! max_ammo = 50 multiple_sprites = 1 diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index d10280854f..51652c4ccf 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -144,6 +144,14 @@ projectile_type = /obj/item/projectile/energy/flash/flare matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90) + +/obj/item/ammo_casing/shotgun/emp + name = "ion shell" + desc = "An advanced shotgun round that creates a small EMP when it strikes a target." + icon_state = "empshell" + projectile_type = /obj/item/projectile/bullet/shotgun/ion + matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720) + /obj/item/ammo_casing/a762 desc = "A 7.62mm bullet casing." caliber = "a762" diff --git a/code/modules/projectiles/dnalocking.dm b/code/modules/projectiles/dnalocking.dm index 394600fc61..616cdc6dae 100644 --- a/code/modules/projectiles/dnalocking.dm +++ b/code/modules/projectiles/dnalocking.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/ammo.dmi' icon_state = "dnalockchip" desc = "A state of the art technological chip that can be installed in a firearm. It allows the user to store their DNA and lock the gun's use from unwanted users." - w_class = 1 + w_class = ITEMSIZE_TINY origin_tech = list(TECH_COMBAT = 4, TECH_DATA = 4, TECH_BIO = 4) var/list/stored_dna = list() //list of the dna stored in the gun, used to allow users to use it or not @@ -85,4 +85,4 @@ return 1 if(!(user.dna in attached_lock.stored_dna)) return 0 - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm index 94e39f41cc..c1457f942e 100644 --- a/code/modules/projectiles/effects.dm +++ b/code/modules/projectiles/effects.dm @@ -226,4 +226,4 @@ icon_state = "impact_lightning" light_range = 2 light_power = 0.5 - light_color = "#00C6FF" \ No newline at end of file + light_color = "#00C6FF" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 01dfce8e8c..b026950f69 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -41,7 +41,7 @@ flags = CONDUCT slot_flags = SLOT_BELT|SLOT_HOLSTER matter = list(DEFAULT_WALL_MATERIAL = 2000) - w_class = 3 + w_class = ITEMSIZE_NORMAL throwforce = 5 throw_speed = 4 throw_range = 5 @@ -85,6 +85,8 @@ var/dna_lock = 0 //whether or not the gun is locked to dna var/obj/item/dnalockingchip/attached_lock + var/last_shot = 0 //records the last shot fired + /obj/item/weapon/gun/New() ..() for(var/i in 1 to firemodes.len) @@ -274,6 +276,8 @@ target = targloc pointblank = 0 + last_shot = world.time + // We do this down here, so we don't get the message if we fire an empty gun. if(requires_two_hands) if(user.item_is_in_hands(src) && user.hands_are_full()) @@ -322,6 +326,8 @@ P.launch(target) + last_shot = world.time + if(silenced) playsound(src, fire_sound, 10, 1) else diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f05e453cfb..bbdc04ccdb 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -6,8 +6,7 @@ fire_sound_text = "laser blast" var/obj/item/weapon/cell/power_supply //What type of power cell this uses - var/charge_cost = 200 //How much energy is needed to fire. - var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value. + var/charge_cost = 240 //How much energy is needed to fire. var/cell_type = null var/projectile_type = /obj/item/projectile/beam/practice var/modifystate @@ -18,6 +17,12 @@ var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically var/recharge_time = 4 var/charge_tick = 0 + var/charge_delay = 75 //delay between firing and charging + + var/battery_lock = 0 //If set, weapon cannot switch batteries + +/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) + ..() /obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) ..() @@ -32,10 +37,7 @@ /obj/item/weapon/gun/energy/New() ..() - if(cell_type) - power_supply = new cell_type(src) - else - power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost) + power_supply = new /obj/item/weapon/cell/device(src) if(self_recharge) processing_objects.Add(src) update_icon() @@ -46,21 +48,26 @@ ..() /obj/item/weapon/gun/energy/process() - if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 + if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the battery + if(world.time > last_shot + charge_delay) //Doesn't work if you've fired recently + if(!power_supply || power_supply.charge >= power_supply.maxcharge) + return 0 // check if we actually need to recharge - if(!power_supply || power_supply.charge >= power_supply.maxcharge) - return 0 // check if we actually need to recharge + charge_tick++ + if(charge_tick < recharge_time) return 0 + charge_tick = 0 - if(use_external_power) - var/obj/item/weapon/cell/external = get_external_power_supply() - if(!external || !external.use(charge_cost)) //Take power from the borg... - return 0 + var/rechargeamt = power_supply.maxcharge*0.2 - power_supply.give(charge_cost) //... to recharge the shot - update_icon() + if(use_external_power) + var/obj/item/weapon/cell/external = get_external_power_supply() + if(!external || !external.use(rechargeamt)) //Take power from the borg... + return 0 + + power_supply.give(rechargeamt) //... to recharge 1/5th the battery + update_icon() + else + charge_tick = 0 return 1 /obj/item/weapon/gun/energy/consume_next_projectile() @@ -69,6 +76,54 @@ if(!power_supply.checked_use(charge_cost)) return null return new projectile_type(src) +/obj/item/weapon/gun/energy/proc/load_ammo(var/obj/item/C, mob/user) + if(istype(C, /obj/item/weapon/cell)) + if(self_recharge || battery_lock) + user << "[src] does not have a battery port." + return + if(istype(C, /obj/item/weapon/cell/device)) + var/obj/item/weapon/cell/device/P = C + if(power_supply) + user << "[src] already has a power cell." + else + user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") + if(do_after(user, 10)) + user.remove_from_mob(P) + power_supply = P + P.loc = src + user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].") + playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) + update_icon() + update_held_icon() + else + user << "This cell is not fitted for [src]." + return + +/obj/item/weapon/gun/energy/proc/unload_ammo(mob/user) + if(self_recharge || battery_lock) + user << "[src] does not have a battery port." + return + if(power_supply) + user.put_in_hands(power_supply) + power_supply.update_icon() + user.visible_message("[user] removes [power_supply] from [src].", "You remove [power_supply] from [src].") + power_supply = null + playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) + update_icon() + update_held_icon() + else + user << "[src] does not have a power cell." + +/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob) + ..() + load_ammo(A, user) + +/obj/item/weapon/gun/energy/attack_hand(mob/user as mob) + if(user.get_inactive_hand() == src) + unload_ammo(user) + else + return ..() + /obj/item/weapon/gun/energy/proc/get_external_power_supply() if(isrobot(src.loc)) var/mob/living/silicon/robot/R = src.loc @@ -85,12 +140,21 @@ /obj/item/weapon/gun/energy/examine(mob/user) ..(user) - var/shots_remaining = round(power_supply.charge / charge_cost) - user << "Has [shots_remaining] shot\s remaining." + if(power_supply) + var/shots_remaining = round(power_supply.charge / charge_cost) + user << "Has [shots_remaining] shot\s remaining." + else + user << "Does not have a power cell." return /obj/item/weapon/gun/energy/update_icon(var/ignore_inhands) - if(charge_meter) + if(power_supply == null) + if(modifystate) + icon_state = "[modifystate]_open" + else + icon_state = "[initial(icon_state)]_open" + return + else if(charge_meter) var/ratio = power_supply.charge / power_supply.maxcharge //make sure that rounding down will not give us the empty state even if we have charge for a shot left. @@ -104,3 +168,10 @@ else icon_state = "[initial(icon_state)][ratio]" if(!ignore_inhands) update_held_icon() + +/obj/item/weapon/gun/energy/proc/start_recharge() + if(power_supply == null) + power_supply = new /obj/item/weapon/cell/device(src) + self_recharge = 1 + processing_objects.Add(src) + update_icon() \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index cef84810bd..47206bc3e8 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -6,7 +6,7 @@ item_state = "laser" fire_sound = 'sound/weapons/Laser.ogg' slot_flags = SLOT_BELT|SLOT_BACK - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2) matter = list(DEFAULT_WALL_MATERIAL = 2000) @@ -15,8 +15,8 @@ one_handed_penalty = 2 firemodes = list( - list(mode_name="normal", projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 200), - list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 50), + list(mode_name="normal", projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240), + list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60), ) /obj/item/weapon/gun/energy/laser/mounted @@ -30,8 +30,8 @@ projectile_type = /obj/item/projectile/beam/practice firemodes = list( - list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 200), - list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 50), + list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 240), + list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 60), ) obj/item/weapon/gun/energy/retro @@ -41,7 +41,7 @@ obj/item/weapon/gun/energy/retro desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." fire_sound = 'sound/weapons/Laser.ogg' slot_flags = SLOT_BELT - w_class = 3 + w_class = ITEMSIZE_NORMAL projectile_type = /obj/item/projectile/beam fire_delay = 10 //old technology @@ -53,11 +53,14 @@ obj/item/weapon/gun/energy/retro force = 5 fire_sound = 'sound/weapons/Laser.ogg' slot_flags = SLOT_BELT - w_class = 3 + w_class = ITEMSIZE_NORMAL projectile_type = /obj/item/projectile/beam origin_tech = null - max_shots = 5 //to compensate a bit for self-recharging + fire_delay = 10 //Old pistol + charge_cost = 480 //to compensate a bit for self-recharging self_recharge = 1 + recharge_time = 3 //Recharges a bit more quickly... + charge_delay = 100 //... but it takes a while to get started /obj/item/weapon/gun/energy/lasercannon name = "laser cannon" @@ -69,13 +72,13 @@ obj/item/weapon/gun/energy/retro origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) slot_flags = SLOT_BELT|SLOT_BACK projectile_type = /obj/item/projectile/beam/heavylaser/cannon - max_shots = 4 + battery_lock = 1 fire_delay = 20 - w_class = 4 + w_class = ITEMSIZE_LARGE // requires_two_hands = 1 one_handed_penalty = 6 // The thing's heavy and huge. accuracy = 3 - charge_cost = 400 + charge_cost = 600 /obj/item/weapon/gun/energy/lasercannon/mounted @@ -87,7 +90,6 @@ obj/item/weapon/gun/energy/retro requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry. projectile_type = /obj/item/projectile/beam/heavylaser charge_cost = 400 - max_shots = 6 fire_delay = 20 /obj/item/weapon/gun/energy/xray @@ -99,8 +101,7 @@ obj/item/weapon/gun/energy/retro fire_sound = 'sound/weapons/eluger.ogg' origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2) projectile_type = /obj/item/projectile/beam/xray - charge_cost = 100 - max_shots = 12 + charge_cost = 200 /obj/item/weapon/gun/energy/sniperrifle name = "marksman energy rifle" @@ -112,11 +113,11 @@ obj/item/weapon/gun/energy/retro origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4) projectile_type = /obj/item/projectile/beam/sniper slot_flags = SLOT_BACK - charge_cost = 400 - max_shots = 4 + battery_lock = 1 + charge_cost = 600 fire_delay = 35 force = 10 - w_class = 5 // So it can't fit in a backpack. + w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. accuracy = -3 //shooting at the hip scoped_accuracy = 0 // requires_two_hands = 1 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 6819c1cd81..7d2d5f07e3 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -4,7 +4,6 @@ icon_state = "energystun100" item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' - max_shots = 10 fire_delay = 10 // Handguns should be inferior to two-handed weapons. projectile_type = /obj/item/projectile/beam/stun @@ -12,8 +11,8 @@ modifystate = "energystun" firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg'), + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), ) /obj/item/weapon/gun/energy/gun/mounted @@ -28,9 +27,9 @@ icon_state = "fm-2tstun100" //May resprite this to be more rifley item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' - max_shots = 18 + charge_cost = 100 force = 8 - w_class = 4 //Probably gonna make it a rifle sooner or later + w_class = ITEMSIZE_LARGE //Probably gonna make it a rifle sooner or later fire_delay = 6 projectile_type = /obj/item/projectile/beam/stun/weak @@ -41,20 +40,20 @@ one_handed_penalty = 2 firemodes = list( - list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'), + list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 100), list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'), - list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'), + list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200), list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'), ) /obj/item/weapon/gun/energy/gun/nuclear name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized reactor." - icon_state = "nucgun" + icon_state = "nucgunstun" origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3) slot_flags = SLOT_BELT force = 8 //looks heavier than a pistol - w_class = 4 //Looks bigger than a pistol, too. + w_class = ITEMSIZE_LARGE //Looks bigger than a pistol, too. fire_delay = 6 //This one's not a handgun, it should have the same fire delay as everything else self_recharge = 1 modifystate = null @@ -63,44 +62,6 @@ one_handed_penalty = 1 // It's rather bulky, so holding it in one hand is a little harder than with two, however it's not 'required'. firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'), + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480), ) - - var/lightfail = 0 - -//override for failcheck behaviour -/obj/item/weapon/gun/energy/gun/nuclear/process() - charge_tick++ - if(charge_tick < 4) return 0 - charge_tick = 0 - if(!power_supply) return 0 - if((power_supply.charge / power_supply.maxcharge) != 1) - power_supply.give(charge_cost) - update_icon() - return 1 - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge() - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = round(ratio, 0.25) * 100 - overlays += "nucgun-[ratio]" - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor() - if(lightfail) - overlays += "nucgun-medium" - else if ((power_supply.charge/power_supply.maxcharge) <= 0.5) - overlays += "nucgun-light" - else - overlays += "nucgun-clean" - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode() - var/datum/firemode/current_mode = firemodes[sel_mode] - switch(current_mode.name) - if("stun") overlays += "nucgun-stun" - if("lethal") overlays += "nucgun-kill" - -/obj/item/weapon/gun/energy/gun/nuclear/update_icon() - overlays.Cut() - update_charge() - update_reactor() - update_mode() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 3074638bce..2bcb2db771 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -7,14 +7,13 @@ force = 10 fire_sound='sound/weapons/Laser.ogg' projectile_type = /obj/item/projectile/beam - charge_cost=100 - max_shots = 20 // This is cut in half by "DESTROY" mode. + charge_cost = 120 sel_mode = 2 firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=100), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=100), - list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost=200), + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost = 120), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost = 120), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 240), ) /obj/item/weapon/gun/energy/pulse_rifle/mounted @@ -24,11 +23,9 @@ /obj/item/weapon/gun/energy/pulse_rifle/destroyer name = "pulse destroyer" desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists." - cell_type = /obj/item/weapon/cell/super - fire_delay = 25 fire_sound='sound/weapons/gauss_shoot.ogg' projectile_type=/obj/item/projectile/beam/pulse - charge_cost=400 + charge_cost = 120 /obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) user << "[src.name] has three settings, and they are all DESTROY." @@ -39,4 +36,10 @@ desc = "It's not the size of the gun, it's the size of the hole it puts through people." slot_flags = SLOT_BELT|SLOT_HOLSTER icon_state = "m1911-p" - max_shots = 5 + charge_cost = 240 + + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost = 240), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost = 240), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost = 480), + ) \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 0c3822cced..6a02d8a38f 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -5,12 +5,10 @@ item_state = "ionrifle" fire_sound = 'sound/weapons/Laser.ogg' origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 flags = CONDUCT slot_flags = SLOT_BACK - charge_cost = 300 - max_shots = 10 projectile_type = /obj/item/projectile/ion /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) @@ -30,7 +28,6 @@ item_state = "decloner" fire_sound = 'sound/weapons/pulse3.ogg' origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3) - max_shots = 10 projectile_type = /obj/item/projectile/energy/declone /obj/item/weapon/gun/energy/floragun @@ -39,8 +36,6 @@ icon_state = "floramut100" item_state = "floramut" fire_sound = 'sound/effects/stealthoff.ogg' - charge_cost = 100 - max_shots = 10 projectile_type = /obj/item/projectile/energy/floramut origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3) modifystate = "floramut" @@ -65,9 +60,10 @@ icon_state = "riotgun" item_state = "c20r" slot_flags = SLOT_BELT|SLOT_BACK - w_class = 4 + w_class = ITEMSIZE_LARGE projectile_type = /obj/item/projectile/meteor cell_type = /obj/item/weapon/cell/potato + charge_cost = 100 self_recharge = 1 recharge_time = 5 //Time it takes for shots to recharge (in ticks) charge_meter = 0 @@ -78,7 +74,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "pen" item_state = "pen" - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_BELT @@ -94,7 +90,7 @@ desc = "A specialized firearm designed to fire lethal bolts of phoron." icon_state = "toxgun" fire_sound = 'sound/effects/stealthoff.ogg' - w_class = 3.0 + w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4) projectile_type = /obj/item/projectile/energy/phoron @@ -109,8 +105,8 @@ fire_sound = 'sound/weapons/emitter.ogg' flags = CONDUCT slot_flags = SLOT_BACK - w_class = 4.0 - max_shots = 5 + w_class = ITEMSIZE_LARGE + charge_cost = 480 projectile_type = /obj/item/projectile/change origin_tech = null self_recharge = 1 @@ -134,7 +130,7 @@ name = "staff of animation" desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." projectile_type = /obj/item/projectile/animate - max_shots = 10 + charge_cost = 240 obj/item/weapon/gun/energy/staff/focus name = "mental focus" diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 20fa18b09e..b41c1b090b 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -4,7 +4,6 @@ icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' - max_shots = 10 projectile_type = /obj/item/projectile/beam/stun /obj/item/weapon/gun/energy/taser/mounted @@ -14,7 +13,7 @@ /obj/item/weapon/gun/energy/taser/mounted/cyborg name = "taser gun" - max_shots = 6 + charge_cost = 400 recharge_time = 7 //Time it takes for shots to recharge (in ticks) @@ -26,14 +25,14 @@ fire_sound = 'sound/weapons/Gunshot.ogg' origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) projectile_type = /obj/item/projectile/energy/electrode/strong - max_shots = 8 + charge_cost = 300 /obj/item/weapon/gun/energy/crossbow name = "mini energy-crossbow" desc = "A weapon favored by many mercenary stealth specialists." icon_state = "crossbow" - w_class = 2.0 + w_class = ITEMSIZE_SMALL item_state = "crossbow" origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5) matter = list(DEFAULT_WALL_MATERIAL = 2000) @@ -41,7 +40,7 @@ silenced = 1 fire_sound = 'sound/weapons/Genhit.ogg' projectile_type = /obj/item/projectile/energy/bolt - max_shots = 5 + charge_cost = 480 self_recharge = 1 charge_meter = 0 @@ -52,7 +51,7 @@ /obj/item/weapon/gun/energy/crossbow/largecrossbow name = "energy crossbow" desc = "A weapon favored by mercenary infiltration teams." - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 matter = list(DEFAULT_WALL_MATERIAL = 200000) projectile_type = /obj/item/projectile/energy/bolt/large diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index d4472e2488..64f708891b 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -5,7 +5,7 @@ desc = "A gun that changes temperatures. It has a small label on the side, 'More extreme temperatures will cost more charge!'" var/temperature = T20C var/current_temperature = T20C - charge_cost = 100 + charge_cost = 24 origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2) slot_flags = SLOT_BELT|SLOT_BACK diff --git a/code/modules/projectiles/guns/launcher.dm b/code/modules/projectiles/guns/launcher.dm index 8d5a9748f1..1c9a09e4e3 100644 --- a/code/modules/projectiles/guns/launcher.dm +++ b/code/modules/projectiles/guns/launcher.dm @@ -1,7 +1,7 @@ /obj/item/weapon/gun/launcher name = "launcher" desc = "A device that launches things." - w_class = 5.0 + w_class = ITEMSIZE_HUGE flags = CONDUCT slot_flags = SLOT_BACK diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm index 407b70d20a..0fdad19238 100644 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ b/code/modules/projectiles/guns/launcher/crossbow.dm @@ -7,7 +7,7 @@ icon_state = "bolt" item_state = "bolt" throwforce = 8 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL sharp = 1 edge = 0 @@ -20,7 +20,7 @@ sharp = 1 edge = 0 throwforce = 5 - w_class = 2 + w_class = ITEMSIZE_SMALL icon = 'icons/obj/weapons.dmi' icon_state = "metal-rod" item_state = "bolt" diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index 107330c13d..207572a8c6 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -3,7 +3,7 @@ desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine." icon_state = "riotgun" item_state = "riotgun" - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 fire_sound = 'sound/weapons/empty.ogg' @@ -94,7 +94,7 @@ /obj/item/weapon/gun/launcher/grenade/underslung name = "underslung grenade launcher" desc = "Not much more than a tube and a firing mechanism, this grenade launcher is designed to be fitted to a rifle." - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 5 max_grenades = 0 diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 5463fe26f0..422515de14 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -4,15 +4,15 @@ icon_state = "pneumatic" item_state = "pneumatic" slot_flags = SLOT_BELT - w_class = 5.0 + w_class = ITEMSIZE_HUGE flags = CONDUCT fire_sound_text = "a loud whoosh of moving air" fire_delay = 50 fire_sound = 'sound/weapons/tablehit1.ogg' var/fire_pressure // Used in fire checks/pressure checks. - var/max_w_class = 3 // Hopper intake size. - var/max_storage_space = 20 // Total internal storage size. + var/max_w_class = ITEMSIZE_NORMAL // Hopper intake size. + var/max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Total internal storage size. var/obj/item/weapon/tank/tank = null // Tank of gas for use in firing the cannon. var/obj/item/weapon/storage/item_storage diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm index 300121aef7..438485320e 100644 --- a/code/modules/projectiles/guns/launcher/rocket.dm +++ b/code/modules/projectiles/guns/launcher/rocket.dm @@ -3,7 +3,7 @@ desc = "MAGGOT." icon_state = "rocket" item_state = "rocket" - w_class = 4.0 + w_class = ITEMSIZE_LARGE throw_speed = 2 throw_range = 10 force = 5.0 diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 3cbbd40f34..6b2c52a304 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -9,7 +9,7 @@ slot_flags = SLOT_BELT | SLOT_EARS throwforce = 3 force = 3 - w_class = 1 + w_class = ITEMSIZE_TINY var/obj/item/weapon/reagent_containers/syringe/syringe /obj/item/weapon/syringe_cartridge/update_icon() @@ -67,7 +67,7 @@ desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance." icon_state = "syringegun" item_state = "syringegun" - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 7 matter = list(DEFAULT_WALL_MATERIAL = 2000) slot_flags = SLOT_BELT diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 93904387cd..2d3d034bf9 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -7,7 +7,7 @@ desc = "A gun that fires bullets." icon_state = "revolver" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - w_class = 3 + w_class = ITEMSIZE_NORMAL matter = list(DEFAULT_WALL_MATERIAL = 1000) recoil = 1 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 2ed89336a9..6c00f9431a 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -2,7 +2,7 @@ name = "prototype SMG" desc = "A protoype lightweight, fast firing gun. Uses 9mm rounds." icon_state = "saber" //ugly - w_class = 3 + w_class = ITEMSIZE_NORMAL load_method = SPEEDLOADER //yup. until someone sprites a magazine for it. max_shells = 22 caliber = "9mm" @@ -26,7 +26,7 @@ desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." icon_state = "c20r" item_state = "c20r" - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 10 caliber = "10mm" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) @@ -54,7 +54,7 @@ desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 7.62mm rounds. This one is unmarked." icon_state = "arifle" item_state = null - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 caliber = "a762" origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) @@ -84,7 +84,7 @@ desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds." icon_state = "wt550" item_state = "wt550" - w_class = 3 + w_class = ITEMSIZE_NORMAL caliber = "9mm" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) slot_flags = SLOT_BELT @@ -107,7 +107,7 @@ desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 5.56mm rounds and has an under barrel grenade launcher." icon_state = "carbine" // This isn't a carbine. :T item_state = "z8carbine" - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 caliber = "a556" origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3) @@ -177,7 +177,7 @@ desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever" icon_state = "l6closed100" item_state = "l6closed" - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 slot_flags = 0 max_shells = 50 @@ -250,7 +250,7 @@ desc = "The AS-24 is a durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked." icon_state = "ashot" item_state = null - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 caliber = "shotgun" fire_sound = 'sound/weapons/shotgun.ogg' @@ -280,7 +280,7 @@ name = "\improper Uzi" desc = "A lightweight, compact, fast firing gun, for when you want someone really dead. Uses .45 rounds." icon_state = "mini-uzi" - w_class = 3 + w_class = ITEMSIZE_NORMAL load_method = MAGAZINE caliber = ".45" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) @@ -304,7 +304,7 @@ desc = "The H90K is a compact, high capacity submachine gun produced by Hephaistos Industries. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds." icon_state = "p90smg" item_state = "p90" - w_class = 3 + w_class = ITEMSIZE_NORMAL caliber = "9mm" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) slot_flags = SLOT_BELT // ToDo: Belt sprite. @@ -325,7 +325,7 @@ name = "\improper Tommygun" desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds." icon_state = "tommygun" - w_class = 3 + w_class = ITEMSIZE_NORMAL caliber = ".45" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5) slot_flags = SLOT_BELT // ToDo: Belt sprite. @@ -348,7 +348,7 @@ desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds." icon_state = "bullpupm" item_state = "bullpup" - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 caliber = "a556" origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4) diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm index 28da9997d2..c6e25ca767 100644 --- a/code/modules/projectiles/guns/projectile/boltaction.dm +++ b/code/modules/projectiles/guns/projectile/boltaction.dm @@ -30,7 +30,7 @@ // Stole hacky terrible code from doublebarrel shotgun. -Spades /obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin/attackby(var/obj/item/A as obj, mob/user as mob) - if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3) + if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != ITEMSIZE_NORMAL) user << "You begin to shorten the barrel and stock of \the [src]." if(loaded.len) afterattack(user, user) //will this work? //it will. we call it twice, for twice the FUN @@ -39,7 +39,7 @@ return if(do_after(user, 30)) icon_state = "obrez" - w_class = 3 + w_class = ITEMSIZE_NORMAL recoil = 2 // Owch accuracy = -1 // You know damn well why. item_state = "gun" diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 08442fcb8c..fd46803c68 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -104,7 +104,7 @@ name = "silenced pistol" desc = "A small, quiet, easily concealable gun. Uses .45 rounds." icon_state = "silenced_pistol" - w_class = 3 + w_class = ITEMSIZE_NORMAL caliber = ".45" silenced = 1 fire_delay = 1 @@ -190,7 +190,7 @@ desc = "The Lumoco Arms P3 Whisper. A small, easily concealable gun. Uses 9mm rounds." icon_state = "pistol" item_state = null - w_class = 2 + w_class = ITEMSIZE_SMALL caliber = "9mm" silenced = 0 origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2) @@ -212,7 +212,7 @@ user << "You unscrew [silenced] from [src]." user.put_in_hands(silenced) silenced = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL update_icon() return ..() @@ -225,7 +225,7 @@ user.drop_item() user << "You screw [I] onto [src]." silenced = I //dodgy? - w_class = 3 + w_class = ITEMSIZE_NORMAL I.loc = src //put the silencer into the gun update_icon() return @@ -243,7 +243,7 @@ desc = "a silencer" icon = 'icons/obj/gun.dmi' icon_state = "silencer" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/gun/projectile/pirate name = "zip gun" @@ -284,7 +284,7 @@ desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~ icon_state = "derringer" item_state = "concealed" - w_class = 2 + w_class = ITEMSIZE_SMALL origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3) handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading load_method = SINGLE_CASING diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 025aac20d9..90da6cac49 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -4,7 +4,7 @@ icon_state = "shotgun" item_state = "shotgun" max_shells = 4 - w_class = 4.0 + w_class = ITEMSIZE_LARGE force = 10 flags = CONDUCT slot_flags = SLOT_BACK @@ -60,7 +60,7 @@ load_method = SINGLE_CASING|SPEEDLOADER handle_casings = CYCLE_CASINGS max_shells = 2 - w_class = 4 + w_class = ITEMSIZE_LARGE force = 10 flags = CONDUCT slot_flags = SLOT_BACK @@ -98,7 +98,7 @@ if(do_after(user, 30)) //SHIT IS STEALTHY EYYYYY icon_state = "sawnshotgun" item_state = "sawnshotgun" - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 5 slot_flags &= ~SLOT_BACK //you can't sling it on your back slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not. @@ -115,5 +115,5 @@ item_state = "sawnshotgun" slot_flags = SLOT_BELT|SLOT_HOLSTER ammo_type = /obj/item/ammo_casing/shotgun/pellet - w_class = 3 + w_class = ITEMSIZE_NORMAL force = 5 diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index f91054b2c7..be280c2f64 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -6,7 +6,7 @@ icon_state = "heavysniper" item_state = "l6closed-empty" // placeholder item_state_slots = list(slot_r_hand_str = "heavysniper", slot_l_hand_str = "heavysniper") - w_class = 5 // So it can't fit in a backpack. + w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) @@ -75,7 +75,7 @@ desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds." icon_state = "SVD" item_state = "SVD" - w_class = 5 // So it can't fit in a backpack. + w_class = ITEMSIZE_HUGE // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK // Needs a sprite. origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 8bbd31aed0..835a097267 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -168,6 +168,19 @@ range_step = 1 spread_step = 10 +//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. +/obj/item/projectile/bullet/shotgun/ion + name = "ion slug" + damage = 15 + embed = 0 + sharp = 0 + check_armour = "melee" + +/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0) + ..() + empulse(target, 0, 0) //Only affects what it hits + return 1 + /* "Rifle" rounds */ /obj/item/projectile/bullet/rifle diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index b567512a05..8ce0360c10 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -14,7 +14,6 @@ empulse(target, 1, 1) return 1 - /obj/item/projectile/bullet/gyro name ="explosive bolt" icon_state= "bolter" diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm index 30e6f1376a..4868e6d068 100644 --- a/code/modules/random_map/automata/caves.dm +++ b/code/modules/random_map/automata/caves.dm @@ -45,7 +45,10 @@ var/turf/simulated/mineral/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) if(istype(T) && !T.ignore_mapgen) if(map[current_cell] == FLOOR_CHAR) - T.make_floor() + if(prob(90)) + T.make_floor() + else + T.ChangeTurf(/turf/space/cracked_asteroid) else T.make_wall() if(map[current_cell] == DOOR_CHAR) diff --git a/code/modules/reagents/Chemistry-Reagents-Helpers.dm b/code/modules/reagents/Chemistry-Reagents-Helpers.dm new file mode 100644 index 0000000000..a072e4402b --- /dev/null +++ b/code/modules/reagents/Chemistry-Reagents-Helpers.dm @@ -0,0 +1,14 @@ +/atom/movable/proc/can_be_injected_by(var/atom/injector) + if(!Adjacent(get_turf(injector))) + return FALSE + if(!reagents) + return FALSE + if(!reagents.get_free_space()) + return FALSE + return TRUE + +/obj/can_be_injected_by(var/atom/injector) + return is_open_container() && ..() + +/mob/living/can_be_injected_by(var/atom/injector) + return ..() && (can_inject(null, 0, BP_TORSO) || can_inject(null, 0, BP_GROIN)) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 64cbd4a32c..29d997cde5 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -19,6 +19,7 @@ var/list/data = null var/volume = 0 var/metabolism = REM // This would be 0.2 normally + var/mrate_static = FALSE //If the reagent should always process at the same speed, regardless of species, make this TRUE var/ingest_met = 0 var/touch_met = 0 var/dose = 0 @@ -60,6 +61,8 @@ if(overdose && (volume > overdose) && (location != CHEM_TOUCH)) overdose(M, alien) var/removed = metabolism + if(!mrate_static == TRUE) + removed *= M.species.metabolic_rate if(ingest_met && (location == CHEM_INGEST)) removed = ingest_met if(touch_met && (location == CHEM_TOUCH)) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm index fcabfa811c..96aa1c238d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm @@ -4,6 +4,7 @@ id = "blood" reagent_state = LIQUID metabolism = REM * 5 + mrate_static = TRUE color = "#C80000" glass_name = "tomato juice" @@ -75,6 +76,7 @@ id = "antibodies" reagent_state = LIQUID color = "#0050F0" + mrate_static = TRUE /datum/reagent/antibodies/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(src.data) @@ -89,6 +91,7 @@ reagent_state = LIQUID color = "#0064C877" metabolism = REM * 10 + mrate_static = TRUE glass_name = "water" glass_desc = "The father of all refreshments." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 89837746c3..617fb31e58 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -12,6 +12,7 @@ reagent_state = SOLID color = "#1C1300" ingest_met = REM * 5 + mrate_static = TRUE /datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -66,6 +67,8 @@ var/targ_temp = 310 var/halluci = 0 + mrate_static = TRUE + glass_name = "ethanol" glass_desc = "A well-known alcohol with a variety of applications." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 525309f93b..33f42c3eb0 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -6,6 +6,7 @@ description = "All the vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID metabolism = REM * 4 + mrate_static = TRUE var/nutriment_factor = 30 // Per unit var/injectable = 0 color = "#664330" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index 2cb1bcaa5b..3f6a499ee0 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -8,6 +8,7 @@ color = "#00BFFF" overdose = REAGENTS_OVERDOSE * 2 metabolism = REM * 0.5 + mrate_static = TRUE scannable = 1 /datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -91,6 +92,7 @@ description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective." reagent_state = LIQUID color = "#0040FF" + mrate_static = TRUE //Until it's not crazy strong, at least overdose = REAGENTS_OVERDOSE * 0.5 scannable = 1 @@ -123,6 +125,7 @@ reagent_state = LIQUID color = "#8080FF" metabolism = REM * 0.5 + mrate_static = TRUE scannable = 1 /datum/reagent/cryoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -139,6 +142,7 @@ reagent_state = LIQUID color = "#80BFFF" metabolism = REM * 0.5 + mrate_static = TRUE scannable = 1 /datum/reagent/clonexadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -159,6 +163,7 @@ overdose = 60 scannable = 1 metabolism = 0.02 + mrate_static = TRUE /datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) M.add_chemical_effect(CE_PAINKILLER, 50) @@ -176,6 +181,7 @@ overdose = 30 scannable = 1 metabolism = 0.02 + mrate_static = TRUE /datum/reagent/tramadol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) M.add_chemical_effect(CE_PAINKILLER, 80) @@ -192,6 +198,7 @@ color = "#800080" overdose = 20 metabolism = 0.02 + mrate_static = TRUE /datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) M.add_chemical_effect(CE_PAINKILLER, 200) @@ -311,6 +318,7 @@ reagent_state = LIQUID color = "#FF3300" metabolism = REM * 0.3 + mrate_static = TRUE overdose = REAGENTS_OVERDOSE * 0.5 /datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -376,6 +384,7 @@ reagent_state = LIQUID color = "#C1C1C1" metabolism = REM * 0.05 + mrate_static = TRUE overdose = REAGENTS_OVERDOSE scannable = 1 @@ -430,6 +439,7 @@ reagent_state = LIQUID color = "#BF80BF" metabolism = 0.01 + mrate_static = TRUE data = 0 /datum/reagent/methylphenidate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -450,6 +460,7 @@ reagent_state = LIQUID color = "#FF80FF" metabolism = 0.01 + mrate_static = TRUE data = 0 /datum/reagent/citalopram/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) @@ -470,6 +481,7 @@ reagent_state = LIQUID color = "#FF80BF" metabolism = 0.01 + mrate_static = TRUE data = 0 /datum/reagent/paroxetine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index 92d09d1e18..7a94e64ac6 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -111,6 +111,7 @@ reagent_state = LIQUID color = "#C8A5DC" affects_dead = 1 //This can even heal dead people. + mrate_static = TRUE //Just in case glass_name = "liquid gold" glass_desc = "It's magic. We don't have to explain it." @@ -182,6 +183,7 @@ description = "Adrenaline is a hormone used as a drug to treat cardiac arrest and other cardiac dysrhythmias resulting in diminished or absent cardiac output." reagent_state = LIQUID color = "#C8A5DC" + mrate_static = TRUE /datum/reagent/adrenaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -195,6 +197,7 @@ id = "holywater" description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." color = "#E0E8EF" + mrate_static = TRUE glass_name = "holy water" glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 0d83a5725c..dd31ac05e4 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -7,6 +7,7 @@ reagent_state = LIQUID color = "#CF3600" metabolism = REM * 0.25 // 0.05 by default. Hopefully enough to get some help, or die horribly, whatever floats your boat + mrate_static = TRUE var/strength = 4 // How much damage it deals per unit /datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm index 2f7369cba0..3a129d4872 100644 --- a/code/modules/reagents/dispenser/cartridge.dm +++ b/code/modules/reagents/dispenser/cartridge.dm @@ -3,7 +3,7 @@ desc = "This goes in a chemical dispenser." icon_state = "cartridge" - w_class = 3 + w_class = ITEMSIZE_NORMAL volume = CARTRIDGE_VOLUME_LARGE amount_per_transfer_from_this = 50 diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 2c8c853ebc..6721cbd3bb 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -3,7 +3,7 @@ desc = "..." icon = 'icons/obj/chemical.dmi' icon_state = null - w_class = 2 + w_class = ITEMSIZE_SMALL var/amount_per_transfer_from_this = 5 var/possible_transfer_amounts = list(5,10,15,25,30) var/volume = 30 diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm index 5a92b61c88..284d4ecfa9 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm @@ -52,7 +52,7 @@ var/glass_addition var/glass_desc var/glass_color - w_class = 1 + w_class = ITEMSIZE_TINY icon = DRINK_ICON_FILE /obj/item/weapon/glass_extra/stick diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index ba671cdb50..7ee525fc0b 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -8,7 +8,7 @@ icon_state = "dropper0" amount_per_transfer_from_this = 5 possible_transfer_amounts = list(1,2,3,4,5) - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS volume = 5 diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index b8a6e2bd51..edb8e7fae6 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -94,7 +94,7 @@ name = "golden cup" icon_state = "golden_cup" item_state = "" //nope :( - w_class = 4 + w_class = ITEMSIZE_LARGE force = 14 throwforce = 10 amount_per_transfer_from_this = 20 @@ -256,8 +256,8 @@ ..() /obj/item/weapon/reagent_containers/food/drinks/flask - name = "\improper Station Administrator's flask" - desc = "A metal flask belonging to the Station Administrator" + name = "\improper Colony Director's flask" + desc = "A metal flask belonging to the Colony Director" icon_state = "flask" volume = 60 center_of_mass = list("x"=17, "y"=7) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 6f621ce337..0270c8f2a8 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -13,7 +13,7 @@ var/dry = 0 var/nutriment_amt = 0 center_of_mass = list("x"=16, "y"=16) - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/reagent_containers/food/snacks/New() ..() @@ -2229,7 +2229,7 @@ // sliceable is just an organization type path, it doesn't have any additional code or variables tied to it. /obj/item/weapon/reagent_containers/food/snacks/sliceable - w_class = 3 //Whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that. + w_class = ITEMSIZE_NORMAL //Whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that. /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread name = "meatbread loaf" @@ -2904,12 +2904,12 @@ /obj/item/pizzabox/proc/closepizzabox() - if( boxes.len > 0 ) + if(boxes.len > 0) return open = !open - if( open && pizza ) + if(open && pizza) ismessy = 1 update_icon() @@ -2919,29 +2919,29 @@ overlays = list() // Set appropriate description - if( open && pizza ) + if(open && pizza) desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if( boxes.len > 0 ) + else if(boxes.len > 0) desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." var/obj/item/pizzabox/topbox = boxes[boxes.len] var/toptag = topbox.boxtag - if( toptag != "" ) + if(toptag != "") desc = "[desc] The box on top has a tag, it reads: '[toptag]'." else desc = "A box suited for pizzas." - if( boxtag != "" ) + if(boxtag != "") desc = "[desc] The box has a tag, it reads: '[boxtag]'." // Icon states and overlays - if( open ) - if( ismessy ) + if(open) + if(ismessy) icon_state = "pizzabox_messy" else icon_state = "pizzabox_open" - if( pizza ) + if(pizza) var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state) pizzaimg.pixel_y = -3 overlays += pizzaimg @@ -2950,33 +2950,33 @@ else // Stupid code because byondcode sucks var/doimgtag = 0 - if( boxes.len > 0 ) + if(boxes.len > 0) var/obj/item/pizzabox/topbox = boxes[boxes.len] - if( topbox.boxtag != "" ) + if(topbox.boxtag != "") doimgtag = 1 else - if( boxtag != "" ) + if(boxtag != "") doimgtag = 1 - if( doimgtag ) + if(doimgtag) var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag") tagimg.pixel_y = boxes.len * 3 overlays += tagimg icon_state = "pizzabox[boxes.len+1]" -/obj/item/pizzabox/attack_hand( mob/user as mob ) +/obj/item/pizzabox/attack_hand(mob/user as mob) if( open && pizza ) - user.put_in_hands( pizza ) + user.put_in_hands(pizza) - user << "\red You take the [src.pizza] out of the [src]." + user << "You take \the [src.pizza] out of the [src]." src.pizza = null update_icon() return - if( boxes.len > 0 ) - if( user.get_inactive_hand() != src ) + if(boxes.len > 0) + if(user.get_inactive_hand() != src) ..() return @@ -2984,13 +2984,13 @@ boxes -= box user.put_in_hands( box ) - user << "\red You remove the topmost [src] from your hand." + user << "You remove \the topmost [src] from your hand." box.update_icon() update_icon() return ..() -/obj/item/pizzabox/attack_self( mob/user as mob ) +/obj/item/pizzabox/attack_self(mob/user as mob) closepizzabox() @@ -3000,57 +3000,58 @@ closepizzabox() /obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob ) - if( istype(I, /obj/item/pizzabox/) ) + if(istype(I, /obj/item/pizzabox/)) var/obj/item/pizzabox/box = I - if( !box.open && !src.open ) + if(!box.open && !src.open) // Make a list of all boxes to be added var/list/boxestoadd = list() boxestoadd += box for(var/obj/item/pizzabox/i in box.boxes) boxestoadd += i - if( (boxes.len+1) + boxestoadd.len <= 5 ) + if((boxes.len+1) + boxestoadd.len <= 5) user.drop_item() box.loc = src box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit - src.boxes.Add( boxestoadd ) + src.boxes.Add(boxestoadd) box.update_icon() update_icon() - user << "\red You put the [box] ontop of the [src]!" + user << "You put \the [box] ontop of the [src]!" else - user << "\red The stack is too high!" + user << "\The stack is too high!" else - user << "\red Close the [box] first!" + user << "Close \the [box] first!" return - if( istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/) ) // Long ass fucking object name + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name - if( src.open ) - user.drop_item() - I.loc = src - src.pizza = I - - update_icon() - - user << "\red You put the [I] in the [src]!" + if(open) + if(!pizza) + user.drop_item() + I.loc = src + pizza = I + update_icon() + user << "You put \the [I] in \the [src]!" + else + user << "\The [src] is full! It already has a [pizza] inside." else - user << "\red You try to push the [I] through the lid but it doesn't work!" + user << "You try to push \the [I] through the lid but it doesn't work!" + return - if( istype(I, /obj/item/weapon/pen/) ) - - if( src.open ) + if(istype(I, /obj/item/weapon/pen/)) + if(open) return var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30) var/obj/item/pizzabox/boxtotagto = src - if( boxes.len > 0 ) + if(boxes.len > 0) boxtotagto = boxes[boxes.len] boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 1347a182fc..b041aa13e7 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -12,7 +12,7 @@ amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,60) volume = 60 - w_class = 2 + w_class = ITEMSIZE_SMALL flags = OPENCONTAINER unacidable = 1 //glass doesn't dissolve in acid @@ -218,7 +218,7 @@ icon_state = "bucket" item_state = "bucket" matter = list(DEFAULT_WALL_MATERIAL = 200) - w_class = 3.0 + w_class = ITEMSIZE_NORMAL amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,60,120) volume = 120 @@ -256,7 +256,7 @@ icon = 'icons/obj/vending.dmi' icon_state = "water_cooler_bottle" matter = list("glass" = 2000) - w_class = 3.0 + w_class = ITEMSIZE_NORMAL amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,60,120) volume = 120 diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 150a774309..464e066264 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -8,7 +8,7 @@ icon_state = null item_state = "pill" possible_transfer_amounts = null - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS volume = 60 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index c3b48691c0..c1c2597daf 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -7,7 +7,7 @@ flags = OPENCONTAINER|NOBLUDGEON slot_flags = SLOT_BELT throwforce = 3 - w_class = 2.0 + w_class = ITEMSIZE_SMALL throw_speed = 2 throw_range = 10 amount_per_transfer_from_this = 10 @@ -163,7 +163,7 @@ icon_state = "chemsprayer" item_state = "chemsprayer" throwforce = 3 - w_class = 3.0 + w_class = ITEMSIZE_NORMAL possible_transfer_amounts = null volume = 600 origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 87b5311be2..4bf97175d1 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -15,7 +15,7 @@ amount_per_transfer_from_this = 5 possible_transfer_amounts = null volume = 15 - w_class = 1 + w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS sharp = 1 unacidable = 1 //glass diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 70ac20ae87..be3cfa72a8 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -218,7 +218,7 @@ name = "package wrapper" icon = 'icons/obj/items.dmi' icon_state = "deliveryPaper" - w_class = 3.0 + w_class = ITEMSIZE_NORMAL var/amount = 25.0 @@ -327,7 +327,7 @@ icon_state = "dest_tagger" var/currTag = 0 - w_class = 2 + w_class = ITEMSIZE_SMALL item_state = "electronic" flags = CONDUCT slot_flags = SLOT_BELT diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 78715938c3..346aecacab 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -260,6 +260,15 @@ other types of metals and chemistry for reagents). category = "Misc" sort_string = "DAAAD" +/datum/design/item/powercell/device + name = "device" + build_type = PROTOLATHE + id = "device" + materials = list(DEFAULT_WALL_MATERIAL = 350, "glass" = 25) + build_path = /obj/item/weapon/cell/device + category = "Misc" + sort_string = "DAAAE" + /datum/design/item/hud materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) @@ -1038,6 +1047,14 @@ CIRCUITS BELOW build_path = /obj/item/weapon/circuitboard/smes sort_string = "JBABB" +/datum/design/circuit/grid_checker + name = "power grid checker" + desc = "Allows for the construction of circuit boards used to build a grid checker." + id = "grid_checker" + req_tech = list(TECH_POWER = 4, TECH_ENGINEERING = 3) + build_path = /obj/item/weapon/circuitboard/grid_checker + sort_string = "JBABC" + /datum/design/circuit/gas_heater name = "gas heating system" id = "gasheater" @@ -1523,6 +1540,14 @@ CIRCUITS BELOW materials = list(DEFAULT_WALL_MATERIAL = 20000) build_path = /obj/item/device/electronic_assembly/medium +/datum/design/item/custom_circuit_assembly/drone + name = "Drone custom assembly" + desc = "An customizable assembly optimized for autonomous devices." + id = "assembly-drone" + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_POWER = 4) + materials = list(DEFAULT_WALL_MATERIAL = 30000) + build_path = /obj/item/device/electronic_assembly/drone + /datum/design/item/custom_circuit_assembly/large name = "Large custom assembly" desc = "An customizable assembly for large machines." @@ -1717,6 +1742,11 @@ CIRCUITS BELOW build_path = /obj/item/integrated_circuit/input/local_locator sort_string = "WAAEG" +/datum/design/circuit/integrated_circuit/input_output/adjacent_locator + id = "cc-adjacentlocator" + build_path = /obj/item/integrated_circuit/input/adjacent_locator + sort_string = "WAAEH" + /datum/design/circuit/integrated_circuit/input_output/signaler id = "cc-signaler" build_path = /obj/item/integrated_circuit/input/signaler @@ -1754,44 +1784,44 @@ CIRCUITS BELOW ..() name = "Custom circuitry \[Logic\] ([item_name])" -/datum/design/circuit/integrated_circuit/logic/equals +/datum/design/circuit/integrated_circuit/logic/binary/equals id = "cc-equals" - build_path = /obj/item/integrated_circuit/logic/equals + build_path = /obj/item/integrated_circuit/logic/binary/equals sort_string = "WAAFA" -/datum/design/circuit/integrated_circuit/logic/not +/datum/design/circuit/integrated_circuit/logic/unary/not id = "cc-not" - build_path = /obj/item/integrated_circuit/logic/not + build_path = /obj/item/integrated_circuit/logic/unary/not sort_string = "WAAFB" -/datum/design/circuit/integrated_circuit/logic/and +/datum/design/circuit/integrated_circuit/logic/binary/and id = "cc-and" - build_path = /obj/item/integrated_circuit/logic/and + build_path = /obj/item/integrated_circuit/logic/binary/and sort_string = "WAAFC" -/datum/design/circuit/integrated_circuit/logic/or +/datum/design/circuit/integrated_circuit/logic/binary/or id = "cc-or" - build_path = /obj/item/integrated_circuit/logic/or + build_path = /obj/item/integrated_circuit/logic/binary/or sort_string = "WAAFD" -/datum/design/circuit/integrated_circuit/logic/less_than +/datum/design/circuit/integrated_circuit/logic/binary/less_than id = "cc-less_than" - build_path = /obj/item/integrated_circuit/logic/less_than + build_path = /obj/item/integrated_circuit/logic/binary/less_than sort_string = "WAAFE" -/datum/design/circuit/integrated_circuit/logic/less_than_or_equal +/datum/design/circuit/integrated_circuit/logic/binary/less_than_or_equal id = "cc-less_than_or_equal" - build_path = /obj/item/integrated_circuit/logic/less_than_or_equal + build_path = /obj/item/integrated_circuit/logic/binary/less_than_or_equal sort_string = "WAAFF" -/datum/design/circuit/integrated_circuit/logic/greater_than +/datum/design/circuit/integrated_circuit/logic/binary/greater_than id = "cc-greater_than" - build_path = /obj/item/integrated_circuit/logic/greater_than + build_path = /obj/item/integrated_circuit/logic/binary/greater_than sort_string = "WAAFG" -/datum/design/circuit/integrated_circuit/logic/greater_than_or_equal +/datum/design/circuit/integrated_circuit/logic/binary/greater_than_or_equal id = "cc-greater_than_or_equal" - build_path = /obj/item/integrated_circuit/logic/greater_than_or_equal + build_path = /obj/item/integrated_circuit/logic/binary/greater_than_or_equal sort_string = "WAAFH" @@ -1821,7 +1851,33 @@ CIRCUITS BELOW sort_string = "WAAGB" req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) +/datum/design/circuit/integrated_circuit/manipulation/injector + name = "injector" + id = "cc-injector" + build_path = /obj/item/integrated_circuit/manipulation/injector + sort_string = "WAAGC" + req_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 3) +/datum/design/circuit/integrated_circuit/manipulation/reagent_pump + name = "reagent pump" + id = "cc-reagent_pump" + build_path = /obj/item/integrated_circuit/manipulation/reagent_pump + sort_string = "WAAGD" + req_tech = list(TECH_ENGINEERING = 1, TECH_DATA = 1, TECH_BIO = 2) + +/datum/design/circuit/integrated_circuit/manipulation/reagent_storage + name = "reagent storage" + id = "cc-reagent_storage" + build_path = /obj/item/integrated_circuit/manipulation/reagent_storage + sort_string = "WAAGE" + req_tech = list(TECH_ENGINEERING = 1, TECH_DATA = 1, TECH_BIO = 1) + +/datum/design/circuit/integrated_circuit/manipulation/reagent_storage_cryo + name = "cryo reagent storage" + id = "cc-reagent_storage_cryo" + build_path = /obj/item/integrated_circuit/manipulation/reagent_storage/cryo + sort_string = "WAAGF" + req_tech = list(TECH_MATERIALS = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /datum/design/circuit/integrated_circuit/memory/AssembleDesignName() ..() diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 41c6f6978c..ce5a9e151a 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -203,7 +203,7 @@ research holder datum. icon = 'icons/obj/cloning.dmi' icon_state = "datadisk2" item_state = "card-id" - w_class = 2.0 + w_class = ITEMSIZE_SMALL matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10) var/datum/tech/stored @@ -217,7 +217,7 @@ research holder datum. icon = 'icons/obj/cloning.dmi' icon_state = "datadisk2" item_state = "card-id" - w_class = 2.0 + w_class = ITEMSIZE_SMALL matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10) var/datum/design/blueprint diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm index b54b243609..34923745a4 100644 --- a/code/modules/spells/spellbook.dm +++ b/code/modules/spells/spellbook.dm @@ -5,7 +5,7 @@ icon_state ="spellbook" throw_speed = 1 throw_range = 5 - w_class = 2 + w_class = ITEMSIZE_SMALL var/uses = 5 var/temp = null var/max_uses = 5 diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 5b1fc876b3..a8ff23a91f 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -20,7 +20,7 @@ desc = "A keyring with a small steel key, and a yellow fob reading \"Choo Choo!\"." icon = 'icons/obj/vehicles.dmi' icon_state = "train_keys" - w_class = 1 + w_class = ITEMSIZE_TINY /obj/vehicle/train/cargo/trolley name = "cargo train trolley" diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 59e208f034..887a547e0d 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -4,7 +4,7 @@ name = "antibody scanner" desc = "Scans living beings for antibodies in their blood." icon_state = "health" - w_class = 2.0 + w_class = ITEMSIZE_SMALL item_state = "electronic" flags = CONDUCT @@ -99,7 +99,7 @@ name = "blank GNA disk" icon = 'icons/obj/cloning.dmi' icon_state = "datadisk0" - w_class = 1 + w_class = ITEMSIZE_TINY var/datum/disease2/effectholder/effect = null var/list/species = null var/stage = 1 diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 6df096a2c4..11907321b2 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -321,7 +321,6 @@ projectile_type = /obj/item/projectile/beam/stun/kin21 - max_shots = 8 charge_cost = 125 charge_meter = 1 @@ -468,4 +467,4 @@ /obj/item/ammo_magazine/mc9mml/practice name = "\improper SMG magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/c9mmp \ No newline at end of file + ammo_type = /obj/item/ammo_casing/c9mmp diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm index fa0d54a9a7..e79957ba28 100644 --- a/code/modules/xenoarcheaology/sampling.dm +++ b/code/modules/xenoarcheaology/sampling.dm @@ -3,7 +3,7 @@ desc = "It looks extremely delicate." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "sliver1" - w_class = 1 + w_class = ITEMSIZE_TINY sharp = 1 var/datum/geosample/geological_data @@ -86,7 +86,7 @@ icon = 'icons/obj/device.dmi' icon_state = "sampler0" item_state = "screwdriver_brown" - w_class = 1 + w_class = ITEMSIZE_TINY var/sampled_turf = "" var/num_stored_bags = 10 @@ -144,7 +144,7 @@ var/image/I = image("icon"=R, "layer"=FLOAT_LAYER) filled_bag.overlays += I filled_bag.overlays += "evidence" - filled_bag.w_class = 1 + filled_bag.w_class = ITEMSIZE_TINY user << "You take a core sample of the [item_to_sample]." else diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 42b8e692ec..d5cab2ef6e 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/device.dmi' icon_state = "locator" item_state = "locator" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/device/gps/attack_self(var/mob/user as mob) var/turf/T = get_turf(src) @@ -15,7 +15,7 @@ desc = "A coiled metallic tape used to check dimensions and lengths." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "measuring" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/storage/bag/fossils name = "Fossil Satchel" @@ -23,10 +23,10 @@ icon = 'icons/obj/mining.dmi' icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET - w_class = 3 + w_class = ITEMSIZE_NORMAL storage_slots = 50 - max_storage_space = 200 - max_w_class = 3 + max_storage_space = ITEMSIZE_COST_NORMAL * 50 + max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/weapon/fossil) /obj/item/weapon/storage/box/samplebags @@ -46,7 +46,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "flashgun" item_state = "lampgreen" - w_class = 2.0 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT var/last_scan_time = 0 @@ -102,7 +102,7 @@ icon = 'icons/obj/pda.dmi' icon_state = "crap" item_state = "analyzer" - w_class = 2 + w_class = ITEMSIZE_SMALL slot_flags = SLOT_BELT var/list/positive_locations = list() var/datum/depth_scan/current diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm index a8bf853e82..b954d5eb05 100644 --- a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm +++ b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm @@ -9,7 +9,7 @@ excavation_amount = 1 drill_sound = 'sound/weapons/thudswoosh.ogg' drill_verb = "brushing" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/one_pick name = "2cm pick" @@ -21,7 +21,7 @@ excavation_amount = 2 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/two_pick name = "4cm pick" @@ -33,7 +33,7 @@ excavation_amount = 4 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/three_pick name = "6cm pick" @@ -45,7 +45,7 @@ excavation_amount = 6 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/four_pick name = "8cm pick" @@ -57,7 +57,7 @@ excavation_amount = 8 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/five_pick name = "10cm pick" @@ -69,7 +69,7 @@ excavation_amount = 10 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/six_pick name = "12cm pick" @@ -81,7 +81,7 @@ excavation_amount = 12 drill_sound = 'sound/items/Screwdriver.ogg' drill_verb = "delicately picking" - w_class = 2 + w_class = ITEMSIZE_SMALL /obj/item/weapon/pickaxe/hand name = "hand pickaxe" @@ -93,7 +93,7 @@ excavation_amount = 30 drill_sound = 'sound/items/Crowbar.ogg' drill_verb = "clearing" - w_class = 2 + w_class = ITEMSIZE_SMALL //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Pack for holding pickaxes @@ -105,7 +105,7 @@ desc = "A set of picks for excavation." item_state = "syringe_kit" storage_slots = 7 - w_class = 2 + w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/pickaxe/brush, /obj/item/weapon/pickaxe/one_pick, /obj/item/weapon/pickaxe/two_pick, @@ -114,8 +114,8 @@ /obj/item/weapon/pickaxe/five_pick, /obj/item/weapon/pickaxe/six_pick, /obj/item/weapon/pickaxe/hand) - max_storage_space = 18 - max_w_class = 2 + max_storage_space = ITEMSIZE_COST_SMALL * 9 + max_w_class = ITEMSIZE_SMALL use_to_pickup = 1 /obj/item/weapon/storage/excavation/New() diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index 8cf7b45a1f..98c2fa8160 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -15,7 +15,7 @@ desc = "A small disk used for carrying data on genetics." icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "disk" - w_class = 1.0 + w_class = ITEMSIZE_TINY var/list/genes = list() var/genesource = "unknown" diff --git a/code/modules/xenobio2/tools/slime_handling_tools.dm b/code/modules/xenobio2/tools/slime_handling_tools.dm index b8f37a106f..27136cd872 100644 --- a/code/modules/xenobio2/tools/slime_handling_tools.dm +++ b/code/modules/xenobio2/tools/slime_handling_tools.dm @@ -1,11 +1,11 @@ /* What this file contains: * A specialized stun prod, for handling fiesty slimes - + * A specialized stun gun, for handling many fiesty slimes - + * A stun projectile for handling xenomorphs. - + */ /obj/item/weapon/melee/baton/slime name = "slimebaton" @@ -27,32 +27,31 @@ else X.stasis += (stasisforce / 6) ..() - + /obj/item/weapon/melee/baton/slime/loaded/New() ..() - bcell = new/obj/item/weapon/cell/high(src) + bcell = new/obj/item/weapon/cell/device(src) update_icon() return - - + + // Xeno stun gun + projectile /obj/item/weapon/gun/energy/taser/xeno name = "xeno taser gun" desc = "Straight out of NT's testing laboratories, this small gun is used to subdue non-humanoid xeno life forms. While marketed towards handling slimes, it may be useful for other creatures." icon_state = "taserold" fire_sound = 'sound/weapons/taser2.ogg' - max_shots = 10 projectile_type = /obj/item/projectile/beam/stun/xeno - + /obj/item/projectile/beam/stun/xeno icon_state = "omni" agony = 4 var/stasisforce = 40 - + muzzle_type = /obj/effect/projectile/laser_omni/muzzle tracer_type = /obj/effect/projectile/laser_omni/tracer impact_type = /obj/effect/projectile/laser_omni/impact - + /obj/item/projectile/beam/stun/xeno/on_hit(var/atom/target, var/blocked = 0) if(istype(target, /mob/living/simple_animal/xeno)) var/mob/living/simple_animal/xeno/X = target diff --git a/html/changelog.html b/html/changelog.html index fda0a46275..ced964c28f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,90 @@ -->
    +

    08 October 2016

    +

    Anewbe updated:

    +
      +
    • Unloading an energy weapon should now correctly show what was unloaded.
    • +
    • Borg stun baton is back to the old cost, for balance reasons.
    • +
    +

    Redstryker updated:

    +
      +
    • 'Overseer' added as an alt title to Colony Director alt titles list.
    • +
    +

    Spades Neil updated:

    +
      +
    • Adds the ability to hack Jukeboxes.
    • +
    +

    Yoshax updated:

    +
      +
    • Flashlights now take powercells.
    • +
    • Flashlights now have multiple brightness levels, including low, medium and high.
    • +
    + +

    06 October 2016

    +

    Anewbe updated:

    +
      +
    • Energy weapons and stunbatons now use special device power cells, these can still be recharged.
    • +
    • Energy weapons can be unloaded and reloaded by clicking them with an empty hand or a device cell, respectively. The process of loading a cell takes a few moments.
    • +
    • Stunbatons no longer require a screwdriver to switch cells.
    • +
    • Tweaked the order in which stunbatons check for power, they should now visibly power off when their cell hits 0, instead of one hit after.
    • +
    • Security lockers (HoS, Warden, and Officer) now have an extra device cell in them.
    • +
    • Protolathe can print device cells.
    • +
    • Adds start_recharge() proc to energy weapons. When called, this should cause the affected weapon to begin self-charging.
    • +
    • Weapons that self-recharge won't do so for a short period after firing.
    • +
    • On weapons that can fire both lethally and non-lethally, lasers drain twice as much power as tasers.
    • +
    • Laser cannon, LWAP, and self_recharging weapons cannot switch cells.
    • +
    • Map has been changed to include more rechargers. Merc and ERT bases include extra device cells.
    • +
    +

    Neerti updated:

    +
      +
    • Cleaned up the work in progress event system.
    • +
    • Added framework for a new grid check for the new event system.
    • +
    +

    Spades Neil updated:

    +
      +
    • Replaced Station Administrator with Colony Director, based on feedback literally from NASA.
    • +
    +

    Yoshax updated:

    +
      +
    • You can now only fit one pizza per box, and pizzas will no longer vanish to pizza gnomes.
    • +
    • Energy swords will now produce a small light. The light is determined by the color of the blade.
    • +
    • Simple mobs such as slimes, or carp, will now ignore intent requirements for passing applied tape.
    • +
    • Long records will no longer be devoured by long-record-goblins when attempting to edit them using a console in-round.
    • +
    • AIs with special roles will now get access to the fancy law manager.
    • +
    + +

    05 October 2016

    +

    Redstryker updated:

    +
      +
    • Added four sounds that are randomly played when bones break. Also allows the Technomancer to play the bone break sound.
    • +
    • Adds a black variety of the Security Voidsuit called the 'Crowd Control' voidsuit. It can be obtained from a Suit Cycler with Security clearence.
    • +
    • Codes in icon state for the Press Vest.
    • +
    • Added a child of the Medical armband with a red cross on it. It is available on the loadout.
    • +
    + +

    02 October 2016

    +

    Anewbe updated:

    +
      +
    • Pain from burn damage is now equal to that of brute damage.
    • +
    • Removed the exploit by which you could gain cargo points by ordering plastic crates.
    • +
    • Upped cargo point gain by 50%.
    • +
    • Parapen in SpecOps crate replaced with a 4th smoke grenade.
    • +
    +

    HarpyEagle updated:

    +
      +
    • Adds applying pressure to body parts to reduce bleeding. With desired body part selected, help-intent click yourself or get an aggressive grab, then help-intent attack with the grab item. Each person should only be able to apply pressure to one body part on one person at a time, so choose wisely. Applying pressure will get blood on your hands.
    • +
    +

    Yoshax updated:

    +
      +
    • Armbands can now be attached to things that go in the outer suit slot.
    • +
    • Shanking has been added. You can shank someone by getting an aggressive grab on them, targetting their chest and attacking them with a sharp item. This has a special attack that has greatly increased chance to do internal damage, also does bonus damage for weapons that are both sharp and have edge.
    • +
    +

    Zuhayr updated:

    +
      +
    • Added /vg/ direct-action ventcrawling. You will now crawl through the actual pipe network, a step at a time. Have fun.
    • +
    +

    19 September 2016

    Anewbe updated: