From edef78a1e4a75eb347237d9408e4a50c7e64aaec Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Fri, 11 Jul 2014 00:17:10 -0600 Subject: [PATCH 01/75] Testing out branch management. Nothing to see here. --- IfImHereDeleteMe.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 IfImHereDeleteMe.txt diff --git a/IfImHereDeleteMe.txt b/IfImHereDeleteMe.txt new file mode 100644 index 00000000000..6268d817ef6 --- /dev/null +++ b/IfImHereDeleteMe.txt @@ -0,0 +1 @@ +This is just because I'm a n00b at git. \ No newline at end of file From 75fb62d1a18c12d5ef06826657b7d7466ab785c4 Mon Sep 17 00:00:00 2001 From: John-Michael O'Brien Date: Fri, 11 Jul 2014 00:29:45 -0600 Subject: [PATCH 02/75] Delete IfImHereDeleteMe.txt --- IfImHereDeleteMe.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 IfImHereDeleteMe.txt diff --git a/IfImHereDeleteMe.txt b/IfImHereDeleteMe.txt deleted file mode 100644 index 6268d817ef6..00000000000 --- a/IfImHereDeleteMe.txt +++ /dev/null @@ -1 +0,0 @@ -This is just because I'm a n00b at git. \ No newline at end of file From b0db2ba3470456cf47df3a7e1fdabee63e35ca82 Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Fri, 25 Jul 2014 19:36:58 -0600 Subject: [PATCH 03/75] Added check for blank on name entry Since cancel just returns a blank this checks for that and doesn't raise an error. --- code/modules/client/preferences.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9a14b8fbff5..ab89dccd5d7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -943,11 +943,13 @@ datum/preferences if("input") switch(href_list["preference"]) if("name") - var/new_name = reject_bad_name( input(user, "Choose your character's name:", "Character Preference") as text|null ) - if(new_name) - real_name = new_name - else - user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." + var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null + if (raw_name) // Check to ensure that the user entered text (rather than cancel.) + var/new_name = reject_bad_name(raw_name) + if(new_name) + real_name = new_name + else + user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." if("age") var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null From 99f755b986a04bbaa62412c423a86eeb3c765626 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sat, 26 Jul 2014 17:55:30 +1200 Subject: [PATCH 04/75] Cargo train fixes - Adds overlay for cargo tug sprite - Fixes failure feedback when successfully loading items on the train - Stopped unnecessary loading failure feedback (like loading floors on trains, which will always fail) - Stopped "hit" message when relabeling with the hand labeler --- code/modules/vehicles/cargo_train.dm | 9 +++++++-- code/modules/vehicles/train.dm | 2 +- code/modules/vehicles/vehicle.dm | 2 ++ icons/obj/vehicles.dmi | Bin 10289 -> 10594 bytes 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index d38830e5e82..b6f91feec79 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -10,7 +10,7 @@ standing_mob = 1 load_item_visible = 1 load_offset_x = 0 - load_offset_y = 8 + load_offset_y = 7 var/car_limit = 3 //how many cars an engine can pull before performance degrades active_engines = 1 @@ -34,7 +34,7 @@ standing_mob = 1 load_item_visible = 1 load_offset_x = 0 - load_offset_y = 5 + load_offset_y = 4 //------------------------------------------- // Standard procs @@ -44,6 +44,8 @@ cell = new /obj/item/weapon/cell/high verbs -= /atom/movable/verb/pull key = new() + var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs + overlays += I /obj/vehicle/train/cargo/engine/Move() if(on && cell.charge < power_use) @@ -248,6 +250,9 @@ if(istype(load, /mob/living/carbon/human)) load.pixel_y += 4 + + if(load) + return 1 /obj/vehicle/train/cargo/engine/load(var/atom/movable/C) if(!ismob(C)) diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index b7a6706deae..deaed1130c2 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -80,7 +80,7 @@ return 1 /obj/vehicle/train/MouseDrop_T(var/atom/movable/C, mob/user as mob) - if(user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C)) + if(user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C) || !istype(C)) return if(istype(C,/obj/vehicle/train)) latch(C, user) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index b44f38122eb..5e5affac99a 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -58,6 +58,8 @@ return 0 /obj/vehicle/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/hand_labeler)) + return if(istype(W, /obj/item/weapon/screwdriver)) if(!locked) open = !open diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index de24172c3a92762c17da8ab9a134c5fa2a056ef2..e70275591fc4ea810bbdf564cc1ad63db9bbad72 100644 GIT binary patch literal 10594 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 bpsMmHsSvRVSf+W literal 10289 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 From 23811e7e5cd72c6120cd8d9321de17ec5a084a6c Mon Sep 17 00:00:00 2001 From: Walter0o Date: Sat, 26 Jul 2014 11:54:32 +0200 Subject: [PATCH 05/75] fixes nullpointer caused by broken organ list the mysterious broken list bug has struck again --- code/modules/organs/organ_internal.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 4ad6e328afa..4ed10047564 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -159,9 +159,9 @@ src.damage += 0.2 * process_accuracy //Damaged one shares the fun else - var/victim = pick(owner.internal_organs) - var/datum/organ/internal/O = owner.internal_organs[victim] - O.damage += 0.2 * process_accuracy + var/datum/organ/internal/O = pick(owner.internal_organs) + if(O) + O.damage += 0.2 * process_accuracy //Detox can heal small amounts of damage if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("anti_toxin")) From df6ac58d840ed5aaa8846a0e93d526cbaeb5d495 Mon Sep 17 00:00:00 2001 From: Walter0o Date: Sat, 26 Jul 2014 13:08:25 +0200 Subject: [PATCH 06/75] fixes nullpointer caused by broken organ list pt 2 more a prevention than a fix, but meh --- code/game/objects/items.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 935760efdb1..5a78b702d04 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -552,6 +552,8 @@ ) if(istype(M, /mob/living/carbon/human)) var/datum/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"] + if(!eyes) + return eyes.damage += rand(3,4) if(eyes.damage >= eyes.min_bruised_damage) if(M.stat != 2) @@ -631,4 +633,3 @@ var/obj/item/I = get_active_hand() if(I && !I.abstract) I.showoff(src) - From 0b7e858000ef95e3ac6246233365dfc1be5b500a Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Sat, 26 Jul 2014 16:19:14 -0600 Subject: [PATCH 07/75] Changes check to an isnull rather than a truth test This allows the client to detect the difference between a blank and someone pressing cancel. --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ab89dccd5d7..9fb9c1dc6cc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -944,7 +944,7 @@ datum/preferences switch(href_list["preference"]) if("name") var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null - if (raw_name) // Check to ensure that the user entered text (rather than cancel.) + if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) var/new_name = reject_bad_name(raw_name) if(new_name) real_name = new_name From bbc91507934c025355603583dbadeaad463a7854 Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:06:08 -0700 Subject: [PATCH 08/75] Updated body_parts_covered --- code/game/gamemodes/cult/cult_items.dm | 8 +++-- .../gamemodes/events/holidays/Christmas.dm | 1 + .../objects/items/weapons/cigs_lighters.dm | 1 + code/modules/clothing/clothing.dm | 11 +++--- code/modules/clothing/glasses/glasses.dm | 10 ++++++ code/modules/clothing/glasses/hud.dm | 5 +-- code/modules/clothing/head/collectable.dm | 15 +++++++- code/modules/clothing/head/helmet.dm | 2 ++ code/modules/clothing/head/jobs.dm | 4 +++ code/modules/clothing/head/misc.dm | 28 ++++++++++----- code/modules/clothing/head/misc_special.dm | 4 +++ code/modules/clothing/head/soft_caps.dm | 1 + code/modules/clothing/masks/boxing.dm | 2 ++ code/modules/clothing/masks/breath.dm | 1 + code/modules/clothing/masks/gasmask.dm | 4 +++ code/modules/clothing/masks/miscellaneous.dm | 8 ++++- code/modules/clothing/shoes/miscellaneous.dm | 2 ++ code/modules/clothing/spacesuits/alien.dm | 2 ++ .../clothing/spacesuits/miscellaneous.dm | 5 ++- code/modules/clothing/spacesuits/ninja.dm | 2 ++ code/modules/clothing/suits/alien.dm | 7 ++-- code/modules/clothing/suits/armor.dm | 6 ++-- code/modules/clothing/suits/bio.dm | 12 ++++--- code/modules/clothing/suits/jobs.dm | 19 ++++++----- code/modules/clothing/suits/labcoat.dm | 4 +-- code/modules/clothing/suits/miscellaneous.dm | 21 ++++++++---- code/modules/clothing/suits/utility.dm | 8 +++-- code/modules/clothing/suits/wiz_robe.dm | 8 +++-- code/modules/clothing/under/chameleon.dm | 5 +++ code/modules/clothing/under/jobs/civilian.dm | 1 + code/modules/clothing/under/jobs/medsci.dm | 4 ++- code/modules/clothing/under/jobs/security.dm | 7 ++-- code/modules/clothing/under/miscellaneous.dm | 15 ++++++-- code/modules/customitems/item_defines.dm | 34 ++++++++++++++----- .../living/carbon/alien/special/facehugger.dm | 1 + code/setup.dm | 32 +++++++++-------- 36 files changed, 220 insertions(+), 80 deletions(-) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index d55417c5f5e..1d2ae0061b7 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -35,6 +35,7 @@ desc = "A hood worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = FPRINT|TABLEPASS|HEADCOVERSEYES + body_parts_covered = HEAD|EYES armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -68,6 +69,7 @@ desc = "A helm worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 @@ -77,7 +79,7 @@ icon_state = "magusred" item_state = "magusred" flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -92,6 +94,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 + /obj/item/clothing/suit/space/cult name = "cult armour" icon_state = "cult_armour" @@ -101,4 +104,5 @@ allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 \ No newline at end of file + siemens_coefficient = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS \ No newline at end of file diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index 72d42318e60..9203fa15e9d 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -59,5 +59,6 @@ desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 flags = FPRINT|TABLEPASS + body_parts_covered = 0 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index a7c6056f44b..9858616386c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -71,6 +71,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/lastHolder = null var/smoketime = 300 var/chem_volume = 15 + body_parts_covered = 0 /obj/item/clothing/mask/cigarette/New() ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index f6681f9d22f..548f41d8ed4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -36,9 +36,9 @@ switch(target_species) if("Human", "Skrell") //humanoid bodytypes species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") - else + else species_restricted = list(target_species) - + if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) icon = sprite_sheets_obj[target_species] @@ -48,9 +48,9 @@ species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") if("Human") species_restricted = list("exclude","Skrell","Unathi","Tajaran","Diona","Vox") - else + else species_restricted = list(target_species) - + if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) icon = sprite_sheets_obj[target_species] @@ -188,6 +188,7 @@ BLIND // can't see anything icon = 'icons/obj/clothing/masks.dmi' body_parts_covered = HEAD slot_flags = SLOT_MASK + body_parts_covered = FACE|EYES sprite_sheets = list("Vox" = 'icons/mob/species/vox/masks.dmi') //Shoes @@ -211,6 +212,7 @@ BLIND // can't see anything name = "suit" var/fire_resist = T0C+100 flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS allowed = list(/obj/item/weapon/tank/emergency_oxygen) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_OCLOTHING @@ -230,6 +232,7 @@ BLIND // can't see anything permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|FACE|EYES cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 8ae0d2aa63c..712265bbb25 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -9,6 +9,7 @@ //var/darkness_view = 0//Base human is 2 //var/invisa_view = 0 var/prescription = 0 + body_parts_covered = EYES /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" @@ -42,12 +43,14 @@ desc = "Yarr." icon_state = "eyepatch" item_state = "eyepatch" + body_parts_covered = 0 /obj/item/clothing/glasses/monocle name = "monocle" desc = "Such a dapper eyepiece!" icon_state = "monocle" item_state = "headset" // lol + body_parts_covered = 0 /obj/item/clothing/glasses/material name = "Optical Material Scanner" @@ -63,6 +66,7 @@ icon_state = "glasses" item_state = "glasses" prescription = 1 + body_parts_covered = 0 /obj/item/clothing/glasses/regular/hipster name = "Prescription Glasses" @@ -75,12 +79,14 @@ name = "3D glasses" icon_state = "3d" item_state = "3d" + body_parts_covered = 0 /obj/item/clothing/glasses/gglasses name = "Green Glasses" desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." icon_state = "gglasses" item_state = "gglasses" + body_parts_covered = 0 /obj/item/clothing/glasses/sunglasses desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." @@ -111,12 +117,14 @@ src.up = !src.up src.flags |= GLASSESCOVERSEYES flags_inv |= HIDEEYES + body_parts_covered |= EYES icon_state = initial(icon_state) usr << "You flip \the [src] down to protect your eyes." else src.up = !src.up src.flags &= ~HEADCOVERSEYES flags_inv &= ~HIDEEYES + body_parts_covered &= ~EYES icon_state = "[initial(icon_state)]up" usr << "You push \the [src] up out of your face." @@ -193,12 +201,14 @@ desc = "A monocle thermal." icon_state = "thermoncle" flags = null //doesn't protect eyes because it's a monocle, duh + body_parts_covered = 0 /obj/item/clothing/glasses/thermal/eyepatch name = "Optical Thermal Eyepatch" desc = "An eyepatch with built-in thermal optics" icon_state = "eyepatch" item_state = "eyepatch" + body_parts_covered = 0 /obj/item/clothing/glasses/thermal/jensen name = "Optical Thermal Implants" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index f541c837e6a..1f252e4b28e 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -14,7 +14,7 @@ name = "Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." icon_state = "healthhud" - + body_parts_covered = 0 /obj/item/clothing/glasses/hud/health/process_hud(var/mob/M) @@ -32,7 +32,8 @@ name = "Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" - var/global/list/jobs[0] + body_parts_covered = 0 + var/global/list/jobs[0] /obj/item/clothing/glasses/hud/security/jensenshades name = "Augmented shades" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index c944fbd63b6..bf20b3e9528 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -15,50 +15,58 @@ name = "collectable slime cap!" desc = "It just latches right in place!" icon_state = "slime" + body_parts_covered = 0 /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" - icon_state = "chef" + icon_state = "hats" item_state = "chefhat" /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." icon_state = "paper" + body_parts_covered = 0 /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" item_state = "that" + body_parts_covered = 0 /obj/item/clothing/head/collectable/captain name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" item_state = "caphat" + body_parts_covered = 0 /obj/item/clothing/head/collectable/police name = "collectable police officer's hat" desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" + body_parts_covered = 0 /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A Collectable red Beret. It smells faintly of Garlic." icon_state = "beret" + body_parts_covered = 0 /obj/item/clothing/head/collectable/welding name = "collectable welding helmet" desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" item_state = "welding" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/slime name = "collectable slime hat" @@ -77,18 +85,21 @@ desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" item_state = "pirate" + body_parts_covered = 0 /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels.....a bit too realistic." icon_state = "kitty" item_state = "kitty" + body_parts_covered = 0 /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" + body_parts_covered = 0 /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" @@ -100,11 +111,13 @@ desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" + body_parts_covered = 0 /obj/item/clothing/head/collectable/HoS name = "collectable HoS hat" desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" icon_state = "hoscap" + body_parts_covered = 0 /obj/item/clothing/head/collectable/thunderdome name = "collectable Thunderdome helmet" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9b1bdc1e14d..ba795dc06f1 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -18,6 +18,7 @@ desc = "It's a special helmet issued to the Warden of a securiy force. Protects the head from impacts." icon_state = "policehelm" flags_inv = 0 + body_parts_covered = 0 /obj/item/clothing/head/helmet/riot name = "riot helmet" @@ -67,6 +68,7 @@ icon_state = "swathelm" item_state = "helmet" flags = FPRINT|TABLEPASS|HEADCOVERSEYES + armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 \ No newline at end of file diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 692cc90b637..83a34e5c9a7 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -25,9 +25,11 @@ icon_state = "capcap" flags = FPRINT|TABLEPASS flags_inv = 0 + body_parts_covered = 0 cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 + body_parts_covered = 0 //Chaplain /obj/item/clothing/head/chaplain_hood @@ -36,6 +38,7 @@ icon_state = "chaplain_hood" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR siemens_coefficient = 0.9 + body_parts_covered = HEAD|EYES //Chaplain /obj/item/clothing/head/nun_hood @@ -52,6 +55,7 @@ icon_state = "beret" flags = FPRINT | TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 //Security /obj/item/clothing/head/beret/sec diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 32f01a10c8e..cf5530b306a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -7,6 +7,7 @@ flags = FPRINT|TABLEPASS item_state = "centhat" siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/hairflower name = "hair flower pin" @@ -14,6 +15,7 @@ desc = "Smells nice." item_state = "hairflower" flags = FPRINT|TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/powdered_wig name = "powdered wig" @@ -28,18 +30,21 @@ item_state = "that" flags = FPRINT|TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/redcoat name = "redcoat's hat" icon_state = "redcoat" desc = "'I guess it's a redhead.'" flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/mailman name = "mailman's hat" icon_state = "mailman" desc = "'Right-on-time' mail service head wear." flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/plaguedoctorhat name = "plague doctor's hat" @@ -48,12 +53,14 @@ flags = FPRINT | TABLEPASS permeability_coefficient = 0.01 siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/hasturhood name = "hastur's hood" desc = "It's unspeakably stylish" icon_state = "hasturhood" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/nursehat name = "nurse's hat" @@ -61,6 +68,7 @@ icon_state = "nursehat" flags = FPRINT|TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/syndicatefake name = "red space-helmet replica" @@ -70,6 +78,7 @@ flags = FPRINT | TABLEPASS | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/cueball name = "cueball helmet" @@ -78,15 +87,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR item_state="cueball" flags_inv = 0 - -/obj/item/clothing/head/that - name = "sturdy top-hat" - desc = "It's an amish looking armored top hat." - icon_state = "tophat" - item_state = "that" - flags = FPRINT|TABLEPASS - flags_inv = 0 - + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/greenbandana name = "green bandana" @@ -95,6 +96,7 @@ item_state = "greenbandana" flags = FPRINT|TABLEPASS flags_inv = 0 + body_parts_covered = 0 /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -103,6 +105,7 @@ item_state = "cardborg_h" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/justice name = "justice hat" @@ -132,6 +135,7 @@ desc = "Wearing these makes you looks useless, and only good for your sex appeal." icon_state = "bunny" flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/flatcap name = "flat cap" @@ -145,12 +149,14 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" + body_parts_covered = 0 /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." icon_state = "hgpiratecap" item_state = "hgpiratecap" + body_parts_covered = 0 /obj/item/clothing/head/bandana name = "pirate bandana" @@ -164,6 +170,7 @@ icon_state = "bowler" item_state = "bowler" flags = FPRINT | TABLEPASS + body_parts_covered = 0 //stylish bs12 hats @@ -173,6 +180,7 @@ item_state = "bowler_hat" desc = "For the gentleman of distinction." flags = FPRINT|TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/beaverhat name = "beaver hat" @@ -226,6 +234,7 @@ item_state = "chickensuit" flags = FPRINT | TABLEPASS | BLOCKHAIR siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/bearpelt name = "bear pelt hat" @@ -243,3 +252,4 @@ flags = FPRINT | TABLEPASS | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 59d6bb36c37..f76819bc2e1 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -21,6 +21,7 @@ var/up = 0 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) + body_parts_covered = HEAD|FACE|EYES icon_action_button = "action_welding" siemens_coefficient = 0.9 w_class = 3 @@ -62,6 +63,7 @@ var/status = 0 var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage var/processing = 0 //I dont think this is used anywhere. + body_parts_covered = EYES /obj/item/clothing/head/cakehat/process() if(!onfire) @@ -123,6 +125,7 @@ item_color = "pumpkin" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|EYES var/brightness_on = 2 //luminosity when on var/on = 0 w_class = 3 @@ -158,6 +161,7 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" flags = FPRINT | TABLEPASS + body_parts_covered = 0 var/icon/mob var/icon/mob2 siemens_coefficient = 1.5 diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 65f265f23f4..320791888ec 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -7,6 +7,7 @@ item_color = "cargo" var/flipped = 0 siemens_coefficient = 0.9 + body_parts_covered = 0 dropped() src.icon_state = "[item_color]soft" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 7a94a7bc943..0a3b8e08b72 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -5,6 +5,7 @@ item_state = "balaclava" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = FACE w_class = 2 /obj/item/clothing/mask/balaclava/tactical @@ -23,6 +24,7 @@ item_state = "luchag" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = HEAD|FACE w_class = 2 siemens_coefficient = 3.0 diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index f4609c4ed51..220f1daf7c6 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -4,6 +4,7 @@ icon_state = "breath" item_state = "breath" flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKINTERNALS + body_parts_covered = 0 w_class = 2 gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 2b4d2548090..ac3638d28d6 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -4,6 +4,7 @@ icon_state = "gas_alt" flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS flags_inv = HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = FACE|EYES w_class = 3.0 item_state = "gas_alt" gas_transfer_coefficient = 0.01 @@ -18,12 +19,14 @@ icon_state = "plaguedoctor" item_state = "gas_mask" armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0) + body_parts_covered = HEAD|FACE /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" desc = "A close-fitting tactical mask that can be connected to an air supply." icon_state = "swat" siemens_coefficient = 0.7 + body_parts_covered = FACE|EYES /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" @@ -70,6 +73,7 @@ desc = "A mask used when acting as a monkey." icon_state = "monkeymask" item_state = "monkeymask" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 57420bbfe0f..8cc12fb172f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -4,6 +4,7 @@ icon_state = "muzzle" item_state = "muzzle" flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH + body_parts_covered = 0 w_class = 2 gas_transfer_coefficient = 0.90 @@ -23,6 +24,7 @@ item_state = "sterile" w_class = 2 flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH + body_parts_covered = 0 gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0) @@ -33,6 +35,7 @@ icon_state = "fake-moustache" flags = FPRINT|TABLEPASS flags_inv = HIDEFACE + body_parts_covered = 0 /obj/item/clothing/mask/snorkel name = "Snorkel" @@ -40,6 +43,7 @@ icon_state = "snorkel" flags = FPRINT|TABLEPASS flags_inv = HIDEFACE + body_parts_covered = 0 //scarves (fit in in mask slot) @@ -89,6 +93,7 @@ flags_inv = HIDEFACE w_class = 2 siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/mask/horsehead name = "horse head mask" @@ -97,6 +102,7 @@ item_state = "horsehead" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = HEAD|FACE|EYES w_class = 2 var/voicechange = 0 - siemens_coefficient = 0.9 + siemens_coefficient = 0.9 \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 766cc96f05a..3f3fbbd8776 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -56,11 +56,13 @@ name = "sandals" icon_state = "wizard" species_restricted = null + body_parts_covered = 0 /obj/item/clothing/shoes/sandal/marisa desc = "A pair of magic, black shoes." name = "magic shoes" icon_state = "black" + body_parts_covered = FEET /obj/item/clothing/shoes/galoshes desc = "Rubber boots" diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 3719f0c7dba..1b5d33c100f 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -120,6 +120,7 @@ icon_state = "vox-carapace" item_state = "vox-carapace" desc = "A glowing visor, perhaps stolen from a depressed Cylon." + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS /obj/item/clothing/suit/space/vox/carapace name = "alien carapace armour" @@ -161,6 +162,7 @@ icon_state = "vox-casual-1" item_color = "vox-casual-1" item_state = "vox-casual-1" + body_parts_covered = LEGS /obj/item/clothing/under/vox/vox_robes name = "alien robes" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index cdecadd6c81..9aa180912c4 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -22,7 +22,7 @@ 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) slowdown = 1.5 armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 @@ -50,6 +50,7 @@ desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE + body_parts_covered = HEAD /obj/item/clothing/suit/space/santa name = "Santa's suit" @@ -69,6 +70,7 @@ item_state = "pirate" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE + body_parts_covered = 0 siemens_coefficient = 0.9 /obj/item/clothing/suit/space/pirate @@ -81,5 +83,6 @@ slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.9 + body_parts_covered = UPPER_TORSO|ARMS diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm index c51594e0e69..f10e55168f0 100644 --- a/code/modules/clothing/spacesuits/ninja.dm +++ b/code/modules/clothing/spacesuits/ninja.dm @@ -7,6 +7,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25) siemens_coefficient = 0.2 species_restricted = null + body_parts_covered = HEAD|FACE /obj/item/clothing/suit/space/space_ninja name = "ninja suit" @@ -18,6 +19,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.2 species_restricted = null //Workaround for spawning alien ninja without internals. + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Important parts of the suit. var/mob/living/carbon/affecting = null//The wearer. diff --git a/code/modules/clothing/suits/alien.dm b/code/modules/clothing/suits/alien.dm index 539efcaacc9..54141e99948 100644 --- a/code/modules/clothing/suits/alien.dm +++ b/code/modules/clothing/suits/alien.dm @@ -5,7 +5,7 @@ desc = "A traditional Unathi garment." icon_state = "robe-unathi" item_state = "robe-unathi" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/suit/unathi/mantle name = "hide mantle" @@ -21,9 +21,10 @@ desc = "A traditional Zhan-Khazan garment." icon_state = "zhan_furs" item_state = "zhan_furs" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS /obj/item/clothing/head/tajaran/scarf name = "headscarf" desc = "A scarf of coarse fabric. Seems to have ear-holes." - icon_state = "zhan_scarf" \ No newline at end of file + icon_state = "zhan_scarf" + body_parts_covered = HEAD|FACE \ No newline at end of file diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 39ff06677cc..a51fc8ab850 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -31,6 +31,7 @@ desc = "An armoured jacket with silver rank pips and livery." icon_state = "warden_jacket" item_state = "armor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/armor/riot @@ -38,7 +39,7 @@ desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot" item_state = "swat_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS slowdown = 1 armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT @@ -71,7 +72,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + 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 armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0) @@ -88,6 +89,7 @@ item_state = "det_suit" blood_overlay_type = "coat" flags_inv = 0 + body_parts_covered = UPPER_TORSO|ARMS /obj/item/clothing/suit/armor/det_suit diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 64a989d6a28..e2c6ee65fa7 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -7,6 +7,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + body_parts_covered = HEAD|FACE|EYES siemens_coefficient = 0.9 /obj/item/clothing/suit/bio_suit @@ -29,10 +30,11 @@ //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general icon_state = "bio_general" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/suit/bio_suit/general icon_state = "bio_general" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Virology biosuit, green stripe /obj/item/clothing/head/bio_hood/virology @@ -40,7 +42,7 @@ /obj/item/clothing/suit/bio_suit/virology icon_state = "bio_virology" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security @@ -48,7 +50,7 @@ /obj/item/clothing/suit/bio_suit/security icon_state = "bio_security" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Janitor's biosuit, grey with purple arms /obj/item/clothing/head/bio_hood/janitor @@ -56,6 +58,7 @@ /obj/item/clothing/suit/bio_suit/janitor icon_state = "bio_janitor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Scientist's biosuit, white with a pink-ish hue @@ -64,11 +67,12 @@ /obj/item/clothing/suit/bio_suit/scientist icon_state = "bio_scientist" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //CMO's biosuit, blue stripe /obj/item/clothing/suit/bio_suit/cmo icon_state = "bio_cmo" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS /obj/item/clothing/head/bio_hood/cmo icon_state = "bio_cmo" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 8ad2e7751eb..547464a99e9 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -9,7 +9,7 @@ icon_state = "apron" item_state = "apron" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = 0 allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') //Captain @@ -18,7 +18,7 @@ desc = "Worn by a Captain to show their class." icon_state = "captunic" item_state = "bio_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS flags_inv = HIDEJUMPSUIT sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -36,7 +36,7 @@ desc = "This suit says to you 'hush'!" icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') //Chaplain @@ -45,7 +45,7 @@ desc = "Maximum piety in this star system." icon_state = "nun" item_state = "nun" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -68,7 +68,7 @@ icon_state = "apronchef" item_state = "apronchef" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = 0 //Detective /obj/item/clothing/suit/storage/det_suit @@ -77,7 +77,7 @@ icon_state = "detective" item_state = "det_suit" blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS 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/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -90,7 +90,7 @@ name = "jacket" desc = "A forensics technician jacket." item_state = "det_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|ARMS 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/device/detective_scanner,/obj/item/device/taperecorder) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) @@ -114,6 +114,7 @@ allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, \ /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency_oxygen, \ /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering) + body_parts_covered = UPPER_TORSO sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -172,6 +173,7 @@ blood_overlay_type = "armor" allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen) + body_parts_covered = UPPER_TORSO|ARMS verb/toggle() set name = "Toggle Jacket Buttons" @@ -196,4 +198,5 @@ desc = "They suspend the illusion of the mime's play." icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here \ No newline at end of file + blood_overlay_type = "armor" //it's the less thing that I can put here + body_parts_covered = 0 \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 4cb25f57cf9..c230d7defaa 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -4,7 +4,7 @@ icon_state = "labcoat_open" item_state = "labcoat" blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|ARMS allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -91,7 +91,7 @@ src.icon_state = "labgreen_open" usr << "You unbutton the labcoat." else - usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are." + usr << "You attempt to button-up the velcro on your [src], before promptly realising how silly you are." return usr.update_inv_wear_suit() //so our overlays update diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c8abf979756..09726bb3d36 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -14,7 +14,7 @@ icon_state = "bluetag" item_state = "bluetag" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = UPPER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/bluetag) siemens_coefficient = 3.0 @@ -24,7 +24,7 @@ icon_state = "redtag" item_state = "redtag" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = UPPER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/redtag) siemens_coefficient = 3.0 @@ -37,6 +37,7 @@ icon_state = "pirate" item_state = "pirate" flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|ARMS /obj/item/clothing/suit/hgpirate @@ -46,6 +47,7 @@ item_state = "hgpirate" flags = FPRINT | TABLEPASS flags_inv = HIDEJUMPSUIT + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/cyborg_suit @@ -81,6 +83,7 @@ item_state = "justice" flags = FPRINT | TABLEPASS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/judgerobe @@ -120,14 +123,14 @@ flags = FPRINT | TABLEPASS 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 /obj/item/clothing/suit/hastur name = "Hastur's Robes" desc = "Robes not meant to be worn by man" icon_state = "hastur" item_state = "hastur" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -136,7 +139,7 @@ desc = "Have YOU killed a xenos today?" icon_state = "imperium_monk" item_state = "imperium_monk" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT @@ -186,7 +189,7 @@ desc = "A suit that completely restrains the wearer." icon_state = "straight_jacket" item_state = "straight_jacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL /obj/item/clothing/suit/ianshirt @@ -194,6 +197,7 @@ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." icon_state = "ianshirt" item_state = "ianshirt" + body_parts_covered = UPPER_TORSO|ARMS //Blue suit jacket toggle /obj/item/clothing/suit/suit/verb/toggle() @@ -258,6 +262,8 @@ flags = FPRINT | TABLEPASS //stripper +/obj/item/clothing/under/stripper + body_parts_covered = 0 /obj/item/clothing/under/stripper/stripper_pink name = "pink swimsuit" @@ -299,12 +305,13 @@ desc = "A suit made out of chitinous alien hide." icon_state = "xenos" item_state = "xenos_helm" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 2.0 //swimsuit /obj/item/clothing/under/swimsuit/ siemens_coefficient = 1 + body_parts_covered = 0 /obj/item/clothing/under/swimsuit/black name = "black swimsuit" diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 033ce884191..91153fee0fa 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -50,6 +50,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + body_parts_covered = HEAD|FACE|EYES siemens_coefficient = 0 @@ -62,7 +63,6 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 2 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT|HIDETAIL @@ -74,12 +74,13 @@ /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuitsec" item_state = "bombsuitsec" - + body_parts_covered = HEAD /obj/item/clothing/suit/bomb_suit/security icon_state = "bombsuitsec" item_state = "bombsuitsec" allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS /* * Radiation protection @@ -89,6 +90,7 @@ icon_state = "rad" desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) @@ -100,7 +102,7 @@ w_class = 4//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas) slowdown = 1.5 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index d168edc4c1c..03240b2f3c2 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -4,6 +4,7 @@ icon_state = "wizard" //Not given any special protective value since the magic robes are full-body protection --NEO siemens_coefficient = 0.8 + body_parts_covered = 0 /obj/item/clothing/head/wizard/red name = "red wizard hat" @@ -15,6 +16,7 @@ name = "wizard hat" desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." icon_state = "wizard-fake" + body_parts_covered = HEAD|FACE /obj/item/clothing/head/wizard/marisa name = "Witch Hat" @@ -28,6 +30,7 @@ icon_state = "magus" item_state = "magus" siemens_coefficient = 0.8 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/wizard/amp name = "psychic amplifier" @@ -48,7 +51,6 @@ item_state = "wizrobe" gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE permeability_coefficient = 0.01 - body_parts_covered = FULL_BODY //It's magic, I ain't gotta explain shit. --NEO armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20) allowed = list(/obj/item/weapon/teleportation_scroll) flags_inv = HIDEJUMPSUIT @@ -72,12 +74,14 @@ desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusblue" item_state = "magusblue" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/wizrobe/magusred name = "Magus Robe" desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusred" item_state = "magusred" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/wizrobe/psypurple name = "purple robes" @@ -90,13 +94,13 @@ desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." icon_state = "gentlecoat" item_state = "gentlecoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/wizrobe/fake name = "wizard robe" desc = "A rather dull, blue robe meant to mimick real wizard robes." icon_state = "wizard-fake" item_state = "wizrobe" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 1.0 diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index fe9da8744d0..1cb79699c99 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -48,6 +48,7 @@ icon_state = A.icon_state item_state = A.item_state item_color = A.item_color + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_w_uniform() //so our overlays update. @@ -62,6 +63,7 @@ item_color = "grey" desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." origin_tech = "syndicate=3" + body_parts_covered = 0 var/list/clothing_choices = list() New() @@ -101,6 +103,7 @@ item_state = A.item_state item_color = A.item_color flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_head() //so our overlays update. @@ -154,6 +157,7 @@ item_state = A.item_state item_color = A.item_color flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_wear_suit() //so our overlays update. @@ -356,6 +360,7 @@ icon_state = A.icon_state item_state = A.item_state flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_wear_mask() //so our overlays update. diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 0798c11bf56..dc6149562d8 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -33,6 +33,7 @@ item_state = "lb_suit" item_color = "cargo" flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/chaplain diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 3d7db9613da..17b85a02e3a 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -26,7 +26,7 @@ item_color = "dress_rd" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) flags = FPRINT | TABLEPASS - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." @@ -87,6 +87,7 @@ item_color = "nursesuit" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/nurse desc = "A dress commonly worn by the nursing staff in the medical department." @@ -96,6 +97,7 @@ item_color = "nurse" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/orderly desc = "A white suit to be worn by orderly people who love orderly things." diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 5b37f507194..93db4210358 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -36,6 +36,7 @@ item_color = "dispatch" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS siemens_coefficient = 0.9 /obj/item/clothing/under/rank/security2 @@ -105,6 +106,7 @@ allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/det_hat/black icon_state = "detective2" @@ -134,8 +136,8 @@ icon_state = "hoscap" flags = FPRINT | TABLEPASS | HEADCOVERSEYES armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) - flags_inv = 0 flags_inv = HIDEEARS + body_parts_covered = 0 siemens_coefficient = 0.8 /obj/item/clothing/suit/armor/hos @@ -171,4 +173,5 @@ icon_state = "jensencoat" item_state = "jensencoat" flags_inv = 0 - siemens_coefficient = 0.6 \ No newline at end of file + siemens_coefficient = 0.6 + body_parts_covered = UPPER_TORSO|ARMS \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 3e4cf1a3d1b..094d76b32c7 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -54,6 +54,7 @@ icon_state = "sexyclown" item_state = "sexyclown" item_color = "sexyclown" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/vice name = "vice officer's jumpsuit" @@ -137,6 +138,7 @@ icon_state = "psysuit" item_state = "psysuit" item_color = "psysuit" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS /obj/item/clothing/under/gentlesuit name = "Gentlemans Suit" @@ -200,7 +202,7 @@ icon_state = "schoolgirl" item_state = "schoolgirl" item_color = "schoolgirl" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/overalls name = "laborer's overalls" @@ -215,6 +217,7 @@ icon_state = "pirate" item_state = "pirate" item_color = "pirate" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/soviet name = "soviet uniform" @@ -252,9 +255,11 @@ icon_state = "gladiator" item_state = "gladiator" item_color = "gladiator" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = LOWER_TORSO //dress +/obj/item/clothing/under/dress/ + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/dress/dress_fire name = "flame dress" @@ -298,18 +303,21 @@ desc = "Feminine fashion for the style concious captain." icon_state = "dress_cap" item_color = "dress_cap" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/dress_hop name = "head of personnel dress uniform" desc = "Feminine fashion for the style concious HoP." icon_state = "dress_hop" item_color = "dress_hop" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/dress_hr name = "human resources director uniform" desc = "Superior class for the nosy H.R. Director." icon_state = "huresource" item_color = "huresource" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/plaid_blue name = "blue plaid skirt" @@ -330,6 +338,8 @@ item_color = "plaid_purple" //wedding stuff +/obj/item/clothing/under/wedding/ + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/wedding/bride_orange name = "orange wedding dress" @@ -365,6 +375,7 @@ icon_state = "bride_white" item_color = "bride_white" flags_inv = HIDESHOES + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/sundress name = "sundress" diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 9c820db0260..cba03829110 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -676,18 +676,12 @@ //////////// Hats //////////// - -/obj/item/clothing/head/fluff/kaine_kalim_1 - name = "Formal Medical Cap" - desc = "An unusually sterile and folded cap. It seems to bare the Nanotrasen logo." - icon = 'icons/obj/custom_items.dmi' - icon_state = "kainecap" - /obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard name = "\improper SWAT hat" desc = "A black hat. The inside has the words, \"Lieutenant James Girard, LPD SWAT Team Four.\"" icon = 'icons/obj/custom_items.dmi' icon_state = "swatcap" + body_parts_covered = 0 /obj/item/clothing/head/welding/fluff/alice_mccrea_1 //madmalicemccrea: Alice McCrea name = "flame decal welding helmet" @@ -712,6 +706,10 @@ desc = "Hey, I think we're missing a hazard vest..." icon = 'icons/obj/custom_items.dmi' icon_state = "taryn_kifer_1" + body_parts_covered = 0 + +/obj/item/clothing/head/fluff + body_parts_covered = 0 /obj/item/clothing/head/fluff/edvin_telephosphor_1 //foolamancer: Edvin Telephosphor name = "Edvin's Hat" @@ -731,6 +729,13 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "brucehachert" +/obj/item/clothing/head/fluff/kaine_kalim_1 + name = "Formal Medical Cap" + desc = "An unusually sterile and folded cap. It seems to bare the Nanotrasen logo." + icon = 'icons/obj/custom_items.dmi' + icon_state = "kainecap" + + /obj/item/clothing/head/beret/fluff/marine_beret //Von2531: Jack Washington name = "colonial marine beret" desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front." @@ -753,6 +758,7 @@ desc = "A labcoat with a few markings denoting it as the labcoat of roboticist." icon = 'icons/obj/custom_items.dmi' icon_state = "aeneasrinil" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber name = "pink labcoat" @@ -781,7 +787,7 @@ icon = 'icons/obj/clothing/suits.dmi' icon_state = "mantle-unathi" item_state = "mantle-unathi" - body_parts_covered = UPPER_TORSO + body_parts_covered = 0 /////////////////////////////// 50_n00b - R.A.N.G.E.'s blue dress ////////////////////////// @@ -791,6 +797,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "br_dress" item_state = "br_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS //////////////////////////////// Broseph Stylin - Lombardi's Jacket /////////////////////////// @@ -800,6 +807,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "lombardi_jacket" item_state = "lombardi_jacket" + body_parts_covered = UPPER_TORSO|ARMS verb/toggle() set name = "Toggle Jacket Buttons" @@ -812,7 +820,7 @@ switch(icon_state) if("lombardi_jacket") src.icon_state = "lombardi_jacket_open" - usr << "You unbutton up the jacket." + usr << "You unbutton the jacket." if("lombardi_jacket_open") src.icon_state = "lombardi_jacket" usr << "You button up the jacket." @@ -852,6 +860,7 @@ icon_state = "lilith_uniform" item_state = "lilith_uniform" item_color = "lilith_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/fluff/ana_issek_1 //suethecake: Ana Issek name = "retired uniform" @@ -860,6 +869,7 @@ icon_state = "ana_uniform" item_state = "ana_uniform" item_color = "ana_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/fluff/olddressuniform //desiderium: Momiji Inubashiri name = "retired dress uniform" @@ -893,6 +903,7 @@ icon_state = "tian_dress" item_state = "tian_dress" item_color = "tian_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari name = "classy bartender uniform" @@ -978,6 +989,7 @@ icon_state = "lillian_dress" item_state = "lillian_dress" item_color = "lillian_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO ////////////// Accessories ///// @@ -1022,6 +1034,7 @@ icon = 'icons/obj/custom_items.dmi' item_state = "head_m" icon_state = "head_m" + body_parts_covered = FACE|EYES ////// Small locket - Altair An-Nasaqan - Serithi @@ -1100,6 +1113,7 @@ flags = FPRINT|TABLEPASS w_class = 2 slot_flags = SLOT_MASK + body_parts_covered = 0 //////////// Shoes //////////// @@ -1142,6 +1156,7 @@ icon_state = "medical_short" item_state = "medical_short" item_color = "medical_short" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/suit/storage/labcoat/fluff/red name = "red labcoat" @@ -1242,6 +1257,7 @@ icon_state = "mai_yang" item_state = "mai_yang" item_color = "mai_yang" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/fluff/sakura_hokkaido_kimono name = "Sakura Kimono" diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 48c16a99839..f68c2a95eea 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -16,6 +16,7 @@ var/const/MAX_ACTIVE_TIME = 400 item_state = "facehugger" w_class = 1 //note: can be picked up by aliens unlike most other items of w_class below 4 flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | MASKINTERNALS + body_parts_covered = FACE|EYES throw_range = 5 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case diff --git a/code/setup.dm b/code/setup.dm index 13974e022e7..2020e251198 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -263,21 +263,23 @@ var/MAX_EXPLOSION_RANGE = 14 // bitflags for clothing parts #define HEAD 1 -#define UPPER_TORSO 2 -#define LOWER_TORSO 4 -#define LEG_LEFT 8 -#define LEG_RIGHT 16 -#define LEGS 24 -#define FOOT_LEFT 32 -#define FOOT_RIGHT 64 -#define FEET 96 -#define ARM_LEFT 128 -#define ARM_RIGHT 256 -#define ARMS 384 -#define HAND_LEFT 512 -#define HAND_RIGHT 1024 -#define HANDS 1536 -#define FULL_BODY 2047 +#define FACE 2 +#define EYES 4 +#define UPPER_TORSO 8 +#define LOWER_TORSO 16 +#define LEG_LEFT 32 +#define LEG_RIGHT 64 +#define LEGS 96 +#define FOOT_LEFT 128 +#define FOOT_RIGHT 256 +#define FEET 384 +#define ARM_LEFT 512 +#define ARM_RIGHT 1024 +#define ARMS 1536 +#define HAND_LEFT 2048 +#define HAND_RIGHT 4096 +#define HANDS 6144 +#define FULL_BODY 8191 // bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. // Used with human/proc/get_heat_protection() and human/proc/get_cold_protection() From 425dfd2a6ee61e0df263f4c08d71a5675f995c1d Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:07:34 -0700 Subject: [PATCH 09/75] Fixed issue with recognizing covered jumpsuit and gloves --- code/modules/detectivework/detective_work.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index bb650b02153..6650046512f 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -19,13 +19,13 @@ atom/proc/add_fibers(mob/living/carbon/human/M) if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & 32)) + if(M.wear_suit.body_parts_covered & ~FULL_BODY && (M.wear_suit.body_parts_covered & ~UPPER_TORSO || M.wear_suit.body_parts_covered & ~LOWER_TORSO || M.wear_suit.body_parts_covered & ~ARMS || M.wear_suit.body_parts_covered & ~LEGS)) if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & 64)) + if(M.wear_suit.body_parts_covered & ~HANDS) if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) From 0528675846a4fa8e9da7f78f5fa52afd1f424400 Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:08:55 -0700 Subject: [PATCH 10/75] Added dynamic flavour text, where covered bodyparts' flavour isn't displayed --- code/__HELPERS/text.dm | 13 +- code/modules/client/preferences.dm | 194 +++++++++++------- code/modules/client/preferences_savefile.dm | 4 +- code/modules/mob/living/carbon/human/emote.dm | 36 +++- code/modules/mob/living/carbon/human/human.dm | 71 +++++++ .../mob/living/carbon/human/human_defines.dm | 2 + 6 files changed, 242 insertions(+), 78 deletions(-) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index af77addeab0..d29bb84bc98 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -303,4 +303,15 @@ proc/checkhtml(var/t) var/new_text = "" for(var/i = length(text); i > 0; i--) new_text += copytext(text, i, i+1) - return new_text + return new_text + +//Used in preferences' SetFlavorText and human's set_flavor verb +//Previews a string of len or less length +proc/TextPreview(var/string,var/len=40) + if(lentext(string) <= len) + if(!lentext(string)) + return "\[...\]" + else + return string + else + return "[copytext(string, 1, 37)]..." \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 448662c4516..cc532664a1d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -107,7 +107,8 @@ datum/preferences var/list/organ_data = list() var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" - var/flavor_text = "" + var/list/flavor_texts = list() + var/med_record = "" var/sec_record = "" var/gen_record = "" @@ -386,14 +387,7 @@ datum/preferences dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])
" - dat += "Set Flavor Text
" - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) - dat += "\[...\]" - else - dat += "[flavor_text]" - else - dat += "[copytext(flavor_text, 1, 37)]...
" + dat += "Set Flavor Text
" dat += "
" dat += "
Hair
" @@ -558,24 +552,15 @@ datum/preferences HTML += "Medical Records
" - if(lentext(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." + HTML += TextPreview(med_record,40) HTML += "

Employment Records
" - if(lentext(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." + HTML += TextPreview(gen_record,40) HTML += "

Security Records
" - if(lentext(sec_record) <= 40) - HTML += "[sec_record]
" - else - HTML += "[copytext(sec_record, 1, 37)]...
" + HTML += TextPreview(sec_record,40) HTML += "
" HTML += "\[Done\]" @@ -603,7 +588,44 @@ datum/preferences user << browse(HTML, "window=antagoptions") return - + proc/SetFlavorText(mob/user) + var/HTML = "" + HTML += "
" + HTML += "Set Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + user << browse(null, "window=preferences") + user << browse(HTML, "window=flavor_text;size=430x300") + return proc/GetPlayerAltTitle(datum/job/job) return player_alt_titles.Find(job.title) > 0 \ @@ -805,6 +827,72 @@ datum/preferences SetSkills(user) return 1 + else if (href_list["preference"] == "loadout") + + if(href_list["task"] == "input") + + var/list/valid_gear_choices = list() + + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) + continue + valid_gear_choices += gear_name + + var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices + + if(choice && gear_datums[choice]) + + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + + var/datum/gear/C = gear_datums[choice] + total_cost += C.cost + if(C && total_cost <= MAX_GEAR_COST) + gear += choice + user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + else + user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + + else if(href_list["task"] == "remove") + var/to_remove = href_list["gear"] + if(!to_remove) return + for(var/gear_name in gear) + if(gear_name == to_remove) + gear -= gear_name + break + + else if(href_list["preference"] == "flavor_text") + switch(href_list["task"]) + if("open") + SetFlavorText(user) + return + if("done") + user << browse(null, "window=flavor_text") + ShowChoices(user) + return + if("general") + var/msg = input(usr,"Give a general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + else + var/msg = input(usr,"Set the flavor text for your [href_list["task"]].","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + SetFlavorText(user) + return + else if(href_list["preference"] == "records") if(text2num(href_list["record"]) >= 1) SetRecords(user) @@ -857,48 +945,6 @@ datum/preferences ShowChoices(user) return 1 - else if (href_list["preference"] == "loadout") - - if(href_list["task"] == "input") - - var/list/valid_gear_choices = list() - - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) - continue - valid_gear_choices += gear_name - - var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices - - if(choice && gear_datums[choice]) - - var/total_cost = 0 - - if(isnull(gear) || !islist(gear)) gear = list() - - if(gear && gear.len) - for(var/gear_name in gear) - if(gear_datums[gear_name]) - var/datum/gear/G = gear_datums[gear_name] - total_cost += G.cost - - var/datum/gear/C = gear_datums[choice] - total_cost += C.cost - if(C && total_cost <= MAX_GEAR_COST) - gear += choice - user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." - else - user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." - - else if(href_list["task"] == "remove") - var/to_remove = href_list["gear"] - if(!to_remove) return - for(var/gear_name in gear) - if(gear_name == to_remove) - gear -= gear_name - break - switch(href_list["task"]) if("random") switch(href_list["preference"]) @@ -1159,15 +1205,6 @@ datum/preferences if(new_relation) nanotrasen_relation = new_relation - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - flavor_text = msg - if("disabilities") if(text2num(href_list["disabilities"]) >= -1) if(text2num(href_list["disabilities"]) >= 0) @@ -1363,7 +1400,16 @@ datum/preferences if(character.dna) character.dna.real_name = character.real_name - character.flavor_text = flavor_text + character.flavor_texts["general"] = flavor_texts["general"] + character.flavor_texts["head"] = flavor_texts["head"] + character.flavor_texts["face"] = flavor_texts["face"] + character.flavor_texts["eyes"] = flavor_texts["eyes"] + character.flavor_texts["torso"] = flavor_texts["torso"] + character.flavor_texts["arms"] = flavor_texts["arms"] + character.flavor_texts["hands"] = flavor_texts["hands"] + character.flavor_texts["legs"] = flavor_texts["legs"] + character.flavor_texts["feet"] = flavor_texts["feet"] + character.med_record = med_record character.sec_record = sec_record character.gen_record = gen_record diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ef3b8e5c035..c61f87b23ff 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -144,7 +144,7 @@ S["job_engsec_low"] >> job_engsec_low //Miscellaneous - S["flavor_text"] >> flavor_text + S["flavor_texts"] >> flavor_texts S["med_record"] >> med_record S["sec_record"] >> sec_record S["gen_record"] >> gen_record @@ -265,7 +265,7 @@ S["job_engsec_low"] << job_engsec_low //Miscellaneous - S["flavor_text"] << flavor_text + S["flavor_texts"] << flavor_texts S["med_record"] << med_record S["sec_record"] << sec_record S["gen_record"] << gen_record diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d4050c06b85..75eff694fac 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -584,4 +584,38 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = copytext(sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text), 1) + var/HTML = "" + HTML += "
" + HTML += "Update Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + src << browse(HTML, "window=flavor_changes;size=430x300") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fca5ffa0655..14d17bfd2aa 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -74,6 +74,18 @@ prev_gender = gender // Debug for plural genders make_blood() + /* + flavor_texts["general"] = flavor_general + flavor_texts["head"] = flavor_head + flavor_texts["face"] = flavor_face + flavor_texts["eyes"] = flavor_eyes + flavor_texts["torso"] = flavor_torso + flavor_texts["arms"] = flavor_arms + flavor_texts["hands"] = flavor_hands + flavor_texts["legs"] = flavor_legs + flavor_texts["feet"] = flavor_feet*/ + + /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) if ((!( yes ) || now_pushing)) return @@ -827,6 +839,27 @@ if (href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) M.examine() + + if (href_list["flavor_change"]) + switch(href_list["flavor_change"]) + if("done") + src << browse(null, "window=flavor_changes") + return + if("general") + var/msg = input(usr,"Update the general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + return + else + var/msg = input(usr,"Update the flavor text for your [href_list["flavor_change"]].","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + set_flavor() + return ..() return @@ -1503,3 +1536,41 @@ return H << "\red Your nose begins to bleed..." H.drip(1) + +/mob/living/carbon/human/print_flavor_text() + var/list/equipment = list(src.head,src.wear_mask,src.glasses,src.w_uniform,src.wear_suit,src.gloves,src.shoes) + var/head_exposed = 1 + var/face_exposed = 1 + var/eyes_exposed = 1 + var/torso_exposed = 1 + var/arms_exposed = 1 + var/legs_exposed = 1 + var/hands_exposed = 1 + var/feet_exposed = 1 + + for(var/obj/item/clothing/C in equipment) + if(C.body_parts_covered & HEAD) + head_exposed = 0 + if(C.body_parts_covered & FACE) + face_exposed = 0 + if(C.body_parts_covered & EYES) + eyes_exposed = 0 + if(C.body_parts_covered & UPPER_TORSO) + torso_exposed = 0 + if(C.body_parts_covered & ARMS) + arms_exposed = 0 + if(C.body_parts_covered & HANDS) + hands_exposed = 0 + if(C.body_parts_covered & LEGS) + legs_exposed = 0 + if(C.body_parts_covered & FEET) + feet_exposed = 0 + + flavor_text = flavor_texts["general"] + flavor_text += "\n\n" + for (var/T in flavor_texts) + if(flavor_texts[T] != "") + if((T == "head" && head_exposed) || (T == "face" && face_exposed) || (T == "eyes" && eyes_exposed) || (T == "torso" && torso_exposed) || (T == "arms" && arms_exposed) || (T == "hands" && hands_exposed) || (T == "legs" && legs_exposed) || (T == "feet" && feet_exposed)) + flavor_text += flavor_texts[T] + flavor_text += "\n\n" + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d5db0fdbc7e..818b9a9e7e0 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -70,3 +70,5 @@ var/mob/remoteview_target = null var/hand_blood_color + + var/list/flavor_texts = list() \ No newline at end of file From eb64769734fc5c4188075a4ccdf1e8d8f1058e24 Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:41:03 -0700 Subject: [PATCH 11/75] Cleaned up mistake implementing dynamic flavour text --- code/modules/client/preferences.dm | 42 +++++++++++++++++++ code/modules/mob/living/carbon/human/human.dm | 14 +------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 11dfcb9630c..14795064307 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -945,6 +945,48 @@ datum/preferences ShowChoices(user) return 1 + else if (href_list["preference"] == "loadout") + + if(href_list["task"] == "input") + + var/list/valid_gear_choices = list() + + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) + continue + valid_gear_choices += gear_name + + var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices + + if(choice && gear_datums[choice]) + + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + + var/datum/gear/C = gear_datums[choice] + total_cost += C.cost + if(C && total_cost <= MAX_GEAR_COST) + gear += choice + user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + else + user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + + else if(href_list["task"] == "remove") + var/to_remove = href_list["gear"] + if(!to_remove) return + for(var/gear_name in gear) + if(gear_name == to_remove) + gear -= gear_name + break + switch(href_list["task"]) if("random") switch(href_list["preference"]) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 43620e932af..d561271aa3b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -74,18 +74,6 @@ prev_gender = gender // Debug for plural genders make_blood() - /* - flavor_texts["general"] = flavor_general - flavor_texts["head"] = flavor_head - flavor_texts["face"] = flavor_face - flavor_texts["eyes"] = flavor_eyes - flavor_texts["torso"] = flavor_torso - flavor_texts["arms"] = flavor_arms - flavor_texts["hands"] = flavor_hands - flavor_texts["legs"] = flavor_legs - flavor_texts["feet"] = flavor_feet*/ - - /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) if ((!( yes ) || now_pushing)) return @@ -1573,4 +1561,4 @@ if((T == "head" && head_exposed) || (T == "face" && face_exposed) || (T == "eyes" && eyes_exposed) || (T == "torso" && torso_exposed) || (T == "arms" && arms_exposed) || (T == "hands" && hands_exposed) || (T == "legs" && legs_exposed) || (T == "feet" && feet_exposed)) flavor_text += flavor_texts[T] flavor_text += "\n\n" - return ..() + return ..() From f3091cb2159c096a123d0c0e00cec4f766e5e13f Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 17:52:16 -0700 Subject: [PATCH 12/75] Updated changelog --- html/changelog.html | 10 ++++++++++ tools/AddToChangelog/AddToChangelog/Thumbs.db | Bin 0 -> 12800 bytes 2 files changed, 10 insertions(+) create mode 100644 tools/AddToChangelog/AddToChangelog/Thumbs.db diff --git a/html/changelog.html b/html/changelog.html index 0b05b601276..0e303532918 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -113,6 +113,16 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

26 July 2014

+

Whitellama updated:

+
    +
  • Added dynamic flavour text.
  • +
  • Fixed bug with suit fibers and fingerprints.
  • +
+
+ +

20 July 2014

PsiOmegaDelta updated:

diff --git a/tools/AddToChangelog/AddToChangelog/Thumbs.db b/tools/AddToChangelog/AddToChangelog/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..18cb6ca03ef4941cac069cce34acc10ffa2c698f GIT binary patch literal 12800 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 literal 0 HcmV?d00001 From 0a0c18dbf6914784b926d0af14769001b3aa758d Mon Sep 17 00:00:00 2001 From: Whitellama Date: Sat, 26 Jul 2014 18:50:34 -0700 Subject: [PATCH 13/75] Fixed issue with flavour text saving/loading from other characters --- code/modules/client/preferences_savefile.dm | 24 +++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c61f87b23ff..896be32bace 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -143,8 +143,18 @@ S["job_engsec_med"] >> job_engsec_med S["job_engsec_low"] >> job_engsec_low + //Flavour Text + S["flavor_texts_general"] >> flavor_texts["general"] + S["flavor_texts_head"] >> flavor_texts["head"] + S["flavor_texts_face"] >> flavor_texts["face"] + S["flavor_texts_eyes"] >> flavor_texts["eyes"] + S["flavor_texts_torso"] >> flavor_texts["torso"] + S["flavor_texts_arms"] >> flavor_texts["arms"] + S["flavor_texts_hands"] >> flavor_texts["hands"] + S["flavor_texts_legs"] >> flavor_texts["legs"] + S["flavor_texts_feet"] >> flavor_texts["feet"] + //Miscellaneous - S["flavor_texts"] >> flavor_texts S["med_record"] >> med_record S["sec_record"] >> sec_record S["gen_record"] >> gen_record @@ -264,8 +274,18 @@ S["job_engsec_med"] << job_engsec_med S["job_engsec_low"] << job_engsec_low + //Flavour Text + S["flavor_texts_general"] << flavor_texts["general"] + S["flavor_texts_head"] << flavor_texts["head"] + S["flavor_texts_face"] << flavor_texts["face"] + S["flavor_texts_eyes"] << flavor_texts["eyes"] + S["flavor_texts_torso"] << flavor_texts["torso"] + S["flavor_texts_arms"] << flavor_texts["arms"] + S["flavor_texts_hands"] << flavor_texts["hands"] + S["flavor_texts_legs"] << flavor_texts["legs"] + S["flavor_texts_feet"] << flavor_texts["feet"] + //Miscellaneous - S["flavor_texts"] << flavor_texts S["med_record"] << med_record S["sec_record"] << sec_record S["gen_record"] << gen_record From fbc9b03e739b18f6f4b1b367aca42e300a9bc8fe Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sun, 27 Jul 2014 20:04:45 +1200 Subject: [PATCH 14/75] Cup fix - Grammar fix for drinking from cups - Changed "Glass of Tomato juf" to "Glass of Tomato juice" (I'm assuming this was a typo) --- code/modules/reagents/reagent_containers/food/drinks.dm | 2 +- .../reagents/reagent_containers/food/drinks/drinkingglass.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 1a0fba64268..e92214b2624 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -34,7 +34,7 @@ H << "\red You have a monitor for a head, where do you think you're going to put that?" return - M << "\blue You swallow a gulp of [src]." + M << "\blue You swallow a gulp from your [src]." if(reagents.total_volume) reagents.trans_to_ingest(M, gulp_size) diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index c2bb90ddb80..454badcf195 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -71,7 +71,7 @@ center_of_mass = list("x"=16, "y"=10) if("tomatojuice") icon_state = "glass_red" - name = "Glass of Tomato juf" + name = "Glass of Tomato juice" desc = "Are you sure this is tomato juice?" center_of_mass = list("x"=16, "y"=10) if("blood") From 9ded73fb85b9106d6bbf1c9a34d1d2fa27ee0e2e Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sun, 27 Jul 2014 15:38:07 +0400 Subject: [PATCH 15/75] Added Ausop's sprites for lasergun and sniper rifle. --- icons/obj/gun.dmi | Bin 43545 -> 44204 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 9c552d760013f201078feeb887a8cff0d093e404..1e03bbe0b765a1fc09fad81098ab8bcd9ef8f89e 100644 GIT binary patch delta 25918 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
LhFWzLNHyoD~`Bv`gob$->%4_3OrFRyh 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 KRxMJteEwgbhV=CS From 7b2505b5998fc573f00bcaca6f96e80c4a7520a3 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 27 Jul 2014 19:15:20 +0200 Subject: [PATCH 16/75] Misc. changes Adds access requirement to the cargo mail windoor. Can no longer simply climb inside unless left open. Flipped a windoor in the security lobby, making withdraw in a reasonable direction. Kitchen fire alarm. Replaced some weird reinforced tables with normal instances. --- maps/tgstation2.dmm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 0f2de821040..1d6710fffa9 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -211,7 +211,7 @@ "aec" = (/obj/machinery/door/window/brigdoor{dir = 1; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/lobby) "aed" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_security{id_tag = "BrigWest"; layer = 2.8; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor,/area/security/brig) "aee" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/lobby) -"aef" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/southright,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/lobby) +"aef" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/southright{base_state = "left"; icon_state = "left"},/turf/simulated/floor,/area/security/lobby) "aeg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor,/area/security/detectives_office) "aeh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/brig) "aei" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/prison) @@ -2669,7 +2669,7 @@ "aZq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/gateway) "aZr" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "aZs" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"aZt" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"aZt" = (/obj/machinery/light_switch{pixel_x = 16; pixel_y = -23},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aZu" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) "aZv" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "aZw" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -1; pixel_y = -24; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -3113,7 +3113,7 @@ "bhS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research) "bhT" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bhU" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) -"bhV" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Mailing Room"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/office) +"bhV" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Mailing Room"; req_access_txt = "50"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/office) "bhW" = (/obj/machinery/light/small,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "bhX" = (/obj/machinery/door/window/eastright{dir = 1; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"},/area/bridge/meeting_room) "bhY" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -7729,7 +7729,7 @@ "cSG" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSH" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSI" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"cSJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"cSJ" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "cSK" = (/obj/structure/table,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "cSL" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cSM" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) @@ -7790,12 +7790,12 @@ "cTP" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/beach) "cTQ" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) "cTR" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) -"cTS" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) +"cTS" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cTT" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTU" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTV" = (/obj/machinery/computer/pod{id = "thunderdomehea"; name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTW" = (/obj/machinery/computer/pod{id = "thunderdome"; name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) -"cTX" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) +"cTX" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTY" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTZ" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cUa" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) @@ -7900,7 +7900,7 @@ "cVV" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology) "cVW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cVX" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) -"cVY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) +"cVY" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cVZ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding) "cWa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) "cWb" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) @@ -11411,7 +11411,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRjcRjcRmcRjcRjcRvcRjcRjcRmcRjcRjcRjcRjcRjcRjcRjcQzcQzcQzcQzcQzcQzcQzcQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcRjcRjcRjcStcRjcRjcRjcRvcRvcRvcRvcRvcRvcRjcRvcRjcRvcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcRjcRjcRjcRjcRjcRjcRjcSxcRjcRjcRjcRjcRjcRjcRjcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycVWcVYcVWcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycVWcTScVWcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSvcSvcSvcSvcSFcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSHcSIcRjcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSJcSKcSKcSvcSvdKocSCcSCcSMcSNcSMcSCcSCcSCcSCcSCcSMcSNcSMcSOcSCcRjcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRvcRjcRjcRjcRjcRjcRjcRjcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSPcSCcRjcRjcRjcRjcRjcRjcRjcRvcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11428,7 +11428,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRscRjcRjcRjcRjcRjcRjcRjcTBcTCcTCcTCcTCcTCcTDcTEcTBcTCcTCcTCcTCcTFcTBcRjcRjcRjcRjcRjcRjcRjcRscRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRscRscRvcRvcRvcRvcRvcRjcTBcTBcTHcTBcTHcTBcTBcTIcTJcTBcTHcTBcTHcTKcTBcRjcRvcRvcRvcRvcRvcRscRscRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRvcRmcTBcTBcTBcTOcTOcTOcTBcTBcTBcTOcTOcTOcTOcTOcTBcRmcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLdTrcUgcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRcTScTTcTUcTVcTBcTWcTXcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhdTscTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRcTXcTTcTUcTVcTBcTWcVYcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhdTscTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTPcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcUdcTLcTLcTG From 4861c5a5d48da9cd553a7813cd6facef090ac56e Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Mon, 28 Jul 2014 07:38:24 +1200 Subject: [PATCH 17/75] Grammar tweak --- code/modules/reagents/reagent_containers/food/drinks.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index e92214b2624..8f1f68698e3 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -34,7 +34,7 @@ H << "\red You have a monitor for a head, where do you think you're going to put that?" return - M << "\blue You swallow a gulp from your [src]." + M << "\blue You swallow a gulp from \the [src]." if(reagents.total_volume) reagents.trans_to_ingest(M, gulp_size) From fc5d33917b70e1ea49488e8d7746008ff6fd843c Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 27 Jul 2014 23:32:36 +0200 Subject: [PATCH 18/75] Attempts to ensure that the captain (or the head loyalist to be precise, whomever he might be) is not a candidate for the directives. --- code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm | 2 +- .../mutiny/directives/bluespace_contagion_directive.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 55a61a6f591..6df5a22050c 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -11,7 +11,7 @@ datum/directive/terminations/alien_fraud datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] for(var/mob/M in player_list) - if (M.is_ready() && is_alien(M)) + if (M.is_ready() && is_alien(M) && M != mode.head_loyalist.current) aliens.Add(M) return aliens diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm index 1e31eca7b6f..1ea28852fdc 100644 --- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm +++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm @@ -6,7 +6,7 @@ datum/directive/bluespace_contagion proc/get_infection_candidates() var/list/candidates[0] for(var/mob/M in player_list) - if (M.is_ready() && !M.is_mechanical()) + if (M.is_ready() && !M.is_mechanical() && M != mode.head_loyalist.current) candidates.Add(M) return candidates From 646aad945e67ccfa15df55d3f9eb941eac4dde27 Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Sun, 27 Jul 2014 17:21:19 -0600 Subject: [PATCH 19/75] Merged getFlatIcon rendering from tgstation Based on tgstation #2826. This is not all of it though. --- code/__HELPERS/icons.dm | 96 +++++++++++++++++++++++++------------ code/__HELPERS/type2type.dm | 7 +++ code/datums/datacore.dm | 2 +- 3 files changed, 73 insertions(+), 32 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 0ca515486b4..d193fcb26e4 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -634,20 +634,60 @@ as a single icon. Useful for when you want to manipulate an icon via the above a The _flatIcons list is a cache for generated icon files. */ -proc - getFlatIcon(atom/A, dir) // 1 = use cache, 2 = override cache, 0 = ignore cache +proc // Creates a single icon from a given /atom or /image. Only the first argument is required. + getFlatIcon(image/A, defdir=A.dir, deficon=A.icon, defstate=A.icon_state, defblend=A.blend_mode) + // We start with a blank canvas, otherwise some icon procs crash silently + var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon + if(!A) + return flat + if(A.alpha <= 0) + return flat + var/noIcon = FALSE + + var/curicon + if(A.icon) + curicon = A.icon + else + curicon = deficon + + if(!curicon) + noIcon = TRUE // Do not render this object. + + var/curstate + if(A.icon_state) + curstate = A.icon_state + else + curstate = defstate + + if(!noIcon && !(curstate in icon_states(curicon))) + if("" in icon_states(curicon)) + curstate = "" + else + noIcon = TRUE // Do not render this object. + + var/curdir + if(A.dir) + curdir = A.dir + else + curdir = defdir + + var/curblend + if(A.blend_mode == BLEND_DEFAULT) + curblend = defblend + else + curblend = A.blend_mode + // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed var/list/layers = list() - - // Add the atom's icon itself - if(A.icon) - // Make a copy without pixel_x/y settings - var/image/copy = image(icon=A.icon,icon_state=A.icon_state,layer=A.layer,dir=A.dir) + var/image/copy + // Add the atom's icon itself, without pixel_x/y offsets. + if(!noIcon) + copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) + copy.color = A.color + copy.alpha = A.alpha + copy.blend_mode = curblend layers[copy] = A.layer - // dir defaults to A's dir - if(!dir) dir = A.dir - // Loop through the underlays, then overlays, sorting them into the layers list var/list/process = A.underlays // Current list being processed var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays @@ -662,7 +702,7 @@ proc if(!current) continue currentLayer = current:layer if(currentLayer<0) // Special case for FLY_LAYER - if(currentLayer <= -1000) return 0 + if(currentLayer <= -1000) return flat if(pSet == 0) // Underlay currentLayer = A.layer+currentLayer/1000 else // Overlay @@ -688,8 +728,6 @@ proc else // All done break - // We start with a blank canvas, otherwise some icon procs crash silently - var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon var/icon/add // Icon of overlay being added // Current dimensions of flattened icon @@ -699,24 +737,15 @@ proc for(var/I in layers) - if(I:icon) - if(I:icon_state) - // Has icon and state set - add = icon(I:icon, I:icon_state) - else - if(A.icon_state in icon_states(I:icon)) - // Inherits icon_state from atom - add = icon(I:icon, A.icon_state) - else - // Uses default state ("") - add = icon(I:icon) - else if(I:icon_state) - // Inherits icon from atom - add = icon(A.icon, I:icon_state) - else - // Unknown + if(I:alpha == 0) continue + if(I == copy) // 'I' is an /image based on the object being flattened. + curblend = BLEND_OVERLAY + add = icon(I:icon, I:icon_state, I:dir) + else // 'I' is an appearance object. + add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) + // Find the new dimensions of the flat icon to fit the added overlay addX1 = min(flatX1, I:pixel_x+1) addX2 = max(flatX2, I:pixel_x+add.Width()) @@ -730,9 +759,14 @@ proc flatY1=addY1;flatY2=addY2 // Blend the overlay into the flattened icon - flat.Blend(add,ICON_OVERLAY,I:pixel_x+2-flatX1,I:pixel_y+2-flatY1) + flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) - return flat + if(A.color) + flat.Blend(A.color, ICON_MULTIPLY) + if(A.alpha < 255) + flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + + return icon(flat, "", SOUTH) getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 885de82c44b..8c188d0d180 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -298,6 +298,13 @@ proc/tg_list2text(list/list, glue=",") /proc/angle2text(var/degree) return dir2text(angle2dir(degree)) +//Converts a blend_mode constant to one acceptable to icon.Blend() +/proc/blendMode2iconMode(blend_mode) + switch(blend_mode) + if(BLEND_MULTIPLY) return ICON_MULTIPLY + if(BLEND_ADD) return ICON_ADD + if(BLEND_SUBTRACT) return ICON_SUBTRACT + else return ICON_OVERLAY //Converts a rights bitfield into a string /proc/rights2text(rights,seperator="") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 98da4a58ded..a1a626313b6 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -119,7 +119,7 @@ L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.SE // Used in respawning L.fields["identity"] = H.dna.UI // " - L.fields["image"] = getFlatIcon(H,0) //This is god-awful + L.fields["image"] = getFlatIcon(H) //This is god-awful locked += L return From 1d7310c49d3febfd14450439cabf9d956ede99fc Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Sun, 27 Jul 2014 22:05:24 -0600 Subject: [PATCH 20/75] Patched display and dealt with lying. --- code/__HELPERS/icons.dm | 6 ++-- code/modules/paperwork/photography.dm | 50 +++++++++++++++------------ 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index d193fcb26e4..65807c05757 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -637,7 +637,7 @@ The _flatIcons list is a cache for generated icon files. proc // Creates a single icon from a given /atom or /image. Only the first argument is required. getFlatIcon(image/A, defdir=A.dir, deficon=A.icon, defstate=A.icon_state, defblend=A.blend_mode) // We start with a blank canvas, otherwise some icon procs crash silently - var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon + var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon if(!A) return flat if(A.alpha <= 0) @@ -666,7 +666,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu noIcon = TRUE // Do not render this object. var/curdir - if(A.dir) + if(A.dir != 2) curdir = A.dir else curdir = defdir @@ -682,6 +682,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu var/image/copy // Add the atom's icon itself, without pixel_x/y offsets. if(!noIcon) + world.log << "***Rendering Icon [A.type] in state '[curstate]' on layer [A.layer] in direction [curdir]" // #JMO copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) copy.color = A.color copy.alpha = A.alpha @@ -744,6 +745,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu curblend = BLEND_OVERLAY add = icon(I:icon, I:icon_state, I:dir) else // 'I' is an appearance object. + world.log << "***Recursing to render Icon [I:type] in state '[curstate]' in direction [curdir]" // #JMO add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) // Find the new dimensions of the flat icon to fit the added overlay diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index f0d39337b6f..c2399a3f045 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -157,36 +157,41 @@ //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") - var/icon/turficon = build_composite_icon(the_turf) - res.Blend(turficon, ICON_OVERLAY, 33, 33) + world.log << "***Calling build composite..." //#JMO + //var/icon/turficon = build_composite_icon(the_turf) + res.Blend(getFlatIcon(the_turf), blendMode2iconMode(the_turf.blend_mode),33,33) + world.log << "***Exiting build composite..." //#JMO + //res.Blend(turficon, ICON_OVERLAY, 33, 33) var/atoms[] = list() for(var/atom/A in the_turf) if(A.invisibility) continue atoms.Add(A) - //Sorting icons based on levels - var/gap = atoms.len - var/swapped = 1 - while (gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.247330950103979) - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= atoms.len; i++) - var/atom/l = atoms[i] //Fucking hate - var/atom/r = atoms[gap+i] //how lists work here - if(l.layer > r.layer) //no "atoms[i].layer" for me - atoms.Swap(i, gap + i) - swapped = 1 + //Sorting icons based on levels. + //JMO: I have no idea what they were doing here before, but the magic number alone + // was worth replacing it over. "gap = round(gap / 1.247330950103979)" really? + var/list/sorted = list() + var/j + for(var/i = 1 to atoms.len) + var/atom/c = atoms[i] + for(j = sorted.len, j > 0, --j) + var/atom/c2 = sorted[j] + if(c2.layer <= c.layer) + break + sorted.Insert(j+1, c) - for(var/i; i <= atoms.len; i++) - var/atom/A = atoms[i] + for(var/i; i <= sorted.len; i++) + var/atom/A = sorted[i] if(A) - var/icon/img = getFlatIcon(A, A.dir)//build_composite_icon(A) - if(istype(img, /icon)) - res.Blend(new/icon(img, "", A.dir), ICON_OVERLAY, 33 + A.pixel_x, 33 + A.pixel_y) + world.log << "**Calling getFlatIcon to render [A.type]" //#JMO + var/icon/img = getFlatIcon(A)//build_composite_icon(A) + if(istype(A, /mob/living) && A:lying) + world.log << "[A.type] is lying down. Making it look as such..." // #JMO; + img.BecomeLying() + + //if(istype(img, /icon)) + res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x, 33 + A.pixel_y) return res @@ -220,6 +225,7 @@ var/icon/temp = icon('icons/effects/96x96.dmi',"") var/icon/black = icon('icons/turf/space.dmi', "black") var/mobs = "" + world << "Proof that this thing is alive! 1.0" // #JMO for(var/i = 1; i <= 3; i++) for(var/j = 1; j <= 3; j++) var/turf/T = locate(x_c, y_c, z_c) From 3b5d40c470520cea1e6d5175c378555e2f86af1c Mon Sep 17 00:00:00 2001 From: DJSnapshot Date: Sun, 27 Jul 2014 21:27:41 -0700 Subject: [PATCH 21/75] Big nerf and cleanup of 3D sound. should fix most of #5789 --- code/game/sound.dm | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index 3f89ea4d18d..422670c2da7 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -9,7 +9,7 @@ var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','soun var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.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) +/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global) soundin = get_sfx(soundin) // same sound for everyone @@ -25,28 +25,27 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur var/mob/M = P if(!M || !M.client) continue - + var/distance = get_dist(M, turf_source) if(distance <= (world.view + extrarange) * 3) var/turf/T = get_turf(M) - + if(T && T.z == turf_source.z) //check that the air can transmit sound var/datum/gas_mixture/environment = T.return_air() if (!environment || environment.return_pressure() < SOUND_MINIMUM_PRESSURE) - if (distance > 1) + if (distance > 1) continue - + var/new_frequency = 32000 + (frequency - 32000)*0.125 //lower the frequency. very rudimentary var/new_volume = vol*0.15 //muffle the sound, like we're hearing through contact - M.playsound_local(turf_source, soundin, new_volume, vary, new_frequency, falloff) + M.playsound_local(turf_source, soundin, new_volume, vary, new_frequency, falloff, is_global) else - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global) -var/const/FALLOFF_SOUNDS = 2 -var/const/SURROUND_CAP = 255 +var/const/FALLOFF_SOUNDS = 0.5 -/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff) +/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global) if(!src.client || ear_deaf > 0) return soundin = get_sfx(soundin) @@ -54,8 +53,7 @@ var/const/SURROUND_CAP = 255 S.wait = 0 //No queue S.channel = 0 //Any channel S.volume = vol - S.environment = 2 - + S.environment = -1 if (vary) if(frequency) S.frequency = frequency @@ -65,20 +63,20 @@ var/const/SURROUND_CAP = 255 if(isturf(turf_source)) // 3D sounds, the technology is here! var/turf/T = get_turf(src) - S.volume -= get_dist(T, turf_source) * 0.75 + S.volume -= get_dist(T, turf_source) * 2 //multiplicative falloff to add on top of natural audio falloff. + var/datum/gas_mixture/environment = T.return_air() + S.volume -= environment.return_pressure()/100 + 1 if (S.volume < 0) S.volume = 0 var/dx = turf_source.x - T.x // Hearing from the right/left - - S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) - + S.x = dx var/dz = turf_source.y - T.y // Hearing from infront/behind - S.z = round(max(-SURROUND_CAP, min(SURROUND_CAP, dz)), 1) - + S.z = dz // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) - + if(!is_global) + S.environment = 2 src << S /client/proc/playtitlemusic() From f6b75d833c8eed5b1c870cf97c7b9ca9a60e02bd Mon Sep 17 00:00:00 2001 From: DJSnapshot Date: Sun, 27 Jul 2014 23:10:57 -0700 Subject: [PATCH 22/75] now you can hear next to you in space! --- code/game/sound.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index 422670c2da7..25e693a91c2 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -65,7 +65,8 @@ var/const/FALLOFF_SOUNDS = 0.5 var/turf/T = get_turf(src) S.volume -= get_dist(T, turf_source) * 2 //multiplicative falloff to add on top of natural audio falloff. var/datum/gas_mixture/environment = T.return_air() - S.volume -= environment.return_pressure()/100 + 1 + if(get_dist(T, turf_source) > 2) + S.volume -= environment.return_pressure()/100 + 1 if (S.volume < 0) S.volume = 0 var/dx = turf_source.x - T.x // Hearing from the right/left From 537fa507284632b93b16bcbc7b9c442873680186 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 08:37:14 +0200 Subject: [PATCH 23/75] Area naming consistency Changes area name from "supply shuttle" to "Supply Shuttle" to match the casing of other areas. --- code/game/supplyshuttle.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 0b042eeb7b2..4fb6683bd78 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -21,14 +21,14 @@ var/list/mechtoys = list( ) /area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. - name = "supply shuttle" + name = "Supply Shuttle" icon_state = "shuttle3" luminosity = 1 lighting_use_dynamic = 0 requires_power = 0 /area/supply/dock //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. - name = "supply shuttle" + name = "Supply Shuttle" icon_state = "shuttle3" luminosity = 1 lighting_use_dynamic = 0 @@ -455,7 +455,7 @@ var/list/mechtoys = list( if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" else dat += "Station
" - + if (shuttle.can_launch()) dat += "Send away" else if (shuttle.can_cancel()) @@ -472,14 +472,14 @@ var/list/mechtoys = list( else dat += "*Shuttle is busy*" dat += "
\n
" - - + + dat += {"
\nSupply points: [supply_controller.points]
\n
\nOrder items
\n
\nView requests
\n
\nView orders
\n
\nClose"} - + user << browse(dat, "window=computer;size=575x450") onclose(user, "computer") @@ -520,13 +520,13 @@ var/list/mechtoys = list( shuttle.launch(src) temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" post_signal("supply") - + if (href_list["force_send"]) shuttle.force_launch(src) if (href_list["cancel_send"]) shuttle.cancel_launch(src) - + else if (href_list["order"]) //if(!shuttle.idle()) return //this shouldn't be necessary it seems if(href_list["order"] == "categories") From bdbc404d07867a5b83f598f60c2d5dc7cbabc5cb Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 01:04:52 -0600 Subject: [PATCH 24/75] Added workaround for non-directional icons with dir!=2 Several items in the map are set with a dir other than 2 but the icon associated with the item doesn't have directions. As such they misrender. This resolves that specific issue, for the most part. Due to an odd behavior of Byond, when this circumstance occurs the icon proc produces a 32x32 image that is all alpha 0. At least that's what my testing suggests; it may be possible with large icons to encounter this as an issue and cause it to ignore an icon that should be reloaded from the default. However, this can't do any worse than the current software. --- code/__HELPERS/icons.dm | 31 ++++++++++++++++++++++++++- code/modules/paperwork/photography.dm | 15 +++++++------ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 65807c05757..b0bc3091e61 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -684,6 +684,10 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu if(!noIcon) world.log << "***Rendering Icon [A.type] in state '[curstate]' on layer [A.layer] in direction [curdir]" // #JMO copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) + if (isnull(copy)) // #JMO + world.log << "****Created a null!" // #JMO + else // #JMO + world.log << "****Created a thing of type [copy.type]" // #JMO copy.color = A.color copy.alpha = A.alpha copy.blend_mode = curblend @@ -744,6 +748,31 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu if(I == copy) // 'I' is an /image based on the object being flattened. curblend = BLEND_OVERLAY add = icon(I:icon, I:icon_state, I:dir) + // This checks for a silent failure mode of the icon routine. If the requested dir + // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. + if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) + // Since checking every pixel for blank isn't trivial, we make some assumptions about + // the content of the image to determine if it actually is blank. On a rare occassions + // this will cause the software to return a non-directional icon for when a + // directionalized one would be more appropriate. This is rare enough that this + // will suffice in place of a map rework that properly normalizes directions. + var/blankpixel=1; + // Check the four corners... + blankpixel &= isnull(add.GetPixel(1,1)) + blankpixel &= isnull(add.GetPixel(32,1)) + blankpixel &= isnull(add.GetPixel(32,32)) + blankpixel &= isnull(add.GetPixel(32,1)) + // The thirds... + blankpixel &= isnull(add.GetPixel(11,11)) + blankpixel &= isnull(add.GetPixel(11,22)) + blankpixel &= isnull(add.GetPixel(22,22)) + blankpixel &= isnull(add.GetPixel(22,11)) + // and the center... + blankpixel &= isnull(add.GetPixel(16,16)) + // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) + if (blankpixel) + // Pull the default direction. + add = icon(I:icon, I:icon_state) else // 'I' is an appearance object. world.log << "***Recursing to render Icon [I:type] in state '[curstate]' in direction [curdir]" // #JMO add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) @@ -819,4 +848,4 @@ proc/adjust_brightness(var/color, var/value) RGB[1] = Clamp(RGB[1]+value,0,255) RGB[2] = Clamp(RGB[2]+value,0,255) RGB[3] = Clamp(RGB[3]+value,0,255) - return rgb(RGB[1],RGB[2],RGB[3]) \ No newline at end of file + return rgb(RGB[1],RGB[2],RGB[3]) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index c2399a3f045..67e5eb76e82 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -152,7 +152,7 @@ ..() -/obj/item/device/camera/proc/get_icon(turf/the_turf as turf) +/obj/item/device/camera/proc/get_icon(turf/the_turf as turf,mob/user as mob) //#JMO Added mob/user for debug for debug //Bigger icon base to capture those icons that were shifted to the next tile //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") @@ -184,14 +184,16 @@ for(var/i; i <= sorted.len; i++) var/atom/A = sorted[i] if(A) - world.log << "**Calling getFlatIcon to render [A.type]" //#JMO + world.log << "**Calling getFlatIcon to render [A]" //#JMO var/icon/img = getFlatIcon(A)//build_composite_icon(A) + // Check if we're looking at a mob that's lying down if(istype(A, /mob/living) && A:lying) - world.log << "[A.type] is lying down. Making it look as such..." // #JMO; + world.log << "[A] is lying down. Making it look as such..." // #JMO; + // If they are, apply that effect to their picture. img.BecomeLying() - //if(istype(img, /icon)) - res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x, 33 + A.pixel_y) + if(istype(img, /icon)) + res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x, 33 + A.pixel_y) return res @@ -225,7 +227,6 @@ var/icon/temp = icon('icons/effects/96x96.dmi',"") var/icon/black = icon('icons/turf/space.dmi', "black") var/mobs = "" - world << "Proof that this thing is alive! 1.0" // #JMO for(var/i = 1; i <= 3; i++) for(var/j = 1; j <= 3; j++) var/turf/T = locate(x_c, y_c, z_c) @@ -234,7 +235,7 @@ if(user.client) //To make shooting through security cameras possible viewer = user.client.eye if(dummy in viewers(world.view, viewer)) - temp.Blend(get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) + temp.Blend(get_icon(T,user), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) else temp.Blend(black, ICON_OVERLAY, 32 * (j-1), 64 - 32 * (i-1)) mobs += get_mobs(T) From 8e4ac0a807e452301b3d7da00deaf2243bbadc92 Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 01:46:07 -0600 Subject: [PATCH 25/75] Modified to check every pixel Checking only a few pixels had the tendancy to turn my charcter's head inside out when I was pointing directions other than south. Worse case is 1024 tests per object in the image. This test should be uncommon and the CPU usage is constrained by other factors. --- code/__HELPERS/icons.dm | 35 +++++++++------------------ code/modules/paperwork/photography.dm | 10 ++------ 2 files changed, 13 insertions(+), 32 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index b0bc3091e61..8c400df60c1 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -682,12 +682,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu var/image/copy // Add the atom's icon itself, without pixel_x/y offsets. if(!noIcon) - world.log << "***Rendering Icon [A.type] in state '[curstate]' on layer [A.layer] in direction [curdir]" // #JMO copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) - if (isnull(copy)) // #JMO - world.log << "****Created a null!" // #JMO - else // #JMO - world.log << "****Created a thing of type [copy.type]" // #JMO copy.color = A.color copy.alpha = A.alpha copy.blend_mode = curblend @@ -751,30 +746,22 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu // This checks for a silent failure mode of the icon routine. If the requested dir // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) - // Since checking every pixel for blank isn't trivial, we make some assumptions about - // the content of the image to determine if it actually is blank. On a rare occassions - // this will cause the software to return a non-directional icon for when a - // directionalized one would be more appropriate. This is rare enough that this - // will suffice in place of a map rework that properly normalizes directions. - var/blankpixel=1; - // Check the four corners... - blankpixel &= isnull(add.GetPixel(1,1)) - blankpixel &= isnull(add.GetPixel(32,1)) - blankpixel &= isnull(add.GetPixel(32,32)) - blankpixel &= isnull(add.GetPixel(32,1)) - // The thirds... - blankpixel &= isnull(add.GetPixel(11,11)) - blankpixel &= isnull(add.GetPixel(11,22)) - blankpixel &= isnull(add.GetPixel(22,22)) - blankpixel &= isnull(add.GetPixel(22,11)) - // and the center... - blankpixel &= isnull(add.GetPixel(16,16)) + // Check every pixel for blank (computationally expensive, but the process is limited + // by the amount of film on the station, only happens when we hit something that's + // turned, and bails at the very first pixel it sees. + var/blankpixel; + for(var/y;y<=32;y++) + for(var/x;x<32;x++) + blankpixel = isnull(add.GetPixel(x,y)) + if(!blankpixel) + break + if(!blankpixel) + break // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) if (blankpixel) // Pull the default direction. add = icon(I:icon, I:icon_state) else // 'I' is an appearance object. - world.log << "***Recursing to render Icon [I:type] in state '[curstate]' in direction [curdir]" // #JMO add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) // Find the new dimensions of the flat icon to fit the added overlay diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 67e5eb76e82..948b023ac4d 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -152,16 +152,12 @@ ..() -/obj/item/device/camera/proc/get_icon(turf/the_turf as turf,mob/user as mob) //#JMO Added mob/user for debug for debug +/obj/item/device/camera/proc/get_icon(turf/the_turf as turf) //Bigger icon base to capture those icons that were shifted to the next tile //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") - world.log << "***Calling build composite..." //#JMO - //var/icon/turficon = build_composite_icon(the_turf) res.Blend(getFlatIcon(the_turf), blendMode2iconMode(the_turf.blend_mode),33,33) - world.log << "***Exiting build composite..." //#JMO - //res.Blend(turficon, ICON_OVERLAY, 33, 33) var/atoms[] = list() for(var/atom/A in the_turf) @@ -184,11 +180,9 @@ for(var/i; i <= sorted.len; i++) var/atom/A = sorted[i] if(A) - world.log << "**Calling getFlatIcon to render [A]" //#JMO var/icon/img = getFlatIcon(A)//build_composite_icon(A) // Check if we're looking at a mob that's lying down if(istype(A, /mob/living) && A:lying) - world.log << "[A] is lying down. Making it look as such..." // #JMO; // If they are, apply that effect to their picture. img.BecomeLying() @@ -235,7 +229,7 @@ if(user.client) //To make shooting through security cameras possible viewer = user.client.eye if(dummy in viewers(world.view, viewer)) - temp.Blend(get_icon(T,user), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) + temp.Blend(get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) else temp.Blend(black, ICON_OVERLAY, 32 * (j-1), 64 - 32 * (i-1)) mobs += get_mobs(T) From b935d7a0e09069799aa21501bb238c5b03392d04 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 10:25:29 +0200 Subject: [PATCH 26/75] An Odysseus with patients now bypass mech movement-overrides. --- code/game/mecha/mech_sensor.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index ac8bc9a30fa..d7e1937715f 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -25,6 +25,14 @@ return 1 /obj/machinery/mech_sensor/proc/is_blocked(O as obj) + if(istype(O, /obj/mecha/medical/odysseus)) + var/obj/mecha/medical/odysseus/M = O + for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment) + if(istype(ME, /obj/item/mecha_parts/mecha_equipment/tool/sleeper)) + var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S = ME + if(S.occupant != null) + return 0 + return istype(O, /obj/mecha) || istype(O, /obj/vehicle) /obj/machinery/mech_sensor/proc/give_feedback(O as obj) From 5457cee52792fe4995010e1b349c6ce52f96c413 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Mon, 28 Jul 2014 20:39:42 +1200 Subject: [PATCH 27/75] More train fixes - No passing plastic flaps - Only human based mobs can board trains - Adjacent checks for exiting vehicles - Cleaned up as many direct loc moves as possible - Places removed cells in the removers hand --- code/game/supplyshuttle.dm | 17 ++++++++++------- code/modules/vehicles/cargo_train.dm | 13 +++++++++---- code/modules/vehicles/train.dm | 6 ++---- code/modules/vehicles/vehicle.dm | 16 ++++++++-------- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 0b042eeb7b2..b908d09b664 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -54,7 +54,10 @@ var/list/mechtoys = list( if (istype(A, /obj/structure/stool/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass return 0 - else if(istype(A, /mob/living)) // You Shall Not Pass! + if(istype(A, /obj/vehicle)) //no vehicles + return 0 + + if(istype(A, /mob/living)) // You Shall Not Pass! var/mob/living/M = A if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime) && !istype(M, /mob/living/simple_animal/mouse) && !istype(M, /mob/living/silicon/robot/drone)) //If your not laying down, or a small creature, no pass. return 0 @@ -455,7 +458,7 @@ var/list/mechtoys = list( if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" else dat += "Station
" - + if (shuttle.can_launch()) dat += "Send away" else if (shuttle.can_cancel()) @@ -472,14 +475,14 @@ var/list/mechtoys = list( else dat += "*Shuttle is busy*" dat += "
\n
" - - + + dat += {"
\nSupply points: [supply_controller.points]
\n
\nOrder items
\n
\nView requests
\n
\nView orders
\n
\nClose"} - + user << browse(dat, "window=computer;size=575x450") onclose(user, "computer") @@ -520,13 +523,13 @@ var/list/mechtoys = list( shuttle.launch(src) temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" post_signal("supply") - + if (href_list["force_send"]) shuttle.force_launch(src) if (href_list["cancel_send"]) shuttle.cancel_launch(src) - + else if (href_list["order"]) //if(!shuttle.idle()) return //this shouldn't be necessary it seems if(href_list["order"] == "categories") diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index b6f91feec79..11d0c53fb8e 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -43,6 +43,7 @@ ..() cell = new /obj/item/weapon/cell/high verbs -= /atom/movable/verb/pull + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine key = new() var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs overlays += I @@ -70,8 +71,8 @@ if(istype(W, /obj/item/weapon/key/cargo_train)) if(!key) user.drop_item() + W.forceMove(src) key = W - W.loc = src verbs += /obj/vehicle/train/cargo/engine/verb/remove_key return ..() @@ -97,7 +98,7 @@ var/obj/machinery/door/D = Obstacle var/mob/living/carbon/human/H = load if(istype(D) && istype(H)) - D.Bumped(H) //a little hacky, but hey, it works, and repects access rights + D.Bumped(H) //a little hacky, but hey, it works, and respects access rights ..() @@ -194,6 +195,8 @@ turn_on() if (on) usr << "You start [src]'s engine." + verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine else if(cell.charge < power_use) usr << "[src] is out of power." @@ -215,6 +218,8 @@ turn_off() if (!on) usr << "You stop [src]'s engine." + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs += /obj/vehicle/train/cargo/engine/verb/start_engine /obj/vehicle/train/cargo/engine/verb/remove_key() set name = "Remove key" @@ -243,7 +248,7 @@ /obj/vehicle/train/cargo/trolley/load(var/atom/movable/C) if(ismob(C) && !passenger_allowed) return 0 - if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !ismob(C)) + if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !istype(C, /mob/living/carbon/human)) return 0 ..() @@ -255,7 +260,7 @@ return 1 /obj/vehicle/train/cargo/engine/load(var/atom/movable/C) - if(!ismob(C)) + if(!istype(C, /mob/living/carbon/human)) return 0 return ..() diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index deaed1130c2..d29933b5ed8 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -68,8 +68,7 @@ if(user != load) if(user in src) //for handling players stuck in src - this shouldn't happen - but just in case it does - user.loc = T - contents -= user + user.forceMove(T) return 1 return 0 @@ -93,8 +92,7 @@ return 0 if(user != load && (user in src)) - user.loc = loc //for handling players stuck in src - contents -= user + user.forceMove(loc) //for handling players stuck in src else if(load) unload(user) //unload if loaded else if(!load && !user.buckled) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 5e5affac99a..caec0c896ab 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -50,7 +50,7 @@ anchored = init_anc if(load) - load.loc = loc + load.forceMove(loc)// = loc load.dir = dir return 1 @@ -196,7 +196,7 @@ new /obj/item/weapon/cable_coil/cut(Tsec) if(cell) - cell.loc = Tsec + cell.forceMove(Tsec) cell.update_icon() cell = null @@ -234,8 +234,8 @@ return H.drop_from_inventory(C) + C.forceMove(src) cell = C - C.loc = null //this wont be GC'd since it's referrenced above powercheck() usr << "You install [C] in [src]." @@ -244,7 +244,8 @@ return usr << "You remove [cell] from [src]." - cell.loc = get_turf(H) + cell.forceMove(get_turf(H)) + H.put_in_hands(cell) cell = null powercheck() @@ -271,7 +272,7 @@ if(istype(crate)) crate.close() - C.loc = loc + C.forceMove(loc) C.dir = dir C.anchored = 1 @@ -310,7 +311,7 @@ var/list/options = new() for(var/test_dir in alldirs) var/new_dir = get_step_to(src, get_step(src, test_dir)) - if(new_dir) + if(new_dir && load.Adjacent(new_dir)) options += new_dir if(options.len) dest = pick(options) @@ -320,8 +321,7 @@ if(!isturf(dest)) //if there still is nowhere to unload, cancel out since the vehicle is probably in nullspace return 0 - - load.loc = dest + load.forceMove(dest) load.dir = get_dir(loc, dest) load.anchored = initial(load.anchored) load.pixel_x = initial(load.pixel_x) From 419bc2eea31111d4c68c357700b0f6acec03eac1 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 12:10:44 +0200 Subject: [PATCH 28/75] Adds a lost AltClick click-through for the AI. Makes it possible to clear a turf alt-leftclick selection. --- code/_onclick/ai.dm | 8 ++++---- code/_onclick/click.dm | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 037cde56083..204f39e69c9 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -122,8 +122,8 @@ src.enabled = !src.enabled src.updateTurrets() -/atom/proc/AIAltClick() - return +/atom/proc/AIAltClick(var/atom/A) + AltClick(A) /obj/machinery/door/airlock/AIAltClick() // Electrifies doors. if(!secondsElectrified) @@ -137,10 +137,10 @@ /obj/machinery/turretid/AIAltClick() //toggles lethal on turrets src.lethal = !src.lethal src.updateTurrets() - + /atom/proc/AIMiddleClick() return - + /obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights. if(!src.lights) Topic("aiEnable=10", list("aiEnable"="10"), 1) // 1 meaning no window (consistency!) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c3660d53bd2..1284aa52836 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -250,7 +250,7 @@ /atom/proc/AltClick(var/mob/user) var/turf/T = get_turf(src) if(T && user.TurfAdjacent(T)) - if(user. == T) + if(user.listed_turf == T) user.listed_turf = null else user.listed_turf = T From f8e50b28f5f56afcf908aaebe9e2438db4843b41 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 29 Jul 2014 00:20:38 +0930 Subject: [PATCH 29/75] Bevy of newhydro fixes. --- code/_onclick/click.dm | 12 ++- code/game/machinery/vending.dm | 12 ++- code/modules/hydroponics/hydro_tray.dm | 10 ++- code/modules/hydroponics/seed_datums.dm | 31 ++++---- code/modules/hydroponics/seed_machines.dm | 14 +++- code/modules/hydroponics/vines.dm | 4 +- .../projectiles/guns/energy/special.dm | 69 ++++++++++-------- icons/obj/hydroponics.dmi | Bin 163160 -> 163293 bytes 8 files changed, 98 insertions(+), 54 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c3660d53bd2..a88dd793f12 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -298,7 +298,17 @@ // Simple helper to face what you clicked on, in case it should be needed in more than one place /mob/proc/face_atom(var/atom/A) - if( stat || (buckled && !buckled.movable) || !A || !x || !y || !A.x || !A.y ) return + + // Snowflake for space vines. + var/is_buckled = 0 + if(buckled) + if(istype(buckled)) + if(!buckled.movable) + is_buckled = 1 + else + is_buckled = 0 + + if( stat || is_buckled || !A || !x || !y || !A.x || !A.y ) return var/dx = A.x - x var/dy = A.y - y if(!dx && !dy) return diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 28efdb90874..61dfe3d915e 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -16,6 +16,7 @@ anchored = 1 density = 1 var/active = 1 //No sales pitches if off! + var/delay_product_spawn // If set, uses sleep() in product spawn proc (mostly for seeds to retrieve correct names). var/vend_ready = 1 //Are we ready to vend?? Is it time?? var/vend_delay = 10 //How long does it take to vend? var/datum/data/vending_product/currently_vending = null // A /datum/data/vending_product instance of what we're paying for right now. @@ -111,7 +112,7 @@ var/atom/temp = new typepath(null) var/datum/data/vending_product/R = new /datum/data/vending_product() - R.product_name = temp.name + R.product_path = typepath R.amount = amount R.price = price @@ -123,6 +124,13 @@ coin_records += R else product_records += R + + if(delay_product_spawn) + sleep(1) + R.product_name = temp.name + else + R.product_name = temp.name + // world << "Added: [R.product_name]] - [R.amount] - [R.product_path]" return @@ -814,6 +822,8 @@ product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" icon_state = "seeds" + delay_product_spawn = 1 + products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3, /obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3, diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 1ead014c2af..085fef94760 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -159,7 +159,7 @@ return // Advance plant age. - age += 1 * HYDRO_SPEED_MULTIPLIER + if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER // Maintain tray nutrient and water levels. if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) @@ -380,12 +380,14 @@ /obj/machinery/portable_atmospherics/hydroponics/proc/mutate(var/severity) + world << "Tray mutation proc called with [severity]." + // No seed, no mutations. if(!seed) return // Check if we should even bother working on the current seed datum. - if(seed.mutants.len && severity > 1 && prob(10+mutation_mod)) + if(seed.mutants. && seed.mutants.len && severity > 1 && prob(10+mutation_mod)) mutate_species() return @@ -573,7 +575,7 @@ reagent_value = mutagenic_reagents[R.id]+mutation_mod if(reagent_total >= reagent_value) if(prob(min(reagent_total*reagent_value,100))) - mutate(reagent_value > 10 ? 2 : 1) + mutate(reagent_total > 10 ? 2 : 1) S.reagents.clear_reagents() @@ -622,7 +624,7 @@ update_icon() else - user << "\red The [src] already has seeds in it!" + user << "\red \The [src] already has seeds in it!" else if (istype(O, /obj/item/weapon/reagent_containers/spray/plantbgone)) if(seed) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 0c87e6dcdd2..9f7947ccb2e 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -58,9 +58,9 @@ proc/populate_seed_list() //Tolerances. var/requires_nutrients = 1 // The plant can starve. - var/nutrient_consumption = 0.1 // Plant eats this much per tick. - var/requires_water = 1 // The plant can become dehydrated. - var/water_consumption = 1 // Plant drinks this much per tick. + var/nutrient_consumption = 0.25 // Plant eats this much per tick. + var/requires_water = 3 // The plant can become dehydrated. + var/water_consumption = 1 // Plant drinks this much per tick. var/ideal_heat = 293 // Preferred temperature in Kelvin. var/heat_tolerance = 20 // Departure from ideal that is survivable. var/ideal_light = 8 // Preferred light level in luminosity. @@ -104,9 +104,12 @@ proc/populate_seed_list() //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) + + world << "Seed mutation proc called with [degree]." + if(!degree || immutable) return - source_turf.visible_message("[display_name] quivers uneasily!") + source_turf.visible_message("\blue \The [display_name] quivers!") //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) @@ -115,7 +118,7 @@ proc/populate_seed_list() if(0) //Plant cancer! lifespan = max(0,lifespan-rand(1,5)) endurance = max(0,endurance-rand(10,20)) - source_turf.visible_message("[display_name] withers rapidly!") + source_turf.visible_message("\red \The [display_name] withers rapidly!") if(1) nutrient_consumption = max(0, min(5, nutrient_consumption + rand(-(degree*0.1),(degree*0.1)))) water_consumption = max(0, min(50, water_consumption + rand(-degree,degree))) @@ -134,7 +137,7 @@ proc/populate_seed_list() if(prob(degree*5)) carnivorous = max(0, min(2, carnivorous + rand(-degree,degree))) if(carnivorous) - source_turf.visible_message("[display_name] shudders hungrily.") + source_turf.visible_message("\blue \The [display_name] shudders hungrily.") if(6) weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) if(prob(degree*5)) parasite = !parasite @@ -148,7 +151,7 @@ proc/populate_seed_list() potency = max(0, min(200, potency + (rand(-20,20) * degree))) if(prob(degree*5)) spread = max(0, min(2, spread + rand(-1,1))) - source_turf.visible_message("[display_name] spasms visibly, shifting in the tray.") + source_turf.visible_message("\blue \The [display_name] spasms visibly, shifting in the tray.") if(9) maturation = max(0, min(30, maturation + (rand(-1,1) * degree))) if(prob(degree*5)) @@ -157,22 +160,22 @@ proc/populate_seed_list() if(prob(degree*2)) biolum = !biolum if(biolum) - source_turf.visible_message("[display_name] begins to glow!") + source_turf.visible_message("\blue \The [display_name] begins to glow!") if(prob(degree*2)) biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("[display_name]'s glow changes colour!") + source_turf.visible_message("\blue \The [display_name]'s glow changes colour!") else - source_turf.visible_message("[display_name]'s glow dims...") + source_turf.visible_message("\blue \The [display_name]'s glow dims...") if(11) if(prob(degree*2)) flowers = !flowers if(flowers) - source_turf.visible_message("[display_name] sprouts a bevy of flowers!") + source_turf.visible_message("\blue \The [display_name] sprouts a bevy of flowers!") if(prob(degree*2)) flower_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("[display_name]'s flowers changes colour!") + source_turf.visible_message("\blue \The [display_name]'s flowers changes colour!") else - source_turf.visible_message("[display_name]'s flowers wither and fall off.") + source_turf.visible_message("\blue \The [display_name]'s flowers wither and fall off.") return //Mutates a specific trait/set of traits. @@ -368,7 +371,7 @@ proc/populate_seed_list() yield_mod = 0 total_yield = yield else - total_yield = max(1,rand(1,((yield_mod+yield)))) + total_yield = max(1,rand(yield_mod,yield_mod+yield)) currently_querying = list() for(var/i = 0;i \The [user] fires \the [src] into \the [tray]!") + Fire(target,user) return + ..() + /obj/item/weapon/gun/energy/meteorgun name = "meteor gun" desc = "For the love of god, make sure you're aiming this the right way!" @@ -224,7 +233,7 @@ obj/item/weapon/gun/energy/staff/focus /* -This is called from +This is called from modules/mob/mob_movement.dm if you move you will be zoomed out modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. */ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index a0d31db14c8ec0343512864fa660e6a1778571c7..ba381b5bec4265b3378d34c4a971aa4910da394a 100644 GIT binary patch delta 39972 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 RKvjOgNdK~4xsF}<{{eNW0K5PI delta 39835 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 From 7f6b36e1dc9929e8c789012d9af747a95beed161 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 29 Jul 2014 00:25:46 +0930 Subject: [PATCH 30/75] Fixes some transposed values. --- code/modules/hydroponics/seed_datums.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 9f7947ccb2e..f8d6e654e24 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -59,8 +59,8 @@ proc/populate_seed_list() //Tolerances. var/requires_nutrients = 1 // The plant can starve. var/nutrient_consumption = 0.25 // Plant eats this much per tick. - var/requires_water = 3 // The plant can become dehydrated. - var/water_consumption = 1 // Plant drinks this much per tick. + var/requires_water = 1 // The plant can become dehydrated. + var/water_consumption = 3 // Plant drinks this much per tick. var/ideal_heat = 293 // Preferred temperature in Kelvin. var/heat_tolerance = 20 // Departure from ideal that is survivable. var/ideal_light = 8 // Preferred light level in luminosity. @@ -1403,4 +1403,4 @@ proc/populate_seed_list() maturation = 1 production = 1 yield = 1 - potency = 1 \ No newline at end of file + potency = 1 From 63ab44accc9efeafa02f6031e85ea2761e1d8585 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 17:30:51 +0200 Subject: [PATCH 31/75] Makes it possible for the AI to take and view images. --- baystation12.dme | 1 + baystation12.int | 5 ++ code/_onclick/ai.dm | 5 ++ code/modules/mob/living/silicon/ai/ai.dm | 5 +- code/modules/mob/transform_procs.dm | 2 + code/modules/paperwork/ai_photography.dm | 96 ++++++++++++++++++++++++ code/modules/paperwork/photography.dm | 47 +++++++----- 7 files changed, 142 insertions(+), 19 deletions(-) create mode 100644 code/modules/paperwork/ai_photography.dm diff --git a/baystation12.dme b/baystation12.dme index a820faad300..128c237d384 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1103,6 +1103,7 @@ #include "code\modules\organs\organ_internal.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\wound.dm" +#include "code\modules\paperwork\ai_photography.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\filingcabinet.dm" diff --git a/baystation12.int b/baystation12.int index b82874fded5..364c188ceb9 100644 --- a/baystation12.int +++ b/baystation12.int @@ -1,6 +1,11 @@ // BEGIN_INTERNALS /* MAP_ICON_TYPE: 0 +LAST_COMPILE_VERSION: 503.1224 +WINDOW: code\modules\paperwork\photography.dm;code\modules\mob\living\silicon\ai\ai.dm;code\_onclick\click.dm;code\_onclick\ai.dm;code\modules\mob\transform_procs.dm;code\game\objects\items\blueprints.dm;code\modules\paperwork\ai_photography.dm +DIR: code code\_onclick code\game\gamemodes code\game\gamemodes\mutiny code\game\gamemodes\mutiny\directives code\game\objects code\game\objects\items code\modules code\modules\mob code\modules\mob\living code\modules\mob\living\silicon code\modules\mob\living\silicon\ai code\modules\paperwork code\WorkInProgress\AI_Visibility icons icons\mob icons\obj icons\obj\atmospherics sound sound\vox +FILE: code\modules\paperwork\ai_photography.dm +LAST_COMPILE_TIME: 1406556860 AUTO_FILE_DIR: OFF */ // END_INTERNALS diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 204f39e69c9..64b35edbdf0 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -53,6 +53,11 @@ return next_move = world.time + 9 + if(aicamera.in_camera_mode) + aicamera.camera_mode_off() + aicamera.captureimage(A, usr) + return + /* AI restrained() currently does nothing if(restrained()) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index a2b375d3be7..660476f1673 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -32,6 +32,7 @@ var/list/ai_list = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null + var/obj/item/device/camera/ai_camera/aicamera = null var/custom_sprite = 0 //For our custom sprites //Hud stuff @@ -92,6 +93,8 @@ var/list/ai_list = list() aiRadio = new(src) aiRadio.myAi = src + aicamera = new/obj/item/device/camera/ai_camera(src) + if (istype(loc, /turf)) verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \ @@ -756,4 +759,4 @@ var/list/ai_list = list() src << "Accessing Subspace Transceiver control..." if (src.aiRadio) - src.aiRadio.interact(src) + src.aiRadio.interact(src) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6dbd8ffe0c7..05dc648c703 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -130,6 +130,8 @@ O.verbs += /mob/living/silicon/ai/proc/ai_store_location O.verbs += /mob/living/silicon/ai/proc/ai_goto_location O.verbs += /mob/living/silicon/ai/proc/ai_remove_location + O.verbs += /mob/living/silicon/ai/proc/ai_take_image + O.verbs += /mob/living/silicon/ai/proc/ai_view_images O.job = "AI" diff --git a/code/modules/paperwork/ai_photography.dm b/code/modules/paperwork/ai_photography.dm new file mode 100644 index 00000000000..ea8bdeef0df --- /dev/null +++ b/code/modules/paperwork/ai_photography.dm @@ -0,0 +1,96 @@ +/************** +* AI-specific * +**************/ +/datum/picture + var/name = "image" + var/list/fields = list() + +obj/item/device/camera/ai_camera //camera AI can take pictures with + name = "AI photo camera" + var/in_camera_mode = 0 + var/list/aipictures = list() + +/obj/item/device/camera/ai_camera/proc/injectaialbum(var/icon, var/img, var/desc, var/pixel_x, var/pixel_y) //stores image information to a list similar to that of the datacore + var/numberer = 1 + for(var/datum/picture in src.aipictures) + numberer++ + var/datum/picture/P = new() + P.fields["name"] = "Image [numberer]" + P.fields["icon"] = icon + P.fields["img"] = img + P.fields["desc"] = desc + P.fields["pixel_x"] = pixel_x + P.fields["pixel_y"] = pixel_y + + aipictures += P + usr << "Image recorded" + +/obj/item/device/camera/ai_camera/proc/viewpictures() + var/list/nametemp = list() + var/find + var/datum/picture/selection + if(src.aipictures.len == 0) + usr << "No images saved" + return + for(var/datum/picture/t in src.aipictures) + nametemp += t.fields["name"] + find = input("Select image (numbered in order taken)") in nametemp + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() + for(var/datum/picture/q in src.aipictures) + if(q.fields["name"] == find) + selection = q + break + P.icon = selection.fields["icon"] + P.img = selection.fields["img"] + P.desc = selection.fields["desc"] + P.pixel_x = selection.fields["pixel_x"] + P.pixel_y = selection.fields["pixel_y"] + + P.show(usr) + usr << P.desc + + // TG uses a special garbage collector.. qdel(P) + del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. + +/obj/item/device/camera/ai_camera/printpicture(mob/user, icon/temp, mobs, flag) + var/icon/small_img = icon(temp) + var/icon/ic = icon('icons/obj/items.dmi',"photo") + small_img.Scale(8, 8) + ic.Blend(small_img,ICON_OVERLAY, 10, 13) + var/icon = ic + var/img = temp + var/desc = mobs + var/pixel_x = rand(-10, 10) + var/pixel_y = rand(-10, 10) + + injectaialbum(icon, img, desc, pixel_x, pixel_y) + +/obj/item/device/camera/ai_camera/can_capture_turf(turf/T, mob/user) + var/mob/living/silicon/ai = user + return ai.TurfAdjacent(T) + +/obj/item/device/camera/ai_camera/proc/toggle_camera_mode() + if(in_camera_mode) + camera_mode_off() + else + camera_mode_on() + +/obj/item/device/camera/ai_camera/proc/camera_mode_off() + src.in_camera_mode = 0 + usr << "Camera Mode deactivated" + +/obj/item/device/camera/ai_camera/proc/camera_mode_on() + src.in_camera_mode = 1 + usr << "Camera Mode activated" + +/mob/living/silicon/ai/proc/ai_take_image() + set category = "AI Commands" + set name = "Take Image" + set desc = "Takes an image" + aicamera.toggle_camera_mode() + +/mob/living/silicon/ai/proc/ai_view_images() + set category = "AI Commands" + set name = "View Images" + set desc = "View images" + aicamera.viewpictures() \ No newline at end of file diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index f0d39337b6f..a61738691d0 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -212,7 +212,31 @@ /obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) if(!on || !pictures_left || ismob(target.loc)) return + captureimage(target, user, flag) + playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) + + pictures_left-- + desc = "A polaroid camera. It has [pictures_left] photos left." + user << "[pictures_left] photos left." + icon_state = icon_off + on = 0 + spawn(64) + icon_state = icon_on + on = 1 + +/obj/item/device/camera/proc/can_capture_turf(turf/T, mob/user) + var/mob/dummy = new(T) //Go go visibility check dummy + var/viewer = user + if(user.client) //To make shooting through security cameras possible + viewer = user.client.eye + var/can_see = (dummy in viewers(world.view, viewer)) != null + + dummy.loc = null + dummy = null //Alas, nameless creature //garbage collect it instead + return can_see + +/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) var/x_c = target.x - 1 var/y_c = target.y + 1 var/z_c = target.z @@ -223,21 +247,18 @@ for(var/i = 1; i <= 3; i++) for(var/j = 1; j <= 3; j++) var/turf/T = locate(x_c, y_c, z_c) - var/mob/dummy = new(T) //Go go visibility check dummy - var/viewer = user - if(user.client) //To make shooting through security cameras possible - viewer = user.client.eye - if(dummy in viewers(world.view, viewer)) + if(can_capture_turf(T, user)) temp.Blend(get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) + mobs += get_mobs(T, user) else temp.Blend(black, ICON_OVERLAY, 32 * (j-1), 64 - 32 * (i-1)) - mobs += get_mobs(T) - dummy.loc = null - dummy = null //Alas, nameless creature //garbage collect it instead x_c++ y_c-- x_c = x_c - 3 + printpicture(user, temp, mobs, flag) + +/obj/item/device/camera/proc/printpicture(mob/user, icon/temp, mobs, flag) var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() P.loc = user.loc if(!user.get_inactive_hand()) @@ -256,13 +277,3 @@ P.desc = mobs P.pixel_x = rand(-10, 10) P.pixel_y = rand(-10, 10) - playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) - - pictures_left-- - desc = "A polaroid camera. It has [pictures_left] photos left." - user << "[pictures_left] photos left." - icon_state = icon_off - on = 0 - spawn(64) - icon_state = icon_on - on = 1 \ No newline at end of file From df3fcbc9b23039d6dd81bf32a209f109b16526fa Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 11:54:01 -0600 Subject: [PATCH 32/75] Ported nearest-neighbor scaling from TG --- code/__HELPERS/icons.dm | 19 +++++++++++++++++++ code/modules/paperwork/photography.dm | 25 +++++++++---------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 8c400df60c1..e7a6bbba964 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -836,3 +836,22 @@ proc/adjust_brightness(var/color, var/value) RGB[2] = Clamp(RGB[2]+value,0,255) RGB[3] = Clamp(RGB[3]+value,0,255) return rgb(RGB[1],RGB[2],RGB[3]) + +proc/sort_atoms_by_layer(var/list/atoms) + // Comb sort icons based on levels + var/list/result = atoms.Copy() + var/gap = result.len + var/swapped = 1 + while (gap > 1 || swapped) + swapped = 0 + if(gap > 1) + gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient + if(gap < 1) + gap = 1 + for(var/i = 1; gap + i <= result.len; i++) + var/atom/l = result[i] //Fucking hate + var/atom/r = result[gap+i] //how lists work here + if(l.layer > r.layer) //no "result[i].layer" for me + result.Swap(i, gap + i) + swapped = 1 + return result diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 948b023ac4d..da6edc63ea7 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -53,10 +53,10 @@ /obj/item/weapon/photo/proc/show(mob/user as mob) user << browse_rsc(img, "tmp_photo.png") user << browse("[name]" \ - + "" \ - + "
Written on the back:
[scribble]" : ]"\ - + "", "window=book;size=200x[scribble ? 400 : 200]") + + "" \ + + "" \ + + "[scribble ? "
Written on the back:
[scribble]" : ""]"\ + + "", "window=book;size=192x[scribble ? 400 : 192]") onclose(user, "[name]") return @@ -164,18 +164,8 @@ if(A.invisibility) continue atoms.Add(A) - //Sorting icons based on levels. - //JMO: I have no idea what they were doing here before, but the magic number alone - // was worth replacing it over. "gap = round(gap / 1.247330950103979)" really? - var/list/sorted = list() - var/j - for(var/i = 1 to atoms.len) - var/atom/c = atoms[i] - for(j = sorted.len, j > 0, --j) - var/atom/c2 = sorted[j] - if(c2.layer <= c.layer) - break - sorted.Insert(j+1, c) + // Sort the atoms into their layers + var/list/sorted = sort_atoms_by_layer(atoms) for(var/i; i <= sorted.len; i++) var/atom/A = sorted[i] @@ -220,6 +210,9 @@ var/icon/temp = icon('icons/effects/96x96.dmi',"") var/icon/black = icon('icons/turf/space.dmi', "black") + // Initialize the photograph to black. + temp.Blend("#000", ICON_OVERLAY) + var/mobs = "" for(var/i = 1; i <= 3; i++) for(var/j = 1; j <= 3; j++) From e104647404219c96e289677419a6578a5b5b8589 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Mon, 28 Jul 2014 14:09:16 -0400 Subject: [PATCH 33/75] Sound fixes --- code/game/sound.dm | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/code/game/sound.dm b/code/game/sound.dm index 25e693a91c2..b5a4006e345 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -31,17 +31,7 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur var/turf/T = get_turf(M) if(T && T.z == turf_source.z) - //check that the air can transmit sound - var/datum/gas_mixture/environment = T.return_air() - if (!environment || environment.return_pressure() < SOUND_MINIMUM_PRESSURE) - if (distance > 1) - continue - - var/new_frequency = 32000 + (frequency - 32000)*0.125 //lower the frequency. very rudimentary - var/new_volume = vol*0.15 //muffle the sound, like we're hearing through contact - M.playsound_local(turf_source, soundin, new_volume, vary, new_frequency, falloff, is_global) - else - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global) var/const/FALLOFF_SOUNDS = 0.5 @@ -63,12 +53,34 @@ var/const/FALLOFF_SOUNDS = 0.5 if(isturf(turf_source)) // 3D sounds, the technology is here! var/turf/T = get_turf(src) - S.volume -= get_dist(T, turf_source) * 2 //multiplicative falloff to add on top of natural audio falloff. - var/datum/gas_mixture/environment = T.return_air() - if(get_dist(T, turf_source) > 2) - S.volume -= environment.return_pressure()/100 + 1 - if (S.volume < 0) - S.volume = 0 + + //sound volume falloff with distance + var/distance = get_dist(T, turf_source) + + S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff. + + //sound volume falloff with pressure + var/pressure_factor = 1.0 + + var/datum/gas_mixture/hearer_env = T.return_air() + var/datum/gas_mixture/source_env = turf_source.return_air() + + if (hearer_env && source_env) + var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) + + if (pressure < ONE_ATMOSPHERE) + pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) + else //in space + pressure_factor = 0 + + if (distance <= 1) + pressure_factor = max(pressure_factor, 0.15) //hearing through contact + + S.volume *= pressure_factor + + if (S.volume <= 0) + return //no volume means no sound + var/dx = turf_source.x - T.x // Hearing from the right/left S.x = dx var/dz = turf_source.y - T.y // Hearing from infront/behind From f0594b6e21dc5d9ec7905d819001f61723f0e0a8 Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 12:10:21 -0600 Subject: [PATCH 34/75] Made camera render turf effects. --- code/modules/paperwork/photography.dm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index da6edc63ea7..d563c9cc1e2 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -157,9 +157,10 @@ //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") - res.Blend(getFlatIcon(the_turf), blendMode2iconMode(the_turf.blend_mode),33,33) - var/atoms[] = list() + // Add outselves to the list of stuff to draw + atoms.Add(the_turf); + // As well as anything that isn't invisible. for(var/atom/A in the_turf) if(A.invisibility) continue atoms.Add(A) @@ -171,13 +172,18 @@ var/atom/A = sorted[i] if(A) var/icon/img = getFlatIcon(A)//build_composite_icon(A) - // Check if we're looking at a mob that's lying down - if(istype(A, /mob/living) && A:lying) - // If they are, apply that effect to their picture. - img.BecomeLying() + // If what we got back is actually a picture, draw it. if(istype(img, /icon)) + // Check if we're looking at a mob that's lying down + if(istype(A, /mob/living) && A:lying) + // If they are, apply that effect to their picture. + img.BecomeLying() res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x, 33 + A.pixel_y) + + + // Lastly, render any contained effects on top. + res.Blend(getFlatIcon(the_turf.loc), blendMode2iconMode(the_turf.blend_mode),33,33) return res From 6b1f696203415ec65eed8c7616aef7ff713d122c Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 12:44:42 -0600 Subject: [PATCH 35/75] Ported multi-turf behavior This allows for layering that moves across tiles and enables alternate methods of enumerating the tile list (not used at present.) --- code/modules/paperwork/photography.dm | 47 +++++++++++++++------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index d563c9cc1e2..dcc7c9f55e4 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -152,18 +152,22 @@ ..() -/obj/item/device/camera/proc/get_icon(turf/the_turf as turf) +/obj/item/device/camera/proc/get_icon(list/turfs, turf/center) + //Bigger icon base to capture those icons that were shifted to the next tile //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") + // Initialize the photograph to black. + res.Blend("#000", ICON_OVERLAY) var/atoms[] = list() - // Add outselves to the list of stuff to draw - atoms.Add(the_turf); - // As well as anything that isn't invisible. - for(var/atom/A in the_turf) - if(A.invisibility) continue - atoms.Add(A) + for(var/turf/the_turf in turfs) + // Add outselves to the list of stuff to draw + atoms.Add(the_turf); + // As well as anything that isn't invisible. + for(var/atom/A in the_turf) + if(A.invisibility) continue + atoms.Add(A) // Sort the atoms into their layers var/list/sorted = sort_atoms_by_layer(atoms) @@ -179,11 +183,17 @@ if(istype(A, /mob/living) && A:lying) // If they are, apply that effect to their picture. img.BecomeLying() - res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x, 33 + A.pixel_y) - + // Calculate where we are relative to the center of the photo + var/xoff = (A.x - center.x) * 32 + var/yoff = (A.y - center.y) * 32 + res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x + xoff, 33 + A.pixel_y + yoff) // Lastly, render any contained effects on top. - res.Blend(getFlatIcon(the_turf.loc), blendMode2iconMode(the_turf.blend_mode),33,33) + for(var/turf/the_turf in turfs) + // Calculate where we are relative to the center of the photo + var/xoff = (the_turf.x - center.x) * 32 + var/yoff = (the_turf.y - center.y) * 32 + res.Blend(getFlatIcon(the_turf.loc), blendMode2iconMode(the_turf.blend_mode),33 + xoff,33 + yoff) return res @@ -214,11 +224,8 @@ var/y_c = target.y + 1 var/z_c = target.z - var/icon/temp = icon('icons/effects/96x96.dmi',"") - var/icon/black = icon('icons/turf/space.dmi', "black") - // Initialize the photograph to black. - temp.Blend("#000", ICON_OVERLAY) + var/list/turfs = list() var/mobs = "" for(var/i = 1; i <= 3; i++) for(var/j = 1; j <= 3; j++) @@ -228,9 +235,7 @@ if(user.client) //To make shooting through security cameras possible viewer = user.client.eye if(dummy in viewers(world.view, viewer)) - temp.Blend(get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) - else - temp.Blend(black, ICON_OVERLAY, 32 * (j-1), 64 - 32 * (i-1)) + turfs.Add(T) mobs += get_mobs(T) dummy.loc = null dummy = null //Alas, nameless creature //garbage collect it instead @@ -238,12 +243,14 @@ y_c-- x_c = x_c - 3 + var/icon/photoimage = get_icon(turfs, target) + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() P.loc = user.loc if(!user.get_inactive_hand()) user.put_in_inactive_hand(P) - var/icon/small_img = icon(temp) - var/icon/tiny_img = icon(temp) + var/icon/small_img = icon(photoimage) + var/icon/tiny_img = icon(photoimage) var/icon/ic = icon('icons/obj/items.dmi',"photo") var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo") small_img.Scale(8, 8) @@ -252,7 +259,7 @@ pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) P.icon = ic P.tiny = pc - P.img = temp + P.img = photoimage P.desc = mobs P.pixel_x = rand(-10, 10) P.pixel_y = rand(-10, 10) From f5df1acaaa3379ab09c585117f2b5f492fca1643 Mon Sep 17 00:00:00 2001 From: JimTheCactus Date: Mon, 28 Jul 2014 13:05:29 -0600 Subject: [PATCH 36/75] Added handler for pixel stepping --- code/modules/paperwork/photography.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index dcc7c9f55e4..cbc119eaf5a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -186,6 +186,9 @@ // Calculate where we are relative to the center of the photo var/xoff = (A.x - center.x) * 32 var/yoff = (A.y - center.y) * 32 + if (istype(A,/atom/movable)) + xoff+=A:step_x + yoff+=A:step_y res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x + xoff, 33 + A.pixel_y + yoff) // Lastly, render any contained effects on top. From a5f6d417a1df65106c596682ab804bf4d1014b11 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 18:21:30 +0200 Subject: [PATCH 37/75] Expands the AI photo-camera so that it now has robot/cyborg support. Also implements DRY in practice. --- baystation12.dme | 3 +- code/_onclick/ai.dm | 6 +- code/_onclick/cyborg.dm | 8 + code/modules/mob/living/silicon/ai/ai.dm | 5 +- code/modules/mob/living/silicon/robot/laws.dm | 1 + .../mob/living/silicon/robot/photos.dm | 16 ++ .../modules/mob/living/silicon/robot/robot.dm | 3 +- .../modules/mob/living/silicon/robot/wires.dm | 1 + code/modules/mob/transform_procs.dm | 2 - code/modules/paperwork/ai_photography.dm | 96 ----------- code/modules/paperwork/photography.dm | 42 +++-- code/modules/paperwork/silicon_photography.dm | 157 ++++++++++++++++++ 12 files changed, 221 insertions(+), 119 deletions(-) create mode 100644 code/modules/mob/living/silicon/robot/photos.dm delete mode 100644 code/modules/paperwork/ai_photography.dm create mode 100644 code/modules/paperwork/silicon_photography.dm diff --git a/baystation12.dme b/baystation12.dme index 128c237d384..98fc485a45f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1037,6 +1037,7 @@ #include "code\modules\mob\living\silicon\robot\laws.dm" #include "code\modules\mob\living\silicon\robot\life.dm" #include "code\modules\mob\living\silicon\robot\login.dm" +#include "code\modules\mob\living\silicon\robot\photos.dm" #include "code\modules\mob\living\silicon\robot\robot.dm" #include "code\modules\mob\living\silicon\robot\robot_damage.dm" #include "code\modules\mob\living\silicon\robot\robot_items.dm" @@ -1103,7 +1104,6 @@ #include "code\modules\organs\organ_internal.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\wound.dm" -#include "code\modules\paperwork\ai_photography.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\filingcabinet.dm" @@ -1115,6 +1115,7 @@ #include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photography.dm" +#include "code\modules\paperwork\silicon_photography.dm" #include "code\modules\paperwork\stamps.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\batteryrack.dm" diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 64b35edbdf0..c6078c10ac8 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -53,9 +53,9 @@ return next_move = world.time + 9 - if(aicamera.in_camera_mode) - aicamera.camera_mode_off() - aicamera.captureimage(A, usr) + if(aiCamera.in_camera_mode) + aiCamera.camera_mode_off() + aiCamera.captureimage(A, usr) return /* diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index d86faacbd1f..04682c76ad9 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -37,6 +37,14 @@ face_atom(A) // change direction to face what you clicked on + if(aiCamera.in_camera_mode) + aiCamera.camera_mode_off() + if(is_component_functioning("camera")) + aiCamera.captureimage(A, usr) + else + src << "Your camera isn't functional." + return + /* cyborg restrained() currently does nothing if(restrained()) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 660476f1673..b40a3fb6add 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -32,7 +32,7 @@ var/list/ai_list = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null - var/obj/item/device/camera/ai_camera/aicamera = null + var/obj/item/device/camera/siliconcam/aiCamera = null var/custom_sprite = 0 //For our custom sprites //Hud stuff @@ -92,8 +92,7 @@ var/list/ai_list = list() aiMulti = new(src) aiRadio = new(src) aiRadio.myAi = src - - aicamera = new/obj/item/device/camera/ai_camera(src) + aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src) if (istype(loc, /turf)) verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index bff875a0d66..2d6a12e9664 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -18,6 +18,7 @@ else lawsync() + photosync() src << "Laws synced with AI, be sure to note any changes." if(mind && mind.special_role == "traitor" && mind.original == src) src << "Remember, your AI does NOT share or know about your law 0." diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm new file mode 100644 index 00000000000..31b40cf60df --- /dev/null +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -0,0 +1,16 @@ +/mob/living/silicon/robot/proc/photosync() + var/obj/item/device/camera/siliconcam/master_cam = connected_ai ? connected_ai.aiCamera : null + if (!master_cam) + return + + if(!aiCamera) + aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) + + var/synced + synced = 0 + for(var/datum/picture/z in aiCamera.aipictures) + if (!(master_cam.aipictures.Find(z))) + aiCamera.printpicture(null, z) + synced = 1 + if(synced) + src << "Locally saved images synced with AI. Images were retained in local database in case of loss of connection with the AI." diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 273df70dd95..15342d04b50 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -65,6 +65,7 @@ var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. var/braintype = "Cyborg" var/pose + var/obj/item/device/camera/siliconcam/aiCamera = null //photography /mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0) spark_system = new /datum/effect/effect/system/spark_spread() @@ -97,6 +98,7 @@ if(connected_ai) connected_ai.connected_robots += src lawsync() + photosync() lawupdate = 1 else lawupdate = 0 @@ -138,7 +140,6 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - if(istype(src,/mob/living/silicon/robot/drone)) playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) else diff --git a/code/modules/mob/living/silicon/robot/wires.dm b/code/modules/mob/living/silicon/robot/wires.dm index 10b6832fe4b..9ed4320c844 100644 --- a/code/modules/mob/living/silicon/robot/wires.dm +++ b/code/modules/mob/living/silicon/robot/wires.dm @@ -74,6 +74,7 @@ if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh if (src.lawupdate) src.lawsync() + src.photosync() if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI if(!src.emagged) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 05dc648c703..6dbd8ffe0c7 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -130,8 +130,6 @@ O.verbs += /mob/living/silicon/ai/proc/ai_store_location O.verbs += /mob/living/silicon/ai/proc/ai_goto_location O.verbs += /mob/living/silicon/ai/proc/ai_remove_location - O.verbs += /mob/living/silicon/ai/proc/ai_take_image - O.verbs += /mob/living/silicon/ai/proc/ai_view_images O.job = "AI" diff --git a/code/modules/paperwork/ai_photography.dm b/code/modules/paperwork/ai_photography.dm deleted file mode 100644 index ea8bdeef0df..00000000000 --- a/code/modules/paperwork/ai_photography.dm +++ /dev/null @@ -1,96 +0,0 @@ -/************** -* AI-specific * -**************/ -/datum/picture - var/name = "image" - var/list/fields = list() - -obj/item/device/camera/ai_camera //camera AI can take pictures with - name = "AI photo camera" - var/in_camera_mode = 0 - var/list/aipictures = list() - -/obj/item/device/camera/ai_camera/proc/injectaialbum(var/icon, var/img, var/desc, var/pixel_x, var/pixel_y) //stores image information to a list similar to that of the datacore - var/numberer = 1 - for(var/datum/picture in src.aipictures) - numberer++ - var/datum/picture/P = new() - P.fields["name"] = "Image [numberer]" - P.fields["icon"] = icon - P.fields["img"] = img - P.fields["desc"] = desc - P.fields["pixel_x"] = pixel_x - P.fields["pixel_y"] = pixel_y - - aipictures += P - usr << "Image recorded" - -/obj/item/device/camera/ai_camera/proc/viewpictures() - var/list/nametemp = list() - var/find - var/datum/picture/selection - if(src.aipictures.len == 0) - usr << "No images saved" - return - for(var/datum/picture/t in src.aipictures) - nametemp += t.fields["name"] - find = input("Select image (numbered in order taken)") in nametemp - var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() - for(var/datum/picture/q in src.aipictures) - if(q.fields["name"] == find) - selection = q - break - P.icon = selection.fields["icon"] - P.img = selection.fields["img"] - P.desc = selection.fields["desc"] - P.pixel_x = selection.fields["pixel_x"] - P.pixel_y = selection.fields["pixel_y"] - - P.show(usr) - usr << P.desc - - // TG uses a special garbage collector.. qdel(P) - del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. - -/obj/item/device/camera/ai_camera/printpicture(mob/user, icon/temp, mobs, flag) - var/icon/small_img = icon(temp) - var/icon/ic = icon('icons/obj/items.dmi',"photo") - small_img.Scale(8, 8) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) - var/icon = ic - var/img = temp - var/desc = mobs - var/pixel_x = rand(-10, 10) - var/pixel_y = rand(-10, 10) - - injectaialbum(icon, img, desc, pixel_x, pixel_y) - -/obj/item/device/camera/ai_camera/can_capture_turf(turf/T, mob/user) - var/mob/living/silicon/ai = user - return ai.TurfAdjacent(T) - -/obj/item/device/camera/ai_camera/proc/toggle_camera_mode() - if(in_camera_mode) - camera_mode_off() - else - camera_mode_on() - -/obj/item/device/camera/ai_camera/proc/camera_mode_off() - src.in_camera_mode = 0 - usr << "Camera Mode deactivated" - -/obj/item/device/camera/ai_camera/proc/camera_mode_on() - src.in_camera_mode = 1 - usr << "Camera Mode activated" - -/mob/living/silicon/ai/proc/ai_take_image() - set category = "AI Commands" - set name = "Take Image" - set desc = "Takes an image" - aicamera.toggle_camera_mode() - -/mob/living/silicon/ai/proc/ai_view_images() - set category = "AI Commands" - set name = "View Images" - set desc = "View images" - aicamera.viewpictures() \ No newline at end of file diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index a61738691d0..d713390fd4e 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -209,7 +209,6 @@ mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." return mob_detail - /obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) if(!on || !pictures_left || ismob(target.loc)) return captureimage(target, user, flag) @@ -256,13 +255,10 @@ y_c-- x_c = x_c - 3 - printpicture(user, temp, mobs, flag) + var/datum/picture/P = createpicture(user, temp, mobs, flag) + printpicture(user, P) -/obj/item/device/camera/proc/printpicture(mob/user, icon/temp, mobs, flag) - var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() - P.loc = user.loc - if(!user.get_inactive_hand()) - user.put_in_inactive_hand(P) +/obj/item/device/camera/proc/createpicture(mob/user, icon/temp, mobs, flag) var/icon/small_img = icon(temp) var/icon/tiny_img = icon(temp) var/icon/ic = icon('icons/obj/items.dmi',"photo") @@ -271,9 +267,29 @@ tiny_img.Scale(4, 4) ic.Blend(small_img,ICON_OVERLAY, 10, 13) pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) - P.icon = ic - P.tiny = pc - P.img = temp - P.desc = mobs - P.pixel_x = rand(-10, 10) - P.pixel_y = rand(-10, 10) + + var/datum/picture/P = new() + P.fields["author"] = user + P.fields["icon"] = ic + P.fields["tiny"] = pc + P.fields["img"] = temp + P.fields["desc"] = mobs + P.fields["pixel_x"] = rand(-10, 10) + P.fields["pixel_y"] = rand(-10, 10) + + return P + +/obj/item/device/camera/proc/printpicture(mob/user, var/datum/picture/P) + var/obj/item/weapon/photo/Photo = new/obj/item/weapon/photo() + Photo.loc = user.loc + if(!user.get_inactive_hand()) + user.put_in_inactive_hand(Photo) + Photo.construct(P) + +/obj/item/weapon/photo/proc/construct(var/datum/picture/P) + icon = P.fields["icon"] + tiny = P.fields["tiny"] + img = P.fields["img"] + desc = P.fields["desc"] + pixel_x = P.fields["pixel_x"] + pixel_y = P.fields["pixel_y"] diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm new file mode 100644 index 00000000000..e5041ab96a4 --- /dev/null +++ b/code/modules/paperwork/silicon_photography.dm @@ -0,0 +1,157 @@ +/************** +* AI-specific * +**************/ +/datum/picture + var/name = "image" + var/list/fields = list() + +/datum/inject + var/name = "image" + var/list/fields = list() + +/obj/item/device/camera/siliconcam + var/in_camera_mode = 0 + var/photos_taken = 0 + var/list/aipictures = list() + +/obj/item/device/camera/siliconcam/ai_camera //camera AI can take pictures with + name = "AI photo camera" + +/obj/item/device/camera/siliconcam/robot_camera //camera cyborgs can take pictures with + name = "Cyborg photo camera" + +/obj/item/device/camera/siliconcam/proc/injectaialbum(var/datum/picture/P, var/sufix = "") //stores image information to a list similar to that of the datacore + photos_taken++ + P.fields["name"] = "Image [photos_taken][sufix]" + aipictures += P + +/obj/item/device/camera/siliconcam/proc/injectmasteralbum(var/datum/picture/P) //stores image information to a list similar to that of the datacore + var/mob/living/silicon/robot/C = src.loc + if(C.connected_ai) + var/mob/A = P.fields["author"] + C.connected_ai.aiCamera.injectaialbum(P, " (taken by [A.name])") + C.connected_ai << "Image recorded and saved by [name]" + usr << "Image recorded and saved to remote database" //feedback to the Cyborg player that the picture was taken + else + injectaialbum(P) + usr << "Image recorded" + +/obj/item/device/camera/siliconcam/proc/selectpicture(obj/item/device/camera/siliconcam/cam) + var/list/nametemp = list() + var/find + if(cam.aipictures.len == 0) + usr << "No images saved" + return + for(var/datum/picture/t in cam.aipictures) + nametemp += t.fields["name"] + find = input("Select image (numbered in order taken)") in nametemp + + for(var/datum/picture/q in cam.aipictures) + if(q.fields["name"] == find) + return q + +/obj/item/device/camera/siliconcam/proc/viewpictures(obj/item/device/camera/siliconcam/cam) + var/datum/picture/selection = selectpicture(cam) + + if(!selection) + return + + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() + P.construct(selection) + P.show(usr) + usr << P.desc + + // TG uses a special garbage collector.. qdel(P) + del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. + +/obj/item/device/camera/siliconcam/proc/deletepicture(obj/item/device/camera/siliconcam/cam) + var/datum/picture/selection = selectpicture(cam) + + if(!selection) + return + + cam.aipictures -= selection + usr << "Image deleted" + +/obj/item/device/camera/siliconcam/ai_camera/can_capture_turf(turf/T, mob/user) + var/mob/living/silicon/ai = user + return ai.TurfAdjacent(T) + +/obj/item/device/camera/siliconcam/proc/toggle_camera_mode() + if(in_camera_mode) + camera_mode_off() + else + camera_mode_on() + +/obj/item/device/camera/siliconcam/proc/camera_mode_off() + src.in_camera_mode = 0 + usr << "Camera Mode deactivated" + +/obj/item/device/camera/siliconcam/proc/camera_mode_on() + src.in_camera_mode = 1 + usr << "Camera Mode activated" + +/obj/item/device/camera/siliconcam/ai_camera/printpicture(mob/user, datum/picture/P) + injectaialbum(P) + usr << "Image recorded" + +/obj/item/device/camera/siliconcam/robot_camera/printpicture(mob/user, datum/picture/P) + injectmasteralbum(P) + +/obj/item/device/camera/siliconcam/ai_camera/verb/take_image() + set category = "AI Commands" + set name = "Take Image" + set desc = "Takes an image" + set src in usr + + toggle_camera_mode() + +/obj/item/device/camera/siliconcam/ai_camera/verb/view_images() + set category = "AI Commands" + set name = "View Images" + set desc = "View images" + set src in usr + + viewpictures(src) + +/obj/item/device/camera/siliconcam/ai_camera/verb/delete_images() + set category = "AI Commands" + set name = "Delete Image" + set desc = "Delete image" + set src in usr + + deletepicture(src) + +/obj/item/device/camera/siliconcam/robot_camera/verb/take_image() + set category ="Robot Commands" + set name = "Take Image" + set desc = "Takes an image" + set src in usr + + toggle_camera_mode() + +/obj/item/device/camera/siliconcam/robot_camera/verb/view_images() + set category ="Robot Commands" + set name = "View Images" + set desc = "View images" + set src in usr + + var/obj/item/device/camera/siliconcam/cam = getsource() + viewpictures(cam) + +/obj/item/device/camera/siliconcam/robot_camera/verb/delete_images() + set category = "Robot Commands" + set name = "Delete Image" + set desc = "Delete a local image" + set src in usr + + deletepicture(src) + +obj/item/device/camera/siliconcam/proc/getsource() + var/mob/living/silicon/robot/C = src.loc + var/obj/item/device/camera/siliconcam/Cinfo + if(C.connected_ai) + Cinfo = C.connected_ai.aiCamera + else + Cinfo = src + return Cinfo From 26c5b9efcd199ddc842270bd950b4f6189a01a16 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 28 Jul 2014 23:53:34 +0200 Subject: [PATCH 38/75] Fixes #5824 by ensuring consistent ready button placement. --- maps/tgstation2.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 1d6710fffa9..a320e3401c3 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -6619,7 +6619,7 @@ "cxo" = (/turf/simulated/floor/beach/sand{tag = "icon-desert1"; icon_state = "desert1"},/area/holodeck/source_beach) "cxp" = (/turf/simulated/floor/beach/sand{tag = "icon-desert4"; icon_state = "desert4"},/area/holodeck/source_beach) "cxq" = (/turf/simulated/floor/beach/sand{tag = "icon-desert0"; icon_state = "desert0"},/area/holodeck/source_beach) -"cxr" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = -24},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_thunderdomecourt) +"cxr" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cxs" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cxt" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cxu" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_boxingcourt) @@ -6710,7 +6710,7 @@ "czb" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_basketball) "czc" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "czd" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_thunderdomecourt) -"cze" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = -24},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_thunderdomecourt) +"cze" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "czf" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_boxingcourt) "czg" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_boxingcourt) "czh" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_boxingcourt) From 9680cd85b740ff96286edc22dbc7be427e6b2617 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Mon, 28 Jul 2014 20:51:04 -0400 Subject: [PATCH 39/75] Fixes chest not being coloured by necrosis --- code/modules/mob/living/carbon/human/update_icons.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1fa7e6349d8..5a06f2cfbea 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -251,7 +251,7 @@ proc/get_damage_icon_part(damage_state, body_part) icon_key = "[icon_key]0" else if(part.status & ORGAN_ROBOT) icon_key = "[icon_key]2" - else if(part.status & ORGAN_DEAD) //Do we even have necrosis in our current code? ~Z + else if(part.status & ORGAN_DEAD) icon_key = "[icon_key]3" else icon_key = "[icon_key]1" @@ -274,6 +274,10 @@ proc/get_damage_icon_part(damage_state, body_part) //No icon stored, so we need to start with a basic one. var/datum/organ/external/chest = get_organ("chest") base_icon = chest.get_icon(g) + + if(chest.status & ORGAN_DEAD) + base_icon.ColorTone(necrosis_color_mod) + base_icon.SetIntensity(0.7) for(var/datum/organ/external/part in organs) From 7b084ed3496fd8203a643a5b3476137d51a7a2f8 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 29 Jul 2014 12:38:21 +0930 Subject: [PATCH 40/75] Fixed diona pods being mutable, fixed a few other tweaks, added cuttings. --- code/datums/supplypacks.dm | 5 +++- code/modules/hydroponics/hydro_tools.dm | 6 ++++- code/modules/hydroponics/hydro_tray.dm | 32 +++++++++++++++++++---- code/modules/hydroponics/seed_datums.dm | 12 ++++++--- code/modules/hydroponics/seed_machines.dm | 10 ++++--- code/modules/hydroponics/seeds.dm | 8 ++++++ 6 files changed, 58 insertions(+), 15 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 74da3c321fd..1e267e524f3 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -266,7 +266,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/minihoe, /obj/item/device/analyzer/plant_analyzer, /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron) // Updated with new things + /obj/item/clothing/suit/apron, + /obj/item/weapon/minihoe, + /obj/item/weapon/storage/box/botanydisk + ) // Updated with new things cost = 15 containertype = /obj/structure/closet/crate/hydroponics containername = "Hydroponics crate" diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 7d2836d1012..e7d0ce3865a 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -1,4 +1,8 @@ -//Analyzer, pestkillers, weedkillers, nutrients, hatchets. +//Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters. + +/obj/item/weapon/wirecutters/clippers + name = "plant clippers" + desc = "A tool used to take samples from plants." /obj/item/device/analyzer/plant_analyzer name = "plant analyzer" diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 085fef94760..5359cd82154 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -30,6 +30,7 @@ var/lastcycle = 0 // Cycle timing/tracking var. var/cycledelay = 150 // Delay per cycle. var/closed_system // If set, the tray will attempt to take atmos from a pipe. + var/force_update // Seed details/line data. var/datum/seed/seed = null // The currently planted seed @@ -117,6 +118,10 @@ /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) + //Don't act on seeds like dionaea that shouldn't change. + if(seed && seed.immutable) + return + //Override for somatoray projectiles. if(istype(Proj ,/obj/item/projectile/energy/floramut) && prob(20)) mutate(1) @@ -138,8 +143,11 @@ /obj/machinery/portable_atmospherics/hydroponics/process() // Update values every cycle rather than every process() tick. - if(world.time < (lastcycle + cycledelay)) + if(force_update) + force_update = 0 + else if(world.time < (lastcycle + cycledelay)) return + lastcycle = world.time // Weeds like water and nutrients, there's a chance the weed population will increase. @@ -380,8 +388,6 @@ /obj/machinery/portable_atmospherics/hydroponics/proc/mutate(var/severity) - world << "Tray mutation proc called with [severity]." - // No seed, no mutations. if(!seed) return @@ -439,7 +445,22 @@ /obj/machinery/portable_atmospherics/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/weapon/reagent_containers/glass)) + if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/weapon/scalpel)) + + if(!seed) + user << "There is nothing to take a sample from in \the [src]." + return + + seed.harvest(user,yield_mod,1) + health -= (rand(1,5)*10) + check_level_sanity() + + force_update = 1 + process() + + return + + else if (istype(O, /obj/item/weapon/reagent_containers/glass)) var/b_amount = O.reagents.get_reagent_amount("water") if(b_amount > 0 && waterlevel < 100) if(b_amount + waterlevel > 100) @@ -615,7 +636,8 @@ seed = S.seed //Grab the seed datum. dead = 0 age = 1 - health = seed.endurance + //Snowflakey, maybe move this to the seed datum + health = (istype(S, /obj/item/seeds/cutting) ? round(seed.endurance/rand(2,5)) : seed.endurance) lastcycle = world.time del(O) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index f8d6e654e24..1a30949ca3a 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -105,8 +105,6 @@ proc/populate_seed_list() //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - world << "Seed mutation proc called with [degree]." - if(!degree || immutable) return source_turf.visible_message("\blue \The [display_name] quivers!") @@ -346,7 +344,7 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) if(!user) return @@ -358,7 +356,7 @@ proc/populate_seed_list() if(!got_product) user << "\red You fail to harvest anything useful." else - user << "You harvest from the [display_name]." + user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." //This may be a new line. Update the global if it is. if(name == "new line" || !(name in seed_types)) @@ -366,6 +364,12 @@ proc/populate_seed_list() name = "[uid]" seed_types[name] = src + if(harvest_sample) + var/obj/item/seeds/seeds = new(get_turf(user)) + seeds.seed_type = name + seeds.update_seed() + return + var/total_yield if(isnull(yield_mod) || yield_mod < 1) yield_mod = 0 diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 510f1f6f57a..e1cf0dfaccc 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -85,16 +85,18 @@ /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/seeds)) if(seed) - if(seed.seed.immutable) - user << "That seed is not compatible with our genetics technology." - else - user << "There is already a seed loaded." + user << "There is already a seed loaded." + + var/obj/item/seeds/S =W + if(S.seed && S.seed.immutable) + user << "That seed is not compatible with our genetics technology." else user.drop_item(W) W.loc = src seed = W user << "You load [W] into [src]." return + if(istype(W,/obj/item/weapon/screwdriver)) open = !open user << "\blue You [open ? "open" : "close"] the maintenance panel." diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index dbc13158ec3..d0afda2e6fb 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -32,6 +32,14 @@ if(seed && !seed.roundstart) usr << "It's tagged as variety #[seed.uid]." +/obj/item/seeds/cutting + name = "cuttings" + desc = "Some plant cuttings." + +/obj/item/seeds/cutting/update_appearance() + ..() + src.name = "packet of [seed.seed_name] cuttings" + /obj/item/seeds/replicapod seed_type = "diona" From 89be9e5f43db5d1718604a14c7481dd059b7b2a8 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 29 Jul 2014 13:24:52 +0930 Subject: [PATCH 41/75] More adjustments. Implemented gas exuding/consumption (currently unused). Implemented cuttings, fixed some issues. --- code/modules/hydroponics/hydro_tools.dm | 4 +- code/modules/hydroponics/hydro_tray.dm | 61 ++++++++++++++++++++--- code/modules/hydroponics/seed_datums.dm | 24 ++++----- code/modules/hydroponics/seed_machines.dm | 2 +- 4 files changed, 71 insertions(+), 20 deletions(-) diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index e7d0ce3865a..f39fc0ea868 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -71,7 +71,9 @@ if(grown_seed.harvest_repeat) dat += "This plant can be harvested repeatedly.
" - if(grown_seed.immutable) + if(grown_seed.immutable == -1) + dat += "This plant is highly mutable.
" + else if(grown_seed.immutable > 0) dat += "This plant does not possess genetics that are alterable.
" if(grown_seed.products && grown_seed.products.len) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 5359cd82154..d391e33f524 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -119,7 +119,7 @@ /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Don't act on seeds like dionaea that shouldn't change. - if(seed && seed.immutable) + if(seed && seed.immutable > 0) return //Override for somatoray projectiles. @@ -169,6 +169,11 @@ // Advance plant age. if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER + //Highly mutable plants have a chance of mutating every tick. + if(seed.immutable == -1) + var/mut_prob = rand(1,100) + if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) + // Maintain tray nutrient and water levels. if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.nutrient_consumption * HYDRO_SPEED_MULTIPLIER) @@ -196,10 +201,23 @@ // If atmos input is not there, grab from turf. if(!environment) if(istype(T)) - environment = T.return_air() - if(!environment) //We're in a crate or nullspace, bail out. + environment = T.air + if(!environment) return + // Handle gas consumption. + if(seed.consume_gasses && seed.consume_gasses.len) + var/missing_gas = 0 + for(var/gas in seed.consume_gasses) + if(environment && environment.gas && environment.gas[gas] && \ + environment.gas[gas] >= seed.consume_gasses[gas]) + environment.adjust_gas(gas,-seed.consume_gasses[gas],1) + else + missing_gas++ + + if(missing_gas > 0) + health -= missing_gas * HYDRO_SPEED_MULTIPLIER + // Process it. var/pressure = environment.return_pressure() if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance) @@ -208,6 +226,13 @@ if(abs(environment.temperature - seed.ideal_heat) > seed.heat_tolerance) health -= healthmod + // Handle gas production. + if(seed.exude_gasses && seed.exude_gasses.len) + var/datum/gas_mixture/exuded = new + for(var/gas in seed.exude_gasses) + exuded.adjust_gas(gas,seed.exude_gasses[gas*seed.potency],1) //This will need adjustment since it produces moles. + loc.assume_air(exuded) + // Handle light requirements. var/area/A = T.loc if(A) @@ -257,13 +282,14 @@ pestlevel = 0 // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(age > seed.production && (age - lastproduce) > seed.production && (!harvest && !dead)) + else if(seed.products && seed.products.len && age > seed.production && \ + (age - lastproduce) > seed.production && (!harvest && !dead)) + harvest = 1 lastproduce = age if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase pestlevel += 1 * HYDRO_SPEED_MULTIPLIER - check_level_sanity() update_icon() return @@ -757,7 +783,30 @@ usr << "[src] is \red filled with weeds!" if(pestlevel >= 5) usr << "[src] is \red filled with tiny worms!" - usr << text ("") + if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) + + var/turf/T = loc + var/datum/gas_mixture/environment + + if(closed_system && (connected_port || holding)) + environment = air_contents + + if(!environment) + if(istype(T)) + environment = T.return_air() + + if(!environment) //We're in a crate or nullspace, bail out. + return + + var/area/A = T.loc + var/light_available + if(A) + if(A.lighting_use_dynamic) + light_available = max(0,min(10,T.lighting_lumcount)-5) + else + light_available = 5 + + usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid() set name = "Toggle Tray Lid" diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 1a30949ca3a..fa5af7c78c7 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -83,7 +83,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable // If set, plant will never mutate. + var/immutable = 0 // If set, plant will never mutate. If -1, plant has a chance of mutating during process(). var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -99,13 +99,13 @@ proc/populate_seed_list() //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || immutable) return 0 + if(!mutants || !mutants.len || immutable > 0) return 0 return pick(mutants) //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - if(!degree || immutable) return + if(!degree || immutable > 0) return source_turf.visible_message("\blue \The [display_name] quivers!") @@ -179,7 +179,7 @@ proc/populate_seed_list() //Mutates a specific trait/set of traits. /datum/seed/proc/apply_gene(var/datum/plantgene/gene) - if(!gene || !gene.values || immutable) return + if(!gene || !gene.values || immutable > 0) return switch(gene.genetype) @@ -209,11 +209,12 @@ proc/populate_seed_list() else chems[rid] = gene.values[2][rid] - //TODO. - //if(!exude_gasses) exude_gasses = list() - //exude_gasses |= gene.values[3] - //for(var/gas in exude_gasses) - // exude_gasses[gas] = max(1,round(exude_gasses[gas]/2)) + var/list/new_gasses = gene.values[3] + if(istype(new_gasses)) + if(!exude_gasses) exude_gasses = list() + exude_gasses |= new_gasses + for(var/gas in exude_gasses) + exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) alter_temp = gene.values[4] potency = gene.values[5] @@ -348,7 +349,6 @@ proc/populate_seed_list() if(!user) return - //TODO: check for failing to harvest. var/got_product if(!isnull(products) && products.len && yield > 0) got_product = 1 @@ -389,7 +389,6 @@ proc/populate_seed_list() handle_living_product(product) // Make sure the product is inheriting the correct seed type reference. - // TODO: can this be collapsed into one type check since they share vars? else if(istype(product,/obj/item/weapon/reagent_containers/food/snacks/grown)) var/obj/item/weapon/reagent_containers/food/snacks/grown/current_product = product current_product.plantname = name @@ -403,7 +402,7 @@ proc/populate_seed_list() // be put into the global datum list until the product is harvested, though. /datum/seed/proc/diverge(var/modified) - if(immutable) return + if(immutable > 0) return //Set up some basic information. var/datum/seed/new_seed = new @@ -1170,6 +1169,7 @@ proc/populate_seed_list() yield = -1 potency = -1 growth_stages = 4 + immutable = -1 /datum/seed/whitebeets name = "whitebeet" diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index e1cf0dfaccc..837abe7211a 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -88,7 +88,7 @@ user << "There is already a seed loaded." var/obj/item/seeds/S =W - if(S.seed && S.seed.immutable) + if(S.seed && S.seed.immutable > 0) user << "That seed is not compatible with our genetics technology." else user.drop_item(W) From 2f8bb7e135c3bdbcccdfd055f19836c7bfc6421d Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Tue, 29 Jul 2014 12:02:48 +0200 Subject: [PATCH 42/75] Fixes runtime errors. AIs and cyborgs can now attach their photos to newscasters as well as photocopy them. --- baystation12.int | 5 ---- code/game/machinery/newscaster.dm | 17 ++++++++++--- code/modules/mob/living/silicon/ai/ai.dm | 1 - .../mob/living/silicon/robot/drone/drone.dm | 4 +++ .../mob/living/silicon/robot/photos.dm | 3 --- .../modules/mob/living/silicon/robot/robot.dm | 9 +++---- code/modules/mob/living/silicon/silicon.dm | 2 ++ code/modules/paperwork/photocopier.dm | 23 +++++++++++++++++ code/modules/paperwork/silicon_photography.dm | 25 +++++++++++-------- 9 files changed, 62 insertions(+), 27 deletions(-) diff --git a/baystation12.int b/baystation12.int index 364c188ceb9..b82874fded5 100644 --- a/baystation12.int +++ b/baystation12.int @@ -1,11 +1,6 @@ // BEGIN_INTERNALS /* MAP_ICON_TYPE: 0 -LAST_COMPILE_VERSION: 503.1224 -WINDOW: code\modules\paperwork\photography.dm;code\modules\mob\living\silicon\ai\ai.dm;code\_onclick\click.dm;code\_onclick\ai.dm;code\modules\mob\transform_procs.dm;code\game\objects\items\blueprints.dm;code\modules\paperwork\ai_photography.dm -DIR: code code\_onclick code\game\gamemodes code\game\gamemodes\mutiny code\game\gamemodes\mutiny\directives code\game\objects code\game\objects\items code\modules code\modules\mob code\modules\mob\living code\modules\mob\living\silicon code\modules\mob\living\silicon\ai code\modules\paperwork code\WorkInProgress\AI_Visibility icons icons\mob icons\obj icons\obj\atmospherics sound sound\vox -FILE: code\modules\paperwork\ai_photography.dm -LAST_COMPILE_TIME: 1406556860 AUTO_FILE_DIR: OFF */ // END_INTERNALS diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index b1783b1707c..fba49279470 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -748,16 +748,27 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob) if(photo) - photo.loc = src.loc - user.put_in_inactive_hand(photo) + if(!issilicon(user)) + photo.loc = src.loc + user.put_in_inactive_hand(photo) photo = null if(istype(user.get_active_hand(), /obj/item/weapon/photo)) photo = user.get_active_hand() user.drop_item() photo.loc = src + else if(istype(user,/mob/living/silicon)) + var/mob/living/silicon/tempAI = user + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return - + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() + P.construct(selection) + photo = P //######################################################################################################################## diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b40a3fb6add..0fe0ddc93d6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -32,7 +32,6 @@ var/list/ai_list = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null - var/obj/item/device/camera/siliconcam/aiCamera = null var/custom_sprite = 0 //For our custom sprites //Hud stuff diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 0ab4e42028d..cd0cbc9e2ce 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -61,6 +61,10 @@ flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'" updateicon() +/mob/living/silicon/robot/drone/init() + new/obj/item/device/camera/siliconcam/drone_camera(src) + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + //Redefining some robot procs... /mob/living/silicon/robot/drone/updatename() real_name = "maintenance drone ([rand(100,999)])" diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm index 31b40cf60df..fbcc3bf4842 100644 --- a/code/modules/mob/living/silicon/robot/photos.dm +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -3,9 +3,6 @@ if (!master_cam) return - if(!aiCamera) - aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) - var/synced synced = 0 for(var/datum/picture/z in aiCamera.aipictures) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 15342d04b50..4daa0f5cf8e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -65,7 +65,6 @@ var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. var/braintype = "Cyborg" var/pose - var/obj/item/device/camera/siliconcam/aiCamera = null //photography /mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0) spark_system = new /datum/effect/effect/system/spark_spread() @@ -139,11 +138,11 @@ hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + init() - if(istype(src,/mob/living/silicon/robot/drone)) - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) - else - playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) +/mob/living/silicon/robot/proc/init() + new/obj/item/device/camera/siliconcam/robot_camera(src) + playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) // setup the PDA and its name /mob/living/silicon/robot/proc/setup_PDA() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 99adb65ed00..d730bd9b5f7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -13,6 +13,8 @@ var/speak_exclamation = "declares" var/speak_query = "queries" + var/obj/item/device/camera/siliconcam/aiCamera = null //photography + /mob/living/silicon/proc/show_laws() return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 7f006325e6c..6963fe2f75b 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -34,6 +34,8 @@ dat += "+

" else if(toner) dat += "Please insert paper to copy.

" + if(istype(user,/mob/living/silicon)) + dat += "Print photo from database

" dat += "Current toner level: [toner]" if(!toner) dat +="
Please insert a new toner cartridge!" @@ -112,6 +114,27 @@ if(copies < maxcopies) copies++ updateUsrDialog() + else if(href_list["aipic"]) + if(!istype(usr,/mob/living/silicon)) return + if(toner >= 5) + var/mob/living/silicon/tempAI = usr + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera + + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return + + var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc) + p.construct(selection) + if (p.desc == "") + p.desc += "Copied by [tempAI.name]" + else + p.desc += " - Copied by [tempAI.name]" + toner -= 5 + sleep(15) + updateUsrDialog() attackby(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/weapon/paper)) diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index e5041ab96a4..4fbe953d729 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -5,10 +5,6 @@ var/name = "image" var/list/fields = list() -/datum/inject - var/name = "image" - var/list/fields = list() - /obj/item/device/camera/siliconcam var/in_camera_mode = 0 var/photos_taken = 0 @@ -20,6 +16,9 @@ /obj/item/device/camera/siliconcam/robot_camera //camera cyborgs can take pictures with name = "Cyborg photo camera" +/obj/item/device/camera/siliconcam/drone_camera //currently doesn't offer the verbs, thus cannot be used + name = "Drone photo camera" + /obj/item/device/camera/siliconcam/proc/injectaialbum(var/datum/picture/P, var/sufix = "") //stores image information to a list similar to that of the datacore photos_taken++ P.fields["name"] = "Image [photos_taken][sufix]" @@ -37,6 +36,9 @@ usr << "Image recorded" /obj/item/device/camera/siliconcam/proc/selectpicture(obj/item/device/camera/siliconcam/cam) + if(!cam) + cam = getsource() + var/list/nametemp = list() var/find if(cam.aipictures.len == 0) @@ -50,8 +52,8 @@ if(q.fields["name"] == find) return q -/obj/item/device/camera/siliconcam/proc/viewpictures(obj/item/device/camera/siliconcam/cam) - var/datum/picture/selection = selectpicture(cam) +/obj/item/device/camera/siliconcam/proc/viewpictures() + var/datum/picture/selection = selectpicture() if(!selection) return @@ -112,7 +114,7 @@ set desc = "View images" set src in usr - viewpictures(src) + viewpictures() /obj/item/device/camera/siliconcam/ai_camera/verb/delete_images() set category = "AI Commands" @@ -120,7 +122,7 @@ set desc = "Delete image" set src in usr - deletepicture(src) + deletepicture() /obj/item/device/camera/siliconcam/robot_camera/verb/take_image() set category ="Robot Commands" @@ -136,8 +138,7 @@ set desc = "View images" set src in usr - var/obj/item/device/camera/siliconcam/cam = getsource() - viewpictures(cam) + viewpictures() /obj/item/device/camera/siliconcam/robot_camera/verb/delete_images() set category = "Robot Commands" @@ -145,9 +146,13 @@ set desc = "Delete a local image" set src in usr + // Explicitly only allow deletion from the local camera deletepicture(src) obj/item/device/camera/siliconcam/proc/getsource() + if(istype(src.loc, /mob/living/silicon/ai)) + return src + var/mob/living/silicon/robot/C = src.loc var/obj/item/device/camera/siliconcam/Cinfo if(C.connected_ai) From 5b77883f3616d14f5f37fb7f018cbead3749cadb Mon Sep 17 00:00:00 2001 From: Jarcolr Date: Tue, 29 Jul 2014 21:04:41 +0300 Subject: [PATCH 43/75] Adds 2 approved custom items and update http://baystation12.net/forums/viewtopic.php?f=33&t=10952 for update http://baystation12.net/forums/viewtopic.php?f=33&t=10850 for Cataguette's item http://baystation12.net/forums/viewtopic.php?f=33&t=10527 for Yankee's item --- code/modules/customitems/item_defines.dm | 79 ++++++++++++++--------- icons/mob/belt.dmi | Bin 6038 -> 6152 bytes icons/mob/ties.dmi | Bin 7953 -> 8305 bytes icons/obj/custom_items.dmi | Bin 58648 -> 59317 bytes 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index cba03829110..e02a1e540c1 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -112,6 +112,16 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "syrus_notebook" +/////////////////////// Cataguettes - Lucy's Stethoscope - Lucy Kemmerer ////// + +/obj/item/clothing/tie/stethoscope/fluff/lucystethos + name = "Lucy's Stethoscope" + desc = "A medical apparatus intended to ease in listening to the sounds of the human body. This one looks cleaner and sparklier than the rest. There is a small silver plaque attached to the tubing, with the words 'Lucy Kemmerer' engraved on it." + icon_state = "lucystethos" + item_state = "lucystethos" + item_color ="lucystethos" + icon = 'icons/obj/custom_items.dmi' + /obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber name = "multicolor pen" desc = "It's a cool looking pen. Lots of colors!" @@ -751,6 +761,43 @@ icon_state = "adapted_h" icon = 'icons/obj/custom_items.dmi' +////////////////////////////////////////////////////////// +///////////////////// Belts ////////////////////////////// +////////////////////////////////////////////////////////// + +/obj/item/weapon/storage/belt/medical/fluff/ems + name = "EMS utility belt" + desc = "A sturdy black webbing belt with attached pouches. H. ISHIMARU is scratched on the interior of the buckle." + icon = 'icons/obj/custom_items.dmi' + icon_state = "emsbelt" + item_state = "emsbelt" + +/obj/item/weapon/storage/belt/medical/fluff/nashi_belt + name = "rainbow medical belt" + desc = "A somewhat-worn, modified, rainbow belt." + icon = 'icons/obj/custom_items.dmi' + icon_state = "nashi_belt" + item_state = "fluff_rbelt" + + New() + ..() + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 14, "Bicaridine") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 15, "Dermaline") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 16, "Dylovene") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 17, "Dexalin Plus") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 18, "Tricordrazine") + new /obj/item/weapon/reagent_containers/syringe/(src) + new /obj/item/device/healthanalyzer(src) + +/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle + icon = 'icons/obj/chemical.dmi' + flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first! + New(loc, var/color, var/labeled) + ..() + name = "[labeled] bottle" + desc = "A small bottle. Contains [labeled]" + icon_state = "bottle[color]" + //////////// Suits //////////// /obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Robotics Labcoat - Aeneas Rinil [APPR] @@ -997,9 +1044,11 @@ /obj/item/clothing/tie/fluff/radi name = "Blood Red Pendant" - desc = "A pendant that has been painted a metallic red, it seems to have a ruby in it." + desc = "A blue chained necklace with a ruby in the middle, it looks pretty!" icon = 'icons/obj/custom_items.dmi' icon_state = "radi_pendant" + item_state = "radi_pendant" + item_color = "radi_pendant" flags = FPRINT|TABLEPASS w_class = 2.0 slot_flags = 0 @@ -1216,34 +1265,6 @@ flick("leamas-reloading",src) ..() - -///// Custom Items coded by Iamgoofball are Below ///// -/obj/item/weapon/storage/belt/medical/fluff/nashi_belt - name = "rainbow medical belt" - desc = "A somewhat-worn, modified, rainbow belt." - icon = 'icons/obj/custom_items.dmi' - icon_state = "nashi_belt" - item_state = "fluff_rbelt" - - New() - ..() - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 14, "Bicaridine") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 15, "Dermaline") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 16, "Dylovene") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 17, "Dexalin Plus") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 18, "Tricordrazine") - new /obj/item/weapon/reagent_containers/syringe/(src) - new /obj/item/device/healthanalyzer(src) - -/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle - icon = 'icons/obj/chemical.dmi' - flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first! - New(loc, var/color, var/labeled) - ..() - name = "[labeled] bottle" - desc = "A small bottle. Contains [labeled]" - icon_state = "bottle[color]" - /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/yuri_kornienkovich_flask name = "Yuri's Flask" desc = "An old gold plated flask. Nothing noteworthy about it besides it being gold and the red star on the worn out leather around it. There is also an engraving on the cap that is rather hard to see but it looks like \"Kornienkovich\" " diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index d2b6ba4aef1c6a355bd8b194d65166a8605b702f..8ba5c001e09a5201579b1be8c6a4d8259b4be9cf 100644 GIT binary patch delta 5089 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 delta 4941 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 L1zC3f#=ZXl`Qn!i diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 7f3ddc71439bdeac6290042644f3514c74a018c2..32792a321196cce1e623a693e4cfac64a364209b 100644 GIT binary patch literal 8305 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 literal 7953 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 diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 839fe059c82b0b11c6542aa67d6b55d56906bd73..f965624e89de5c16b836529e9cf5b4851acd88b4 100644 GIT binary patch delta 19788 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 V?}KB^Zz4E^jILqz-d(Yc{vT4$U~m8c delta 19113 zcmZ^~byQSc*giZ%NT@WD($XbJODNqSAPtI?Qc}{K5orWex+JB$dytS$3CSU(y9Wkl ze#hs1-+#WfKGqs$&OS5eoW1wG@3^jO*NtK)4`6>`g9=tXV#cL16hA?&T*@NuAIh}C zZ}CPYFlj8W)FNvfa3>M~z|W3>(ZCapxg2g6ux2K}hjy|DafUbA>g#YP7UL7%MX32KNhNV4-zLhs`=)-^veVbL;x%=0CgP(Jaaiy|WSU;Rk*F z1-cA!eiA;{YzCXdt#Fh%1Fcvbr4(X)^isMzGGpf$)q?o3)0z@jpj|)zQqP+Q$Zp*; z)k+`C&hzJ)RkQ*AK1dUHa}D?CV3R4}!-9+wXm3 zk=txiYGOjJs|vR8=1&i!HkUQZVKucsFqXM>1h7=3*PRFZbi*v!#ap~KPaKp*4jjDd zZmDWN1w3>?q@Eqxg`-*h1ykM;5S|1}zbbywlQ;;~lV8jMa_0D5WVyIh@6m~Vp48u( zDxvcCp|Uhte?u?h|EF5kG5MN6TU&dxy#E+tc6l;bN+D#UfpwC*m^sQ^_jEn z8BUnouP+szZ-MhWPEW%3dF*t$=Gi9ws&A=#gB(VywuL`=uNX!T%9x~#KID(Vaa?Sk z+W6DVqs0U46cw1+EQMlkj@17V8DmI|gxmzgbspvu;D^ECZ&5F0_n5Q|D)3>Mv0~tq zlrGf86swVATyE7mx(Cd6AvHgwIt(cO$`mGJiAJKa0gK#54+aYh%E`$|$QRcWoB*pF zliMcuIcPGxvyfL)C_I9Ew+C2NIG{EexS_1zQIET~nj0T_>hQq!F%TkS85FaJnd!!O z7t?gqk0OT8s`mCDvA(I*G*(i&vuxt}q2cx{cPiNOuc~(=M?OXr-%%HC61C|f;ibeU zrs10g{4UUrk_ou3Mb&H(p?YH(?f&)+iXSkQ5*%5-^qBJ?<-MEV(EwdwC467UZbqZ4lh$g*WoSc;R`)VnLe(gjmM4 ztop;->MexW$5k?NUFoj=K`xeJJMj%}0|Bjc$zP>c5&Z7x=Q&m(No3&-NmQS%FLIgz zU%K}826y&`FMWL~;JFMf^l$rfK{?I8UVDFDlU`l%d>)8-D8)PS@wMo}SA_k{bG55mFHxsotuji3J&Ay^# zHo;Us-A!Z(m3#e~*)rgqQZHYF^w~4u**@CpL+vfDE+t6lzh1nrRq- zj^W5kNX)LfzQe)A<(m69P-VX1`S!a=O#KCBJ_=s%VqPwR9majx@oJ zEzfs}R<5gUyFZ-#?H64_0f~I3CV?Nk<{MVy4!go7^M55B(zz1(V%s_H8r>D>FtiN7 zEzBIA{ z5vsX%PvaLSrbL7M=n^Ms2j#3bEts?kP8MrFS6{B3LcHQl*(nxq);&%SNvy)Gywrjj z;EV*~z&7763c_Xi(nj1*MduWtW|~fAo}bqAo^00E*C(nATm_#^s+Kid z7G&ZV=3ZkejAazAF2)0_8Zm`Rs}&Ei?{%DCLDds^N#k}fvGb$S6@$`uFP{yPv~F`T=MNP}YBG5SLUyxO@Gnt%H9qEy=JinMZc{Z-oB!xuNMVVi{zXvuypy zoMppKpzX-5niy(&)rIe9+SISs-N3+LUj)Hx*DkGMT-5n!rupgRaM?vKhk(-w=8sv5 zv~QH`lM(0^r`e5tfd={^W_`zO_R(_qDX&1)HQK?WdoxaeFo~v842L z`i^qC;tV5YNGX@pfj4Is>+#G%t{sjX>rlm-tlu~(qmH2;1EQnkqv`QE)V(UAaZ7|A zX(I_O(?8SNhj^SJ0Y1X4ho(_*Pia1}j)Y`DgPn-ssfxe9A6c3b2?a%Pzcq`Dg(kBA zk30X(fisF0}GK_--?9mlu6berm7k^)RMo-wW%*OU2a+q&y`K zUe~&q0U160P;<^J2zLp0(^SZX-&uIo9@PU|G0EvP_FPDaTsAF%eersQd4=*WU`Yqf zI>!ij+t9uaB)n^p@@us~jC7q!3)4$PRt9cCZ zyKuNfX%}YS98y?>Bio>H8|9ueM`psP>(GN(yzuhZ8A#}w!UR08CGK?_osVyMaU(U? z{GnBV@+HPt)h5pTmikIUylIbiF(< zw7NP+3H9^mwGt%jiW5>u0Hh)v;&7UZ&t)9~bHIS(Chvhf(oXby@W3vrbJbD3?P6|6 zMRMP*gIM;aa_kyoI#?f@RI|reQOkw3td+=XY<1cb2qqD8UX@~a5CFmiQB`=Re||H4 z>AqocP>-O%EQu?M6SiRUQ=(&PD?Fjp(f#H-!aUnD8ksWcXIrH5#>S+!?jm$znovlH}9P0tmS8v-ACMC6qS1>PW);+Xaq znrbu=ADzjejfXb!QFp3<6ElvTyVcyv-z`WU7V*07gOgWn#o^DFf>IT1W5A z##pw-)$IX9NJvP*+B&bVudlLo;Z|c2s(GXL;sqxcS5@na7cb`aaKsmJU+v>qhdCuM zi$y4`K9IS#&uwAMHWl_gvu9ypp_cZ20{C4XtjB4~KuJzFnw&}NJrCRY-Z?nvQsA!0 zZ3Gu~b#;Aeo-@I^!A=gm{Crm}_g5^VfHS1MoC*~mPobXj!CyY0ZQ29xi4=Jj`?WOc z^G^ZWI|Ua{wY1)mK&Zr>qpW>^;Jwl!d2Arvf5Rf1Ge;=Tm?C~j>gEyNb`&N^wOsd zZ3Q$mG*)L@cufnVJuw6tn!YLUMspnO`m^m_gUTeEie>hk5iLq0Q0 zv8L=*mPJ;h0>_QhVJ;&v3OYwnEIO&jC5*SBy>;~TNZ zz&PO@ONtHs+biOczsCicW4EXED~r)sOabTI&JZOm)W?dCAKf>w1lN|fo9F7l{Jy6L z`rhf~14Q>P(K#$@TU!%=1#3hc%J%^ZT8V*pKtcH4iniu9gVicI^P1LI>3Vl@C?fqK zhck^YvHP@RB|hAx(ZrVfWgJE$Wxt`uVMm`7*ezT5V*M&)T&3P%mN1taeSCbpmnv!S zdA`*c{YTZ~895q`Ebf(Ep3UDq|A3>BF9h-TpL}Wj{=G`BuQr?o_(+TDB6-=G~F)#(pQbmD|k-Jm_Qt+zTPn43xjlOtEjN)Ed_d`nTPjsVvry_ zl9qF4r@DXCFarjIy>fFGew-4dsH2n8qog_P^X}b{Z}J|6Q52xpD=7tCGbw(5g5QJK77#HNa1?wyn;1~1PMcS4z`Ub@@ za^#NTF&kF0z}%V(I8s{nWyQ)2K6xVu1i%Oz7*KQDbpo!p3q)s-NF)gz-5?&Lzns24 z1;oe4MW7p+IVwTq_i%3zJ1pqfxf8NF$sHl zZSBqWu7ulPeB~H=XjW@$dTZ-bENtwE*w}_9rBlMPo`P01p4!}@$%SFGFuo=-%vbE; z0lcwdZbvfCF!C8{Jo+8-nWS4W3^cXIZ*wob=VialBskqHRwSV~s%D=*?;-A8ETy_3&Yuo2^U=OL@}Rm8%utvjT8T{-k@Ki4UZTh9!0)f z?t_K(X$IfnICcv!pyKDmLmkr}lF)LdUs?4NwPg%@f2!nzLqlI!SS)Q(Qd6tw>&GjG zpPZcV&h+&3kkZp@C@F=mFASxC%S`0U#i9cuwJwn1>Han{7oenHz7NyYZRBj$mj6g* z8*#^;=(%YGxB_36df%;?9r{cY7yn&)P2A@MCo2+AQKA0&Rl2A|Dz>8H`qA$bEJz@d zS@Z8-Yb#MpYNC#f;k1ypMpMREqI(`8NYfk$-;}!zMb_g2-G?6!-;!Y5KbYQDqSuB+ z>X5#E;{GYSC;+|Ra_@|VN8RZPF7Bxtx9(eGjIW*#uPH4mc~cX2_$)0SYnlvuk%pj> z;iMn}USvdhv%@k4Jv!6NfRzahXSJ5D`-%284yPrU>lMtkmP9?^Bjcf;bSR15crO0v z(WAt~w-y!*vS?(k=2bW;Yv0h&-@pBFXS*}?GQ{Ab0xrsY>`*{Fieu6Ks`VDeVVDEB z>FLqSq!V?3U8jI;ZBe_q*ANg^Qv$@qj3ep&mEnM{E)+5~We}f~fL39yYT+tpBJaJS&yy)2o^r?;5^j_Ea;%`NstD&(;_%m zex?BZa=wlk30AV}p@$+JZY476QS?CF82mc{Z2I={BJSo)(l?%jnArEB^uV}nxkH3# z#lM_J-^PWBbL>;{YK$w^lVd#E2tYAWa+k4VFX7J0w(@N{q{b77Y2xtMGOe___Bii4 z?Yt`xesgnUyQ`$6lrz<|k?H^@8#VN?K(X2#TQ!vVP)%g zYk7~q`cTr5`)SVKo_*rqNOK7!1q+0ToDihDdrklFaDH<$VMjKS>cIwfU0xpj-{am* zk6BX4g=*l4B=oM=L2!l?UGxKc9+O{~aP_b#A-(O!<*YB}MCni}CCK-@XM2|Nz&@cj zKC-m^Mp%F4kb$>xohwXBPT9?Qj45a0w}hBI34NUxG`+yw0cyVpl_sI9Sg2NH4P;Qo4f}-7pe3IX#W|{Q2*Z0HuPW zqAN0qkcE|%Zfcy9#{u7^l+lkGfbGLw{APk}G0|ON5s{Ir;M<}VFc8lLe*dw}K)mz$ zCALumS|qR|Zld$K93?Vp2Xzx2|0*w7*yo2C1!d<~J>31r_vJjEsEvMi4Gz6n2D8(z zadE~7ct!h*7ersbx#7nZea^|jii{-W6cEU*6wI8MSmhT$FB>&d9RLfnt0h1DY7;); z5pn(JeTVcVoxxzH2!{r^RC6!=NXp1pt(*T|KOa*$zawvlB55+cInP@xf!cx@OD#RD zu^X#>VRnLYe=RZl@@S=juJP1ZWVWKZxa!D(BHhE^f;e#JcTy9F)($@!GMFS_m?=SH zqz}JkEj4R;VGY>Y=5P{LRaKoGET(~Q!~3J@XqhXn25+}xbfycSI>Dtatz)onlWeV9p55NOmj*F-``GNfkLdn~(5I`&zy z%9>tkrzT@(VY@*>|2T=%KBeFzdrxBc2>Rj90u3}=Rke!ka^3j+v^OtLhivBh?DT;h z)}DsH`-gPo(L61omT2uw8W~_%InKXw`040q@BWz@j5bQh;r;2Q^P4}vLZ?3Ochn;ykY}(U&G|vrhFiQYYserr>`I*)>nX; zdC8!)oRrsrCua~<4pK~6Zvt^Xlxlm9eufb!duaP5$U~pB}U_~OKl9`QsP`mjX(trQX``Am&a*@jgG=_n=y>e z@Y@frGx0_Cv!0_tythy>-UMjt_#KeY!KgyQMpFpSF8E zS2?Aa)1RDfaCt}rJr+q1qmnlTACQ&Qk-t^(^BcdnW)^b}!Y`qpELMIO$`hkx;x-D2T4*qYYs?eXTSh4Vljy@nGqwygfzkhpH zU#wGQg1w*JItM?r46zsfzHgb9pr}Gl5W^hV366mO;sC0?+%}%hMUZoFlXGbOotk|&=z6wH{hSM6g=5*8Va-P? zy%wbQ@PX&u#?;7yU9I{~1(W4n{ZmR4odb)mriG8 z^se|rzq`FZY8YeYivjYH?4pTdV>*SI_*)BE&+d;t@vfANEK2wd^&-Gq2A6cDo4kBI zyrtWcwItBt_LOS3Fel3X-RG-L5v3lJ;Nr;Y2q!&=LqJ~38D$sXnCg-$4*YpX zcds=2HM`s`C%4d7bEA>UaPHN$H3DK{mmCYyA3uKF^Sc#@Pu!7W%~X2zD$C|u#l*ym z=g*(>ZkpTtPVn%>V-oa^Zakg6j||<-97ZqSgl+1_#S zH43yUXM_RIbsdnn{hLDsMgQV#vFj&xSS@o94qnKYxP+M#MXd?A7ttu@s)v1Wf9B5E zG;ZTYB+o~br%z}}1^io&wkF3DHVAV(yWKVU^X2XBh<^QFJQYp+1iHFdTwMKD;9?m7 zXN3O=M@PZ}ByTo@F6H|O`Xe^ol*9cDNrEwxo0+GR5!9qHo z@TV=aq%8}R;py11V{w&rU;Q}A?9bkx>V)6367*7~^~&U-_iazgcK)g~ zXf@&K7y|h5TZ5qYOE_NZy}J{J4!G~{B%)X;YX07#n^E#DjvP7Qb$PDNMyBeuSs~EM zz`?f-#VI%yiyLV4i;v|bHSBHCckmYCIUp!`r{#y&{HO6A^)od#-)~!wRoP~o zysm{y6bY>rK|1jEO3bIMm+dvefGHOnycJio zHBrZTQi6!&B_dO5{@YVB)!lx~1z$M4O>>5Q#>r4T%s1fS`||d*EVw{f1Sg1V9Xu;} z2>UmF%BT0mJS|+x;iaGF>G^&1*)t%jNt^F)s0J!On+98~+;kmVa!wY-bc8G@3Oda_ zQBPU{@-@@=|G@QF#^YW}K>in&a$>vC%$P~r72tW(3v9a0-!BQ@g6d@^JLt(AUmN^; za37*xAiK7JCoA`0b`~rivGwibB%$B#el;fMwfA&hm;?BnPg<7Gp8j`9F$fnIm%UX* z2BV}02v2b>=l~0Ic#e_a4S*V-w@+_+@2nthuDKygzOM~xW>om;x!(obA0UI69Gqqv z?KobcIti@Sei(x#`?r*o{&u>WKke^>4l*OafE`|2`{ePvNlslyLHtiYnIiAs`FHd+ zF_C>@VuHVQG&}G2D}2ItQ=28qu@(?|nWIeh3U`pbQjp=}kC|lv81nM+{=^sLIy#Jwtlbik?MY* zWF8fL-}hlW{*U1#J}DXH{Pt3A{Wl<|S$*O6qNAnwvu>23YazX;MQYD4^%{tgc%zyj z2NNHkCL23D2-0-|RF?ifHEnDhah$n%-hgZNGp$G@3XPgS7sYel_*Y`K}eDK>Rcjo?}EGy8WHoE2(7BbFDBessLU33W2~b zzSoy4z(s-f}sYZ&95Wt>W z>NLMy2!#(Maq=Yz&1`V+BO)o2%%6q}H%Uhj1tfK330hgL^^FYtoluwg*=0w%0<{EO z*)M&Sh#3b)m7glUwMZ-nysUI{mff=G`)VlzYGW7VRBpI*x7Kk$Z!%McupqXxnwykT zJX3Tf8Z_fW57%uVI@0`Nr@p!k#by&QP(LtyWd=zb2_dJVnsMe}dh#Ux=O;Y(ok=eA z@%3(eLW1jRH^Fter3)!0&AFKX_7nJo7nhhg{ZcQ3RufsEovEdw60T|d_HEIRo9A9Q z?9v&d7lte$=T#*%zK8%wUa6&aEJGV7@6(x85d#DE`heDSVlnulb%yPK9w-XLkJQvA zb)K7bGNZ_TUq{PR^Z_(n8ArD7?YP4GH?+S40qi*Z=;qdmOZrL7y=f%B!FXHq$ z4Vdwlig>b(*GjsrM@40jo-|1~Ee^vnpJ0-FljTF`cs7z#2ESF68?CXmjdO#%q8P-J zef&77oodtVV2f79Puq!xXm4G)^G|d$8WO)@!zIi3OhHL$bytcw{xn%5ta0x|w>!8% zHvlc-AK(w$mH6;Zt7rh{+OS#RK6?OQ983YOK|5=dPgeC^&@kqhLkeI{0KetF_J%xAx;siWauM2I{; z($anv{_gzU&F!tv-<7Zw%-^^LkKdYR=!^4KuVLET=nrJyzI_9_vx0G)>BVBY!idET z!Z3StiZ5P#8=EI+ymHy?PJ(B?b=U3+itcRmZk~7{-FAF&QcD`(BA{)U$|@_Hd2-^W z<+3=?bIG4oIbf|9=s#!yxue10B(bT1WK0i-fS8C0J)~pxcuv@3ODD~@{5hr1G$Yk)Ft>8d9XHe=nU5BrS`c?qsHBu)4{S2HE@i^1)0`CZS znm98QoJ;u@*#n(!uUrdtZFxIb+0kt=k7MjGK22(0fy8#4Yn|F)NHX)Ud2r!!Se9lD z&dNV%S6eN}yOjGO%!cb|nFOB@2k~r~V`#yzMGWrefe%=IANZKjCCCq})o7exjbik; zr#1ovY%zoAzatCO*x2~r+)O@5O}Rnet6yk)Ci{uVp1=3i(eh9Jt33xkRBmsK>)D^j zcOJ2g35!nWYk{>M28F;lmXCM+H(fX#S7wa&?ur%ze$z7H4{_H^1bO9*VxUJ=X1NWl zI*dzHkvWlpKep-7&)Re-(%cro${b)568iR=Xn;NfE^R!ksmy8O0SPV0C(Gfi{ngMW zB9%5#%1hfqaJ^ifh#mr3%Xobp6OBY&62+Y^^70<|`}-fAo#Yf36Efqx{)oQ0t(%!Y zf0m5;Ir^NSB|YJd=+XNjHvdm?M_h=3h#dM>>`^iU^XGM9$-6k~-vg2Qs1+biPkk!I z#O-!~V2?R`WaLMs+Y=V0%=El%F9b`u@WRNFojZh+yE)|O=)E^4pb_N^k}!fP8ldRo zwNOvo@f@Gk8tOVm>hdM}xsS0R2e&g5=d#1j0Ed-m+T*n0bSbZxh4i%WdvC8~oY?PE zYsmKj?{AyLOWdfI_ek1b(*OFI?tKp0rHmqr-X zC)-SadZqR%^1Cgp{u1M`g26lj2HGx19Zn8i#-V?BacbS-r&60QFgx)Ho+Hfu+HF-Y zeGbOM6f|H|tV%%4Yq?GcKZ9iO7!%{uVr{|ABC&a=-1=hr(Hp&cYY3b>i$nWx%RyxU zger2(o(SUNA~{yrW^8U=hP=LxWL1tqYGiz1>e~HA+saQ^pcLFW6|x`5?$_DX#l_9d zLND&Vaqro)XXmRfIn~uKy!;@zO~l;!u;?5NY=)CRBMe9~#1#<{fmo+MeU_PANVM%| z<~gMTv9hCQa_IU28M+OGJ4D--;ieuCs_fNi7Is!JUM|TRKw42F8$^e{qe0%Fwl*I0 zL$<_{#NMQbmOV$;iGYo-2pT&8TBugEzBgLOhE>2bd=`8DW}+l>_j+hrtD_mXjT)6f z4Y88}M;@cfeCKDi4x=f;c9R*AFN82cagDO2Zw4#y+&6}3K=)~GYv^!1-*5wcDlNTD zL#ICa$H=X^dW(i`-Wd2Ff!8n{-;N0Zs!CgLnSz3HX2+?g8swPJ7iBsI@!H|Bo$#S9U7bb* zimA=tZv_>|$nxfmgr)iL36Q>7)r1whtAU(O#|^DVHFd&oCN{)L!iy2Is70^8Q1rQg z?{)qBcj;N$jetuqvo2g?^vG6KZfv%bjM|6Xj)n2sIwAh23*hxe+L*~N8$KOffvSuDlicHVDR65 z6iGN)B}ZrB|8-C~#<7OauS(R}tkhnsqg207p+tqE<`(x*)Zy zzrF%wi$@IIcO2PW;EU+TNRjnA?+Q@S@~dz0c1bEsz0(K){t75FnH61uDbgqZJ=(3W*>u=a=NT zb$n)RzW69m#a&EJPn$dpApBgD4nO;*t)iXrm#l@>@IZsDralr}Pp=LwE7%TJtc4KG z-*~*(t7EN_=BCGTpmQv;z76PX<~>YzP_IHDgC@vTDUbuO0;SG3mL2MMu{q}~elBHB zkwO8l^N&d%x|)i)Wq!t5Di<%}3|0$R#YN@g$oQUdLU3_$Khp?@f)&x0Q;uY- z=lVtG01?)a!>5n(1*2bFSH({eMk5owlg_bMF1#FT-L9)B;#c08QGbqBqY@oTjZvMq zR@01#x4$v+&<`{$|qiz)jN*Vm&)3%SDU|o^FUfVd3!1I z-Mx{$%~@Rnyyx#zry5=i->tD}Xj( zQG7)Sf=-$f-}|umMPU#fg*j9-&s1Hz9F;k&CZ3<;qN9M_Vs4}RN>4kwN;tl50FpyL znY|(Guk-6iKFQKw^kRpg+OoAKb-$zyrdkjT$s`Q4e$F)h_C6wT)lz$WSgdAyP=F?g z`z8cN!}%I}-A}&J6 zyEz_FLAQkPV8TXH(CqB&@+a$VOMZvax?fMYVuG*7wuSE<=C(J`aKyY3O5sJNA{iyi zHaLf_*Q6rrmK&6B%C={J-;Lx^;SUYQ#${6uhS>UEe9p_q-gtF(cUwKf4xl%nd{-+^ z@FHYpP+;QG1^qe3G%CP-7Q=Urk>{a@(dopc=Th{%e(@?k=gUh=ZEY}7{9xgZ#jmeq zfvKwAESc{~PFn(z1S))i5xx6+=jRFprOU(Baf!{_OT7f@+`ryTCA7k1+iyd^q@}1< z#x@*`QYy%AA?{INXHSNq0WiEK;^31!JcfGKZ64omrER3NWE7-I3y-qs`e>O?J_dcv zr`~DFBuL3ij??t(pxEs#%5dYU(aW zcnIrC*Y7X7+r1Gv+-Z&&&CSm77rJWd>U?)`no_~M4dQX73Ih(BHW_das_^UUZ%04V zu&i|-+g42FVAIZ>&$Tm*8nPbfyiAcHNzqGkH$EXZi$_YjrZN6tUydPi*AO{w_$5~9 z>SpZ+Mi~y9TVEJE3bX%K6SUDzD3Ufg^&e19Bp06ZPx6xXQC8fk-KVq%6OkscdM+?( zRBzJcQZK1`s~2#*mwn?rmk;Siv>DA_O_{Ag7it|-uqx-C-JS&b6AlanXJ*R& zlv%p2M@L0M1ff3X6`3CgcLsT&+&tzFp!i2GC~2SD-QaMX(Rs`Vbu5jcOZ4ruMP1~*=1brYRJ?-@I9&nl%{3; zQL0I27|YAQakZYb%ZZ=|PB4dn5}{&demrt$fD{PGlYSZb4V87Rp><0=`pYc?IF;Mn zHKPBRFYa-H^V3Yc20O;GZlH+R*!q3tU|_Ju`3h$8`VFR}g8jVZuu#Dh=LLW^9)`Xr z-7eZukiFo$-E)_`=Wc(0T@%>zVlrWXB=knmUvk6!DDYxS@Q4W{z$P@0|5oz(F5c1A$WtM0Oh%&&DR@-tuS>-yDEKA& za?x)4&RF856Ig|jsUs07Xuw{c2qt`fwu=1HOY`NLxY*CK-{t%5m>YU6=^*D~kC>kE zL_FQwLOJT&M&ICI4cnE$bl7!S!?X<*Z%jK5;JkJ5Fwr%tuXmcD@o&8{avibrl;Qyg z(}xFJ=~)Y;C1|I)TGbR$r_{p2Li=h;Ml!Na*^8OwIakJSBfq91?#7F_j8M4-u=G7O z?h)8?Z~7LKRljHYyWtQ-A?Chef63T?PthUr_H8_2wgVBQP^;s&_EV>~SJ*cj zvjDNr`ne%*Z`jE9%DpgGXoJjRUv!es(Z+SC2vf~(M1HeM#_P(%WQq8sC#ATMqnpDQ zbcnpDwSmXzvY)=svtD!Tv_LynaUeG*hhlW;pZFtlU$$;gd+57m=D7=@zW&HqZP`*w z1X?n7$y|OYD?IT({iruX@!;>t%0@#5AqK$aRLULS#;g8*zp}^}>)hy8I}P_}TK6%e z)kVWaf77{34#FKq3$?_E=f;N+f{&q2An}=^GgFGP%hnmx5%C zI>P4u3W9Wo*%q6xMzz9f9#Wm{TjEwc5#)(D)R(Ep(k=Uqv`A%3rXnbBy)U^hD91Gi zQVCyH1-`17dMa4*An_=evD;d$S z5L8qf@8H}Vf!SZ^4HceU4@xcTNT-+s$Xdv^faqel_R z$<*eDGqj}OuB^mlF&7KgO~Cq}X!TZ0p{JX~0Q3EfuCP3Omyrb0k#V^=vx8E_%esGa z@wK2w7U8e>cE@Pdq?b>jBnDmGWHmtj_}IV@YbqUT_cj4r z5OukWE2pZ;#aQY+dBU!xYQhid*&s%z4JfkyjQu9#z zIhD)C!WCA>@4@-}p@bM%-EE^q0Pm*oXh!{B%S3xXW~DT-=ilr5E$F*z<%fdq6M-Bx zhwM+r!|tqjc>p7nMgT@06wPg_tErh?poE1=lPO1QHG?geZtv0j^4t?3a%ghns6$W? z5D+{)?k103+VwfzATU${124BxgCk9YW=3QtTsG5b_PIudg@S^zp2>^n&$Nidw9>cE zZqvWxy}CG@iRx3C7m2V8yfz#VuJE^ICA_-20=2>$z(@uU#D7=%Va==~*XhMe#m44l zT9`q}%WY>&L+n$&Qn*J};4yuMdkDViyZ{#$RG$N+BzJ`j|9DMuIF1sYxnn)?6J_4I z_5=T-EME5W!<)~=TF*Cjo6*DnO^*^dJ>iKsGMwW~8vWN&ofimay;;#sFz%z~O-bl|AqhdrYYhf7YRE1&^Y*VLF! zQ5`y?V(hj4S^~G8D}9gcdFGx%=HA2Owzt!zJR@}tEu#TBNKZ&e@c9 zj#KN$0Gowd3Rq<3hCYa4lzmoI1Vp~jqm*fq3a$rkkOUBmO!8L|6kE|16$0PCfA{wF zHBmr-WvQE%JJH5S#%@`G`Tk%-`z3$ay6mw2XvJY$6iC#BF-uDCJ6K-0#qHqJ1FOnO za}66w>=qCEJ45b5lSQ3qAr3F${avw7SE}L0bBAUZi_dhvWGf!y2|l6&60#I-6NSQl zF=N0h<(rGdfRa=2Z6u$R?1Oh~IRZn;^O6%4)n!!c#~bw__7T@MP1?+#$*Rwq4+n+k z*#)zy*(pj^?^gOXaF4uMtD&KJxxjwx*>F4Uw)f|;;nMd&Y&^I9Mpq;r&MR*IUxQuP zdajQlUPH+rN&anP`vc%+)!ksuzH*~=rPn}1FCzas#QTKXkv@=R{WlP4qE1+^F4C1HYjL?juMntA4p3N=u*aR2`3@6|36uSkqQCmW zeO4!8TU<>0%MS!FjG9?Y#Ryw%K(0W+$cS21wYZS>-kq>>P@b6bW0wg!sh z6+^LQgW#!jwJqh@Z;4Ycwa5z16gjSP{-}nc$`A1RZE`#_CPk+6;)T`r!Rgt_uTkyj zJ`-@$75^88e|~VXswnY|@@h$jAK-%t3|o}~*oQI+REvtD%lG##=7YYk06K=}bdrwL zfN5K*Drn9{jg4QCVg}PMkc=ix4?5!W)}Kc~;*%&zsp*|(vHq@G&#~d{^e;5IQ)Z2H z$)6j8T0dSJ@Q&r>L>&%O#RkpZINjoE&%sp)g$Q3wa(mwb15;YT{OpGFJrKfuX=I^ zz)rI;bs+MI+gnS+BO}$4B4j&?4N7pb{$X@DI5>aUpje>l<{$cFzVDDDb&$q0DKPmf zQTiHazlwCjq+fOJH1mVv*DsZ?(ANuht*I!)0p8e%@MR48OxfJ=tq})Bxvy885&ymy z4~i_|->)W80|TU6(DV@%zl2Ahb`730UntEOi;Pj@TvJVaZ;tc%JK2>nZ(7DmzQ7pULH8j6651neg-JU z;##@q1Ne?dzPstE<~CCW1%N4lkNp9vLhSYH*P88+C}e0zNR|EGAEkBLH#5;r9*5cn%_9{TXX)0fJl89vY|nbWZ7KJ zY&OmEUd`*L2uom_Pe9*O#eo~3n1J-Hiye^95A-Q1kIwPm06TID^sXZ!Kv$B8e$ z@PIKZVZ#=CFFX-`?hl!cPg9$t#GMNE+Lk=`?jhkU&wQ0HZD01`|MhY0;ZSXDd<=zS zTt1cP&^T_%CAXSF7&R`X2F0ilLQKeUJMQ+>A>+|scnlFU%n)e~ z!=zj?m~Ty;^ZohlfA)U%UVE>1ul2s~^ZwrT{+8};3$KnuEWYjF!>DQT*_Ba`rQJDh zN$VRlJ!P1^wDeu2Gskl8XQ81WcclZ`TAD9P_B5)K9|$Ys7gB6N%~T2|e;$_F%OG{ zFw$UoR<7FD`wpBh0~UTAiQ+y!K8Fu}0=`9dG4Pw~(1UehHKeKa73c(f3l2ZVIxR|x zS!gTu?n&xCXD!I-lW9IfSBe%1pwNJ4hPq4#;8mjNXRMP2La?39s{8!1P& z8qt^DzE9(S&P77<`d?2|<@P;*3F6P{>t28Y6x_;qCn73(9*6tLjl<#csGLYYlkj>A zd>fr!#rAfpL>Q%X9QEo~#aE;&*#Zk|iCK9Jco7r|Iy5Xy=$(OJ7m0x`shNf_HtWg( zN^YQ&>|Pxi-s+7%gqeF?F#L3*jN4wtmioKWIZ%^5;0D0or&ObiN+M7RadEH9tLO(8 zB9CM~-GmWnklJ)-0#&a17`&gR1?u~}YL1g4@j>Guo*gq%(dX-lfEPH^ zfsx?vg`0JFE)-Ez*$lE{24ZvdNjrgzzTe|hGXwL_hP&i6dESWfFCn)LRHJoJWazpA zD-$iz{`0Sjvj+WvV?BV@5&5i&k-bi)C%8OnsLbq46w&JK6%&&x+obSeI`rE$hIaeG z&KqP2fi$xIP-Xp5ysD~oI@cU5iRKi?fy+<#gWE7FAqOw5w=wIjpK$9eNhMt>+w7-P zr7kp0om$+~5kJXd@)ps6Ah({Gk+{^|FFzhL#N|zt3mc$g;fenBj!O+0Y}5 z3cjGw-1>!UjCvm zu;CW4=rz$X*%0KKU&C~Mb37uqsr7fR1foWia*tc)k7h;+xKMFuJRF7tREFtp)TfsCRgVb5d@^SN_MRZTM~)bk~B7LtR0R;?rB zqeH(1aOQ)W>sQ@Z5CWjAlw}O#u$G6PCYkQ|1WpsJ*m_eyYuelrJax|gSBR`bqdQod z#%~KVPw#F%zJkwoxpbCM&TLXg#6!`44|T+{M5qao^(C*CyvHO37(M8bofWKZd+Ot5 zU1PBrVrp9hb8zM!E(bJd92b4VSbOQp>CV{5a9t224_uy7kHJQIy!u*9dd1hx7b9~e zOKirt(INwkzd+PKNZcA^c5h{}3Yr<$JZd>u-r@#N9n9eKAzwv^(BEYTMf*ylAA4=? zC-{8mm)i4-fb8|XfvOS#bvKYd_IG6BgqWNf2QW9$J%kr`q0zvx2(5#riG^ddbnEbff_={7S%VLHD z#d)iG`n*sBWiZ6o!Wk4Nl3E>E%M7HJQq0r<;h)9*O{-YViby}AvHd-?h7 z^@8mbUwVKoe9pc&u+fY+l{nB+cc#+=D%Rvg?&5*@3MGCBmqJ@w3cn15R_WV#U5*{HEyOdh^KASxPJ`7&f}L z!;UvW|E^3C4>Dn3VHTzjT!URXv%t{om3Oep7@nC^yxKwywBgJVr$qEd>=T3WrKj8YqEI2?XSXQ&8>RP9X@zp~R~M>)}B z{sqdS<$2a>b0Y}gR9-pw8;G)Qi0+q}ot*`Ndj5GQr%r;9Fw9|hQdzHCyG?1%=k%6d zUuZ3V^@-pG_MyW+3suWO8HI)W05p|Chxt}&m~vvN4*D5Du*eHy7si(+f2hS!nIfUE zuuvnJcf@7nazzfM4hiwhS*EKR>%ivh85}%o*UhNzK#4PL$%*yu6Kwd+W9W3?nEczPorjKMW+e%)VO^ vyE6P$^pA8G$ejICXiSs*pOwk{zgyq Date: Tue, 29 Jul 2014 22:08:32 +0300 Subject: [PATCH 44/75] Adds 2 approved custom items to code http://baystation12.net/forums/viewtopic.php?f=33&t=10949 http://baystation12.net/forums/viewtopic.php?f=33&t=10894 --- code/modules/customitems/item_defines.dm | 16 ++++++++++++++++ icons/mob/belt.dmi | Bin 6152 -> 6288 bytes icons/obj/custom_items.dmi | Bin 59317 -> 60105 bytes 3 files changed, 16 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index e02a1e540c1..3f541a8984b 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -126,6 +126,15 @@ name = "multicolor pen" desc = "It's a cool looking pen. Lots of colors!" +//////////////////////// AIsForAxolotl - Tea Flask - Margaret Stewart ////////// + +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/margaret + name = "Tea Flask" + desc = "A plastic vacuum flask with an ugly tartan pattern. 'M.S.' has been written on the bottom with a silver marker." + icon = 'icons/obj/custom_items.dmi' + icon_state = "margaret_flask" + + /obj/item/weapon/pen/fluff/fancypen //orangebottle: Lillian Levett, Lilliana Reade name = "fancy pen" desc = "A fancy metal pen. It uses blue ink. An inscription on one side reads,\"L.L. - L.R.\"" @@ -772,6 +781,13 @@ icon_state = "emsbelt" item_state = "emsbelt" +/obj/item/weapon/storage/belt/utility/full/fluff/sophie + name = "Sophie's belt" + desc = "A tool-belt in Atmos colours." + icon = 'icons/obj/custom_items.dmi' + icon_state = "sophie_belt" + item_state = "sophie_belt" + /obj/item/weapon/storage/belt/medical/fluff/nashi_belt name = "rainbow medical belt" desc = "A somewhat-worn, modified, rainbow belt." diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 8ba5c001e09a5201579b1be8c6a4d8259b4be9cf..05e9655b8d8a42429c38817ac2a0ec388f520556 100644 GIT binary patch delta 5125 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 delta 4986 zcmX|lc|26#|Nk9Jw(PqKAu6R%mLwA*g!B&CQg37#V_&jfQpnmgNw%>>C3|MZzGNBe zWXsr%vSpWj%$WI(_wV!g{c-N&-19p3bza+fJzuZ;Mlts48yWCL@WV%bx=y|hKCWJV zuAUwM@H{hR81KMJn4h?+8n%$1*nZ=WDUR1kEEZmwpq6J&%%| z%5l)WU3t4UXkr~7T!o*mFj9EagAdJQQ{98v-+nQZ`l%3o^vfx}* zF4(2s^H>145(vip#|$1@c&#%cpQCajwtz3@5p3jhE@w+(b}KYX6KHU%b_ zJB4@r-EcM27nyin%<9cq37gdWrv>-aA=6PkIc?@!fB}B}i(mfhzbup}GiCQrz7BT{ zd+$pjwPnWyr0}wKp6|+S_|UmLH~KJaI{5=jZg4kShcgUn%P%q}O)higXE1W{HUq`fRPP!xaZyu;P3iA*wg&w zl(+#s+1j6FTG6m=XD9Xak72x8foOfNhq@Uq>Mqo zP+Sy_R0`?Lz_J1k2b+wWts=8qH(2o7cF>{(MUzZ^ex@JRrw&S4mbzQgniQk=QQARS zJM#14%*`yORgq?=P9_|NaHCt1x=fNnyZifO1&Fv6EULbg$+w9C2%V_*mPQ6MB{{CW z09+XOBOWJcxcwzHx)i_}a@Yvt&Bv@6mmDU|@FKIJ4Ogt;82}I=^a#diFCSqsAq!YH zkL8#oXk4sdxS!AkmBXEpvXp%yAs?YO&Q*+2e9r{b&IK_;>EAqXhd_`sT=s9dPl9MR zhlHV@SnNo~E37krbZ%8`D0)hvtZE+UKYZFb$TA=@+olfkdw0WOAq`e8Au3NrYM~V4 zHrJ{tljB`G0Ov7RV>R>J9$fepKmV)&g>>1>YCq^(-fUmoMm{=hm|K@Ng-+~9TT zia3Lr&jOxsmdGaMrzP+a4c_Qn4dQUY*EPE9rm>N~-8ISySc;6b-0w@T0N~n1tYAc$ zrdcAK5qkO&WDX4nT+A;)0H9MMoEsU*Yz#(x$ZYg;E!z;AF%|E~27rIRt)fCgQ-S0y zH7XOp6Ll_dDy6Pct4*$K))W8~(+=m59ibxt_#e4HuO4-DRy;_Y7DSKvt*={A*&UTy z=uc;GbWZ6!VF%lX-}PbRPLxyA4D7A_=ge5&2oEHa=Z{*G7tlio^iTwk&GAi?0Vm>l zo#bLOv4Yp0P+p5!cb1k;rgmi!Lw`D-v2wh(wXH1%?|nvkeQUoGfzTHoTgQsfqAh{r zuzpY|AY*o~5^Zu9z1Gnb>OASZo#q&~WZdhDHSe)$6%JLAD2isB3AMCbumA|wo{_o} zwc|KUXl4reF`FGaK3ajnd9AnU0SGpI#bO$!FQGZn8Ca5LMB*vcU=BHn|L3?T z0O}S%R*;MuT;)I1Qi;S60y%*<96hExDP@}V;38tOOpkQuD)8ZBz=s|A3T7tc6IKbN zJ;QmB=i^YS!rHDKBhV`d;rZyaKRH{+1bk3tkd!rAuZ^z+ff{X~&1D&BD!%={O^iRN zkhy`IMCLiG`L@0>t%&-wK)Qf2^&SP-io2X6ds@w_In3W@d7#Y1L^F8EczeoN6(86L z(qi>NOy0LXC##f>P~X4a z=rJNro!uY?$vg_r>pODn+n-N0r4^0Te#@EaXi{^TZ2rQTH?iy>B{jS+_tbsppX*wG zIFKHXYKFp!CRLM8bNzqfuhHh;>9b%Uf1lt4`wW$K%5ZH}8jl6tf?x+N#Y9-X6Xj!9 zAf1B(rL(%i*t8~?->0q+(-Qj_{3&cO;?)pt8Z0Pa+}LqKs4hujx7vX*-mZa7o%>%a z$R(|TMaO|SHPqK!6->6bGxKbA=^~aEh9Ako3H6VD`fU3%TMBAOV5vXM|wQ#F|ZNYaTa>KT$Z=-%K+kkV*-%Dt{9BkXUL}DQg)eA#6O$jYf_tFxXSJrm9gF|ACu_EY)e` zud_o5&x?9gFCUX1F-YQ-D=ua3nwvt$NoNL(2T3N{H>9}LH0U5$BIukC4q?3ii8ux$gJx)QP@A^f6_2+n-|tb zh$gH6z}aKSdX-ca4FEo$e72kzbmdtA$(RJpcOImcwJrdtJ0^NhD1GCMqDTP|nT3;k zUEPmwZoLM8{&$z$K`p1;X!J|Zb-!O38Y|I9?j6f%Bi05t(ysbpAF?lpm6@f7%@j4s zU#TZ(pypma9P=oVU=}n0wTp|TOR!<+3rfo0--qvn@=RGs@beZnYO#H)tXv?Mr8zy( zfq2z=rjT)nR?CKFx(BmjJELg6F$uJR3qd&tL3wAq+@Dl{@#B05*m#k-gDv~37dGD< zU*8pp!w^Ir+N|aIqLoxs7CwFY13GgA0<#@0>Qsaz;@wLe>hF zg&~ki8G-aWz_l(Bei4Tk+~H)wvpFKOWj50tO}W6;tgMmxM?+&vy-)t!bNTfyz5q+2O~6D6L>`ir_m{i%&0oteH>nb7lSyE!d_=dwEqoUi)h#y2nse8? zznTt?`NQJhUi}>@vBPPV3lk1Y&jyY=Z4R8q*;fUKfeZlf?zhxcBrmtZTW+nl+-%?+ zH21#OEA8+2fck;OOuFk2W~%IKoT{e8j#07__fE?TXFbgbFTH=h8i7Da)|T9om3j~c z^4)7Emp<_H^la^GXU}17zdieYDggGRrTo|2o$zC&_r5At`QLiya%Er+mf)TBtY6f@ z_V^Azf?O*+&L!ua!^A`#v>14KoH772a`nYaAKQwGThqBNXv}8LhN89Za&Yw*(9|Vcc^9Je{XlSx# z&|XJX_qe~@d_$$3(zW1tKZQn{6WLS;5*YK{F;MnasKaPOWhE_L?|7!Eyp^{@+)ukn z+GHr){ZL&`KU|YOUuxP=4th4%?z8z&>l5L~Tjcp~b+$SAn%N|c@n@Kk`+xxZE7%Pz z-QU`|GYN{Ngum71So1PeKI}`3AhdRHePgLl>%C=_{hRpDTs;k1)mERlK?%ghWDQgS zb>q^f11CwSnS9oJ%-$DJED1T^>C>JqASDcyLHa z!*C0`q@C-2AiCl2GPqaN=hL@JvbLb%scp_P-D_FH<{e*~k|*vRybj$U6>Wh2Wagk} zLn+XE<2%2keKxo~-XDu!G;!r;vHslb=tLO()SiQb>eDx$U)^@56~IqmisAu6Qdu04$40NbK8b8{s-S zXnw5N+2Z5Kw?LY)D$q*}QLtScziJ^30V z^gVsK+-Kg9mv^i_NLd~NMU*3l!AT!szy|BiW>IQ;!L#WIyEKYMd~D1q~3i-)w76NVKY#?kHl zuiE?lJ=Z)gGX2iXWNFQdcVpE^r!zEC5>A;F_c8ySIF zL&lQbu_urG$g(kI!HFJ6z1wxWsT1q#LcEBlY41w-Y9p5pTD+pvL?5eNFcOYinI5-m zY`Wn^SB9Tg^fG4~RoqGo{bOx_rCV# zV~5EmbvZt!ml3@?9R`cKh6TD4>Pwlc#?^fvyOad}K}E<3hg+j&0!(9fc5H(vxvxE} zh|+^oQ)`9=&n*E&*RL)gvba5 z&{3`5>|PP(MWDu$r&QHL&DC&AgYCqgQTbMd+M{`!jyXAS4@!Du9Uka$1H0%(M@M-Z zg>$f|@@0MPq2jg7*n6v}H@>ddKX{vgGM87vPz4Q#GFao5t7)*)cy_JY2c}|}J4nxY zcqadryT@wv?c<@+bW;fYdANZ~IwcnVBiaJc2w3$Z?{B0Yk@xE^QAC~<=0(R5xxKFB zmtWo~#(YOx{X*fPT8_7WO1#}n7Nn7)1>ag^r+$L-nAnEfU(O`cgu?}Hq`4dgLtS$O zY%!eIM)t0lQY_)j7#H+4o}Cz*sm88fX|J&+1XB}}Zi4a@-y*ozxBIfa-wq>YaQ7Oi zRKj}kSSt5YH9{{nSLr}SGrR%lGQ?=xD{v`~NB z%g#fWA{UOeM+GXja^(aRB}-$aBie}S%AJ{;CR8a)x2e7jHUMhp&nQ`j z1Yhz15o5zABkE15yxR1PP$UYhT_x#X)Byl-uRH5hb(iBSPfGp{0jyJ3Kn_-y6h&Mh zTZC%y|C(_g@VBY0e4LV?| zk%)uacu%9$21x z4`!hM!YDo5HIIHE26?D{f?iPtmWV-q67B<(b*D-6O%i2xeNltRs;i5w-^nbxg+hNx z{1eb))K`PQlFTe6WqONNP2Rg4&sX+c6;@Kk_CsVgZ|`Fl@pCsDkv@F_c!mAfg2B(G zpHwIJ3Ogih@ByCHCwTZ}!-1ey)Bl?EvqHNxo66@FI^iej)d2t)+%eHD)qe8g{{Wb) B%FqA+ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index f965624e89de5c16b836529e9cf5b4851acd88b4..682c2fc70a757b77517c83e2ebd2774903ab93bd 100644 GIT binary patch delta 21847 zcmZ^~Wk6J4v_3q9v~)=g(kTeijdZ7UsFc#(oRN?eM7j|qq`OO6I;3Oh?yi}6=XdY@ ze|*2pIcHAowf0{1tmo8^qy3#h`_2TY`so>Z$XUC8bo=Du@yXc<1oFwuG8%TG5h4^< zwRo+B-^}*qU3I*v2R045q;U8XNc-&#o`1L%L3-v&Oot?e#1gMULE+POHK7WuE!g&EvZlm zt`Q6H_9rnsJQJpIa%Pb)jOqIr~2Z1TPNpS2J#2kE5mFA{bhPz;FMTMF!JiO669M`~>ZMplCyzWi(AEC$zhJCiF&(NrE z8e6f%(dAY2)vPJ)27E~sxOcO+??O)cxW(hClA(=ZW(uVyRosAbRr&=MlpqH}f+_Tq z^i^$voZ_p;M6P&c`I5IvK-CqaqRvpOm})xS9={HwXMPk{vfz8QvuOSG?4M8u*Kq;M z<+?halCF%(ly9!nQ*#94wQV&!l{{mfw;KW3w(JCm&gl3Y^TTYer+&6qY%@Wzn2ROU z(+UE71wr@Rc@a)}*|w@mrrpn#BdC0m3nMRT_YO#eTx>vDKRFrMo-5gnAxcqLyjHITyaV9BHss_BKj?haBN3J432POR^7 zVG{XC3Vo$8*@pr7Z~l3WDqIiRNISDUr3;4SIb-X>{ll?>Qt&t zF0dKNS1N_6bwH>~_;8ws{-oLL;MVbfb5?p@_A1h1ke7l`+?wm3X7Kn#hqmNL@TxgV zkpJjVr)llQpIq3pq#16a$5;ofnub={Amy{bX6*%u=DxLyOCWZ3go;4Isqdbx^!+;# z6)roXK8a2hLluv_6?V{il0h$qzXp$7ba^WdVhlHk%S&reLiB@m_GvJs2SB8H2Q30 z-8U(~eyI>?`2y%9X|xlRXR!JQX0LQ?3{Ido%&wQrOZu@!cGV-_hj5m3(l5Ayy^Yk8 zvnP4WpD5f^ik0t_%@DxUbGXUyETW7JCb%)e{@N|nqWC&x%#M4?D6JpsIR+|gbvCsg zmVUEK3x>V_Z@oN~7ePNSdILjvh6?7b2n1@V*{^>-79IiQlihmcBGqwYvsCGq%^wy> zUk%kjLYl&ADf8%S<8rrlzLi*CWHLR|os*IoH=KU=5xTJ^`>xusD~v1dJC-5!vpJ{~ zaq!`(c!_q%VTDOO1w4xCQC{3t<>oe=$u|_kOEEQln&)h`mrsLh@x{9iK@ZrdvV!a$ z)QD)lTo2V8Pg9$yuXSkkn>K*Dp>&d;S^0Y=!Q|Pfiqr31!e!H^!5KPs2QKOsXkQ=Db>La)x;x)YyMOR%;7JeTZ$=%PN{0i_4M;!& z=cia)%R-r9vig%RhFoUx?3d?GoE~{TV?HiII|K$ga#$Yl&U>s%n3;O1Zy>)_$V@6w z)Si1rM|~D+hiz?Hy|$a6pPI_`zXeXtW+Vcvlj2Z)WuEIW%z~eNj@m|@M6mDseS+8SZAad7#QsHr+w|+D zUp>W}Leb9SK9fA;f(~a54k%v}SGi<+=s$J|wbc2&6{PHKAe$~;H+z`%uW1KfjJ9d- zF5ETCwA~H&TZ1bHcV7u9qBb}zd~kPIAuCFfx*Xv@;dAc!a=B}KL}iDoE)RmYXs_kA8>@#bOwq2r!f^w?Qfet%w=tAt7#68jQ(Id~@?7{`GPp7b7E@OQo>?BD^|( zM$UXk-RhT6A>s{|gZ8O$^scjr_d9MOHJ=oI+p&mj3IB%s+CA(?R*g)+a&MwkWSzbY z`^>|b${CNcEAjz{wTxq|n&hcqb08#XdV;E=$)C^QO#+(B%~FVCOQ*yvb{O_2q3D|i z1mofUs2yKf3qQ{QSVNX*L5|p2*9!t$erAQx{)V2}@bIGL=DGn!hfgi2X4K|WZP*zk z@#V{x(9lrOfp;Z_{{zQT<% zL2F2T11rU6dyaY9hZe1xChj1*pwEdlHp)?Z)1^Fp%q$;T%|5$Q(Az*54Q&zp4ac5V5eISPA?}XCqw&sMS!fQqV)@2Y4xo}XQ&g= zee>|Qp_}6+?y)b~bq0ve`a5vRvZ87%w4(c8j$Zrp5gc8`{HJsM_N)-_BQ=o@BxpPS=LzkmPI0)Po5u&5KieEHH5{-L1} zhDqm>`?p5F^c`^C4?#)xdjw@Hj!W1sWC@?s8K?_Iw@=*YOv|uw&dkIp9%mF%CEc^1 z`TdaTvIA*UC)~3uFmJ1*rlJlf(2>3NXk_PC59>zg(t^~lfK+EfsSzP8iA)GmuegxG zL8aW6sDv+GME*?K!npw${YdDKROxyLuKr z*Z_i}xWfg-!op&>7(x%8gI~WA0i~}M{rY7nuJP^rcS3nFDevaVf^fU2*;s_LBcikY z&i-+BJDuO9*ez#i7u6D~GHZu+ep_D0S$9HM!DFxBfLv>Ko9)i4ZOz-Zw{?M>k}%2O z)XmR8!2Oq(yFW2qW*cJb&rkzk*K?4E1&_XWinWM8m|&OF_S?lw_cy;ZOK*{fUBf&* zEuN0Am$*_^a!Z_AnbG|Q;ZLObHH@DsCT_}yf9S5d8hZ6vI2;;@p*nh^9!)ZUj+HfJ z=vMMRaBVneQRK45?trRdU~zSBsAUW;H;e$N?r~3m0t9h}@c4?zKe_JfW#`oXVZm8* z`fOiLO_TFeq^Q2W-qdruh(Q9b`l@`x@`?(5AJd79x#^&bct*tGP*NT>7uPCae`U3XATNLDIy}%NTASxo1W5mKC z)%8oydWtiG4!R~Smes4hnZ@*q?oF2lga)wGi+#KU}bp(D!FL8!;2tHEX?ACpBiMs>eKhdv= zoL?hFea%9ja|Qx`2naOvV~Xx3L3{DTBUD79bP%`rr`#I=?r}{(BkP7^K6ZUVd~1Bp>ui+ zDk*B%XQtfW$(>&9bmf2}I%F0hbz09Zht4+Q?+D;TlRGf6(EpHZfB4UvyX-1KK7Klo zle*!C9bMiw9t0uf0WHA+t+!93?`h%Ahp5u(%y+(42NszmGszPV5vF8-<`NYCo_!Ag z9pW~y^}$vAHdwt`tgo~EID`B*te4iYuOkKp$`;^X3o3|ocnl$pnXttRQmlh&`)mT= zgc6H#f))#jbc~EX>7Ja}vT<^Lt^-q*IHQBo<4_^#XGM{ng38}pjS>7iEbR8lzuw4& z6CmuGZQr{#uyKtw{If4Dzxmbk3iD|%KMtoH0o88^s);E8{LA%;K$@ zjHUDff#^ZXax!|;g}aR%IsCU5bpWjJZtkmcxAr`(OX*o-QD8Z4mz~fQu?7s=m*rq}ykEpnco4=vrnrjmk&QW7F%jph!7}c%`!YV`pG#km&Bv0>Kdml~1@UWCLWZ(4~>*khc)-gOr$v zBjwz%8UF8vS2DlQ=#l4$|1w8-fc`tj(2Tx6QHr9%M6B$-wSzNRUwU|$tICv>^!j7} zn{@O~1F^K_5BR2hL=a5#*LA{SzvLM9X|DDYnA+Ok%6oWFD#npVB(SP(-n6OGf{2rW>K`fq}UQy2%_dUTE$=~_A9jt+ZC(@B=qqfUJqBw#MahnsiOzg zotobv%ANjapnZ zCY6^F{x0(J;Oyceuc9G2w~M}TRqQx#su(G3M8+5AgFZ6n1Zp7uX~ewOx?%^VsDxKq`>tF-;w{=Bq!<@%RQ0PrN# zT#_y~^-ir&Ygp4oUjBu(b;0%SaMMA_i6FGPrbe2G%9y>=yFAy#GzJR?hssP_yLvh( zBOz(G`t}V{`2WOkTxzIBI#tllNLoIZS<63ejV_a6C~+K@p`79O9NlZgS+82q<5O_- z4u4Vold6hJlZ05tjHf4P&FX-@ z@Pge+(LwvaiHY4nKN1x(1_fL>J_i+kD1H@Oyjrzoo`2EBiBWyB&=8I24#Vve8veGN z>0r6u9j2nX%S_yEDAMA&Vo>YdGO#~7Di0zhCto`}Jk)x6`Hn^uxMCFZdP=a(_EiYt zG5vMB-R>mexp6h8p7aS{M%VM|!$Mx4U`{&);=&e`mzT%2o1F=Z7!`;cpFTyv7V`}H zmcxdX+qk-aKe&Ul#}aU}r(l;2aM*LywfT~yWjwrRH)v20%w`nBauKHMS#M8!6BieU zX{q;)yme!P$`J+NBvrnnK)a*&u1E4881n;(w)4a>z*fUGR47^^0E zzL4V&DKBEPiBQBi{NS9xr}4nAofakGHy+aG)a#Q|Q312X8oteu2L~n5Do_4n>DEL& z{H5>MXOZ!cb^%+s&9;4yvz_OZ+0SBi*ioaaMn1alF47zA^By!kI2bjWbo(0pA`cWQ)tG~!TvG2 zos|t>LktFwv%HMJyf}E2t=k+?n+qHJP4l0<;Dp6yfl{~+BHHi5|A|G+$X9J|e_Dnu z`>CZ75<|UArrq4%A1|^Drgnhon#4G_2b?8;JKf0~-a-*50O7{2qG8G_b@Pn0@*o@_aFd7Yc4`qH&@Heo&R;3th|y^TAzaY=(EqCNBmNc2o0kF-2qWClzfvCmxJC<)`R*X z&(wu+{A#>US8cLD-Y<_tVa}cV9O2iJkK-ty0~%)Rx_A^cjCq=iFBA!KMs#qH1$xLL3joV&ZfC!(Mj2nPo#sj1C} zj>bWRj*h0Rlmw~D{Yrm}Rn<&U*OrCHq%;*14^rdd@En`-^`hZ)wr_Qd1m)1LbI$p` z0onf9$|MhkTFYy=Nr{QZz3uGha|ip%K0Zx-C?G0kka139#V*$?b@X2%C@X%kxf@p& zVxc4;-dnT~LxEbEJAYs$*9*-Dvv?_ZCtpFs^;Ze87VQ`Nu}mjD_{VW`E&adoB}0ND zprD|jDu8-gXiR!1T=2br)R|v$DmwW82rVW=$iP%${zvM6ocBD@l20Iu95dK1nAI5dNrjHrmX9~b4C3OM7Z(=_m1}F3A3l8Gl1)rW zv2A`ODVaSnp~c6?$F*CinR9Y6C%t%E7HB_$E=&1FA-rV`3b zl`Dc(&WzNLVaF5ghz11Zf3`#5)bX+LVlC8!E2j~Bwqtyy>GV0O zCp->?*Kra3S+4z@p__XxHg+``z{4XomOWY(0cdNZfM#a&ks5Y=xWZmr^zwJ|ehm!Z zn}hlLn};$4BmX9_9;V~2$>DbX4gJ$_iIK~EANVXr-V>GXw^ZdfkTBL$P0%4gCyN@$ zjqjq%=7fc!)(Vv5eM2?8+TKvuHr}%sN0&Z?`#&lNwSXm5Qd1~a;^?;R_~+{7O6O3k zyiiMO=17Q-y}RCSX3h-z$_8QExe&h& z-y7UV&C8?~Tw#JeTKuUnlZw{Puh6R_1e}}%o0}JqSt*JzDWbbOAUFBnzYy{JtuhTU z)Go=t<3_BO@L1ZakBa$|sO9p*cVM>}OKlqtT3RaNhUqW-YyDVV)4-bu7 zE(M6?cuK*zbn@^2Nivb0c?!)*{Wu^D?UbUa_eRMqQnyF3TR{=Ay&)u|QS>lS43v4O zIb60=9Y$O=eh#*<*8g~pDS)FDA2u2)?RSQBAE2_M>7^Y*o{P)N$k^DOvvIQC-d>lx zU7Wo9eCnA=Hcopiz`2atmlERGX&*QjYJ({636G47Tt{vsJ^)j{l#$o-ewzBFdT@$a z^YWZf?9>-!=s>^?D>+}rOQz#Qn700v^oEx1?m>uJPYltlhZ zf2<3qCf`<2aUsM0;k(j}EWd?M>2F$(U$h<*ww6nJ)DgrN^;u{xwozGn^^(gEqeN(O ztd-Jon@tKjQTu?wfvwrCIl2ijj#4VzPK7`01H0F21KI7VfftD<8w6Dj3w+mUx{$Ez zB`KgQii}gv#)c&-kC1{wF^*1RzSfoilYnmP7KZPxC^d-Fn(nXIgDD1lSUSb~&|O-A zfRR65?`V(u_jdfTta9K<>I7RV=x6mXNl%C2YWaMTc;sX0T#_`C_&5B>ei!8)W# zi;;>=V{eU0U#!ukDV0TLQ=67f#sBsz-Y&4*j29g8mU?C;6ukCyubXB5BvAHjS(0IG zsNQd?mj-nF9gVlksr2XePrGQ%0!q!fV!^V!A*fx$C% zB_-b7Q)Aq&mHdZkZXI>GD104xtlWAArepv9j%(hoFC7Qspw62{GPlD3kZsMA)bENJ zYrb4su^Um+KhfGx8TstCU1oVu(rfJC{I_qry>_;2@^4B1VDzB=j76R3hHFlLC;4tu zU+IbcMi`{98PXy?eCXW9lI^$d2oUo`)0gH3f0rH*0Trt7yK2jbOFB|r21#k&B6_mC zSJ_X}-n?*>rMIuC;k)1KQFmBrnc+qtq~cyMPHk?!NJ{EsdAWx)k^g){00K@U;g|R~ zs=J~|n3$jcz8zNtl=WG}(*B%B_!%c1AIC8>9Aqt>G;?SmFP{vnc}M|Tk?Z{>BV)eL z!_~futZeX$GdiC+R8Y`Z*pG+vrh77%)4fupYp?@uH1hfUi?l_IF@M|W?;&-top4}0 z!U_MwI#d7DK{c$(SqpsfEN3PD%=xh&&p<^rx*GUoinBpbG9l(yf9sCSCX6S0rP$aa z9+bZfo72F^(xQwgA^}NIJ1l5k<$OL|Zcib528RSh)XzRKB zpoh2nLMo`O#_QO)I`Gj;Tk53E>*?-%2-%9qse()uKlKq=r?Zm?p@5MtJ~mw&jby`6b^!BJ5-LdGh!OJK`J+C%cvj_crTx31=wUkeI9 zH;RY%H@3oo!`VlnKIC+D_w@V>V#vLOJqn5Ie#jGz`rEe;5eq|eS?YQ;tnPTZ1Vv^H z@%o+h@cU?Yy-D>q0{sE-&-ov?W%cD3dh0uI4Hr*AHv+66h!i*aS}{NO!$ZrW#NrJp z2eqI>?VJ8W4cgVcY)*rco?q`Omg#NAy~YFfe)Iz#hg7N>PD{3d4(Vp3e8pv}rALO1jV-63AgEm#F*T)w(SC2MqI#VbuZhgR=K1~_eEP)x{{8#p z%afXY4be8V|5B9yii9V|>+v0DTgRJ|I5fYCpaQ7x4T2*X^+$rOp$@>8`K7 z3u!++*Ft8)dA5bbbmXCgDhd2B?3ZUZH~m%|oApA=DWSz|e-aa|syz?iZI6kalBSca zX*gj_9gjVi@QQ)K9t28uacD)cCybvA0I8|hLFi(l3i;LA;9T={=TDuRODRfMR{eFD z^6vN`VK3DG-dSb@eVrWLN%>!$kXpueP}k+@xr}FevfUTiBHDpsmVE+h!*fsK)y=Qtcr7kfc6b)Ze(ZC;{!8sl_%>n-Txv#Ob_(`KadXaznD%{4~Q8F z8ZlL3Ga#%4CIg>dI$_*HJ3iI|!t1JOpSa_djK9%5Ljp0I>!6KKh+=oBoetVompwdRcnh0e z6sw7%{LmO*59LXcdC`d7-hCfV(xF$ZOZz3dIofh4ksU~W)$@&7$h;0HLJk?(ulesG zXqfm8OgHLTa~T;GuRcBkHtqwXoRJ5p2|4MGx{~n1q$%w09)9?&0l(`CICI-i7ABFk zBc`6MH1cK9@h=EQ-9?0)My1FF?#*2M=pg?K7ybLE_ojMojDSY?J95{lLdxqJC1V39 zEFE?*r;3CBl(`dXZzhI#o0~2i3H*o-kD_{+F4n;|Xgn=)vVbx#2xQK?=#wK;S1TKv zn$u*ihEZ_QqwR(QUkkL}84rEQ0j%$T9?#uUzI=a6MEzoD^=*A#8}A%90O)A{=(AC=ikh0b zZ*W1{Pv6Wsgqvt(z(O700Zo?$daSk9VopAu5xsh$1k4Az@b-=oe2_MM2I}|yPFaw= zKS^6%*x8j;x~KwpiFe6YNBo)g+2DPkSqwXo1+Crg&0cLNiP{DRxz); z6dsG9N%$z}TwA-_1?m=qP-CghmHxEfW-g9+y4>h=Zks$fba!*3{3n;DDgr{Tquzmm zT4eys#wZKQgnoX#eIiZb&i%_m%Z~Gg3NasWUiTnCmu5!q^n2(fS8vLa?5mJ;h9^0; zsA86WR=mDBJR6jFdfC92((m>A@;~Gt&_T(Us*Qo{AN@5yEJ}oT=_!6`jRC!X?YeQm z`QR?tNNv^wWff)$o^SH0spV@v7}7kyFi`@mCgw6n+auRQFfXQwoVC+a3J#%JdWlR; z7;Kn)j`HAR#yNr?L2AT)A}H*hOCE=fb3JLPeD_Y1*EK%j)+gkM9pg*q^(M-^~pr9c6B6@`=wTeE+u~HuQ@S`{X*%wTZl38QyE3+0| zL!XX5`;rnh2bk3hu%ln&U(r#~|M4B?=jVxu#Xm#u?(SIR&E4^l_#!(y`=kI)?s-m* z>~D~0j#zz z1It(87ZB0lmam&dcQ4PFoA2Cz7LlBF@~{|5-YF|LU$ro#Tq+t|-b>9SzwbOjxuR{B znFB+n+PJoh7$f%f?4Dq|5I2;BeL@2Z{+Rhej}o4?FP%AH7m@+ZN+9n|Wv71-Wax_} zJ)O%HwM9ke-v&I~f0T)?8A_ivu|Voi0zbh4))7jYs=Ko4-i`2i%``rFwS99rSxd6q zhMUHmue>8 z*{`-o0;^TVKt63KfMm5yb~;-)y^u)n2`3QJ4+l<{mEGKGCYG=%9}kSrXHE;3mZy20 zLwH}Mm(=NLItK){Im$uj29~mR2FJ&X+S)StO&VPKV3%xVd<%&=^KBH6VOIRcOm~(i z0u4D3GOyys2U(u`9KR5D$yJx|{u$L~yMto*xYd(aSP=`PIm3F6=}z(mav}#93;9l( zEAO@z66AIi6JE+v?&*dSdg}Q<5|yO>e*I{9bHPwG8>8%V4kfhELYEOJAkAPXz66i< zh%9WZM9d3HT_QSCnF>cUWv%7$+c6OdD$_Or0X_Sx0E>H$3R-RrLpT5k>NoXZgF-t` z4LrWJ#Q{WbF*i?l6|cj>&u=d`kqnE~4eK#mHJ4LFAUg?2M|tuzqQdmT>lP-M;$Jte5b=8whCSXCn3!g&XJwXg!5^WBMbrFn65gAc zdek-93h-B7>VKUQ_Tb*ftk(65$6f!-9rAumh?&v%|R``Z9x*r+peM$uU?AQG4772OtUvA2$(^++y1BH*^s;paSLw6YO&eXF%+R8D%I4O`seRV zB1Cm!b?PnxA|+ctNq;@sA|fcWaY?+s+OuT>Q!x8DCdediVGD8AL_X4=Y+@@1z`2=r0i~ z&%17+fTo{ci%ZHeJn#{4ySj5-ITY-hH<*jUZ4QEfSGT1$<{ni(Yr@pH{lB~~AtC(Q z@{G+QQmE&A_TZUC$oo}{^||ZdlUQk^KjX=Py6=hZ6;s}KXkn{OP2){GzyaKlCcK=q(Dk_kqBv@ZO zqv8{brpWhockAbpDe^ju-RlqCf>H?*@$vCUz=a4qQ^G&_`}gmD=R(>>M!#DnAi>Mw zWV#a=le-r}Y{09mkT}g}0s;act4vYl@%dD*eWX>bXn{5gY3c1@`k)bbP^bSln{t%& z6C9<34*lZpO7N|euo0*Yv0CVLI{gjVHmIvhytr_)x#RTYE?bwyQs*KHj5g zB^eJl=X_R19n(wSC!y#Ho$H*qPD8d4>JfLCIRG4JR%f!5X&m6bzN)hyU#PX6$%@k9 zLx^YHK`X5dOjJka8IcS7$wHecNaKJTjBYqc?-wIn;#B z5A;$j&F;YwjVFl88eD{hq^mHi;OTbnPCI@+Xp|Wwi;E9|SxJpax|lq|zA5DA&G~^& z3^8*@SRuu95|R5GKco+)zA`X)wC^TKA1*Q|D-0 z0Zs?YQ+&K!&^6f~=|OMk`xdxg9eGA8R&*qZqzZ3`q~z7Y6C}k78_%N3VImma> z)HH0f7=Er54mv=#)8ypk|LffR5L&H@ME~{cS5r^svr+87L?z+td z+da6`5^niyAxR`!qIjEMzy5W;8o}kYDE`&Lg03(6wu>|LdoC5n@Gzk);xsxC0VIWp z-gJWr38x0N?V|9T$srBIx#rrSkU#WS9;j_??U9G%A(g6RJ^(bn>rxTRl#wQeG0 zH1jq$nzYPDYdX!=A{S6Asnzf1GSM&^?wc7pABJ{>DIE0Yg%XE;RSoE%kvld`fo7IyZ(#5&*Ir}!DCP6$VvM!`-aEe z02&%C8DD+ED7J3ea>UL9BI{=}9N5dn2SHX#Q4aoY^hGBbSOh5tWYt6iMU>dj@p2Dj z1&YS4FHTw=!66p9=FytvLj3-rI;QWG>^||WufNVz&JL$=QP&butCwsGkY~>A(k|Bi zyiY_u>^w&M_Wb69whw7#XWD3Vr|LEjP-&V!j(NH2zaBzxN9KY*gVObR2~7!&qq2jF zFK+L{R5p?bQJOyvnM}SkFuP|Tm||(_tLR70%3xVJ1AG!Z|CnMQ3A_nIn$`9qt@2U+ ze0hUFogJiMFmAORu)}(k5;(<<&rw9y`eKv4;I*`$XT2$B7f|c;*G>){43<|Q)u|(Fnei?S;_SJDwQEsj65j7#8 zryvPfUgfg?)oVB~$pDcCE{Redb|-*)rdAnb(^Hr}YPj zpOJntC*d0nbbU4GDkjICyU*SDvEZ+7mqI}^NZpafoB zlij{k0?duD?vM^G)&sV|QESiJjuG*!{>+#h!{u8QSZ`-`UiHU?yBPyKX)?HM7hYnn zMojmNL2ErvjmUDA5TE~XkWy&i+;e981^s`^a5SUg3e=Ljna0)^$@uI|LU?8G+Xo4x zb)auQQlPK0KkX9JH2TjWWthadK`F7!tJ90u^t~)P1xo%AV7zTNy zp>@4L@@SAe5$|+2F~rlZl)U_btuXPyTiY?drlN;cn@sU9NVe<|l4ZRYlb+9u)HnNV zFqHhfvCu>a%vM2PK>0w&M$gQF$2(na@3mWzwm7 zw-^C6KFSz|JO4(2OPeMhmI3}5(7vkqlfo{};; z1u815XRrn|NefiXL8+OWf*Xf5j1K57C1m8>UYm1PZp)*dpGrWMN7Q6t0iHkwA(bq` zCYKTmD3ZJaQ|>h|Nkb~M!8!*1D2TPgFH7gQXztaKcNL`~XP0`xi!TeUmG5vdSVF9W z=?VTT>6w3@zLb$8z6Zm)-6Z!hJWTEeNHid#IBR@tUqq@0?h2L2?)8z-$Nk&&eE#p+ zFS`Ebab!3kzU?wj>S(K|s&eC^H)jwrDu4iw2W7}f>#5|klUl5X2H0)gCx*?fNSn%; zJT$7s>%|VbaRbH^oprpZ?<=NWWGEPEAR?rH+(jr~$hu5MN)$S}j| zxgrW-c|;t$7W|LqI#5__t%+ts(FhCKVupr3kevA!jS9up-$@DF@U1=_lv$SoNslaV zvP0L~J5Kkm(6eoO%T352q5c%?VjbDsZ4i@`SNfoLBE=Tw-!)~7(y*|wnEs6$KxYAM zA`lCGCH$Ji#WT>CS=zc_i2)=d8MU!##=yb({uU7o$}cF>tmF$0AiYIkp||?1j^Yh9 zsZZQ`QX`vm?7Y9nsa6V!8@vJ3wxx4|pdEj(*U9pyd$FnVAmBLs!Ew1sJ59(rn~j^B znTsn13CQhT;LYZPxW?C|k5(jbawV#r>MJce&C>)O(^GG{asTrLn$zG9Fh2nu5y!`iDj!m!c~dJvzk2foZ9yL8@A?Z^YHU$Co$bhI^=*n;0A zu=&QT+VMl)kv{<0P{zEoVx2gMLz7VA!7~W%LIachKjfpB}Ccll+~V`9PFny0#M;D6dl30w+Iq^k^+)P%9^1|#h9hkO>6L_RQtf|mf*>N2;Kc)iHn<-L zCnvU?`U5T=UY#&%_7I94g*ekqY{ZE!ls&s1W5dR9%$5Q>nj}{!o#bqX;dcBvAvt+} z^~V9gVeI$Ipwjh1b-Y`5?@mO4iY_XYuDg|#*-(qO}10eOUEJ7;}I(i$)% z&maZV(k82o>>L~_Tsz>@#))qf&CRo!|5nyW{zEduU$xo+u2;-w(v7FNF-vli4H{iZ-s1h^2%X)ZRl+E) z{L;JV+c$>S&YS(;kXW%UGQX2gD8H+!;)OSKV%)|)e)o7&p_yJ(7UW+Mar#1jCk@pJ zIJ%D>Tc|xjVAflosz5vV*8w|qd}*(S9&M1&uOeNJ&doO*K!-Bx zK-R}6vp;^axiYMWtted^=%A;k%0}wU5RIt(cWpbAbp~!ZzdrI^Rx{IXwC-sn2ey8r zPH-wx)iapC{;4}hO1^b5S?CR9;ULi16!ItcF>A7)SN%3Zy*7ktW;{E)d0!0*uoRyy z9&7&^1k%G-bI`Mq!keJ2MKO=^*nW+2wsNvF&WtAO)wP(-w+Q}&m#qky75uxJ$;=wSq- zSRJ2{7WB7I@fj;IetYg{Qd3Y%_QsV`1uoHl;?#* z98yBsA7mIIN)2MRh_^4n@K z?pp0n6*$2<2YUO7brIQDCq)$z)Rd&?T`L6QYZtIzXcIU=m-DFSw~ZFM>7vO^DHa|G zIlCo97Q(Z&^K`1i_P9~#tM7gu^ZJ|?BPfy*k2mjSaKE|EG)~vKbW0rond_$lKvH- zvzzmJcK0GiOGiMe!(Vgwe&o`Y>+z({8OrJ~&UoA$)H8UCD&cS#gTnZ^f1rqN8NE+jjp4G+Gh};z3AhL(AHsT6q2_5 ztk!m%oYSD<-wNEB&V;_K(<3+N{Aj$HlgiSu^VhFXq<|5ptJ4f{+C@+vY#? zi#^!De2zcC3UE&f!p4rUScTiK`aX_&xl8^E9A9+S{ObFFa!`$cJ3j@n>Q+#X_MdvY zJ(6|04BrCx7uzaGm{=+3Sz(->ywCbcyr8ES!Mx)FqFcrG8_GDJn^mCMrtyt!Y5Cch zRVRBoiLbZfvzqZ7+q0_oa^8mumRf}Q3UL5S9&&v*l$q?h2|;vwK(h{G2#Al7mXLN9wG(3 ztMtoI1p5y;0=0F}>LZKK^FU5dPfwcLik*szN-A=bp`g^eF3}Q%K(=`*j(B1%k@9ja zOZ?c{vUN0PoL1oDb7UHKq8(`ZKxt4G#nW}NQX(9uHfUof_j+Mr;T7wK?_x(Oja1Nb zR%4NOXHX24M0!^)y;@%%aOdOup5qn9TE(Yn!tQz?Fq#NdzKs}&(?5^fCnxAS7=W>H zlz+J1L>V#l`jYB&o+<451Nofry*>IyIn=iH_AHLM7VIl&5(^$@=MShddSpm)cXV7F z0rQ&(MBKDD@g=v9ufK_$A%SKa`(y6nluHUMcCh~&H4;_9p%wz1&@Fe$1{Uj|aUgkk z@B$?tAK^bQOD5)KQ-7CyraYx3B(&O(@^B>e8D?T-jgE-G`jMcoEkKEff5>eC$5EY? zy{Uc9eY(=>P4YOz2|5B#wD7hS9shqdoOwJ{-~Y$&O!n+#ERALCi4YQMCPb38vX-S! zvc*`U2zO9KmdH|e2_a;Q2{T$GvZj!I3o-Uj4957LzTe+({+T;7k309C<-X53@7MEn z8e5`zc+Na$3U8V`hZgts^XkIMIcC7Jom zn5Stk-%nO3cYsJFk}jXvlEAB4*mpSnmD^ZY-W-~d;T4aq=X!lNZJyHFlZ*g_LWqp z6(N{VgUDwoO_$tw2piRy2t7$fdqPvzrOa8}ndhJfBEJU(m7F!k;RuD7Jl6+*faLb; zYeY*_B1o)Q1HJF*^XKi6HFJI;-wzsof7drA4!~TM>$&5ZzZ;iOP4ynE!vVKyh(A^h zFK?+grl!gu59u9m3m&PT`{Sa(h?^tUm<$N{{5sM}f@8f8;Jue0tBo!f?i+szGjtkn zx>NP)h!KI{Es4l5rUzK7`hdq1EEt>)diUAKu(cM%fE0Ccae}nFdna1C#m{?}zW*8x zYo(Ny9{Xlcw=M!>n-9U zHNAcm8+)-n2HVn+s=%0c2`EwwjEn%}_3BVKc5JA@x1eH6y${{Igjz&-=xy4rfnX$> zrEYC=eb9Z`o=r)vpb9vS(yiqf+LOv3PVUxcXxS3ML&Zwc$+X}fVKh>H%3hjP61?Y@V^VrKe^c0 zs^j>3pEeyE2~}M0&hfi!1XTCPP=I~7CRqd^v&vVyfoQ)+Uoz3x*MEAV1w-QD;W>Wv zbhQQX^OrhFk+H^;L-mGyaPvo+qH{B5vgKT)pr#u)IaB>`%Pr6AX~9(GF^r@=t@E7@ z&l4FMXHRO%yI@#5ot1-wQCM{f1RNk#N~o!&u%S@8K2b|s^bgfAB??5i6ypGs=()Z^oA>LTK@RPsqKIq1IZ{Mcb*4&B#=HsAF zRv*`|K&grFR2F>Gjp}C@dMApr3#}d_APy-D$A*!3!yzgyLsDR1_{IzQ#HG-pTw~6s;Leu^;)7Q~2`b zr{yhaUbFlda&E3zUIN1|**l$&pBv}xtppg#p&=X5pjn=&m+Ir5)c6M zB~N!oB3~D)&3j2@_Ndj&G4IC*Ha*NvCd87LCKl!<_tIZqO-$z^Oz*PZ8jcw77}Q+{ zi>ak2Tba`(#W|MaaL8sCr%LrY~0b}whVf3t$fDm7*^CmZ?V9c7{ z&r3gQa(-Nx-IL>k=GZGrrP$W#?`~HvmPQ&pTU2}Yy{70_Lf%e zZc0N~CWy(F;2ndR8GT!_ISGG;V8gcL$BBk<1};G-A0w7OG(Scd?WO1Jf4HF;$P|I_ zqH~qkiShA8rl+SD9!!jkWP-5f(5?0PZ-1haN69khJ6;4{qs4xXAtWS>c>LqGfAB_q z<`>Mz%X>R*H9kIG8iRRZfekTyJCRg{I^Zk8`s}oLD%!jGAhTMfnVpttHUh6bNuy&A zqM|IVtmf82tgO;TmK{54mptHabZI=fsMvz2@j;wzBFZ+gum)2h2IkRsR>!k}G8GXS z+1}N~c%=<&9kHT=8cfvg7K;q@Lk^3;cl8hA`r~7r%g-sJLyz8Q0OCa> z4Dg_@Dn}$JcQs63(jme(SGnogu>Yn#x~G#5agW}8u`zro^Sse>v8jBHP_JQMpNW{| zjUo>{gfwq^Ym5N>1j9T1mM`_;Z3(`6OzNs@ndy9pfNw`yOTddu`s^ zaQBbQ+GGj6D5|K=y*KTqByjizPuBP2$$NNkKT-AALs$0cAt8WzP}oCgc3KZx*A_e@ z0naF*p&?N7vlBfJC-#jUR{A_ZZWQuRJ7&zzq*9xjB&y(i1lrqP#n&?6{q@##yvQfb zL3iZ4{4~h(qhD!#uu=eq2kiz}7&yy>{w;x9;5Uf=}Cv zW;mZmzZ%pVY6YMCU5ZL2Z@mweX&G8@iwy~7Epwco>`$#sO199q)RiJwp5M%I~d3dozMExE%Rj}H#br2 zt{v?hZ16u{=kH!kJ5C!u>RgB2yUPDx@JR3Gdw5OMc9`?7euP-p;FnvkD3ba08k2h)qm%MXN>pF^1Fstl2 ztYAR_XJ9I8GpNqwtqX#?;M0ft3C*wcLJzF}1T2d#5)qe|Hv*E6-1id(f2$n*-1G>d zcQ-ooe%-A2!b2JQaM=B))^;XyBr_ckF>(J1S+raMhP9%IdP)*oOB zK>pxmLBBf&>XwNP5bI5!cXT*5ie{yrrPs%ybp!~#@BQz6S2k$c+{#=YVA}^@!*OWs zG*z=K{TOToKw7gScnOVH;p{B`x1r=vpw*Yt_cOsDTlkpQF5l>s}^;01}|7i)&(n9ztLhXfdmpT7?DwtWFb9T<}+5!0}5Cq*zFPX_so=PNY z%>lGD7VGC8~xt)_BfZo7@UI3hStOPDB?TxK$3;KV5VGu9eT5-Mc_%2@>f zBY)z_)?iiEfY-I&no&h__ejw9G^Z|X+tkSFU<;4C<1k)bNJyw-sgkU;(lEmb8uIHxlv)Ugw%+fI~x@rPfc)Z0{XO|Jph?H11v+eQPZjZ&`4;(Gnbs8#iO{T7>D^#u3?mj7US zg7?GJ8zgs({#I6y0fwhbr}HgNJnyy_u+vk{=@(eE+K^7LGgy}Jms~l9@)4;++S}X5 z!HJ3UmVTf8t(KAZCZ91(R{X=O<6DFtBrZ2_;xs*Lk}u=s99vXoNPaAQV1x8P0x2hZ9OX9{Y zi8T#Hhe<|M**Px9N5@!FyTjF?Lx&F8X=O8sXPXw39#d3QgydpBglT9iqu_8f^E7#v z#*9R?F8%RnZf<^{D}h5D{QBi`O$il_!y#ChA~Sdx*f}_CG4J}^uBgoKKW&#PFE4LI zB4=uI`#o!YLfztqI;bXi;fT zUp%s+CG*?;Rx!&H`fawn9#zMW|6J~{b_{tDz;noH$|U}w^q4><9I(n8=)aBS2|Fhj zZ(WM`a#MBBN)T0p7VzhJR>jq%%skq>P}f>dtu#F-D=Pz)!^F(InYMFX$+~Y|LqmhJ zX`aj-Z;IM}~%=KsJW$YVB;(QSVdMl@8@{61z2x zdfHARPCxe@ely5jIVoL-q+_eBAKRP^Bs1C2tm|RD*^%MljkImaq(^BNq#!puzEX3Y znH6Hl|0dT6;kXk-{JEWgRIm|?R7l#KFIMNWezXa5%(6iUv!m0>rv|M9$=8ukeujMG zSt!D1lmUs5KFX;uGBQF`B%~_Qef|xF7|y*(ul8a*&eCR5c$g&4k{ZtdMTn<-dbpfR zZ1JCz50;1$BlI8^>S!*w2=SrEFTojdF*`fC{QF*n#x@$wvsxI#;u7^5Vu>(U#rzu~ lVSf4x8$p~ULi~!v0g~&N__JqohyVz@jLw_tSLixL{0H+eUNisz delta 21053 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 C-r1V~ From 251b44a53c25083870b71866e998e139d417c62d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 12:24:03 +0930 Subject: [PATCH 45/75] Changed hydro trays, fertilizer and syringes over to use the reagent procs. --- code/game/machinery/vending.dm | 2 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 36 +- code/modules/hydroponics/hydro_tools.dm | 47 ++- code/modules/hydroponics/hydro_tray.dm | 393 +++++++----------- code/modules/hydroponics/seed_datums.dm | 26 +- code/modules/reagents/Chemistry-Reagents.dm | 21 + .../reagents/reagent_containers/glass.dm | 2 +- maps/tgstation2.dmm | 19 +- 9 files changed, 244 insertions(+), 304 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 61dfe3d915e..527212d4cee 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -812,7 +812,7 @@ product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" icon_deny = "nutri-deny" - products = list(/obj/item/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/plantspray/pests = 20, + products = list(/obj/item/weapon/reagent_containers/glass/fertilizer/ez = 35,/obj/item/weapon/reagent_containers/glass/fertilizer/l4z = 25,/obj/item/weapon/reagent_containers/glass/fertilizer/rh = 15,/obj/item/weapon/plantspray/pests = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5) premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 547464a99e9..acba8dc9293 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -10,7 +10,7 @@ item_state = "apron" blood_overlay_type = "armor" body_parts_covered = 0 - allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe) + allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/fertilizer,/obj/item/weapon/minihoe) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') //Captain /obj/item/clothing/suit/captunic diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index e166589cc42..263f797a95d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -164,29 +164,29 @@ if("meat") new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc) if("ez") - new/obj/item/nutrient/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z") - new/obj/item/nutrient/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh") - new/obj/item/nutrient/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z5") - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh5") - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("wallet") new/obj/item/weapon/storage/wallet(src.loc) if("gloves") diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index f39fc0ea868..a0276e37b73 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -267,39 +267,44 @@ // Nutrient defines for hydroponics // ************************************* -/obj/item/nutrient - name = "bottle of nutrient" +/obj/item/weapon/reagent_containers/glass/fertilizer + name = "fertilizer bottle" + desc = "A small glass bottle. Can hold up to 10 units." icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS + flags = FPRINT | TABLEPASS | OPENCONTAINER + possible_transfer_amounts = null w_class = 2.0 - var/mutmod = 0 - var/yieldmod = 0 - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) -/obj/item/nutrient/ez + var/fertilizer //Reagent contained, if any. + + //Like a shot glass! + amount_per_transfer_from_this = 10 + volume = 10 + +/obj/item/weapon/reagent_containers/glass/fertilizer/New() + ..() + + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + if(fertilizer) + reagents.add_reagent(fertilizer,10) + +/obj/item/weapon/reagent_containers/glass/fertilizer/ez name = "bottle of E-Z-Nutrient" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS - mutmod = 1 - yieldmod = 1 + fertilizer = "eznutrient" -/obj/item/nutrient/l4z +/obj/item/weapon/reagent_containers/glass/fertilizer/l4z name = "bottle of Left 4 Zed" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle18" - flags = FPRINT | TABLEPASS - mutmod = 2 + fertilizer = "left4zed" -/obj/item/nutrient/rh +/obj/item/weapon/reagent_containers/glass/fertilizer/rh name = "bottle of Robust Harvest" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle15" - flags = FPRINT | TABLEPASS - yieldmod = 2 + fertilizer = "robustharvest" //Hatchets and things to kill kudzu /obj/item/weapon/hatchet diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index d391e33f524..15feae5a882 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -6,6 +6,8 @@ icon_state = "hydrotray3" density = 1 anchored = 1 + flags = OPENCONTAINER + var/draw_warnings = 1 //Set to 0 to stop it from drawing the alert lights. // Plant maintenance vars. @@ -30,98 +32,101 @@ var/lastcycle = 0 // Cycle timing/tracking var. var/cycledelay = 150 // Delay per cycle. var/closed_system // If set, the tray will attempt to take atmos from a pipe. - var/force_update // Seed details/line data. var/datum/seed/seed = null // The currently planted seed - // Reagent information for attackby(), consider moving this to a controller along + // Reagent information for process(), consider moving this to a controller along // with cycle information under 'mechanical concerns' at some point. - // For all following lists, when called in attackby() the relevant value will be increased - // by 1,val if val>0 or decreased by 1,val if val<0. - var/global/list/toxic_reagents = list( - "anti_toxin" = -2, - "toxin" = 2, - "fluorine" = 2.5, - "chlorine" = 1.5, - "sacid" = 1.5, - "pacid" = 3, - "plantbgone" = 3, - "cryoxadone" = -3, - "radium" = 2 + "anti_toxin" = -2, + "toxin" = 2, + "fluorine" = 2.5, + "chlorine" = 1.5, + "sacid" = 1.5, + "pacid" = 3, + "plantbgone" = 3, + "cryoxadone" = -3, + "radium" = 2 ) var/global/list/nutrient_reagents = list( - "milk" = 0.1, - "beer" = 0.25, - "phosphorus" = 0.1, - "sugar" = 0.1, - "sodawater" = 0.1, - "ammonia" = 1, - "diethylamine" = 2, - "nutriment" = 1, - "adminordrazine" = 1 + "milk" = 0.1, + "beer" = 0.25, + "phosphorus" = 0.1, + "sugar" = 0.1, + "sodawater" = 0.1, + "ammonia" = 1, + "diethylamine" = 2, + "nutriment" = 1, + "adminordrazine" = 1, + "eznutrient" = 1, + "robustharvest" = 1, + "left4zed" = 1 ) var/global/list/weedkiller_reagents = list( - "fluorine" = -4, - "chlorine" = -3, - "phosphorus" = -2, - "sugar" = 2, - "sacid" = -2, - "pacid" = -4, - "plantbgone" = -8, + "fluorine" = -4, + "chlorine" = -3, + "phosphorus" = -2, + "sugar" = 2, + "sacid" = -2, + "pacid" = -4, + "plantbgone" = -8, "adminordrazine" = -5 ) var/global/list/pestkiller_reagents = list( - "sugar" = 2, - "diethylamine" = -2, + "sugar" = 2, + "diethylamine" = -2, "adminordrazine" = -5 ) - var/global/list/beneficial_reagents = list( - "beer" = -0.05, - "fluorine" = -2, - "chlorine" = -1, - "phosphorus" = -0.75, - "sodawater" = 0.1, - "sacid" = -1, - "pacid" = -2, - "plantbgone" = -2, - "cryoxadone" = 3, - "ammonia" = 0.5, - "diethylamine" = 1, - "nutriment" = 0.5, - "radium" = -1.5, - "adminordrazine" = 1 - ) var/global/list/water_reagents = list( - "adminordrazine" = 1, - "milk" = 0.9, - "beer" = 0.7, - "flourine" = -0.5, - "chlorine" = -0.5, - "phosphorus" = -0.5, - "water" = 1, - "sodawater" = 1, + "water" = 1, + "adminordrazine" = 1, + "milk" = 0.9, + "beer" = 0.7, + "flourine" = -0.5, + "chlorine" = -0.5, + "phosphorus" = -0.5, + "water" = 1, + "sodawater" = 1, + ) + + // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). + var/global/list/beneficial_reagents = list( + "beer" = list( -0.05, 0, 0 ), + "fluorine" = list( -2, 0, 0 ), + "chlorine" = list( -1, 0, 0 ), + "phosphorus" = list( -0.75, 0, 0 ), + "sodawater" = list( 0.1, 0, 0 ), + "sacid" = list( -1, 0, 0 ), + "pacid" = list( -2, 0, 0 ), + "plantbgone" = list( -2, 0, 0.2 ), + "cryoxadone" = list( 3, 0, 0 ), + "ammonia" = list( 0.5, 0, 0 ), + "diethylamine" = list( 1, 0, 0 ), + "nutriment" = list( 0.5, 1, 0 ), + "radium" = list( -1.5, 0, 0.2 ), + "adminordrazine" = list( 1, 1, 1 ), + "robustharvest" = list( 0, 0.2, 0 ), + "left4zed" = list( 0, 0, 0.2 ) ) // Mutagen list specifies minimum value for the mutation to take place, rather // than a bound as the lists above specify. var/global/list/mutagenic_reagents = list( - "radium" = 8, - "mutagen" = 3 + "radium" = list(8,3), + "mutagen" = list(3,8) ) /obj/machinery/portable_atmospherics/hydroponics/New() ..() + create_reagents(200) connect() update_icon() + if(closed_system) + flags &= ~OPENCONTAINER /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) - //Don't act on seeds like dionaea that shouldn't change. - if(seed && seed.immutable > 0) - return - //Override for somatoray projectiles. if(istype(Proj ,/obj/item/projectile/energy/floramut) && prob(20)) mutate(1) @@ -142,12 +147,13 @@ /obj/machinery/portable_atmospherics/hydroponics/process() - // Update values every cycle rather than every process() tick. - if(force_update) - force_update = 0 - else if(world.time < (lastcycle + cycledelay)) - return + //Do this even if we're not ready for a plant cycle. + if(seed && !dead) + process_reagents() + // Update values every cycle rather than every process() tick. + if(world.time < (lastcycle + cycledelay)) + return lastcycle = world.time // Weeds like water and nutrients, there's a chance the weed population will increase. @@ -169,11 +175,6 @@ // Advance plant age. if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER - //Highly mutable plants have a chance of mutating every tick. - if(seed.immutable == -1) - var/mut_prob = rand(1,100) - if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) - // Maintain tray nutrient and water levels. if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.nutrient_consumption * HYDRO_SPEED_MULTIPLIER) @@ -201,9 +202,9 @@ // If atmos input is not there, grab from turf. if(!environment) if(istype(T)) - environment = T.air - if(!environment) - return + environment = T.return_air() + + if(!environment) return // Handle gas consumption. if(seed.consume_gasses && seed.consume_gasses.len) @@ -218,6 +219,9 @@ if(missing_gas > 0) health -= missing_gas * HYDRO_SPEED_MULTIPLIER + if(!environment) //We're in a crate or nullspace, bail out. + return + // Process it. var/pressure = environment.return_pressure() if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance) @@ -230,7 +234,7 @@ if(seed.exude_gasses && seed.exude_gasses.len) var/datum/gas_mixture/exuded = new for(var/gas in seed.exude_gasses) - exuded.adjust_gas(gas,seed.exude_gasses[gas*seed.potency],1) //This will need adjustment since it produces moles. + exuded.adjust_gas(gas,seed.exude_gasses[gas*seed.potency],1) //This will need balancing since it produces moles. loc.assume_air(exuded) // Handle light requirements. @@ -282,18 +286,67 @@ pestlevel = 0 // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(seed.products && seed.products.len && age > seed.production && \ - (age - lastproduce) > seed.production && (!harvest && !dead)) - + else if(seed.products && seed.products.len && age > seed.production && (age - lastproduce) > seed.production && (!harvest && !dead)) harvest = 1 lastproduce = age - if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase + if(prob(3)) // On each tick, there's a chance the pest population will increase pestlevel += 1 * HYDRO_SPEED_MULTIPLIER + check_level_sanity() update_icon() return +//Process reagents being input into the tray. +/obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents() + if(dead || !seed || !reagents) return + + if(reagents.total_volume <= 0) + return + + for(var/datum/reagent/R in reagents.reagent_list) + + var/reagent_total = reagents.get_reagent_amount(R.id) + + //Handle some general level adjustments. + if(toxic_reagents[R.id]) + toxins += toxic_reagents[R.id] * reagent_total + if(nutrient_reagents[R.id]) + nutrilevel += nutrient_reagents[R.id] * reagent_total + if(weedkiller_reagents[R.id]) + weedlevel += weedkiller_reagents[R.id] * reagent_total + if(pestkiller_reagents[R.id]) + pestlevel += pestkiller_reagents[R.id] * reagent_total + + // Beneficial reagents have a few impacts along with health buffs. + if(beneficial_reagents[R.id]) + health += beneficial_reagents[R.id][1] * reagent_total + yield_mod += beneficial_reagents[R.id][2] * reagent_total + mutation_mod += beneficial_reagents[R.id][3] * reagent_total + + // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. + if(mutagenic_reagents[R.id]) + var/reagent_min_value = mutagenic_reagents[R.id][1] + var/reagent_value = mutagenic_reagents[R.id][2]+mutation_mod + + if(reagent_total >= reagent_min_value) + if(prob(min(reagent_total*reagent_value,100))) + mutate(reagent_total > 10 ? 2 : 1) + + // Handle water and water refilling. + var/water_added = 0 + if(water_reagents[R.id]) + var/water_input = water_reagents[R.id] * reagent_total + water_added += water_input + waterlevel += water_input + + if(water_added > 0) + toxins -= round(water_added/4) + + reagents.clear_reagents() + check_level_sanity() + update_icon() + //Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) @@ -446,7 +499,6 @@ weedlevel = max(0,min(weedlevel,10)) toxins = max(0,min(toxins,10)) - /obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species() var/previous_plant = seed.display_name @@ -471,168 +523,26 @@ /obj/machinery/portable_atmospherics/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/weapon/scalpel)) + if (O.is_open_container()) + return 0 - if(!seed) - user << "There is nothing to take a sample from in \the [src]." - return - - seed.harvest(user,yield_mod,1) - health -= (rand(1,5)*10) - check_level_sanity() - - force_update = 1 - process() - - return - - else if (istype(O, /obj/item/weapon/reagent_containers/glass)) - var/b_amount = O.reagents.get_reagent_amount("water") - if(b_amount > 0 && waterlevel < 100) - if(b_amount + waterlevel > 100) - b_amount = 100 - waterlevel - O.reagents.remove_reagent("water", b_amount) - waterlevel += b_amount - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - user << "You fill \the [src] with [round(b_amount,0.1)] units of water." - - // The more water you put in, the more diluted the toxins become. - toxins -= round(b_amount/4) - - else if(waterlevel >= 100) - user << "\red \The [src] is already full." - else - user << "\red \The [O] is not filled with water." - - check_level_sanity() - update_icon() - - // Nutrient fluid replacement. TODO: Consider rolling this into a proper reagent-processing proc. - else if ( istype(O, /obj/item/nutrient) ) - var/obj/item/nutrient/nutrient = O - user.u_equip(O) - nutrilevel = 10 - yield_mod = nutrient.yieldmod - mutation_mod = nutrient.mutmod - user << "You replace the nutrient solution in the [src]." - del(O) - update_icon() - - // Syringe stuff - else if(istype(O, /obj/item/weapon/reagent_containers/syringe)) + if(istype(O, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = O - if(seed) - // Injecting into the plant. - if (S.mode == 1) - if(!S.reagents.total_volume) - user << "\red [O] is empty." - return - - user << "\red You inject the [seed.display_name] with a chemical solution." - - // Uuuuuugh this whole chunk is going to be awful. TODO: condense it down somehow. - // Run through the various reagents in the lists and apply their effects as needed. - for(var/datum/reagent/R in S.reagents.reagent_list) - - var/reagent_value = 0 - - if(toxic_reagents[R.id]) - reagent_value = toxic_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - toxins += reagent_value - else - toxins += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - toxins += reagent_value - else - toxins -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(nutrient_reagents[R.id]) - reagent_value = nutrient_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - nutrilevel += reagent_value - else - nutrilevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - nutrilevel += reagent_value - else - nutrilevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(weedkiller_reagents[R.id]) - reagent_value = weedkiller_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - weedlevel += reagent_value - else - weedlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - weedlevel += reagent_value - else - weedlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(pestkiller_reagents[R.id]) - reagent_value = pestkiller_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - pestlevel += reagent_value - else - pestlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - pestlevel += reagent_value - else - pestlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(beneficial_reagents[R.id]) - reagent_value = beneficial_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - health += reagent_value - else - health += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - health += reagent_value - else - health -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(water_reagents[R.id]) - reagent_value = water_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - waterlevel += reagent_value - else - waterlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - waterlevel += reagent_value - else - waterlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. - if(mutagenic_reagents[R.id]) - var/reagent_total = S.reagents.get_reagent_amount(R.id) - reagent_value = mutagenic_reagents[R.id]+mutation_mod - if(reagent_total >= reagent_value) - if(prob(min(reagent_total*reagent_value,100))) - mutate(reagent_total > 10 ? 2 : 1) - - S.reagents.clear_reagents() - + if (S.mode == 1) + if(seed) + return ..() else - user << "You can't get any extract out of this plant." + user << "There's no plant in the tray to inject." + return 1 else - user << "There's nothing to inject the solution into." - - check_level_sanity() - update_icon() + if(seed) + //Leaving this in in case we want to extract from plants later. + user << "You can't get any extract out of this plant." + else + user << "There's nothing in the tray to draw something from." + return 1 else if (istype(O, /obj/item/seeds)) @@ -662,8 +572,7 @@ seed = S.seed //Grab the seed datum. dead = 0 age = 1 - //Snowflakey, maybe move this to the seed datum - health = (istype(S, /obj/item/seeds/cutting) ? round(seed.endurance/rand(2,5)) : seed.endurance) + health = seed.endurance lastcycle = world.time del(O) @@ -783,6 +692,7 @@ usr << "[src] is \red filled with weeds!" if(pestlevel >= 5) usr << "[src] is \red filled with tiny worms!" + if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) var/turf/T = loc @@ -818,6 +728,11 @@ closed_system = !closed_system usr << "You [closed_system ? "close" : "open"] the tray's lid." + if(closed_system) + flags &= ~OPENCONTAINER + else + flags |= OPENCONTAINER + update_icon() /obj/machinery/portable_atmospherics/hydroponics/soil diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index fa5af7c78c7..b7c87c14364 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -59,8 +59,8 @@ proc/populate_seed_list() //Tolerances. var/requires_nutrients = 1 // The plant can starve. var/nutrient_consumption = 0.25 // Plant eats this much per tick. - var/requires_water = 1 // The plant can become dehydrated. - var/water_consumption = 3 // Plant drinks this much per tick. + var/requires_water = 3 // The plant can become dehydrated. + var/water_consumption = 1 // Plant drinks this much per tick. var/ideal_heat = 293 // Preferred temperature in Kelvin. var/heat_tolerance = 20 // Departure from ideal that is survivable. var/ideal_light = 8 // Preferred light level in luminosity. @@ -83,7 +83,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable = 0 // If set, plant will never mutate. If -1, plant has a chance of mutating during process(). + var/immutable= 0 // If set, plant will never mutate. var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -99,13 +99,13 @@ proc/populate_seed_list() //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || immutable > 0) return 0 + if(!mutants || !mutants.len || immutable) return 0 return pick(mutants) //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - if(!degree || immutable > 0) return + if(!degree || immutable) return source_turf.visible_message("\blue \The [display_name] quivers!") @@ -179,7 +179,7 @@ proc/populate_seed_list() //Mutates a specific trait/set of traits. /datum/seed/proc/apply_gene(var/datum/plantgene/gene) - if(!gene || !gene.values || immutable > 0) return + if(!gene || !gene.values || immutable) return switch(gene.genetype) @@ -345,7 +345,7 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod) if(!user) return @@ -356,7 +356,7 @@ proc/populate_seed_list() if(!got_product) user << "\red You fail to harvest anything useful." else - user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." + user << "You harvest from the [display_name]." //This may be a new line. Update the global if it is. if(name == "new line" || !(name in seed_types)) @@ -364,12 +364,6 @@ proc/populate_seed_list() name = "[uid]" seed_types[name] = src - if(harvest_sample) - var/obj/item/seeds/seeds = new(get_turf(user)) - seeds.seed_type = name - seeds.update_seed() - return - var/total_yield if(isnull(yield_mod) || yield_mod < 1) yield_mod = 0 @@ -402,7 +396,7 @@ proc/populate_seed_list() // be put into the global datum list until the product is harvested, though. /datum/seed/proc/diverge(var/modified) - if(immutable > 0) return + if(immutable) return //Set up some basic information. var/datum/seed/new_seed = new @@ -1407,4 +1401,4 @@ proc/populate_seed_list() maturation = 1 production = 1 yield = 1 - potency = 1 + potency = 1 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index fe4b9f26a5a..3740aca7c27 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1734,6 +1734,27 @@ datum ..() return + //Reagents used for plant fertilizers. + toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID + toxpwr = 0.2 //It's not THAT poisonous. + color = "#664330" // rgb: 102, 67, 48 + + toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + + toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + + toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + toxin/plantbgone name = "Plant-B-Gone" id = "plantbgone" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 020573d8c5b..c141a757e7d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,6 @@ /obj/machinery/sleeper, /obj/machinery/smartfridge/, /obj/machinery/biogenerator, - /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/constructable_frame) New() @@ -108,6 +107,7 @@ user << "\blue You fill [src] with [trans] units of the contents of [target]." else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) user << "\red [src] is empty." return diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 1d6710fffa9..aad609a5153 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -3713,7 +3713,7 @@ "btu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "btv" = (/turf/simulated/wall/r_wall,/area/teleporter) "btw" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area) -"btx" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"btx" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "bty" = (/turf/simulated/wall,/area/rnd/test_area) "btz" = (/obj/structure/bookcase,/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych) "btA" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = null; req_access_txt = "64"},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/psych) @@ -9047,7 +9047,7 @@ "drY" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area) "drZ" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/lattice,/turf/space,/area) "dsa" = (/turf/simulated/mineral/random,/area/mine/unexplored) -"dsb" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/nutrient/ez,/turf/simulated/floor/plating,/area/research_outpost/maintstore1) +"dsb" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dsc" = (/obj/machinery/light/small,/obj/structure/closet/walllocker/emerglocker/north{dir = 1; pixel_y = -32},/turf/simulated/floor/plating,/area/research_outpost/maintstore1) "dsd" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_closed"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "synd_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = 7; req_access_txt = "150"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "dse" = (/turf/simulated/floor,/area/research_outpost/maintstore1) @@ -9697,7 +9697,7 @@ "dEy" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership) "dEz" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/engine,/area/tcommsat/computer) "dEA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/maintstore1) -"dEB" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"dEB" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dEC" = (/turf/simulated/floor,/area/research_outpost/gearstore) "dED" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/research_outpost/gearstore) "dEE" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/research_outpost/tempstorage) @@ -10975,6 +10975,11 @@ "edc" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) "edd" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) "ede" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_shuttle_hatch"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"edf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"edg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"edh" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"edi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"edj" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/turf/simulated/floor/plating,/area/research_outpost/maintstore1) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11136,9 +11141,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAdbzWbsKbzRbvPbthbzBbzFbzHccgbzSbzVccgccgbAlbvObAnbAhbvMbAjbAkbYpbvJbyRbyObvIbyJbyMbyLbzDbyJbyJbvLbzpbznbzAcjcbfNbkjbqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbvobtDbiDbvabynbvnbwUbhebhFbhebiKbwWbwXbiGbuZbwZbyhbwFbwEbDBbwPbwRbwRbwRbwRbwRbwRbygbwRbwRbygbwRbyBbygbygbCEbCPburbyqbCEbyubxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbyabxZbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbsBbsBbsKbsMbsLbthbtlbszbsOccgbqvbqsbqubsAbqDbqwbyobyTbqQbqIbqKbqVbqUbeYbqSbsEbrMbrGbribsdbsebsdbsGbsubsjbjpbshbfNbkjbqZbqYbqWbqRbqXbqWbwcbqLbqPbqNbqxbppbqJbqJbsmbiDbsnbsobsibwUbhebrhbqCbiKbsfbsgbiGbrObrVbqAbiGbssbidbvKboNbrkbrkboNboJboGboibnRbnKbsabrWbrjbstbsvbxrbsrbxtbyjbxrbsqbspbqtbqqdfTdfTdfTdfTbsbbqtbqqdfTdfTbAEbnkbnmbnlbWWbvSbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabpKbpLbpLbpPbjBbjBbjSbjSbqmbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbuibujccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtCbtubtEbtFbtGbfNbtVbtHbtObtWbfNbzIbqZbzxbzsbzsbzcbtMbkObqZbzbbyZbiDbtIbsZbqJbtDbiDbtAbtBbtzbwUbhebqHbtJbiKbsIbsNbiGbiGbiGbiGbiGbBPbidbidbidbfMcmHbBObGKbXObXPbXQbGKbrWbBNbBvbAJctibudbuhbFqbtUbudbYAbXRbXRbXRbYzbtjbzQbADbAIbyYbtxbyXdfTbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcrCcrrcrrcrucEIcEIcEGcEJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMcEKbqZdYtdgpdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabrWctuctjdgrdgqdgtdgscERcEPdgxdBXdDldCOdCOdEBdfQdfQdgBdQWdgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcDJcDzcqdcpVcDycpVcDxcpTcpScDpcDocpLcEecqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcDKbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcEfcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZcEpcEtcEscErdhUdhWdfQdfQdfQdgidsLdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFkbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdgZdhadgGdhbdhcdhddhedhfdgGbkjbEaeaxbMXbMXcFqeaweaDeaEdLbdPueazeaAcFreaeeaeeaudXBbwUbwUbwUcFocZLcFpbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaadhqdhrdhsdhlcFndhmcWQdQScFldhidhhdfQdfQdfQdfQdhodhndfQdhpdfQdfRdghdfTcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcrCcrrcrrcrucEIcEIcEGcEJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMcEKbqZdYtdgpdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabrWctuctjdgrdgqdgtdgscERcEPdgxdBXdDldCOdCOedhdfQdfQdgBdQWdgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcDJcDzcqdcpVcDycpVcDxcpTcpScDpcDocpLcEecqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcDKbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcEfcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZcEpcEtcEscErdhUedgedfdEBdsbdgidsLdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFkbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdgZdhadgGdhbdhcdhddhedhfdgGbkjbEaeaxbMXbMXcFqeaweaDeaEdLbdPueazeaAcFreaeeaeeaudXBbwUbwUbwUcFocZLcFpbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaadhqdhrdhsdhlcFndhmcWQdQScFldhidhhedidhWdfQdfQdhodhndfQdhpdfQdfRdghdfTcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcEVcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccFdcpfcFccpfdgIcoWdgGdgHcFbdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTdTMdgMdgMdgMdgXdgWdgWdgVdgMdgMcFedgOdfTcbjcFfcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecNOcnicIfbTecHYcnfcHWbTecGvcnccGubTeaaaaafcphcrdbSGbSGcqqbWbbSFcOGdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcOncricrkcricOwcrqcOxdhLdhGcOodgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabrWecHecIecGdhTbuddQidQSdQRdfTdhVdYIdYIdYIdhPcvudhQdhSdYIdYIdYIdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcFxcFwcFvcFRcFRcGlcGjcFRcFAcFzbAkbAkbjqcqIcqJcpDcqCcqCcqHdhBdhCdgGdhAdhydhzdhwdhxdgGcGmbEadhDcGqdCpeaOeaPbEaeaFdPDeaHdXBeaIeaJdCqcGtdhEdXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPdfTdfTbZPbOwcdqdfTdfTdfTdfTcoTbOwcdqdfTdfTccSdhFccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12055,7 +12060,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqVdrgdrhdqTdqTdqTdqTdqTdqTdridridridrjdrkdrcdqTdqTdqTdrlduvduUduUduXdrpdrqdrrdrsdrsdqXdrsdrtdruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrvdrhdqTdqTdqTdqTdqTdqTdqTdridrwdrxdrydrjdrkdrzdridrAdrBdrCdrDdrDdrDdrEdrFdrDdrDdrDdrDaafdrGdrHdruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdqTdqTdqTdrJduYdrLdrMdrNdrOdrPdrQdrRdrSdrTdrUdrVdrTdrWdrEdrTdrXdrUdrDaafaafdrYdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdrJdrJdrJdrJdsbdscdvAechdsedsedseeciecjdrTdshdsieckdrEdrEecldsidshdrDaafaafecgdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdrJdrJdrJdrJedjdscdvAechdsedsedseeciecjdrTdshdsieckdrEdrEecldsidshdrDaafaafecgdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadqTdqTdqTdqTdqTdqTdsadsadqTdqTdqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdrJdsmdsndrJdsodsodsodsodJIdsedsqdDvdDudrTdrTdrTdrTeaYeaXdsvdsvdsvdsvdsvdsvdqtdsxdsyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadszdsAdszaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadqTdqTdqTdsadsadqTdsadsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdsBdsCdsDdsEdqsdsGdsHdsIdsJdsKedcedbdDkdrTdsOdsPdrTdqmdqldsvdqkeaVeaWeaSdqpdqndsYdsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtadtbdtaaafaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdtcdtddKIdrJdtfdsFdtgdthdtidtjdtkedddEAdEedEddEgebsdEidqIdqKebtebldqCebodqGdqHdtydsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From ca59536e063c5dcb9afd485085f6adb3237bcd36 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 12:34:36 +0930 Subject: [PATCH 46/75] Reapplying some fixes that I think DM may have saved over, whoops. --- code/modules/hydroponics/hydro_tray.dm | 38 ++++++++++++++++++++++--- code/modules/hydroponics/seed_datums.dm | 24 ++++++++++------ 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 15feae5a882..9349e8f9e90 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -32,6 +32,7 @@ var/lastcycle = 0 // Cycle timing/tracking var. var/cycledelay = 150 // Delay per cycle. var/closed_system // If set, the tray will attempt to take atmos from a pipe. + var/force_update // Set this to bypass the cycle time check. // Seed details/line data. var/datum/seed/seed = null // The currently planted seed @@ -127,6 +128,10 @@ /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) + //Don't act on seeds like dionaea that shouldn't change. + if(seed && seed.immutable > 0) + return + //Override for somatoray projectiles. if(istype(Proj ,/obj/item/projectile/energy/floramut) && prob(20)) mutate(1) @@ -152,7 +157,9 @@ process_reagents() // Update values every cycle rather than every process() tick. - if(world.time < (lastcycle + cycledelay)) + if(force_update) + force_update = 0 + else if(world.time < (lastcycle + cycledelay)) return lastcycle = world.time @@ -175,6 +182,11 @@ // Advance plant age. if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER + //Highly mutable plants have a chance of mutating every tick. + if(seed.immutable == -1) + var/mut_prob = rand(1,100) + if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) + // Maintain tray nutrient and water levels. if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.nutrient_consumption * HYDRO_SPEED_MULTIPLIER) @@ -286,7 +298,8 @@ pestlevel = 0 // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(seed.products && seed.products.len && age > seed.production && (age - lastproduce) > seed.production && (!harvest && !dead)) + else if(seed.products && seed.products.len && age > seed.production && \ + (age - lastproduce) > seed.production && (!harvest && !dead)) harvest = 1 lastproduce = age @@ -526,7 +539,22 @@ if (O.is_open_container()) return 0 - if(istype(O, /obj/item/weapon/reagent_containers/syringe)) + if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/weapon/scalpel)) + + if(!seed) + user << "There is nothing to take a sample from in \the [src]." + return + + seed.harvest(user,yield_mod,1) + health -= (rand(1,5)*10) + check_level_sanity() + + force_update = 1 + process() + + return + + else if(istype(O, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = O @@ -572,7 +600,9 @@ seed = S.seed //Grab the seed datum. dead = 0 age = 1 - health = seed.endurance + //Snowflakey, maybe move this to the seed datum + health = (istype(S, /obj/item/seeds/cutting) ? round(seed.endurance/rand(2,5)) : seed.endurance) + lastcycle = world.time del(O) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index b7c87c14364..f1d12a1a6a5 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -59,8 +59,8 @@ proc/populate_seed_list() //Tolerances. var/requires_nutrients = 1 // The plant can starve. var/nutrient_consumption = 0.25 // Plant eats this much per tick. - var/requires_water = 3 // The plant can become dehydrated. - var/water_consumption = 1 // Plant drinks this much per tick. + var/requires_water = 1 // The plant can become dehydrated. + var/water_consumption = 3 // Plant drinks this much per tick. var/ideal_heat = 293 // Preferred temperature in Kelvin. var/heat_tolerance = 20 // Departure from ideal that is survivable. var/ideal_light = 8 // Preferred light level in luminosity. @@ -83,7 +83,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable= 0 // If set, plant will never mutate. + var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -99,13 +99,13 @@ proc/populate_seed_list() //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || immutable) return 0 + if(!mutants || !mutants.len || immutable > 0) return 0 return pick(mutants) //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - if(!degree || immutable) return + if(!degree || immutable > 0) return source_turf.visible_message("\blue \The [display_name] quivers!") @@ -179,7 +179,7 @@ proc/populate_seed_list() //Mutates a specific trait/set of traits. /datum/seed/proc/apply_gene(var/datum/plantgene/gene) - if(!gene || !gene.values || immutable) return + if(!gene || !gene.values || immutable > 0) return switch(gene.genetype) @@ -345,7 +345,7 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) if(!user) return @@ -356,7 +356,7 @@ proc/populate_seed_list() if(!got_product) user << "\red You fail to harvest anything useful." else - user << "You harvest from the [display_name]." + user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." //This may be a new line. Update the global if it is. if(name == "new line" || !(name in seed_types)) @@ -364,6 +364,12 @@ proc/populate_seed_list() name = "[uid]" seed_types[name] = src + if(harvest_sample) + var/obj/item/seeds/seeds = new(get_turf(user)) + seeds.seed_type = name + seeds.update_seed() + return + var/total_yield if(isnull(yield_mod) || yield_mod < 1) yield_mod = 0 @@ -396,7 +402,7 @@ proc/populate_seed_list() // be put into the global datum list until the product is harvested, though. /datum/seed/proc/diverge(var/modified) - if(immutable) return + if(immutable > 0) return //Set up some basic information. var/datum/seed/new_seed = new From e2e039f72aee1cd60b7cc2be88ad687d5b2ea769 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 12:39:28 +0930 Subject: [PATCH 47/75] Adjusted process_reagents() so hydro trays are refillable with water and nurients when the tray is dead/empty. --- code/modules/hydroponics/hydro_tray.dm | 54 ++++++++++++++------------ 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 9349e8f9e90..b3f91ce23d5 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -153,8 +153,7 @@ /obj/machinery/portable_atmospherics/hydroponics/process() //Do this even if we're not ready for a plant cycle. - if(seed && !dead) - process_reagents() + process_reagents() // Update values every cycle rather than every process() tick. if(force_update) @@ -312,39 +311,44 @@ //Process reagents being input into the tray. /obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents() - if(dead || !seed || !reagents) return + + if(!reagents) return if(reagents.total_volume <= 0) return for(var/datum/reagent/R in reagents.reagent_list) + var/reagent_total = reagents.get_reagent_amount(R.id) - //Handle some general level adjustments. - if(toxic_reagents[R.id]) - toxins += toxic_reagents[R.id] * reagent_total + if(seed && !dead) + //Handle some general level adjustments. + if(toxic_reagents[R.id]) + toxins += toxic_reagents[R.id] * reagent_total + if(weedkiller_reagents[R.id]) + weedlevel += weedkiller_reagents[R.id] * reagent_total + if(pestkiller_reagents[R.id]) + pestlevel += pestkiller_reagents[R.id] * reagent_total + + // Beneficial reagents have a few impacts along with health buffs. + if(beneficial_reagents[R.id]) + health += beneficial_reagents[R.id][1] * reagent_total + yield_mod += beneficial_reagents[R.id][2] * reagent_total + mutation_mod += beneficial_reagents[R.id][3] * reagent_total + + // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. + if(mutagenic_reagents[R.id]) + var/reagent_min_value = mutagenic_reagents[R.id][1] + var/reagent_value = mutagenic_reagents[R.id][2]+mutation_mod + + if(reagent_total >= reagent_min_value) + if(prob(min(reagent_total*reagent_value,100))) + mutate(reagent_total > 10 ? 2 : 1) + + // Handle nutrient refilling. if(nutrient_reagents[R.id]) nutrilevel += nutrient_reagents[R.id] * reagent_total - if(weedkiller_reagents[R.id]) - weedlevel += weedkiller_reagents[R.id] * reagent_total - if(pestkiller_reagents[R.id]) - pestlevel += pestkiller_reagents[R.id] * reagent_total - - // Beneficial reagents have a few impacts along with health buffs. - if(beneficial_reagents[R.id]) - health += beneficial_reagents[R.id][1] * reagent_total - yield_mod += beneficial_reagents[R.id][2] * reagent_total - mutation_mod += beneficial_reagents[R.id][3] * reagent_total - - // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. - if(mutagenic_reagents[R.id]) - var/reagent_min_value = mutagenic_reagents[R.id][1] - var/reagent_value = mutagenic_reagents[R.id][2]+mutation_mod - - if(reagent_total >= reagent_min_value) - if(prob(min(reagent_total*reagent_value,100))) - mutate(reagent_total > 10 ? 2 : 1) // Handle water and water refilling. var/water_added = 0 From b9537adfef3beb8b709020efc97a6315c0fd5489 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 30 Jul 2014 10:22:50 +0200 Subject: [PATCH 48/75] Adds proximity check to prevent telekinetic taping of doors. --- code/WorkInProgress/Ported/policetape.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm index 12059c63edd..6b40b370ca7 100644 --- a/code/WorkInProgress/Ported/policetape.dm +++ b/code/WorkInProgress/Ported/policetape.dm @@ -97,8 +97,8 @@ //is_blocked_turf(var/turf/T) usr << "\blue You finish placing the [src]." //Git Test -/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob) - if (istype(A, /obj/machinery/door/airlock)) +/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity) + if (proximity && istype(A, /obj/machinery/door/airlock)) var/turf/T = get_turf(A) var/obj/item/tape/P = new tape_type(T.x,T.y,T.z) P.loc = locate(T.x,T.y,T.z) From fcd1c73b1723b2dde6ebc01ef587641d1136e71d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 20:54:36 +0930 Subject: [PATCH 49/75] Adjusted gas exude code. --- code/modules/hydroponics/hydro_tray.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index b3f91ce23d5..d90be9a765b 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -230,9 +230,6 @@ if(missing_gas > 0) health -= missing_gas * HYDRO_SPEED_MULTIPLIER - if(!environment) //We're in a crate or nullspace, bail out. - return - // Process it. var/pressure = environment.return_pressure() if(pressure < seed.lowkpa_tolerance || pressure > seed.highkpa_tolerance) @@ -243,10 +240,8 @@ // Handle gas production. if(seed.exude_gasses && seed.exude_gasses.len) - var/datum/gas_mixture/exuded = new for(var/gas in seed.exude_gasses) - exuded.adjust_gas(gas,seed.exude_gasses[gas*seed.potency],1) //This will need balancing since it produces moles. - loc.assume_air(exuded) + environment.adjust_gas(gas, max(1,round((seed.exude_gasses[gas]*seed.potency)/seed.exude_gasses.len))) // Handle light requirements. var/area/A = T.loc From 3105297f3ebb24457f26947d62f6271d97f3f603 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:08:28 +0930 Subject: [PATCH 50/75] Adjusted spawn procs for heist and nuke. --- code/game/gamemodes/heist/heist.dm | 108 ++++++++++---------- code/game/gamemodes/nuclear/nuclear.dm | 15 ++- code/game/objects/effects/landmarks.dm | 8 ++ code/modules/admin/player_panel.dm | 3 + code/modules/admin/verbs/one_click_antag.dm | 2 +- 5 files changed, 73 insertions(+), 63 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 8b49a4574a2..475b13c3f7a 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -2,8 +2,12 @@ VOX HEIST ROUNDTYPE */ +var/global/list/raider_spawn = list() +var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime. + /datum/game_mode/ var/list/datum/mind/raiders = list() //Antags. + var/list/raid_objectives = list() //Raid objectives /datum/game_mode/heist name = "heist" @@ -16,9 +20,6 @@ VOX HEIST ROUNDTYPE var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - var/list/raid_objectives = list() //Raid objectives. - var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. - /datum/game_mode/heist/announce() world << "The current game mode is - Heist!" world << "An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!" @@ -59,15 +60,6 @@ VOX HEIST ROUNDTYPE /datum/game_mode/heist/post_setup() - //Build a list of spawn points. - var/list/turf/raider_spawn = list() - - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "voxstart") - raider_spawn += get_turf(L) - del(L) - continue - //Generate objectives for the group. if(!config.objectives_disabled) raid_objectives = forge_vox_objectives() @@ -83,49 +75,57 @@ VOX HEIST ROUNDTYPE raider.current.loc = raider_spawn[index] index++ - var/sounds = rand(2,8) - var/i = 0 - var/newname = "" - - while(i<=sounds) - i++ - newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) - - var/mob/living/carbon/human/vox = raider.current - - vox.real_name = capitalize(newname) - vox.name = vox.real_name - raider.name = vox.name - vox.age = rand(12,20) - vox.dna.mutantrace = "vox" - vox.set_species("Vox") - vox.languages = list() // Removing language from chargen. - vox.flavor_text = "" - vox.add_language("Vox-pidgin") - vox.h_style = "Short Vox Quills" - vox.f_style = "Shaved" - for(var/datum/organ/external/limb in vox.organs) - limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) - - //Now apply cortical stack. - var/datum/organ/external/E = vox.get_organ("head") - var/obj/item/weapon/implant/cortical/I = new(vox) - I.imp_in = vox - I.implanted = 1 - I.part = E - E.implants += I - cortical_stacks += I - - vox.equip_vox_raider() - vox.regenerate_icons() - - raider.objectives = raid_objectives + create_vox(raider) greet_vox(raider) + if(!config.objectives_disabled && raid_objectives) + raider.objectives = raid_objectives + spawn (rand(waittime_l, waittime_h)) send_intercept() -/datum/game_mode/heist/proc/is_raider_crew_safe() +/datum/game_mode/proc/create_vox(var/datum/mind/newraider) + + + var/sounds = rand(2,8) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + var/mob/living/carbon/human/vox = newraider.current + + vox.real_name = capitalize(newname) + vox.name = vox.real_name + newraider.name = vox.name + vox.age = rand(12,20) + vox.dna.mutantrace = "vox" + vox.set_species("Vox") + vox.languages = list() // Removing language from chargen. + vox.flavor_text = "" + vox.add_language("Vox-pidgin") + vox.h_style = "Short Vox Quills" + vox.f_style = "Shaved" + + for(var/datum/organ/external/limb in vox.organs) + limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) + + //Generate cortical stack. + var/datum/organ/external/affected = vox.get_organ("head") + + var/obj/item/weapon/implant/cortical/I = new(vox) + I.imp_in = vox + I.implanted = 1 + affected.implants += I + I.part = affected + cortical_stacks += I + + vox.equip_vox_raider() + vox.regenerate_icons() + +/datum/game_mode/proc/is_raider_crew_safe() if(cortical_stacks.len == 0) return 0 @@ -135,7 +135,7 @@ VOX HEIST ROUNDTYPE return 0 return 1 -/datum/game_mode/heist/proc/is_raider_crew_alive() +/datum/game_mode/proc/is_raider_crew_alive() for(var/datum/mind/raider in raiders) if(raider.current) @@ -143,7 +143,7 @@ VOX HEIST ROUNDTYPE return 1 return 0 -/datum/game_mode/heist/proc/forge_vox_objectives() +/datum/game_mode/proc/forge_vox_objectives() var/i = 1 var/max_objectives = pick(2,2,2,2,3,3,3,4) @@ -171,7 +171,7 @@ VOX HEIST ROUNDTYPE return objs -/datum/game_mode/heist/proc/greet_vox(var/datum/mind/raider) +/datum/game_mode/proc/greet_vox(var/datum/mind/raider) raider.current << "\blue You are a Vox Raider, fresh from the Shoal!" raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both." raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious." @@ -294,4 +294,4 @@ datum/game_mode/proc/auto_declare_completion_heist() //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. Del(M) for (var/obj/O in skipjack.contents) - Del(O) //no hiding in lockers or anything + Del(O) //no hiding in lockers or anything \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 53fbcba2f41..484dbd57e7d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,3 +1,10 @@ +/* + NUCLEAR EMERGENCY ROUNDTYPE +*/ + +var/global/list/turf/synd_spawn = list() + + /datum/game_mode var/list/datum/mind/syndicates = list() @@ -116,14 +123,6 @@ /datum/game_mode/nuclear/post_setup() - var/list/turf/synd_spawn = list() - - for(var/obj/effect/landmark/A in landmarks_list) - if(A.name == "Syndicate-Spawn") - synd_spawn += get_turf(A) - del(A) - continue - var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index e287ee845d6..514a5b38f9f 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -81,6 +81,14 @@ ninjastart += loc del(src) + if("voxstart") + raider_spawn += loc + del(src) + + if("Syndicate-Spawn") + synd_spawn += loc + del(src) + landmarks_list += src return 1 diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ac67a624e35..0a83ce49030 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -481,6 +481,9 @@ if(ticker.mode.traitors.len) dat += check_role_table("Traitors", ticker.mode.traitors, src) + if(ticker.mode.borers.len) + dat += check_role_table("Cortical Borers", ticker.mode.borers, src) + var/datum/game_mode/mutiny/mutiny = get_mutiny_mode() if(mutiny) dat += mutiny.check_antagonists_ui(src) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index fc147e04fda..95fbc615c8a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -533,7 +533,7 @@ client/proc/one_click_antag() if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/heist ) ) ) var/datum/game_mode/heist/M = ticker.mode - M.cortical_stacks += I + cortical_stacks += I M.raiders[new_vox.mind] = I ticker.mode.traitors += new_vox.mind From dac4e3432e2fe9531f297498961d5ecb09bb27c3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:08:54 +0930 Subject: [PATCH 51/75] Adjusted borer spawns/options/vars. --- code/modules/mob/holder.dm | 11 ++++++---- code/modules/mob/living/carbon/carbon.dm | 11 +++++----- .../modules/mob/living/simple_animal/borer.dm | 21 ++++++++++++------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 747467a66f9..78e36dbb66c 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -54,14 +54,12 @@ //Mob specific holders. /obj/item/weapon/holder/diona - name = "diona nymph" desc = "It's a tiny plant critter." icon_state = "nymph" origin_tech = "magnets=3;biotech=5" /obj/item/weapon/holder/drone - name = "maintenance drone" desc = "It's a small maintenance robot." icon_state = "drone" @@ -69,8 +67,13 @@ /obj/item/weapon/holder/cat - name = "cat" desc = "It's a cat. Meow." icon_state = "cat" - origin_tech = null \ No newline at end of file + origin_tech = null + +/obj/item/weapon/holder/borer + name = "cortical borer" + desc = "It's a slimy brain slug. Gross." + icon_state = "borer" + origin_tech = "biotech=6" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0d6aaec965d..22989c3f71e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1,6 +1,6 @@ /mob/living/carbon/Life() ..() - + // Increase germ_level regularly if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level germ_level++ @@ -14,7 +14,7 @@ src.nutrition -= HUNGER_FACTOR/10 if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) src.bodytemperature += 2 - + // Moving around increases germ_level faster if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ @@ -206,7 +206,7 @@ if (istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) - + if(lying) src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) @@ -216,7 +216,7 @@ else M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ "You hug [src] to make [t_him] feel better!") - + AdjustParalysis(-3) AdjustStunned(-3) AdjustWeakened(-3) @@ -470,9 +470,10 @@ return if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." + src << "\red Your host twitches and quivers as you rapdly excretea larva from your sluglike body." visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 + B.has_reproduced = 1 new /obj/effect/decal/cleanable/vomit(get_turf(src)) playsound(loc, 'sound/effects/splat.ogg', 50, 1) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 0d15aeab543..6033c02a256 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -1,6 +1,7 @@ /mob/living/captive_brain name = "host brain" real_name = "host brain" + universal_understand = 1 /mob/living/captive_brain/say(var/message) @@ -45,6 +46,8 @@ friendly = "prods" wander = 0 pass_flags = PASSTABLE + universal_understand = 1 + holder_type = /obj/item/weapon/holder/borer var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. @@ -53,6 +56,11 @@ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. var/docile = 0 // Sugar can stop borers from acting. + var/has_reproduced + var/roundstart + +/mob/living/simple_animal/borer/roundstart + roundstart = 1 /mob/living/simple_animal/borer/Life() @@ -96,9 +104,7 @@ ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" host_brain = new/mob/living/captive_brain(src) - - request_player() - + if(!roundstart) request_player() /mob/living/simple_animal/borer/say(var/message) @@ -338,7 +344,7 @@ detatch() -mob/living/simple_animal/borer/proc/detatch() +/mob/living/simple_animal/borer/proc/detatch() if(!host) return @@ -530,7 +536,7 @@ mob/living/simple_animal/borer/proc/detatch() src << text("\blue You have stopped hiding.") //Procs for grabbing players. -mob/living/simple_animal/borer/proc/request_player() +/mob/living/simple_animal/borer/proc/request_player() for(var/mob/dead/observer/O in player_list) if(jobban_isbanned(O, "Syndicate")) continue @@ -538,7 +544,7 @@ mob/living/simple_animal/borer/proc/request_player() if(O.client.prefs.be_special & BE_ALIEN) question(O.client) -mob/living/simple_animal/borer/proc/question(var/client/C) +/mob/living/simple_animal/borer/proc/question(var/client/C) spawn(0) if(!C) return var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round") @@ -549,7 +555,7 @@ mob/living/simple_animal/borer/proc/question(var/client/C) else if (response == "Never for this round") C.prefs.be_special ^= BE_ALIEN -mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) +/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) if(!candidate) return @@ -558,3 +564,4 @@ mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) src.ckey = candidate.ckey if(src.mind) src.mind.assigned_role = "Cortical Borer" + src.mind.special_role = "Cortical Borer" \ No newline at end of file From e885fc81150eb3283756696d7655784b827ffd1e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:09:25 +0930 Subject: [PATCH 52/75] Added Calamity mode. --- baystation12.dme | 1 + code/game/gamemodes/calamity/calamity.dm | 477 +++++++++++++++++++++++ code/game/gamemodes/objective.dm | 39 +- code/modules/events/event_manager.dm | 4 + 4 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 code/game/gamemodes/calamity/calamity.dm diff --git a/baystation12.dme b/baystation12.dme index a820faad300..f25b66fc1a2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -206,6 +206,7 @@ #include "code\game\gamemodes\blob\blobs\factory.dm" #include "code\game\gamemodes\blob\blobs\node.dm" #include "code\game\gamemodes\blob\blobs\shield.dm" +#include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\modularchangling.dm" diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm new file mode 100644 index 00000000000..d8f931cfd1e --- /dev/null +++ b/code/game/gamemodes/calamity/calamity.dm @@ -0,0 +1,477 @@ +/* + * This roundtype is a replacement for the meteor round on upstream BS12 - players + * expressed the desire for quick, chaotic and violent rounds, preferrably without + * dependancy on other players. + * I wanted to call it clusterfuck, but I figure that's a bit too overt. Think of + * the children. + * ~ Zuhayr + */ + +//temp, move these somewhere appropriate and change all the other references to use it. +/proc/show_generic_antag_text(var/datum/mind/player) + if(player.current) + player.current << \ + "You are an antagonist! Within the rules, \ + try to act as an opposing force to the crew. Further RP and try to make sure \ + other players have fun! If you are confused or at a loss, always adminhelp, \ + and before taking extreme actions, please try to also contact the administration! \ + Think through your actions and make the roleplay immersive! Please remember all \ + rules aside from those without explicit exceptions apply to antagonists." + +/proc/show_objectives(var/datum/mind/player) + if(!player || !player.current) return + var/obj_count = 1 + player.current << "\blue Your current objectives:" + for(var/datum/objective/objective in player.objectives) + player.current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/datum/game_mode/var/list/borers = list() + +/datum/game_mode/calamity + name = "calamity" + config_tag = "calamity" + required_players = 1 + votable = 0 //Remove after testing. + + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + + //Possible roundstart antag types. + var/list/atypes = list("syndi","ling","tater","wiz","ninja","vox","slug","cult") + var/list/chosen_atypes = list() + var/list/chosen_candidates = list() + var/list/already_assigned_candidates = list() + + //At one antagonist group per 10 players we are just going to go with tiny groups. + var/max_antags = 3 // Antag groups spawn with this many members. + var/antag_type_ratio = 10 // 1 antag type per this many players. + + var/const/waittime_l = 600 + var/const/waittime_h = 1800 + +/datum/game_mode/calamity/announce() + world << "The current game mode is - Calamity!" + world << "This must be a Thursday. You never could get the hang of Thursdays..." + +/datum/game_mode/calamity/can_start() + + if(!..()) + return 0 + + var/antag_count = player_list.len/antag_type_ratio + + if(!antag_count) + return 1 + + for(var/i=0;i
" + + for(var/datum/mind/P in L) + text += "
[P.key] was [P.name] (" + if(P.current) + if(P.current.stat == DEAD) + text += "died" + else + text += "survived" + if(P.current.real_name != P.name) + text += " as [P.current.real_name]" + else + text += "body destroyed" + text += ")" + + if(M.objectives.len) + text += "
Their objectives were:" + var/num = 1 + for(var/datum/objective/O in M.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + + //Single antag objective completion. + for(var/list/L in list(src.changelings, src.ninjas, src.borers, src.traitors)) + + if(L.len) + var/datum/mind/M = L[1] + text = "
The [M.special_role][L.len == 1 ? " was" : "s were"]:" + for(var/datum/mind/P in L) + var/num = 1 + text += "
[P.key] was [P.name]." + if(P.objectives.len) + for(var/datum/objective/O in P.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + ..() + return 1 + +//Converts chosen atype to an actual role string. +/datum/game_mode/calamity/proc/get_candidate_role_text(var/role) + + var/role_text + + switch(role) + if("syndi") + role_text = "Syndicate Operative" + if("ling") + role_text = "Changeling" + if("tater") + role_text = "Traitor" + if("wiz") + role_text = "Cabalist" + if("ninja") + role_text = "Ninja" + if("vox") + role_text = "Vox Raider" + if("slug") + role_text = "Cortical Borer" + if("cult") + role_text = "Cultist" + + return role_text + +//Grabs candidate lists for various atypes. +/datum/game_mode/calamity/proc/get_role_candidates(var/role) + + var/list/possible_antags = list() + switch(role) + if("syndi") + possible_antags = get_players_for_role(BE_OPERATIVE) + if("ling") + possible_antags = get_players_for_role(BE_CHANGELING) + if("tater") + possible_antags = get_players_for_role(BE_TRAITOR) + if("wiz") + possible_antags = get_players_for_role(BE_WIZARD) + if("ninja") + possible_antags = get_players_for_role(BE_NINJA) + if("vox") + possible_antags = get_players_for_role(BE_RAIDER) + if("slug") + possible_antags = get_players_for_role(BE_ALIEN) + if("cult") + possible_antags = get_players_for_role(BE_CULTIST) + + var/list/filtered_antags = list() + if(possible_antags) + for(var/datum/mind/candidate in possible_antags) + if(!(candidate in already_assigned_candidates)) + filtered_antags |= candidate + already_assigned_candidates |= candidate + + if(filtered_antags && islist(filtered_antags)) + return filtered_antags + else + return list(filtered_antags) + +//Spawning procs for the various antag types. +//A LOT OF THE FOLLOWING IS COPYPASTED FROM OTHER MODES AND NEEDS +//TO BE FIXED UP. NINJA, NUKE AND CULT IN PARTICULAR ARE FUCKING AWFUL. ~ Z +/datum/game_mode/calamity/proc/spawn_syndicate(var/list/candidates) + + var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") + var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") + + var/nuke_code = "[rand(10000, 99999)]" + var/leader_selected = 0 + var/spawnpos = 1 + + for(var/datum/mind/player in candidates) + + syndicates += player + + if(spawnpos > synd_spawn.len) + spawnpos = 1 + player.current.loc = synd_spawn[spawnpos] + + player.current.real_name = "[syndicate_name()] Operative" + spawn(0) + NukeNameAssign(player) + + if(!config.objectives_disabled) + forge_syndicate_objectives(player) + else + show_generic_antag_text(player) + + greet_syndicate(player) + equip_syndicate(player.current) + + if(!leader_selected) + prepare_syndicate_leader(player, nuke_code) + leader_selected = 1 + + spawnpos++ + update_synd_icons_added(player) + + update_all_synd_icons() + + if(uplinklocker) + new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc) + if(nuke_spawn && synd_spawn.len > 0) + var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc) + the_bomb.r_code = nuke_code + +/datum/game_mode/calamity/proc/spawn_changelings(var/list/candidates) + + for(var/datum/mind/player in candidates) + + changelings += player + grant_changeling_powers(player.current) + player.special_role = "Changeling" + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + greet_changeling(player) + +/datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates) + + for(var/datum/mind/player in candidates) + traitors += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + finalize_traitor(player) + greet_traitor(player) + +/datum/game_mode/calamity/proc/spawn_cabal(var/list/candidates) + + for(var/datum/mind/player in candidates) + wizards += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + player.current.loc = pick(wizardstart) + + equip_wizard(player.current) + name_wizard(player.current) + greet_wizard(player) + +/datum/game_mode/calamity/proc/spawn_ninja(var/list/candidates) + + //I hate that this is necessary. ~Z + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "carpspawn") + ninjastart.Add(L) + + for(var/datum/mind/player in candidates) + ninjas += player + + player.current << browse(null, "window=playersetup") + player.current = create_space_ninja(pick(ninjastart)) + player.current.ckey = player.key + + if(player.current && !(istype(player.current,/mob/living/carbon/human))) return 0 + + //Ninja intro crawl goes here. + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/ninja_highlander() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + //Ninja objective announcement goes here. + + //Set ninja internals. + var/mob/living/carbon/human/N = player.current + N.internal = N.s_store + N.internals.icon_state = "internal1" + if(N.wear_suit && istype(N.wear_suit,/obj/item/clothing/suit/space/space_ninja)) + var/obj/item/clothing/suit/space/space_ninja/S = N.wear_suit + S:randomize_param() + +/datum/game_mode/calamity/proc/spawn_vox_raiders(var/list/candidates) + + //Create objectives. + var/list/raid_objectives = forge_vox_objectives() + + //Create raiders. + for(var/datum/mind/player in candidates) + raiders += player + + //Place them on the shuttle. + var/index = 1 + if(index > raider_spawn.len) + index = 1 + player.current.loc = raider_spawn[index] + index++ + + if(!config.objectives_disabled) + player.objectives = raid_objectives + + //Equip them. + create_vox(player) + greet_vox(player) + + player.current << "Your crew is transporting cortical stacks and critical resources back to the Shoal.\ + No delay or concession can be tolerated. Even putting holes in the station pales in comparison to failure." + + spawn (rand(waittime_l, waittime_h)) + send_intercept() + ..() + +/datum/game_mode/calamity/proc/spawn_borers(var/list/candidates) + + var/list/possible_hosts = list() + for(var/mob/living/carbon/human/H in mob_list) + if(!(H.species.flags & IS_SYNTHETIC)) + possible_hosts += H + + for(var/datum/mind/player in candidates) + + if(!possible_hosts || possible_hosts.len) + break + + borers += player + var/mob/living/carbon/human/target_host = pick(possible_hosts) + possible_hosts -= target_host + + var/mob/living/simple_animal/borer/roundstart/B = new(target_host) + + player.current = B + B.mind = player + B.key = player.key + player.assigned_role = "Cortical Borer" + player.special_role = "Cortical Borer" + + B.host = target_host + B.host_brain.name = target_host.name + B.host_brain.real_name = target_host.real_name + + var/datum/organ/external/head = target_host.get_organ("head") + head.implants += B + + player.current << "\blue You are a cortical borer! You are a brain slug that worms its way \ + into the head of its victim, lurking out of sight until it needs to take control." + player.current << "You can speak to your victim with say, to other borers with say ;, and use your Alien tab for abilities." + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/borer_survive() + player.objectives += new /datum/objective/borer_reproduce() + player.objectives += new /datum/objective/escape() + show_objectives(player) + else + show_generic_antag_text(player) + +/datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates) + + //Prune the list. + var/list/jobs_to_skip = list("Chaplain","AI", "Cyborg", "Lawyer", "Head of Security", "Captain") + if(config.protect_roles_from_antagonist) + jobs_to_skip += list("Security Officer", "Warden", "Detective") + + //Make cult objectives. + var/cult_objectives = list() + cult_objectives += new /datum/objective/cult_summon() + + //Actually spawn cultists. + for(var/datum/mind/player in candidates) + + for(var/job in jobs_to_skip) + if(player.assigned_role == job) + continue + + cult += player + equip_cultist(player.current) + grant_runeword(player.current) + update_cult_icons_added(player) + player.current << "\blue You are a member of the cult! Your dark masters have sent you forth to serve their vile will." + player.current << "\red This station sails above a weeping tear in the Cosmos. Bring the Geometer of Blood forth." + + if(!config.objectives_disabled) + + for(var/datum/objective/O in cult_objectives) + player.objectives += O + + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + show_objectives(player) + else + show_generic_antag_text(player) + player.special_role = "Cultist" \ No newline at end of file diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3d1f8140948..b7c44a1e3ef 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -930,4 +930,41 @@ datum/objective/heist/inviolate_death explanation_text = "Follow the Inviolate. Minimise death and loss of resources." check_completion() if(vox_kills > MAX_VOX_KILLS) return 0 - return 1 \ No newline at end of file + return 1 + +//Borer objective(s). + +/datum/objective/borer_survive + explanation_text = "Survive in a host until the end of the round." + +/datum/objective/borer_survive/check_completion() + if(owner) + var/mob/living/simple_animal/borer/B = owner + if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1 + return 0 + +/datum/objective/borer_reproduce + explanation_text = "Reproduce at least once." + +/datum/objective/borer_reproduce/check_completion() + if(owner && owner.current) + var/mob/living/simple_animal/borer/B = owner.current + if(istype(B) && B.has_reproduced) return 1 + return 0 + +/datum/objective/ninja_highlander + explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." + +/datum/objective/ninja_highlander/check_completion() + if(owner) + for(var/datum/mind/ninja in ticker.mode.ninjas) + if(ninja.current.stat < 2 || owner == ninja) return 0 + return 1 + return 0 + +/datum/objective/cult_summon + explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." + +/datum/objective/cult_summon/check_completion() + if(locate(/obj/machinery/singularity/narsie/large) in machines) return 1 + return 0 \ No newline at end of file diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 52fbc8220a8..1311e1c71bb 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -30,6 +30,10 @@ var/scheduledEvent = null playercount_modifier = 0.9 if(36 to 100000) playercount_modifier = 0.8 + + if(ticker.mode && ticker.mode.name == "calamity") //Calamity mode lowers the time required between events drastically. + playercount_modifier = playercount_modifier * 0.3 + var/next_event_delay = rand(eventTimeLower, eventTimeUpper) * playercount_modifier scheduledEvent = world.timeofday + next_event_delay log_debug("Next event in [next_event_delay/600] minutes.") From f2393d9465cda8ff8c09f579470a0818587dcd3f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:36:31 +0930 Subject: [PATCH 53/75] Replaces antag intro text and objective announcement with a proc. --- code/datums/mind.dm | 20 ++++------ .../game/gamemodes/autotraitor/autotraitor.dm | 22 +++-------- code/game/gamemodes/calamity/calamity.dm | 39 +++++++++---------- code/game/gamemodes/changeling/changeling.dm | 12 +----- code/game/gamemodes/cult/cult.dm | 3 +- code/game/gamemodes/events/space_ninja.dm | 7 +--- code/game/gamemodes/heist/heist.dm | 9 +---- code/game/gamemodes/meme/meme.dm | 6 +-- code/game/gamemodes/ninja/ninja.dm | 10 ++--- code/game/gamemodes/nuclear/nuclear.dm | 17 +++----- code/game/gamemodes/revolution/revolution.dm | 16 +++----- .../gamemodes/revolution/rp-revolution.dm | 5 +-- .../gamemodes/revolution/rp_revolution.dm | 13 ++----- code/game/gamemodes/traitor/traitor.dm | 9 +---- code/game/gamemodes/wizard/rightandwrong.dm | 6 +-- code/game/gamemodes/wizard/wizard.dm | 11 +----- code/game/machinery/syndicatebeacon.dm | 6 +-- code/game/machinery/wishgranter.dm | 6 +-- code/modules/admin/verbs/onlyone.dm | 5 +-- 19 files changed, 63 insertions(+), 159 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b749bfb07e7..621b1b6bb99 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -564,7 +564,7 @@ datum/mind current << "\red Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" else if(!(src in ticker.mode.revolutionaries)) current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have
fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else return ticker.mode.revolutionaries += src @@ -577,7 +577,7 @@ datum/mind ticker.mode.revolutionaries -= src ticker.mode.update_rev_icons_removed(src) current << "\red You have proved your devotion to revoltion! You are a head revolutionary now!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have
fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else if(!(src in ticker.mode.head_revolutionaries)) current << "\blue You are a member of the revolutionaries' leadership now!" else @@ -656,11 +656,11 @@ datum/mind special_role = "Cultist" current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have
fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) if(!config.objectives_disabled) cult.memorize_cult_objectives(src) + show_objectives(src) log_admin("[key_name_admin(usr)] has cult'ed [current].") if("tome") var/mob/living/carbon/human/H = current @@ -701,7 +701,7 @@ datum/mind special_role = "Wizard" //ticker.mode.learn_basic_spells(current) current << "\red You are the Space Wizard!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has wizard'ed [current].") if("lair") current.loc = pick(wizardstart) @@ -732,8 +732,7 @@ datum/mind ticker.mode.grant_changeling_powers(current) special_role = "Changeling" current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has changeling'ed [current].") if("autoobjectives") if(!config.objectives_disabled) @@ -774,10 +773,7 @@ datum/mind current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" special_role = "Syndicate" current << "\blue You are a [syndicate_name()] agent!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - else - ticker.mode.forge_syndicate_objectives(src) + ticker.mode.forge_syndicate_objectives(src) ticker.mode.greet_syndicate(src) log_admin("[key_name_admin(usr)] has nuke op'ed [current].") if("lair") @@ -829,8 +825,8 @@ datum/mind special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name_admin(usr)] has traitor'ed [current].") - if (config.objectives_disabled) - current << "You have been turned into an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + show_objectives() + if(istype(current, /mob/living/silicon)) var/mob/living/silicon/A = current call(/datum/game_mode/proc/add_law_zero)(A) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 882f161842c..898378543d2 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -136,14 +136,9 @@ newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD - var/obj_count = 1 - newtraitor << "\blue Your current objectives:" - if(!config.objectives_disabled) - for(var/datum/objective/objective in newtraitor.mind.objectives) - newtraitor << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - newtraitor << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + newtraitor << "You have been selected this round as an antagonist!" + show_objectives(newtraitor.mind) + //else //message_admins("No new traitor being added.") //else @@ -194,14 +189,9 @@ traitors += character.mind character << "\red You are the traitor." character.mind.special_role = "traitor" - if (config.objectives_disabled) - character << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - else - var/obj_count = 1 - character << "\blue Your current objectives:" - for(var/datum/objective/objective in character.mind.objectives) - character << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + character << "You have been selected this round as an antagonist!" + show_objectives(character.mind) + //else //message_admins("New traitor roll failed. No new traitor.") //else diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index d8f931cfd1e..52f6501245e 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -7,7 +7,7 @@ * ~ Zuhayr */ -//temp, move these somewhere appropriate and change all the other references to use it. +//temp, move these somewhere appropriate /proc/show_generic_antag_text(var/datum/mind/player) if(player.current) player.current << \ @@ -19,7 +19,13 @@ rules aside from those without explicit exceptions apply to antagonists." /proc/show_objectives(var/datum/mind/player) + if(!player || !player.current) return + + if(config.objectives_disabled) + show_generic_antag_text(player) + return + var/obj_count = 1 player.current << "\blue Your current objectives:" for(var/datum/objective/objective in player.objectives) @@ -262,11 +268,7 @@ spawn(0) NukeNameAssign(player) - if(!config.objectives_disabled) - forge_syndicate_objectives(player) - else - show_generic_antag_text(player) - + forge_syndicate_objectives(player) greet_syndicate(player) equip_syndicate(player.current) @@ -296,9 +298,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + show_objectives(player) greet_changeling(player) /datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates) @@ -309,8 +310,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) finalize_traitor(player) greet_traitor(player) @@ -323,8 +324,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) player.current.loc = pick(wizardstart) @@ -353,8 +354,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/ninja_highlander() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) //Ninja objective announcement goes here. @@ -435,9 +436,8 @@ player.objectives += new /datum/objective/borer_survive() player.objectives += new /datum/objective/borer_reproduce() player.objectives += new /datum/objective/escape() - show_objectives(player) - else - show_generic_antag_text(player) + + show_objectives(player) /datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates) @@ -471,7 +471,6 @@ player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - show_objectives(player) - else - show_generic_antag_text(player) + + show_objectives(player) player.special_role = "Cultist" \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 03780adf361..c3079bf3d52 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -125,23 +125,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.current << "\red You are a changeling!" changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." - if(config.objectives_disabled) - changeling.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - - if (!config.objectives_disabled) - changeling.current << "You must complete the following tasks:" + show_objectives(changeling) if (changeling.current.mind) if (changeling.current.mind.assigned_role == "Clown") changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." changeling.current.mutations.Remove(CLUMSY) - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in changeling.objectives) - changeling.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return /*/datum/game_mode/changeling/check_finished() var/changelings_alive = 0 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 285a2ac0e3a..771b43caa57 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -100,8 +100,7 @@ cult_mind.current << "\blue You are a member of the cult!" if(!config.objectives_disabled) memorize_cult_objectives(cult_mind) - else - cult_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(cult_mind) cult_mind.special_role = "Cultist" spawn (rand(waittime_l, waittime_h)) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 03d9c6a8cd1..57ec2bc7aec 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -375,12 +375,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp var/directive = generate_ninja_directive(side) new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red SPACE NINJA!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red [directive]" new_ninja.mind.store_memory("Directive: \red [directive]
") - - var/obj_count = 1 - new_ninja << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja_mind.objectives) - new_ninja << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(new_ninja.mind) sent_ninja_to_station = 1//And we're done. return new_ninja//Return the ninja in case we need to reference them later. diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 475b13c3f7a..b8b991f4d4e 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -177,14 +177,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious." raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!" raider.current << "\red IF YOU HAVE NOT PLAYED A VOX BEFORE, REVIEW THIS THREAD: http://baystation12.net/forums/viewtopic.php?f=6&t=8657." - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in raider.objectives) - raider.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - raider.current << "Within the rules, try to act as an opposing force to the crew or come up with other fun ideas. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - + show_objectives(raider) /datum/game_mode/heist/declare_completion() diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index 71781c48e8e..ae4e2dce8f5 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -131,11 +131,7 @@ /datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) if (you_are) meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(meme) return /datum/game_mode/meme/check_finished() diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index 33810a2e5bf..10cff5eccb5 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -56,8 +56,8 @@ if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0 if(!config.objectives_disabled) forge_ninja_objectives(ninja) - else - ninja.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(ninja) + var/mob/living/carbon/human/N = ninja.current N.internal = N.s_store N.internals.icon_state = "internal1" @@ -139,11 +139,7 @@ ninja.current << "You are an elite mercenary assassin of the Spider Clan, [ninja.current.real_name]. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.\nYour current directive is: \red [directive]\n \blue Try your best to adhere to this." ninja.store_memory("Directive: \red [directive]
") - var/obj_count = 1 - ninja.current << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja.objectives) - ninja.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(ninja) /datum/game_mode/proc/auto_declare_completion_ninja() if(ninjas.len) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 484dbd57e7d..8aa8cf3fa6e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -138,8 +138,8 @@ var/global/list/turf/synd_spawn = list() synd_mind.current.real_name = "[syndicate_name()] Operative" // placeholder while we get their actual name spawn(0) NukeNameAssign(synd_mind) - if(!config.objectives_disabled) - forge_syndicate_objectives(synd_mind) + + forge_syndicate_objectives(synd_mind) greet_syndicate(synd_mind) equip_syndicate(synd_mind.current) @@ -187,25 +187,18 @@ var/global/list/turf/synd_spawn = list() /datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate) + if (config.objectives_disabled) return + var/datum/objective/nuclear/syndobj = new syndobj.owner = syndicate syndicate.objectives += syndobj - /datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1) if (you_are) syndicate.current << "\blue You are a [syndicate_name()] agent!" - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in syndicate.objectives) - syndicate.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - syndicate.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(syndicate) /datum/game_mode/proc/random_radio_frequency() return 1337 // WHY??? -- Doohl diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 2f04f8266b1..fd774975d0f 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -118,16 +118,13 @@ rev_mind.objectives += rev_obj /datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + + rev_mind.special_role = "Head Revolutionary" + if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + + show_objectives(rev_mind) ///////////////////////////////////////////////////////////////////////////////// //This are equips the rev heads with their gear, and makes the clown not clumsy// @@ -198,8 +195,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) return 1 ////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm index 2fdf8af27c7..282864a3fea 100644 --- a/code/game/gamemodes/revolution/rp-revolution.dm +++ b/code/game/gamemodes/revolution/rp-revolution.dm @@ -87,11 +87,8 @@ update_rev_icons_added(rev_mind) for(var/datum/mind/rev_mind in head_revolutionaries) - var/obj_count = 1 rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(rev_mind) spawn (rand(waittime_l, waittime_h)) send_intercept() diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index 71c34c0d04e..cbfe9772304 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -78,16 +78,10 @@ send_intercept() /datum/game_mode/revolution/rp_revolution/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + rev_mind.special_role = "Head Revolutionary" if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) // Show each head revolutionary up to 3 candidates var/list/already_considered = list() @@ -113,8 +107,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) H.hud_updateflag |= 1 << SPECIALROLE_HUD return 1 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 71076aaf284..0c0928dbc1a 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -135,14 +135,7 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in traitor.objectives) - traitor.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - traitor.current << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - return + show_objectives(traitor) /datum/game_mode/proc/finalize_traitor(var/datum/mind/traitor) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 23a04161120..ccce7f9bff6 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -13,10 +13,8 @@ survive.owner = H.mind H.mind.objectives += survive H << "You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) + var/randomize = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw") switch (randomize) if("taser") diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d28238e28f7..b79fe4ba303 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -135,16 +135,7 @@ /datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1) if (you_are) wizard.current << "\red You are the Space Wizard!" - wizard.current << "The Space Wizards Federation has given you the following tasks:" - if(!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in wizard.objectives) - wizard.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - wizard.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(wizard) /*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob) if (!istype(wizard_mob)) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 59e24ad3e9c..2be8fabf28c 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -86,11 +86,7 @@ M << "You have joined the ranks of the Syndicate and become a traitor to the station!" message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") - - var/obj_count = 1 - for(var/datum/objective/OBJ in M.mind.objectives) - M << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(M.mind) src.add_fingerprint(usr) src.updateUsrDialog() diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 786468c0c47..2720a1c3187 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -66,11 +66,7 @@ silence.owner = user.mind user.mind.objectives += silence - var/obj_count = 1 - for(var/datum/objective/OBJ in user.mind.objectives) - user << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - + show_objectives(user.mind) user << "You have a very bad feeling about this." return \ No newline at end of file diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 822043720d7..aa99b4bd469 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -20,10 +20,7 @@ H.mind.objectives += hijack_objective H << "You are the traitor." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) for (var/obj/item/I in H) if (istype(I, /obj/item/weapon/implant)) From 70fe00e1c1e99e3d2a473b3d8ffe9bf04ce8f09a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:51:17 +0930 Subject: [PATCH 54/75] Updated borer icons slightly. --- code/modules/mob/holder.dm | 1 - icons/mob/animal.dmi | Bin 180475 -> 181302 bytes icons/obj/objects.dmi | Bin 122711 -> 123082 bytes 3 files changed, 1 deletion(-) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 78e36dbb66c..d1adff7de2c 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -65,7 +65,6 @@ icon_state = "drone" origin_tech = "magnets=3;engineering=5" - /obj/item/weapon/holder/cat name = "cat" desc = "It's a cat. Meow." diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 0fb7e01d0d757b59dfaa5371e966585d95daee8c..e9886ba8a0f1d8b9c3df280c082f28c3c10afbf2 100644 GIT binary patch delta 16285 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 delta 15452 zcmaL82{=_>8~=S!q%w~Y2NgmgLxzk=lnhY_8B#8s4fYZo{Ba(Q8WPVqgZkF28f%~y4~BK{~c z@p_fblZHvM+vzc+_waw2n`zK{K{^b{nLB**alfZ{uIF~|NhjUD@}A4gO}iFrAB1#aD=?QlQ)-TM{Pmz!lK?{V?!%OVn~ZF}S? zJYoa>4I4Eo@WO&R&qRNhQ>(?_*}>ijm@)0@qc9}I;wa$}r4mT?6Pz#&Pi^nB!WRhn zT7->-jYw3qSn}{(<(x@-G&Eb6`bTeZ$8io=%HfKQ&=Z=qH--lHTKb4VUj*n1xpFL$ zY0nU5zYrPnfA0QlJ-*xi{%l?RiZwo+YJFMh1M_Fp=96;w2w(KZ`Z_5>MfFoU_fMS= z?Hpk;gz{~F5`>MdKtj|^8?`=uHhuCqwD{e8`Jf@LS+aWh{KSy!70B`QPscsp`;IM) z2t~thJ#$1H;aK7fE#CM*Y^8iYG5WM|9(sK5oHYFYuRTP>*J7lw!i3w*mP{hv=$nM1 zR*#+0FA7&Jbu(E&Bbcf-OG`I`)$pjlNbu_DpEV|O?_k&K6Ywx`k_n<9ZP6qt*dF8? z3p~)I5>VkW=zw5SGi?HjR(1;r^f42X58SNYvuYndP|B`z_?(P{$_`tk8>ipHw;P(`)KeWgzZtzR*xW1S)`ds5L2pzR( z3~0z+j8=l046!2KG_hN1H)5rB@|_)t9(9;g$Xcx0_}K)7=2(Tu=$ry9{amd=#qXOC zoGN}A(bi`0m5cDmoId%BEPR6xS4k&!INO3b-y#X?6CRc^AQ%sR57_~`TLte!cVU{U zF+}Wpfp!z)w(kbh^BG)*cofT$pQtUJ~K4mg&%kSC(JlHJjhFJkJUp!7Etd zHBO9AEITEgHz7Lw3zNsr*ndhuo=${KQRl(nWn%pLFPiKq_ZaAq?xf`|2WrWcOjHU? zq^yL4$w;Z@qZG^xw)cYe{Fe&LgEK0UIb4ydX?qh9wz}w-R{FV1>+H^{J5B1Da+V%WD zYUoQ|IaMj)Npfb?^0ROAY|_{a#pu#=%Z5~r-a68k6=9Nym+!S|re-gbGQJffL5ygg zrP?bN^7!#)hL)4}G=gz;^b;imFAsD@n(59R{P>8ggko3e?^higRFM0Vs_&GH{mVNV zO)dTLLJybtn=Fq@M}L3wKF$0qbiBCN5cU^p$~Nn`1>Wsz?d5=tJ_KUL-pXRzDykt8 zYWk2%ih7#IBX_L+Wf!ODym?NeWc+oH%fqis{!k2lmmP z#Hu!*o|?hCL?#|OIR?_|=N#|gh2zNx`0ZbNB)hUrN1a($%2j1QG-Y$u0pttfYeyv1 zB}Zfap~h^D%vmr!dgXI?LJ+1xW^BauFI;+j&^Zh3eQH)4a86UD4?GpZhA@C+@t6bX zZJ)uJ)ENq9*q20m?U>OO4C%9%t@{QJgfCEb4`W_>cwys64j-+o3iZN}XgpWIC!{vP zJ`_vV{A*n)5T+JOZp)!&%~O66q7vCq{XH z^d%?jQInE}$e7YG%O2J&X9qsVhfmB%?i9N_=iW9f;S4M(L}!>k^}qiiw9 z>K5(Bp^b$+YKT<}c?Se+9oM6;x216e?@ak7fnY%h)qmlRf64gBez<2|wg}~~>j~AY zX(XNVRbN_(Axin=-tcj!?F!Y85c)rwe1R;aR+F*IEa?|(I#{RxYy5GF4`8VTfxMJXIr zEz*ONvEQe)VUj!Cd@|x-Yf_X*k#n82hZT5B2(~x7h`c37#)vkhymLJI>R7JpK%w4+ zI_y+wN)FW8_&?ttdaQ90vPf?|R zIVXG`ol(rWyx~G6MU0puH&zLsVpG4&7KHPd-Pj6VyqZnP&7DH6pMqOSUVT&wzx{ZT zDWo=AK$FQe6MUQ;0V`GH#uv$`WptmRq}*$Hslm$tt<=*7H&AMf^6eRCJzQ!X?NBgEK{>DE9s{8QZLRHp^Vh`=)O7jg57)^ETne8DY=PlXE-_ z*EO`Gq=~SYu78<}bi{}3-o582fU*!<^ANnzzJ3h`{ljx+!)BnF1NtWJu1GM#*(udu z3YCTC6lyGMlZvdi25E?k)kxP&(!~YjR@032aH;S0XhFz4d2e~(0!&Fx#;cj&*X(us z;z3UBWom-DVbxdV%iBR%fi{^lH0033k}R39qsIX%Qvwrk;)=^2?AJM=Jll(X+oJGV zg zl<+T;M#yyw{tO>|nS(d5M0;^~ARneius(KU7I?XvTo2>kNw@Cv#pA7slx)S3*m9ca zXAB0<4|#%Yl(n@*!kx#dM`N*pi-scvj(`}^&P!0V6|b~gzs@t-$zc+x`YgH{QSHta zV*LEoXko$x^9AXi?{BVKME$U9b<}i5pbt8zzuM_5;q+N?H&~qve!aTHjQvTCFcV)) z>9+yD9G_T%8=Mle+h2gN=p+~Gm2~lTizwSJ0^K0|y{_juyUBn$Z-`fSGKi@kGQZQ` zn-et}jWbwt$pE9;4l0RI{&tJ}fzcJv89tKBtpr8g#|*8!nC|?NPk4~|)PJUO&i=;U zQ9bs$y!+z%`TzIZQe#>=$ITNIP z6MVQ|$mI4-d;SoYw}~_@kQ)X=YfE&go&0Fp?zK+10CqwyOGslT2#JEwGEVb z5-q>Ke4q8_Z)#f-yqR@Fr*e)8b2!;CgUvZmuv8O4vx^bM4qcs$x1@<;3ViArr37__ z@`&4{zXYy|yxa|c!~~l6h1|d%OH$1O;l(Ox?nwMS*xJ~f?r@g!B*;Ey*0^0J#$>ws zj>cbJdi4iAl;^Ys5ZzIb_W_s=xBkTcHs<1=cPX?pzRDMmW<|i6yQafo z!=ah?t+<$j>Ez~Lk3~x|fXS^9)T6}SuclyK{S(r10=21G1`b@1kTujQP$i_lt}lN| z*0IO78S(4$#B1S`C@Ms^pV4j^`FGX!Nq{7DP@?$lmfw-zJ%9PVzI`7ZFi+VN)U~&w z6wFNezUy(;&C^V}j68NFuDxNDbGY>M*%of9n$R`zoi$0JwHoIU$NNal1C=vC_g-@(%A*nx5!$2H3>{bs)MT?lG~5ZbTZLK;l_tsGb2 zsy~nnW#pY7@;jw)g~`QK!Yc_jw(q9_7 zg*DN0M>IQ_ZSYv4+4W5ERJTQ@1RY&IOF_)qO{5J}p(eD_Y}6I(HtIx|CTa2@HVzpEof}LyS8o9CQxh7BGX^8! z3=}l#u<wVI7jgW!fPk4?bKv4N zeFH8}xQOnH&Lty36hEOVeiE{^{W9jp90@D9*6Cn6dZ3$+sSBPf(#^aDp+VX17GiM^ zsbQ3-l2_elBLV!D{BxIa)Gnd>?mAOXNE|#R) z=@YovXQTbZ{cJxIpEZ6$NRd}SNQe;(8ZWRdB5JFdS+{Ug05*JkL#M!A)MQ2Hv`(-#w@a9a`02F~?y_df`%?kYv?A7A;>Wx*qLHOeeWHD-yI`y(g>dLAo}> zEmg*C;^zzq&seI|caTv;Da}{!y&v(i;L#E!zoBEV4M%G&~C6R;|6SFyIpQ8IQ?@iSrz&tvstt#~(DCGYV7EMA;qat?7nDFx)}F z3OmJ2PDAzeFHcV#VTZ?7n4r*|oqms!$t%}N6Ms@R6rih>L~mnmC=M^r!5WJT-YSo9a&_%3HHovj zMU|MxE@N^Ne0yNOv0mb7@}UyNV}+CZmZJ-;FhE+i`DFpQcXpy6{j8`WDp!K9a*95| z-}shy&a;TF-d?g4Z7DNiz5G-HWN$AV43{If&BC=@3bbag!CP9__FCYa{a1f}=I#f= zG>ayiZN+N6g%fx8lG?|X&2~<%aDJTY4f4VK(P5a3l+>Dd`+Cxr0a!3ADpo`2Lk2v; zVcq{$D6w<4^XEyOqbNdYD7?1iT6RtFfS?`+o7Kbqs+Y_5U}z0yL=c!^-5dIDb8yCJ zQ7l3352SfcrM8z-$$B{r%*VOkOfo@$VWo1H(Z#t0O(v=t7R_5aX5R+IXS6)(`PeNv z&cyO6yxUARTfk94AHu^efL*O+`=nf}Sg(B-I2ww2%+!%6>{oJ|DyY1dOIu0TRp^f34jjoljGM=nyZ>t{iw#gUR z>I=}JH&&^Ci@2e7nP7)I7lTVIjttJ;e}#*~eod|4AlzZP@^r_FH`n+T;x{bYyS573 zaQ#GTZa^Lk-x zQXV44YsiViY=O>!A(gQ1mh1T^1e&TIIJrOFRM>GDmc)Aoo*23k2lb}orA8ep$ekWN zG<%3UBAbg2Woa>jhJv|o`*r<6DCSgtNan)fPxq~T|7!pB&U8=$iOF%na>1(yZt5Lp z-Hczsqnu;?DSQ5vzz;q;>ev&I_nhe6@?uF09x zLOu?&7^!ERs5xm`;y=?zzCsv8DCT2qTf2A+DHdUJWrU0(Ov8(m|6YUgN+(GsV3WXo zXppFNK%vT~_;wevbt0jDhQWX>@XlSR7P8jmaN6sS(If!E!Xtc)LBi&Z*zqHd0y;5_ z-{M&3R|>P(ZCV-XO$viZz;-B1w6rJcXsV&%kMXC|f!V1L*Y-(W=EKpJt+QR+~lAT(W3y;ZGbc>zka8mLpUs@MLO!^KN^-~k`_D_ zbr9&gPvyb^_Kh7S5wyp+!)ODJMrTu3h~&t9bRiXPa<7}CoN516=w)57T%7?oOB?)} zXBv=>DRfM0-RZ#mLptnmhWZ&-1#dDBt;$MODI73VM9V+<=1|-j^W4^Wpa#jdDr0O9 zS4`l_1NPySb=dpGWa7aV#)LwiDBBV})GAH#TrYjB-^$y0dOW~+%Gslp2wnU=u)sli z<~-gzeAlheqhi2oaP2#LHJl%O%x=C~Nw-qn2u&_eIg_>ovj{)^{cdZzA$U-67H>=c z&)0v?Z7aS1pYoNsAT33=lMDYTHPPLo^}P6&js+Xd?Tfs&;R!o=ldVTq9t$Mgx>!D-11bx zXLj8rxq1p4Aztyjl%U@_;rfn6a9DC^!xA8%_R?XCJ+fgJsuAd)2MR+6!mz`XR*4B2 zad5n7ky`b6ELv5%u_$5?u(0f8pk0B<=JNCl4W1GoO z*ae(_h$7TvPf>nsI^Plqi`kKN;K7&(JONE_T!;*K+X*)}ZKU8+!1o$rVFn`c=SJ?v zSc$@`Qv<(co7N!Phz1ivsXZ2ZIB7GD`LN(D8>~wjXEG6=-`V;Ip$M3sww{<}k2M0_ zhpPy&Q5l`%{aI>Cj_?s`5-jENScK>w|~%cXpSw5G;lKpy1YYiZNn zZUk8iY^|xcNYU{O{p`@MC2YZJD6$ZD_+MD+zfXrhP4<9PeNuES6yV;%&)opTArJr- zA*|ElxDuQc0MOiuNAVE%HlH967gyC)l=L!>b;K|q4p+BUY9WPp?&S3uaOz=cJY2)dDc-hE3IFB(p@OGVt+23-*nkP^!_2I!q%)d1XyYGZy-gsq-e_ zrQN0 zh36y~^e+|+diz)6oC_7d*deVVB369FrNM*kGS@jS^l4_9MVBj@qzJWdFSOmtgG|r5 zlA=j5EEOimC86pO8Y0-d;DG?>$vrU5se-k1a3+>6widSpS4EYt{b#tF;O^@De;RRLXKl)Udz^LYW*^xJo8< z`SK%$2nF@B!^>YlbnlpTB>$pWm7c~Gu{Zhps=!F-?k?ZbF@JU-(?Qe1^J(pm+9sA0 z^iDG8R7o#V8t+j>?yl0Q%R9|H-}5i>qEMy+w2%tMuiv924u1G7pr*G@sA*K9 z%A@|%z@?;!pNWis{25Bd5}+GS&)(TxjlkZ=Uq6U8io4!SrGPqjluxy*J@t_t0 zYrFAb*GR4#_HG`n-~jbN`NRoZ{b0#Q0t-`?J*w~gr;Bf0efLc$h{>$%t13O^%QFoacCk1vu917K%|x7pXG7ltw)#;{D8_ zfE65CMizt3{TL12BNr%Ea4DyQU*_l9fZ6rWJ);2YJDEs%iK>z%wWBBy+IEsN)wZ^D z@;WU7-l=hDS>2R;nKUk(T%h#I8K7r4pZD%o(6!oD(sMF1^p&@MnS$DV`W*Ugi7JI8 zn;SZ%U2Oq2mp>$?t{Q7x}2pyo1)ONBynj_QqE^kG&8=~Ko)CU++T)zj{GVj*)Gt+#C z$yqn&+{#n?nQ3DDr<&P{2OH^$Yjr$b^Olk^S3QWq%-0I*Kb8-sbOr_CDvDojz_{mc z=CIb?JgwSLvq2VWQrk2bi`^E=93d)DP5FkHO7Fqcb``B9W%N5y6~csAqL$A0ryMKV zQ8ZhafF+n169O`r!S7c}DZg&dDj^gHf2*r?eO)3MiukBX_VqwT&3PP5LnjiV+oPXo zZ#D*~@O;%1Xi695AMgw{uYBS3@&sFgA%K7o&Ul5pCXYmUkZ#oN7%bUv8;f?*J~z*$ zODVleT%Xkt1{B;NaDb6hW=xRtlZ)}XZdb7G_H+AkS)4VAsw-2%Io{MTeD&k3FIT{}!plWv~nV~Dr#ke?>vJq;W$O z%h^G6682XGh(|JDzl7;ZIpop`-sb;uNI^IWs6FmD3Ygum74VcGTQ>Eq9$C9Xn|OQy zZA(OSSrtK@k3jUioFmX3DMfiBgiY@~PjdF``&$TrnfV1q?B}pttvSyEzwpsmoE=i< zVA0WISOZI#2$9rnA%V)-{N5#NqUAsVP(9?WIe;00c=)?>y2zbC0Q_l2fcftJoFWKFiWP$lCj$pIp{rrjIM$geXW)oJ# z`{Eq;`D8XM$?DFuvsjBA=@WxTz6o%gzaN1^t)N{>b;wf6%cO zb{wRL-s7O!o6&U$ecWo3rY3%BJFr)qfmi7R2h@YqAf^l1M<(l}X$Ywn=CK!iuY5Mb zgn+68HP^xl9~ z@vw~Ug$vT*OpDE;yt=|apIieF2Vu5#f2F`_ST))?T>TlqrC=kN(|jpZ>D#Rrwnhv& z<9X?WrgxzDYa)V?jkHljRII)gh%Aj?;XI6QN6ByHPi&L>DMYFx8)vmT?C?GxcS$1ti!t*LW$_93 zC*iM4(52AlEl#D9WdVkNpwPG%m;?MW{N($<-*=fXMisg@AEa=#(TKB{y=;>H7lRg10>s(Zt<(zf&2+gYsJt51ZR_nEC4aJ!4^R5VB= z4ObE{JOA=n<;mHnue*J(B}gi5uM)QWUta;sqVcni@o3H?XjY^Og?E$rDnfSa|A|Tm z?4pHWTjUR{@&?gwE6D*SRXIVZ@5s_uHva3d_!3l%MO_zlJ9U z0Sy)iwBmiH7e!#dqu|A^l1oZys;y8J)-jvxTaMl%UvNV`oG9-z`w0trR&R!w=AnXz zf$uj&Ch0p|!C4R2?`c+&l<>be88x5ZE6uCvqwp588VzugNz^BhnCJ& zhWC9ph!ZIr>L1s;N@jvNHvSIR30Uz;ErE~sKW5}gw)VY>cD#2t(|%5!EBr)`Nvw-=*x~9NFi}RKGoC_VxR~aXo^DhkmL_ zM#PaF(#Yyn;-am#?gA1w^X+r3I@|lsfU(vd72nr}qa>sc7Dldwsa*yL^gMt}Kt@!1 zk@2h-f3*w{P1uH%6NB9{)@@J^O)0=NQ63A5{NM;a9|{jh5f(|T}sF4uRFIH<*mPikWe z;fVM7B%5gtu&;bR$rVE5rw61m5($T)3B|NP;FBP4;uG{|gk+nd9qxcky>_5hugvc~ zS7B~$b8#q5iN*`@ACUTDZjuwC_+s?*Z8O|4#m#Ci8wErfo8izy2p9fnPQs{YPEK^j zpj5PcTfePc1*|m;psjlJA$}F!dt}W|?0CMd4!VUlfBIpBBpp!;@(jq!QsMDZiE5e_ zW;{z#KWQyKGBSWM@Pr%$5mR3Z8UOyJH^N#wbTY2=O4h^8qUq=D56A{CJ1ynd8(EBR z^3f=j&)cuX$3ir+^0|$7j1OdU{z2kwY_`YY@54vOPkMo*B=h)vodvM@8d5g2B@iq0 z=;~Jr$rtFC1Ua4;SE|AuJrfArmeZsoy z5?Gf2e*B+*3ast3IHMD z#UTWEu2VU1t#vUQ`1SF>zv#}qI)V5m9yEUfg*AwmGjHIN4xKkOh?Y@Q&gwU(=uDAa1P$2p3?5v&96j89A~hJ^@Qj@-lrSPe zL_#of?8oK7|wFET^lVmviWI>T`nYV2~dBaS|q~vq)10m)#2*`>~ zQrDK$d^%1#N|0%TG#RLU6M9^gFVmajo*Cxq*G3{I{K3qf2CkJ0KqL>w6zhcSN@k)` zr_5GFFFU!~NSvW&uCu%WB(mghv}r9u85RHKya93#(aFhN;&+-v^o&lwvAYV$Q1o2I z$b3oYD^yFyhVU9R>gR#+-~gdn<6r7+*$MYl+0mZGBip8HF>e7}#vW`TKOZME}5hQHB1m4#9@$6bUz=D7aU!;XnHNTUS03^TgxZnVD@P;K*$ly~7%Y8xz zrY+rL89$U2{dc+pYu58NKdtb<<3Epse*Q0IZ_H?~{S4*Kt-|Sf#&e$(5PJFs5v(3? z=VT=(;v&HmOe@Pl3;`cMT1G0+66@jOC)aB0>geQtLGWTX9T4*6O5_aI!dopirB#C| zc8w>%Jjrde(xcQ24E)}}2w~?pTIB-Y(`G$(hMiQxVq(|XbqqAgIEp2iL_p%`j%AM7-Ag8hJS=!~=UK7*M-!eA4 znyr&^BMS{HE(}>q(%v=hf*;#dZ%A;zNv$g}e4AU^@(+RKe2u+fhd7?3VC9siwkc+d zD4Mtp0SNpbG!0btyXVzajp_BE5$Zl;gc*my*Uvvr3i*SpGO?L=c{sEn7*jz(8=!W` zCt2myY`Br~bI}%|2r#s@=O!gWv5y9>k3^NnNZV20Yp?uTQdM>)G!EU7>HZ}usTODf z-dN1AvkGJ8`^nCruaOu-TrhNCtHmGG_g2JKlQ-M;o*`ap1^@LUOSf@ZUH&0^4kGza z@W=KCRP})mqu%J+OzuYe{L?eOwMu_G`{6XBcpV1$TGlH&e0%z zeSJSbA3vVIUnB2;gMiNLhrum=LgM$pJx2K4xpUHd)uwCNN$TMpt=E1PC{)Huq#kaD z&SPBWNvfAXmwAUM(2_EdGbf(plr2v|B09&M=+~;d=z{ZxcV9d{&w>|w8oDS(HrW}& zRwJHF~Z)@uY`Po<1A7n+z z2o5N%A5fe+cc-PL75NvQV>JgK>_FBkq`xXENUFgjN(m&%P>ybE zEVP7srD25Q*6ZO9wH1~NyhWQ4u4+C~NCT*Ao@1kexOkr+Y_&~8Ma3ZkSs)SOY*eVx z%I}r&p0yK4rOp+q&)OfXt}#$aLWp-vE+B@-xgQ zo?2w<=A1zDf9UsV+v;fxvPDx0)z=ZIO^rCNH+MAes6*iuIC#slRPlwKw|!hQ4C-e%(@hksHe9--=TZ zGoP~{bC|^fTz>s9g5}cBpV`TbXSrl-$M1?AdS1?J`ev}x6+^OPHB!2uurwG=x`P*=CR#Mz?f8KIzo61{UTHW~~B*zN} z=UeKx)TI$3_-=FZ@OR;M0EHE{%v?Kor0%s-82!B&8&;%D2eFL8B{cLtKSu=5oOL9A zV#q5sC0Y6CRdV|QmPczeCDV%Y@s-oO&-0tE3O5^ahX!-_bL%2&10FM-%HY$c;kqov z*#00onZ))Q8TN0C%uH8;(`(g;R#GZOFw4J*sk7b zE|t~ReZ#Db5QPvH(+_E{aQFj9p4?v=Kg4HI(i#y{`ZsoTe6R9XW&a3;pd-0BzB#+D zP~z~)Oy(=Eb`-KFVwL(kV;3Vnk8ns^z5!v+5SOS3!aXZ3of7Gvn|wcI0Tfd83H|G~9Jq`|(>Xq_AQ zSHQzaAT7w`y!2l{k1i?UZL%DoK%B^s0HBxYbAEaSsd7#XHjBL_O@(mSuBUr{*ueZ4 z(F*uNew!h8v|Osma6fi3#NtXnjWm^8N}a=V?s*;(^(oE$4EQi zIVWTZ39V7yfmCJ#b0v}W?5Ue~ zZURQkKb?Rk9k_f7aUJ#Z;a?k!XzKtYVgQO2vlqNgdhv4+2^S!d7ZLXcf7iw_-7_rz zQTt-hybHg!BitS0#F8vM(pfrewWrk55^{YMG(nciWpeV2bD8=9O&rRV$3+;_y8chC zWx3u8;zQ0;J+Mlf{N9U6uWh6T-gp;jXkT`IXd+jTBjB}<%$UG5gZ9(XBIx%$#XvQl zX$|j4g4DO$<%#1;7o5h2toCXoUhRi;?cY@9$h!%zSWHf=uRWo7`up{10MqkF4dt&S z|CgD21p?YW-m!fwaqT~+PGI{X*Z*R6=LZdZ|Gfc}=6yRjb%JkxzZ3k2=SwgFjP_q% dzx6Bg2)>s*q#rjvUW))f>UT6%@|4X!{2w1btIGfY diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 8900043e3de90ae4d7e62054b298f7a87860b474..23d627a5f1299a68d0ca5bdf4432e012d59cfff3 100644 GIT binary patch delta 7668 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 W;~R=sf&85d07~*|a-}k+pZ*83=)xiZ delta 7294 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 I#LVx10N)GyJpcdz From e1267b7fdf928a3ccc60a62c4287eaae6cd6b4c0 Mon Sep 17 00:00:00 2001 From: Jarcolr Date: Wed, 30 Jul 2014 21:20:33 +0300 Subject: [PATCH 55/75] Adds Supercotton's welding mask http://baystation12.net/forums/viewtopic.php?f=33&t=10768 --- code/modules/customitems/item_defines.dm | 8 ++++++++ icons/mob/head.dmi | Bin 113186 -> 114478 bytes icons/obj/custom_items.dmi | Bin 60105 -> 60959 bytes 3 files changed, 8 insertions(+) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 3f541a8984b..6808b7b0ea5 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -720,6 +720,14 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "norah_briggs_1" +//////////////// Painted Welding Mask - Kuratas Dotaavi - supercotton //////////////////// + +/obj/item/clothing/head/welding/fluff/kuratas + name = "Painted Welding Mask" + desc = "A blood-red welding mask with an intricate pattern. Smells like burnt rubber." + icon = 'icons/obj/custom_items.dmi' + icon_state = "paintedwelding" + /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1 //themij: Taryn Kifer name = "orange bandana" desc = "Hey, I think we're missing a hazard vest..." diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index feafab49836408d39f242ba590a1baf16b76c6ce..b2ef65da38514d0f2ab3deca48f6718bf06cf36f 100644 GIT binary patch delta 16438 zcmch8XIK=^yJZhq0RfR98B`R>8OaEUf=W`5IDjO{h-8>1gG5nD5(N zkTa5V8q&-*zyIC6d-ubAcAvYu{lTWIYQ~;=L!CPBsmuc+B$nvIZJ1K=9d1JQy_jWl{p-e!0WQ_bo4jXWGA7gha3ZdiE<~)r)hHUAb27H?M zWPddCb|V@-BT@9GH*L!KZ0T zZh|kv=VWFO1Ra@VYmrhmyZAfUiyR+qlQI})X?I4ea~o8QM&Y;42x6sjQW}f3(Zgrn z?#P(d5!Xe`%-02VcO(Ph?9VXq;3Mkx$w?+I9Pr*3QI_siJ^zViQ;Q84uuMUauQg#} z7(_b&V7_7>btjnBe*p}viN@)YzU>$5a>gpSV}FkswWe=_p=*EOe~4$#&)~zMsx zRG<_XEjRVRK?)$9j|qqb5d^#H8b+AFtP7E@Vf$QC^BCM>`=@mnMpFu#^(acH?aS)f z9VT431a>QGVS5^LJX7avW9<+TcoA;d;ibCHeLaM`k!&J1}6W>7lL8`wQtmz z8760gULzA8)9sx1SunPjaWWg5c8ul%H0=0^01q!uJb=aXZMfQL2C^)41^vfFEZJy^ zD3d`r>1lYS11Off-o@|psr_4(2U-;~YDgq2Bcs7rgn|O> zZ&y;*`u37VXFL}ci=`=lmMZzOLM$J2&7EIbBCMH;ZWsQ$iWPsded;|8&-rF$1OpbA zm+=8SJUjq+R+ro`*r{DHTeW=Qs#;t}?^*uw{si@PaP+B-0rdX&>u}epsa?IvE4_Vn z%jV*gOXE=dh7N#VQtwl(^+Jy`-oX6}RQ#!E8ce4nP^I3|K>j3KAr$P{?^q|cE`MJx zGF*&sHLqwKKFm>1H@3eR&eK)f1~pLz6%KLbtD10wUOiRS@Pl#APfz+~-FfTMa6dG& z?#qC<0)vXRBjSds^_psOBm%o-JQHU>T5g|wotc>&Xlrj*h@j;KfKtnDtpk#;$b9|) zM>{*a;7#qE=Pl*-6Q6(m5?NL77%Q<*wYI)@esPg!6RL&a@?}z5xt`!PSXxhl>QOl3 zUwFjT*x1#9V?*ZG|8W@xB*Keay)h}X)?LoS@2^zFcYhK1H!Fw!_J@ucgva*&2hmyhMgfpTRv`Z{UTV!9cf3x;k0Tuyqb z3NZP*v}&uH9&L=hs`q)o0&dHMZ3^Kh{(v)&9fC-5$GBq^W8<`;(`U(IFXQ>)(NDJP zbXR4^df@~pT3-Ez)>f4%;}rxd8(9GphA}o4eSQy=5>Z%d^e2&oXnti^<9FE~DV&B6E zOJdlYngId&TFQ^nP+9WHm&(-|HzL`FqjzST83Ik{H_BdQ6dR=x2I z^@e(KVq!Y)qoS0(yd*~o3_>AG0rHTM;(7D}ao7HN5o#}#{*6%s05;%>lERC<=I!;6QxX!A50Ym;$x(-K>n{;8 zr>AF7G4iBYiNo;d+Cfsl#WRF=11@i<>J(_EZ@7iUz6x|rxIU{0`xV~t# za4ITEqN80pCV*7dJ}>a~2IRH0t^>1IVJxkmuVy(^W>k{dJxt&; z0wz}|l9b5pef#fvN#j0$zOlHt$i~b2?BeY;zmoNIN!P2P6s$U^=c$s}2EOcf@2Xs= zJ^`O7R5(lt%wo?pr#9^D`$i}i*y;~n=;(x$Qy0~ItVNpH8&&B26VwUTa zTk-MZ^+UCTU}Ghe?L@|1-D4Ct97Jw;^UA;jIedE3WEgewXn^~M;S|lO3B;ZGav;{n zXw7k={2Am7Ei3(5!#j)&4B>r!8sD@G+7w|f;{{82V>YL_EqgNlV`1|<*Dl5DcC>RX3GM%MTHdj=>jxX=z zBmm_*N+u>UU|>xubjBZ_7!M%2#uTQvo&^(_WtZFX}OpgC_6iR~9_3%s;WKJSL^!&?HPOd{`OqqUx4Tf0` zA$=M0kXwt`j*u<1#OK;k_INFH*>BnXg&i`2ee0hn#(v0;UKQv- z-lDb|+Hj#FmF#FY}<_?J9B2Bn}bJAxJ854Ffo(De(K)3dJN0g8+s*Q zS1Imraz0Wu`2H;U@4#}M*P%`GXz}Z~^K+m4>UUQt!0$vRV2+RUOtq+fg#)kek@Ml& zaL8IbD=`7VN(sSe=b(0-13%v*1VR?-j|%4E@(>UO?v}bewryS;&LcO%W7SnkkI2>? z7h7#~sJOKx#sAI6O2aWCTf>VI1j-V;hASpE*H{saW-zV#{f7tRPK1El_B8L3C?(65 zhYz^>UdjX)oc^IX?t-H7@1d^lDT~vTtrL_AR|fg%-DiBMqI-Klt!;x{eF4kfG^2?- zdC;mBda}R#y8YvwwQQct8RLSYPMy} zjj$JvdcZ%ihi&Sf5*FF~@N}77?-g?5$9M;={gjS2kcadC^=n ztWNUSQ~A%+{2%FQvHnnUdAHq@ziN}FE{?2xR%iK8@#0~zq z=d-t~kb6id*m;wM1!>%onR;SBTJ)6xQD|5d00mo6NQl|OpQxfSxAjx(@zJ$HfpzYO zMeXJfpFDZb5Mb-giSe?_TR&!4K9vd|utPaK< zpB=ZJxxgX;yn%st6Sx5Kd4GoX~V zeVNzwef8$bk!V`ODID@AobJ@v>7~Kx0qLJEI-DOW#dL8|N5wKnYmkCm8)#@=jESX7-qOwkYH zD_$NP6vQSYQ#WA0Ts}-hC3c2qot_p=0gydaZ+!r$bSf4-J(@Q&|CW;l#lOT+_Z0#H z0ya50);jNl263>xeN7?5oSK~;ccRRTC=8UnaQ>}NGW#xyH6}+PlflK6 zq#)ve}Z=ZGib6BAGmM=DiYwWiS=de}HEi&)dkOA9Wd86ec+x3V1Wr)2hcZ=^brvd1WoBgw zLMash8{&BlY|3Pv7W}lw*x4n%q+RAk9}UF&gLk>a->RLsNYUhnny6alx*GSFR({G; zuV+%^|77#Lv6uJU^z-vm_20*rPmPNgBrQnw$7T2|-O&)lbjY$LicRVqViRQWdE)i( zX`s8jg9CENh_cYACd3wvY%~|jEo}gXK#MlV+OOMZa30h(a&khz^+SL?VvOK%^Nu$c)g*QFV$P!{8#>W)Z%~mkAh~!kMrc9 znNU(uxg{ydz|PJ-T4E95bxvAPyLaW@O$9?~%e2AU3D&L9JW*c1o>{IUf+YirY3XFB^!P%o4Em!vKeL8GFCe3nT8WejJN^qa&- zNwKl9$gLRCw$%4DF}z2hR8QMu-HF)rbp8u@^Jrfm=56u)=d;a@K10W#((kLHDII1) zNkboO#geI5Sgtu!&V2iJTa*kfmNy(8Le7|J+8km%@a;-db8|5SLk@u#0UnN$j)mm& zf~hmOOy;?{IjH;n_;act+ri3SSz+@OnW)VPY{Vyg*_QIJxZhwqEZyv^9LKS+@h0+Y zLpYaOB(uKtLn!wK{)XVKVScI5X9-riSGrg>8%O9=2urgBz0m6TnJbk)72yf zyxh0Ly_+BQ*Lb6^PFPU0OGro%c$RDZazIm^QLsSkRQ>6li1I%WWbCgtQdt~Rg^(kM z%sD3~C&Nc*jTcMaHJTH!dv@gCZr(Iv&IeZL(jn3-iNNY_`m zOF%sVfy5MM&_H?t6Tfl3{vPO2^-U;AQV((CM`lFXVN9A-C5k zqx;2Y^})ZGzsaEEx1M^NbyV@2JO%Gx3pX|M$joXsPUl55AY65?M1S{$F0`-C+udis zTO9B!FTl?x?AKkEEexZ$snpF*F-gHHC$}oxFn_OWKCCwe>j21}U^2Y8p2ytYf1#Ag z3}nbKe@dho$wICK@)=dn&bLGW4qcD%qsPpWwm~_$R#2fALIVW|`b&tNBJHWQ3CgFt zz#`VY((o(G1uvsnv+VbqFyMvfFRM*op}>2y5<;adX8!%wL6!NNV?Aru_?XXJ+Cu_7 z@rs?N%et@1?UL{&M~Nk%U%ft3Fu0@$%t70~2S+Nra;K*Wa73;erhr?Cgs((D_T1>KGU-_ZccO4{Iw54Sqz7ldzM)WS1-z* z^!6Fh*i**4?i9dFpbSJbGx7Uh8RNbjNnDA~$y@rUKUa_6Pk8Zw$O!WkmkPd-p|`Dl zXD$b86uO7r;APy@kX7IRSAXi;AIRZaYG>9oduWS~(!RK1j=gYU1y$#&z z)@-P$VnN%@i3;_OZF9XCTY=o-YOGzH@K!fi9o#YjV=u(}+$D?`L__{KM$- zGO?Fv;*#}|;8Ss7EGQu^Mj}rNJoxVWo#*Bzrs~uy3ZJTqm8ueZUQt1oykPkQ75GP~ z-llIlN97`BIyq|uccI<+F1N7kfkTLv#w!vK4#LCKOrI|1l}!`bgHq@?&6uz@JsTUF zGKG9-4__5`*p zuay;$^*Cl;dS9&0_&b|LbY080pUBy0TdcC==x=v&9JJxe`t|F^{M)WX!Rj)InSyvX z-4WWk3bma09hOw`iTL_$S{2*Kad0Wlf8${%-5VNTM=)OVko>@BvF=$GLC)ilZ; zN|W{!8YzUwAdPBte)vlDq8-~wN2|U&E;F}mmKqQx9!f{LCNfE3(1WkErho*xu5$+Vc zNzdJJvrPz{Noxn?FtND9KRfO9q=;56ZeK8cW0&sNoLZl7&~VGCS9xRHq1?$Lb#{I} zSrmh4!2VKJjI38H+TE3Lt!bamf5TxrbhmC(+o$XmYKIVDtrJ&S9jS8lB(V$ltevoP zmJ|P^5Cz#}PadwaQfpS6mDI0RM*wX1k5x{bnfeH<59)71M6K}WyP3?s_7n4oAj}E5 zy*)?(XOiLfWuol`pI1pqP=WA1^f5@rT$iI#QTN`~}6^kJ7uUO>5ct2=H4oAIXdu=}m21T;=xdP#c zp?UpD#eKz{0@-7TXQWsex_MMrv#T_7jix-kx2q|3-|u4MO$PXE;!FA0N3}6b0br=W z0e822O-94jV`XS>0#j^`)p1i+-E6>D*=?E?=o0W^XB%R*cy@!p<0Py74!`vF@Xfp~ zmF%Hm$?J>chP79>|D*|cJ&+|VxiQ8B?bB_}!Jk$QNwz1Ck?5Udgi15; zT~KHk6%^_+8tTEN_DM1ZmY^V~NfM4lBDdGXhJu&*N6UZxKF(5R>m13t4VZM&?bGnf zlcS)hTs!Kg;EBafDr364U3_5j4r$EY$zF4+k#wNIrZ$%=s=_yXU(gu1KQjD@1O%MG z7!%QRJU>(+-K9sw-fU3vwZ{+wj;s_$>lF_61hXV*`Xv)=Yf@;!jPfUz7Y|5p#hq_F z^x2!E^4T*TKJFwl8BbET-@*5b=f!_lz@Lw>unL}tja9$r?9BT3jiUJ?b+}8n3T{*# ztmCVpkaS%$fBfv(OCDNMlkS$UilKllA5T2Q@)bJG|Gr{a>rp)5mfWqgv^P7>dCDdz zNago>tTaAyhnod`;1wXb>kN&0#S=e)m}DR{Ih&rM@9!9-@?exg>_)JC*_#a{@mx}W z{06sWFTS=MWQZe{#-;_joyiprMN@$gGvK@JFxy!FHk^@6Lick_1*ktc%7~iG`icdmsELELc64DOnSDn4~AZ#`I&4;+dP97!f(c?JT?CQz$#& z`PuMW4D!j)iVhA8d`L|#I8uA}?w645NWMOE;L3`%>xOax#4?tVXFl^PA{uILAF?wM z1k9TmGG>ZztH>4o-sx`vA9T<}+&Z@~>{0P*UiUbHRS7qk9UXU_7%u)D(=1eby=Y~m zET2KVSBk{r_^g^p&Psjq({z9S=GECBrsO|zM#xDH z&yF^=%@2ZC_7%aKCbth7~?MC3Et+ zNMLrA3W7xi?gpW5Je4PwiyzWjpRGzE- zeDUdT6=&&RF()DSzyjJjEDb`!ld#5){2eo>yJ=;hyM_)HtE|TE%r%oYhf=t|@lBv{ zcV@Ja(wK?%lc$Kp4n~cQ@WQ*$7uLVc#`uBRxAhLLF8dpoK2S>W!UsE!{h+{TlWJ9i zwgkJiK3J)=x^-KK!2pd{=FKjp_rcL3POoTWA$T7j7L12xD)eg5tDJHa`4CkieB}sy;{qci7fSByen@;rpLFaNSW!n`?p?z! zxLR}z^F(JD)4ReNzE0k;lU}d5)BG7&%$I>lj1U+D8t; z5ok5$>f4$gHkr1s^;#yL#g=BQP@xNe7msS1qrR&d6;DdC70q8atV>6^)Il?R{u%zW zeEYf1EAzlY^`)uQ-%o$pCGhFp@5V#ZB=AjPKeko#NKNc2=)M$AU8O7halFocky$&{ zWpn>xp2o-$Tyo!H zHTS{h4xJ81;eyqYB-Y%;OLQC_1;#|(+oC4}asfWry_)Wls{kXDDJVJXwM%gibCy%- zCQbTYS#~8MHG3UHO;z7Vya$+kk#*_>Z)M~NGT^9W*{i=K z@Jf$k6=}+e-AM+QNcwsTnrE(DHE2 z&S63>rrQcU5ZM%7-J^Q!v12rjp@I$Dk@mfQZstbT8>T}#AqEt`cXYtcJ;-@ z!zn9YuqU4XFL!F;*}S<;IiHF@Em|2EnU2?+sHzv1S(n-d^U#`!sT9An3&`8H1KZl} z-T*;$YcOFte4^wUcF|BSBik{1^JFZzdI-%zC<%FrPl6Au=Ysu=?NvjREGkFE03rtq zZk`2$OpY%9kO(Gp7(6etGK>a*6ZRMR^a^D|IVdVb{8Gn z?x-!`LS0^Wx~nSc*&hb4I0C#d3~+CJ$^zW4607ev6v8SgA#Vr#kRbfP(x^UUKRrZB z5oP#d8G%BS+kgF-Y=u62_hPGKczMp%)z_Yq`hX2V6V}Aa@a&o+-RCv+5!@cIVI&^*Nsq3tnwN>LypH-dV6}DH48Y~S54>p90QSZY{NS1J4=nr)v@ z4)MuKFaOb2oW}Lrj+8>1ptX{9u)6a6CQzMZdGm|-p;p2hh;O-I+QNr)7YE#>5RlG9 z%NBC|wa!L{zzg7NQt!js$|Np(m4;8tf;#>~3)JY~FZ_R~!~mhs{J+w6giSW_63%ue z@N)x2mfZ}{rkmgOD|WKVWthL%=$8toJ-Iz2c(8@f!SPldVr9dRv>erC9z5zdt`6ru zZ5;MhS9*6>AhG*zGWPHBj5v27aVQ5TClNqNPal?_&jU34dNWw$2xmz188H9Qud#eO z`2AUPG_%wWW+5i8!UB!*IVs^t^G+7KnA_YWO)j9M<7au4^@z9stD^Ygl5fOvn)h>6 zkP)g{Wr^5(@%N-XQ_$0M%N7Hoovnv|#{H6obS1|$H*e;OI8HMy_ogb>95H`LPL8Oo zl$gT)l|EdgZyC*hz@z(?oo~h)EOj_6YaDdo4oIko@#3ms<+yc=X8B7%+G}~GEpB#p zg<|~z!0!q*=gN`yUFh+qtWPDotgJBz1E8`!8LR9hTRHk*cMZLmyuVjMMO{iqoNf>% zSR?Cy(T(o=+skjZU!>wM8bL`vTJZhQR%wXNwBpU6cQN$)p+zkuF_C`t@U@v4#NvUA zi-y1dc5`bUILlzpx9*bN+>?-ew-Qonr9E5aE49-t%XL^-S4M875_zvM7*w^l?$0DQ zGc%*4p}CVSO9doqMbcQYgaiBdv{Q&HU%VvND7@{2+%^p<0D-&fy0|iBmm9#SsJBcX zYc-nK;Q)3Gzd2r=2&k=eN*WR)W04+pgaFYyR?G9`TkW?Kr18%MZ zd3J=GgBnz2YxWeiB{mzl{iY9D=StZwo3M3vAOjMp!R!n!za-TUwf{vU_l zP!}9`synq7gV`VK!2eoz-yWSu&aI2g7um-tk2~9e`^?}N3OBJeQL+8dh#Bmc9Xp(I zJ%_0PgnkNvL{Qn7{Oi}RVKFhfO-)TsGrq@93erD($RHpjyfhsY@;@}>I5_Yst_Rru zBB;(_qcf_xM%a@=0Nh5Dpq*QjKCO(q-n)ABt?izZC?^Zp8jW8xc2&^B>7HHr!;Mkr zjHZhcP{d~F`t)@DFC*K*X2B-@`7spr}L4!}}~#Gb?^z&9>WTS6SI- zRjVi(;-OwczTN>9XLD?&#O%ixKQ1Ff(w_r=;@}}VRN)rG+oms^=o{wt$d}N=@@#s+ zI|~7)@=LOm_Eh$tOm}7*5x{w9x`S~->kNphO&ySkLCq9T zY-$a=urM`bo&Ke=inmLu*-)J_j7f+ApnPC1BI&mA%HrM!)5*@kxJE^ytRZ3&@ak19 z)al`RjvAv5(lGa69j#u#O~xWbzhIokw|@*80Ch)OQw9mGC|ysf?EYvF@~tV$^D-9i z4Z+)-obynP^zqZDze)LPGgR~dc?ej;G9LOuA?51*Y}kW!wzk&pX_aA6rE{KuCHig{ zW5rc%K00=O{A&DQmmEglBFLRwsUe zGy$ota^Ez4G2)e^>``ko{R@SciR+i`3=B$K!Aq*hYBK%83(a(|w~+%#-_WZQ<7L|! z>-7!Fpt5q2VO8;l!GVgNUeb_7o3pcX2qZ@;>unM1j59Q9IWq1MV{yLr%4qSeXp7V)@i8mP8#jVH_y0ceC6Dy> ztRBd55g#SBmq_)5v8J9}H#oi^-rg7wS4-e)2YHMdv(*xIdXNQeU0p#WigK2teb8_& z_Qydpkb}D?XCtog#V?Jt?}D@b#N`TRBqPya-6L|1zuFXcOL}K^7x=9cWK@)tE=w~| z9Y@~Ol>K?SY(dYp&Y^l=Z_LRQW}k(M3I<5HZ%y*b7)Rml1P~6A6B1V4YdfPo275Q6 zK7ZzS!gWnwK10o~icG49xONChzcaGqKfYnR3O)#9Qr0tXJN&(6*N_$VEyy! zW!`R%=RTVh7&OIvJs`g`0jd6&`;d^^a}w61;xSU z_A8u({jkkbgE9uL_I54B9VqpG{=8^j#sVB{&agtC^ROJay?Oy(O<%{NoIu_@N&&4@ zKGz@He|%t=`jc_)iTid1uNQEw?D*whYYT)XV4y^kWAY>NomR_f>%kxXw+L$9?=Sbv z*By&9{zjj;Sh*JPH>K@o8~-|EYHexB?S;oIwPyZ-I)>M`>ri7RRUGbz6PGUHFjf6E zN7vw---m1(VJ70nuOG%wdyX&Vw$WhJI6YvM@tbU7wg`a{Yz~P^-)xAvDMof}J@hm9 z`38N|qg8fHD;XmL9ZaTfJoEBfesR!}k2p4MDU-(5%06G?neB+~@d%Y_iihp2>3^nk(vhDQ_@xMNiKdFn zel>!%$ITuYulXmB_pZL1sa=SMq`|yUAs12@+Km>$AlH9Y{f=vXe!d8*1B!-qyr|#i z&)4CGl0PLC6{KXk)?iaM-{6n`p`JoOgQaOCUlTIh&f?amKtO%$6nz6)Hq*Ts2Gz;^$B$0Z)R1Kj~o;+oc-b>LMK!!vlq z_5g;;S+Zs*{^}onp^Dr)+KR+_}@(+>C$eJn4VCwJX#iClKsaC;k)l zNlP~fKBvC_cWy>4A=43ueGKX7w6s0!`i)H5b`B`-)}Hx_q+nn%yLi zyqU^f-Ui%#wH4c*Kt&Z{tUMl`?rL|btCsn}Isw;OXgQV!>-FKPA; zq=8}YZAY=NF=JL%R#!2dLa`S#<%d34IbHQ5VpxFzSnDR=RZrSt+{BXCL zUC?p5_Cal3-5jK8Qep8V7%e4cv5H#reUQ>$CKy)rGt!#>vmL5 zsr;#hok*OTeeBm^qp`4LQPQfa2cU=NxkMz3%=pe8#<{J#TVXO^&)PL%QV=66!>o%m zY=q#Pm(kq~o1MBm(h9%R6 z%N|YG8qt{Aj_$S7;N{w7jwDin4M-ewwR7mT&LZyN$H5FFcfQ|ZRg`H3)58lqZ_S~L z_R^yy#jslLWEWE%%P?SS>k7Uf;|1cWI&JljtmQB>dv5)|vUGSi-9g;@)vAVqLtga!_Fu5;N)+8WRGB zbzU^Op-K(Mfy|Iu@S`srnxVL)p~=SPzK0N6W@hH+q9OqZ6R76#+5`s&=bmA`yu6xv zdnq6cXFXPO=XdN^+xd7rfmxEqaWxs9R{~Q`rw5>5*iBt_C=#K+1*a_Krd|r8I6clb zE2zY6X{Qlq_V_^U#nA+jb4?Qb6Wl9oLa6AF;vOHbvhy3R5u}kVCERSHVMOkHFL3fZ zO<|qo<0sGm^f!n0uOaR7jcP_Hx5y=Y@trhm~eQZ@qx+PKQOr?%+#<0$Ief$u10tIcaPJ@`WtH77QKTgr-@= zLLjffj!xG)W`5%Ot3n*f`eC|FjX8MujsdK0ba3esTd(Wg<)=DRHb5?_O0kVyLT5!N zHUk0zW|!8ZtYk+6c7h{zx`+*+$AV7T53~`4TwGjj4!gHLs;BwY^@S{cy8B^jUgZ!A zE$FHz7dSKuJN)6}#{ftP>l!b3=MEvSS9y!0n`4NO<-LvX^+Kw;CgR{>F!Xd8|MjY} zA*U?leOYR{-{LG4e-(;Z;W}b|`anQ~m9^@1>$O)rwB~=8Oje|}huU{>(CLv!coN1F zDuJ{MIB3WMRF0AGKH_oP91or>!84pWl&xnx>|=g_)u-lsDv%=U%iw! z0+G(A2X9t$6v69<24yzEkmuZ>qkG+#p#W)ND-2POmSLP;?yI*gHfk&G*Y*9JK;#S; za=RM6^oE3h9WK1$8M?DqT7^bmv~J9N*?3Pchp0U$$7~340U!EI{HyIT6cI2$IVRCa z3oLg2yr6ngVp1CV?M{(yXF@|faXMjq!J2Q$naR#9*k}(7B|{MK{dk4ymW)CtgO>C?$zJ7=9?#>hd)o$ zHv6YX7E;AUpu!+!O&8X9*e7jZBXl&hF{Q5K{M0q1(vf9-)e;g~8#=09R$$gLe z{3>`kK8Ua^IHB;hoZ4=!_wiQnALS1S)$jl8qrNeRT4l&J1u)fAruDpAtS!nYm(WcK zWWB0Zw91-iTUS3yhr!-uof^sfrkTnF>doo)MT5y1CckWli43USGK+Pyq!8!9IP5X1 zW2rNt|L05YgSBB&NIe4-xo;bvAAuF9I9crO?rsMJ;r*JL9$qfQPrVd7xau=FIo+P zD0y{9)UAu;$s0*|3^6iej*1FEX^MMu-)GLQGyoqf#OE|6q^IB(y4^yiqF!@&gc~GaEDQn`3W~HN?P@#XwoCz zhfRJ0Nld+h`KkO`^7HoXWya-iTYiO<^fqCq2@6BwE;#jc%I^g^_Mt3g?fwhfUS^!t z)wi@~$o`R>oWAr}YZnX`+mM{$^@n_?aj%pum?E0EvLqJ>)XFsJEFvI6S4BHWU5_QrTdCywB~Ai0v~QxUF|3{ z3$jlnP5$d`eyE)C*V7wcLPqdvNJtt8E+9SLNjxZV z$x?|}Q${|z<+e3>MIOOMGk09v$^yxf8X+wFj=a&C^V59k8Y-@wP6lUS^l;~l^V3Ih zM-~JRmp{DD>z)XG#`zBZmqPvEyLZsw(U?`8cZ%f8U!Jdc0F#S(e~Dix5=Rg`wGZBA zEVZ>MI95(+|3-kf!-X<}>hq^+lei3u=%Y$H1wadS8``_sY>t;DmFZ0+wVP{sN!fe9 zY^9K&Pmu*+2N%HiYPXf)kn#M^o0qyJj^nom!VQ;)ATDzZ5Ul|z^qwp0uswVHSfj(% zWP7@9WjHTkoJi(((o<0NF2L{Wc8!1Q%TI@6809Mjs*94+N{EXS&{Ip$8O071z52bX z0S}r8D)-$N~I#9tA$$RDPB0f?=PBNhF&10n9VjFzqj!sle<|ZYS{V5Rx}) z3GmQri!4w8!cRGsV<>ry1N|0669`)|ihHBF!`F5dNPyp);FtRshj-V$bQH4U&k~*# zdSAYOwaXC1JVQw_JkdW2!ZuKo(>cajG;C|KiaL;p{AZC;Re9Lh-&860CY!QM2p&lw z&LyBxl&q|UVcS$_3#z$J@{}7yVp_LMUmbYS;k2Z+r<~VHa$}`^M86Es{*G z=LAZt_ityGv$>AbHAK%*WJ*Oa<-K94;s-wL#i#Trais8V%6-64Bn|7cB(LH6;OAFUR9J0IL5$?g-DI(Iyy#^|Fy!^vncA0| zrh32kMHc>qQjj%X=8JcwHopkQZOWiI#e)_r2@@JKfH820s?6w<`ue$O0si_bQG) zS(d^$KkZF_peN%7>bP_zU~(4+ zMBJ=D#%+>#b}oOpv3dAHBEG5P0Gely>kT#Tt{Qwa>2Zde2{dGYzPDS$sHfv<3B`&$ zszyU6%`4`CJtR0kcV6zX4%8lw#A&J{o@0XW3{r434GwCrUANZVKes3DihfIw=AQ6eE1)T@ zu}1AK7a$QW=Z_zMaJy}z%OJJQ8%QFpZJHJeR4XaQ zRgF@-Wz7KA7h; zZA2xnOhS7`gcd6{3Yaba%mS;!2VT#8pk#2 zM^@OeZz6}TLnB#fBWuL31uW1n^7H0jJofsbw!nYXSdRZHrx{lCOK2|fVrezza%uU& zX>-F5%H;2VTIxV2;gBIFn+jmD&8I|rhvAg#8 zL)kMscE$(*oUcek0|l*~e(Ra8%@C`C%=LH{O3Cva_BWWZGyRhL3v-BXv=f^d5})oW zG1F7=L%xZUa=julOfLLWVk){O1fDU!8fxC#HsZ$nsr_9Ig@Te2q`yURh|A#n2rnPS zF(VwyLn8MnsjqA?x#eXp3z_qIUY>={oNykzEUdXR^!#(Exhmn`MB~tZxq=S=uhh?c f{=ev7=WsBQTUVbcNrjOC(Dg+5xf1fBNx**t!aX4g delta 15136 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 diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 682c2fc70a757b77517c83e2ebd2774903ab93bd..37c4caa653c7d05c96f1de9a6584e105c91658db 100644 GIT binary patch literal 60959 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 CGj(kM literal 60105 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 From 68a13a6d60c83aabb2ec855b2574d04deac88d92 Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Wed, 30 Jul 2014 12:46:37 -0700 Subject: [PATCH 56/75] Vending machine href exploit fix Signed-off-by: Mloc-Argent Conflicts: code/game/machinery/vending.dm --- code/game/machinery/vending.dm | 48 +++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 1eb6096dc38..a5c4a631f02 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1,9 +1,14 @@ +#define CAT_NORMAL 0 +#define CAT_HIDDEN 1 +#define CAT_COIN 2 + /datum/data/vending_product var/product_name = "generic" var/product_path = null var/amount = 0 var/price = 0 var/display_color = "blue" + var/category = CAT_NORMAL @@ -118,10 +123,13 @@ R.display_color = pick("red","blue","green") if(hidden) + R.category=CAT_HIDDEN hidden_records += R else if(req_coin) + R.category=CAT_COIN coin_records += R else + R.category=CAT_NORMAL product_records += R // world << "Added: [R.product_name]] - [R.amount] - [R.product_path]" return @@ -251,6 +259,31 @@ /obj/machinery/vending/attack_ai(mob/user as mob) return attack_hand(user) +/obj/machinery/vending/proc/GetProductIndex(var/datum/data/vending_product/P) + var/list/plist + switch(P.category) + if(CAT_NORMAL) + plist=product_records + if(CAT_HIDDEN) + plist=hidden_records + if(CAT_COIN) + plist=coin_records + else + warning("UNKNOWN CATEGORY [P.category] IN TYPE [P.product_path] INSIDE [type]!") + return plist.Find(P) + +/obj/machinery/vending/proc/GetProductByID(var/pid, var/category) + switch(category) + if(CAT_NORMAL) + return product_records[pid] + if(CAT_HIDDEN) + return hidden_records[pid] + if(CAT_COIN) + return coin_records[pid] + else + warning("UNKNOWN PRODUCT: PID: [pid], CAT: [category] INSIDE [type]!") + return null + /obj/machinery/vending/attack_hand(mob/user as mob) if(stat & (BROKEN|NOPOWER)) return @@ -283,12 +316,11 @@ dat += "No product loaded!" else var/list/display_records = src.product_records + if(src.extended_inventory) - display_records = src.product_records + src.hidden_records + display_records += src.hidden_records if(src.coin) - display_records = src.product_records + src.coin_records - if(src.coin && src.extended_inventory) - display_records = src.product_records + src.hidden_records + src.coin_records + display_records += src.coin_records for (var/datum/data/vending_product/R in display_records) dat += "[R.product_name]:" @@ -296,7 +328,8 @@ if(R.price) dat += " (Price: [R.price])" if (R.amount > 0) - dat += " (Vend)" + var/idx=GetProductIndex(R) + dat += " (Vend)" else dat += " SOLD OUT" dat += "
" @@ -380,7 +413,10 @@ flick(src.icon_deny,src) return - var/datum/data/vending_product/R = locate(href_list["vend"]) + var/idx=text2num(href_list["vend"]) + var/cat=text2num(href_list["cat"]) + + var/datum/data/vending_product/R = GetProductByID(idx,cat) if (!R || !istype(R) || !R.product_path || R.amount <= 0) return From 84ceb30d27cd77ab3f1e552efc15a1d130d8d1e3 Mon Sep 17 00:00:00 2001 From: MrSnapwalk Date: Wed, 30 Jul 2014 20:57:20 -0500 Subject: [PATCH 57/75] Psychiatrist/Psychologist update. --- code/game/jobs/job/medical.dm | 22 ++++++++++++--------- code/modules/clothing/under/jobs/medsci.dm | 14 +++++++++++++ icons/mob/uniform.dmi | Bin 230103 -> 232626 bytes icons/obj/clothing/uniforms.dmi | Bin 52291 -> 52790 bytes 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 0eccf03f3c5..08e231741eb 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -211,21 +211,25 @@ minimal_access = list(access_medical, access_psychiatrist) alt_titles = list("Psychologist") - equip(var/mob/living/carbon/human/H) if(!H) return 0 H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) + if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) + if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) + if (H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Psychiatrist") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform) + if("Psychologist") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform) + else + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1 + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) \ No newline at end of file diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 17b85a02e3a..8a09e0ce57a 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -139,7 +139,21 @@ item_color = "scrubspurple" flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/psych + desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." + name = "psychiatrist's jumpsuit" + icon_state = "psych" + item_state = "w_suit" + item_color = "psych" + flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/psych/turtleneck + desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist." + name = "psychologist's turtleneck" + icon_state = "psychturtle" + item_state = "b_suit" + item_color = "psychturtle" + flags = FPRINT | TABLEPASS /* diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 311d8494de9b12118cff71fb221604e8bdf05748..eb5a4a1d002cb1e0dfc4e8fbd65c20c8f52de651 100644 GIT binary patch delta 11417 zcmY*<1z1&0*Y-wQ5JZ%emhSG5Mx<3zKtQ^s>ktys-Q5a@?l^RVbhmUKy5rxz-}AiR z|6SKP?3q0?d-j>N*1guc7t{V&6-ii;_>dJe6aWA!Xz@G&0BOhVgNB3T*KdaQX0{Gy zHr4>(k{XvhWWB(L*)yC}z&5vMP`-0fmQc^6%4Bb<*Oo~=_a~I8Ay+7T*$ew3SI!3y zVyK9CCprGIMe^G46rS*y-omYuve|@*5R}d&=pa3>+$9E{oF@KiF7a?GX z76kStO>Hg+Jsiipe_{c#vY5w{-c)ig4P!kb*J1b#w_<~34siNmdBuh5f8~*p5@;zl zl_QWlkwtTj0qU7riVK}lbBJEV|L}b=5gPeSi!i!DJ==_Do!tCQp5JCxckJmLY5zBT zmT-kq4k-$zdH1sVZ)IcFYyu*4rY`Spy77dm?v)ZutP9S?seGy-=Rn#-qtLfrEnGhg zgRFTsQ>i@PQ+I6F_fXH#x04qi11IJcr+TX9r(S=s)^?EP&5-AEDuj;RE!}#lKv+)s zu9>(E_m;jQf}ODIKuXF3Ab1+g-Q;x>ut!Q zHs2RkZ3j5fM0vh}_@Fd*A6l`ZJSz`d)V`|8=ll`6rmK+u14t6KPv{%DMbl$IiW98@_UM$1m8&BW1;I#1HQyG3b;kuWSJU3GjUC4FS+ z+2XLxY2Ux>fp;&~`o=y4-y^0sb4t4qSv<77yfBHEsEKqDqQC#iAlE*QQr4>X4Nkg~ zQFIWoYexjZtnCE7A(@+{c9<@`z zb#l&QTqaD<4dJIIxiJ3ECOJGi=kH!rH}@AJ*EbW&&BZ+()5X*=mo~w`Lr+$}5_e?5 zG1n}8MAZm*&lrxrOOeeV2Rq~aq_C)Fs77Za&{LUebci!P+PFMvv;}!!PR}F z6D{27@_ULL_!Jod{649Dii~Kg3)vzik&1)g+EDK}kS^{t>4}NIX$9JWwjlEEs31NT zl)xw)YOE4La`BSiUG*#~qq2AAenvi5oWdN8_ zy$i5EaE4z&kpOpWQpx+>()vZ*>W3vi)Ho+cVx@b=w4QLL4;vJw)=;*tj<84@ueoupY2)niRFyQ)QviBQ3 z1KJ;JJa0Ku@f8Emk1`agC8+7PQd@cq-57{-I_(a7E`=i{C3V#Y(>a9qNndKKe)&R? z|N5aX(&Z6biJyjq&lVV)+hS2Nw4~y z+g-D)Nir5{(ziO!C3>i&8H)@GDSTMZwzOBB8necC*eHc(ZEjnm$k;YxjI4R3H6D_Y zfSL;@kJCk=yw4U8&Jv!*B+c1G4lm5#)w9plH&yEHqqV#~1ODsF~)xq^;hXXXo1lOGHP3Xtj1WqO#aQy0Q z00p=cL;$V`@7+b1;;T3weX4xBUNKB;&M#T_h%Q~ReqCnuaz~xGbs>0LEi(S)s^;_% zX{4u%Zhr7;>3Yasj#1(_xT0O+^eFbzL7EHzkOOj(Z$B8ST3RwW9nAR`l{7r9U9iVs z2$LSHgv=g2+`g=vo1Ibow`RWpnpmy`QuBYpdwLKAJGLDYb6%k4B-@g?nrl;2~ zrnKvtv3rasbA&i4UbU5y9%{wfh=dlh?~*W9?l?ocB(UM$6WQ)aI7QQT7u!#Fru<1tx&i+JY;# zNRfqnO-y#w0B;f`FL6CbK?lyh3-r!oaSD+TsKEd^<+Y;KSE{` zVpBs|67F2Lw{30VNI?-15>+B7qXNQ%n=~6Dre8r1^>;~VD3e3|=WTm_RL6sRj+N?f zl4ku^?52Fn!QjbAN=Z?$uqd)GVFe;CE-nUzg>?m;8NC*9do9GV8cuEZ0(jH4mlffK zjv78FV`TIOAQy#~M)E9`_7OwKnIHHqbq%TuCCkWi7m4IwN)wAy7hYVl!DtAc7s_o8Qj?^`86d0X7d^#=NDu*9wY#c zc0*UveEzOib@l*G@Kq^j@PIm<#yJnpM0AtQl(vrVqE1FxouRc5EykIP0zDpE_SH)d z4JKwyHn~xQG~k)ZobA~FE&=4g^pNoCuOcSm4ct{?p#gM7S3K+N3lCi{=)XzES6Ja& zd7;ec?|PE`=H~LBK)cy3T2tOT8B_1ciU@hD`Yw8G%Gk_rVD-BQOF$9AMVOBnN-*^V zyQM=5^;aV!a$X28etCJhM!f+tspmfX>&7*#b=ZB40gP5D9W$iMcXxL;GTFBJ`V;5* z5b;sup$O}#6;H|+j-)z=CuM`YKxcP9#K!qx4mqap`{u?#RE-_g^ix0#hX3ATf2O?u zk-R&eSzFw?9iyfsN>>*zQ1n3!=o799oZ2^=*l zghvvAhQ+z!ZP}i5jbeoOTSAWnb?>`!4?^#BX&n0S@|Abz5~8&4Tb`^Yf&ZwcTL0#L2z(;*?=~PK(xYz2H^RGsTP~n}G414}-ipJ>LU$GP+s?$N{?PA%|*?RoG?w z+A$qu_%n-o@0$LmASK5Od?C`H>>vo~{ZmmgNZ84^GlXu4jRDQ&UreL|lh=`%s;-Tm9k7&CfRgm71-4clBCt zuRg&y#Ch+HVKJ=7V<5jV%Ph{IJta9={8!KWg7y6mb5Aia*ef#uO-;>2(1l&(Aw`Cn zxoI^-M{Q(5*u|k_?-3)zoVB!w4nJ3+o#L@{?v*yR%d4*bRpTaq3_EzXl&rkG8sy#a ztvdweDQ8RLWrn0e&NI!9aX^gSW8Y-zhzrEVGWSQh1rR4oE6$X+Z;hJ~?QTL}afj7J z?xJSrkD`e2Eb(`|C^u?*6WZd$74GHgn~?j2b6Fnmz4-4k$-I{tT`$d_BU9$G+?|y3{k95dOK!JqiBpnL=3z zPw9+!-&CE|7_@fjY2|F_&5c{JPWcm_lxLudo^dQ!nhZ<7d-qgTRh7+VNvPERSbmZ$ z=$eI|9{ndQIVcG2!^e+VzkWUK2`7;-F`*3(4kiz#9OJQ;to+54jz8!D8BSzJbZge7 zzu!XUO!FCZ)^5aw(1)P_xnGTPYA)V9TwVT^3q#T$2bPpJz0Q?`a@+9(UY8W+L3h552q`MN(3l^7xjawBks9Qt1x%6vYpn#7V`B z)qShwc%?%rb3g6z)11IQB_;}PMc~Hw_oB~nqN0MPc1A~6z3JIs9Ut3ixG3PT@{8i> zsv%8LfVahrVzI^!vDur=x4iX=mMb$O=B!_6X=%mk^489W;Xro!Y#SG4xk>`(52SO? zFnLdh4EVIv0y|_P3PGsky~py}XA-LA1Up9a}p zZQH$u{#>)akFLZW;<=VjpJYhM9L93VhfNoPW8;i+B z#b}`~{e|ty95Tp6w|&`6$iyASvkw*UA2%tUX@1N#Xpc(_DEM;u5X0x$9o+n}K-?N7 z$qS;qcgnTuUZhA*xNXZ}prP6VAIi(*aRZU!^yH*zke4%0Ya7+K0G9Eok)-%e8~@eh zIL?>twPN`meU8>heQ%a`=^|2O_-h}-TK!^UU;aJ+rjwI_vRO+P&vBZUuU@SV?@iHf zy6>j&u3R0j&D7eEB@i$$GTPnMEucS+xXOc}{HMoz-)O=v^@XOywmGVV+v}>e~;HSS(QO_|mZQ6w;EWpH^?y9X$Hi@jI`K z6xS!-dro@mnuw9b$5e9{78R*=y8*+9z{2Ox+fE`rQ=bOBJ5f6d4`_UnbR-7l-(ixJ zyxU)_Olf>r5^fxwYIAEKMJG@%R8G)A{o{u%g4V$LQgd7EhE_3Ec~GRoy!uZkI(#3p z*7awz?bjMwijOu zx+;bTCvJ$E?{6>Ntt#)gh?2#l{jqXwKzAseTJ5hT`rO>g*!LL?6(&uNF`;dKL3kT) zjdB^cbqbf$zDC!?QmqGnJd5@wBo5ui+`N5)*T%bGGEA>o?THxAfMHK~^EwmPfEVZe z?ymX!J3|W6-*o4k%N9z_*`XMv#l`FK$jr6KOIy1o9J|`9Fr3ViY5!c4Ce=|EawNUD(^iGp z)#Za0*nv|v3M1&1s`NLSV>9Qe}<5(&$qheEwt1QggC$;4I`mT(`DFg%$z=d73_f1Nn2!ux| z78u_f)M!V+;A;E?4U?TUYksXQoi#Y}bW}@$R@}A$vuw_A)%Jl=WS%etoLslJtfNg1 zDg*Hr)G5`XGOIqUl+bY2gr`J9_it_4rhuu@Uw z==J!kE-x+~sGnG~5w0FyXFNCe)LU3w)GZy7FA%-zUj6jI8bHcZQ(sm#!ip=hFYJ0X zT^aNE{Dd7c!n8M}>+HDX=e2peJV<=Bl$O#QZn$;aYH)nGy%pz5iUwmp&NRMu%bNAT z0|oh&AXBkGA`q$&!#)DSuU2^5CtMOkv4rt(<5SJ|e5dY*H@Ls=bWM3O&WRs?r~EZl z&+0$l-oBKoTeP0Bq%3-4T3^#cFk-Z&>EKgSzr${3|wdw|Av` zD=AO?P1N3%pTqzIvaxAQbWD^mlT4pbPd8B{*kI4uHFVvcKgiY#m>)j~SY){&AvOmy zM=a)|mm=36lWa{j^F}u8?T2bE{R`&9SQ5q=^L=35-k2_XB*U`44iUK7#lb{|Z48;2nHBzu9(b*R z(gZqHu!k?q8hhijk_Qj5;rGzeN{;qy(U1}=)F%SX{HVcLHx0{=+ck?L5LOz)$;7^5 z2RmpQ{0UA4ql1?HMm!J5%~!u^?o+z^+7M7t_;^B_XA z;HP(ZxW@+(wW(r7%dlL-cBK_zeQS%+?)W=1Z~pks%Ts(3LvM&;fnQ(j3NI%w>%Ew1 z78xdUm@Oao?3H28C|b^F&}v5@oUhKhL6gvGSsi#(z_gP|^c&Fs)OZn$oAdis<-i^dS81Iebbk zV8+zQ1bh6wbN|GXTv{UAC3BhG#+9i(JWHN~_IB~A>gv@cclgH|r8I%bE!V7(%b^$C%SXQ)y4;2ZNx==jz2mQkMR>tFZZ)a zcI9>;6P)Rl=dBV_WtL807*|nIakS;Q7yF)1I~%iM1d4okD*y&%=Z_*mASH0YcqqS7 zKPS4Ta!2+x{y0NQvFFR{m;^|1sf>yWPOAx;hw|TKc>8*~v9D6ot>j`@gD3xciZ1zD zK^3w_MoNOnK)dtI+;f}v(ewO!TQ(kIst}Xemb!bD)rQLqjF27mp3J3-F!l+8u#;ua za{_&pmtVMu>Z!j^e4Sh!QD3EJNFmM&mZ1YLQoc@4igM3sM6?VPnWbf%ukF-!W4U;F z-IJ^UKF8fynvIcN0uM4RoZba(=qFGMkOfjPtgNgMDoL6W#0-&${GikY!y5ObS~!+J zN*8ZgMI>zK(DU;q1=ht%k0H-w&}$kS=iyneU>2UY@wpaKnbF^%QxqnJoU4|vxs<|5 z1UI=?=cbY%ZJ;sKhk9alg2=g2+o}HUT`&iIO1$RLPzo<&oN4ISDC%}_C{q)2^?TBx zi{TY*d()WyChyF}MsbTpU!cfdsfGIi{`f^$7(Tv7cjK+~Y5o9Y_xMI!?S?!I6UN;MWUid9LI4A>qn@EaK$XV=#g zf*G00949Ad+E$Y~#^T$Xc}Q;x+6tzqCqQ?7&;kIYjY_bsOVLs1(5ye5FgPgvFKh&niHT_6o~&5f z1Wua!FIp$`} zG+%N6sNS;jUI84~#bR+$8S?e#d~?K{X;++{ywIc4o!S96Cz(@j2-Q<7dK?=rH^bhTb>wIxI}Z8-5Cm_L8)~l97Hoku zEMG{gD8kWkq2G%X%Y*hYXf(OQ6Bi^!b>b?rI7GAoy_npvOAIESAkQ>*7Y^`inSJfGNRc~R#&2?#78+k-&Tm3(WEHwt z`%4lY%8eobK#KV38@%zkY71`HM;rccet(~sYle(FVq_*W8t}wSedjF#;HBc!Y$UtE zOT4vBh^sHVea|?JOin|OkW_zS;(KYY0lPUov^M%>g0NML-TQTkY1{*{Mx_cltTv22 zudUX20_7eHAC&8e4E|zTS+)AmEt5MPAj(=cNV)}UUNF+_MrBz)BTFcrsb?sZ5;VRXf!$qObeF6(SFAT4Z2jS-Z41GRq0$3QyE-rh>16RrKX%sf!JgxNtG37^`Cw|;eTze7%_DgIf zsLGDC5%wOGOZU7Gxw890v9sS;d@DZ#FEDrA1rVz$;l)_kzymsSpm8?T6NQ~rqYbC>ME|TlUp&!79WH;juhJG8rAiO=OhWa2lIXk-(F6E{l zk67V7NQgNNdMeR99I1~TV7a<-dg_F#GeLHbXPR6d8#sKJhvQ?Tzw^iwTiZmgm4`T$ ztSuwxUs%@n4;YlU8kCb$QzL_vDzLuM(t0geHn5>8pf_Y($$=gP?$O3S0;^%A7k%c1B7N6CGt}hI zPCr~M!cxz33^8@xwDcN@miYq216$+TmD!dtp$17pET}u^t)DThQGl;jM~!$3p=U_0 zqBaHwe@4FG$64Oaau$q!!NR%mJKP@KaR9MfHh7w9w2qWz*c_#J<9}x6fVU}ISd=3XtysbE`8P4NQfwV3 zaXC|A646yg%P`Mm=O=)DPY29%PO<(W-SdJ z)RyQ~`ZsoVcM6FetIF{JF+*A2h)V)wg_f3ft((}U^LLt{imfB*-~8oi$?p!ZYqu80 zOUch)567=ZvQFkF#696u250RWWmMj?s_HU~fIk@Qr@^pG=Z7W6ry z`ZnWh_6g_+x(;TRdbXN{1fk7V4h%#}A%2d?Mr1+5c>)u?kYC4UfQ0&h3E3L9g8<3d z4OXfRF$VOuV_kDPLws|2W6*uK@p^PM%g@0`Rjdz3Dg z;%DhS!}l*g499Zi8f;qbdA5mUV`vnJjv~i=A~P~di+=t@|CN!EG5nG2h-cNyv=Z&b z6LY_oYild3j}?o0kK_s7GTnLfns!T)-FX!58dxA4B@QXP)0URTqs(zwp!G3)le^Kb z&$imRgC_>@+rvU~XH`tKe(SXKW(JiX#jEx6gpiALCsMcOds2W*{?|I#)4N zbU&1CrSj5e@4EZB=~a|W0^KQ`w%Z2JFAX5u>c_L(N4syx5(3!XR6c>!ikrUD4WhCK_H-{)I2DC=J<9)0%c zN&%}gUe%vVZhW{PCQVAGmygcfx8I>NG-kqBspLV7_&mp2dR9&PNpRR)mA67So}z%j z>!1j-y9HF=y2G*1&YI#yNPpcHs8a1qg3>wbaTopj?2}_o*sqW zZ=ZuYgY@>!rOpUZ@qgNX|4J^KirS`-gVE~$d`iSj?_c`X`LaX*G&(WxVGD_8&XMA+-H>IcQ@5$I5?p`p+I&2u7{w{~Z)Z?DfX|@8EZoNCevdZjAPf z{QrM1BC-FoBe^*_YKn*^!tz?<(v?yXs=mnv9v;t@~1$A?fHf#n7*$m#hs;{mn% zg&2nCGT+1{d1~UXjM%C=r*Ty37nD>RVTlCf+^U2q0^}nym?sAic!0TD@p}o$|dlZd}htj~Tsgu;yGIqWv zEGA+N;+>5RgoS}jbH<67Va~#Dm1S0}9Gv`0)_29HKD8x!n2}+%JNqFo;O^LGiNDv4 z^sj7Njdr=0fBrnVI9e66x7YvHFCjXj6n^7nx4zlFS1^SXAhyO=pc*TytD^!MRi-!( z4KD1#AtA@pT_NSBqm+PhIC>r-H+X&m)n3BjL|gNXe%;C)zq57>zH0kCkA<6aouM+Y zN5{%4V`fHgJecT1Tc98THa~5yA4PxANQ&_r8&ehHw<7vG1~y|85>T626M}dAUZBrH zW_^ZAb>YkT;|Q~}6r8^Jlh~3$=d8hWZZ@cN7})$UA{hI>8qaRDGfi;R&>-;P!v`=` zblau?D$s}f`^8mMqU>J_8n^i(XNBXwdiAQex3?9{fBZ-*o#DD*Ou=#k^SE4emX(!l z{nHhK00`FD^!!bx_reDueQmMyYRW<;;V*iempyybW0Uk$Vtc%9Yd9rUN+h>SH6O~i zQM1c&f6ReevI#`)6(1Z3Z2-X3g;STu zZTEBY_hhlMy~C)3n@e^V-p<$6HuO%0IUXKf57Z`E9Z<68)t|};T-Mz0eGI7n+1;Rb z)CB!zso5O?kf*}K@OI`&1vk%1G;n$?2v7Kaiuqyf%I>bmAERH=fx_@mhd(7X zDr?A9LP7NT?)y7s@t0;o{~{Qs9gBHuoTGoG`+UAqM)>}|W$9W)WhFcKCi}}RqT8;1 z6f=8;@*|!DqY^*i12N(gY6wf7t1^+>(c+mH;fcz#rbhPtBX`>?PL!AU1( z7UlI+rWF3EMRu=>LnV(?>OP|$C_U`ea_W_PgJ5`~X_3Y(fzQ%u#_HB1QJMJ<(sV}V zE$?|_BTI)7A%kV0i{fR8<_y~4dUc#|jx(`j9|H{fd#=_5sK~$Q+etlAsyPB7tgfyu zghG*l+=7C&>6QoX{{DX3hr8<~Kj}a&5mt~<6#k&Do&$rC*4NkTigI#rD66UY&Nu&jiiQY3jzVxTt$`Ip`y+u5Qz5s_oZH$_d*8B%YF}?vj5mxXQaLuijc4{3GcE;rK&Fs zv?C_X3MB8;IAiMVrbJGY@ali#U7EkQ2DZqnJw$sp}2xvJj*aR&hnSZBIwAcDK3rll=Z;b!QD1oifYkexwX(0T9Iw;m=g-@ZQod%LMu zRIY&ZQ48>HDxj6``*mNOMr&a7Bl7Z*hVkpB>&)&erR*L=p*A?_e__D|#i$iQ9}MYq z=PglAqNrr-c~<~^YxDN%>CdQQ>CeM=AlF^^3)LCDn#@9uZqO>MQaJz&rQly->W~8A z-bHVyqPwz2rE%EVAm_0D@t-cRn&<7L(uvDoRNwU+hY&rj#F@mpb{;uRv2<=z?+Gd4 zPYFrM-0Yq|^|oz@5j{g68y|j9i7$=E@L8qp?AV=8q1^{gZ3j*WkspSuDJUsl;Ip{cuKJ<^v0H<&r<)UNdKl)Fi;K*9 zEqJpwZ~~p}!^38{b*;{T; zrBW1Rjq6oER2&i#Xc7;VfB;b-HYp}S43DgEfRZANLt>Dae|+&-L{FGn1ccc| z$l66{F?k1-<~44_xY6Gz_wVP}(6E(yTatCMC%jKS!vDvx(}B2-hsVs>KamB*mptg< zG)F7IvT${K+k40uBLy~O?3a^6WqI@OxjmPBBrHR~{$yS9kD zisWIw+7f+4hlr7eKsS&qLnqC!pZ?X{+9faT9}>h*!i1-+h3uW3Gk;^z%L$opWAyE7HlP-jl`AfNews002}+QmFv|-kh(lp@+gN zcN@3YE*`I)odCc)D>-8@X7(v*&#<_r728z)MuFI|K&o}HHF@6?+A0N;ta!!Hq@L~C zz4n|zr@$)EMg#XsVeDS3!iCMzSt^**Dy(UN(iC}0!#!Akadip%5~^se4mFR)HXoFe z7M7*Y|mj1G-b_7gUkLlWf zzKMzOKpKrC@FlFqQyjA6xEUdhwD-uAgxR>L@E?7pd%#d7z~))1F!rWbc3kB-;h=mp z=X$kd(mIbRW2X752sy)=GfVe%%g=L`9{yD$`$@;q+`dW}6wmOi#`b$9==-;Eo)y0J zS&OS?C!pz+t35$SJjY)@V?InXzRVB)wo^n_SesoO`?|J7?CWgJMx2vWD&nt}$>)pa zv+MjD(>2#aBm2&T4Q7G|{JJ-%mz4JwKJfm>WR2L{VjYUJ5%NMs9^0$Dq@Pk19I}}9 zHl0y)Uyyn@n6CADyB^q+>ALXy){E)?Y^VB9VJ~)a|WEsM4a(myg+sA zY1=pX_a-!TgWz!RNO`fYgI{NRK1X>(RhG_UlRS8UrnOd$;mZ*68u6%!Va0B09#mu$ zVr3~ZYVj8axrw%0O=`X1!n_MqU8UwdXOEXHsnsG0p|!Em7IYT!mTUmqr%O6j{ybKU z`yHqHP-3T-?XJk-2N-|F($^Q=QpeLZ^vyb9%T&`RslON-Ib+|%^$`B_VP5(rA2U7j z-(dImN?F2BeFpm%s$U-UZS-bp=izcr3Mbw*eO39ga5L~qyMq08cphB`(vfPM9eyo(p>GhByi^2T*uu6b?!;q5W=yo!jy3f%ZPK}xD>KRq95o&qWHTQ62bG3B2JOO1!gD$Jp zUKdLjrjqG{Z#3&el&{u?8th_XvfSU_PHEDtrz8PD z4Yz-2&gJ1;Y$V{axS?Iuv~OTLrSKhu+Ru1kHicm2k^X2-tNJ@tW1^_=}Og+Ifs| zS6XIiz)Qg#ih@E7_xxRyPdpDQPdCnr6j43>SF=U9d*MnS@Ajwi_M{TvBCE=SFMZW( z>e~MNsBxSDfPRU{^sX|q+C=1yQIWxztAnR7o~(?IkC>Bq+VGWNAz2egN=k}#_rc8f z$YJbx)Yx)7tFl&lUC?WZM>A9501MF^!uXnC;_)}65-3DJ1^~*b%>!Hn^+-|sjfKBS zQ(TnI=DfgSa&QX+tplXJS!o~Cje=5U>voo@1YV{gGGxq4P>MI-}RmqTyd zv1Giw6cWwU;k%rUZ?;@qn27eRCwV6WNDSLtrA5j1C~tu>2dQ)eJfyW4?z@2L+}!z1 z>yr(z?zgR}Q$wYDw{`cbwTGxFdcr%cQ+8l4gqR9FJspOt9GidIL9Siy!TF=dD9y6I zWo$EK(Dq}j5f^nDoV@^=LV$GCu;tQKTZ*$iLB)7vStlZOD>VYdR;D9b5%Ob-G&M~J zVgbd6>9CK8EF7^FuJhX17=Hex&edU*AjqsvV^)V=`xN`Sh3-*t-D}$sqX@( zyK^Lfii(QNtL58HjZR;B-412RMt)PyJ|4;tCIKv;W*+>qL-7kP{d0MGdinz!6t`)| zT&tf=?<#0#$3aB}KW>~$0CA4|2yd_)UsSNzv187G<3FxIFbB>m6{WqF?lrvE(@qkH z|8mghA%GB~2d-61ktzZM>qj^MnZeEr34;96u}uKz48u)0AOK=}I^fb0F)oJo=H#ve zvpNsxqm_WsJrfxL|IVvEn2iUnarNfEnnDO?R{EuGA`Ig*g7o!%^jA4<9t)jGL&W-HQ8^r0nLk! z4yDI4CgFMJSi*pS0JMEItu#Ask7hPbB)rZpSpzTdSoe-lAA`#$BtIn;6%L??k0mR| zaOz0`PA4YT;8;D%rh7GZ=}4Mf-A%wBDJ|632Zwv#U^bU&`)T353^41eh50ICO{vQ_ zVK~lB=!pKB{s{VZmw+G$iG45gdy0=cRsdjRCUSY%8X!uKvdn%rY$0uyr0EZg(&+Fg zk^t}_Gp82f&Je02bxW%s7T+u$Q?77NMR;9Jyah`jkN-3y>C#gx(B>8(M*m)GE8L^! z_Zh-lqdQM-q>fOCe0kG{hX;)N`^z2BGT(S5r%6hMGB@H+vEUYqkol7_mF)cQeS8?* z%=Dr405Qs^%(2b1j@`iFmG?@iKgNO39vLClu6z&DiFaq6#l>8!>+AAG6U(W3dZ72g z=TsL=ymA}_$#H*8loXR!Bh#HbcOo)e>Mv3RkLG;5b3lPkf0Gh@+Gr*AM1bw+4q#kz zeCf3}-^@oJT~=a#N6k}s>^30NK&{}g+!=oCOkp)s;~0^-pRlvtIrYTz{My0;;Uq<( zHfad7p>j03sWPttAoGOsHiBDAEVdkcr`c0&#eF9Y{$kM}c=WRoHRf zxBBaNVZSF?=ws(Gy*e&cAb5suPJ8D0cx!w60EYUTw-QvDm`=>$%J%3$MFmdEf4%yw z?CFwVt!|h?BwS_Vq+2_4--`Q({&{`8IC6^=VBzNG{&d9{XS+B$`iV|Pe~kh7Ju`DT z_*NihoVOdI$hh=$Fq|$i(h6-)aTO|(mKsFT?=zA+ah&Pg=TTczn#bPM+-#;TY5h#m znV0DaH+R=;0_E!Js-=@Eac?T6j6i`6mkmNG<^9csma%jO0SldTWLHp63b%aM=x1-g zF?Rigq*@V2xqsH1Ujl|))W#9gv)h6?VHb1Y23H18LmVhLbPE{Yj|bhmjnEz=@2^9L ztZ%Xo9=zIoz7cBI%<7sq7+w&`qjwrLxa;JsUnJ}_WG~~AO8`X^5h*FuR~6rG^Q4m44d>k9Um&68 z3jFov!>>0=ii(OV_2<=Fv7P>V%G%7xP8SNy(I5Z}E4uURFSw9c8YTfj!PfR z<)kSY^v#I-+HglNPy+$c7iX=B^`&YOM+OXuq4;Ts@#Ow8_fw@46oprMUb0XS zwY~Jlg^cj!{(%9J@Fm?bA4X8xlc3AO)} z4=h19`J@{}sqKXYNAMwwX$EAjpVI6cqT#NB={3EhUNc@^@4U1SQ6=;-Mst8h@odQZiiV!7)*iQ`oae=nmBJ zrH+mb(;@qPcr*m|Ra{vRUH;PF2~$=&Sj{5h3sD2f?b~t#BK)82H{T8iKtwN zppwR=@8-dl^`>IxzlKVwlS`=@ODTR-BQ8|3dR>YBRE?Z zpRt#|H`I|X2->;qFUqp>k55i65751)yos6GjX<=hsi|q3nDi^4wDk2q+<&6qW?!wt zssTSQfhRw5!sl~cR!AGP-8k_b$PkXq*oR=so{^oMz47-iDV?8nC2aFGrw}f(dc6W| zuw4H!`VUR1=N)jKN`39!U}pwBk_8EQd_n6 zfem+?hr^JDLr+DPt}c$Mrf|LQ0~Gt0BkR{p4Gn);DPecsqZq`j-A*_e5TueV#*F8- z((c!|3x7jDh7Nd?MAN3~^s0SlJ=pw$QVM{Fb9t~`cXunq`_)s_H5eqU zr}y8JCpO<-K(h(82RsAc{XIfxJtScQRk1~T#)NcN5Hfyaxu*;gtA}~&ma0@v)6;&t ze0;ls&Wp1-^j3Cgd}y?xf^ljW?hQ-i|9rywV2YjH&{;^vS?FsD4u|g{?GKw5LI0?u zGn}fhFu?7^UP9Z5E`iwD*|}%n?fQf1`)$KghBz_;{Zt$pO>102eMqY74V%i5XvxVXU4Q60k){S4yP^I>dp)hvtY#Khg69WU`j z(&>>`yzZ;)usv6?{Z3nHU(*;XNsHG3pL3*t8}?o%!bQ{LETjELgAvLRkvPOqeqvsl zn&Aw&(XZM3uvwxIsm??K5+?EOH%kjdow(N7qpr?~Pk7obwe(n-Wn;T3saJ&Eiz`yx zJv>KR_S76{Tncw?QDTaiC@HBnX#vqMNk2v=J{xkLmj5&!vUd!1f4+&<+>MPre)S{| z7Q;fcvEvC5;3vD6XjftNI@2eTthg2$oQlq+3^Ct%{KW>g6=>r@oYvC%5OHvq3j=+W zC*@ETI05Y}Ef+P6KBy7{&j)y=n&e+hNMg@m2Pe$jyAC{7-$4s^;fa> zY~j5pA>Qkcjr0_h^7U}&J?h;yw5$!)IIjFD5gW3fW(cCIFn5M*n?smWgKKaOC1ROV z<&&8a`7mN(zp_7UUpAJ`8mubKeI zVPSa%BRAMtfih#8WrgsTo)zK|c9GHG!ROMq48nNo3rBD@zT?!_f7((mxF+m*>>y^1 z7y|_b_@0Wy+U7uU0wQ{C!N(vENkFX$ZPF6iDgL4tNpMb)5L637!|QoL{SKz0;y+hX zykl=JweT))?O!%M;Ez6*RC?Lg$n0aZDoUnbbYEh)W8|8F?LdM)i~@mqws^@POH+;<18jsys==K{Lo*8nb6t!rmUaORi zl5;dM&RdtG|6Wc!zLgY&5PJIbLzZBXYUoIY#ODF4^UKvg84sm+{j-wA?(l{V_Y2?o z*;3SQuuu(+iW~)N7nPJ9dcp)7KL*U56u^j4J!*nGhY`SQSy9jDX!)pGE@~90d_ie= zVZRarmK4$@5o0|k$K+dfjZZoZ#A}U9rYXD`7O-10R$V1{5T8H?6!%5lR#jA}O&$Mw ziN`RC1?A^Iq^D8q^|Fx|esPqVl}|W)#793yP%;3`J0%n-7f`n`cIq+qi>zW7+(bcs6ifQ?G{j ziw9|g4T>h}ja60m$U<>rB~NK3rQYt&#+AO1la|<4^BaD(Qmp?FWuha1$gEs%v3Qao z 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 delta 15964 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 From 1e90a5b21822a3df6368ca4c8e70cf3c0c4a15ef Mon Sep 17 00:00:00 2001 From: Jarcolr Date: Thu, 31 Jul 2014 10:44:34 +0300 Subject: [PATCH 58/75] Adds Raptor1628's hazard hardsuit http://baystation12.net/forums/viewtopic.php?f=33&t=10888 --- code/modules/customitems/item_defines.dm | 15 +++++++++++++-- icons/mob/head.dmi | Bin 114478 -> 116672 bytes icons/mob/suit.dmi | Bin 239329 -> 241457 bytes icons/obj/clothing/hats.dmi | Bin 59313 -> 60351 bytes icons/obj/clothing/suits.dmi | Bin 86341 -> 87206 bytes 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 6808b7b0ea5..605bff18642 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -134,7 +134,6 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "margaret_flask" - /obj/item/weapon/pen/fluff/fancypen //orangebottle: Lillian Levett, Lilliana Reade name = "fancy pen" desc = "A fancy metal pen. It uses blue ink. An inscription on one side reads,\"L.L. - L.R.\"" @@ -579,7 +578,7 @@ suit_icon = "salvage_suit" helmet_color = "salvage" -///////// Salvage crew hardsuit - Callum Leamas - roaper /////////////// +///////// Weathered hardsuit - Callum Leamas - roaper /////////////// /obj/item/device/kit/suit/fluff/roaper name = "Callum's hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit." @@ -591,6 +590,18 @@ suit_icon = "rig-roaper" helmet_color = "roaper" +///////// Hazard Hardsuit - Ronan Harper - Raptor1628 ////////////////// +/obj/item/device/kit/suit/fluff/ronan_harper + name = "hazard hardsuit modification kit" + desc = "A kit containing all the needed tools and parts to modify a hardsuit." + + new_name = "hazard" + new_suit_desc = "An older model of armored NT Hardsuit emblazoned in security colors. The crest of the NAS Rhodes, a copper rose, is painted onto the chestplate." + new_helmet_desc = "An older NT Hardsuit Helmet with built-in atmospheric filters. The name HARPER has been printed on the back." + helmet_icon = "rig0-hazardhardsuit" + suit_icon = "rig-hazardhardsuit" + helmet_color = "hazardhardsuit" + //////// Meat Hook - Korom Bhararaya - Matthew951 //////////////////////// /obj/item/device/kit/weapon/fluff/hook diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index b2ef65da38514d0f2ab3deca48f6718bf06cf36f..f36fb8f9b8e88ada8e54956e0d9501bb07962c08 100644 GIT binary patch delta 19992 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 delta 17781 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 YL)jdXWP_Zi;r`^8#k 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 delta 26372 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 IR^Ru(0FXvX9{>OV diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 901928b4145bd83ecc9cc33635a2cfb8c932ac68..2b408c6d94a80ed3d0432cf68caffb45897621f6 100644 GIT binary patch delta 5886 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 W>Dp|Fz%0RdxYU%i-&87EefTegh;9i0 delta 4840 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

tUkgy<;tcWZxgX|cXZso@pN$id zoCI-B3-LT&tcmsLzjefjeD?8@8Vu+^`KixN9dK=ix(C8LM4g5hbgl_2B=0;cM||F9 z5)Xia9UYx6zsgA$ti?vN%Gq8)iUrGsD<(7yWr_It_ZWhE}jhn1kzAm`S;91!)SH=!!c1y}@Z*OM-r}uouDRQ!6 zV*~~JhKGsD5I?c~arJ3jl=wYO!u#^2RK6+=0|O#*2%JHkqZKAHf|Qh0o+`_jT26Um zQ%wMY+y11-pFdMHalfLV)-7ycVEeOG5^XM5`Fuy@mIV&e{fVn1X#CFF)a$%rA zb6;Pd=Yf9`2DmQsjsdmZIPhNqy!JtU2Z5(=P@T8X)7X#i?hAtm&iR02;!iIV&`Kabgi}ZMd;J>er zmD1p6XLoKpjp`{7>3(^|H5O03KuvUmaSKT%5uLVgtUYu1v%)DF;P3ArvEu$(A~t1+ zf}aeSPZgpd!40W=|Ef`h85!nx3|DR14(~aZCz%~>nmUfk=>$6c+1~E-sY88{n3mQ# z{RtV*cb`-~@eT{|Z%v9+1 zeb;=!^4rF=>X#=WQ!?5kcSa{RuKIctn~bgPGk^o1S4fCF1Q{zhH#fJqQ9_{l?I^Y9 z-Q~f(+vzgQcL$^uxmtAdyZaYHeps^*V{D5Ju)_P@L~~-*BI}lE^Ujic<2`3%>+EPq z_;CaiV7h={aCARil*#Keu+Y%@~DRZhZfo;$fAPp-$Or_f1(7YFyMuxTx2CQRr>E-J?GY zR_-#3Es~pBUI5eE2ph;)p7OsEFx6Mx12}$XvVuWOfT%8l`%RkfVZ-)p-XF`!NzK&? zyO&&}qF0oyXN_!R9<%S)jR81^u~M4 zaWGj*FAn6Mz9^zNFqf98ED^(BhOd=3v^dxPb7U|<3GdP0 zP6)hPnA($l5Jj7y$hujJfKlE?36>{@VUTd|O_y0nOG~e9Z$}IbDJtfOkY!|K9A8|> zdV0S6{{1_R^*M8py&EELyP*zhU=|s3x#TnR*9#}{fttJ~TW@C*|aSq(cToa=I*`_ux zeF;#C2Q-E3(PwVyvlADan_u%uKKm*=F)?xTOcm(cdMSzw6c!c&tKZuSi;AlEX22M> zme7NRy6X3r`|Wir0T>yIJr!`uxnfisy$KOh@473%2fM;AU#i%2$_Wps4I3IRI618; z?6D#>WNG{d-+y?@r4bAORLM(_cXwTiC!<*_d^Nkj!)5c@9WmUx58l8xi3s6+`r(R6 z-zZa~9RLR?5$I56o(osnBQ0p*i-2P>RBO-t6IAbO^c@;)mGM#O_c_0!e(=qaxz3^& zUNNeT$D6(d^f0N0sU4f$>S|lH zsv;>IYLUJV{y;x@?vi8g{#S-MVo<4(NE2 zKojoePt+bc+0z>@b=3S4mwtB^J&OG@jMQ3B(l97QGSEX?5!<4R<6qUH(v7pKP7Q^# zyk~3?Ei^c8L`u!ea4kg}j)EquwbyWyaL};m-B_Uo%u~LmpxnkUVQL}?NUr?F)Uju( z|5H$fD^!IhH$wZrmjA1GUBTMkl-g2jRJ<3n_hlixGo!U0_2+{T>=jH68g}!t$N>BJ z&kv&KbAPYO&VSmc=l}{HuO1^$(N|^FW_1+hiw{g7WrGy#oy}3N?@z!58#2yl|D*^= z3YL_GT#gAE`DxL%gMmx}qQHQ-9Mp@n6aVkewHMEAU%Bd0ZL!v?OPEhb(i5RP8o!fO zDJfBT%fVg}Pb~d#kOhu-Ms)9UXfxa-;Z{ z%X+|15m!~NOq35~WZE!_-qz7F4drTnUAA341mh>yN2cm#- z@4DbV?HVHM;m{@LvX#G-=qkI#@pR4T&DG6%Qm<}fs;q?;#$)aMrSH>{ zYap-fX25)0k+rLf(c1~b@mJCobK97?PHFK%p^s!GR@4OOAw(s6RiDztFZ1b*T`4jo$VnH5Fi)eKV^%)MV zrR?dk{QB$<=iK=6sKhuY`c|gZ_3oDTiO>59y}} z#L@+lnh8rharuJTP+06|$XU4*i-@eqQzCO)TQP}ah;DzlqIM^WkmRIEfrzp1euCA3L+7j zOYL(vc#%7TF`!9k8p+qe%~^hn@M7@EpU1i~CO8-X2&{g1qO=LBRrPv!LJIU9Suffl z34@Gnbu_t^@Ij1vw~id(8nUx)L|Dx#p4|`<7Kg_ZeS30-f!VuQ)zY_kpT2WdwQdFi zZ5H%?^HjjLOgHt+|4y0<+1Uw?|8Zl&S1>97CjHTs0#@?%+{p{bA~^V4pN$UrGaTCl zF*Gf6d~JK*INCiYeQBf-5@NbZlkl^!u;ORFdTHc>t~IOh6#zlrM)@KjL+- zi+y=C96q-gxLMH>bnVRuJ_j$b(uc8TTlpz^6E^FcT8eO!77R2tXo6{T9G-5%CJLm~ z2ods8In`Jwznb*>v#WtD31lU;#WnbV%A6w3qU{6&1X<-^P zPF3`a>N~jpy$%g@THD&{tgp!uZB9eD)~&JrKLh39GiO}mCpG>mX_rLwms*_bB320}Z`jJ?4+!+%ym%?f%CHI{qxgQOpx7oOBaDg)=-?^H=C+u$a zjzNshyQ|(kEiHiN6RyXWM872NLJ&UGNBU!0-lbojw2Q`hOz`{}9OaKDM4$jo?Jaf+ zC1Mp73m!EvdkThKYxzOr41=6pl&#T63G7e3>}XMpGTDNvuDD&Ec{1L>s-Lf@l$^I0 zi{lS@mC*R(o*VbWr+QtEN*)viY$+#7nJ;Z+Hoh^Jdc9^3N&O9)E`ReIwY#;lI ze#n~VX;BX`Y;@R~hx4Q8X2&Qa*NpzPw1)a<#b3C#ZyH63IXUqfMam}{*&Ur^jY}gj zG=d!WhQCYRBh=dtn`h&7ppK0|0fZBBeF48}_;J_JPR_efO;(ie;*T$6Ba4_hWz5(1 zCBjAs0P(Mc*eR%BLKa%YyqjN<|5VNf?b{9?TKqHWz?Uej?m58qi!aWQBBcK0)Qjgo zw7Sq1pDM?fkI^nx!{mqF1M`%{ zV?OY!z58(p2ilD3(qFWT@ssng6C`}%$RM>qJfvcgEC_w<9-~4nlm!w?Yn$Uy=|t?1 z;-W~j^D!9Jayu^nVPmbR*HAUW>(y2x+QS4ILP;Ie(W_~sEjy)qv$}=xv9ZA4ztv^r z>wALKC-_gbxk;W z->83r-Z(cT15^b$dI+}FG=8ny!8nCbuUu1d34S@;haFWjVOlX(d?@>NI7EuzvMQk#Qf52ZEOOM1^lkLCZ^^;vk{`p zMpVp9%=lg{A;iwvZ)#8i0;O>1c;#^LZS*R!a1EDBUQ02Fj9DJ|LfhNsu51FTZ%-+z zh5b30>VgqGwoWg8E9b`aL&9Z$6Y#H|*fyv8iEwZVqT%7=C%U46ZG&bxq@FFnb~{pb zSAudEV}f;>8A)^F@6Tms6cfhg1wEnXKQJ3lR8kwgOj z;qQw6G?WbYuSPK5~UW?0DdAI8q z;S42s1SMT<3?oq>-G#B?@VNQ*mQLPyjnd60#YOTwi>DVX(-)5V*V^mB!{OhkO5u{v zytwDLG*nGJi?)v}M~LT>gnpbsb*bA2s^ZI4l@~oho~(fw%2}p4diT#UD!A;G z>#6G6IJ1DBd~z6JQsJwnV8lhoGDF9xxL^7l`!zmS+aShOV|qBlc>33`Oer-?9m#v| zg{-|uS2w$39A0Y>Aj|VE-GC-0B188+r`C@T5x!j(i7E<>0nq_!sx;`@nRr_4H1kaic^ip$TJhsl~bk^Y#$%N47bpmrTAJ8UNDuJuIIvT227B#nE$SCI_?&A z{Kxm%;h@Q8e@vO|3MQy^gy8t=A(P-MK`AfMdR7Jcx1&Q-We$V(_!mU*Wp*Ag#jL() zz0gmQq-c(Ft~r^%8RC!SOUcJ`=1U6SZ_uGDdc|&DL1%!r&|JqlXz6sr*|A}$7 zJxa3S>5WJK7qjaDEi67V_l&POEONGmjA!<+v^`Z`7d=iuRY!hPA}aF1=QPdUYkCzj z(+_Acm%Q@CfgpUm!Nq&hg={{7vZ~kIYxLNYMCyX7bmpyhHss*H>X;V2|EX^F$Xg<_@USTWeM(B6sek76>`fn(d9pTcy;T#7pyKkRvqTK zm}}~6L$I|K)r>rofiOkQwtn{|o)VDoMbYj%HuJ6j9W7Ct-U=81XhzBroFn-Z2urM8LjqHBA>697X$E6P{EL`=&DZW| z-((UM9pKv*Z$^(T_WSxw!?q9I;Smtj3=CqRt35biYczMX?t-YqI2$gHoj*}A2_3;I zG}W{#5ArdL%65(!_!aF-3fMK@WhX|gvg@9tqw~ET8BxCTz5EHf>1EBz_m=&UV87k+ z#ew0dNRE$^#1WCG<^|W zSVTZrbzQ9gGnk^5SJ#1!GlHE`uX4&_MYvN|*%?xez<8J}qCke^%eH^Kx-SuR$B~d-jVp0{5OBfeAqJUe`{WH$v1M0kim6~Z4?!N>*jYd-5$vvI^7(cOAmOc z`mM<_|EiuU4(tjDsko+7Y{0FJYCu^nL;ZG0r|3!|{LoIe?H+kZ*E0`8^QJvi0V5&Z zJl!8QqLAwR6zf(9C{ktdqJ{{Ik;aY+ULy1N&hS8BBn+?_7CZv zJ@zp#A;>#@|1;`_myhJN@4mCt_KDB7Y^1{BVN~yaXbaizJn5REO`RpBF~m`@Z6wqZ zQpg7oKx1nJ+PG|}E^jHIaFSRVlF2yB(ke0{h0>P)hYXs${!QHs2s|VF$7v?-Onb`z zE9EcR{vX#D<({zt5s(rJ3Im+}7!ct_5-jw;MB)E+`TzXj7@x!d`zS_v1+GiI4z_I-ImVl1S z{MtFKV24BM1ia%96o=;`WnDeu3{ln@f;~QRlVTEG(+7ef1YL=VxXXeNT^h|+40t97 zzsap8k3;5vR~l(^*{LJ$hXY*iMjYXd??<#{YK__Ovech9Si*k6^{VTxjW4;GSMhIP zO~142`m$(8%D*dCIGh>f^7*h6`mCHM|JOL)3o@>Ik+iVqvT~V#ugxc)6V7ej z_zI8H@w$Qu?W;JQW*2FynWMXJb4e8a2Pdru}AB$?iPj8pJP4IdAF zsq7!6hL7eBs{h+IGfKbhYXEor=Y2=uN>gX<=*`0ONu_?`18VHU5!2jsA+$BKwb_fu z2-R@eHcgF~)jSDOHnvLlwFxdw@?+a+7quek+)r1$jr}^|KVP!>`CC=$@8MBX!-eF- zKM7Y*avmi7$sM$Gowe6ae0*AbqRoZ}zo@cM{dRy;GgHhS%y&5)1#Xjk{Pg%7VYy-a^S^6kFikVv~02Mc0B zXD{T;tio5yIm9Z8*`Y}mJ?8$mcK0{u7hs#p_Q>i)=?2Y17j8Rb(t03B7TcpB!?+mn zVK0r#tmAlKRvl3yOVIYDWHRVz!V)szOL>gtw)E^$O~Q*1 zFpd5cvtGedxi*C0ZTrAfcWCC+L$QA>L!@}|GJW?sWPx}j6cHeq1~Z+Ia@=n^cI>y= z5=rH#+$JzYlxuq3!)Ve{PC~YJeL^GTR&(B) z``|IGdp-QZMwUiekBEI`VS&IJ?V6OrODbgKQbZ?@lql8k{;w<6*xbzt?zkJic;DwX z%$%^vDOl7m>XcvLE&a5`q&fg3bA4HYb5__(JKdO9~CF|QrseGw>lDhz2w%c=m zmb#)p<;<1{JCuVA`F^|BA8Mpc&@jKN;+ai($Y$9F0tA6>V^#75tU{4v~B8^Km`X!DY z=IS-^4LI#U$YXqukY21t6_Y7~t~kk3W9b9{S+>$;51Ozb06Q0qi)$}p#TC`u zs{Hd~b1xZYE{IFY@E#=F=_=NE+5uGw&~4u%{ap@DsXZzN+DG55{!uHM4uEHktU{8a4t! z^x|jhVe-6)Aoe6=esbGU+RO^m3>q&Zg)Vz!c`6-`%!(1%0n2(_+wM0SB&+1yFFXb+ z)GS!ryVf*LS_O|x4YM$JB`|7X!Xa@n)~g+1lrD}1EXhwUTiRHF1R4HVd1lqE8_<>s z+JZ(-kuh;PPZm!Ro~@Hm6JxKU(`kb52vb}Oz+EYhK*O%?o(4WKURw{ukj_+L&nI@95K7uc; zKrliM-UxB;JUDCPeFI-JkKJ6WXu0%LAZj0-6m1M?@M_men~Im-ld0%k zI$P%0`sSlj4V^3~%xUWAAgtoAy`B#N&*%Z@>+BnTx)|W(Nlz3EA&~6z@5C$ye&~ur z*Vwr+1Drb&Aj_{A%{eZIaHU)A?^uf5k@0U9V}6qoPdEcc5J14OcGk4C z90500FM(-e=!WufKJDvyfFGT6yJQf{?+ml=b?pVaq!;b zaCMJOS{`-#5(^@vq>$V6jo^W-HZ*ED31V&lSsJaQlO7k!lu>%1tJG*V#}WlDBSFO~ zs-3NiC-Z-veR}-)A8=Pc@jG=GPU|D)Q}aF1pUrK07A{nun;UPZ16RN6i?{Mx2~y?d zNP2SB&TCTGFDstXYz{3TIl6i=+YbMdXMuN;lt#MYDvw-|;_)2MJ8$Y>T~PhM=GpOn z$o(n0p`vQ$)mD)Kb;ts)L%PO@7vZdkh^*JBX zI0k#e*8PuL{=MY7-D#b@PKS%EcM_>SH06$&5S$e#$L|*y*nZkHtmyi6t(Hna6s1M2|9F@r4ve$`=&GJ z0Y*=wy5^kScx0kG+-=Pv-QjPM&(<^ql5{ftl=_SxUT{2+;W-2Cl!BZ)Yanyoh?%;M zlT%CqMzovg)UyP5`ULm|n{^rPD_pR-zHY%2)-(&LVU*E&dX;o?avCTO5^{lFr`Gee zL1B6_N;;pte&~vTB0th)BCGAg(Dk%LIwhdSrG1A`yipMa$w=UmduJgG#*n)B^$ehk z@kz}tk9(L)$|&pZO;}f-9zbCHx6!XGc+mzAZ0XQa13PEsnMj2a1P@sg!7-n+Ehuhm zxRw*c?$5Y5w%?h(%y{9nEYjbL9Jn;WH!Es{U?mU4PI=ttW1_8&M#YUi{H+P|>n2(I ztZWcjWH-l6k*dp5Q$QlFE0Fp)P~_ zu_^8f$MgrF%!z46_Hx~$3>U4-_Dbmr;zlSEKDR(t-p;ZuA+U7A2@~WH^dtYPKKah0kmT} z=YCjY{Z=RI40tkK>N;STXK&CCKG_1amBZMn{SR6OWPto@e_Vd)U{wR75WAnmm^d5w zzat|0o!R?9oKsUGcx8B(nU3g$R`~UO5V1jSJ(YKJAP@Xc$Jf+Yp}vD0u6$H;2Q}1 zHWJMIRapvJ-beD!4C^R0S`epdC~ol@4#@jn2tdB~2z>%ttL-^+nABhF<^hCzu-n-+ zuggFBuhdgLQydkv7C<6YJ)B%)q2YR#OVQt*71}XD<4ODW=xq|ZJsWMiyjb_={ju9K zHwtl&WeLauPHl`CC*BirP2xI3hV`L0*AGkkR!T?!$J%0bE~jN#LT;|WRC#N?S6luB zQAp{HU~*a-hKWfAVJDQa3WF&NuYkMX(9KayY^;oNfEZxf|GjMJ-^Nim9U=n%Ob65F ze&ZAGrR$+`aRDKX##i+p3_L9c4(94QcHu)a5i3WW0&TFbnG$&k%!(ewElb(Ax!Gpb zF0T*%r5MuiM#j1qbQsQ7qw=sX+_5;J`4jns=wEmoDd6_sM1se%GOy@ZxFVg7~(BeZR`1s1j5%UNqpiqt;>n2z+`!erWp-O{Ywvn0T9ADa;np(K4N*KFRuvG$e{zdJ&*xcOw zXO1s3r>rQT{N5eWBTyNWsOBR zdJtA-fms=fyV-uH`JcnaKcZ<9-t#P*mesz}b%-0I_zwJuep$=5GszStg@?c-EPR*N zf&$S5^o)#~X)Q?TVW$|9MH2rA23H*^C=r03_;@is;S3YRPNAU@_yf=n>T6kLnQ|%9 G;Qt5pu@v|K delta 12721 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 From 7130fd124b721b8674920d66cc1ce724e2cb626a Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 13:39:06 -0400 Subject: [PATCH 59/75] Stun baton nerf Adds agonyforce var to stun batons, which causes halloss and eye blur. Also did some clean up of stun batons, and fixed the stun baton's bcell var being of type weapon/cell/high instead of weapon/cell. --- code/_onclick/item_attack.dm | 6 +- code/game/objects/items/weapons/stunbaton.dm | 102 +++++++++++------- .../mob/living/silicon/robot/robot_modules.dm | 2 +- 3 files changed, 70 insertions(+), 40 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 22c8a113009..7ff3e1d63f0 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -24,11 +24,11 @@ /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) if (!istype(M)) // not sure if this is the right thing... - return + return 0 var/messagesource = M if (can_operate(M)) //Checks if mob is lying down on table for surgery if (do_surgery(M,user,src)) - return + return 0 if (istype(M,/mob/living/carbon/brain)) messagesource = M:container if (hitsound) @@ -140,7 +140,7 @@ if(istype(M, /mob/living/carbon/human)) - return M:attacked_by(src, user, def_zone) + return M:attacked_by(src, user, def_zone) //make sure to return whether we have hit or miss else switch(damtype) if("brute") diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 2e497863a66..dfdbb130c82 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -12,10 +12,11 @@ w_class = 3 origin_tech = "combat=2" attack_verb = list("beaten") - var/stunforce = 7 - var/status = 0 - var/obj/item/weapon/cell/high/bcell = null - var/hitcost = 1000 + var/stunforce = 0 + 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. /obj/item/weapon/melee/baton/suicide_act(mob/user) user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") @@ -26,10 +27,9 @@ update_icon() return - /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. ..() - bcell = new(src) + bcell = new/obj/item/weapon/cell/high(src) update_icon() return @@ -103,49 +103,77 @@ if(!isliving(M)) return + var/agony = agonyforce var/mob/living/L = M + var/contact = 1 if(user.a_intent == "harm") - ..() - - if(!status) - L.visible_message("[L] has been prodded with [src] by [user]. Luckily it was off.") - return + contact = ..() + agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. + else + //copied from human_defense.dm + if (ishuman(L)) + user.lastattacked = L //are these used at all, if we have logs? + L.lastattacker = user - var/stunroll = (rand(1,100)) - - if(ishuman(L) && status) - user.lastattacked = L - L.lastattacker = user - if(user == L) // Attacking yourself can't miss - stunroll = 100 - if(stunroll < 40) + var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L) + if(user == L) // Attacking yourself can't miss + target_zone = user.zone_sel.selecting + if(!target_zone) + contact = 0 + else + switch (target_zone) + if("head") + agony *= 1.25 + //if("l_hand", "r_hand") //TODO + //if("l_foot", "r_foot") //TODO + + //put this here to avoid duplicate messages and logs from ..() above + if (!contact) L.visible_message("\red [user] misses [L] with \the [src]!") - msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - return - L.Stun(stunforce) - L.Weaken(stunforce) - L.apply_effect(STUTTER, stunforce) + else + if(!status) + L.visible_message("[L] has been prodded with [src] by [user]. Luckily it was off.") + else + L.visible_message("[L] has been prodded with [src] by [user]!") + msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - L.visible_message("[L] has been stunned with [src] by [user]!") + //stun effects + if (contact) + if (stunforce) + L.Stun(stunforce) + L.Weaken(stunforce) + L.apply_effect(STUTTER, stunforce) + + if (agony) + //Siemens coefficient? + //TODO: Merge this with taser effects + L.apply_effect(agony,AGONY,0) + L.apply_effect(STUTTER, agony/10) + L.apply_effect(EYE_BLUR, agony/10) + L.flash_pain() + playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - if(R && R.cell) - R.cell.use(hitcost) - else - deductcharge(hitcost) + deductcharge(hitcost) /obj/item/weapon/melee/baton/emp_act(severity) if(bcell) - deductcharge(1000 / severity) - if(bcell.reliability != 100 && prob(50/severity)) - bcell.reliability -= 10 / severity + bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. ..() +//secborg stun baton module +/obj/item/weapon/melee/baton/robot/attack_self(mob/user) + //try to find our power cell + var/mob/living/silicon/robot/R = loc + if (istype(R)) + bcell = R.cell + return ..() + +/obj/item/weapon/melee/baton/robot/attackby(obj/item/weapon/W, mob/user) + return + //Makeshift stun baton. Replacement for stun gloves. /obj/item/weapon/melee/baton/cattleprod name = "stunprod" @@ -154,6 +182,8 @@ item_state = "prod" force = 3 throwforce = 5 - stunforce = 5 + stunforce = 0 + agonyforce = 60 //same force as a stunbaton, but uses way more charge. hitcost = 2500 + attack_verb = list("poked") slot_flags = null diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index d0d744b0a48..87301e4b9b5 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -238,7 +238,7 @@ src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/melee/baton/loaded(src) + src.modules += new /obj/item/weapon/melee/baton/robot(src) src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) src.modules += new /obj/item/taperoll/police(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) From a644156bdf78a5842487249be03ce7cbe292cfaf Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 13:40:23 -0400 Subject: [PATCH 60/75] Taser cleanup and fixes Fixes cloaking devices and deadman switches being included in taser code somehow. --- .../mob/living/carbon/human/human_defense.dm | 102 ++++++++---------- 1 file changed, 45 insertions(+), 57 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6260a297a1c..7fe9bd63f9f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,23 +10,29 @@ emp_act /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) -// BEGIN TASER NERF - /* Commenting out new-old taser nerf. - if(C.siemens_coefficient == 0) //If so, is that clothing shock proof? - if(prob(deflectchance)) - visible_message("\red The [P.name] gets deflected by [src]'s [C.name]!") //DEFLECT! - visible_message("\red Taser hit for [P.damage] damage!") - del P -*/ -/* Commenting out old Taser nerf - if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor)) - if(istype(P, /obj/item/projectile/energy/electrode)) - visible_message("\red The [P.name] gets deflected by [src]'s [wear_suit.name]!") - del P - return -1 -*/ -// END TASER NERF + var/datum/organ/external/organ = get_organ(check_zone(def_zone)) + //Being hit while using a cloaking device + var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) + if(C && C.active) + C.attack_self(src)//Should shut it off + update_icons() + src << "\blue Your [C.name] was disrupted!" + Stun(2) + + //Being hit while using a deadman switch + if(istype(equipped(),/obj/item/device/assembly/signaler)) + var/obj/item/device/assembly/signaler/signaler = equipped() + if(signaler.deadman && prob(80)) + src.visible_message("\red [src] triggers their deadman's switch!") + signaler.signal() + + //Shields + if(check_shields(P.damage, "the [P.name]")) + P.on_hit(src, 2, def_zone) + return 2 + + //Laserproof armour if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof)) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 40 - round(P.damage/3) @@ -50,54 +56,35 @@ emp_act P.xo = new_x - curloc.x return -1 // complete projectile permutation - -//BEGIN BOOK'S TASER NERF. + + //BEGIN BOOK'S TASER NERF. if(istype(P, /obj/item/projectile/beam/stun)) var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - // var/deflectchance=90 //Is it a CRITICAL HIT with that taser? - for(var/bp in body_parts) //Make an unregulated var to pass around. - if(!bp) - continue //Does this thing we're shooting even exist? - if(bp && istype(bp ,/obj/item/clothing)) // If it exists, and it's clothed - var/obj/item/clothing/C = bp // Then call an argument C to be that clothing! - if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered? - P.agony=P.agony*C.siemens_coefficient + var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? + + for(var/obj/item/clothing/CL in clothing_items) //Make an unregulated var to pass around. + if(!istype(CL)) //This isn't necessary, is it? + continue + if(CL.body_parts_covered & select_area.body_part) // Is that body part being targeted covered by CL? + P.agony *= CL.siemens_coefficient + + //blocked = 0 here as we've already adjused based on siemens_coefficient. apply_effect(P.agony,AGONY,0) flash_pain() - src <<"\red You have been shot!" + src <<"\red You have been hit by [P]!" del P - - var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) - if(C && C.active) - C.attack_self(src)//Should shut it off - update_icons() - src << "\blue Your [C.name] was disrupted!" - Stun(2) - - if(istype(equipped(),/obj/item/device/assembly/signaler)) - var/obj/item/device/assembly/signaler/signaler = equipped() - if(signaler.deadman && prob(80)) - src.visible_message("\red [src] triggers their deadman's switch!") - signaler.signal() - return -//END TASER NERF + //END TASER NERF - if(check_shields(P.damage, "the [P.name]")) - P.on_hit(src, 2, def_zone) - return 2 - - var/datum/organ/external/organ = get_organ(check_zone(def_zone)) - - var/armor = getarmor_organ(organ, "bullet") - - if((P.embed && prob(20 + max(P.damage - armor, -10))) && P.damage_type == BRUTE) - var/obj/item/weapon/shard/shrapnel/SP = new() - (SP.name) = "[P.name] shrapnel" - (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." - (SP.loc) = organ - organ.embed(SP) + //Shrapnel + if (P.damage_type == BRUTE) + var/armor = getarmor_organ(organ, "bullet") + if((P.embed && prob(20 + max(P.damage - armor, -10)))) + var/obj/item/weapon/shard/shrapnel/SP = new() + (SP.name) = "[P.name] shrapnel" + (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." + (SP.loc) = organ + organ.embed(SP) return (..(P , def_zone)) @@ -186,6 +173,7 @@ emp_act ..() +//Returns 1 if the attack hit, 0 if it missed. /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0 From c8cccb64f645a759cc3978da2a5ec046f38813df Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 15:38:56 -0400 Subject: [PATCH 61/75] Adds siemens_coefficient handling to stun batons --- code/game/objects/items/weapons/stunbaton.dm | 20 +++++++++++++------ .../mob/living/carbon/human/human_defense.dm | 14 +++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 04d66e4d247..f0102a17730 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -108,12 +108,14 @@ return var/agony = agonyforce + var/stun = stunforce var/mob/living/L = M var/contact = 1 if(user.a_intent == "harm") contact = ..() agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. + stun *= 0.5 else //copied from human_defense.dm if (ishuman(L)) @@ -145,14 +147,20 @@ if (contact) msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - if (stunforce) - L.Stun(stunforce) - L.Weaken(stunforce) - L.apply_effect(STUTTER, stunforce) + if (ishuman(L)) + var/mob/living/carbon/human/H = L + var/datum/organ/external/affected = get_organ(def_zone) + var/siemens_coeff = H.get_siemens_coefficient_organ(affected) + stun *= siemens_coeff + agony *= siemens_coeff + + if (stun) + L.Stun(stun) + L.Weaken(stun) + L.apply_effect(STUTTER, stun) if (agony) - //Siemens coefficient? - //TODO: Merge this with taser effects + //perhaps this could be merged with taser effects? L.apply_effect(agony,AGONY,0) L.apply_effect(STUTTER, agony/10) L.apply_effect(EYE_BLUR, agony/10) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7fe9bd63f9f..9cb8f8cc097 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -120,6 +120,20 @@ emp_act protection += C.armor[type] return protection +//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. +/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/datum/organ/external/def_zone) + if (!def_zone) + return 1.0 + + var/siemens_coefficient = 1.0 + + var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? + for(var/obj/item/clothing/C in clothing_items) + if(istype(C) && (C.body_parts_covered & def_zone.body_part)) // Is that body part being targeted covered? + siemens_coefficient *= C.siemens_coefficient + + return siemens_coefficient + /mob/living/carbon/human/proc/check_head_coverage() var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform) From 56ccd4303bd3a71d6744f261e9b034829de20a01 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 15:57:18 -0400 Subject: [PATCH 62/75] Merges taser and stun baton effects Makes the code for handling stun weapon effects much cleaner. Moves electrocute_act and emp_act from living.dm into living_defense.dm --- code/game/objects/items/weapons/stunbaton.dm | 43 +++++++------------ .../mob/living/carbon/human/human_defense.dm | 28 ++++++------ code/modules/mob/living/living.dm | 9 ---- code/modules/mob/living/living_defense.dm | 24 +++++++++++ code/modules/mob/living/silicon/silicon.dm | 3 ++ code/modules/mob/mob_helpers.dm | 11 ----- 6 files changed, 57 insertions(+), 61 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index f0102a17730..03609a29cb6 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -112,27 +112,24 @@ var/mob/living/L = M var/contact = 1 + var/target_zone if(user.a_intent == "harm") contact = ..() agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. stun *= 0.5 + //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they prodded the chest. + target_zone = "chest" else - //copied from human_defense.dm + //copied from human_defense.dm - human defence code should really be refactored some time. if (ishuman(L)) user.lastattacked = L //are these used at all, if we have logs? L.lastattacker = user - var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L) + target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L) if(user == L) // Attacking yourself can't miss - target_zone = user.zone_sel.selecting + target_zone = check_zone(user.zone_sel.selecting) if(!target_zone) contact = 0 - else - switch (target_zone) - if("head") - agony *= 1.25 - //if("l_hand", "r_hand") //TODO - //if("l_foot", "r_foot") //TODO //put this here to avoid duplicate messages and logs from ..() above if (!contact) @@ -141,30 +138,20 @@ if(!status) L.visible_message("[L] has been prodded with [src] by [user]. Luckily it was off.") else - L.visible_message("[L] has been prodded with [src] by [user]!") + //unfortunately we can't tuck this away into human/stun_effect_act()... + if (ishuman(L)) + var/mob/living/carbon/human/H = L + var/datum/organ/external/affecting = H.get_organ(target_zone) + if (affecting) + H.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]!") + else + L.visible_message("[L] has been prodded with [src] by [user]!") //stun effects if (contact) msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - if (ishuman(L)) - var/mob/living/carbon/human/H = L - var/datum/organ/external/affected = get_organ(def_zone) - var/siemens_coeff = H.get_siemens_coefficient_organ(affected) - stun *= siemens_coeff - agony *= siemens_coeff - - if (stun) - L.Stun(stun) - L.Weaken(stun) - L.apply_effect(STUTTER, stun) - - if (agony) - //perhaps this could be merged with taser effects? - L.apply_effect(agony,AGONY,0) - L.apply_effect(STUTTER, agony/10) - L.apply_effect(EYE_BLUR, agony/10) - L.flash_pain() + L.stun_effect_act(stun, agony, target_zone) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 9cb8f8cc097..9bf59b27e7f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -59,18 +59,7 @@ emp_act //BEGIN BOOK'S TASER NERF. if(istype(P, /obj/item/projectile/beam/stun)) - var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! - var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - - for(var/obj/item/clothing/CL in clothing_items) //Make an unregulated var to pass around. - if(!istype(CL)) //This isn't necessary, is it? - continue - if(CL.body_parts_covered & select_area.body_part) // Is that body part being targeted covered by CL? - P.agony *= CL.siemens_coefficient - - //blocked = 0 here as we've already adjused based on siemens_coefficient. - apply_effect(P.agony,AGONY,0) - flash_pain() + stun_effect_act(0, P.agony, def_zone) src <<"\red You have been hit by [P]!" del P return @@ -88,6 +77,19 @@ emp_act return (..(P , def_zone)) +/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) + switch (def_zone) + if("head") + agony_amount *= 1.25 + //if("l_hand", "r_hand") //TODO + //if("l_foot", "r_foot") //TODO + + var/datum/organ/external/affected = get_organ(check_zone(def_zone)) + var/siemens_coeff = get_siemens_coefficient_organ(affected) + stun_amount *= siemens_coeff + agony_amount *= siemens_coeff + + ..(stun_amount, agony_amount, def_zone) /mob/living/carbon/human/getarmor(var/def_zone, var/type) var/armorval = 0 @@ -191,7 +193,7 @@ emp_act /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0 - var/target_zone = def_zone? def_zone : get_zone_with_miss_chance(user.zone_sel.selecting, src) + var/target_zone = def_zone? check_zone(def_zone) : get_zone_with_miss_chance(user.zone_sel.selecting, src) if(user == src) // Attacking yourself can't miss target_zone = user.zone_sel.selecting diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4cfad2504a5..3ab8632e8ec 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -202,15 +202,6 @@ return 0 -/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) - return 0 //only carbon liveforms have this proc - -/mob/living/emp_act(severity) - var/list/L = src.get_contents() - for(var/obj/O in L) - O.emp_act(severity) - ..() - /mob/living/proc/can_inject() return 1 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 8b9bfccb879..e5c965c8b1f 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -65,6 +65,30 @@ P.on_hit(src, absorb, def_zone) return absorb +//Handles the effects of "stun" weapons +/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) + flash_pain() + + if (stun_amount) + Stun(stun_amount) + Weaken(stun_amount) + apply_effect(STUTTER, stun_amount) + apply_effect(EYE_BLUR, stun_amount) + + if (agony_amount) + apply_effect(agony_amount, AGONY,0) + apply_effect(STUTTER, agony_amount/10) + apply_effect(EYE_BLUR, agony_amount/10) + +/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) + return 0 //only carbon liveforms have this proc + +/mob/living/emp_act(severity) + var/list/L = src.get_contents() + for(var/obj/O in L) + O.emp_act(severity) + ..() + //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve if(istype(AM,/obj/)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index d730bd9b5f7..b08345ff5ed 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -34,6 +34,9 @@ src << "\red Warning: Electromagnetic pulse detected." ..() +/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount) + return //immune + /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) return diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a8210acfd96..388f2bf7a4b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -129,17 +129,6 @@ proc/hasorgans(A) zone = "head" if("mouth") zone = "head" -/* if("l_hand") - zone = "l_arm" - if("r_hand") - zone = "r_arm" - if("l_foot") - zone = "l_leg" - if("r_foot") - zone = "r_leg" - if("groin") - zone = "chest" -*/ return zone // Returns zone with a certain probability. From ecd7df9628a7cd15662965b9482cfccebb5d94e4 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 16:52:50 -0400 Subject: [PATCH 63/75] Adds disarm effect for stun weapons and hands --- .../mob/living/carbon/human/human_defense.dm | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 9bf59b27e7f..dba82e561c4 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -80,9 +80,28 @@ emp_act /mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) switch (def_zone) if("head") - agony_amount *= 1.25 - //if("l_hand", "r_hand") //TODO + //agony_amount *= 1.25 + agony_amount *= 1.50 //it does add risk, so it should probably do more damage than average //if("l_foot", "r_foot") //TODO + if("l_hand", "r_hand") + var/c_hand + if (def_zone == "l_hand") + c_hand = l_hand + else + c_hand = r_hand + + if(c_hand) + //Not only do you need to guess the correct hand, but you also have a 50% (and increases with distance, in the case of tasers) miss chance when targeting the hands + //Since you can disarm someone by spamming disarm with a 60% success rate, it seems fair to have this be an automatic disarm, even for tasers. + msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") + + u_equip(c_hand) + var/datum/organ/external/affected = get_organ(def_zone) + if (affected.status & ORGAN_ROBOT) + emote("me", 1, "drops what they were holding, their [affected.display_name] malfunctioning!") + else + var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") + emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.display_name]!") var/datum/organ/external/affected = get_organ(check_zone(def_zone)) var/siemens_coeff = get_siemens_coefficient_organ(affected) From 5b90e4afc67a9bbbea5cfcce0065eb1915bdbbef Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 17:01:06 -0400 Subject: [PATCH 64/75] Allows the use of stun weapons to show up in autopsies --- code/game/objects/items/weapons/stunbaton.dm | 2 +- code/modules/mob/living/carbon/human/human_defense.dm | 5 ++--- code/modules/mob/living/living_defense.dm | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 03609a29cb6..3f365b46151 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -151,7 +151,7 @@ if (contact) msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - L.stun_effect_act(stun, agony, target_zone) + L.stun_effect_act(stun, agony, target_zone, src) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index dba82e561c4..1fff2f90867 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -57,13 +57,12 @@ emp_act return -1 // complete projectile permutation - //BEGIN BOOK'S TASER NERF. + //Tasers if(istype(P, /obj/item/projectile/beam/stun)) - stun_effect_act(0, P.agony, def_zone) + stun_effect_act(0, P.agony, def_zone, P) src <<"\red You have been hit by [P]!" del P return - //END TASER NERF //Shrapnel if (P.damage_type == BRUTE) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e5c965c8b1f..bfea9396dd3 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -66,7 +66,7 @@ return absorb //Handles the effects of "stun" weapons -/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) +/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null) flash_pain() if (stun_amount) @@ -76,7 +76,7 @@ apply_effect(EYE_BLUR, stun_amount) if (agony_amount) - apply_effect(agony_amount, AGONY,0) + apply_damage(agony_amount, HALLOSS, def_zone, 0, used_weapon) apply_effect(STUTTER, agony_amount/10) apply_effect(EYE_BLUR, agony_amount/10) From 697979c2f68a18c99733594aeb7f4f2ab45ac259 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 17:06:42 -0400 Subject: [PATCH 65/75] Makes humans scream if taking enough halloss --- code/modules/mob/living/carbon/human/human_damage.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 570e141c651..6c2ec1cea08 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -292,6 +292,9 @@ This function restores all organs. damage = damage*species.burn_mod if(organ.take_damage(0, damage, sharp, edge, used_weapon)) UpdateDamageIcon() + if(HALLOSS) + if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) + emote("scream") // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). updatehealth() From 8bd7a11ff45a1efe5fb1c047f87c2711c06e23a6 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 17:19:35 -0400 Subject: [PATCH 66/75] Fixes siemens coefficient not blocking stun disarm --- .../mob/living/carbon/human/human_defense.dm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1fff2f90867..0cc7a4f7169 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -77,10 +77,15 @@ emp_act return (..(P , def_zone)) /mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) + var/datum/organ/external/affected = get_organ(check_zone(def_zone)) + var/siemens_coeff = get_siemens_coefficient_organ(affected) + stun_amount *= siemens_coeff + agony_amount *= siemens_coeff + switch (def_zone) if("head") //agony_amount *= 1.25 - agony_amount *= 1.50 //it does add risk, so it should probably do more damage than average + agony_amount *= 1.50 //Targeting the head does add risk, so it should probably do more damage than average. //if("l_foot", "r_foot") //TODO if("l_hand", "r_hand") var/c_hand @@ -89,23 +94,17 @@ emp_act else c_hand = r_hand - if(c_hand) + if(c_hand && (stun_amount || agony_amount > 10)) //Not only do you need to guess the correct hand, but you also have a 50% (and increases with distance, in the case of tasers) miss chance when targeting the hands //Since you can disarm someone by spamming disarm with a 60% success rate, it seems fair to have this be an automatic disarm, even for tasers. msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") u_equip(c_hand) - var/datum/organ/external/affected = get_organ(def_zone) if (affected.status & ORGAN_ROBOT) emote("me", 1, "drops what they were holding, their [affected.display_name] malfunctioning!") else var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.display_name]!") - - var/datum/organ/external/affected = get_organ(check_zone(def_zone)) - var/siemens_coeff = get_siemens_coefficient_organ(affected) - stun_amount *= siemens_coeff - agony_amount *= siemens_coeff ..(stun_amount, agony_amount, def_zone) From 71e54111ab8132aeb67038226e2b794d27b40266 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 18:10:11 -0400 Subject: [PATCH 67/75] Handcuffs now require an aggressive grab --- code/game/objects/items/weapons/handcuffs.dm | 133 ++++++++---------- .../mob/living/carbon/human/inventory.dm | 12 +- 2 files changed, 72 insertions(+), 73 deletions(-) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7424c666bec..4089a586ca0 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -14,83 +14,59 @@ origin_tech = "materials=1" var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes + var/cuff_sound = 'sound/weapons/handcuffs.ogg' /obj/item/weapon/handcuffs/attack(mob/living/carbon/C as mob, mob/user as mob) - if(istype(src, /obj/item/weapon/handcuffs/cyborg) && isrobot(user)) - if(!C.handcuffed) - var/turf/p_loc = user.loc - var/turf/p_loc_m = C.loc - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - for(var/mob/O in viewers(user, null)) - O.show_message("\red [user] is trying to put handcuffs on [C]!", 1) - spawn(30) - if(!C) return - if(p_loc == user.loc && p_loc_m == C.loc) - C.handcuffed = new /obj/item/weapon/handcuffs(C) - C.update_inv_handcuffed() - - else - if ((CLUMSY in usr.mutations) && prob(50)) - usr << "\red Uh ... how do those things work?!" - if (istype(C, /mob/living/carbon/human)) - if(!C.handcuffed) - var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) - O.source = user - O.target = user - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = user.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - O.process() + if (!istype(user, /mob/living/carbon/human)) + user << "\red You don't have the dexterity to do this!" + return + if ((CLUMSY in usr.mutations) && prob(50)) + user << "\red Uh ... how do those things work?!" + place_handcuffs(user, user) + return + if(!C.handcuffed) + //check for an aggressive grab + for (var/obj/item/weapon/grab/G in C.grabbed_by) + if (G.loc == user && G.state == GRAB_AGGRESSIVE) + place_handcuffs(C, user) return - return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - usr << "\red You don't have the dexterity to do this!" - return - if (istype(C, /mob/living/carbon/human)) - if(!C.handcuffed) + user << "\red You need to have a firm grip on [C] before you can put \the [src] on!" - C.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [C.name] ([C.ckey])") - msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)]") +/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src.loc, cuff_sound, 30, 1, -2) - var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) - O.source = user - O.target = C - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = C.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - if(istype(src, /obj/item/weapon/handcuffs/cable)) - feedback_add_details("handcuffs","C") - playsound(src.loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) - else - feedback_add_details("handcuffs","H") - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - O.process() - return - else - if(!C.handcuffed) - var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) - O.source = user - O.target = C - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = C.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - if(istype(src, /obj/item/weapon/handcuffs/cable)) - playsound(src.loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) - else - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - O.process() - return - return + if (ishuman(target)) + var/mob/living/carbon/human/H = target + H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") + msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]") + + var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) + O.source = user + O.target = H + O.item = user.get_active_hand() + O.s_loc = user.loc + O.t_loc = H.loc + O.place = "handcuff" + H.requests += O + spawn( 0 ) + feedback_add_details("handcuffs","H") + O.process() + return + + if (ismonkey(target)) + var/mob/living/carbon/monkey/M = target + var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.get_active_hand() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return var/last_chew = 0 /mob/living/carbon/human/RestrainedClickOn(var/atom/A) @@ -122,6 +98,7 @@ var/last_chew = 0 desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_white" breakouttime = 300 //Deciseconds = 30s + cuff_sound = 'sound/weapons/cablecuff.ogg' /obj/item/weapon/handcuffs/cable/red color = "#DD0000" @@ -162,3 +139,15 @@ var/last_chew = 0 /obj/item/weapon/handcuffs/cyborg dispenser = 1 + +/obj/item/weapon/handcuffs/cyborg/attack(mob/living/carbon/C as mob, mob/user as mob) + if(!C.handcuffed) + var/turf/p_loc = user.loc + var/turf/p_loc_m = C.loc + playsound(src.loc, cuff_sound, 30, 1, -2) + user.visible_message("\red [user] is trying to put handcuffs on [C]!") + spawn(30) + if(!C) return + if(p_loc == user.loc && p_loc_m == C.loc) + C.handcuffed = new /obj/item/weapon/handcuffs(C) + C.update_inv_handcuffed() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index b1e6af0cedd..124aec89e3a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -671,10 +671,20 @@ It can still be worn/put on as normal. slot_to_process = slot_back if (target.back) strip_item = target.back - if("handcuff") + if("handcuff") slot_to_process = slot_handcuffed if (target.handcuffed) strip_item = target.handcuffed + else + //check that we are still grabbing them + var/grabbing = 0 + for (var/obj/item/weapon/grab/G in target.grabbed_by) + if (G.loc == source && G.state == GRAB_AGGRESSIVE) + grabbing = 1 + if (!grabbing) + slot_to_process = null + source << "\red Your grasp was broken before you could restrain [target]!" + if("legcuff") slot_to_process = slot_legcuffed if (target.legcuffed) From 768019b9188376ac82543e8c76e3d458bd5c806f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 18:49:32 -0400 Subject: [PATCH 68/75] Stunbaton fixes and cleanup Apparently harm intent is "hurt", not "harm" --- code/game/objects/items/weapons/stunbaton.dm | 62 +++++++++---------- .../mob/living/carbon/human/human_damage.dm | 15 +++-- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 3f365b46151..e3b5b8d0c5e 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -111,52 +111,50 @@ var/stun = stunforce var/mob/living/L = M - var/contact = 1 - var/target_zone - if(user.a_intent == "harm") - contact = ..() + var/target_zone = check_zone(user.zone_sel.selecting) + if(user.a_intent == "hurt") + if (!..()) //item/attack() does it's own messaging and logs + return 0 // item/attack() will return 1 if they hit, 0 if they missed. agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. stun *= 0.5 - //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they prodded the chest. - target_zone = "chest" + //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to. else //copied from human_defense.dm - human defence code should really be refactored some time. if (ishuman(L)) user.lastattacked = L //are these used at all, if we have logs? L.lastattacker = user - - target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L) - if(user == L) // Attacking yourself can't miss - target_zone = check_zone(user.zone_sel.selecting) + + if (user != L) // Attacking yourself can't miss + target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L) + if(!target_zone) - contact = 0 - - //put this here to avoid duplicate messages and logs from ..() above - if (!contact) - L.visible_message("\red [user] misses [L] with \the [src]!") + L.visible_message("\red [user] misses [L] with \the [src]!") + return 0 + + var/mob/living/carbon/human/H = L + var/datum/organ/external/affecting = H.get_organ(target_zone) + if (affecting) + if(!status) + L.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]. Luckily it was off.") + return 1 + else + H.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]!") else if(!status) L.visible_message("[L] has been prodded with [src] by [user]. Luckily it was off.") + return 1 else - //unfortunately we can't tuck this away into human/stun_effect_act()... - if (ishuman(L)) - var/mob/living/carbon/human/H = L - var/datum/organ/external/affecting = H.get_organ(target_zone) - if (affecting) - H.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]!") - else - L.visible_message("[L] has been prodded with [src] by [user]!") + L.visible_message("[L] has been prodded with [src] by [user]!") //stun effects - if (contact) - msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - - L.stun_effect_act(stun, agony, target_zone, src) - - playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") - - deductcharge(hitcost) + L.stun_effect_act(stun, agony, target_zone, src) + + playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) + msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].") + + deductcharge(hitcost) + + return 1 /obj/item/weapon/melee/baton/emp_act(severity) if(bcell) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 6c2ec1cea08..22bb59f1caf 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -259,13 +259,21 @@ This function restores all organs. /mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null) - handle_suit_punctures(damagetype, damage) - //visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]") + + //Handle other types of damage if((damagetype != BRUTE) && (damagetype != BURN)) + if(damagetype == HALLOSS) + if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) + emote("scream") + + ..(damage, damagetype, def_zone, blocked) return 1 + //Handle BRUTE and BURN damage + handle_suit_punctures(damagetype, damage) + if(blocked >= 2) return 0 var/datum/organ/external/organ = null @@ -292,9 +300,6 @@ This function restores all organs. damage = damage*species.burn_mod if(organ.take_damage(0, damage, sharp, edge, used_weapon)) UpdateDamageIcon() - if(HALLOSS) - if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) - emote("scream") // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). updatehealth() From 63aab94d3c687619153f13cf5fca95b575197c14 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 31 Jul 2014 19:43:36 -0400 Subject: [PATCH 69/75] Cleans up weapon embedding code Removed weapon embedding from human/apply_damage(), as it didn't really belong there. As well, used_weapon is intended mainly for autopsy info, so it didn't seem appropriate to use it to embed things. --- .../mob/living/carbon/human/human_damage.dm | 15 --------- .../mob/living/carbon/human/human_defense.dm | 33 +++++++++++++++++++ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 22bb59f1caf..bc6d2832e6a 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -304,19 +304,4 @@ This function restores all organs. // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). updatehealth() hud_updateflag |= 1 << HEALTH_HUD - - //Embedded object code. - if(!organ) return - if(istype(used_weapon,/obj/item)) - var/obj/item/W = used_weapon - if (!W.is_robot_module()) - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = sharp? damage/W.w_class : damage/(W.w_class*3) - var/embed_threshold = sharp? 5*W.w_class : 15*W.w_class - - //Sharp objects will always embed if they do enough damage. - //Thrown objects have some momentum already and have a small chance to embed even if the damage is below the threshold - if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc) && prob(damage/(10*W.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) - organ.embed(W) - return 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0cc7a4f7169..2db921a444e 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -301,6 +301,20 @@ emp_act if(bloody) bloody_body(src) + + //Melee weapon embedded object code. + if (I.damtype == BRUTE && !I.is_robot_module()) + var/damage = I.force + if (armor) + damage /= armor+1 + + //blunt objects should really not be embedding in things unless a huge amount of force is involved + 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))) + affecting.embed(I) return 1 //this proc handles being hit by a thrown atom @@ -354,6 +368,24 @@ emp_act if(!istype(src,/mob/living/simple_animal/mouse)) msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") + //thrown weapon embedded object code. + if(dtype == BRUTE && istype(O,/obj/item)) + var/obj/item/I = O + if (!I.is_robot_module()) + var/sharp = is_sharp(I) + var/damage = throw_damage + if (armor) + damage /= armor+1 + + //blunt objects should really not be embedding in things unless a huge amount of force is involved + var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3) + var/embed_threshold = sharp? 5*I.w_class : 15*I.w_class + + //Sharp objects will always embed if they do enough damage. + //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold + if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) + affecting.embed(I) + // Begin BS12 momentum-transfer code. if(O.throw_source && speed >= 15) var/obj/item/weapon/W = O @@ -374,6 +406,7 @@ emp_act src.anchored = 1 src.pinned += O + /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) if (gloves) gloves.add_blood(source) From c416205c7d3973c86bd823d6111f5473b3cc5e53 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Fri, 1 Aug 2014 09:17:26 +0200 Subject: [PATCH 70/75] Moves robot/drone specific New()-code into their respective classes, handling it using proc-overloads. Also re-arranges robot init() code to prevent a runtime error when attempting to synch photos with the Master AI. --- .../mob/living/silicon/robot/drone/drone.dm | 5 +++- .../modules/mob/living/silicon/robot/robot.dm | 27 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index cd0cbc9e2ce..272c3a11847 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -62,7 +62,10 @@ updateicon() /mob/living/silicon/robot/drone/init() - new/obj/item/device/camera/siliconcam/drone_camera(src) + laws = new /datum/ai_laws/drone() + connected_ai = null + + aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src) playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) //Redefining some robot procs... diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4daa0f5cf8e..7231d89585d 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -88,19 +88,7 @@ hands.icon_state = "standard" icon_state = "secborg" modtype = "Security" - else if(istype(src,/mob/living/silicon/robot/drone)) - laws = new /datum/ai_laws/drone() - connected_ai = null - else - laws = new /datum/ai_laws/nanotrasen() - connected_ai = select_active_ai_with_fewest_borgs() - if(connected_ai) - connected_ai.connected_robots += src - lawsync() - photosync() - lawupdate = 1 - else - lawupdate = 0 + init() radio = new /obj/item/device/radio/borg(src) if(!scrambledcodes && !camera) @@ -138,10 +126,19 @@ hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - init() /mob/living/silicon/robot/proc/init() - new/obj/item/device/camera/siliconcam/robot_camera(src) + aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) + laws = new /datum/ai_laws/nanotrasen() + connected_ai = select_active_ai_with_fewest_borgs() + if(connected_ai) + connected_ai.connected_robots += src + lawsync() + photosync() + lawupdate = 1 + else + lawupdate = 0 + playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) // setup the PDA and its name From 8104928e7515441ca44e912ac265116f1c8d3cc2 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Fri, 1 Aug 2014 10:36:03 +0200 Subject: [PATCH 71/75] Creates a shared proc for applying AI verbs. DRY. Arranges some consistency among verbs. Fixes #5867 as well as a couple other missing verbs. --- code/game/machinery/camera/tracking.dm | 4 ++-- code/modules/mob/living/silicon/ai/ai.dm | 21 ++++++++++++++----- .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/new_player/new_player.dm | 2 +- code/modules/mob/transform_procs.dm | 12 +---------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 6ca6257cc2c..a80d687f4d7 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -93,8 +93,8 @@ /mob/living/silicon/ai/proc/ai_remove_location(loc in sorted_stored_locations()) set category = "AI Commands" - set name = "Remove Camera Location" - set desc = "Removes the selected camera location" + set name = "Delete Camera Location" + set desc = "Deletes the selected camera location" if (!(loc in stored_locations)) src << "\red Location [loc] not found" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0fe0ddc93d6..ff0c13c2fb7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -53,6 +53,20 @@ var/list/ai_list = list() var/datum/trackable/track = null var/last_announcement = "" +proc/add_ai_verbs(var/mob/M) + M.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle + M.verbs += /mob/living/silicon/ai/proc/ai_camera_track + M.verbs += /mob/living/silicon/ai/proc/ai_camera_list + M.verbs += /mob/living/silicon/ai/proc/ai_goto_location + M.verbs += /mob/living/silicon/ai/proc/ai_remove_location + M.verbs += /mob/living/silicon/ai/proc/ai_hologram_change + M.verbs += /mob/living/silicon/ai/proc/ai_network_change + M.verbs += /mob/living/silicon/ai/proc/ai_roster + M.verbs += /mob/living/silicon/ai/proc/ai_statuschange + M.verbs += /mob/living/silicon/ai/proc/ai_store_location + M.verbs += /mob/living/silicon/ai/proc/control_integrated_radio + M.verbs += /mob/living/silicon/ai/proc/toggle_camera_light + /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) var/list/possibleNames = ai_names @@ -94,10 +108,7 @@ var/list/ai_list = list() aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src) if (istype(loc, /turf)) - verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ - /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \ - /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ - /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrateed_radio) + add_ai_verbs(src) //Languages add_language("Sol Common", 0) @@ -750,7 +761,7 @@ var/list/ai_list = list() else return ..() -/mob/living/silicon/ai/proc/control_integrateed_radio() +/mob/living/silicon/ai/proc/control_integrated_radio() set name = "Radio Settings" set desc = "Allows you to change settings of your radio." set category = "AI Commands" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4daa0f5cf8e..26d4dfa6037 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -345,7 +345,7 @@ // this verb lets cyborgs see the stations manifest /mob/living/silicon/robot/verb/cmd_station_manifest() set category = "Robot Commands" - set name = "Show Station Manifest" + set name = "Show Crew Manifest" show_station_manifest() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 0f18e02cf38..3338989ebe3 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -436,7 +436,7 @@ proc/ViewManifest() var/dat = "" - dat += "

Crew Manifest

" + dat += "

Show Crew Manifest

" dat += data_core.get_manifest(OOC = 1) src << browse(dat, "window=manifest;size=370x420;can_close=1") diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6dbd8ffe0c7..7a6d7140d17 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -120,17 +120,7 @@ O.show_laws() O << "These laws may be changed by other players, or by you being the traitor." - O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle - O.verbs += /mob/living/silicon/ai/proc/show_laws_verb - O.verbs += /mob/living/silicon/ai/proc/ai_camera_track - O.verbs += /mob/living/silicon/ai/proc/ai_alerts - O.verbs += /mob/living/silicon/ai/proc/ai_camera_list - O.verbs += /mob/living/silicon/ai/proc/ai_statuschange - O.verbs += /mob/living/silicon/ai/proc/ai_roster - O.verbs += /mob/living/silicon/ai/proc/ai_store_location - O.verbs += /mob/living/silicon/ai/proc/ai_goto_location - O.verbs += /mob/living/silicon/ai/proc/ai_remove_location - + add_ai_verbs(O) O.job = "AI" O.rename_self("ai",1) From 0868c344ccaa4e883cbbdc2c567dc567a31f1d90 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 1 Aug 2014 23:50:33 +0930 Subject: [PATCH 72/75] Adjustments and a typo fix. --- code/game/gamemodes/calamity/calamity.dm | 27 ------------------- code/game/gamemodes/game_mode.dm | 25 +++++++++++++++++ code/modules/mob/living/carbon/carbon.dm | 2 +- .../modules/mob/living/simple_animal/borer.dm | 2 ++ 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 52f6501245e..c2ab3202f4f 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -7,33 +7,6 @@ * ~ Zuhayr */ -//temp, move these somewhere appropriate -/proc/show_generic_antag_text(var/datum/mind/player) - if(player.current) - player.current << \ - "You are an antagonist! Within the rules, \ - try to act as an opposing force to the crew. Further RP and try to make sure \ - other players have fun! If you are confused or at a loss, always adminhelp, \ - and before taking extreme actions, please try to also contact the administration! \ - Think through your actions and make the roleplay immersive! Please remember all \ - rules aside from those without explicit exceptions apply to antagonists." - -/proc/show_objectives(var/datum/mind/player) - - if(!player || !player.current) return - - if(config.objectives_disabled) - show_generic_antag_text(player) - return - - var/obj_count = 1 - player.current << "\blue Your current objectives:" - for(var/datum/objective/objective in player.objectives) - player.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - -/datum/game_mode/var/list/borers = list() - /datum/game_mode/calamity name = "calamity" config_tag = "calamity" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 415d1362be7..a566c2d101c 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -481,3 +481,28 @@ proc/get_nt_opposed() dudes += man if(dudes.len == 0) return null return pick(dudes) + +//Announces objectives/generic antag text. +/proc/show_generic_antag_text(var/datum/mind/player) + if(player.current) + player.current << \ + "You are an antagonist! Within the rules, \ + try to act as an opposing force to the crew. Further RP and try to make sure \ + other players have fun! If you are confused or at a loss, always adminhelp, \ + and before taking extreme actions, please try to also contact the administration! \ + Think through your actions and make the roleplay immersive! Please remember all \ + rules aside from those without explicit exceptions apply to antagonists." + +/proc/show_objectives(var/datum/mind/player) + + if(!player || !player.current) return + + if(config.objectives_disabled) + show_generic_antag_text(player) + return + + var/obj_count = 1 + player.current << "\blue Your current objectives:" + for(var/datum/objective/objective in player.objectives) + player.current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 22989c3f71e..4de06df6519 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -470,7 +470,7 @@ return if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excretea larva from your sluglike body." + src << "\red Your host twitches and quivers as you rapidly excrete a larva from your sluglike body." visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 B.has_reproduced = 1 diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 6033c02a256..7ffd57e96a2 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -1,3 +1,5 @@ +/datum/game_mode/var/list/borers = list() + /mob/living/captive_brain name = "host brain" real_name = "host brain" From 96c70126084f8afe5ce1c0a96ae691e456bd3df6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 1 Aug 2014 23:54:38 +0930 Subject: [PATCH 73/75] Fixed part of the ninja objective. --- code/game/gamemodes/objective.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index b7c44a1e3ef..82619c2796f 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -958,7 +958,8 @@ datum/objective/heist/inviolate_death /datum/objective/ninja_highlander/check_completion() if(owner) for(var/datum/mind/ninja in ticker.mode.ninjas) - if(ninja.current.stat < 2 || owner == ninja) return 0 + if(ninja != owner) + if(ninja.current.stat < 2) return 0 return 1 return 0 From 9eed4422ff18f1eeb36dea16311891d32d81c7f6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 2 Aug 2014 00:15:49 +0930 Subject: [PATCH 74/75] Lowercasing some Del() calls. --- code/game/gamemodes/heist/heist.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index b8b991f4d4e..320e89d9b2f 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -285,6 +285,6 @@ datum/game_mode/proc/auto_declare_completion_heist() var/area/skipjack = locate(/area/shuttle/vox/station) for (var/mob/living/M in skipjack.contents) //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. - Del(M) + del(M) for (var/obj/O in skipjack.contents) - Del(O) //no hiding in lockers or anything \ No newline at end of file + del(O) //no hiding in lockers or anything \ No newline at end of file From 91d503e209a68f8583b212f4f175fe9acbbfb9d6 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 1 Aug 2014 23:53:33 -0400 Subject: [PATCH 75/75] Removes duplicate code from human/bullet_act Also moves stun projectile handling up to living/bullet_act, as all the human specific code has been moved to other procs --- .../mob/living/carbon/human/human_defense.dm | 28 +------------------ code/modules/mob/living/living_defense.dm | 14 ++++++++-- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 2db921a444e..9ef3ed5cd09 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -12,21 +12,6 @@ emp_act var/datum/organ/external/organ = get_organ(check_zone(def_zone)) - //Being hit while using a cloaking device - var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) - if(C && C.active) - C.attack_self(src)//Should shut it off - update_icons() - src << "\blue Your [C.name] was disrupted!" - Stun(2) - - //Being hit while using a deadman switch - if(istype(equipped(),/obj/item/device/assembly/signaler)) - var/obj/item/device/assembly/signaler/signaler = equipped() - if(signaler.deadman && prob(80)) - src.visible_message("\red [src] triggers their deadman's switch!") - signaler.signal() - //Shields if(check_shields(P.damage, "the [P.name]")) P.on_hit(src, 2, def_zone) @@ -56,13 +41,6 @@ emp_act P.xo = new_x - curloc.x return -1 // complete projectile permutation - - //Tasers - if(istype(P, /obj/item/projectile/beam/stun)) - stun_effect_act(0, P.agony, def_zone, P) - src <<"\red You have been hit by [P]!" - del P - return //Shrapnel if (P.damage_type == BRUTE) @@ -84,9 +62,7 @@ emp_act switch (def_zone) if("head") - //agony_amount *= 1.25 - agony_amount *= 1.50 //Targeting the head does add risk, so it should probably do more damage than average. - //if("l_foot", "r_foot") //TODO + agony_amount *= 1.50 if("l_hand", "r_hand") var/c_hand if (def_zone == "l_hand") @@ -95,8 +71,6 @@ emp_act c_hand = r_hand if(c_hand && (stun_amount || agony_amount > 10)) - //Not only do you need to guess the correct hand, but you also have a 50% (and increases with distance, in the case of tasers) miss chance when targeting the hands - //Since you can disarm someone by spamming disarm with a 60% success rate, it seems fair to have this be an automatic disarm, even for tasers. msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") u_equip(c_hand) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index bfea9396dd3..6f308e6add4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -38,6 +38,9 @@ /mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone) + flash_weak_pain() + + //Being hit while using a cloaking device var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) if(C && C.active) C.attack_self(src)//Should shut it off @@ -45,14 +48,21 @@ src << "\blue Your [C.name] was disrupted!" Stun(2) - flash_weak_pain() - + //Being hit while using a deadman switch if(istype(equipped(),/obj/item/device/assembly/signaler)) var/obj/item/device/assembly/signaler/signaler = equipped() if(signaler.deadman && prob(80)) src.visible_message("\red [src] triggers their deadman's switch!") signaler.signal() + //Stun Beams + if(istype(P, /obj/item/projectile/beam/stun) || istype(P, /obj/item/projectile/bullet/stunshot)) + stun_effect_act(0, P.agony, def_zone, P) + src <<"\red You have been hit by [P]!" + del P + return + + //Armor var/absorb = run_armor_check(def_zone, P.flag) var/proj_sharp = is_sharp(P) var/proj_edge = has_edge(P)