From 6c9be9c82d531cbd9e898ab4d2f930b825dd6cfe Mon Sep 17 00:00:00 2001 From: c0 Date: Thu, 25 Feb 2016 12:50:45 +0300 Subject: [PATCH 01/16] Adds breathing tube implant, changes how heart works, reworks arm-mounted implants --- code/_onclick/hud/screen_objects.dm | 80 +++---- .../miniantags/slaughter/slaughter.dm | 3 + code/game/objects/items/devices/multitool.dm | 8 + code/game/objects/items/devices/scanners.dm | 2 +- code/game/objects/items/weapons/defib.dm | 2 +- code/game/objects/items/weapons/kitchen.dm | 8 +- .../game/objects/items/weapons/tanks/tanks.dm | 17 +- code/game/objects/items/weapons/tools.dm | 39 ++++ code/modules/mob/living/carbon/carbon.dm | 7 +- .../mob/living/carbon/carbon_defines.dm | 5 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/life.dm | 3 + .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/mob_grab.dm | 10 +- code/modules/projectiles/guns/mounted.dm | 18 +- .../research/designs/medical_designs.dm | 21 +- code/modules/surgery/organ_manipulation.dm | 4 +- code/modules/surgery/organs/augments_arms.dm | 182 ++++++++++++++++ code/modules/surgery/organs/augments_chest.dm | 106 ++++++++++ code/modules/surgery/organs/augments_eyes.dm | 2 +- .../surgery/organs/augments_internal.dm | 196 ++---------------- code/modules/surgery/organs/helpers.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 56 ++++- icons/obj/items_cyborg.dmi | Bin 0 -> 2327 bytes icons/obj/surgery.dmi | Bin 20026 -> 23113 bytes tgstation.dme | 2 + 26 files changed, 510 insertions(+), 269 deletions(-) create mode 100644 code/modules/surgery/organs/augments_arms.dm create mode 100644 code/modules/surgery/organs/augments_chest.dm create mode 100644 icons/obj/items_cyborg.dmi diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index fd3bc349f4c..54f015fdf44 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -117,47 +117,49 @@ C << "You are no longer running on internals." icon_state = "internal0" else - if(!istype(C.wear_mask, /obj/item/clothing/mask)) - C << "You are not wearing an internals mask!" - return 1 - else - var/obj/item/clothing/mask/M = C.wear_mask - if(M.mask_adjusted) // if mask on face but pushed down - M.adjustmask(C) // adjust it back - if( !(M.flags & MASKINTERNALS) ) + if(!C.getorganslot("breathing_tube")) + if(!istype(C.wear_mask, /obj/item/clothing/mask)) C << "You are not wearing an internals mask!" - return - if(istype(C.l_hand, /obj/item/weapon/tank)) - C << "You are now running on internals from the [C.l_hand] on your left hand." - C.internal = C.l_hand - else if(istype(C.r_hand, /obj/item/weapon/tank)) - C << "You are now running on internals from the [C.r_hand] on your right hand." - C.internal = C.r_hand - else if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(istype(H.s_store, /obj/item/weapon/tank)) - H << "You are now running on internals from the [H.s_store] on your [H.wear_suit]." - H.internal = H.s_store - else if(istype(H.belt, /obj/item/weapon/tank)) - H << "You are now running on internals from the [H.belt] on your belt." - H.internal = H.belt - else if(istype(H.l_store, /obj/item/weapon/tank)) - H << "You are now running on internals from the [H.l_store] in your left pocket." - H.internal = H.l_store - else if(istype(H.r_store, /obj/item/weapon/tank)) - H << "You are now running on internals from the [H.r_store] in your right pocket." - H.internal = H.r_store - - //Seperate so CO2 jetpacks are a little less cumbersome. - if(!C.internal && istype(C.back, /obj/item/weapon/tank)) - C << "You are now running on internals from the [C.back] on your back." - C.internal = C.back - - if(C.internal) - icon_state = "internal1" + return 1 else - C << "You don't have an oxygen tank!" - return + var/obj/item/clothing/mask/M = C.wear_mask + if(M.mask_adjusted) // if mask on face but pushed down + M.adjustmask(C) // adjust it back + if( !(M.flags & MASKINTERNALS) ) + C << "You are not wearing an internals mask!" + return + + if(istype(C.l_hand, /obj/item/weapon/tank)) + C << "You are now running on internals from the [C.l_hand] on your left hand." + C.internal = C.l_hand + else if(istype(C.r_hand, /obj/item/weapon/tank)) + C << "You are now running on internals from the [C.r_hand] on your right hand." + C.internal = C.r_hand + else if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(istype(H.s_store, /obj/item/weapon/tank)) + H << "You are now running on internals from the [H.s_store] on your [H.wear_suit]." + H.internal = H.s_store + else if(istype(H.belt, /obj/item/weapon/tank)) + H << "You are now running on internals from the [H.belt] on your belt." + H.internal = H.belt + else if(istype(H.l_store, /obj/item/weapon/tank)) + H << "You are now running on internals from the [H.l_store] in your left pocket." + H.internal = H.l_store + else if(istype(H.r_store, /obj/item/weapon/tank)) + H << "You are now running on internals from the [H.r_store] in your right pocket." + H.internal = H.r_store + + //Seperate so CO2 jetpacks are a little less cumbersome. + if(!C.internal && istype(C.back, /obj/item/weapon/tank)) + C << "You are now running on internals from the [C.back] on your back." + C.internal = C.back + + if(C.internal) + icon_state = "internal1" + else + C << "You don't have an oxygen tank!" + return C.update_action_buttons_icon() /obj/screen/mov_intent diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 684ee437c89..e17f41445d0 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -112,3 +112,6 @@ ..() if(M.mind) M.mind.remove_spell(/obj/effect/proc_holder/spell/bloodcrawl) + +/obj/item/organ/internal/heart/demon/Stop() + return 0 // Always beating. diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index d5d116a4392..7b935abfdb5 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -63,3 +63,11 @@ track_delay = world.time + 10 // 1 second return + + + +/obj/item/device/multitool/cyborg + name = "multitool" + desc = "Optimised and stripped-down version of a regular multitool." + icon = 'icons/obj/items_cyborg.dmi' + toolspeed = 2 \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index ae8d23b9ecb..68052b14958 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -129,7 +129,7 @@ MASS SPECTROMETER if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.heart_attack) + if(H.heart_attack && H.stat != DEAD) user << "Subject suffering from heart attack: Apply defibrillator immediately!" user << "Analyzing results for [M]:\n\tOverall status: [mob_status]" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 0152f03c41d..88c1ab6393c 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -548,7 +548,7 @@ /obj/item/weapon/twohanded/shockpaddles/syndicate name = "syndicate defibrillator paddles" - desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and todeliver powerful shocks offensively." + desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively." combat = 1 icon = 'icons/obj/weapons.dmi' icon_state = "defibpaddles0" diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index f92335d09d0..640a14dec73 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -98,6 +98,12 @@ origin_tech = "materials=2;combat=4" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") +/obj/item/weapon/kitchen/knife/combat/cyborg + name = "cyborg knife" + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "knife" + desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." + /obj/item/weapon/kitchen/knife/carrotshiv name = "carrot shiv" icon_state = "carrotshiv" @@ -118,4 +124,4 @@ w_class = 3 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") -/* Trays moved to /obj/item/weapon/storage/bag */ +/* Trays moved to /obj/item/weapon/storage/bag */ diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 58b230917d2..f62985f47f3 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -28,14 +28,15 @@ H.internal = null H.update_internals_hud_icon(0) else - if(!H.wear_mask) - H << "You need a mask!" - return - if(H.wear_mask.mask_adjusted) - H.wear_mask.adjustmask(H) - if(!(H.wear_mask.flags & MASKINTERNALS)) - H << "[H.wear_mask] can't use [src]!" - return + if(!H.getorganslot("breathing_tube")) + if(!H.wear_mask) + H << "You need a mask!" + return + if(H.wear_mask.mask_adjusted) + H.wear_mask.adjustmask(H) + if(!(H.wear_mask.flags & MASKINTERNALS)) + H << "[H.wear_mask] can't use [src]!" + return if(H.internal) H << "You switch your internals to [src]." diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 67696207645..3c546350790 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -34,6 +34,12 @@ playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) return (BRUTELOSS) +/obj/item/weapon/wrench/cyborg + name = "automatic wrench" + desc = "An advanced robotic wrench. Can be found in construction cyborgs." + icon = 'icons/obj/items_cyborg.dmi' + toolspeed = 2 + /* * Screwdriver */ @@ -99,6 +105,17 @@ M = user return eyestab(M,user) +/obj/item/weapon/screwdriver/cyborg + name = "powered screwdriver" + desc = "An electrical screwdriver, designed to be both precise and quick." + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "screwdriver" + item_state = "screwdriver_brown" + toolspeed = 2 + +/obj/item/weapon/screwdriver/cyborg/New(loc, var/param_color = null) + return ..(loc, "cyborg") + /* * Wirecutters */ @@ -142,6 +159,16 @@ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1, -1) return (BRUTELOSS) + +/obj/item/weapon/wirecutters/cyborg + name = "wirecutters" + desc = "This cuts wires." + icon = 'icons/obj/items_cyborg.dmi' + toolspeed = 2 + +/obj/item/weapon/wirecutters/cyborg/New(loc, var/param_color = null) + return ..(loc, "cyborg") + /* * Welding Tool */ @@ -396,6 +423,11 @@ origin_tech = "engineering=2" /obj/item/weapon/weldingtool/largetank/cyborg + name = "integrated welding tool" + desc = "An advanced welder designed to be used in robotic systems." + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "indwelder" + toolspeed = 2 /obj/item/weapon/weldingtool/largetank/flamethrower_screwdriver() return @@ -494,3 +526,10 @@ materials = list(MAT_METAL=70) icon_state = "crowbar_large" toolspeed = 2 + +/obj/item/weapon/crowbar/cyborg + name = "hydraulic crowbar" + desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs." + icon = 'icons/obj/items_cyborg.dmi' + force = 10 + toolspeed = 2 \ 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 b6b13b41669..458e37c3901 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -323,9 +323,10 @@ if(internal) internal = null update_internals_hud_icon(0) - else if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS)) - internal = ITEM - update_internals_hud_icon(1) + else if(ITEM && istype(ITEM, /obj/item/weapon/tank)) + if((wear_mask && (wear_mask.flags & MASKINTERNALS)) || getorganslot("breathing_tube")) + internal = ITEM + update_internals_hud_icon(1) visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].", \ "[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM].") diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 665ca0422be..544a023160b 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,8 +1,9 @@ /mob/living/carbon gender = MALE hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD) - var/list/stomach_contents = list() - var/list/internal_organs = list() //List of /obj/item/organ/internal in the mob. They don't go in the contents for some reason I don't want to know. + var/list/stomach_contents = list() + var/list/internal_organs = list() //List of /obj/item/organ/internal in the mob. They don't go in the contents for some reason I don't want to know. + var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index c7e5f8174fe..3e0ad9b5b3c 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -173,7 +173,7 @@ /mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1) if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) update_hair() - if(toggle_off && internal) + if(toggle_off && internal && !getorganslot("breathing_tube")) update_internals_hud_icon(0) internal = null if(C.flags_inv & HIDEEYES) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index ada5f67baf6..0c1bc7cf192 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -199,6 +199,9 @@ if(internal.loc != src) internal = null update_internals_hud_icon(0) + else if ((!wear_mask || !(wear_mask.flags & MASKINTERNALS)) && !getorganslot("breathing_tube")) + internal = null + update_internals_hud_icon(0) else update_internals_hud_icon(1) return internal.remove_air_volume(volume_needed) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index fb2e6646e18..de11726345d 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -453,7 +453,7 @@ if (WT.remove_fuel(0, user)) //The welder has 1u of fuel consumed by it's afterattack, so we don't need to worry about taking any away. if(src == user) user << "You start fixing youself..." - if(!do_after(user, 50/W.toolspeed, target = src)) + if(!do_after(user, 50, target = src)) return adjustBruteLoss(-30) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 4517dea695e..a29cc3b29fd 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -100,15 +100,18 @@ if(!affecting.buckled) affecting.loc = assailant.loc + var/breathing_tube = affecting.getorganslot("breathing_tube") + if(state >= GRAB_NECK) affecting.Stun(5) //It will hamper your voice, being choked and all. - if(isliving(affecting)) + if(isliving(affecting) && !breathing_tube) var/mob/living/L = affecting L.adjustOxyLoss(1) if(state >= GRAB_KILL) affecting.Weaken(5) //Should keep you down unless you get help. - affecting.losebreath = min(affecting.losebreath + 2, 3) + if(!breathing_tube) + affecting.losebreath = min(affecting.losebreath + 2, 3) /obj/item/weapon/grab/attack_self(mob/user) s_click(hud) @@ -165,7 +168,8 @@ add_logs(assailant, affecting, "strangled") assailant.changeNext_move(CLICK_CD_TKSTRANGLE) - affecting.losebreath += 1 + if(!affecting.getorganslot("breathing_tube")) + affecting.losebreath += 1 else if(assailant) assailant.visible_message("[assailant] is unable to tighten \his grip on [affecting]'s neck!") diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm index 84549c8e09f..177445f3b43 100644 --- a/code/modules/projectiles/guns/mounted.dm +++ b/code/modules/projectiles/guns/mounted.dm @@ -1,12 +1,11 @@ /obj/item/weapon/gun/energy/gun/advtaser/mounted name = "mounted taser" desc = "An arm mounted dual-mode weapon that fires electrodes and disabler shots." - icon_state = "armcannon" + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "taser" + item_state = "armcannonstun4" force = 5 selfcharge = 1 - flags = NODROP - slot_flags = null - w_class = 5 can_flashlight = 0 /obj/item/weapon/gun/energy/gun/advtaser/mounted/dropped()//if somebody manages to drop this somehow... @@ -15,16 +14,13 @@ /obj/item/weapon/gun/energy/laser/mounted name = "mounted laser" - desc = "An arm mounted cannon that fires lethal lasers. Doesn't come with a charge beam." - icon_state = "armcannon" + desc = "An arm mounted cannon that fires lethal lasers." + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "laser" item_state = "armcannonlase" force = 5 selfcharge = 1 - flags = NODROP - slot_flags = null - w_class = 5 - materials = null /obj/item/weapon/gun/energy/laser/mounted/dropped() ..() - src.loc = null + src.loc = null \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index aaa5d9df810..028bc09f8ae 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -121,6 +121,17 @@ build_path = /obj/item/organ/internal/cyberimp/eyes/shield category = list("Misc", "Medical Designs") +/datum/design/cyberimp_breather + name = "Breathing Tube implant" + desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." + id = "ci-breather" + req_tech = list("materials" = 3, "biotech" = 3) + build_type = PROTOLATHE | MECHFAB + construction_time = 35 + materials = list(MAT_METAL = 200, MAT_GLASS = 250) + build_path = /obj/item/organ/internal/cyberimp/mouth/breathing_tube + category = list("Misc", "Medical Designs") + /datum/design/cyberimp_medical_hud name = "Medical HUD implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." @@ -174,7 +185,7 @@ construction_time = 60 materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 400, MAT_GOLD = 400) build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop - category = list("Medical Designs") + category = list("Misc", "Medical Designs") /datum/design/cyberimp_antistun name = "CNS Rebooter implant" @@ -185,7 +196,7 @@ construction_time = 60 materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 500, MAT_GOLD = 1000) build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun - category = list("Medical Designs") + category = list("Misc", "Medical Designs") /datum/design/cyberimp_nutriment name = "Nutriment pump implant" @@ -196,7 +207,7 @@ construction_time = 40 materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 500) build_path = /obj/item/organ/internal/cyberimp/chest/nutriment - category = list("Medical Designs") + category = list("Misc", "Medical Designs") /datum/design/cyberimp_nutriment_plus name = "Nutriment pump implant PLUS" @@ -207,7 +218,7 @@ construction_time = 50 materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 750) build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus - category = list("Medical Designs") + category = list("Misc", "Medical Designs") /datum/design/cyberimp_reviver name = "Reviver implant" @@ -237,7 +248,7 @@ /datum/design/implantcase name = "Implant Case" - desc = "A glass case containing an implant." + desc = "A glass case for containing an implant." id = "implantcase" req_tech = list("materials" = 1, "biotech" = 2) build_type = PROTOLATHE diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 26de8b0b6a5..b0cc38c8dc8 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -7,13 +7,13 @@ requires_organic_bodypart = 0 /datum/surgery/organ_manipulation/soft - possible_locs = list("groin", "eyes", "mouth") + possible_locs = list("groin", "eyes", "mouth", "l_arm", "r_arm") steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/incise, /datum/surgery_step/manipulate_organs) /datum/surgery/organ_manipulation/alien name = "alien organ manipulation" - possible_locs = list("chest", "head", "groin", "eyes", "mouth") + possible_locs = list("chest", "head", "groin", "eyes", "mouth", "l_arm", "r_arm") species = list(/mob/living/carbon/alien/humanoid) steps = list(/datum/surgery_step/saw, /datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/manipulate_organs) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm new file mode 100644 index 00000000000..247bf322e02 --- /dev/null +++ b/code/modules/surgery/organs/augments_arms.dm @@ -0,0 +1,182 @@ +/obj/item/organ/internal/cyberimp/arm + name = "arm-mounted implant" + desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" + zone = "r_arm" + slot = "r_arm_device" + icon_state = "implant-toolkit" + w_class = 3 + actions_types = list(/datum/action/item_action/organ_action/toggle) + + var/list/items_list = list() + // Used to store a list of all items inside, for multi-item implants. + // I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. + + var/obj/item/holder = null + // You can use this var for item path, it would be converted into an item on New() + +/obj/item/organ/internal/cyberimp/arm/New() + ..() + if(ispath(holder)) + holder = new holder(src) + + update_icon() + slot = zone + "_device" + items_list = contents.Copy() + +/obj/item/organ/internal/cyberimp/arm/update_icon() + if(zone == "r_arm") + transform = null + else // Mirroring the icon + transform = matrix(-1, 0, 0, 0, 1, 0) + +/obj/item/organ/internal/cyberimp/arm/examine(mob/user) + ..() + user << "[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it." + +/obj/item/organ/internal/cyberimp/arm/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + if(zone == "r_arm") + zone = "l_arm" + else + zone = "r_arm" + slot = zone + "_device" + user << "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm." + update_icon() + else if(istype(W, /obj/item/weapon/card/emag)) + emag_act() + +/obj/item/organ/internal/cyberimp/arm/Remove(mob/living/carbon/M, special = 0) + Retract() + ..() + +/obj/item/organ/internal/cyberimp/arm/emag_act() + return 0 + +/obj/item/organ/internal/cyberimp/arm/gun/emp_act(severity) + if(prob(15/severity)) + owner << "[src] is hit by EMP!" + // give the owner an idea about why his implant is glitching + Retract() + ..() + +/obj/item/organ/internal/cyberimp/arm/proc/Retract() + if(!holder || (holder in src)) + return + + owner.visible_message("[owner] retracts [holder] back into \his [zone == "r_arm" ? "right" : "left"] arm.", + "[holder] snaps back into your [zone == "r_arm" ? "right" : "left"] arm.", + "You hear a short mechanical noise.") + + owner.unEquip(holder, 1) + holder.loc = src + holder = null + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + +/obj/item/organ/internal/cyberimp/arm/proc/Extend(var/obj/item/item) + if(!(item in src)) + return + + holder = item + + holder.flags |= NODROP + holder.unacidable = 1 + holder.slot_flags = null + holder.w_class = 5 + holder.materials = null + + var/arm_slot = (zone == "r_arm" ? slot_r_hand : slot_l_hand) + var/obj/item/arm_item = owner.get_item_by_slot(arm_slot) + + if(arm_item) + if(!owner.unEquip(arm_item)) + owner << "Your [arm_item] interferes with [src]!" + return + else + owner << "You drop [arm_item] to activate [src]!" + + if(zone == "r_arm" ? !owner.put_in_r_hand(holder) : !owner.put_in_l_hand(holder)) + owner << "Your [src] fails to activate!" + return + + // Activate the hand that now holds our item. + if(zone == "r_arm" ? owner.hand : !owner.hand) + owner.swap_hand() + + owner.visible_message("[owner] extends [holder] from \his [zone == "r_arm" ? "right" : "left"] arm.", + "You extend [holder] from your [zone == "r_arm" ? "right" : "left"] arm.", + "You hear a short mechanical noise.") + playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) + +/obj/item/organ/internal/cyberimp/arm/ui_action_click() + if(crit_fail || (!holder && !contents.len)) + owner << "The implant doesn't respond. It seems to be broken..." + return + + // You can emag the arm-mounted implant by activating it while holding emag in it's hand. + var/arm_slot = (zone == "r_arm" ? slot_r_hand : slot_l_hand) + if(istype(owner.get_item_by_slot(arm_slot), /obj/item/weapon/card/emag) && emag_act()) + return + + if(!holder || (holder in src)) + holder = null + if(contents.len == 1) + Extend(contents[1]) + else // TODO: make it similar to borg's storage-like module selection + var/obj/item/choise = input("Activate which item?", "Arm Implant", null, null) as null|anything in items_list + if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && istype(choise) && (choise in contents)) + // This monster sanity check is a nice example of how bad input() is. + Extend(choise) + else + Retract() + + +/obj/item/organ/internal/cyberimp/arm/gun/emp_act(severity) + if(prob(30/severity) && owner && !crit_fail) + Retract() + owner.visible_message("A loud bang comes from [owner]\'s [zone == "r_arm" ? "right" : "left"] arm!") + playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) + owner << "You feel an explosion erupt inside your [zone == "r_arm" ? "right" : "left"] arm as your implant breaks!" + owner.adjust_fire_stacks(20) + owner.IgniteMob() + owner.adjustFireLoss(25) + crit_fail = 1 + else // The gun will still discharge anyway. + ..() + + +/obj/item/organ/internal/cyberimp/arm/gun/laser + name = "arm-mounted laser implant" + desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_laser" + origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4;syndicate=5"//this is kinda nutty and i might lower it + holder = /obj/item/weapon/gun/energy/laser/mounted + +/obj/item/organ/internal/cyberimp/arm/gun/laser/l/zone = "l_arm" + + +/obj/item/organ/internal/cyberimp/arm/gun/taser + name = "arm-mounted taser implant" + desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_taser" + origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" + holder = /obj/item/weapon/gun/energy/gun/advtaser/mounted + +/obj/item/organ/internal/cyberimp/arm/gun/taser/l/zone = "l_arm" + + +/obj/item/organ/internal/cyberimp/arm/toolset + name = "integrated toolset implant" + desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm. Contains all neccessary tools." + origin_tech = "materials=5;engineering=5;biotech=4;powerstorage=3" + contents = newlist(/obj/item/weapon/screwdriver/cyborg, /obj/item/weapon/wrench/cyborg, /obj/item/weapon/weldingtool/largetank/cyborg, + /obj/item/weapon/crowbar/cyborg, /obj/item/weapon/wirecutters/cyborg, /obj/item/device/multitool/cyborg) + +/obj/item/organ/internal/cyberimp/arm/toolset/l/zone = "l_arm" + +/obj/item/organ/internal/cyberimp/arm/toolset/emag_act() + if(!(locate(/obj/item/weapon/kitchen/knife/combat/cyborg) in items_list)) + owner << "You unlock [src]'s integrated knife!" + items_list += new /obj/item/weapon/kitchen/knife/combat/cyborg(src) + return 1 + return 0 \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm new file mode 100644 index 00000000000..916051d133c --- /dev/null +++ b/code/modules/surgery/organs/augments_chest.dm @@ -0,0 +1,106 @@ +/obj/item/organ/internal/cyberimp/chest + name = "cybernetic torso implant" + desc = "implants for the organs in your torso" + icon_state = "chest_implant" + implant_overlay = "chest_implant_overlay" + zone = "chest" + +/obj/item/organ/internal/cyberimp/chest/nutriment + name = "Nutriment pump implant" + desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." + icon_state = "chest_implant" + implant_color = "#00AA00" + var/hunger_threshold = NUTRITION_LEVEL_STARVING + var/synthesizing = 0 + var/poison_amount = 5 + slot = "stomach" + origin_tech = "materials=5;programming=3;biotech=4" + +/obj/item/organ/internal/cyberimp/chest/nutriment/on_life() + if(synthesizing) + return + + if(owner.nutrition <= hunger_threshold) + synthesizing = 1 + owner << "You feel less hungry..." + owner.nutrition += 50 + spawn(50) + synthesizing = 0 + +/obj/item/organ/internal/cyberimp/chest/nutriment/emp_act(severity) + if(!owner) + return + owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning + owner << "You feel like your insides are burning." + + +/obj/item/organ/internal/cyberimp/chest/nutriment/plus + name = "Nutriment pump implant PLUS" + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + icon_state = "chest_implant" + implant_color = "#006607" + hunger_threshold = NUTRITION_LEVEL_HUNGRY + poison_amount = 10 + origin_tech = "materials=5;programming=3;biotech=5" + + + +/obj/item/organ/internal/cyberimp/chest/reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + icon_state = "chest_implant" + implant_color = "#AD0000" + origin_tech = "materials=6;programming=3;biotech=6;syndicate=4" + slot = "heartdrive" + var/revive_cost = 0 + var/reviving = 0 + var/cooldown = 0 + +/obj/item/organ/internal/cyberimp/chest/reviver/on_life() + if(reviving) + if(owner.stat == UNCONSCIOUS) + spawn(30) + if(prob(90) && owner.getOxyLoss()) + owner.adjustOxyLoss(-3) + revive_cost += 5 + if(prob(75) && owner.getBruteLoss()) + owner.adjustBruteLoss(-1) + revive_cost += 20 + if(prob(75) && owner.getFireLoss()) + owner.adjustFireLoss(-1) + revive_cost += 20 + if(prob(40) && owner.getToxLoss()) + owner.adjustToxLoss(-1) + revive_cost += 50 + else + cooldown = revive_cost + world.time + reviving = 0 + return + + if(cooldown > world.time) + return + if(owner.stat != UNCONSCIOUS) + return + if(owner.suiciding) + return + + revive_cost = 0 + reviving = 1 + +/obj/item/organ/internal/cyberimp/chest/reviver/emp_act(severity) + if(!owner) + return + + if(reviving) + revive_cost += 200 + else + cooldown += 200 + + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner + if(H.stat != DEAD && prob(50 / severity)) + H.heart_attack = 1 + spawn(600 / severity) + H.heart_attack = 0 + if(H.stat == CONSCIOUS) + H << "You feel your heart beating again!" \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 279f912ef06..1693d217906 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -116,7 +116,7 @@ implant_color = "#101010" flash_protect = 2 aug_message = null - eye_color = "fff" + eye_color = null /obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity) return \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index b793fd05fc8..8a3776cce8e 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -26,6 +26,7 @@ icon_state = "brain_implant" implant_overlay = "brain_implant_overlay" zone = "head" + w_class = 1 /obj/item/organ/internal/cyberimp/brain/emp_act(severity) if(!owner) @@ -37,7 +38,7 @@ /obj/item/organ/internal/cyberimp/brain/anti_drop - name = "Anti-drop implant" + name = "anti-drop implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." var/active = 0 var/l_hand_ignore = 0 @@ -101,11 +102,11 @@ if(L_item) A = pick(oview(range)) L_item.throw_at(A, range, 2) - owner << "Your left arm spasms and throws the [L_item.name]!" + owner << "Your left arm spasms and throws the [L_item.name]!" if(R_item) A = pick(oview(range)) R_item.throw_at(A, range, 2) - owner << "Your right arm spasms and throws the [R_item.name]!" + owner << "Your right arm spasms and throws the [R_item.name]!" /obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items() if(!l_hand_ignore && l_hand_obj in owner.contents) @@ -144,185 +145,24 @@ crit_fail = 0 -//[[[[CHEST]]]] +//[[[[MOUTH]]]] +/obj/item/organ/internal/cyberimp/mouth + zone = "mouth" -/obj/item/organ/internal/cyberimp/chest - name = "cybernetic torso implant" - desc = "implants for the organs in your torso" - icon_state = "chest_implant" - implant_overlay = "chest_implant_overlay" - zone = "chest" +/obj/item/organ/internal/cyberimp/mouth/breathing_tube + name = "breathing tube implant" + desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." + icon_state = "breathing_tube" + slot = "breathing_tube" + w_class = 1 + origin_tech = "materials=2;biotech=3" -/obj/item/organ/internal/cyberimp/chest/nutriment - name = "Nutriment pump implant" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." - icon_state = "chest_implant" - implant_color = "#00AA00" - var/hunger_threshold = NUTRITION_LEVEL_STARVING - var/synthesizing = 0 - var/poison_amount = 5 - slot = "stomach" - origin_tech = "materials=5;programming=3;biotech=4" - -/obj/item/organ/internal/cyberimp/chest/nutriment/on_life() - if(synthesizing) - return - - if(owner.nutrition <= hunger_threshold) - synthesizing = 1 - owner << "You feel less hungry..." - owner.nutrition += 50 - spawn(50) - synthesizing = 0 - -/obj/item/organ/internal/cyberimp/chest/nutriment/emp_act(severity) - if(!owner) - return - owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning - owner << "You feel like your insides are burning." +/obj/item/organ/internal/cyberimp/mouth/breathing_tube/emp_act(severity) + if(prob(60/severity)) + owner << "Your breathing tube suddenly closes!" + owner.losebreath += 2 -/obj/item/organ/internal/cyberimp/chest/nutriment/plus - name = "Nutriment pump implant PLUS" - desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." - icon_state = "chest_implant" - implant_color = "#006607" - hunger_threshold = NUTRITION_LEVEL_HUNGRY - poison_amount = 10 - origin_tech = "materials=5;programming=3;biotech=5" - - - -/obj/item/organ/internal/cyberimp/chest/reviver - name = "Reviver implant" - desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" - icon_state = "chest_implant" - implant_color = "#AD0000" - origin_tech = "materials=6;programming=3;biotech=6;syndicate=4" - slot = "heartdrive" - var/revive_cost = 0 - var/reviving = 0 - var/cooldown = 0 - -/obj/item/organ/internal/cyberimp/chest/reviver/on_life() - if(reviving) - if(owner.stat == UNCONSCIOUS) - spawn(30) - if(prob(90) && owner.getOxyLoss()) - owner.adjustOxyLoss(-3) - revive_cost += 5 - if(prob(75) && owner.getBruteLoss()) - owner.adjustBruteLoss(-1) - revive_cost += 20 - if(prob(75) && owner.getFireLoss()) - owner.adjustFireLoss(-1) - revive_cost += 20 - if(prob(40) && owner.getToxLoss()) - owner.adjustToxLoss(-1) - revive_cost += 50 - else - cooldown = revive_cost + world.time - reviving = 0 - return - - if(cooldown > world.time) - return - if(owner.stat != UNCONSCIOUS) - return - if(owner.suiciding) - return - - revive_cost = 0 - reviving = 1 - -/obj/item/organ/internal/cyberimp/chest/reviver/emp_act(severity) - if(!owner) - return - - if(reviving) - revive_cost += 200 - else - cooldown += 200 - - if(istype(owner, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = owner - if(H.stat != DEAD && prob(50 / severity)) - H.heart_attack = 1 - spawn(600 / severity) - H.heart_attack = 0 - if(H.stat == CONSCIOUS) - H << "You feel your heart beating again!" - -/obj/item/organ/internal/cyberimp/chest/arm_mod//dummy parent item for making arm-mod implants. works best with nodrop items that are sent to nullspace upon being dropped. - name = "Arm-mounted item implant" - desc = "You shouldn't see this! Adminhelp and report this as an issue on github!" - icon_state = "chest_implant" - implant_color = "#007ACC" - slot = "shoulders" - origin_tech = "materials=5;biotech=4;powerstorage=4" - actions_types = list(/datum/action/item_action/organ_action/toggle) - var/obj/holder//is defined as the retractable item itself. ensure this is defined somewhere! - var/out = 0//determines if the item is in the owner's hand or not - var/overloaded = 0//is set to 1 when owner gets EMPed. if set to 1, implant doesn't work. - -/obj/item/organ/internal/cyberimp/chest/arm_mod/ui_action_click() - if(overloaded)//ensure the implant isn't broken - owner << "The implant doesn't respond. It seems to be broken..." - return - if(holder == null) - owner << "You should not be attempting to use this implant, as it is a dummy item that should never appear. Please adminhelp and report this as an issue on github." - return - if(out)//check if the owner has the item out already - owner.unEquip(holder, 1)//if he does, take it away. then, - holder.loc = null//stash it in nullspace - out = 0//and set this to clarify the item isn't out. - owner << "You retract [holder]." - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) - else//if he doesn't have the item out - if(owner.put_in_hands(holder))//put it in his hands. - out = 1 - owner << "You extend [holder]!" - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) - else//if this fails to put the item in his hands, - holder.loc = null//keep it in nullspace - owner << "You can't extend [holder] if you can't use your hands!" - -/obj/item/organ/internal/cyberimp/chest/arm_mod/emp_act(severity)//if the implant gets EMPed... - if(!owner || overloaded)//ensure that it's in an owner and that it's not already EMPed, then... - return - if(out)//check if he has the item out... - owner.unEquip(holder, 1)//if he does, take it away. - holder.loc = null - out = 0 - owner << "[holder] forcibly retracts into your arm." - owner.visible_message("A loud bang comes from [owner]...") - playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) - owner << "You feel an explosion erupt inside you as your chest implant breaks. Is it hot in here?" - owner.adjust_fire_stacks(20) - owner.IgniteMob()//ignite the owner, as well as - owner.say("AUUUUUUUUUUUUUUUUUUGH!!") - owner.adjustFireLoss(25)//severely injure him! - overloaded = 1//then make sure this can't happen again by breaking the implant. - -/obj/item/organ/internal/cyberimp/chest/arm_mod/tase//mounted, self-charging taser! - name = "Arm-cannon taser implant" - desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arms and remains in the shoulders when not in use." - icon_state = "armcannon_tase_implant" - origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" - actions_types = list(/datum/action/item_action/organ_action/toggle) - -/obj/item/organ/internal/cyberimp/chest/arm_mod/tase/New()//when the implant is created... - holder = new /obj/item/weapon/gun/energy/gun/advtaser/mounted(src)//assign a brand new item to it. (in this case, a gun) - -/obj/item/organ/internal/cyberimp/chest/arm_mod/lase//mounted, self-charging laser! - name = "Arm-cannon laser implant" - desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arms and remains in the shoulders when not in use." - icon_state = "armcannon_lase_implant" - origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4;syndicate=5"//this is kinda nutty and i might lower it - actions_types = list(/datum/action/item_action/organ_action/toggle) - -/obj/item/organ/internal/cyberimp/chest/arm_mod/lase/New() - holder = new /obj/item/weapon/gun/energy/laser/mounted(src) //BOX O' IMPLANTS diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index 5fa8b0811be..b25f792f336 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -26,9 +26,7 @@ mob/living/carbon/getorganszone(zone, var/subzones = 0) return returnorg mob/living/carbon/getorganslot(slot) - for(var/obj/item/organ/internal/O in internal_organs) - if(slot == O.slot) - return O + return internal_organs_slot[slot] mob/proc/getlimb() return diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 4bfb4eb9c21..5ead35d2677 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -5,6 +5,7 @@ throwforce = 0 var/zone = "chest" var/slot + // DO NOT add slots with matching names to different zones - it will break internal_organs_slot list! var/vital = 0 @@ -18,6 +19,7 @@ owner = M M.internal_organs |= src + M.internal_organs_slot[slot] = src loc = null for(var/X in actions) var/datum/action/A = X @@ -28,6 +30,8 @@ owner = null if(M) M.internal_organs -= src + if(M.internal_organs_slot[slot] == src) + M.internal_organs_slot.Remove(slot) if(vital && !special) M.death() for(var/X in actions) @@ -41,6 +45,12 @@ /obj/item/organ/internal/proc/on_life() return +/obj/item/organ/internal/examine(mob/user) + ..() + if(status == ORGAN_ROBOTIC && crit_fail) + user << "[src] seems to be broken!" + + /obj/item/organ/internal/proc/prepare_eat() var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new S.name = name @@ -56,7 +66,6 @@ name = "appendix" icon_state = "appendix" icon = 'icons/obj/surgery.dmi' - list_reagents = list("nutriment" = 5) @@ -92,7 +101,6 @@ zone = "chest" slot = "heart" origin_tech = "biotech=3" - vital = 1 var/beating = 1 var/icon_base = "heart" @@ -102,16 +110,46 @@ else icon_state = "[icon_base]-off" -/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) - ..() - beating = 1 - update_icon() - /obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) ..() + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.stat == DEAD || H.heart_attack) + Stop() + return + if(!special) + H.heart_attack = 1 + spawn(120) - beating = 0 - update_icon() + if(!owner) + Stop() + +/obj/item/organ/internal/heart/attack_self(mob/user) + ..() + if(!beating) + Restart() + spawn(80) + if(!owner) + Stop() + + +/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) + ..() + if(ishuman(M) && beating) + var/mob/living/carbon/human/H = M + if(H.heart_attack) + H.heart_attack = 0 + return + +/obj/item/organ/internal/heart/proc/Stop() + beating = 0 + update_icon() + return 1 + +/obj/item/organ/internal/heart/proc/Restart() + beating = 1 + update_icon() + return 1 /obj/item/organ/internal/heart/prepare_eat() var/obj/S = ..() diff --git a/icons/obj/items_cyborg.dmi b/icons/obj/items_cyborg.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dfdd311419489517d418278540b55468087106e2 GIT binary patch literal 2327 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 literal 0 HcmV?d00001 diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 0d2b1166c192976ed56b6d8c1d9e2957277c624b..9252dbf89f610624b4e5d4268b74ca5292947ef5 100644 GIT binary patch literal 23113 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 diff --git a/tgstation.dme b/tgstation.dme index fcee4ede946..53979542c99 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1598,6 +1598,8 @@ #include "code\modules\surgery\surgery_step.dm" #include "code\modules\surgery\tail_modification.dm" #include "code\modules\surgery\tools.dm" +#include "code\modules\surgery\organs\augments_arms.dm" +#include "code\modules\surgery\organs\augments_chest.dm" #include "code\modules\surgery\organs\augments_external.dm" #include "code\modules\surgery\organs\augments_eyes.dm" #include "code\modules\surgery\organs\augments_internal.dm" From d9a214e931bb4d0c8d72950956b2d28617e933bd Mon Sep 17 00:00:00 2001 From: PKPenguin321 Date: Fri, 26 Feb 2016 17:59:55 -0800 Subject: [PATCH 02/16] adds bolas adds the item itself and a hand-crafting method to handcuffs.dm adds a tablecrafting recipe to recipes.dm adds the sprite to items.dmi --- code/game/objects/items/weapons/handcuffs.dm | 31 +++++++++++++++++++ code/modules/crafting/recipes.dm | 8 +++++ icons/obj/items.dmi | Bin 50574 -> 50854 bytes 3 files changed, 39 insertions(+) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index e7370d3e027..8510752e35e 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -145,6 +145,20 @@ else user << "You need one rod to make a wired rod!" return + else if(istype(I, /obj/item/stack/sheet/metal)) + var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola + var/obj/item/stack/sheet/metal/M = I + if(M.amount < 6) + user << "You need at least six metal sheets to make good enough weights!" + return + user << "You begin to apply [I] the [src]..." + if(do_after(user, 35, target = src)) + M.use(6) + user.put_in_hands(S) + user << "You make some weights out of [I] and tie them to [src]." + if(!remove_item_from_storage(user)) + user.unEquip(src) + qdel(src) /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user) if(isrobot(user)) @@ -266,3 +280,20 @@ /obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) Crossed(user) //honk + +/obj/item/weapon/restraints/legcuffs/bola + name = "bola" + desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly." + icon_state = "bola" + breakouttime = 35//easy to apply, easy to break out of + +/obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom) + if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, + return//abort + var/mob/living/carbon/C = hit_atom + if(!C.legcuffed) + C.legcuffed = src + src.loc = C + C.update_inv_legcuffed() + feedback_add_details("handcuffs","B") + C << "\The [src] ensares you!" \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 628cb2350cb..a9baaf881f0 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -77,6 +77,14 @@ time = 40 category = CAT_WEAPON +/datum/table_recipe/bola + name = "Bola" + result = /obj/item/weapon/restraints/legcuffs/bola + reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1, + /obj/item/stack/sheet/metal = 6) + time = 20//15 faster than crafting them by hand! + category= CAT_WEAPON + /datum/table_recipe/tailclub name = "Tail Club" result = /obj/item/weapon/tailclub diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 25da8bb0887df8b2bdee6e5d434a0030a8d03f9c..79383dca68cefa9869f99cfd99158f58ce96876b 100644 GIT binary patch delta 13155 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 delta 12873 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 Date: Fri, 26 Feb 2016 19:59:45 -0800 Subject: [PATCH 03/16] fixes grammar/nullspace error --- code/game/objects/items/weapons/handcuffs.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 8510752e35e..4d1782496a8 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -146,13 +146,13 @@ user << "You need one rod to make a wired rod!" return else if(istype(I, /obj/item/stack/sheet/metal)) - var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola var/obj/item/stack/sheet/metal/M = I if(M.amount < 6) user << "You need at least six metal sheets to make good enough weights!" return - user << "You begin to apply [I] the [src]..." + user << "You begin to apply [I] to [src]..." if(do_after(user, 35, target = src)) + var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola M.use(6) user.put_in_hands(S) user << "You make some weights out of [I] and tie them to [src]." @@ -286,6 +286,7 @@ desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly." icon_state = "bola" breakouttime = 35//easy to apply, easy to break out of + gender = NEUTER /obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom) if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, From 81f60f84f07a8e191a2e65dfe777c250bf479040 Mon Sep 17 00:00:00 2001 From: KazeEspada Date: Fri, 26 Feb 2016 23:46:09 -0700 Subject: [PATCH 04/16] fixed an edgecase where you could spam cut a tree and receive multiple logs. --- code/game/objects/structures/flora.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 5614b8ef4c4..eef13b29223 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -19,6 +19,8 @@ playsound(get_turf(src), W.hitsound, 100, 0, 0) user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of cutting a tree.") if(do_after(user, 1000/W.force, target = user)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard. + if(cut) + return user.visible_message("[user] falls [src] with the [W].","You fall [src] with the [W].", "You hear the sound of a tree falling.") playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) icon_state = "tree_stump" From b58347c759fd0ffa507d3c9d90316462d3a99de1 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sat, 27 Feb 2016 17:08:53 +0100 Subject: [PATCH 05/16] Admin healing a monkey no longer transforms it into a human. Only humans lose negative mutations when adminhealed (these mutations have no effects on monkeys). --- code/modules/mob/living/carbon/carbon.dm | 4 ---- code/modules/mob/living/carbon/human/human.dm | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 23f92bbaf11..2340df06cf8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -811,10 +811,6 @@ var/const/GALOSHES_DONT_HELP = 4 for(var/datum/disease/D in viruses) D.cure(0) - if(dna) - for(var/datum/mutation/human/HM in dna.mutations) - if(HM.quality != POSITIVE) - dna.remove_mutation(HM.name) ..() /mob/living/carbon/can_be_revived() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 823335b089c..e4b934355b9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -947,4 +947,7 @@ /mob/living/carbon/human/fully_heal(admin_revive = 0) restore_blood() remove_all_embedded_objects() + for(var/datum/mutation/human/HM in dna.mutations) + if(HM.quality != POSITIVE) + dna.remove_mutation(HM.name) ..() From b444f4f5daaf5e242e283b558068ffeb72a2405d Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 27 Feb 2016 14:57:26 +0100 Subject: [PATCH 06/16] Fixes shuttle loan events not creating crates. --- code/controllers/subsystem/shuttles.dm | 2 +- code/modules/cargo/console.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 4442bee8933..57e603487fb 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -56,7 +56,7 @@ var/datum/subsystem/shuttle/SSshuttle var/datum/supply_pack/P = new pack() if(!P.contains) continue - supply_packs["[P.type]"] = P + supply_packs[P.type] = P initial_move() ..() diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 42c71e8da14..66c305e307d 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -105,7 +105,7 @@ say("The supply shuttle has been loaned to Centcom.") . = TRUE if("add") - var/id = params["id"] + var/id = text2path(params["id"]) if(!SSshuttle.supply_packs[id]) return From 73749028009eee7f82ac9a2607cc6364ae831aab Mon Sep 17 00:00:00 2001 From: Menshin <> Date: Sat, 27 Feb 2016 22:44:17 +0100 Subject: [PATCH 07/16] * Cleaning field generator code * Fixes runtimes on field shutdown --- code/modules/admin/verbs/debug.dm | 13 +- .../power/singularity/containment_field.dm | 6 +- .../power/singularity/field_generator.dm | 262 ++++++++---------- 3 files changed, 131 insertions(+), 150 deletions(-) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index eecfb9537d1..90a14e8d47c 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -200,7 +200,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that . += "[procname] returned an associative list:" for(var/key in returnedlist) . += "\n[key] = [returnedlist[key]]" - + else . += "[procname] returned a list:" for(var/elem in returnedlist) @@ -644,8 +644,15 @@ var/global/list/g_fancy_list_of_types = null E.active = 1 for(var/obj/machinery/field/generator/F in machines) - if(F.anchored) - F.Varedit_start = 1 + if(F.active == 0) + F.active = 1 + F.state = 2 + F.power = 250 + F.anchored = 1 + F.warming_up = 3 + F.start_fields() + F.update_icon() + spawn(30) for(var/obj/machinery/the_singularitygen/G in machines) if(G.anchored) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index c1bdb82a9d8..cb4d7e439f1 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -15,10 +15,8 @@ var/obj/machinery/field/generator/FG2 = null /obj/machinery/field/containment/Destroy() - if(FG1 && !FG1.clean_up) - FG1.cleanup() - if(FG2 && !FG2.clean_up) - FG2.cleanup() + FG1.fields -= src + FG2.fields -= src return ..() /obj/machinery/field/containment/attack_hand(mob/user) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 008416ac9e5..47604070cbd 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -13,6 +13,15 @@ field_generator power level display */ #define field_generator_max_power 250 + +#define FG_UNSECURED 0 +#define FG_SECURED 1 +#define FG_WELDED 2 + +#define FG_OFFLINE 0 +#define FG_CHARGING 1 +#define FG_ONLINE 2 + /obj/machinery/field/generator name = "Field Generator" desc = "A large thermal battery that projects a high amount of energy when powered." @@ -22,76 +31,51 @@ field_generator power level display density = 1 use_power = 0 var/const/num_power_levels = 6 // Total number of power level icon has - var/Varedit_start = 0 - var/Varpower = 0 - var/active = 0 + var/power_level = 0 + var/active = FG_OFFLINE var/power = 20 // Current amount of power - var/state = 0 + var/state = FG_UNSECURED var/warming_up = 0 var/list/obj/machinery/field/containment/fields var/list/obj/machinery/field/generator/connected_gens var/clean_up = 0 - /obj/machinery/field/generator/update_icon() overlays.Cut() if(warming_up) overlays += "+a[warming_up]" if(fields.len) overlays += "+on" - // Power level indicator - // Scale % power to % num_power_levels and truncate value - var/level = round(num_power_levels * power / field_generator_max_power) - // Clamp between 0 and num_power_levels for out of range power values - level = Clamp(level, 0, num_power_levels) - if(level) - overlays += "+p[level]" - - return + if(power_level) + overlays += "+p[power_level]" /obj/machinery/field/generator/New() ..() fields = list() connected_gens = list() - return /obj/machinery/field/generator/process() - if(Varedit_start == 1) - if(active == 0) - active = 1 - state = 2 - power = field_generator_max_power - anchored = 1 - warming_up = 3 - start_fields() - update_icon() - Varedit_start = 0 - - if(src.active == 2) + if(active == FG_ONLINE) calc_power() - update_icon() - return - /obj/machinery/field/generator/attack_hand(mob/user) - if(state == 2) + if(state == FG_WELDED) if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on - if(src.active >= 1) - user << "You are unable to turn off the [src.name] once it is online!" + if(active >= FG_CHARGING) + user << "You are unable to turn off the [name] once it is online!" return 1 else - user.visible_message("[user.name] turns on the [src.name].", \ - "You turn on the [src.name].", \ + user.visible_message("[user.name] turns on the [name].", \ + "You turn on the [name].", \ "You hear heavy droning.") turn_on() investigate_log("activated by [user.key].","singulo") - src.add_fingerprint(user) + add_fingerprint(user) else user << "The [src] needs to be firmly secured to the floor first!" - return /obj/machinery/field/generator/attackby(obj/item/W, mob/user, params) @@ -100,54 +84,52 @@ field_generator power level display return else if(istype(W, /obj/item/weapon/wrench)) switch(state) - if(0) + if(FG_UNSECURED) if(isinspace()) return - state = 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user.visible_message("[user.name] secures [src.name] to the floor.", \ + state = FG_SECURED + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] secures [name] to the floor.", \ "You secure the external reinforcing bolts to the floor.", \ "You hear ratchet.") - src.anchored = 1 - if(1) - state = 0 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ + anchored = 1 + if(FG_SECURED) + state = FG_UNSECURED + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + user.visible_message("[user.name] unsecures [name] reinforcing bolts from the floor.", \ "You undo the external reinforcing bolts.", \ "You hear ratchet.") - src.anchored = 0 - if(2) - user << "The [src.name] needs to be unwelded from the floor!" - return + anchored = 0 + if(FG_WELDED) + user << "The [name] needs to be unwelded from the floor!" + else if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W switch(state) - if(0) - user << "The [src.name] needs to be wrenched to the floor!" - return - if(1) + if(FG_UNSECURED) + user << "The [name] needs to be wrenched to the floor!" + + if(FG_SECURED) if (WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + user.visible_message("[user.name] starts to weld the [name] to the floor.", \ "You start to weld \the [src] to the floor...", \ "You hear welding.") if (do_after(user,20/W.toolspeed, target = src)) if(!src || !WT.isOn()) return - state = 2 + state = FG_WELDED user << "You weld the field generator to the floor." - else - return - if(2) + + if(FG_WELDED) if (WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ "You start to cut \the [src] free from the floor...", \ "You hear welding.") if (do_after(user,20/W.toolspeed, target = src)) if(!src || !WT.isOn()) return - state = 1 + state = FG_SECURED user << "You cut \the [src] free from the floor." - else - return + else ..() @@ -164,28 +146,33 @@ field_generator power level display /obj/machinery/field/generator/bullet_act(obj/item/projectile/Proj) if(Proj.flag != "bullet") - power += Proj.damage - update_icon() + power = min(power + Proj.damage, field_generator_max_power) + check_power_level() return 0 /obj/machinery/field/generator/Destroy() - src.cleanup() + cleanup() return ..() +/obj/machinery/field/generator/proc/check_power_level() + var/new_level = round(num_power_levels * power / field_generator_max_power) + if(new_level != power_level) + power_level = new_level + update_icon() /obj/machinery/field/generator/proc/turn_off() - active = 0 + active = FG_OFFLINE spawn(1) - src.cleanup() + cleanup() while (warming_up>0 && !active) sleep(50) warming_up-- update_icon() /obj/machinery/field/generator/proc/turn_on() - active = 1 + active = FG_CHARGING spawn(1) while (warming_up<3 && active) sleep(50) @@ -196,44 +183,35 @@ field_generator power level display /obj/machinery/field/generator/proc/calc_power() - if(Varpower) - return 1 + var/power_draw = 2 + fields.len - update_icon() - if(src.power > field_generator_max_power) - src.power = field_generator_max_power - - var/power_draw = 2 - for (var/obj/machinery/field/containment/F in fields) - if (isnull(F)) - continue - power_draw++ if(draw_power(round(power_draw/2,1))) + check_power_level() return 1 else - visible_message("The [src.name] shuts down!", "You hear something shutting down.") + visible_message("The [name] shuts down!", "You hear something shutting down.") turn_off() investigate_log("ran out of power and deactivated","singulo") - src.power = 0 + power = 0 + check_power_level() return 0 //This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport /obj/machinery/field/generator/proc/draw_power(draw = 0, failsafe = 0, obj/machinery/field/generator/G = null, obj/machinery/field/generator/last = null) - if(Varpower) - return 1 - if((G && G == src) || (failsafe >= 8))//Loopin, set fail + if((G && (G == src)) || (failsafe >= 8))//Loopin, set fail return 0 else failsafe++ - if(src.power >= draw)//We have enough power - src.power -= draw + + if(power >= draw)//We have enough power + power -= draw return 1 + else//Need more power - draw -= src.power - src.power = 0 - for(var/obj/machinery/field/generator/FG in connected_gens) - if(isnull(FG)) - continue + draw -= power + power = 0 + for(var/CG in connected_gens) + var/obj/machinery/field/generator/FG = CG if(FG == last)//We just asked you continue if(G)//Another gen is askin for power and we dont have it @@ -249,7 +227,7 @@ field_generator power level display /obj/machinery/field/generator/proc/start_fields() - if(!src.state == 2 || !anchored) + if(state != FG_WELDED || !anchored) turn_off() return spawn(1) @@ -260,82 +238,72 @@ field_generator power level display setup_field(4) spawn(4) setup_field(8) - src.active = 2 + active = FG_ONLINE /obj/machinery/field/generator/proc/setup_field(NSEW) - var/turf/T = src.loc - var/obj/machinery/field/generator/G + var/turf/T = loc + if(!istype(T)) + return 0 + + var/obj/machinery/field/generator/G = null var/steps = 0 if(!NSEW)//Make sure its ran right - return - for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator + return 0 + for(var/dist in 0 to 7) // checks out to 8 tiles away for another generator T = get_step(T, NSEW) if(T.density)//We cant shoot a field though this return 0 - for(var/atom/A in T.contents) - if(ismob(A)) - continue - if(!istype(A,/obj/machinery/field/generator)) - if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density)) - return 0 - steps += 1 + G = locate(/obj/machinery/field/generator) in T - if(!isnull(G)) + if(G) steps -= 1 if(!G.active) return 0 break - if(isnull(G)) - return - T = src.loc - for(var/dist = 0, dist < steps, dist += 1) // creates each field tile + + for(var/TC in T.contents) + var/atom/A = TC + if(ismob(A)) + continue + if(A.density) + return 0 + + steps++ + + if(!G) + return 0 + + T = loc + for(var/dist in 0 to steps) // creates each field tile var/field_dir = get_dir(T,get_step(G.loc, NSEW)) T = get_step(T, NSEW) if(!locate(/obj/machinery/field/containment) in T) var/obj/machinery/field/containment/CF = new/obj/machinery/field/containment() CF.set_master(src,G) - fields += CF - G.fields += CF CF.loc = T CF.dir = field_dir - for(var/mob/living/L in CF.loc) + fields += CF + G.fields += CF + for(var/mob/living/L in T) CF.Crossed(L) - var/listcheck = 0 - for(var/obj/machinery/field/generator/FG in connected_gens) - if (isnull(FG)) - continue - if(FG == G) - listcheck = 1 - break - if(!listcheck) - connected_gens.Add(G) - listcheck = 0 - for(var/obj/machinery/field/generator/FG2 in G.connected_gens) - if (isnull(FG2)) - continue - if(FG2 == src) - listcheck = 1 - break - if(!listcheck) - G.connected_gens.Add(src) + + connected_gens |= G + G.connected_gens |= src + update_icon() /obj/machinery/field/generator/proc/cleanup() clean_up = 1 - for (var/obj/machinery/field/containment/F in fields) - if (isnull(F)) - continue + for (var/F in fields) qdel(F) - fields = list() - for(var/obj/machinery/field/generator/FG in connected_gens) - if (isnull(FG)) - continue - FG.connected_gens.Remove(src) + + for(var/CG in connected_gens) + var/obj/machinery/field/generator/FG = CG + FG.connected_gens -= src if(!FG.clean_up)//Makes the other gens clean up as well FG.cleanup() - connected_gens.Remove(FG) - connected_gens = list() + connected_gens -= FG clean_up = 0 update_icon() @@ -359,3 +327,11 @@ field_generator power level display /obj/machinery/field/generator/bump_field(atom/movable/AM as mob|obj) if(fields.len) ..() + +#undef FG_UNSECURED +#undef FG_SECURED +#undef FG_WELDED + +#undef FG_OFFLINE +#undef FG_CHARGING +#undef FG_ONLINE From 2633a9b4f20b60fae5a9100955bb3ee4834ac325 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sat, 27 Feb 2016 18:27:30 -0500 Subject: [PATCH 08/16] Roach guts have the same layer as vomit, blood, etc --- code/modules/mob/living/simple_animal/friendly/cockroach.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 0deb6c4289a..30af1ef94da 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -52,4 +52,5 @@ desc = "One bug squashed. Four more will rise in its place." icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" - random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") \ No newline at end of file + random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") + layer = 2 \ No newline at end of file From ac0b0c2e8d13ef40754a21d339838218ecba3f5d Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Sat, 27 Feb 2016 16:32:03 -0800 Subject: [PATCH 09/16] I was stupid, This is less stupid (also fixes a minor code fuckup) --- code/controllers/subsystem/garbage.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 04c111d3198..eecc54ef93d 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -100,9 +100,10 @@ var/datum/subsystem/garbage_collector/SSgarbage /datum/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) if (istype(A) && isnull(A.gc_destroyed)) tobequeued += A + A.gc_destroyed = -1 /datum/subsystem/garbage_collector/proc/Queue(datum/A) - if (!istype(A) || !isnull(A.gc_destroyed)) + if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return var/gctime = world.time var/refid = "\ref[A]" @@ -110,7 +111,7 @@ var/datum/subsystem/garbage_collector/SSgarbage A.gc_destroyed = gctime if (queue[refid]) - queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list. + queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. queue[refid] = gctime @@ -166,8 +167,6 @@ var/datum/subsystem/garbage_collector/SSgarbage return FALSE if(D.gc_destroyed) return TRUE - if(SSgarbage && SSgarbage.tobequeued && SSgarbage.tobequeued.len && D in SSgarbage.tobequeued) - return TRUE return FALSE // Default implementation of clean-up code. From 6b5379f053bacd9562dc1c77be4e47225c18d944 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sat, 27 Feb 2016 20:14:16 -0500 Subject: [PATCH 10/16] Adds items to contraband crate. --- code/game/objects/items/weapons/storage/fancy.dm | 3 ++- code/modules/cargo/packs.dm | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index b85ad5b5f54..83f45567164 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -166,7 +166,7 @@ icon_state = "carp" /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate - name = "cigarette packet" + name = "\improper Syndicig cigarette packet" desc = "An obscure brand of cigarettes." icon_state = "syndie" @@ -180,6 +180,7 @@ name = "\improper Midori Tabako packet" desc = "You can't understand the runes, but the packet smells funny." icon_state = "midori" + spawn_type = /obj/item/clothing/mask/cigarette/rollie /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims name ="\improper Shady Jim's Super Slims" diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 9c033b4bf67..e6dd1e92d5d 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -373,6 +373,7 @@ /datum/supply_pack/security/justiceinbound name = "Standard Justice Enforcer Crate" cost = 80 //justice comes at a price. An expensive, noisy price. + contraband = TRUE contains = list(/obj/item/clothing/head/helmet/justice, /obj/item/clothing/mask/gas/sechailer) crate_name = "justice enforcer crate" @@ -1226,10 +1227,12 @@ name = "Contraband Crate" contraband = TRUE cost = 30 - num_contained = 5 + num_contained = 6 contains = list(/obj/item/weapon/poster/contraband, - /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, - /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims) + /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate, + /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori, + /obj/item/seeds/ambrosiadeusseed, + /obj/item/clothing/tie/dope_necklace) crate_name = "crate" /datum/supply_pack/misc/randomised/toys From 7af3e2ce1d61c14fbac5f60b0d0ce9cdaa13fb5b Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sat, 27 Feb 2016 20:15:49 -0500 Subject: [PATCH 11/16] oops --- code/modules/cargo/packs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index e6dd1e92d5d..c6e033c24c9 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1229,7 +1229,7 @@ cost = 30 num_contained = 6 contains = list(/obj/item/weapon/poster/contraband, - /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate, + /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori, /obj/item/seeds/ambrosiadeusseed, /obj/item/clothing/tie/dope_necklace) From 3898243d6a4cc93df35308fe9f49387a99e93f93 Mon Sep 17 00:00:00 2001 From: c0 Date: Sun, 28 Feb 2016 04:44:27 +0300 Subject: [PATCH 12/16] Removed cocroaches --- .../EfficiencyStation/EfficiencyStation.dmm | 57 ------------------ .../MetaStation/MetaStation.v41I.dmm | 60 +++++++++---------- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 25 -------- 3 files changed, 30 insertions(+), 112 deletions(-) diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 512c82e8948..48331364228 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -4311,7 +4311,6 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint{ name = "Medical Maintenance" @@ -5914,7 +5913,6 @@ name = "Research Division" }) "akv" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ icon_state = "warnplate"; dir = 4 @@ -6424,7 +6422,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint{ name = "Medical Maintenance" @@ -6658,7 +6655,6 @@ name = "\improper Toxins Lab" }) "alH" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "warning" @@ -9105,7 +9101,6 @@ "apw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "apx" = ( @@ -9410,7 +9405,6 @@ icon_state = "1-2"; pixel_y = 0 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -10102,7 +10096,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "arl" = ( @@ -10130,7 +10123,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -10229,7 +10221,6 @@ /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "art" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -11163,7 +11154,6 @@ name = "\improper Toxins Lab" }) "atf" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -11791,7 +11781,6 @@ /obj/effect/decal/cleanable/robot_debris{ icon_state = "gib6" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -12618,7 +12607,6 @@ name = "Medbay Maintenance APC"; pixel_y = -24 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint{ name = "Medical Maintenance" @@ -13645,7 +13633,6 @@ /area/maintenance/fore) "axu" = ( /obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "axv" = ( @@ -13657,7 +13644,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/remains/human, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg3" @@ -15638,7 +15624,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/decal/cleanable/dirt, /obj/item/trash/candy, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "aAN" = ( @@ -17072,7 +17057,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "aDs" = ( @@ -17694,7 +17678,6 @@ /obj/item/weapon/shard{ icon_state = "medium" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -18129,7 +18112,6 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -18191,7 +18173,6 @@ /obj/machinery/light_switch{ pixel_x = 23 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -18344,7 +18325,6 @@ /area/storage/tech) "aFL" = ( /obj/item/stack/rods, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "aFM" = ( @@ -20473,7 +20453,6 @@ name = "Station Intercom (General)"; pixel_x = 27 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -20507,7 +20486,6 @@ /turf/simulated/floor/plating, /area/storage/tech) "aJu" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/storage/tech) "aJv" = ( @@ -21807,7 +21785,6 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "aLT" = ( @@ -23053,7 +23030,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -25127,7 +25103,6 @@ "aRY" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/rods, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fore) "aRZ" = ( @@ -29127,7 +29102,6 @@ d2 = 4; icon_state = "1-4" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ burnt = 1; icon_state = "panelscorched" @@ -33482,7 +33456,6 @@ loot = list("/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/item/weapon/cigbutt","/obj/item/trash/cheesie","/obj/item/trash/candy","/obj/item/trash/chips","/obj/item/trash/deadmouse","/obj/item/trash/pistachios","/obj/item/trash/plate","/obj/item/trash/popcorn","/obj/item/trash/raisins","/obj/item/trash/sosjerky","/obj/item/trash/syndi_cakes"); name = "maint grille or trash spawner" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg2" @@ -34493,7 +34466,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -34525,7 +34497,6 @@ /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/cardboard, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint{ name = "Medical Maintenance" @@ -34622,7 +34593,6 @@ loot = list("/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/structure/grille","/obj/item/weapon/cigbutt","/obj/item/trash/cheesie","/obj/item/trash/candy","/obj/item/trash/chips","/obj/item/trash/deadmouse","/obj/item/trash/pistachios","/obj/item/trash/plate","/obj/item/trash/popcorn","/obj/item/trash/raisins","/obj/item/trash/sosjerky","/obj/item/trash/syndi_cakes"); name = "maint grille or trash spawner" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "bkG" = ( @@ -35034,7 +35004,6 @@ "bls" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint{ name = "Medical Maintenance" @@ -36742,7 +36711,6 @@ /obj/machinery/light_construct/small{ dir = 1 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ broken = 1; dir = 4; @@ -37321,7 +37289,6 @@ /obj/machinery/light_construct/small{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ burnt = 1; dir = 4; @@ -37726,7 +37693,6 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "bqD" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "bqE" = ( @@ -38179,7 +38145,6 @@ icon_state = "gib6" }, /obj/item/weapon/reagent_containers/syringe, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/starboard) "brq" = ( @@ -38857,7 +38822,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/weapon/shard, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ broken = 1; dir = 4; @@ -40297,7 +40261,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg3" @@ -41698,7 +41661,6 @@ }, /area/crew_quarters/sleep) "byi" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel, /area/crew_quarters/sleep) "byj" = ( @@ -42164,7 +42126,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -43552,7 +43513,6 @@ "bBx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "bBy" = ( @@ -45231,7 +45191,6 @@ /area/maintenance/starboard) "bEE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/starboard) "bEF" = ( @@ -46034,7 +45993,6 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/starboard) "bGb" = ( @@ -47106,7 +47064,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/stack/rods, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" @@ -48473,7 +48430,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/weapon/crowbar, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" @@ -49152,7 +49108,6 @@ on = 1; pressure_checks = 1 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -49777,7 +49732,6 @@ d2 = 8; icon_state = "4-8" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" @@ -50325,7 +50279,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg3" @@ -50463,7 +50416,6 @@ /obj/item/weapon/newspaper, /obj/item/weapon/cigbutt, /obj/item/clothing/glasses/sunglasses, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ burnt = 1; icon_state = "panelscorched" @@ -51629,7 +51581,6 @@ /obj/machinery/light/small{ dir = 1 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -53573,7 +53524,6 @@ "bTK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -53684,7 +53634,6 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" @@ -54689,7 +54638,6 @@ /area/maintenance/starboard) "bVQ" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -56478,7 +56426,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/starboard) "bZa" = ( @@ -56663,7 +56610,6 @@ pixel_y = -28; prison_radio = 1 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/security/prison) "bZs" = ( @@ -57747,7 +57693,6 @@ /turf/simulated/floor/plating, /area/security/prison) "cbB" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -58669,7 +58614,6 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -61275,7 +61219,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ broken = 1; icon_state = "platingdmg3" diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index a1799957075..cdc20d9ac75 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -65,7 +65,7 @@ "abm" = (/obj/structure/table,/obj/item/weapon/folder,/obj/item/weapon/paper/hydroponics,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abn" = (/obj/structure/table,/obj/machinery/computer/libraryconsole/bookmanagement,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abo" = (/obj/machinery/computer/arcade,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) -"abp" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel,/area/security/prison) +"abp" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/prison) "abq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abs" = (/obj/structure/holohoop{pixel_y = 29},/obj/item/toy/beach_ball{icon = 'icons/obj/basketball.dmi'; icon_state = "basketball"; item_state = "basketball"; name = "basket ball"},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/security/prison) @@ -137,7 +137,7 @@ "acG" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/security/prison) "acH" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/security/prison) "acI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/security/prison) -"acJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"acJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 0; pixel_y = -28; prison_radio = 1},/obj/machinery/camera{c_tag = "Prison Chamber"; dir = 1; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison) @@ -476,9 +476,9 @@ "ajh" = (/turf/simulated/wall/r_wall,/area/engine/gravity_generator) "aji" = (/obj/machinery/conveyor{dir = 2; id = "garbage"; layer = 2.7},/obj/machinery/door/poddoor/preopen{id = "Disposal Exit"; layer = 3.1; name = "disposal exit vent"},/turf/simulated/floor/plating,/area/maintenance/disposal) "ajj" = (/obj/machinery/button/door{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/button/massdriver{id = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/chair/stool,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/disposal) -"ajk" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fore) +"ajk" = (/turf/simulated/floor/plating,/area/maintenance/fore) "ajl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) -"ajm" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/disposal) +"ajm" = (/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/disposal) "ajn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/engineering{name = "Fore Port Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ajo" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "ajp" = (/obj/structure/table,/obj/item/stack/medical/ointment{pixel_x = 3; pixel_y = -2},/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/epinephrine,/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 28},/obj/item/weapon/restraints/handcuffs/cable/pink,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -733,7 +733,7 @@ "aoe" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) "aof" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler,/turf/simulated/floor/plating,/area/maintenance/disposal) "aog" = (/obj/machinery/door/window/eastright{dir = 4; name = "Danger: Conveyor Access"; req_access_txt = "12"},/obj/machinery/conveyor{dir = 10; icon_state = "conveyor0"; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"aoh" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/light/small{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/disposal) +"aoh" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) "aoi" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aoj" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aok" = (/obj/structure/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -774,7 +774,7 @@ "aoT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/fore) "aoU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aoV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fore) -"aoW" = (/obj/machinery/power/apc{dir = 2; name = "Disposal APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable/yellow,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/disposal) +"aoW" = (/obj/machinery/power/apc{dir = 2; name = "Disposal APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/disposal) "aoX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aoY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fore) "aoZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fore) @@ -1067,7 +1067,7 @@ "auA" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/starboard) "auB" = (/obj/structure/closet/crate/hydroponics,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) "auC" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/starboard) -"auD" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fore) +"auD" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore) "auE" = (/obj/structure/closet,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor/plating,/area/maintenance/starboard) "auF" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/starboard) "auG" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; dir = 1; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/gravity_generator) @@ -1728,7 +1728,7 @@ "aHl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aHm" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aHn" = (/obj/machinery/door/airlock{id_tag = "Cabin7"; name = "Cabin 1"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep) -"aHo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"aHo" = (/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aHp" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/airalarm{pixel_y = 23},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aHq" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aHr" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/obj/item/weapon/wrench,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) @@ -1968,7 +1968,7 @@ "aLR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aLU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"aLU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLW" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/device/gps{gpstag = "AUX0"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/storage/primary) "aLX" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) @@ -2092,7 +2092,7 @@ "aOl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering) "aOm" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_guide{pixel_x = 3; pixel_y = 4},/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_x = -2; pixel_y = 3},/obj/machinery/button/door{id = "Singularity"; name = "Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "aOn" = (/obj/machinery/button/door{id = "Singularity"; name = "Shutters Control"; pixel_x = -25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engineering) -"aOo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) +"aOo" = (/turf/simulated/floor/plating,/area/maintenance/starboard) "aOp" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) "aOq" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engineering) "aOr" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) @@ -2787,7 +2787,7 @@ "bbE" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;48;50;1"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbG" = (/obj/structure/closet/secure_closet/personal,/obj/item/clothing/under/assistantformal,/obj/structure/sign/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/shoes/winterboots,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/crew_quarters/locker) -"bbH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bbH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/starboard) "bbI" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbJ" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "0"; req_one_access_txt = "48;50"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/quartermaster/storage) "bbK" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage) @@ -3575,7 +3575,7 @@ "bqM" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqN" = (/obj/machinery/reagentgrinder,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqO" = (/obj/structure/table/wood,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Bar - Backroom"; dir = 2; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bqP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/sleep) +"bqP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "bqQ" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar) "bqR" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/bar) "bqS" = (/obj/item/weapon/storage/box/lights/mixed,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -3897,7 +3897,7 @@ "bwW" = (/obj/machinery/computer/arcade,/obj/machinery/airalarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bwX" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/starboard) "bwY" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/starboard) -"bwZ" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) +"bwZ" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "bxa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/starboard) "bxb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;25;46"},/turf/simulated/floor/plating,/area/maintenance/starboard) "bxc" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) @@ -4914,7 +4914,7 @@ "bQz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bQA" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/machinery/airalarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQB" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) -"bQC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bQC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bQD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQE" = (/obj/machinery/door/window/northleft{dir = 8; name = "Jetpack Storage"; pixel_x = -1; pixel_y = 0; req_access_txt = "19"},/obj/structure/window/reinforced,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = 4; pixel_y = -1},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = 0; pixel_y = 0},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = -4; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQF" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter{name = "\improper Teleporter Room"}) @@ -6345,7 +6345,7 @@ "csa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "csb" = (/obj/structure/lattice/catwalk,/obj/item/weapon/wrench,/turf/space,/area/space) "csc" = (/obj/structure/chair/stool,/turf/simulated/floor/wood{icon_state = "wood-broken7"},/area/maintenance/aft{name = "Aft Maintenance"}) -"csd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) +"csd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) "cse" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "csf" = (/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery) "csg" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) @@ -6985,7 +6985,7 @@ "cEq" = (/turf/simulated/wall,/area/medical/morgue) "cEr" = (/obj/structure/bodycontainer/morgue,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEs" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"cEt" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/construction) +"cEt" = (/turf/simulated/floor/plating,/area/construction) "cEu" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEv" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEw" = (/obj/machinery/airalarm{pixel_y = 32},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) @@ -8371,30 +8371,30 @@ "deY" = (/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/obj/machinery/power/tesla_coil,/turf/simulated/floor/plating/airless,/area/space) "deZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "dfa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) -"dfb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"dfb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "dfc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engineering) "dfd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "dfe" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/engine/engineering) "dff" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "dfg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) -"dfh" = (/obj/structure/sink/kitchen{pixel_y = 28},/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"dfh" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dfi" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Near"; dir = 4; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/space) "dfj" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tesla_coil,/turf/simulated/floor/plating/airless,/area/space) "dfk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area/space) "dfl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) "dfm" = (/obj/structure/cable{icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) -"dfn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) -"dfo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/security/vacantoffice) -"dfp" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"dfq" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) -"dfr" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) -"dfs" = (/obj/structure/chair/stool,/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) -"dft" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) -"dfu" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood{icon_state = "wood-broken6"},/area/maintenance/aft{name = "Aft Maintenance"}) -"dfv" = (/obj/machinery/camera{c_tag = "Morgue"; dir = 2; network = list("SS13","Medbay")},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"dfw" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"dfx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"dfy" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/starboard) +"dfo" = (/turf/simulated/floor/wood,/area/security/vacantoffice) +"dfp" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"dfq" = (/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) +"dfr" = (/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"dfs" = (/obj/structure/chair/stool,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"dft" = (/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfu" = (/turf/simulated/floor/wood{icon_state = "wood-broken6"},/area/maintenance/aft{name = "Aft Maintenance"}) +"dfv" = (/obj/machinery/camera{c_tag = "Morgue"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"dfw" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"dfx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfy" = (/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dfz" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology) "dfA" = (/obj/machinery/camera{c_tag = "Xenobiology Lab - Kill Chamber"; dir = 1; network = list("SS13","RD","Xeno"); start_active = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology) "dfB" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/syndicate) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 5e7a7c40f37..c0314ebed82 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -6637,7 +6637,6 @@ /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "amB" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/security/prison) "amC" = ( @@ -11251,7 +11250,6 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "awN" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -18167,7 +18165,6 @@ /area/hydroponics) "aKY" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aKZ" = ( @@ -29857,7 +29854,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "bkW" = ( @@ -30387,12 +30383,10 @@ }, /area/maintenance/disposal) "blT" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "blU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/wood, /area/crew_quarters/sleep) "blV" = ( @@ -58971,7 +58965,6 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "cpB" = ( @@ -59561,7 +59554,6 @@ d2 = 4; icon_state = "2-4" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "cqN" = ( @@ -64264,7 +64256,6 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation) "cAy" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/electrical) "cAz" = ( @@ -64275,25 +64266,21 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/chapel/office) "cAA" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/wood, /area/crew_quarters/bar) "cAB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/crew_quarters/kitchen) "cAC" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -64302,7 +64289,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ icon_state = "warnplate"; dir = 1 @@ -64314,13 +64300,11 @@ d2 = 2; icon_state = "1-2" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/medical/morgue) "cAF" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/disposal) "cAG" = ( @@ -64339,11 +64323,9 @@ d2 = 8; icon_state = "0-8" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/crew_quarters/heads) "cAH" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -64354,16 +64336,13 @@ id = "garbage"; name = "disposal coveyor" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/disposal) "cAJ" = ( /obj/structure/closet, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/disposal) "cAK" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "cAL" = ( @@ -64375,7 +64354,6 @@ /turf/simulated/floor/plasteel, /area/janitor) "cAM" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -64391,11 +64369,9 @@ d2 = 8; icon_state = "1-8" }, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/engine/engineering) "cAP" = ( -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating{ icon_state = "warnplate"; dir = 4 @@ -64403,7 +64379,6 @@ /area/engine/engineering) "cAQ" = ( /obj/structure/chair, -/mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/maintenance/aft) "cAR" = ( From 5127ba71fc919ad1ee3d942de9647c6c8d35e22a Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 28 Feb 2016 11:01:30 -0500 Subject: [PATCH 13/16] reverts name change, tweaks cost --- code/game/objects/items/weapons/storage/fancy.dm | 2 +- code/modules/cargo/packs.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 83f45567164..9cda0111094 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -166,7 +166,7 @@ icon_state = "carp" /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate - name = "\improper Syndicig cigarette packet" + name = "cigarette packet" desc = "An obscure brand of cigarettes." icon_state = "syndie" diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index c6e033c24c9..06e2e7fc1a1 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -372,7 +372,7 @@ /datum/supply_pack/security/justiceinbound name = "Standard Justice Enforcer Crate" - cost = 80 //justice comes at a price. An expensive, noisy price. + cost = 60 //justice comes at a price. An expensive, noisy price. contraband = TRUE contains = list(/obj/item/clothing/head/helmet/justice, /obj/item/clothing/mask/gas/sechailer) From 65f42c1515789325ab74a53b682fb65c3042b1ba Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 29 Feb 2016 02:13:58 +0000 Subject: [PATCH 14/16] Automatic changelog generation for PR #15809 --- html/changelogs/AutoChangeLog-pr-15809.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15809.yml diff --git a/html/changelogs/AutoChangeLog-pr-15809.yml b/html/changelogs/AutoChangeLog-pr-15809.yml new file mode 100644 index 00000000000..9e2ef92dc94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15809.yml @@ -0,0 +1,4 @@ +author: bgobandit +delete-after: True +changes: + - rscadd: "CentComm has been informed that cargo is receiving new forms of contraband in crates. Remember, Nanotrasen has a zero-tolerance contraband policy!" From e1a1c510de3db9a4f6dc4a7d5c6b83667c2592f5 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 29 Feb 2016 03:53:44 +0000 Subject: [PATCH 15/16] Automatic changelog generation for PR #15707 --- html/changelogs/AutoChangeLog-pr-15707.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15707.yml diff --git a/html/changelogs/AutoChangeLog-pr-15707.yml b/html/changelogs/AutoChangeLog-pr-15707.yml new file mode 100644 index 00000000000..9e92412de4a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15707.yml @@ -0,0 +1,8 @@ +author: CoreOverload +delete-after: True +changes: + - rscadd: "A new \"breathing tube\" mouth implant. It allows you to use internals without a mask and protects you from being choked. It doesn't protect you from the grab itself." + - tweak: "Arm cannon implants are now actually implanted into the arms, not into the chest." + - bugfix: "Arm cannons have an action button again." + - tweak: "Heart removal is no longer instakill. It puts you in condition similar to heart attack instead. You can fix it by installing a new heart and applying defibrillator if it wasn't beating." + - rscadd: "You can now make a stopped heart beat again by squeezing it. It will stop beating very soon, so you better be quick if you want to install it without using defibrillator." From e7d0451a9392adc7bd89b15538a2425f100c4e75 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 29 Feb 2016 04:01:44 +0000 Subject: [PATCH 16/16] Automatic changelog generation for PR #15780 --- html/changelogs/AutoChangeLog-pr-15780.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15780.yml diff --git a/html/changelogs/AutoChangeLog-pr-15780.yml b/html/changelogs/AutoChangeLog-pr-15780.yml new file mode 100644 index 00000000000..2990d00b445 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15780.yml @@ -0,0 +1,5 @@ +author: PKPenguin321 +delete-after: True +changes: + - rscadd: "Bolas are now in the game. They're a simple device fashioned from a cable and two weights on the end, designed to entangle enemies by wrapping around their legs upon being thrown at them. The victim can remove them rather quickly, however." + - rscadd: "Bolas can be crafted by applying 6 metal sheets to cablecuffs. They can also be tablecrafted."