From 81ed1467d7b0f2600eb61e15213d2beaffdb563a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 13 Apr 2016 01:50:11 -0400 Subject: [PATCH 01/41] Xenobio Additions --- .../game/objects/items/weapons/power_cells.dm | 25 ++++++++--- code/modules/power/cell.dm | 5 +++ .../chemical_reaction_slime.dm | 14 ++++++ .../research/xenobiology/xenobiology.dm | 43 +++++++++++++++++++ 4 files changed, 82 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index d2598a4036f..62f60a91bc4 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -16,10 +16,18 @@ materials = list(MAT_METAL=700, MAT_GLASS=50) var/rigged = 0 // true if rigged to explode var/minor_fault = 0 //If not 100% reliable, it will build up faults. + var/chargerate = 1000 //how much power is given every tick in a recharger + var/self_recharge = 0 //does it self recharge, over time, or not? - suicide_act(mob/user) - to_chat(viewers(user), "[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.") - return (FIRELOSS) +/obj/item/weapon/stock_parts/cell/suicide_act(mob/user) + to_chat(viewers(user), "[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.") + return (FIRELOSS) + +/obj/item/weapon/stock_parts/cell/process() + if(self_recharge) + give(chargerate * 0.25) + else + return PROCESS_KILL /obj/item/weapon/stock_parts/cell/crap name = "\improper Nanotrasen brand rechargable AA battery" @@ -51,6 +59,7 @@ maxcharge = 15000 rating = 3 materials = list(MAT_GLASS=60) + chargerate = 1500 /obj/item/weapon/stock_parts/cell/high/empty/New() ..() @@ -63,6 +72,7 @@ maxcharge = 20000 materials = list(MAT_GLASS=70) rating = 4 + chargerate = 2000 /obj/item/weapon/stock_parts/cell/super/empty/New() ..() @@ -75,6 +85,7 @@ maxcharge = 30000 rating = 5 materials = list(MAT_GLASS=80) + chargerate = 3000 /obj/item/weapon/stock_parts/cell/hyper/empty/New() ..() @@ -87,6 +98,7 @@ maxcharge = 40000 materials = list(MAT_GLASS=80) rating = 6 + chargerate = 4000 /obj/item/weapon/stock_parts/cell/bluespace/empty/New() ..() @@ -99,8 +111,10 @@ maxcharge = 30000 rating = 6 materials = list(MAT_GLASS=80) - use() - return 1 + chargerate = 30000 + +/obj/item/weapon/stock_parts/cell/infinite/use() + return 1 /obj/item/weapon/stock_parts/cell/potato name = "potato battery" @@ -122,6 +136,7 @@ icon = 'icons/mob/slimes.dmi' icon_state = "yellow slime extract" materials = list() + self_recharge = 1 // Infused slime cores self-recharge, over time /obj/item/weapon/stock_parts/cell/pulse/carbine name = "pulse carbine power cell" diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 7dda66629d7..6e61be2a257 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -5,11 +5,16 @@ /obj/item/weapon/stock_parts/cell/New() ..() + processing_objects.Add(src) charge = maxcharge spawn(5) updateicon() +/obj/item/weapon/stock_parts/cell/Destroy() + processing_objects.Remove(src) + return ..() + /obj/item/weapon/stock_parts/cell/proc/updateicon() if(isnull(src.overlay_image)) src.overlay_image = image('icons/obj/power.dmi') diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm index ee51efe2b1e..c80370734d4 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -662,3 +662,17 @@ S.colour = pick("grey","orange", "metal", "blue", "purple", "dark purple", "dark blue", "green", "silver", "yellow", "gold", "yellow", "red", "silver", "pink", "cerulean", "sepia", "bluespace", "pyrite", "light pink", "oil", "adamantine", "black") S.forceMove(get_turf(holder.my_atom)) S.visible_message("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!") + +/datum/chemical_reaction/slime_transfer + name = "Transfer Potion" + id = "slimetransfer" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/rainbow + +/datum/chemical_reaction/slime_transfer/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/transference/P = new /obj/item/slimepotion/transference + P.forceMove(get_turf(holder.my_atom)) \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 44384db8187..7d2462494e9 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -223,6 +223,49 @@ being_used = 0 ..() +/obj/item/slimepotion/transference + name = "consciousness transference potion" + desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle6" + origin_tech = "biotech=6" + var/prompted = 0 + var/animal_type = SENTIENCE_ORGANIC + +/obj/item/slimepotion/transference/afterattack(mob/living/M, mob/user) + if(prompted || !ismob(M)) + return + if(!isanimal(M) || M.ckey) //much like sentience, these will not work on something that is already player controlled + user << "[M] already has a higher consciousness!" + return ..() + if(M.stat) + user << "[M] is dead!" + return ..() + var/mob/living/simple_animal/SM = M + if(SM.sentience_type != animal_type) + user << "You cannot transfer your consciousness to [SM]." //no controlling machines + return ..() + if(jobban_isbanned(user, ROLE_SENTIENT)) + user << "Your mind goes blank as you attempt to use the potion." + return + + prompted = 1 + if(alert("This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?",,"Yes","No")=="No") + prompted = 0 + return + + user << "You drink the potion then place your hands on [SM]..." + + + user.mind.transfer_to(SM) + SM.universal_speak = 1 + SM.faction = user.faction + SM.sentience_act() //Same deal here as with sentience + user.death() + SM << "In a quick flash, you feel your consciousness flow into [SM]!" + SM << "You are now [SM]. Your allegiances, alliances, and roles are still the same as they were prior to consciousness transfer!" + SM.name = "[SM.name] as [user.real_name]" + qdel(src) /obj/item/slimepotion/steroid name = "slime steroid" From b35b3cf870acbaebe6a0e3a2e0a3af34bcd88bff Mon Sep 17 00:00:00 2001 From: pinatacolada Date: Thu, 21 Apr 2016 18:02:54 +0100 Subject: [PATCH 02/41] Makes fridge boards be selectable Screwdrive the board to select what type of fridge board you want. :cl: pinatacolada tweak: Makes fridge boards be selectable by screwdriving them /:cl: --- code/game/machinery/constructable_frame.dm | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 200b21d441d..2e3e1fd5e0f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -445,6 +445,45 @@ to destroy them and players will be able to make replacements. origin_tech = "programming=1" req_components = list( /obj/item/weapon/stock_parts/matter_bin = 1) + var/list/fridge_names_paths = list( + "\improper SmartFridge" = /obj/machinery/smartfridge, + "\improper MegaSeed Servitor" = /obj/machinery/smartfridge/seeds, + "\improper Refrigerated Medicine Storage" = /obj/machinery/smartfridge/medbay, + "\improper Slime Extract Storage" = /obj/machinery/smartfridge/secure/extract, + "\improper Secure Refrigerated Medicine Storage" = /obj/machinery/smartfridge/secure/medbay, + "\improper Smart Chemical Storage" = /obj/machinery/smartfridge/secure/chemistry, + "smart virus storage" = /obj/machinery/smartfridge/secure/chemistry/virology, + "\improper Drink Showcase" = /obj/machinery/smartfridge/drinks + ) + + +/obj/item/weapon/circuitboard/smartfridge/New() + ..() + if(build_path == /obj/machinery/smartfridge) //If we spawn the base type board (determined by the base type machine as the build path), become a random fridge board + var/new_path = fridge_names_paths[pick(fridge_names_paths)] + set_type(new_path) + + +/obj/item/weapon/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + set_type(null, user) + +/obj/item/weapon/circuitboard/smartfridge/proc/set_type(typepath, mob/user) + var/new_name = "" + if(!typepath) + new_name = input("Circuit Setting", "What would you change the board setting to?") in fridge_names_paths + typepath = fridge_names_paths[new_name] + else + for(var/name in fridge_names_paths) + if(fridge_names_paths[name] == typepath) + new_name = name + break + build_path = typepath + name = new_name + if(findtextEx(new_name, "\improper")) + new_name = replacetext(new_name, "\improper", "") + if(user) + to_chat(user, "You set the board to [new_name].") /obj/item/weapon/circuitboard/monkey_recycler name = "circuit board (Monkey Recycler)" From 35b2d8589c9a129e682d5d4a6db8297ee0a38934 Mon Sep 17 00:00:00 2001 From: pinatacolada Date: Thu, 21 Apr 2016 21:48:28 +0100 Subject: [PATCH 03/41] what falseincarnate said --- code/game/machinery/constructable_frame.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 2e3e1fd5e0f..2e287d29ad2 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -457,12 +457,6 @@ to destroy them and players will be able to make replacements. ) -/obj/item/weapon/circuitboard/smartfridge/New() - ..() - if(build_path == /obj/machinery/smartfridge) //If we spawn the base type board (determined by the base type machine as the build path), become a random fridge board - var/new_path = fridge_names_paths[pick(fridge_names_paths)] - set_type(new_path) - /obj/item/weapon/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) From a9ee7ea97eaeedc0f781181c321c6e95886f5112 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Sun, 17 Apr 2016 05:08:24 -0400 Subject: [PATCH 04/41] PASS 1 TO DO: SCISSORS AND SHAVER REWORK --- code/modules/client/preferences.dm | 81 ++++++---- .../mob/living/carbon/human/appearance.dm | 10 +- code/modules/mob/living/carbon/human/human.dm | 8 +- .../mob/new_player/sprite_accessories.dm | 149 +++++++++++++++--- code/modules/surgery/organs/robolimbs.dm | 90 +++++++++-- icons/mob/body_accessory.dmi | Bin 4069 -> 13074 bytes icons/mob/human_face.dmi | Bin 80515 -> 70884 bytes .../cyberlimbs/bishop/bishop_alt1.dmi | Bin 0 -> 659 bytes .../{bishop.dmi => bishop/bishop_main.dmi} | Bin .../cyberlimbs/bishop/bishop_monitor.dmi | Bin 0 -> 505 bytes .../hesphiastos/hesphiastos_alt1.dmi | Bin 0 -> 483 bytes .../hesphiastos_main.dmi} | Bin .../hesphiastos/hesphiastos_monitor.dmi | Bin 0 -> 469 bytes .../cyberlimbs/morpheus/morpheus_alt1.dmi | Bin 0 -> 596 bytes .../{ipc.dmi => morpheus/morpheus_main.dmi} | Bin .../wardtakahashi/wardtakahashi_alt1.dmi | Bin 0 -> 498 bytes .../wardtakahashi_main.dmi} | Bin .../wardtakahashi/wardtakahashi_monitor.dmi | Bin 0 -> 513 bytes .../human_races/cyberlimbs/xion/xion_alt1.dmi | Bin 0 -> 457 bytes .../{xion.dmi => xion/xion_main.dmi} | Bin .../cyberlimbs/xion/xion_monitor.dmi | Bin 0 -> 474 bytes .../{zenghu.dmi => zenghu/zenghu_main.dmi} | Bin 22 files changed, 273 insertions(+), 65 deletions(-) create mode 100644 icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi rename icons/mob/human_races/cyberlimbs/{bishop.dmi => bishop/bishop_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi rename icons/mob/human_races/cyberlimbs/{hesphaistos.dmi => hesphiastos/hesphiastos_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi rename icons/mob/human_races/cyberlimbs/{ipc.dmi => morpheus/morpheus_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi rename icons/mob/human_races/cyberlimbs/{wardtakahashi.dmi => wardtakahashi/wardtakahashi_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi create mode 100644 icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi rename icons/mob/human_races/cyberlimbs/{xion.dmi => xion/xion_main.dmi} (100%) create mode 100644 icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi rename icons/mob/human_races/cyberlimbs/{zenghu.dmi => zenghu/zenghu_main.dmi} (100%) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e458ebb7a14..2d430c19328 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1200,18 +1200,20 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] if(species == "Machine") //Species that can use prosthetic heads. + var/obj/item/organ/external/head/H = new() + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) - if(!rlimb_data["head"]) - valid_hairstyles[hairstyle] = S - continue - else - continue + if((!rlimb_data["head"] || robohead.is_monitor) && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head + //and said head is in the hair style's allowed models list... + valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle. + continue else - if(!rlimb_data["head"]) + if(!rlimb_data["head"] || robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). continue - else if("Human" in S.species_allowed) + else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Bald") valid_hairstyles[hairstyle] = S - continue + continue else if(!(species in S.species_allowed)) continue @@ -1223,7 +1225,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts h_style = new_h_style if("headaccessory") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with head accessories + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. var/input = "Choose the colour of your your character's head accessory:" var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null if(new_head_accessory) @@ -1232,7 +1234,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts b_headacc = hex2num(copytext(new_head_accessory, 6, 8)) if("ha_style") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with head accessories + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. var/list/valid_head_accessory_styles = list() for(var/head_accessory_style in head_accessory_styles_list) var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style] @@ -1246,7 +1248,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts ha_style = new_head_accessory_style if("markings") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) // Species with markings + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. var/input = "Choose the colour of your your character's markings:" var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null if(new_markings) @@ -1255,7 +1257,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts b_markings = hex2num(copytext(new_markings, 6, 8)) if("m_style") - if(species in list("Unathi", "Vulpkanin", "Tajaran")) // Species with markings + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. var/list/valid_markings = list() for(var/markingstyle in marking_styles_list) var/datum/sprite_accessory/M = marking_styles_list[markingstyle] @@ -1263,10 +1265,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts continue if(species == "Machine") //Species that can use prosthetic heads. - if(!("head" in rlimb_data) && M.name != "None") //If the character can have prosthetic heads and they have the default head (with screen), no optic markings. - continue - else if(("head" in rlimb_data) && M.name == "None") //Otherwise, if they DON'T have the default head and since they must have optics, give them a list of styles excluding the "None" option. + var/obj/item/organ/external/head/H = new() + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if((!("head" in rlimb_data) || robohead.is_monitor) && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. continue + else if(("head" in rlimb_data || !robohead.is_monitor) && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. + if(!(robohead.company in M.models_allowed)) + continue valid_markings[markingstyle] = marking_styles_list[markingstyle] @@ -1307,20 +1313,19 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(gender == FEMALE && S.gender == MALE) continue if(species == "Machine") //Species that can use prosthetic heads. + var/obj/item/organ/external/head/H = new() + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) - if(!rlimb_data["head"]) + if(!rlimb_data["head"] || robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. valid_facialhairstyles[facialhairstyle] = S - continue - else - continue + continue else - if(!rlimb_data["head"]) + if(!rlimb_data["head"] || robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). continue - else if("Human" in S.species_allowed) + else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Shaved") valid_facialhairstyles[facialhairstyle] = S - continue - else - continue + continue else if(!(species in S.species_allowed)) continue @@ -1492,17 +1497,39 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts rlimb_data[second_limb] = null if("Prosthesis") var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs + var/subchoice + var/datum/robolimb/R = new() + var/in_model if(!choice) return + R.company = choice + R = all_robolimbs[R.company] + if(R.has_subtypes == 1) + var/list/robolimb_models = list() + for(var/limb_type in typesof(R)) + var/datum/robolimb/L = new limb_type() + if(limb in L.parts) + robolimb_models[L.company] = L + if(second_limb in L.parts) + in_model = 1 + subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + if(subchoice) + choice = subchoice if(limb == "head") - m_style = "Humanoid Optics" ha_style = "None" h_style = hair_styles_list["Bald"] + f_style = facial_hair_styles_list["Shaved"] + m_style = "None" rlimb_data[limb] = choice organ_data[limb] = "cyborg" if(second_limb) - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" + if(subchoice) + if(in_model) + rlimb_data[second_limb] = choice + organ_data[second_limb] = "cyborg" + else + rlimb_data[second_limb] = choice + organ_data[second_limb] = "cyborg" if("organs") var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index d74dcbd54c4..8264db804fd 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -179,16 +179,17 @@ continue if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/obj/item/organ/external/head/H = organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] if(!H) return if(species.name in S.species_allowed) //If this is a hairstyle native to the user's species... - if(H.model == "Morpheus Cyberkinetics") //Check to see if they have the default head. + if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_hairstyles += hairstyle //Give them their hairstyles if they do. continue else //If they don't have the default head, they shouldn't be getting any hairstyles they wouldn't normally. continue else - if(H.model == "Morpheus Cyberkinetics") //If the hairstyle is not native to the user's species, and they're using the default head, don't let them access it. + if(robohead.is_monitor) //If the hair style is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. continue else if("Human" in S.species_allowed) //If the user has a robotic head and the hairstyle can fit humans, let them use it as a wig for their humanoid robot head. @@ -212,17 +213,18 @@ continue if(species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/obj/item/organ/external/head/H = organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] if(!H) continue // No head, no hair if(species.name in S.species_allowed) //If this is a facial hair style native to the user's species... - if(H.model == "Morpheus Cyberkinetics") //Check to see if they have the default head. + if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. valid_facial_hairstyles += facialhairstyle //Give them their facial hair styles if they do. continue else //If they don't have the default head, they shouldn't be getting any facial hair styles they wouldn't normally. continue else - if(H.model == "Morpheus Cyberkinetics") //If the facial hair style is not native to the user's species, and they're using the default head, don't let them access it. + if(robohead.is_monitor) //If the facial hair style is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. continue else if("Human" in S.species_allowed) //If the user has a robotic head and the facial hair style can fit humans, let them use it as a postiche for their humanoid robot head. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index aa187431c63..6a5cca19723 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1590,7 +1590,11 @@ return if(species.flags & ALL_RPARTS) //If they can have a fully cybernetic body... - if(client.prefs.rlimb_data["head"]) //If head is present here, that means it's not the default Morpheus. Thus, no screen to adjust. Instead, let them change the colour of their optics! + var/obj/item/organ/external/head/H = organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if(!H) + return + if(!robohead.is_monitor) //If head is present here, that means it's not the default Morpheus. Thus, no screen to adjust. Instead, let them change the colour of their optics! var/optic_colour = input(src, "Select optic colour", rgb(r_markings, g_markings, b_markings)) as color|null if(optic_colour) r_markings = hex2num(copytext(optic_colour, 2, 4)) @@ -1598,7 +1602,7 @@ b_markings = hex2num(copytext(optic_colour, 6, 8)) update_markings() - else if(!client.prefs.rlimb_data["head"])//Means that the character has the default Morpheus head, which has a screen. Time to customize. + else if(robohead.is_monitor)//Means that the character has the default Morpheus head, which has a screen. Time to customize. var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 23e3fb1d906..a1e764eb2b3 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -43,6 +43,7 @@ // Restrict some styles to specific species var/list/species_allowed = list("Human", "Slime People") + var/models_allowed = list() //Specifies which, if any, hairstyles can be accessed by which prosthetics. Should equal the manufacturing company name in robolimbs.dm. // Whether or not the accessory can be affected by colouration var/do_colouration = 1 @@ -57,7 +58,6 @@ */ /datum/sprite_accessory/hair - icon = 'icons/mob/human_face.dmi' // default icon for all hairs bald @@ -379,105 +379,169 @@ //////END VG HAIRSTYLES/////// ////////////////////////////// + ipc_screen_pink - name = "pink IPC screen" + name = "Pink IPC Screen" icon_state = "ipc_pink" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_red - name = "red IPC screen" + name = "Red IPC Screen" icon_state = "ipc_red" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_green - name = "green IPC screen" + name = "Green IPC Screen" icon_state = "ipc_green" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_blue - name = "blue IPC screen" + name = "Blue IPC Screen" icon_state = "ipc_blue" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_breakout - name = "breakout IPC screen" + name = "Breakout IPC Screen" icon_state = "ipc_breakout" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_eight - name = "eight IPC screen" + name = "Eight IPC Screen" icon_state = "ipc_eight" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_rainbow - name = "rainbow IPC screen" + name = "Rainbow IPC Screen" icon_state = "ipc_rainbow" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_goggles - name = "goggles IPC screen" + name = "Goggles IPC Screen" icon_state = "ipc_goggles" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_heart - name = "heart IPC screen" + name = "Heart IPC Screen" icon_state = "ipc_heart" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_monoeye - name = "monoeye IPC screen" + name = "Monoeye IPC Screen" icon_state = "ipc_monoeye" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_nature - name = "nature IPC screen" + name = "Nature IPC Screen" icon_state = "ipc_nature" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_orange - name = "orange IPC screen" + name = "Orange IPC Screen" icon_state = "ipc_orange" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_purple - name = "purple IPC screen" + name = "Purple IPC Screen" icon_state = "ipc_purple" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_shower - name = "shower IPC screen" + name = "Shower IPC Screen" icon_state = "ipc_shower" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_static - name = "static IPC screen" + name = "Static IPC Screen" icon_state = "ipc_static" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_yellow - name = "yellow IPC screen" + name = "Yellow IPC Screen" icon_state = "ipc_yellow" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_scrolling - name = "scanline IPC screen" + name = "Scanline IPC Screen" icon_state = "ipc_scroll" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_console - name = "console IPC screen" + name = "Console IPC Screen" icon_state = "ipc_console" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_rgb - name = "rgb IPC screen" + name = "RGB IPC Screen" icon_state = "ipc_rgb" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") ipc_screen_glider - name = "glider IPC screen" + name = "Glider IPC Screen" icon_state = "ipc_gol_glider" species_allowed = list("Machine") + models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.") + + hesphiastos_alt_off + name = "Dark Hesphiastos Screen" + icon_state = "hesphiastos_alt_off" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_pink + name = "Pink Hesphiastos Screen" + icon_state = "hesphiastos_alt_pink" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_orange + name = "Orange Hesphiastos Screen" + icon_state = "hesphiastos_alt_orange" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_goggle + name = "Goggles Hesphiastos Screen" + icon_state = "hesphiastos_alt_goggles" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_scroll + name = "Scrolling Hesphiastos Screen" + icon_state = "hesphiastos_alt_scroll" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_rgb + name = "RGB Hesphiastos Screen" + icon_state = "hesphiastos_alt_rgb" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + + hesphiastos_alt_rainbow + name = "Rainbow Hesphiastos Screen" + icon_state = "hesphiastos_alt_rainbow" + species_allowed = list("Machine") + models_allowed = list("Hesphiastos Industries alt.") + /* /////////////////////////////////// @@ -496,8 +560,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Machine", "Vulpkanin", "Slime People") - + species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People") watson name = "Watson Mustache" @@ -1785,6 +1848,21 @@ icon_state = "antennae" species_allowed = list("Machine") +/datum/sprite_accessory/head_accessory/ipc_tv_antennae + name = "T.V. Antennae" + icon_state = "tvantennae" + species_allowed = list("Machine") + +/datum/sprite_accessory/head_accessory/ipc_tesla_antennae + name = "Tesla Antennae" + icon_state = "tesla" + species_allowed = list("Machine") + +/datum/sprite_accessory/head_accessory/ipc_light + name = "Head Light" + icon_state = "light" + species_allowed = list("Machine") + /* BODY MARKINGS */ @@ -1832,6 +1910,31 @@ name = "Humanoid Optics" species_allowed = list("Machine") icon_state = "optics" + models_allowed = list("Bishop Cybernetics", "Hesphiastos Industries", "Ward-Takahashi", "Xion Manufacturing Group", "Zeng-Hu Pharmaceuticals") //Should be the same as the manufacturing company of the limb in robolimbs.dm + +/datum/sprite_accessory/body_markings/optics/bishop_alt + name = "Bishop Alt. Optics" + species_allowed = list("Machine") + icon_state = "bishop_alt_optics" + models_allowed = list("Bishop Cybernetics alt.") + +/datum/sprite_accessory/body_markings/optics/morpheus_alt + name = "Morpheus Alt. Optics" + species_allowed = list("Machine") + icon_state = "morpheus_alt_optics" + models_allowed = list("Morpheus Cyberkinetics alt.") + +/datum/sprite_accessory/body_markings/optics/wardtakahashi_alt + name = "Ward-Takahashi Alt. Optics" + species_allowed = list("Machine") + icon_state = "wardtakahashi_alt_optics" + models_allowed = list("Ward-Takahashi alt.") + +/datum/sprite_accessory/body_markings/optics/xion_alt + name = "Xion Alt. Optics" + species_allowed = list("Machine") + icon_state = "xion_alt_optics" + models_allowed = list("Xion Manufacturing Group alt.") /datum/sprite_accessory/body_markings/tattoo // Tattoos applied post-round startup with tattoo guns in item_defines.dm name = "base tattoo" diff --git a/code/modules/surgery/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm index bcebd7e1e64..f7a450d77f6 100644 --- a/code/modules/surgery/organs/robolimbs.dm +++ b/code/modules/surgery/organs/robolimbs.dm @@ -1,4 +1,5 @@ var/global/list/all_robolimbs = list() +var/global/list/robolimb_data = list() var/global/list/chargen_robolimbs = list() var/global/datum/robolimb/basic_robolimb @@ -9,41 +10,112 @@ var/global/datum/robolimb/basic_robolimb all_robolimbs[R.company] = R if(!R.unavailable_at_chargen) if(R != "head" && R != "chest" && R != "groin" ) //Part of the method that ensures only IPCs can access head, chest and groin prosthetics. - chargen_robolimbs[R.company] = R + if(R.has_subtypes) //Ensures solos get added to the list as well be incorporating has_subtypes == 1 and has_subtypes == 2. + chargen_robolimbs[R.company] = R //List only main brands and solo parts. /datum/robolimb var/company = "Unbranded" // Shown when selecting the limb. var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb. var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from. var/unavailable_at_chargen // If set, not available at chargen. + var/is_monitor // If set, limb is a monitor and should be getting monitor styles. + var/has_subtypes = 2 // If null, object is a model. If 1, object is a brand (that serves as the default model) with child models. If 2, object is a brand that has no child models and thus also serves as the model.. + var/parts = list("chest", "groin", "head", "r_arm", "r_hand", "r_leg", "r_foot", "l_leg", "l_foot", "l_arm", "l_hand") //Defines what parts said brand can replace on a body. /datum/robolimb/bishop company = "Bishop Cybernetics" desc = "This limb has a white polymer casing with blue holo-displays." - icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi' + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi' + has_subtypes = 1 -/datum/robolimb/hesphaistos +/datum/robolimb/bishop/alt1 + company = "Bishop Cybernetics alt." + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi' + parts = list("head") + has_subtypes = null + +/datum/robolimb/bishop/monitor + company = "Bishop Cybernetics mtr." + icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi' + parts = list("head") + is_monitor = 1 + has_subtypes = null + +/datum/robolimb/hesphiastos company = "Hesphiastos Industries" desc = "This limb has a militaristic black and green casing with gold stripes." - icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi' + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi' + has_subtypes = 1 -/datum/robolimb/ipc +/datum/robolimb/hesphiastos/alt1 + company = "Hesphiastos Industries alt." + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi' + parts = list("head") + is_monitor = 1 + has_subtypes = null + +/datum/robolimb/hesphiastos/monitor + company = "Hesphiastos Industries mtr." + icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi' + parts = list("head") + is_monitor = 1 + has_subtypes = null + +/datum/robolimb/morpheus company = "Morpheus Cyberkinetics" desc = "This limb is simple and functional; no effort has been made to make it look human." - icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi' + icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi' unavailable_at_chargen = 1 + is_monitor = 1 + has_subtypes = 1 + +/datum/robolimb/morpheus/alt1 + company = "Morpheus Cyberkinetics alt." + icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi' + parts = list("head") + unavailable_at_chargen = null + is_monitor = null + has_subtypes = 2 //Edge case. We want to be able to pick this one, and if we had it left as null for has_subtypes we'd be assuming it'll be chosen as a child model, + //and since the parent is unavailable at chargen, we wouldn't be able to see it in the list anyway. Now, we'll be able to select the Morpheus Ckt. Alt. head as a solo-model. /datum/robolimb/wardtakahashi company = "Ward-Takahashi" desc = "This limb features sleek black and white polymers." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi' + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi' + has_subtypes = 1 + +/datum/robolimb/wardtakahashi/alt1 + company = "Ward-Takahashi alt." + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi' + parts = list("head") + has_subtypes = null + +/datum/robolimb/wardtakahashi/monitor + company = "Ward-Takahashi mtr." + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi' + parts = list("head") + is_monitor = 1 + has_subtypes = null /datum/robolimb/xion company = "Xion Manufacturing Group" desc = "This limb has a minimalist black and red casing." - icon = 'icons/mob/human_races/cyberlimbs/xion.dmi' + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi' + has_subtypes = 1 + +/datum/robolimb/xion/alt1 + company = "Xion Manufacturing Group alt." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi' + has_subtypes = null + +/datum/robolimb/xion/monitor + company = "Xion Manufacturing Group mtr." + icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi' + is_monitor = 1 + has_subtypes = null /datum/robolimb/zenghu company = "Zeng-Hu Pharmaceuticals" desc = "This limb has a rubbery fleshtone covering with visible seams." - icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi' \ No newline at end of file + icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi' + has_subtypes = 2 \ No newline at end of file diff --git a/icons/mob/body_accessory.dmi b/icons/mob/body_accessory.dmi index 16d6b2f03f917153409dcef6e67a17932ccfa710..e98c077053b2a061ccee33283b638ce1c9278c8a 100644 GIT binary patch literal 13074 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 delta 60645 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 diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3443d18b0a3c72fbb007172385d325b810b18910 GIT binary patch literal 659 zcmV;E0&M+>P)B`E=p`oFxtE;cCud%VQprD|Oi;Kv}$h*6{*x1-qR8*dx zp2Wn&z`(#tN=m}Q!lS(zrWSh)xEvFwzjs-&CR~PzMr3;&(F`exVW{owZp^1 ztgNh;mzS8Bn30i@iHV8E#>Tq3y7%|@larIh#l`>s|KZ``!NI}K&d!#WmV0}9qobqL z)YP)FvewqtjEsz_si^_Q?Bf6c00DGTPE!Ct=GbNc003!vR9JLGWpiV4X>fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3K9+BQ-HaiHkEOv#1!Phl?|ppYV%;F(9&a2_RxwHq` zv%&jdNcf@gjPTxQ?2p|5^?_^r$U}V?@i>Wj6e9j36*7@o`iT|5gvT=G6TtkJ$Ym}H z%>OoIafZ$tKh2VCihFZJDNF2tzXs!}c?T+4Q30rO(wh||wSZ~(rspjdi^cL%Kp2Mf z%R>jipUoGF3aG_==A!{v)^)u~8$8gYD-&5_fwhvY+?0H~>-W1YFE=Kl)>wfqTEEkx zll@+HLU(>!XsiIdNHE=Uz3=yX&0EbxBtT$0P+Xm5{c{W-Y@UB ttB5ZDyzkIFp7@5(2mXmH7K_E=`~W(s6{)0SD6kpKVy05ku+y}iW5#B6MApP!$_#l@qO z09RL6W@cv2&dyIyPkD%U4gdfE0d!JMQvg8b*k%9#0BL$uSad{Xb7OL8aCB*JZU6vy zoKseCa&`CgQ*iP1)s^d^C{{N>st-9;Q#x9J8ldw9M%Y+Sd-G4!5fuJ{5wKdrHgL7`^ zQNs8TeGDEpq`{5j=!S%RJaObxM7~Sswcrd3n3#3J0^zlQ1r=l_BF>e9N$+5S1(LH) zkTdd{c<`}bB2!iCkae$9z6;d#j=(`K-)}fRLZi`W{0eEoz~|eTH2}ApB*80k-S$^m zY>Wkd0?UjGn5`DzOX#$K>II|)c>n7M v@R@yPZuJA|dW{^?f55KSzkLxJjm9>2lt>FHAL7d=00000NkvXXu0mjf9IE9; literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4e8e5658f4f6d1da995e7138cf03b486b0723bd2 GIT binary patch literal 483 zcmV<90UZ8`P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DI+y8MTv_uC9|j)q=$<$ zttc@!6~s2=QdV&Fa{-$Q02HGcpk{Hed;kCd=}AOER9J=WmO+xkFbD*NfJGZ3EB}A( zf}LYVsoYYvw2uuV--*k|vI?Fc)gRT3?I#{3fF#-!r&i!3cd=7prilQir ZlRry+2A-1cs`CH<002ovPDHLkV1jv|$F2YX literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/hesphaistos.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi similarity index 100% rename from icons/mob/human_races/cyberlimbs/hesphaistos.dmi rename to icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cc46f848343c9b21e2438ef08864c639eadc1bd2 GIT binary patch literal 469 zcmV;`0V@89P)YE6 z3IG(N8K7oyuY3Ri0P0CZK~zYIV_={c5E2v;z{h8H3=MQf;xneZxhEnk;1HcTRRURq zmxz=ziUQM_Q!S7cNDE2}qbO*dIkf{>f#L3r#wZG!LxYhOa2g8=TcY@)qobn%nLl&p z%n2w87@8YU`P0zk85+?PaH7d$3J?McgcLAQtY8$30@?ybK|z$fXe=m*Qa&(tmMrmf zK=4_nc)8C&R>9%vEhrg);ImE?+%lyBS%Kt2B~4@nla!<;A}e6%bX2xPRxsH}WCn^O zIWZNWWp7{sfrkrnMFuLrtpQB|1DXH_x;*Uxmf}Ex?v5A*LjV8(F48NB5f(y|00000 LNkvXXu0mjf#WJfN literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5ff0fbaa5e1d803de8281f8b9d5b970984d3279e GIT binary patch literal 596 zcmV-a0;~OrP)8YFHEC&SVq#)_eSNE| zs}Bzk85tQLA0IpYcOiWA=5D+mjF-l5GhK7bRGBPD4B}hm} zEiElHG&EdXTz-CjU|?WQPEL7wd3t(!XlQ5zYE%~h0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0* zI5Sc+(=$pSoZ^zil2jm5DI+y8MTv_uC9|j)q=$<$ttc@!6~s2=QdV&Fa{-$Q02HGc zpk{Hed;kCe21!IgR9J=WmdTF7Fc3u3gtmtS0wk;sOALhl|G#e>EaPJ&75;VJQs_ZU+26l+XHuVa~yPIOu2Icrk+U zWICI>>3lYwjA2ypd1JDqEEmg_8?Tm&vP?2#_<~!0U0Lh=|A4jC`rg17Y__|a^44iF z1gd(s-FONt?(4(R7VaGs_IRlG=&t|s!0DV{_<~D*J_R3oS0;aNxO!iC4;PJ)D*$G^ i|81`^kw_%^e*FUXuMa=gH%_?#00000041xcGJ_-_xJbU;Nb7?@3ywKXK8ASi;IMWglTDMaBy&}tgKZ= z86^M!00DGTPE!Ct=GbNc003!vR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+BQ-HaiHkEOv#1!P zhl?|NklpZ~J7gyu5 zAV9c5I}+47TLA$QFAea~yY)Vt1t0;BB`f;4jpPj2P_ZGCk+6<2RyrREmd!`Pn$3TK z@dHjKlgZ@&eD42LR`h#jkd=?Yt1rL>z?b*>;l z+gO0R540!y0tB-G6AQ3d;c9rYK}fLxzoOjt<7)W#@+BSnJ^2kgK*JM{|F*Wam6er?i;K)= z|7mGyaBy&=lK|`M>%hRk!#iGj00001bW%=J06^y0W&i*HX?j#xbVOxyV{&P5bZKvH z004NLQ&wYE63IG(N8K7oyuY3Ri0P;yh zK~z|U?Uuog!ypVqvyc$HF(GzS_y7NN+2q=Rs@1C6iYMhX<_U5c55s5ibpmteohu(c zKTaWpX+#D$N17?l(C|HlWm&?+AWyVr$}1%(*bc!41)@1;6)51#A-Es`@1m-*qr3>V z@(;F(U>A`c3kE)UI{zIRtMR~6&&w@a1NHcUffu>H-|+esI-O4Ezu*pFd8RYR#}k|B zY79mk+p1=qkRnl;AR-R;^S~u6ez+i{8=HFXv7m%%e8X?#NL~dCL_I}@=Swphd5KsM z#gofFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+ zBQ-HaiHkEOv#1!Phl?|onzMq(E94EqUq2SwM0WZ9o7J63}0%>C_5T-zqM= zOrIp#{}|6`dN}NU$8j9zQ9!NLJS-zG@51V79Qz=-eu&Dn|L22k(uZ*8gV%S~w;i#i z7*r4V$oC3v83Ct#4+v}}jG-R~01pU`<2VLC(j^B}zfUbY00000NkvXXu0mjfVF$9q literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/xion.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi similarity index 100% rename from icons/mob/human_races/cyberlimbs/xion.dmi rename to icons/mob/human_races/cyberlimbs/xion/xion_main.dmi diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dee73558711caedce151c2c9a3b9c56f5270f8ac GIT binary patch literal 474 zcmV<00VV#4P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DI+y8MTv_uC9|j)q=$<$ zttc@!6~s2=QdV&Fa{-$Q02HGcpk{Hed;kCd;7LS5R9J=WmcbH&FbqUXla@e|>i>VO zv3hiiBL_#P@A{S<;F3-0zgQk%pTp*XCoZKhp~O;GsD=f&<&cr(*pG13s z!U8pBHt3T}FAzrsP0dW(pg`jvC@k>SRJAqaBk|y4e~&Cf9WOcdZv@6VrR^wilFRoS z&cDKBGMW4eeI5wDzH+c1#3?Wbk;U!qT~LKor?}s%m)E}d8k)S~0TBf`XIv063I+?q zX^$C%3t}Pd@d@bpIGx5v1#H9nDxJ^lGjkmV4s?&4(tp5P*MClg$z<}H8;9!$Xf!N0 QbpQYW07*qoM6N<$g2zO{DF6Tf literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/cyberlimbs/zenghu.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi similarity index 100% rename from icons/mob/human_races/cyberlimbs/zenghu.dmi rename to icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi From 6398e9c3fe4b37fd93f2a750d0a1768508c11d9f Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Wed, 20 Apr 2016 04:27:05 -0400 Subject: [PATCH 05/41] Pass2 --- code/game/objects/items/weapons/cosmetics.dm | 16 +++++----- code/game/objects/items/weapons/scissors.dm | 30 +++++++++++-------- code/modules/client/preferences.dm | 12 ++++---- code/modules/mob/living/carbon/human/human.dm | 13 ++++++-- .../mob/living/carbon/human/update_icons.dm | 3 ++ .../mob/new_player/sprite_accessories.dm | 2 ++ 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 208b93c0c53..3e2448fa8fe 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -91,14 +91,15 @@ /obj/item/weapon/razor/attack(mob/living/carbon/M as mob, mob/user as mob) if(ishuman(M)) var/mob/living/carbon/human/H = M + var/obj/item/organ/external/head/C = H.organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[C.model] if(user.zone_sel.selecting == "mouth") if(!get_location_accessible(H, "mouth")) to_chat(user, "The mask is in the way.") return - if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one... - if(!H.client.prefs.rlimb_data["head"]) - to_chat(user, "You find yourself disappointed at the appalling lack of facial hair.") - return + if((H.species && H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + to_chat(user, "You find yourself disappointed at the appalling lack of facial hair.") + return if(H.f_style == "Shaved") to_chat(user, "Already clean-shaven.") return @@ -127,10 +128,9 @@ if(!get_location_accessible(H, "head")) to_chat(user, "The headgear is in the way.") return - if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one... - if(!H.client.prefs.rlimb_data["head"]) - to_chat(user, "You find yourself disappointed at the appalling lack of hair.") - return + if((H.species && H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the target is of a species that can have prosthetic heads, but the head doesn't support human hair 'wigs'... + to_chat(user, "You find yourself disappointed at the appalling lack of hair.") + return if(H.h_style == "Bald" || H.h_style == "Balding Hair" || H.h_style == "Skinhead") to_chat(user, "There is not enough hair left to shave...") return diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 34b700d440d..3032d636d19 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -30,18 +30,23 @@ //this is largely copypasted from there. //handle facial hair (if necessary) var/list/species_facial_hair = list() + var/obj/item/organ/external/head/C = H.organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[C.model] if(H.gender == MALE || H.get_species() == "Vulpkanin") if(H.species) for(var/i in facial_hair_styles_list) var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] if(H.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. + if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return species_facial_hair += i else - if(H.species.flags & ALL_RPARTS) - if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_facial.species_allowed)) - species_facial_hair += i - else - return + if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_facial.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + species_facial_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return else species_facial_hair = facial_hair_styles_list var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair @@ -51,15 +56,16 @@ for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] if(H.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. - if((H.species.flags & ALL_RPARTS) && !("head" in H.client.prefs.rlimb_data)) + if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") return species_hair += i else - if(H.species.flags & ALL_RPARTS) - if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_hair.species_allowed)) - species_facial_hair += i - else - return + if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_hair.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + species_facial_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") + return else species_hair = hair_styles_list var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair @@ -103,7 +109,7 @@ playsound(loc, "sound/items/Wirecutter.ogg", 50, 1, -1) if(do_after(user, 50, target = H)) playsound(loc, "sound/weapons/bladeslice.ogg", 50, 1, -1) - user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") + user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") //Just a little off the top. H.losebreath += 10 //30 Oxy damage over time H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors") var/turf/location = get_turf(H) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2d430c19328..767fa014910 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1204,12 +1204,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) - if((!rlimb_data["head"] || robohead.is_monitor) && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head + if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head //and said head is in the hair style's allowed models list... valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle. continue else - if(!rlimb_data["head"] || robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). + if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). continue else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Bald") valid_hairstyles[hairstyle] = S @@ -1268,9 +1268,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/obj/item/organ/external/head/H = new() H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] - if((!("head" in rlimb_data) || robohead.is_monitor) && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. + if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. continue - else if(("head" in rlimb_data || !robohead.is_monitor) && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. + else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. if(!(robohead.company in M.models_allowed)) continue @@ -1317,11 +1317,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) - if(!rlimb_data["head"] || robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. + if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. valid_facialhairstyles[facialhairstyle] = S continue else - if(!rlimb_data["head"] || robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). + if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). continue else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Shaved") valid_facialhairstyles[facialhairstyle] = S diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6a5cca19723..0af960d9538 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1589,20 +1589,28 @@ to_chat(src, "You cannot change your monitor or optical display in your current state.") return + var/obj/item/organ/external/head/head_organ = get_organ("head") + if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED)) //If the rock'em-sock'em robot's head came off during a fight, they shouldn't be able to change their screen/optics. + to_chat(src, "Where's your head at? Can't change your monitor/display without one.") + return + if(species.flags & ALL_RPARTS) //If they can have a fully cybernetic body... var/obj/item/organ/external/head/H = organs_by_name["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(!H) return - if(!robohead.is_monitor) //If head is present here, that means it's not the default Morpheus. Thus, no screen to adjust. Instead, let them change the colour of their optics! + if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics! var/optic_colour = input(src, "Select optic colour", rgb(r_markings, g_markings, b_markings)) as color|null + if(incapacitated()) + to_chat(src, "You were interrupted while changing the colour of your optics.") + return if(optic_colour) r_markings = hex2num(copytext(optic_colour, 2, 4)) g_markings = hex2num(copytext(optic_colour, 4, 6)) b_markings = hex2num(copytext(optic_colour, 6, 8)) update_markings() - else if(robohead.is_monitor)//Means that the character has the default Morpheus head, which has a screen. Time to customize. + else if(robohead.is_monitor) //Means that the character's head is a monitor (has a screen). Time to customize. var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] @@ -1611,6 +1619,7 @@ var/new_style = input(src, "Select a monitor display", "Monitor Display", h_style) as null|anything in hair if(incapacitated()) + to_chat(src, "You were interrupted while changing your monitor display.") return if(new_style) h_style = new_style diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 623cc9df1e9..48f5701a671 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -365,6 +365,9 @@ var/global/list/damage_icon_parts = list() if(m_style && m_style != "None") var/datum/sprite_accessory/marking_style = marking_styles_list[m_style] if(marking_style) + var/obj/item/organ/external/head/head_organ = get_organ("head") + if((!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED)) && marking_style.marking_location == "head") + return //If the head is destroyed and it is the organ the marking is located on, get us out of here. This prevents floating optical markings on decapitated IPCs, for example. var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s") if(marking_style.do_colouration) markings_s.Blend(rgb(r_markings, g_markings, b_markings), ICON_ADD) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index a1e764eb2b3..e5c0c6ab38c 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -44,6 +44,7 @@ // Restrict some styles to specific species var/list/species_allowed = list("Human", "Slime People") var/models_allowed = list() //Specifies which, if any, hairstyles can be accessed by which prosthetics. Should equal the manufacturing company name in robolimbs.dm. + var/marking_location //Specifies which bodypart a body marking is located on. // Whether or not the accessory can be affected by colouration var/do_colouration = 1 @@ -1911,6 +1912,7 @@ species_allowed = list("Machine") icon_state = "optics" models_allowed = list("Bishop Cybernetics", "Hesphiastos Industries", "Ward-Takahashi", "Xion Manufacturing Group", "Zeng-Hu Pharmaceuticals") //Should be the same as the manufacturing company of the limb in robolimbs.dm + marking_location = "head" /datum/sprite_accessory/body_markings/optics/bishop_alt name = "Bishop Alt. Optics" From 3b435c023a0e33fc2ac0fbacac6a612db95a6ca3 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Thu, 21 Apr 2016 04:35:07 -0400 Subject: [PATCH 06/41] Refactor scissors, fix and finalize prefs, fix missing part definition for xion models, etc. continued: Monitor changing verb will now only show a list of monitor styles available for the monitor head brand you are using. For example, if you chose any of the regular monitor heads (default morpheus or anything suffixed with mtr.) you will get a list of IPC standard monitor styles and nothing else. However, if you chose the hesphiastos alt head (which is also a monitor, but of a different style) the list will be populated with the monitor styles suitable for that hesphiastos head, but none others (not even the ipc standard ones, since those don't fit and hesphiastos alt. isn't in the models_allowed list) --- code/game/objects/items/weapons/scissors.dm | 40 +++++++++++------- code/modules/client/preferences.dm | 24 ++++++++--- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/surgery/organs/robolimbs.dm | 2 + icons/mob/human_face.dmi | Bin 70884 -> 70843 bytes 5 files changed, 45 insertions(+), 23 deletions(-) diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 3032d636d19..a5e0081e723 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -37,16 +37,20 @@ for(var/i in facial_hair_styles_list) var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i] if(H.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles. - if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. - to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(robohead.is_monitor) + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return + continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_facial_hair += i else - if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_facial.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. - species_facial_hair += i - else //Otherwise, they won't be getting any hairstyles. - to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(!robohead.is_monitor) + if("Human" in tmp_facial.species_allowed) + species_facial_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s face worth cutting. How disappointing.") + return else species_facial_hair = facial_hair_styles_list var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair @@ -56,16 +60,20 @@ for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] if(H.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles. - if((H.species.flags & ALL_RPARTS) && robohead.is_monitor) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. - to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the character is of a species that can have full body prosthetics and their head doesn't suport human hair 'wigs', don't add the style to the list. + if(robohead.is_monitor) + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") + return + continue //If the head DOES support human hair wigs, make sure they don't get monitor-oriented styles. species_hair += i else - if((H.species.flags & ALL_RPARTS) && !robohead.is_monitor && ("Human" in tmp_hair.species_allowed)) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. - species_facial_hair += i - else //Otherwise, they won't be getting any hairstyles. - to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") - return + if(H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, and the head supports human hair 'wigs' AND the hair-style is human-suitable, add it to the list. + if(!robohead.is_monitor) + if("Human" in tmp_hair.species_allowed) + species_hair += i + else //Otherwise, they won't be getting any hairstyles. + to_chat(user, "You are unable to find anything on [H]'s head worth cutting. How disappointing.") + return else species_hair = hair_styles_list var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 767fa014910..546a7e5abf4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1496,23 +1496,35 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts organ_data[second_limb] = "amputated" rlimb_data[second_limb] = null if("Prosthesis") - var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in chargen_robolimbs + var/choice var/subchoice var/datum/robolimb/R = new() var/in_model + var/robolimb_companies = list() + for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. + R = new limb_type() + if(!R.unavailable_at_chargen) + if(limb in R.parts) //Ensures users can only choose companies that offer the parts they want. + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + R = new() //Re-initialize R. + + choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. if(!choice) return R.company = choice R = all_robolimbs[R.company] - if(R.has_subtypes == 1) + if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. var/list/robolimb_models = list() - for(var/limb_type in typesof(R)) + for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. var/datum/robolimb/L = new limb_type() - if(limb in L.parts) + if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. robolimb_models[L.company] = L - if(second_limb in L.parts) + if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. + subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. + if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. in_model = 1 - subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. + subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models if(subchoice) choice = subchoice if(limb == "head") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0af960d9538..f2f533da59b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1614,7 +1614,7 @@ var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] - if(species.name in tmp_hair.species_allowed) + if((species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use. hair += i var/new_style = input(src, "Select a monitor display", "Monitor Display", h_style) as null|anything in hair diff --git a/code/modules/surgery/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm index f7a450d77f6..0229ee80cae 100644 --- a/code/modules/surgery/organs/robolimbs.dm +++ b/code/modules/surgery/organs/robolimbs.dm @@ -106,11 +106,13 @@ var/global/datum/robolimb/basic_robolimb /datum/robolimb/xion/alt1 company = "Xion Manufacturing Group alt." icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi' + parts = list("head") has_subtypes = null /datum/robolimb/xion/monitor company = "Xion Manufacturing Group mtr." icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi' + parts = list("head") is_monitor = 1 has_subtypes = null diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 215499099f419dafec60a7bf74a3576dbd488ea2..f0e351b17674a95c834ceadde5da2c39f6627b1b 100644 GIT binary patch delta 6722 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 delta 6667 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 lzf#hBwvp-kIg(-=03#EM75cM#0qW Date: Thu, 21 Apr 2016 19:50:46 -0400 Subject: [PATCH 07/41] Attaching a prosthetic head that isn't a monitor won't cause you to go bald & Fixes disembodied prosthetic heads being bald & ... cont'd: Adds the rendering of markings on disembodied heads. --- code/modules/surgery/limb_reattach.dm | 5 ++++- code/modules/surgery/organs/organ_icon.dm | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index e9464fab9a1..3386f4b9366 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -97,7 +97,10 @@ E.forceMove(target) if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers if(target_zone == "head") - target.h_style = "" + var/obj/item/organ/external/head/H = target.organs_by_name["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if(robohead.is_monitor) //Ensures that if an IPC gets a head that's got a human hair wig attached to their body, the hair won't wipe. + target.h_style = "" E.status &= ~ORGAN_DESTROYED if(E.children) for(var/obj/item/organ/external/C in E.children) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index ee0e450ae15..db6ffd81a2a 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -71,6 +71,14 @@ var/global/list/limb_icon_cache = list() overlays |= lip_icon mob_icon.Blend(lip_icon, ICON_OVERLAY) + if(owner.m_style) + var/datum/sprite_accessory/marking_style = marking_styles_list[owner.m_style] + if(marking_style && marking_style.species_allowed && (species.name in marking_style.species_allowed) && marking_style.marking_location == "head") + var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s") + if(marking_style.do_colouration) + markings_s.Blend(rgb(owner.r_markings, owner.g_markings, owner.b_markings), ICON_ADD) + overlays |= markings_s + if(owner.ha_style) var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[owner.ha_style] if(head_accessory_style && head_accessory_style.species_allowed && (species.name in head_accessory_style.species_allowed)) @@ -81,7 +89,7 @@ var/global/list/limb_icon_cache = list() if(owner.f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] - if(facial_hair_style && facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed)) + if(facial_hair_style && ((facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed)) || (src.species.flags & ALL_RPARTS))) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(species.name == "Slime People") // I am el worstos facial_s.Blend(rgb(owner.r_skin, owner.g_skin, owner.b_skin, 160), ICON_AND) @@ -91,7 +99,7 @@ var/global/list/limb_icon_cache = list() if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR))) var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] - if(hair_style && (species.name in hair_style.species_allowed)) + if(hair_style && ((species.name in hair_style.species_allowed) || (src.species.flags & ALL_RPARTS))) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") if(species.name == "Slime People") // I am el worstos hair_s.Blend(rgb(owner.r_skin, owner.g_skin, owner.b_skin, 160), ICON_AND) From 698f81cefc56bd7bb5bf018e7c8ce0edbb393a7b Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Thu, 21 Apr 2016 20:42:30 -0400 Subject: [PATCH 08/41] Fix - Main Entries in Primary Choice Only Ensures the first choice posed to the user is one of companies that only offer one model and single entries for companies that offer more than one model --- code/modules/client/preferences.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 546a7e5abf4..2e1c11ca8e8 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1505,7 +1505,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts R = new limb_type() if(!R.unavailable_at_chargen) if(limb in R.parts) //Ensures users can only choose companies that offer the parts they want. - robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + if(R.has_subtypes) //Ensures singular models get added to the list as well companies that offer more than one model. + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. R = new() //Re-initialize R. choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. From 6b73c047c54bf21e0d4c2ecd7a6f825a1ee823fe Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Thu, 21 Apr 2016 22:22:27 -0400 Subject: [PATCH 09/41] Fixes Runtime Occurred when trying to list hair, marking or facial hair styles in situations where the head is the default Morpheus head (no replacement head). --- code/modules/client/preferences.dm | 31 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2e1c11ca8e8..29eb1f015ea 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1187,8 +1187,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if("hair") if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine" || species == "Vulpkanin") var/input = "Choose your character's hair colour:" - if(species == "Machine" && !("head" in rlimb_data)) - input = "Choose your character's frame colour:" var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null if(new_hair) r_hair = hex2num(copytext(new_hair, 2, 4)) @@ -1201,7 +1199,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/datum/sprite_accessory/S = hair_styles_list[hairstyle] if(species == "Machine") //Species that can use prosthetic heads. var/obj/item/organ/external/head/H = new() - H.model = rlimb_data["head"] + if(S.name == "Bald") + valid_hairstyles[hairstyle] = S + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head @@ -1211,7 +1214,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts else if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). continue - else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Bald") + else if(!robohead.is_monitor && ("Human" in S.species_allowed)) valid_hairstyles[hairstyle] = S continue else @@ -1266,7 +1269,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(species == "Machine") //Species that can use prosthetic heads. var/obj/item/organ/external/head/H = new() - H.model = rlimb_data["head"] + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. continue @@ -1308,13 +1314,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/list/valid_facialhairstyles = list() for(var/facialhairstyle in facial_hair_styles_list) var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(S.name == "Shaved") + valid_facialhairstyles[facialhairstyle] = S if(gender == MALE && S.gender == FEMALE) continue if(gender == FEMALE && S.gender == MALE) continue if(species == "Machine") //Species that can use prosthetic heads. var/obj/item/organ/external/head/H = new() - H.model = rlimb_data["head"] + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] var/datum/robolimb/robohead = all_robolimbs[H.model] if(species in S.species_allowed) if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. @@ -1323,7 +1334,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts else if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). continue - else if(!robohead.is_monitor && ("Human" in S.species_allowed) || S.name == "Shaved") + else if(!robohead.is_monitor && ("Human" in S.species_allowed)) valid_facialhairstyles[facialhairstyle] = S continue else @@ -1503,10 +1514,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/robolimb_companies = list() for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. R = new limb_type() - if(!R.unavailable_at_chargen) - if(limb in R.parts) //Ensures users can only choose companies that offer the parts they want. - if(R.has_subtypes) //Ensures singular models get added to the list as well companies that offer more than one model. - robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + if(!R.unavailable_at_chargen && (limb in R.parts) && R.has_subtypes) //Ensures users can only choose companies that offer the parts they want, that singular models get added to the list as well companies that offer more than one model, and... + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. R = new() //Re-initialize R. choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. From 18520dc1e0b90b678bfee4843ffe5ac128b4b67a Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Thu, 21 Apr 2016 23:00:11 -0400 Subject: [PATCH 10/41] Fixes Headlight Sprite and Fixes Hair+Head Accessory Animation Hair and Head Accessories will now no longer animate as fast as they possibly can and, instead, will follow the timings the spriter defined in the .dmi file. --- .../mob/living/carbon/human/update_icons.dm | 6 ++++-- icons/mob/body_accessory.dmi | Bin 13074 -> 13110 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 48f5701a671..6b9632980e6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -404,7 +404,8 @@ var/global/list/damage_icon_parts = list() var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s") if(head_accessory_style.do_colouration) head_accessory_s.Blend(rgb(r_headacc, g_headacc, b_headacc), ICON_ADD) - head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) + head_accessory_standing = head_accessory_s //head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY) + //Having it this way preserves animations. Useful for animated antennae. else //warning("Invalid ha_style for [species.name]: [ha_style]") @@ -444,7 +445,8 @@ var/global/list/damage_icon_parts = list() else if(hair_style.do_colouration) hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - hair_standing.Blend(hair_s, ICON_OVERLAY) + hair_standing = hair_s //hair_standing.Blend(hair_s, ICON_OVERLAY) + //Having it this way preserves animations. Useful for IPC screens. else //warning("Invalid h_style for [species.name]: [h_style]") //hair_standing.Blend(debrained_s, ICON_OVERLAY)//how does i overlay for fish? diff --git a/icons/mob/body_accessory.dmi b/icons/mob/body_accessory.dmi index e98c077053b2a061ccee33283b638ce1c9278c8a..6c10bb002e87afce4b113e56fda5a7aa07a7d8a6 100644 GIT binary patch delta 562 zcmV-20?qxBX0~Rqp&`STzCUXJaz-G@mS zf7|n~?e^R5gZV#x`@P|Cc-yAz%{J&rRr<;GjeED*3oK76Y>#x7QS^WR;OaCtX zvk%^BtPi=5KZFqe_ka1%i~sEl9}gjf@WlW8e>Oh;w%c#J4{f!5{``mkD1U_TkHg=5 zY%x6a(-8jVV<9~B(`zAw|M1Q`5C6xmx8HUjCSm*`v_JpaZoln5nE%zZf22!b|LlWz zdY3O>?%la_CtSXKxp(Y*bE^&^gmCQq`J&u@(N{AH~+_N|40D{03cFzbF}hXq^A~{P_=mFZ|8N7Q;h7z4p#K z5C2wGooce}+1c3&dj$Zb;79@J{P_?6Q3&B5|7`#X;cq^+c>erPLkQtNyz|b(|FO~@ zPEgwbKsUGq1^{HIHyjR+^grIZb*uQsH@*?R{h$6-_}oAIo$&e3e?C0%#1p-0yH|hP zE`b3KKz@!KfVx5e0)YIu1O}6#FJF^T2qG5w??Mk>--7Ul&;S4c07*qoM6N<$g4gvy A7XSbN delta 530 zcmV+t0`2{_W|C&Gp&JUN*$IhQG%I!CO^3Q$zA%t+{cRn75|JVNze);ixO*gIm322|ZwY~po-~6w_kye0a zXJ@ya@Q1@;FN6@zpFdx`^GiMuKgcB7e4>_ z&xa?TctZP`wg2t^^smC_{^9RvKhyTx-v6|3{*T-Kkpd6^K+3!e43oh!Uz30WB7gJH zQUAyD=Rf?t@HZb@3=jSE+B@$&{99Fas>$|eXJ;$y6#$TeLkFPq=Rf>MA%uVYx8Wm% zzxmkW`SU*wA%y?%&N~nP$I5#+VeJC|>2nDT0LV^nI2<1Of4X(+R`HE*d?S4OKmDul zxqtXO;q#yWe0buCCwkR)um1L30uKX#{2VC&b%_830QqqV43oh!Uz30WA{X=D0lcPP U-!>WzRR91007*qoM6N<$f~Eg0l>h($ From 5cf3f258922a2739f0b4ac8e829cc8bbf591caf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Fri, 22 Apr 2016 17:51:24 +0200 Subject: [PATCH 11/41] Ports /tg/ Foam Force guns --- _maps/map_files/RandomZLevels/academy.dmm | 5 +- _maps/map_files/RandomZLevels/spacehotel.dmm | 3 +- .../RandomZLevels/stationCollision.dmm | 7 +- code/datums/supplypacks.dm | 39 ++++- code/datums/uplink_item.dm | 34 ++++- code/game/objects/items/random_items.dm | 4 +- code/game/objects/items/toys.dm | 140 +----------------- .../objects/items/weapons/gift_wrappaper.dm | 4 +- .../objects/items/weapons/storage/boxes.dm | 11 -- code/modules/arcade/prize_datums.dm | 10 +- code/modules/computer3/computers/arcade.dm | 6 +- .../projectiles/ammunition/ammo_casings.dm | 41 ++++- code/modules/projectiles/ammunition/boxes.dm | 14 +- .../projectiles/ammunition/magazines.dm | 60 +++++++- code/modules/projectiles/gun.dm | 14 +- code/modules/projectiles/guns/projectile.dm | 9 +- .../projectiles/guns/projectile/toy.dm | 102 +++++++++++++ .../projectiles/projectile/reusable.dm | 43 ++++++ icons/obj/toyguns.dmi | Bin 0 -> 2562 bytes paradise.dme | 2 + 20 files changed, 361 insertions(+), 187 deletions(-) create mode 100644 code/modules/projectiles/guns/projectile/toy.dm create mode 100644 code/modules/projectiles/projectile/reusable.dm create mode 100644 icons/obj/toyguns.dmi diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 9258caf0cfb..f5ecc09bfe4 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -160,7 +160,7 @@ "dd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "de" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) "df" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) -"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "dh" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms) "di" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) "dj" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) @@ -340,7 +340,7 @@ "gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) -"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/toy/crossbow,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) "gI" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) @@ -672,4 +672,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index 62503cc3dd1..ce1e5a290e9 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -189,7 +189,7 @@ "dJ" = (/obj/item/target/syndicate,/turf/simulated/floor/carpet,/area/awaymission) "dK" = (/obj/item/trash/candy,/turf/simulated/floor/carpet,/area/awaymission) "dL" = (/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) -"dM" = (/obj/item/toy/crossbow,/turf/simulated/floor/carpet,/area/awaymission) +"dM" = (/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/simulated/floor/carpet,/area/awaymission) "dN" = (/obj/structure/barricade/wooden,/obj/structure/barricade/wooden,/turf/simulated/floor/carpet,/area/awaymission) "dO" = (/obj/machinery/door/airlock,/turf/simulated/floor/carpet,/area/awaymission) "dP" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/wall,/area/awaymission) @@ -322,4 +322,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabReWeXbDbDbDbDbDeSeSeSbDbDbDbDeYeUeVaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZbRfabDeSeWeSbDbDeRbDbDfbfceSeTeUeVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZeNeMeHeIeNeLeLeLeNeMeHeIeNfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index d91ef330c60..0f6741251de 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -286,8 +286,8 @@ "fz" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fA" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fB" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) -"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) -"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) "fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/midblock) @@ -315,7 +315,7 @@ "gc" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock) "gd" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/toy/crossbow/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) "gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gi" = (/turf/simulated/floor/plasteel,/area/awaymission/midblock) @@ -689,4 +689,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzltlFlGlHhuhuhuiYlIkfkfkpkRjKlJjKlKiYlLlMlNlOlOlP aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzgzgzgzgzgzgzgziYlVlWlXiYkfkdlYlZmaiYjKjKjKmbmbmbmbmcjulCmdmejuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYjujujujujuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index f3117a67215..0db941e3ca5 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1348,9 +1348,19 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/mafia name = "Mafia Supply Crate" - contains = list(/obj/item/clothing/suit/browntrenchcoat =1,/obj/item/clothing/suit/blacktrenchcoat =1,/obj/item/clothing/head/fedora/whitefedora =1, - /obj/item/clothing/head/fedora/brownfedora =1,/obj/item/clothing/head/fedora =1,/obj/item/clothing/under/flappers =1,/obj/item/clothing/under/mafia =1,/obj/item/clothing/under/mafia/vest =1,/obj/item/clothing/under/mafia/white =1, - /obj/item/clothing/under/mafia/sue =1,/obj/item/clothing/under/mafia/tan =1, /obj/item/toy/crossbow/tommygun =2) + contains = list(/obj/item/clothing/suit/browntrenchcoat, + /obj/item/clothing/suit/blacktrenchcoat, + /obj/item/clothing/head/fedora/whitefedora, + /obj/item/clothing/head/fedora/brownfedora, + /obj/item/clothing/head/fedora, + /obj/item/clothing/under/flappers, + /obj/item/clothing/under/mafia, + /obj/item/clothing/under/mafia/vest, + /obj/item/clothing/under/mafia/white, + /obj/item/clothing/under/mafia/sue, + /obj/item/clothing/under/mafia/tan, + /obj/item/weapon/gun/projectile/automatic/tommygun/toy, + /obj/item/weapon/gun/projectile/automatic/tommygun/toy) cost = 15 containername = "mafia supply crate" @@ -1385,6 +1395,29 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine ..() +/datum/supply_packs/misc/foamforce + name = "Foam Force Crate" + contains = list(/obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy) + cost = 25 + containername = "foam force crate" + +/datum/supply_packs/misc/foamforce/bonus + name = "Foam Force Pistols Crate" + contains = list(/obj/item/weapon/gun/projectile/automatic/toy/pistol, + /obj/item/weapon/gun/projectile/automatic/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol) + cost = 40 + containername = "foam force pistols crate" + contraband = 1 + /datum/supply_packs/misc/randomised/contraband num_contained = 5 contains = list(/obj/item/weapon/storage/pill_bottle/random_drug_bottle, diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index cf997f6f28d..cc10ee566af 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -407,6 +407,31 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 +/datum/uplink_item/dangerous/foamsmg + name = "Toy Submachine Gun" + desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." + item = /obj/item/weapon/gun/projectile/automatic/c20r/toy + cost = 12 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + +/datum/uplink_item/dangerous/foammachinegun + name = "Toy Machine Gun" + desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." + item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy + cost = 30 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + +/datum/uplink_item/ammo/toydarts + name = "Box of Riot Darts" + desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" + item = /obj/item/ammo_box/foambox/riot + cost = 10 + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + + //for refunding the syndieborg teleporter /datum/uplink_item/dangerous/syndieborg/spawn_item() var/obj/item/weapon/antag_spawner/borg_tele/T = ..() @@ -550,6 +575,13 @@ var/list/uplink_items = list() cost = 8 excludefrom = list(/datum/game_mode/nuclear) +/datum/uplink_item/stealthy_weapons/foampistol + name = "Toy Gun (with Stun Darts)" + desc = "An innocent looking toy pistol designed to fire foam darts. Comes loaded with riot grade darts, to incapacitate a target." + item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + cost = 10 + surplus = 10 + /datum/uplink_item/stealthy_weapons/soap name = "Syndicate Soap" desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. You can also drop it underfoot to slip people." @@ -1105,4 +1137,4 @@ var/list/uplink_items = list() U.purchase_log += "\icon[C]" for(var/item in bought_items) new item(C) - U.purchase_log += "\icon[item]" \ No newline at end of file + U.purchase_log += "\icon[item]" diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index f46e2361192..7e15df8676c 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -5,7 +5,7 @@ name = "Random Toy" New() ..() - var/list/types = list(/obj/item/toy/crossbow,/obj/item/toy/balloon,/obj/item/toy/spinningtoy,/obj/item/weapon/reagent_containers/spray/waterflower) + subtypesof(/obj/item/toy/prize) + var/list/types = list(/obj/item/weapon/gun/projectile/shotgun/toy/crossbow, /obj/item/toy/balloon,/obj/item/toy/spinningtoy,/obj/item/weapon/reagent_containers/spray/waterflower) + subtypesof(/obj/item/toy/prize) var/T = pick(types) new T(loc) spawn(1) @@ -332,4 +332,4 @@ new nade3(src) new nade4(src) new nade5(src) - new nade6(src) \ No newline at end of file + new nade6(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 8911a3e60f6..6a863bcc60f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -3,8 +3,6 @@ * Balloons * Fake telebeacon * Fake singularity - * Toy crossbow - * Toy Tommy Gun * Toy swords * Toy mechs * Snap pops @@ -132,142 +130,6 @@ icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" - -/* - * Toy crossbow - */ - -/obj/item/toy/crossbow - name = "foam dart crossbow" - desc = "A weapon favored by many overactive children. Ages 8 and up." - icon = 'icons/obj/gun.dmi' - icon_state = "crossbow" - item_state = "crossbow" - lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - w_class = 2.0 - attack_verb = list("attacked", "struck", "hit") - var/bullets = 5 - -/obj/item/toy/crossbow/examine(mob/user) - ..(user) - if (bullets) - to_chat(user, "It is loaded with [bullets] foam darts!") - -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 4) - user.drop_item() - qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the crossbow.") - else - to_chat(usr, "It's already fully loaded.") - - -/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return - - if (locate (/obj/structure/table, src.loc)) - return - else if (bullets) - var/turf/trg = get_turf(target) - var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) - bullets-- - D.icon_state = "foamdart" - D.name = "foam dart" - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - - for(var/i=0, i<6, i++) - if (D) - if(D.loc == trg) break - step_towards(D,trg) - - for(var/mob/living/M in D.loc) - if(!istype(M,/mob/living)) continue - if(M == user) continue - D.visible_message("[M] was hit by the foam dart!") - new /obj/item/toy/ammo/crossbow(M.loc) - qdel(D) - return - - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) - new /obj/item/toy/ammo/crossbow(A.loc) - qdel(D) - - sleep(1) - - spawn(10) - if(D) - new /obj/item/toy/ammo/crossbow(D.loc) - qdel(D) - - return - else if (bullets == 0) - user.Weaken(5) - user.visible_message("[user] realized they were out of ammo and starting scrounging for some!") - - - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - add_fingerprint(user) - -// ******* Check - - if (bullets > 0 && M.lying) - visible_message("[user] casually lines up a shot with [M]'s head and pulls the trigger!", "You hear the sound of foam against skull.") - M.visible_message("[M] was hit in the head by the foam dart!") - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - bullets-- - else if (M.lying && bullets == 0) - visible_message("[user] casually lines up a shot with [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", "You hear someone fall.") - user.Weaken(5) - return - -/obj/item/toy/ammo/crossbow - name = "foam dart" - desc = "Its nerf or nothing! Ages 8 and up." - icon = 'icons/obj/toy.dmi' - icon_state = "foamdart" - w_class = 1.0 - -/obj/effect/foam_dart_dummy - name = "" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "null" - anchored = 1 - density = 0 - - -/* - * Tommy gun - */ - -/obj/item/toy/crossbow/tommygun - name = "tommy gun" - desc = "Looks almost like the real thing! Great for practicing Drive-bys" - icon_state = "tommy" - item_state = "tommy" - flags = CONDUCT - w_class = 1.0 - attack_verb = list("struck", "hammered", "hit", "bashed") - bullets = 20.0 - -/obj/item/toy/crossbow/tommygun/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 19) - user.drop_item() - qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the tommy gun.") - else - to_chat(user, "It's already fully loaded.") - /* * Toy swords */ @@ -1777,4 +1639,4 @@ obj/item/toy/cards/deck/syndicate/black desc = "All hail the Magic Conch!" icon_state = "conch" use_action = "pulls the string" - possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.") \ No newline at end of file + possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.") diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 00433885ad5..c4c1fd38604 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -80,7 +80,7 @@ /obj/item/weapon/banhammer, /obj/item/toy/balloon, /obj/item/toy/blink, - /obj/item/toy/crossbow, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow, /obj/item/weapon/gun/projectile/revolver/capgun, /obj/item/toy/katana, /obj/random/mech, @@ -115,7 +115,7 @@ /obj/item/toy/AI, /obj/item/clothing/under/syndicate/tacticool, /obj/item/weapon/storage/box/fakesyndiesuit, - /obj/item/toy/crossbow/tommygun, + /obj/item/weapon/gun/projectile/automatic/tommygun/toy, /obj/item/stack/tile/fakespace/loaded, ) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b93fc3b06b1..ce1e6aad9bb 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -685,14 +685,3 @@ new /obj/item/weapon/lipstick/green(src) new /obj/item/weapon/lipstick/blue(src) new /obj/item/weapon/lipstick/white(src) - -/obj/item/weapon/storage/box/foam_darts - name = "Foam Dart Pack" - desc = "Extra ammo for foam dart launchers. Contains 10 darts." - storage_slots = 10 - max_combined_w_class = 10 - -/obj/item/weapon/storage/box/foam_darts/New() - ..() - for(var/i=1; i <= storage_slots; i++) - new /obj/item/toy/ammo/crossbow(src) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index d67adf97bcb..d404fbaf855 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -93,8 +93,8 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/foam_darts name = "Pack of Foam Darts" - desc = "A refill pack of 10 foam darts." - typepath = /obj/item/weapon/storage/box/foam_darts + desc = "A refill pack with foam darts." + typepath = /obj/item/ammo_box/foambox cost = 20 /datum/prize_item/minigibber @@ -174,9 +174,10 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/crossbow name = "Foam Dart Crossbow" desc = "A toy crossbow that fires foam darts." - typepath = /obj/item/toy/crossbow + typepath = /obj/item/weapon/gun/projectile/shotgun/toy/crossbow cost = 100 + /datum/prize_item/toy_xeno name = "Xeno Action Figure" desc = "A lifelike replica of the horrific xeno scourge." @@ -252,9 +253,10 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/tommygun name = "Tommygun" desc = "A replica tommygun that fires foam darts." - typepath = /obj/item/toy/crossbow/tommygun + typepath = /obj/item/weapon/gun/projectile/automatic/tommygun/toy cost = 175 + /datum/prize_item/esword name = "Toy Energy Sword" desc = "A plastic replica of an energy blade." diff --git a/code/modules/computer3/computers/arcade.dm b/code/modules/computer3/computers/arcade.dm index a99c05410ae..6949bfff107 100644 --- a/code/modules/computer3/computers/arcade.dm +++ b/code/modules/computer3/computers/arcade.dm @@ -7,8 +7,8 @@ /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, - /obj/item/weapon/gun/projectile/revolver/capgun = 2, - /obj/item/toy/crossbow = 2, + /obj/item/weapon/gun/projectile/revolver/capgun = 2, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/weapon/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, @@ -177,4 +177,4 @@ if(interactable()) computer.updateUsrDialog() blocked = 0 - return \ No newline at end of file + return diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 8fc29a6ce7b..1527dfc2b64 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -255,4 +255,43 @@ desc = "A cased high explosive grenade that can only be activated once fired out of a grenade launcher." caliber = "40mm" icon_state = "40mmHE" - projectile_type = "/obj/item/projectile/bullet/a40mm" \ No newline at end of file + projectile_type = "/obj/item/projectile/bullet/a40mm" + +//FOAM DARTS +/obj/item/ammo_casing/caseless/foam_dart + name = "foam dart" + desc = "Its nerf or nothing! Ages 8 and up." + projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart" + caliber = "foam_force" + icon = 'icons/obj/toyguns.dmi' + icon_state = "foamdart" + var/modified = 0 + +/obj/item/ammo_casing/caseless/foam_dart/update_icon() + ..() + if (modified) + icon_state = "foamdart_empty" + desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." + +/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/A as obj, mob/user as mob, params) + ..() + if (istype(A, /obj/item/weapon/screwdriver) && !modified) + modified = 1 + BB.damage_type = BRUTE + icon_state = "foamdart_empty" + desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." + user << "You pop the safety cap off of [src]." + else if ((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) + if (!user.unEquip(A)) + return + A.loc = BB + BB.damage = 5 + BB.nodamage = 0 + user << "You insert [A] into [src]." + return + +/obj/item/ammo_casing/caseless/foam_dart/riot + name = "riot foam dart" + desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." + projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart/riot" + icon_state = "foamdart_riot" diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 96f8cca31c0..eb998823b6a 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -86,4 +86,16 @@ name = "Ammunition Box (tranquilizer darts)" icon_state = "45box" ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer - materials = list(MAT_METAL=1750) \ No newline at end of file + materials = list(MAT_METAL=1750) + +//FOAM DARTS +/obj/item/ammo_box/foambox + name = "ammo box (Foam Darts)" + icon = 'icons/obj/toyguns.dmi' + icon_state = "foambox" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart + max_ammo = 40 + +/obj/item/ammo_box/foambox/riot + icon_state = "foambox_riot" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 7cf8e9fcdb0..13757e8de0d 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -101,6 +101,14 @@ max_ammo = 5 multiload = 1 +/obj/item/ammo_box/magazine/internal/shot/toy + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart" + caliber = "foam_force" + max_ammo = 4 + +/obj/item/ammo_box/magazine/internal/shot/toy/crossbow + max_ammo = 5 + ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m10mm @@ -290,4 +298,54 @@ /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" icon_state = "m12gf" - ammo_type = "/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath" \ No newline at end of file + ammo_type = "/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath" + +//FOAM DARTS +/obj/item/ammo_box/magazine/toy + name = "foam force META magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart" + caliber = "foam_force" + +/obj/item/ammo_box/magazine/toy/smg + name = "foam force SMG magazine" + icon_state = "smg9mm-30" + max_ammo = 30 + +/obj/item/ammo_box/magazine/toy/smg/update_icon() + ..() + icon_state = "smg9mm-[round(ammo_count(),6)]" + +/obj/item/ammo_box/magazine/toy/smg/riot + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + +/obj/item/ammo_box/magazine/toy/pistol + name = "foam force pistol magazine" + icon_state = "9x19p" + max_ammo = 8 + multiple_sprites = 2 + +/obj/item/ammo_box/magazine/toy/pistol/riot + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + +/obj/item/ammo_box/magazine/toy/smgm45 + name = "donksoft SMG magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + max_ammo = 20 + +/obj/item/ammo_box/magazine/toy/smgm45/update_icon() + ..() + icon_state = "c20r45-[round(ammo_count(),2)]" + +/obj/item/ammo_box/magazine/toy/m762 + name = "donksoft box magazine" + ammo_type = "/obj/item/ammo_casing/caseless/foam_dart/riot" + max_ammo = 50 + +/obj/item/ammo_box/magazine/toy/m762/update_icon() + ..() + icon_state = "a762-[round(ammo_count(),10)]" + +/obj/item/ammo_box/magazine/toy/tommygunm45 + name = "little tommy's mag" + icon_state = "drum45" + max_ammo = 50 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2aea246d314..e68e384e940 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -279,19 +279,19 @@ //Suicide handling. if (M == user && user.zone_sel.selecting == "mouth" && !mouthshoot) mouthshoot = 1 - M.visible_message("\red [user] sticks their gun in their mouth, ready to pull the trigger...") + M.visible_message(" [user] sticks their gun in their mouth, ready to pull the trigger...") if(!do_after(user, 40, target = M)) - M.visible_message("\blue [user] decided life was worth living") + M.visible_message(" [user] decided life was worth living") mouthshoot = 0 return if (process_chambered()) - user.visible_message("[user] pulls the trigger.") + user.visible_message("[user] pulls the trigger.") if(silenced) playsound(user, fire_sound, 10, 1) else playsound(user, fire_sound, 50, 1) - if(istype(in_chamber, /obj/item/projectile/lasertag)) - user.show_message("You feel rather silly, trying to commit suicide with a toy.") + if(istype(in_chamber, /obj/item/projectile/lasertag) || istype(in_chamber, /obj/item/projectile/bullet/reusable/foam_dart)) + user.show_message("You feel rather silly, trying to commit suicide with a toy.") mouthshoot = 0 return in_chamber.on_hit(M) @@ -299,7 +299,7 @@ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1) user.death() else - to_chat(user, "Ow...") + to_chat(user, "Ow...") user.apply_effect(110,STAMINA,0) del(in_chamber) mouthshoot = 0 @@ -383,4 +383,4 @@ update_icon() else set_light(0) - return \ No newline at end of file + return diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index d6fb9d9aff0..8844f5cd7ab 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -16,15 +16,18 @@ + + /obj/item/weapon/gun/projectile/New() ..() - magazine = new mag_type(src) + if (!magazine) + magazine = new mag_type(src) chamber_round() update_icon() return -/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1) +/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1 ) // if(in_chamber) // return 1 @@ -146,4 +149,4 @@ item_state = "suppressor" w_class = 2 var/oldsound = null - var/initial_w_class = null \ No newline at end of file + var/initial_w_class = null diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm new file mode 100644 index 00000000000..350b53f9aa1 --- /dev/null +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -0,0 +1,102 @@ +/obj/item/weapon/gun/projectile/automatic/toy + name = "foam force SMG" + desc = "A prototype three-round burst toy submachine gun. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + icon_state = "saber" + item_state = "gun" + mag_type = "/obj/item/ammo_box/magazine/toy/smg" + fire_sound = 'sound/items/syringeproj.ogg' + force = 0 + throwforce = 0 + burst_size = 3 + can_suppress = 0 + clumsy_check = 0 + needs_permit = 0 + +/obj/item/weapon/gun/projectile/automatic/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/automatic/toy/pistol + name = "foam force pistol" + desc = "A small, easily concealable toy handgun. Ages 8 and up." + icon_state = "pistol" + w_class = 2 + mag_type = "/obj/item/ammo_box/magazine/toy/pistol" + can_suppress = 0 + burst_size = 1 + fire_delay = 0 + action_button_name = null + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/update_icon() + ..() + icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/riot + name = "foam force riot pistol" + desc = "RIOT! Ages 8 and up." + +/obj/item/weapon/gun/projectile/automatic/toy/pistol/riot/New() + magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) + ..() + +/obj/item/weapon/gun/projectile/automatic/c20r/toy + name = "donksoft SMG" + desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + can_suppress = 0 + needs_permit = 0 + mag_type = "/obj/item/ammo_box/magazine/toy/smgm45" + +/obj/item/weapon/gun/projectile/automatic/c20r/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/automatic/l6_saw/toy + name = "donksoft LMG" + desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + can_suppress = 0 + needs_permit = 0 + mag_type = "/obj/item/ammo_box/magazine/toy/m762" + +/obj/item/weapon/gun/projectile/automatic/l6_saw/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/automatic/tommygun/toy + name = "tommy gun" + desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." + icon_state = "tommygun" + item_state = "shotgun" + w_class = 2 + mag_type = "/obj/item/ammo_box/magazine/toy/tommygunm45" + fire_sound = 'sound/items/syringeproj.ogg' + +/obj/item/weapon/gun/projectile/automatic/tommygun/toy/process_chambered() + return ..(0, 1) + +/obj/item/weapon/gun/projectile/shotgun/toy + name = "foam force shotgun" + desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up." + icon = 'icons/obj/toyguns.dmi' + force = 0 + throwforce = 0 + origin_tech = null + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy" + fire_sound = 'sound/items/syringeproj.ogg' + clumsy_check = 0 + needs_permit = 0 + +/obj/item/weapon/gun/projectile/shotgun/toy/pump_unload() + if(chambered)//We have a shell in the chamber + chambered = null + if(in_chamber) + in_chamber = null + +/obj/item/weapon/gun/projectile/shotgun/toy/crossbow + name = "foam force crossbow" + desc = "A weapon favored by many overactive children. Ages 8 and up." + icon = 'icons/obj/gun.dmi' + icon_state = "crossbow" + item_state = "crossbow" + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" + slot_flags = SLOT_BELT + w_class = 2 diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm new file mode 100644 index 00000000000..367d20b6992 --- /dev/null +++ b/code/modules/projectiles/projectile/reusable.dm @@ -0,0 +1,43 @@ +/obj/item/projectile/bullet/reusable + name = "reusable bullet" + desc = "How do you even reuse a bullet?" + var/obj/item/ammo_casing/caseless/ammo_type = /obj/item/ammo_casing/caseless/ + var/hit = 0 + +/obj/item/projectile/bullet/reusable/on_hit(var/atom/target, var/blocked = 0) + if(!proj_hit) + proj_hit = 1 + if (src.contents.len) + var/obj/content + for(content in src.contents) + content.loc = src.loc + else + new ammo_type(src.loc) + ..() + +/obj/item/projectile/bullet/reusable/on_range() + if(!proj_hit) + if (src.contents.len) + var/obj/content + for(content in src.contents) + content.loc = src.loc + else + new ammo_type(src.loc) + ..() + +/obj/item/projectile/bullet/reusable/foam_dart + name = "foam dart" + desc = "I hope you're wearing eye protection." + damage = 0 // It's a damn toy. + damage_type = OXY + nodamage = 1 + icon = 'icons/obj/toyguns.dmi' + icon_state = "foamdart" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart + range = 10 + +/obj/item/projectile/bullet/reusable/foam_dart/riot + name = "riot foam dart" + icon_state = "foamdart_riot" + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot + stamina = 25 diff --git a/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fee7774cae553b6e63d8c85d5ab699fe8740ad67 GIT binary patch literal 2562 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 Date: Fri, 22 Apr 2016 21:40:27 +0200 Subject: [PATCH 12/41] Adds the ability to pick up all ammo from a turf using a magazine --- code/modules/projectiles/ammunition.dm | 29 +++++++++++++++---- .../projectiles/ammunition/ammo_casings.dm | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 0022a4e1f80..d4a24807275 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -38,19 +38,38 @@ var/tmp_label = "" var/label_text = sanitize(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label)) if(length(label_text) > 20) - to_chat(user, "\red The inscription can be at most 20 characters long.") + to_chat(user, "The inscription can be at most 20 characters long.") else if(label_text == "") - to_chat(user, "\blue You scratch the inscription off of [initial(BB)].") + to_chat(user, "You scratch the inscription off of [initial(BB)].") BB.name = initial(BB.name) else - to_chat(user, "\blue You inscribe \"[label_text]\" into \the [initial(BB.name)].") + to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].") BB.name = "[initial(BB.name)] \"[label_text]\"" else - to_chat(user, "\blue You can only inscribe a metal bullet.")//because inscribing beanbags is silly + to_chat(user, "You can only inscribe a metal bullet.")//because inscribing beanbags is silly else - to_chat(user, "\blue There is no bullet in the casing to inscribe anything into.") + to_chat(user, "There is no bullet in the casing to inscribe anything into.") + +/obj/item/ammo_casing/attackby(obj/item/ammo_box/box as obj, mob/user as mob, params) + if(!istype(box, /obj/item/ammo_box)) + return + if(isturf(src.loc)) + var/boolets = 0 + for(var/obj/item/ammo_casing/pew in src.loc) + if (box.stored_ammo.len >= box.max_ammo) + break + if (pew.BB) + if (box.give_round(pew)) + boolets++ + else + continue + if (boolets > 0) + box.update_icon() + user << "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s." + else + user << "You fail to collect anything." /obj/item/ammo_casing/proc/newshot() //For energy weapons, shotgun shells and wands (!). if (!BB) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 1527dfc2b64..b60744aaf79 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -273,7 +273,7 @@ icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." -/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/A as obj, mob/user as mob, params) +/obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/weapon/A as obj, mob/user as mob, params) ..() if (istype(A, /obj/item/weapon/screwdriver) && !modified) modified = 1 From dc7efbfc5321f68759be4d4aff62ff90f3003965 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Fri, 22 Apr 2016 19:48:44 -0400 Subject: [PATCH 13/41] Fixes Xion alt. Head, Adjusts Morpheus and Xion alt. Head Optics The Xion alt. head faced east even when you were facing west. --- icons/mob/body_accessory.dmi | Bin 13110 -> 13093 bytes .../cyberlimbs/morpheus/morpheus_alt1.dmi | Bin 596 -> 517 bytes .../human_races/cyberlimbs/xion/xion_alt1.dmi | Bin 457 -> 485 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/body_accessory.dmi b/icons/mob/body_accessory.dmi index 6c10bb002e87afce4b113e56fda5a7aa07a7d8a6..c315fbbdc2fc1c3cffbdb6c347d148d32ce51b3a 100644 GIT binary patch literal 13093 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 z z@bZey_H*td%v5(jzhC3~dx!wSRodToAZ$H%`qvA=;c+T&G*0J}JlVNE-+Lv7-N@U$ z38DT_?oufp^J7PzvVO24RycPf>VzIEbo!YX?FFq#Q`?Wxqnl&DFG=#V6j7tBxRr{BZHPiRddCB5PoTE;+CDF+t}wl&d(BlNrS z7C>GJsuls%0WFNY?{C`F${R&s7GApuV?E@?qd^1&)hkEKtgkzn%(>V6{Ux*@jw^k7 zJO~G5^!K|CH>6|5dx2R=#z-Rs?-2E~Q5Ycwql#YCz=X}MFKrUv4#x&A zi^g<~P2$q)-^^|cA4==ucZ(-go6te_UV zMLlU=7qO)Ky#px zBLM|tr5Ul-{MEi)$t(Kh%HR3vX+j~Xe5N0{tn6C#P{s^_p5M~|Ag87VGtr*q9T1=u zKmSqcJ1AywO`w&DfO!EV4Zw?%>b!(SV_T3b78fX=OTSK;K6HcH)Z%_yTYy8MD`3VG zOe~uO5&6lB~p2Gj5{kLthW`LE5OZ5xa zZ>0GEYXe3YSO^CY78J2Y#ins}Jl=QvBD~{T5vt=5Pve;?Ca`OT_6tMh8+E>!3 zD2_IcVH2QJD+G8$pBp?(6}r1cDJ5z&X7KBA7BnI1SLZFj$)XUi_YP~c-83BpbUYYR zY(rdtZT@~$+JA3C^+=?&oWe8!)-n_`0P&8CS^9K$j1==7dl%mZL5-^#srTpyc?)e^ z`dS8J6a2VhUAvvfdxwVkE-GDAnvQt|TW;6F1s1;+M|)3d_wTegPd->vD#u(v6+<8n z#k3y~ebO?6!AckYB`NRU+fXf*b3kLdY&Lp(haUUYRWsEdTBh1APULO+;15VU_n#Td+(#ezO* z2}gj?z`;lNyyAlDR}f1yNPR6wZq%s|Y_q+h*VonoIvL_`}|ewXUB#J)aK0B%8jr!Z&7{@ZDV^%0A-(I%>`B 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 YV}=SpG$W-g00000NkvWtM6N<$f^jB{I{*Lx delta 405 zcmV;G0c!q*1k?nOBmsw!B`9ZjczCC$r!_S-X=!O#8PI-BGdU|?jXlMj#R2Pwcgnt1BNkl5Jc02wub})B&-fg421pv zzi%3t)5vWj!U3c%A753)YFmn<=)(j6&3G$r`5aI1w$BmbsFVh+6u!tKK&9JSA@_+8 zk0Achv|_d(z-h!tTSRuyAx@4?f=TM(De;c?7*h1)!@T)LB1c0m5{X2jw|}bJ^U+>6 zl+XHuVa~yPIOu2Icrk+UWICI>>3lYwjA2ypd1JDqEEmg_8?Tm&vP?2#_<~!0U0Lh= z|A4jC`rg17Y__|a^44iF1gd(s-FONt?(4(R7VaGs_IRlG=&t|s!0DV{_<~D*J_R3o zS0;aNxO!iC4;PJ)D*$G^{~m3xF_B0l`hNWa_pc8>);CVM00000NkvXXu0mjfl=rp@ diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi index da0b50c8a6008dae7c6ac07cfd0ce6ebb0a2bb6c..9f5b8f3cd1516dea6a54e9142412e84e6775c263 100644 GIT binary patch delta 249 zcmV4#O}A1P!J*XpQYG>?RZ_j-edWfw;QjRkCET~i!FERhvOEtKL0)@ry({vChWI7Q zK&Q0YjjUHg0forK2;Y+H<^$0C#Lj!@o3;2m)<+FJZSj7RByvgeSJ0d@{PAB5kiCY& zr|}qY{R-YT>+>x#aKI3G&ki5gUq4vUz!^1V~59P7|WIsrfB#HO}(V_=bWirVS00000NkvXXu0mjf%g%bO delta 221 zcmV<303!e81IYuB^nbufL_t(oh3%Hh4g(WIP8AMaaJ7XQ9!NLJS-zG@51V7 z9Qz=-eu&Dn|L22k(uZ*8gV%S~w;i#i7*r4V$oC3v83Ct#4+v}}jG-R~01pU`<2VLC X(j^B}zfUbY00000NkvXXu0mjfn7w3y From 03c173aeaffe738daebef51218ec83b78deb9b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Sun, 24 Apr 2016 09:19:03 +0200 Subject: [PATCH 14/41] Lowers costs, adds darts to autolathe --- code/datums/supplypacks.dm | 4 ++-- code/datums/uplink_item.dm | 8 ++++---- .../projectiles/guns/projectile/toy.dm | 1 - .../research/designs/autolathe_designs.dm | 8 ++++++++ icons/obj/toyguns.dmi | Bin 2562 -> 2804 bytes 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 0db941e3ca5..a5b6605c76e 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1360,7 +1360,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/under/mafia/sue, /obj/item/clothing/under/mafia/tan, /obj/item/weapon/gun/projectile/automatic/tommygun/toy, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy) + /obj/item/weapon/gun/projectile/automatic/tommygun/toy) cost = 15 containername = "mafia supply crate" @@ -1405,7 +1405,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/gun/projectile/shotgun/toy, /obj/item/weapon/gun/projectile/shotgun/toy, /obj/item/weapon/gun/projectile/shotgun/toy) - cost = 25 + cost = 10 containername = "foam force crate" /datum/supply_packs/misc/foamforce/bonus diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index cc10ee566af..2c74d75b545 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -411,7 +411,7 @@ var/list/uplink_items = list() name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." item = /obj/item/weapon/gun/projectile/automatic/c20r/toy - cost = 12 + cost = 5 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -419,7 +419,7 @@ var/list/uplink_items = list() name = "Toy Machine Gun" desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy - cost = 30 + cost = 10 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -427,7 +427,7 @@ var/list/uplink_items = list() name = "Box of Riot Darts" desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" item = /obj/item/ammo_box/foambox/riot - cost = 10 + cost = 2 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -579,7 +579,7 @@ var/list/uplink_items = list() name = "Toy Gun (with Stun Darts)" desc = "An innocent looking toy pistol designed to fire foam darts. Comes loaded with riot grade darts, to incapacitate a target." item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot - cost = 10 + cost = 3 surplus = 10 /datum/uplink_item/stealthy_weapons/soap diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 350b53f9aa1..812361ec245 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -94,7 +94,6 @@ /obj/item/weapon/gun/projectile/shotgun/toy/crossbow name = "foam force crossbow" desc = "A weapon favored by many overactive children. Ages 8 and up." - icon = 'icons/obj/gun.dmi' icon_state = "crossbow" item_state = "crossbow" mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 663b394efb6..b5d44579d07 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -323,6 +323,14 @@ build_path = /obj/item/weapon/canvas/twentythreeXnineteen category = list("initial", "Miscellaneous") +/datum/design/foambox + name = "Box of Foam Force darts" + id = "foamforce" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000) + build_path = /obj/item/ammo_box/foambox + category = list("initial", "Miscellaneous") + /datum/design/canvas/twentythreeXtwentythree name = "23px by 23px Canvas" id = "canvas23x23" diff --git a/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi index fee7774cae553b6e63d8c85d5ab699fe8740ad67..4ac5c62056e39a1fe97c752db1cabbf0010fe347 100644 GIT binary patch delta 2555 zcmV+ktOthGBPrkmzQ5(U$(Zkp`oEwR8*9dlvGqygn@x7DJe-w zNii`oRZ~+bVOxyV{&P5bZKvH z004NLmDSN|!Y~vD;Opiof?jvDvAW&tW+=mp`3fU#k2cUYB`50k_G^@XZA@76dzXZd zpOYWb&gIMIb-R=6x2-slV`F>yEQ^OsBxh6mX51{4NE$MS#$Pw=wWo18g zHjc-WTqJv^JG!oa++f(-7Gxk--qitW*{sFd#51Rq^pIE?e^L_t(|ob8=|iC@!L5XWl+q@~f) zTH{$cU1bkfSVBlqkp+tg`Vnyt!PWo&zu0*%Nt@#()8^<)+WCfZ^apuwewjB-ozzw; z1VIqQM7Y6`r_1I>l@mF`ymjd)bAU28FH4t>vY;qRRZ(Q=@=+ER7T~5-*d{@@QPm`K z=hSM$Z%3DGSb0)^>?35?s`_O0A?l*4CNiPsrP0tvlib-sb-H;AxLI{*)`R*I3m`^M z{P(R^%Nzes~rGg7_aisKMrN_ikN_k>Hcp0I1J@Y<>EuYr}Gtuikq2@S*D|YikOQ~5H7q;_j{!XMh0vqL>3k03#t8aTSf^~V z_8|+Ou;r$61KJ!GKRf&@e7P?zalKp7*EXK9ZEa8qAo7ikXN;i(EWk~jmB^YPJY0tf zvJ|y{P{Jpyx#_KL7ea1uzyr8PZ|jXprR_cpz-+yLN4o|atOsTRnBX&D(+N-z9;);C zxj!i3Q}+Dyma4WIjS7SepO^u9yUpVF8sLwFA3)oJp#l5=+mH03_)y(H!Eg%ar~6I= zzyXL~XX~LcoV#E_!+mRPA$Seg+!V()k}l5xKMfYT-tfj>39Q<|L1d2%gFE>Fj@ao4 zx^I4ef(hoW4}nU+KZhb1ApEmT6F{l~38_6n3_$d!PZjSI)le1BTTf4|78@X{r{w2f ze*GqQE^^gw{I@nL%TdHy0kKujkHf*=TjAP9mW;=x+S)2^fa z^C{GW{qvuCRc+I6&lKJ7Z%KezR* zt?fUyw+gLSlIdvw+|dU!kf(3uq6ZN7&%HCuQQwxS4;+Z-pARBPqi+>i$FU=f)wj#6 z<1i1WS;yHz{=V!wK@bE%5ClP#l^r9UUV3)Tbb9I8Gptm4>Dfb$Fs7Ft$^goMWEo(8 z4K^`F*9RoY0Mj(w&48PCSgQ=W4+F^nfo|@ZJG*-v!ye1DoULa}SmzOrsRsj$jbEUf zJH4I>uw7gGFD>}GWA^yAV@_CizK*4*&H!__$1p4l_Wo+0jp6vcw`*GS^Apt#BStrP z20$A5^k9HqQ$$N7q#Faw*Dwd`wQaP2!_rc5bi;ticMZd@vl`)v3C{I{O9ask%h{J@ z9=v(|`ptnk7!SlE>4wGbv;sP-5thZ$WY;d4!6o9=!HbYSOab%Y5I8V*4ZfM~AVtyb z`eg)kL5=V)p>PcfE+MmL89mtZp9hDp_F)1&XLIYNtDEWdUN432{A~F3aEl+I>4WcvHv0Bo7+p-LMnvgu4U6Ah`9Nxfuf~XKT-m{v zh;NArYFz0V%K$-*DL-h9Kxzy@5ClOGE@}JgrSH$D?XQ=RRZ3ZqJzU`|H{2Z;#%_>iv^`{0`D0I|DF(128=`z)<4f%4}d+)Fu->+(VS=cDVQOI%QYT{c+%Jai3D#=3N5UjrnY(XY|TN0*N5Yk=e<`x+pEAP9mW z2!bF8f*@pr{j>AC)pt_I&mFAsuuxr?>hY!b=VgzdNq2T3#VW~U{N%%D)1R-diuHGj zus@&u_))(w!uYvnz-m?0pU+|Zs9zXi{9M;y-Wh@0 zeylG0L`C-a1VIo4K@bE%5ClOG#B^{fVhp|Pygxk?a5}PHdQQ*dBgFL5b9x>hA*Poe z2=Gj}%uh$ti$tR98`u$ke|Dw>7#w0uFA|BaFR%ktUIbA521M&VK75Fu;m41oMUs$2 ztu;45t*&`*Ap;wugy@d>j(z6FkqvOa1cPaxw^xi@SMCnC>3?Kt$ z+<-*a7q|h!Nrd+nG9XGX63MP_I7J@kF}?h-Q~mScnclhQ=@6oqAM8}WEKdapf*=Tj zAP9mWh}lF}WzRq^`lpN8c0m6$;|}z-8F!$s^=H}vh+p!5Dv%8WeP7@KX)uFn16bM86c^F5#QeV_9^pY#1LZcT>eYRLfHyzPr%ap;S` z004koKI!BFSg?nJRA*qVN$mGv8fJgzA; zI25gS-JkFCKaB-c;myMf1`QH1wXAWsRl=9hnW<@^y%T#Okk`!YT4K1Dbk#?o8pE#A$?$7&TZbSX@q<7q&nkt>)JSy$(2~QMiCdxMK7-@|DaD5B_ z))gPM#<<3o%-vJ4qS?U+A+inSZVa#SQxlN|re}PQT4g5hm3Qx#N~8EatkT=8awGIn zLE?T53Ce&I7zF2+GeGw&lzg(Mg5qHjIULbobj|e1aLBtM;ClA4v);zkLSNM|O8>-? ze`r|PoA8FAiZ?Bn(Q%^QA6F>4^?OtrP1Js>MbfKAgA?t}wa~f>Qp5A{VD2$tYs%n{ zZ(3h{8RM6n7p;^nGW#UrhaY#rrTkbN4hM^?-BV()q?4c@2L`wE7uC41Sd(1XhB3F< zoevbwlMFW|VIth{i@$_X@+68>cs)tw8Rzzi9s4quecEQ*+4HlfB61&mwK@Q)HLDk@ zJv5Xrst%S+4OV-wXXx8jbl>mjv*64Jz{A;#n{3~|Rw{)nm)dGW5?FiO`Y|cywskZX zesm~f<@gIcxX7P79mNRz;Iwdq#QEdY+O@LFkvSAr{v6HlmLyR}_S-T6<&%k_nrLfJ z3yT9J!KRCCS2fX|1?h6d#`s^x&=I-Uu;SS{WNlc4zOSZZC9R9~6-!iV{B)0uGZbYL z!)P#i_Qn;{4=$fi3G%yCLJQ(b3H#IE_Bl!aApQg?ngUv3Qw%pL4EM$!$U|x*U{lqw z5X7C(YqPuCDW;cmH=PiuTeV@Ie#ohCk#Fit(s-@K9-1Y2`AaVV@#?0GvqM<3TA0Na zKZV1KGOnrV@uTL_)r5eW-W>G36R*aSbHB+t5R4G@%MTSYY}=j7?k4L&e#y1;Emkcb z2a%jIlhkTnT{qAPbVNKC_A82?758(85O?K2%4r~~{JU98+fh!$v~d2zc~a^r^%86T zhs`FP&KKJ;2FspO*tRFb>96fyo7+R>c7aa^AY}(3MnBrDwh)#Doa`xN)u-LwFLa$q zcj2h%4GUr7PglT7W&Sr7vIksSq*;a1$IvK}oMPAS3c;zCn-+8kf<{x>KQgDOL ze7M9rxacQI*fr2sCyJ+$VaSu_J~26iee_ZPCEg3cc}W7()a$qDbKmdiC^~Z6HfdCX zYslF9$&aF@$rQvC&$b{I5-l+qrmUCLIUxg3_wfkp;~mIB@XPp1XoYBe2Tr4q63sts z+sQFxD*ZEnwTn?*rjTk-pCzP51skO$j2qeX>ao=ovjI3nc!Z!78a(||cHug}X#CZa zY&!geCWoY09wD?dD*0Wr`Tk8|Uv7|ko^HhaqzyPQXugN9{x~a!uIs?fJou+s8tb54i6wuej(w2@ z>h610f?3BNW!Dt7k+Q@>GC|Nr`tI$m_1(qVJLQp%+&hw2l&X_T(K+IM*~-Eeo8ie( zYU?8BJGZYmc^Ez;M;{?tM#($ z#_81Ryw4fhoEqOB=^=NEd&ttFm*YZczdPeyM5)B>uBMbmL}-cR~!_CkVd zMR9}P0PapT3SuWA2kR2fPGME-$I}Uz|7ieqJw~&Kl|dL7=dC2 zyt1u?*KA`7fFHI3Q;UE3v&y2Wwc@_sv6xpOVXq=<+bQn2kf#i~H<8Z7>kNK*DpLfqQfZqZq}IQ5&e_ac zWjoo$iDz@jXJ;f69DCi%&1o^VLLGivT%*+VQ}?3m0W$^Fc{y#dsySF8;L>YC^H|y* z7kU&g_N!aR=s@%m9<-n#cXaXzcNur5_H9RX6)7IN{!D4ZNZJ-azu7^-ZXr5(i-p26 zaVLr{S%W8BghH9+a@s<49%tq1ngx>_A)B&qiSu?(tGF|sXq6FRHdKyxS%Iw{!vBch z+w&j@F#oT9gg~bkMAE=9WZ8k=VEZaC`3)vUk=V2;yab%kD%%Kel`niVz3K`&9}5Ei dR*U2!o4$Lf7!NxxuYNkfQ5z@gXO`IHzX3pAiSYmc From af04360af199765d5eda7ff0e3b8b552b017ccbb Mon Sep 17 00:00:00 2001 From: pinatacolada Date: Sun, 24 Apr 2016 20:10:31 +0100 Subject: [PATCH 15/41] SKREEEE --- code/game/machinery/kitchen/smartfridge.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index d1dda0bc558..bce9d826b3d 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -26,7 +26,9 @@ /obj/machinery/smartfridge/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/smartfridge(null) + var/obj/item/weapon/circuitboard/smartfridge/board = new(null) + board.set_type(type) + component_parts += board component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) RefreshParts() From ccf51de2ca2127fa4d0ac8fb1ed455318a79bd4f Mon Sep 17 00:00:00 2001 From: pinatacolada Date: Sun, 24 Apr 2016 22:17:28 +0100 Subject: [PATCH 16/41] fixes #4259 --- code/game/machinery/kitchen/smartfridge.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index bce9d826b3d..b17b09d5419 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -152,10 +152,8 @@ /obj/item/weapon/reagent_containers/glass/bottle/plasma = 1, /obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine = 1) -/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(obj/item/O) - if(..(O)) - return 1 - if(istype(O, /obj/item/weapon/reagent_containers/syringe)) +/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(var/obj/item/O as obj) + if(istype(O, /obj/item/weapon/reagent_containers/syringe) || istype(O, /obj/item/weapon/reagent_containers/glass/bottle) || istype(O, /obj/item/weapon/reagent_containers/glass/beaker)) return 1 return 0 From f16dc3268618e71d8db51a8163f678bffb431011 Mon Sep 17 00:00:00 2001 From: HugoLuman Date: Sun, 24 Apr 2016 16:00:28 -0700 Subject: [PATCH 17/41] Fixes IPC deathgasp spam Adds a brain damage threshold to the can_revive_by_healing proc to prevent braindead IPCs from continually dying and reviving. Signed-off-by: HugoLuman --- code/modules/mob/living/carbon/human/human_damage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index c0e58942cfc..cf47ee3b5d0 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -20,7 +20,7 @@ if(species.can_revive_by_healing) var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain) if(B) - if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD) + if((health >= (config.health_threshold_dead + config.health_threshold_crit) * 0.5) && stat == DEAD && getBrainLoss()<120) update_revive() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() From 6cdb74d9a0b0f836dc7c4cb764fa5d353432083d Mon Sep 17 00:00:00 2001 From: Norgad Date: Mon, 25 Apr 2016 15:58:01 +1200 Subject: [PATCH 18/41] Adds Disposals Chute to Mechanic's Workshop Adds Disposals Chute to Mechanic's Workshop --- _maps/map_files/cyberiad/cyberiad.dmm | 28 ++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 00e7cc5cac1..4e12bb5b05a 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -6357,12 +6357,12 @@ "csm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Mechanic's Workshop East"; dir = 2; network = list("SS13")},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/mechanic_workshop) "csn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/mechanic_workshop) "cso" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engine/mechanic_workshop) -"csp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"csq" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"csr" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"css" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"cst" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"csu" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"csp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) +"csq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"csr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"css" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"cst" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"csu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csv" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -6419,11 +6419,11 @@ "ctw" = (/obj/machinery/atmospherics/unary/vent_pump{on = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "ctx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "mechpod"; name = "Mechanic's Workshop Inner Door"; opacity = 0},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) "cty" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/engine/mechanic_workshop) -"ctz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) -"ctA" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/mechanic_workshop) +"ctz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"ctA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-y"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "ctB" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) -"ctC" = (/obj/machinery/atmospherics/unary/vent_pump{on = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) -"ctD" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Mechanic Workshop"; req_access_txt = "70"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) +"ctC" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/mechanic_workshop) +"ctD" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "ctE" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "ctF" = (/obj/machinery/atmospherics/unary/vent_pump{on = 0},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "ctG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -8264,7 +8264,7 @@ "dcV" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/atmos) "dcW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/wall/r_wall,/area/engine/engineering) "dcX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/atmos) -"dcY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) +"dcY" = (/obj/machinery/atmospherics/unary/vent_pump{on = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "dcZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/west) "dda" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Singularity North-East"; dir = 2; network = list("Singularity","SS13")},/obj/machinery/power/grounding_rod{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering) "ddb" = (/obj/item/weapon/wrench,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "engineering_east_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = 20; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) @@ -8738,6 +8738,8 @@ "dmb" = (/obj/item/weapon/storage/fancy/donut_box,/obj/structure/table,/obj/item/weapon/book/manual/sop_general,/turf/simulated/floor/wood,/area/bridge/meeting_room) "dmc" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/coin/plasma,/obj/item/device/megaphone,/obj/item/weapon/book/manual/sop_general,/turf/simulated/floor/wood,/area/crew_quarters/captain) "dmd" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase,/obj/item/weapon/book/manual/sop_engineering,/obj/item/weapon/book/manual/sop_medical,/obj/item/weapon/book/manual/sop_science,/obj/item/weapon/book/manual/sop_security,/obj/item/weapon/book/manual/sop_service,/obj/item/weapon/book/manual/sop_supply,/obj/item/weapon/book/manual/sop_general,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/wood,/area/ntrep) +"dme" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) +"dmf" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Mechanic Workshop"; req_access_txt = "70"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) (1,1,1) = {" bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8902,8 +8904,8 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqcobcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcpIcyFcpJcpJcpJcpKcpFcpGcpMcqQcfdcrLcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcqIcqJcqKcqLcqMcpFcqLcqMcqKcqNdehcqPcpMczecyWczgcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadbabLcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkcjKcjKcjKcjKcjKcjKcjKcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqKcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaSecsdcsecsfcsgcsgcshcsidcYcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXdlFcsYcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaSecsdcsecsfcsgcsgcshcsicspcskcslcsmcsncsocsrcsqcsqcsscsucstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXdlFcsYcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBdlXcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxafxagiafxafxaabagiaqZbikaabaabcwNcwNcwNcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik From 0f7be5576fb31a43d2f9dbe757cb6dd865dd950f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Mon, 25 Apr 2016 11:32:48 +0200 Subject: [PATCH 19/41] Gunshot sounds, uplink references, less spammy tommygun, fixes --- _maps/map_files/RandomZLevels/academy.dmm | 4 +-- .../RandomZLevels/stationCollision.dmm | 6 ++--- code/datums/supplypacks.dm | 4 +-- code/datums/uplink_item.dm | 4 +++ .../objects/items/weapons/gift_wrappaper.dm | 2 +- code/modules/arcade/prize_datums.dm | 3 +-- code/modules/projectiles/ammunition.dm | 26 +++++++++---------- .../projectiles/ammunition/ammo_casings.dm | 14 +++++----- .../projectiles/ammunition/magazines.dm | 8 +++--- code/modules/projectiles/guns/projectile.dm | 16 ++++++------ .../projectiles/guns/projectile/toy.dm | 23 ++++++++-------- 11 files changed, 55 insertions(+), 55 deletions(-) diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index f5ecc09bfe4..5a371c50a06 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -160,7 +160,7 @@ "dd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "de" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) "df" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) -"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"dg" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "dh" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms) "di" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) "dj" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms) @@ -340,7 +340,7 @@ "gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) "gC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) "gD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft) -"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) +"gE" = (/obj/structure/table,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gG" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms) "gH" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms) "gI" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms) diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 0f6741251de..4934529dbf1 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -286,8 +286,8 @@ "fz" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) "fA" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/weapon/paper/sc_safehint_paper_caf,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fB" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/research) -"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) -"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fC" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"fD" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "fE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) "fF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/awaymission/midblock) "fG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/awaymission/midblock) @@ -315,7 +315,7 @@ "gc" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock) "gd" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) "ge" = (/obj/item/weapon/storage/secure/safe/sc_ssafe{pixel_x = 4; pixel_y = -26},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/northblock) -"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/automatic/tommygun/toy,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"gf" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/c10mm,/obj/item/clothing/under/syndicate,/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/toy/tommygun,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/awaymission/midblock) "gh" = (/obj/structure/closet/wardrobe/generic,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "gi" = (/turf/simulated/floor/plasteel,/area/awaymission/midblock) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index a5b6605c76e..247d481f1be 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1359,8 +1359,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/under/mafia/white, /obj/item/clothing/under/mafia/sue, /obj/item/clothing/under/mafia/tan, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy) + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun) cost = 15 containername = "mafia supply crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 2c74d75b545..ca41668e53a 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -410,6 +410,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/foamsmg name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." + reference = "FSMG" item = /obj/item/weapon/gun/projectile/automatic/c20r/toy cost = 5 gamemodes = list(/datum/game_mode/nuclear) @@ -418,6 +419,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/foammachinegun name = "Toy Machine Gun" desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." + reference = "FLMG" item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy cost = 10 gamemodes = list(/datum/game_mode/nuclear) @@ -426,6 +428,7 @@ var/list/uplink_items = list() /datum/uplink_item/ammo/toydarts name = "Box of Riot Darts" desc = "A box of 40 Donksoft foam riot darts, for reloading any compatible foam dart gun. Don't forget to share!" + reference = "FOAM" item = /obj/item/ammo_box/foambox/riot cost = 2 gamemodes = list(/datum/game_mode/nuclear) @@ -578,6 +581,7 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_weapons/foampistol name = "Toy Gun (with Stun Darts)" desc = "An innocent looking toy pistol designed to fire foam darts. Comes loaded with riot grade darts, to incapacitate a target." + reference = "FSPI" item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot cost = 3 surplus = 10 diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index c4c1fd38604..1b819bb0a0d 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -115,7 +115,7 @@ /obj/item/toy/AI, /obj/item/clothing/under/syndicate/tacticool, /obj/item/weapon/storage/box/fakesyndiesuit, - /obj/item/weapon/gun/projectile/automatic/tommygun/toy, + /obj/item/weapon/gun/projectile/shotgun/toy/tommygun, /obj/item/stack/tile/fakespace/loaded, ) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index d404fbaf855..da78a7806ef 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -253,10 +253,9 @@ var/global/datum/prizes/global_prizes = new /datum/prize_item/tommygun name = "Tommygun" desc = "A replica tommygun that fires foam darts." - typepath = /obj/item/weapon/gun/projectile/automatic/tommygun/toy + typepath = /obj/item/weapon/gun/projectile/shotgun/toy/tommygun cost = 175 - /datum/prize_item/esword name = "Toy Energy Sword" desc = "A plastic replica of an energy blade." diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index d4a24807275..45670ec70b0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -55,24 +55,24 @@ /obj/item/ammo_casing/attackby(obj/item/ammo_box/box as obj, mob/user as mob, params) if(!istype(box, /obj/item/ammo_box)) return - if(isturf(src.loc)) + if(isturf(loc)) var/boolets = 0 - for(var/obj/item/ammo_casing/pew in src.loc) - if (box.stored_ammo.len >= box.max_ammo) + for(var/obj/item/ammo_casing/pew in loc) + if(box.stored_ammo.len >= box.max_ammo) break - if (pew.BB) - if (box.give_round(pew)) + if(pew.BB) + if(box.give_round(pew)) boolets++ else continue - if (boolets > 0) + if(boolets > 0) box.update_icon() - user << "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s." + to_chat(user, "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.") else - user << "You fail to collect anything." + to_chat(user, "You fail to collect anything.") /obj/item/ammo_casing/proc/newshot() //For energy weapons, shotgun shells and wands (!). - if (!BB) + if(!BB) BB = new projectile_type(src) return @@ -104,19 +104,19 @@ update_icon() /obj/item/ammo_box/proc/get_round(var/keep = 0) - if (!stored_ammo.len) + if(!stored_ammo.len) return null else var/b = stored_ammo[stored_ammo.len] stored_ammo -= b - if (keep) + if(keep) stored_ammo.Insert(1,b) return b /obj/item/ammo_box/proc/give_round(var/obj/item/ammo_casing/r) var/obj/item/ammo_casing/rb = r - if (rb) - if (stored_ammo.len < max_ammo && rb.caliber == caliber) + if(rb) + if(stored_ammo.len < max_ammo && rb.caliber == caliber) stored_ammo += rb rb.loc = src return 1 diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index b60744aaf79..ec6aa9bc7f4 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -269,25 +269,25 @@ /obj/item/ammo_casing/caseless/foam_dart/update_icon() ..() - if (modified) + if(modified) icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." /obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/weapon/A as obj, mob/user as mob, params) ..() - if (istype(A, /obj/item/weapon/screwdriver) && !modified) + if(istype(A, /obj/item/weapon/screwdriver) && !modified) modified = 1 BB.damage_type = BRUTE icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." - user << "You pop the safety cap off of [src]." - else if ((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) - if (!user.unEquip(A)) + to_chat(user, "You pop the safety cap off of [src].") + else if((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) + if(!user.unEquip(A)) return - A.loc = BB + A.forceMove(BB) BB.damage = 5 BB.nodamage = 0 - user << "You insert [A] into [src]." + to_chat(user, "You insert [A] into [src].") return /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 13757e8de0d..32c3eeaa37c 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -109,6 +109,9 @@ /obj/item/ammo_box/magazine/internal/shot/toy/crossbow max_ammo = 5 +/obj/item/ammo_box/magazine/internal/shot/toy/tommygun + max_ammo = 10 + ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m10mm @@ -344,8 +347,3 @@ /obj/item/ammo_box/magazine/toy/m762/update_icon() ..() icon_state = "a762-[round(ammo_count(),10)]" - -/obj/item/ammo_box/magazine/toy/tommygunm45 - name = "little tommy's mag" - icon_state = "drum45" - max_ammo = 50 diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 8844f5cd7ab..ffe2cd269b5 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -20,7 +20,7 @@ /obj/item/weapon/gun/projectile/New() ..() - if (!magazine) + if(!magazine) magazine = new mag_type(src) chamber_round() update_icon() @@ -53,9 +53,9 @@ /obj/item/weapon/gun/projectile/proc/chamber_round() - if (chambered || !magazine) + if(chambered || !magazine) return - else if (magazine.ammo_count()) + else if(magazine.ammo_count()) chambered = magazine.get_round() chambered.loc = src return @@ -63,9 +63,9 @@ /obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob, params) ..() - if (istype(A, /obj/item/ammo_box/magazine)) + if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A - if (!magazine && istype(AM, text2path(mag_type))) + if(!magazine && istype(AM, text2path(mag_type))) user.remove_from_mob(AM) magazine = AM magazine.loc = src @@ -74,7 +74,7 @@ A.update_icon() update_icon() return 1 - else if (magazine) + else if(magazine) to_chat(user, "There's already a magazine in \the [src].") if(istype(A, /obj/item/weapon/suppressor)) var/obj/item/weapon/suppressor/S = A @@ -135,9 +135,9 @@ /obj/item/weapon/gun/projectile/proc/get_ammo(var/countchambered = 1) var/boolets = 0 //mature var names for mature people - if (chambered && countchambered) + if(chambered && countchambered) boolets++ - if (magazine) + if(magazine) boolets += magazine.ammo_count() return boolets diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 812361ec245..7bb290f4f46 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -5,7 +5,6 @@ icon_state = "saber" item_state = "gun" mag_type = "/obj/item/ammo_box/magazine/toy/smg" - fire_sound = 'sound/items/syringeproj.ogg' force = 0 throwforce = 0 burst_size = 3 @@ -22,6 +21,7 @@ icon_state = "pistol" w_class = 2 mag_type = "/obj/item/ammo_box/magazine/toy/pistol" + fire_sound = 'sound/weapons/Gunshot.ogg' can_suppress = 0 burst_size = 1 fire_delay = 0 @@ -61,17 +61,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw/toy/process_chambered() return ..(0, 1) -/obj/item/weapon/gun/projectile/automatic/tommygun/toy - name = "tommy gun" - desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." - icon_state = "tommygun" - item_state = "shotgun" - w_class = 2 - mag_type = "/obj/item/ammo_box/magazine/toy/tommygunm45" - fire_sound = 'sound/items/syringeproj.ogg' -/obj/item/weapon/gun/projectile/automatic/tommygun/toy/process_chambered() - return ..(0, 1) /obj/item/weapon/gun/projectile/shotgun/toy name = "foam force shotgun" @@ -81,7 +71,6 @@ throwforce = 0 origin_tech = null mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy" - fire_sound = 'sound/items/syringeproj.ogg' clumsy_check = 0 needs_permit = 0 @@ -97,5 +86,15 @@ icon_state = "crossbow" item_state = "crossbow" mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/crossbow" + fire_sound = 'sound/items/syringeproj.ogg' slot_flags = SLOT_BELT w_class = 2 + +/obj/item/weapon/gun/projectile/shotgun/toy/tommygun + name = "tommy gun" + desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." + icon = 'icons/obj/gun.dmi' + icon_state = "tommy" + item_state = "shotgun" + mag_type = "/obj/item/ammo_box/magazine/internal/shot/toy/tommygun" + w_class = 2 From c587019b8767d73a3f9c4662387493b23b7f331e Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 25 Apr 2016 06:06:20 -0400 Subject: [PATCH 20/41] Ports Door Wands --- code/game/jobs/access.dm | 24 ++-- code/game/objects/items/control_wand.dm | 104 ++++++++++++++++++ .../crates_lockers/closets/secure/cargo.dm | 3 +- .../closets/secure/engineering.dm | 1 + .../crates_lockers/closets/secure/medical.dm | 1 + .../closets/secure/scientist.dm | 1 + .../crates_lockers/closets/secure/security.dm | 3 + icons/obj/device.dmi | Bin 33124 -> 34130 bytes paradise.dme | 1 + 9 files changed, 125 insertions(+), 13 deletions(-) create mode 100644 code/game/objects/items/control_wand.dm diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index d43d5e17e8f..5cb0002158f 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -253,20 +253,20 @@ switch(code) if(0) return get_all_accesses() - if(1) //security - return list(access_sec_doors, access_weapons, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_pilot, access_hos) - if(2) //medbay - return list(access_medical, access_genetics, access_morgue, access_chemistry, access_psychiatrist, access_virology, access_surgery, access_cmo, access_paramedic) - if(3) //research - return list(access_research, access_tox, access_tox_storage, access_robotics, access_xenobiology, access_xenoarch, access_minisat, access_rd) - if(4) //engineering and maintenance - return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_minisat, access_ce, access_mechanic) - if(5) //command - return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_gateway, access_all_personal_lockers, access_heads_vault, access_blueshield, access_ntrep, access_hop, access_captain) - if(6) //station general + if(1) //station general return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_magistrate, access_clown, access_mime) - if(7) //supply + if(2) //security + return list(access_sec_doors, access_weapons, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_pilot, access_hos) + if(3) //medbay + return list(access_medical, access_genetics, access_morgue, access_chemistry, access_psychiatrist, access_virology, access_surgery, access_cmo, access_paramedic) + if(4) //research + return list(access_research, access_tox, access_tox_storage, access_genetics, access_robotics, access_xenobiology, access_xenoarch, access_minisat, access_rd) + if(5) //engineering and maintenance + return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_minisat, access_ce, access_mechanic) + if(6) //supply return list(access_mailsorting, access_mining, access_mining_station, access_mineral_storeroom, access_cargo, access_qm) + if(7) //command + return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_gateway, access_all_personal_lockers, access_heads_vault, access_blueshield, access_ntrep, access_hop, access_captain) /proc/get_region_accesses_name(var/code) switch(code) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm new file mode 100644 index 00000000000..8a5b6ec7aca --- /dev/null +++ b/code/game/objects/items/control_wand.dm @@ -0,0 +1,104 @@ +#define WAND_OPEN "Open Door" +#define WAND_BOLT "Toggle Bolts" +#define WAND_EMERGENCY "Toggle Emergency Access" + +/obj/item/weapon/door_remote + icon_state = "gangtool-white" + item_state = "electronic" + icon = 'icons/obj/device.dmi' + name = "control wand" + desc = "Remotely controls airlocks." + w_class = 1 + var/mode = WAND_OPEN + var/region_access = 1 //See access.dm + var/obj/item/weapon/card/id/ID + +/obj/item/weapon/door_remote/New() + ..() + ID = new /obj/item/weapon/card/id + ID.access = get_region_accesses(region_access) + +/obj/item/weapon/door_remote/attack_self(mob/user) + switch(mode) + if(WAND_OPEN) + mode = WAND_BOLT + if(WAND_BOLT) + mode = WAND_EMERGENCY + if(WAND_EMERGENCY) + mode = WAND_OPEN + to_chat(user, "Now in mode: [mode].") + +/obj/item/weapon/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user) + if(!istype(D)) + return + if(!(D.arePowerSystemsOn())) + to_chat(user, "[D] has no power!") + return + if(!D.requiresID()) + to_chat(user, "[D]'s ID scan is disabled!") + return + if(D.check_access(src.ID)) + switch(mode) + if(WAND_OPEN) + if(D.density) + D.open() + else + D.close() + if(WAND_BOLT) + if(D.locked) + D.unlock() + else + D.lock() + if(WAND_EMERGENCY) + if(D.emergency) + D.emergency = 0 + else + D.emergency = 1 + D.update_icon() + else + to_chat(user, "[src] does not have access to this door.") + +/obj/item/weapon/door_remote/omni + name = "omni door remote" + desc = "This control wand can access any door on the station." + icon_state = "gangtool-yellow" + region_access = 0 + +/obj/item/weapon/door_remote/captain + name = "command door remote" + icon_state = "gangtool-yellow" + region_access = 7 + +/obj/item/weapon/door_remote/chief_engineer + name = "engineering door remote" + icon_state = "gangtool-orange" + region_access = 5 + +/obj/item/weapon/door_remote/research_director + name = "research door remote" + icon_state = "gangtool-purple" + region_access = 4 + +/obj/item/weapon/door_remote/head_of_security + name = "security door remote" + icon_state = "gangtool-red" + region_access = 2 + +/obj/item/weapon/door_remote/quartermaster + name = "supply door remote" + icon_state = "gangtool-green" + region_access = 6 + +/obj/item/weapon/door_remote/chief_medical_officer + name = "medical door remote" + icon_state = "gangtool-blue" + region_access = 3 + +/obj/item/weapon/door_remote/civillian + name = "civillian door remote" + icon_state = "gangtool-white" + region_access = 1 + +#undef WAND_OPEN +#undef WAND_BOLT +#undef WAND_EMERGENCY \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 945f4f4d818..51f01d874a8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -39,4 +39,5 @@ new /obj/item/weapon/tank/emergency_oxygen(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson(src) - new /obj/item/clothing/head/soft(src) \ No newline at end of file + new /obj/item/clothing/head/soft(src) + new /obj/item/weapon/door_remote/quartermaster(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index d7fd20b6d37..1746211e248 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -31,6 +31,7 @@ new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/head/beret/eng(src) + new /obj/item/weapon/door_remote/chief_engineer(src) /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index ad76cfc9409..17f208e28e9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -175,6 +175,7 @@ new /obj/item/device/flash(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src) + new /obj/item/weapon/door_remote/chief_medical_officer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 321b71b6eaa..488a422af86 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -49,6 +49,7 @@ new /obj/item/clothing/suit/armor/reactive(src) new /obj/item/device/flash(src) new /obj/item/device/laser_pointer(src) + new /obj/item/weapon/door_remote/research_director(src) /obj/structure/closet/secure_closet/research_reagents name = "research chemical storage closet" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 05f077e64d1..4a2ced79339 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -26,6 +26,7 @@ new /obj/item/device/radio/headset/heads/captain/alt(src) new /obj/item/clothing/gloves/color/captain(src) new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/weapon/door_remote/captain(src) @@ -52,6 +53,7 @@ new /obj/item/device/flash(src) new /obj/item/weapon/mining_voucher(src) new /obj/item/clothing/accessory/petcollar(src) + new /obj/item/weapon/door_remote/civillian(src) /obj/structure/closet/secure_closet/hop2 name = "head of personnel's attire" @@ -114,6 +116,7 @@ new /obj/item/weapon/storage/belt/security/sec(src) new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/energy/hos(src) + new /obj/item/weapon/door_remote/head_of_security(src) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 37026b153be5d3829010a8c9c01bb4f36e5c24b8..46a4a9743164a928d73eaf9cdb3a1ddf089e0773 100644 GIT binary patch delta 13429 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 diff --git a/paradise.dme b/paradise.dme index 67af82f6adf..570de9bb9ec 100644 --- a/paradise.dme +++ b/paradise.dme @@ -698,6 +698,7 @@ #include "code\game\objects\items\candle.dm" #include "code\game\objects\items\changestone.dm" #include "code\game\objects\items\contraband.dm" +#include "code\game\objects\items\control_wand.dm" #include "code\game\objects\items\crayons.dm" #include "code\game\objects\items\dehy_carp.dm" #include "code\game\objects\items\documents.dm" From 52b810a8bafdbfd427549400188769052fdf7a8a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 25 Apr 2016 22:35:51 -0400 Subject: [PATCH 21/41] Abductor Camera Alt Fix --- _maps/map_files/cyberiad/z2.dmm | 8 ++++---- .../gamemodes/miniantags/abduction/machinery/camera.dm | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 46e98f30d6c..46b1662d8d6 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -621,9 +621,11 @@ "lW" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "lX" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) "lY" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship) +"lZ" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "ma" = (/obj/effect/decal/cleanable/molten_item,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "mb" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) "mc" = (/obj/item/trash/chips,/obj/machinery/light/spot,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"md" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space) "me" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) "mg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership) "mh" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership) @@ -694,7 +696,6 @@ "rK" = (/turf/unsimulated/wall/splashscreen,/area/start) "rP" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/clusterbuster,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rQ" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade/incendiary{name = "Incendiary Grenade"},/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/shuttle/gamma/space) -"rT" = (/obj/structure/closet/secure_closet/guncabinet,/obj/machinery/camera/motion{c_tag = "Gamma Armory Entrance"; network = list("SS13")},/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/obj/item/weapon/gun/projectile/automatic/pistol{name = "pistol"},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rU" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rV" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/turf/simulated/floor/engine,/area/shuttle/gamma/space) "rW" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/rocketlauncher,/turf/simulated/floor/engine,/area/shuttle/gamma/space) @@ -716,7 +717,6 @@ "sm" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/shuttle/gamma/space) "sn" = (/obj/structure/cable,/obj/machinery/mech_bay_recharge_port/upgraded,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space) "so" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/obj/machinery/light,/turf/simulated/floor/mech_bay_recharge_floor,/area/shuttle/gamma/space) -"sp" = (/obj/machinery/computer/mech_bay_power_console,/obj/machinery/camera{c_tag = "Gamma Armory Mech Bay"; dir = 1; network = list("SS13")},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space) "sq" = (/turf/unsimulated/wall,/area/centcom/control) "sr" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "ss" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) @@ -1434,11 +1434,11 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaq aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZbZbZbZbZbZrPrQdebZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNbZcYrTrUrVrWrXrXrXbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNbZcYlZrUrVrWrXrXrXbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZrXrXrXrXrXrXrYrZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZsasbsbsbscsdsesbbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNsfsgsgsgsgsashsisjbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNbZsgskslsmsasnsospbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNbZsgskslsmsasnsomdbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNbZbZbZbZbZbZbZbZbZbZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 0ca3c652a31..7d5028f4875 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -96,7 +96,7 @@ var/mob/camera/aiEye/remote/remote_eye = C.remote_control var/obj/machinery/abductor/pad/P = target - if(cameranet.checkTurfVis(remote_eye.loc) && !(remote_eye.loc in config.admin_levels)) + if(cameranet.checkTurfVis(remote_eye.loc)) P.PadToLoc(remote_eye.loc) /datum/action/teleport_out @@ -123,7 +123,7 @@ var/mob/camera/aiEye/remote/remote_eye = C.remote_control var/obj/machinery/abductor/pad/P = target - if(cameranet.checkTurfVis(remote_eye.loc) && !(remote_eye.loc in config.admin_levels)) + if(cameranet.checkTurfVis(remote_eye.loc)) P.MobToLoc(remote_eye.loc,C) /datum/action/vest_mode_swap From a4dce5dd5f766918b2f619d914666c59db4c1000 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 25 Apr 2016 23:30:55 -0400 Subject: [PATCH 22/41] Nutrition Fix --- code/modules/mob/living/carbon/human/species/species.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ed15138b602..03091a7e50f 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -646,11 +646,11 @@ H.healthdoll.overlays += image('icons/mob/screen_gen.dmi',"[O.limb_name][icon_num]") switch(H.nutrition) - if(450 to INFINITY) + if(NUTRITION_LEVEL_FULL to INFINITY) H.throw_alert("nutrition", /obj/screen/alert/fat) - if(350 to 450) + if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL) H.clear_alert("nutrition") - if(250 to 350) + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) H.throw_alert("nutrition", /obj/screen/alert/hungry) else H.throw_alert("nutrition", /obj/screen/alert/starving) From d03a7ba7b5927d6875308875641292697a42e142 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 26 Apr 2016 00:51:24 -0400 Subject: [PATCH 23/41] fixes and defines --- code/__DEFINES/misc.dm | 12 +++++++- code/game/jobs/access.dm | 40 ++++++++++++------------- code/game/objects/items/control_wand.dm | 16 +++++----- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index b6fcfc104c8..7f1a33d0b33 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -220,4 +220,14 @@ #define R_HAND_LAYER 28 #define TARGETED_LAYER 29 //BS12: Layer for the target overlay from weapon targeting system #define FIRE_LAYER 30 //If you're on fire -#define TOTAL_LAYERS 30 \ No newline at end of file +#define TOTAL_LAYERS 30 + +///Access Region Codes/// +#define REGION_ALL 0 +#define REGION_GENERAL 1 +#define REGION_SECURITY 2 +#define REGION_MEDBAY 3 +#define REGION_RESEARCH 4 +#define REGION_ENGINEERING 5 +#define REGION_SUPPLY 6 +#define REGION_COMMAND 7 \ No newline at end of file diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 5cb0002158f..7b0c41ca434 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -249,43 +249,43 @@ /proc/get_absolutely_all_accesses() return (get_all_accesses() | get_all_centcom_access() | get_all_syndicate_access() | get_all_misc_access()) -/proc/get_region_accesses(var/code) +/proc/get_region_accesses(code) switch(code) - if(0) + if(REGION_ALL) return get_all_accesses() - if(1) //station general + if(REGION_GENERAL) //station general return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_magistrate, access_clown, access_mime) - if(2) //security + if(REGION_SECURITY) //security return list(access_sec_doors, access_weapons, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_pilot, access_hos) - if(3) //medbay + if(REGION_MEDBAY) //medbay return list(access_medical, access_genetics, access_morgue, access_chemistry, access_psychiatrist, access_virology, access_surgery, access_cmo, access_paramedic) - if(4) //research + if(REGION_RESEARCH) //research return list(access_research, access_tox, access_tox_storage, access_genetics, access_robotics, access_xenobiology, access_xenoarch, access_minisat, access_rd) - if(5) //engineering and maintenance + if(REGION_ENGINEERING) //engineering and maintenance return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_minisat, access_ce, access_mechanic) - if(6) //supply + if(REGION_SUPPLY) //supply return list(access_mailsorting, access_mining, access_mining_station, access_mineral_storeroom, access_cargo, access_qm) - if(7) //command + if(REGION_COMMAND) //command return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_gateway, access_all_personal_lockers, access_heads_vault, access_blueshield, access_ntrep, access_hop, access_captain) -/proc/get_region_accesses_name(var/code) +/proc/get_region_accesses_name(code) switch(code) - if(0) + if(REGION_ALL) return "All" - if(1) //security + if(REGION_GENERAL) //station general + return "General" + if(REGION_SECURITY) //security return "Security" - if(2) //medbay + if(REGION_MEDBAY) //medbay return "Medbay" - if(3) //research + if(REGION_RESEARCH) //research return "Research" - if(4) //engineering and maintenance + if(REGION_ENGINEERING) //engineering and maintenance return "Engineering" - if(5) //command - return "Command" - if(6) //station general - return "Station General" - if(7) //supply + if(REGION_SUPPLY) //supply return "Supply" + if(REGION_COMMAND) //command + return "Command" /proc/get_access_desc(A) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 8a5b6ec7aca..86f6fd5a74d 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -62,42 +62,42 @@ name = "omni door remote" desc = "This control wand can access any door on the station." icon_state = "gangtool-yellow" - region_access = 0 + region_access = REGION_ALL /obj/item/weapon/door_remote/captain name = "command door remote" icon_state = "gangtool-yellow" - region_access = 7 + region_access = REGION_COMMAND /obj/item/weapon/door_remote/chief_engineer name = "engineering door remote" icon_state = "gangtool-orange" - region_access = 5 + region_access = REGION_ENGINEERING /obj/item/weapon/door_remote/research_director name = "research door remote" icon_state = "gangtool-purple" - region_access = 4 + region_access = REGION_RESEARCH /obj/item/weapon/door_remote/head_of_security name = "security door remote" icon_state = "gangtool-red" - region_access = 2 + region_access = REGION_SECURITY /obj/item/weapon/door_remote/quartermaster name = "supply door remote" icon_state = "gangtool-green" - region_access = 6 + region_access = REGION_SUPPLY /obj/item/weapon/door_remote/chief_medical_officer name = "medical door remote" icon_state = "gangtool-blue" - region_access = 3 + region_access = REGION_MEDBAY /obj/item/weapon/door_remote/civillian name = "civillian door remote" icon_state = "gangtool-white" - region_access = 1 + region_access = REGION_GENERAL #undef WAND_OPEN #undef WAND_BOLT From d35248366a16cf4af885fef826bf1907bc9b5daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Tue, 26 Apr 2016 11:28:00 +0200 Subject: [PATCH 24/41] Thingies don't embed, icons work. --- .../projectiles/ammunition/ammo_casings.dm | 3 ++- .../projectiles/projectile/reusable.dm | 4 +++- icons/obj/toyguns.dmi | Bin 2804 -> 2486 bytes 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index ec6aa9bc7f4..16fad035055 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -268,7 +268,7 @@ var/modified = 0 /obj/item/ammo_casing/caseless/foam_dart/update_icon() - ..() + ....() //to omit adding "-live" to the ammo casing if(modified) icon_state = "foamdart_empty" desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." @@ -290,6 +290,7 @@ to_chat(user, "You insert [A] into [src].") return + /obj/item/ammo_casing/caseless/foam_dart/riot name = "riot foam dart" desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 367d20b6992..81defd55743 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -31,10 +31,12 @@ damage = 0 // It's a damn toy. damage_type = OXY nodamage = 1 + edge = 0 + embed = 0 icon = 'icons/obj/toyguns.dmi' icon_state = "foamdart" ammo_type = /obj/item/ammo_casing/caseless/foam_dart - range = 10 + range = 10 /obj/item/projectile/bullet/reusable/foam_dart/riot name = "riot foam dart" diff --git a/icons/obj/toyguns.dmi b/icons/obj/toyguns.dmi index 4ac5c62056e39a1fe97c752db1cabbf0010fe347..bd2ff273a40c1f1d38bdc3fe4a85e9089d2547be 100644 GIT binary patch delta 2414 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 Date: Tue, 26 Apr 2016 16:19:30 +0200 Subject: [PATCH 25/41] Makes gameboard circuits printable Whoops! --- code/modules/research/designs/machine_designs.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index afb1e09b40f..d2da596b692 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -492,6 +492,17 @@ build_path = /obj/item/weapon/circuitboard/prize_counter category = list("Misc. Machinery") +/datum/design/gameboard + name = "Machine Design (Virtual Gameboard)" + desc = "The circuit board for a Virtual Gameboard." + id = "gameboard" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS=1000, "sacid"=20) + build_path = /obj/item/weapon/circuitboard/gameboard + category = list("Misc. Machinery") + + /datum/design/botany_extractor name = "Machine Design (Lysis-Isolation Centrifuge)" desc = "The circuit board for a lysis-isolation centrifuge." From 73affd479e3abad0a1ef46ba1d250c9f494456c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Tue, 26 Apr 2016 21:55:14 +0200 Subject: [PATCH 26/41] GODDAMN LIGGERS --- code/modules/mob/living/carbon/human/examine.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b956b4854d6..714e9c45146 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -60,6 +60,8 @@ msg += "!\n" //omit the species when examining else if (species.name == "Slime People") //snowflakey because Slime People are defined as a plural msg += ", a slime person!\n" + else if (species.name == "Unathi") //DAMN YOU, VOWELS + msg += ", a unathi!\n" else msg += ", \a [lowertext(species.name)]!\n" From 5b39f2fcc58bef79f1a3809b8696d91a1ff25e17 Mon Sep 17 00:00:00 2001 From: KasparoVy Date: Tue, 26 Apr 2016 17:13:23 -0400 Subject: [PATCH 27/41] Adjusts the Zeng-hu Head Sprite --- .../cyberlimbs/zenghu/zenghu_main.dmi | Bin 1406 -> 1431 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi index 85f49f50873bd000185a4a8565a72de35c226d3d..0d74250a3eab91faf6cbca8f31377ca6f87fa4dd 100644 GIT binary patch delta 1154 zcmV-|1bzGd3YQD8B>{h3Nkl?Rumj426Y&{dPLL_kXVo+Gl^PkU+sDOwZe= z{b3x-0Ypp)vn&7r0001BCQQZADY29|NVe0(tsP!f)}0lS>m<-QpQ^wA3b}I~n}q0Z zUVMBDn)RfnU$KlG--1ETSzxbHk%BH7YWXCvTfZ_22ASpQ`QLvsnCGWX*M50@>2#$Q zUf=#X@b)^S8~^|S0C*^vnOwmn&uDntPct%;%-+{_@n1^@s6005?>{54DW3t5he{K8~@ z;_))tt2F(oaoJ@&e{n5jxAJtSCciM1pBOK}xIBkLZmoZ~2h&P8f6{R3@(a^vbN-~^ z)a4hR^AnGwid(QQzwn%&xT7PrFimBC;VC~6fD+RK^d}M-?wp zsLL-r=O=$2$9bpbP=7^Leqka%@wkY0Z0cccp?Xr6Uzj;r$SoY}ajJ57HU4DPhr69d54HQ~Xb^2kKE~+{GuuB)6H~kO*0KoLDX65ZG zZ`TfO>&C7a-3)8jj@=^pcRIFK^cXzxkiN z-Q9ovmhXaO@8+J_II#?}=^fGj+C9H)+#18qwFQ^MLSYnT|G!`tAUX<=U+86m-7rpt z_&UY;K+5x*SK`n?WE z3Oq{iO@Y4-f%z6vATZ(ufjN6@!FZ2l1z3L{#;}p!C%=y&aTLkfy%TQ1y^6A#J3)ieu~9^}$Q zpdBH_a@hqm*rlnMG?i{g#Nkl-FBrQ428vj{r9vp@Bgj?+BFvi5-3>0>HfOf z3*)hDQH%-UEDHbt0001(2~)9kN>)m2q_xw**LC=*T5YV5Y$t)%y43mmQOL&U*d#=M z^Wfuq&}@;Ke$6uL_#X6fVu8I{MG7uaf0iSG-L5O6V31iJ9>0IK!8|^6I`-4^Q>P=f z@ci;+!^`uKb^rhX0N}1*Jh=iV&uDntUR zy+s1!P0Z&xn^S)va7hHNy2Y}@1Lbeg#LzGysaZ;&bepU+65}|5ZukJ)4DkXL+`o-* zk4X)W&}PWxMchRXHeRCo^J|Tl=mhz-CW>-!GlTRR000000GN{U*DT#HWH~D83zPMU z=gVlX*7T<)WS5Ejg}IR3+S8qy`odIwVmJg7@*ED?t>S+kOe^8yNyDkDFHG;v#gm3p zS6>*{C!Sjs_h4OpVO*bhprf=fO=W#yRG$by3Bi?MZ**}7?F3(f9jR&Z!0_D*6mu{7 zlQROMx1?gBh6Y4$Y4#kW=q+h>r!=>%2PO4|GlSeF00000000000P3mCAEvh|o}^G$ zUl`XXp4)%a&&B(P0GO`M+X1^0000000000v=M@GT+}Ya z>}*3Rdg1b%7e;o8k4m~jAe+c#&Kq5Yf!$*vvWe%dLoAn4m>R!BGdzQ5aBR^ZLht!|N0qvvDIQ^Lcq^ z*e=tAAm8|(d=rC>6A<(b{IYK2KI4*^&{VLy^H1gg{xQr>M_k=;4o3<+TkuVRe@=n< z9#SAM-~@p=d+5P%k7Wg{&W~Xuzfb-cL&AS3lCwK2+=9m`%8oK?u#a3tmE7u2aXv04 z36um#C*X1<0kS~;5|l3C%LxKjK_F+B1`%-(x|*v6ijR@2X%;9w$R$Uh9ihZ>IRrG= zC09&x<(i@JBB&XR}B9^8ycrcKgXTb!9udD0h*b2~^tcppC<0XW!vO?aGO|P v$ndclMA{6O{sRC20000000000;8*YuWY`xkkg+8$00000NkvXXu0mjf^llpO From 0cb812b0e67cb6dec1272287872c9c6755ff2847 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 17:38:00 -0400 Subject: [PATCH 28/41] Automatic changelog generation for PR #4292 --- html/changelogs/AutoChangeLog-pr-4292.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4292.yml diff --git a/html/changelogs/AutoChangeLog-pr-4292.yml b/html/changelogs/AutoChangeLog-pr-4292.yml new file mode 100644 index 00000000000..3a713925e7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4292.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - bugfix: "Fixes nutrition alert icon kicking in too early" From a9582d92472cfa88c478383cc42f8c256d81be67 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 24 Apr 2016 22:45:51 -0400 Subject: [PATCH 29/41] Improves admin jump commands, forceMove --- code/game/atoms_movable.dm | 8 +++-- code/modules/admin/verbs/adminjump.dm | 44 +++++++++++++-------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 831e7004ad6..92c894cba10 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -110,11 +110,13 @@ /atom/movable/proc/forceMove(atom/destination) var/turf/old_loc = loc - if(old_loc) - old_loc.Exited(src) - loc = destination + if(old_loc) + old_loc.Exited(src, destination) + for(var/atom/movable/AM in old_loc) + AM.Uncrossed(src) + if(destination) destination.Entered(src) for(var/atom/movable/AM in destination) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 2194fb20bf3..5cbb8dd26d5 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -2,8 +2,8 @@ set name = "Jump to Area" set desc = "Area to jump to" set category = "Admin" - - if(!check_rights(R_ADMIN)) + + if(!check_rights(R_ADMIN)) return if(!A) @@ -21,7 +21,7 @@ if(!T) to_chat(src, "Nowhere to jump to!") return - + admin_forcemove(usr, T) log_admin("[key_name(usr)] jumped to [A]") message_admins("[key_name_admin(usr)] jumped to [A]") @@ -30,13 +30,13 @@ /client/proc/jumptoturf(var/turf/T in world) set name = "Jump to Turf" set category = "Admin" - - if(!check_rights(R_ADMIN)) + + if(!check_rights(R_ADMIN)) return log_admin("[key_name(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]") message_admins("[key_name_admin(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]", 1) - usr.loc = T + admin_forcemove(usr, T) feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return @@ -44,7 +44,7 @@ set category = "Admin" set name = "Jump to Mob" - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN)) return log_admin("[key_name(usr)] jumped to [key_name(M)]") @@ -62,14 +62,12 @@ set category = "Admin" set name = "Jump to Coordinate" - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN)) return - if(src.mob) - var/mob/A = src.mob - A.x = tx - A.y = ty - A.z = tz + var/turf/T = locate(tx, ty, tz) + if(T) + admin_forcemove(usr, T) feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") @@ -77,7 +75,7 @@ set category = "Admin" set name = "Jump to Key" - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN)) return var/list/keys = list() @@ -90,7 +88,7 @@ var/mob/M = selection:mob log_admin("[key_name(usr)] jumped to [key_name(M)]") message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) - + admin_forcemove(usr, M.loc) feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -99,8 +97,8 @@ set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" - - if(!check_rights(R_ADMIN)) + + if(!check_rights(R_ADMIN)) return log_admin("[key_name(usr)] teleported [key_name(M)]") @@ -113,7 +111,7 @@ set name = "Get Key" set desc = "Key to teleport" - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN)) return var/list/keys = list() @@ -130,16 +128,16 @@ message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1) if(M) admin_forcemove(M, get_turf(usr)) - usr.loc = M.loc + admin_forcemove(usr, M.loc) feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/sendmob(var/mob/M in mob_list) set category = "Admin" set name = "Send Mob" - - if(!check_rights(R_ADMIN)) + + if(!check_rights(R_ADMIN)) return - + var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas() if(A) admin_forcemove(M, pick(get_area_turfs(A))) @@ -148,7 +146,7 @@ message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1) /proc/admin_forcemove(mob/mover, atom/newloc) - mover.loc = newloc + mover.forceMove(newloc) mover.on_forcemove(newloc) /mob/proc/on_forcemove(atom/newloc) From fc8506d3b73084587879e231e8535d16af5e32df Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 18:54:19 -0400 Subject: [PATCH 30/41] Automatic changelog generation for PR #4258 --- html/changelogs/AutoChangeLog-pr-4258.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4258.yml diff --git a/html/changelogs/AutoChangeLog-pr-4258.yml b/html/changelogs/AutoChangeLog-pr-4258.yml new file mode 100644 index 00000000000..c8511011210 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4258.yml @@ -0,0 +1,5 @@ +author: pinatacolada +delete-after: True +changes: + - tweak: "Makes fridge boards be selectable by screwdriving them" + - bugfix: "Virology fridge now accepts syringes, beakers, and bottles" From 4d8c64dcb124230bba9768bbff870102ade973a5 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 19:14:12 -0400 Subject: [PATCH 31/41] Automatic changelog generation for PR #4282 --- html/changelogs/AutoChangeLog-pr-4282.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4282.yml diff --git a/html/changelogs/AutoChangeLog-pr-4282.yml b/html/changelogs/AutoChangeLog-pr-4282.yml new file mode 100644 index 00000000000..1049f7ff047 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4282.yml @@ -0,0 +1,4 @@ +author: QuinnAggeler +delete-after: True +changes: + - bugfix: "Adds a check for brain death (brain damage of 120 or more) to the proc responsible for reviving IPCs" From 98aa16d572a56656e6516d9837b6ab02ee350a99 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 19:15:14 -0400 Subject: [PATCH 32/41] Automatic changelog generation for PR #4285 --- html/changelogs/AutoChangeLog-pr-4285.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4285.yml diff --git a/html/changelogs/AutoChangeLog-pr-4285.yml b/html/changelogs/AutoChangeLog-pr-4285.yml new file mode 100644 index 00000000000..3bdc7140b0d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4285.yml @@ -0,0 +1,4 @@ +author: Norgad +delete-after: True +changes: + - rscadd: "Adds a disposals chute to the Mechanic's Workshop" From 519b5efa672e2ce34bec94987a517392da015531 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 19:15:20 -0400 Subject: [PATCH 33/41] Automatic changelog generation for PR #4262 --- html/changelogs/AutoChangeLog-pr-4262.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4262.yml diff --git a/html/changelogs/AutoChangeLog-pr-4262.yml b/html/changelogs/AutoChangeLog-pr-4262.yml new file mode 100644 index 00000000000..72bc64e4537 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4262.yml @@ -0,0 +1,14 @@ +author: KasparoVy +delete-after: True +changes: + - bugfix: "Disembodied prosthetic heads that aren't monitors won't make you go bald when they're re-attached." + - bugfix: "'Optic' markings will disappear when your head gets removed, and reappear if it gets re-attached." + - bugfix: "Disembodied prosthetic heads that aren't monitors will now be rendered with hair & facial hair." + - bugfix: "Disembodied prosthetic heads with optical markings (markings with the head set as the origin) will be rendered with those markings." + - bugfix: "Animated hair styles (e.g. screens) and head accessories (e.g. 2/3 new antennae) will now be animated properly." + - rscadd: "3 more antennae." + - rscadd: "An alt. and monitor head model for every prosthetic brand but Zeng-hu. Morpheus only gets an alt model, not another monitor." + - rscadd: "Animated optical markings to fit the new alt. heads." + - rscadd: "Screen styles for the alt. Hesphiastos head." + - tweak: "Companies that make prosthetic body parts can (and do) now offer separate models for qualified recipients." + - tweak: "Removed the frames from screen styles in order to allow the same styles to be applied to all monitor heads." From a275496723ac6d5f97b22807d0527c0d77edc721 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 26 Apr 2016 19:25:40 -0400 Subject: [PATCH 34/41] my code immersions --- code/game/jobs/access.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 7b0c41ca434..e3649f5e445 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -254,7 +254,7 @@ if(REGION_ALL) return get_all_accesses() if(REGION_GENERAL) //station general - return list(access_kitchen,access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_magistrate, access_clown, access_mime) + return list(access_kitchen, access_bar, access_hydroponics, access_janitor, access_chapel_office, access_crematorium, access_library, access_theatre, access_lawyer, access_magistrate, access_clown, access_mime) if(REGION_SECURITY) //security return list(access_sec_doors, access_weapons, access_security, access_brig, access_armory, access_forensics_lockers, access_court, access_pilot, access_hos) if(REGION_MEDBAY) //medbay From 7f7df9ea4256b3c3f4688f3082d22e3dd8cdbd6e Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 19:31:43 -0400 Subject: [PATCH 35/41] Automatic changelog generation for PR #4288 --- html/changelogs/AutoChangeLog-pr-4288.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4288.yml diff --git a/html/changelogs/AutoChangeLog-pr-4288.yml b/html/changelogs/AutoChangeLog-pr-4288.yml new file mode 100644 index 00000000000..dd83c5181da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4288.yml @@ -0,0 +1,5 @@ +author: Fox McCloud +delete-after: True +changes: + - rscadd: "Adds in door wands--control doors from range" + - rscadd: "Each head of staff (and the QM) starts off with a door wand to control the doors in their respective departments" From d5fb23d4d75777238c8f361339b56301855d5330 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 26 Apr 2016 20:12:31 -0400 Subject: [PATCH 36/41] no fun crew has arrived --- .../chemical_reaction_slime.dm | 16 +------ .../research/xenobiology/xenobiology.dm | 44 ------------------- 2 files changed, 1 insertion(+), 59 deletions(-) diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm index c80370734d4..45480d91b50 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -661,18 +661,4 @@ var/mob/living/carbon/slime/S = new /mob/living/carbon/slime S.colour = pick("grey","orange", "metal", "blue", "purple", "dark purple", "dark blue", "green", "silver", "yellow", "gold", "yellow", "red", "silver", "pink", "cerulean", "sepia", "bluespace", "pyrite", "light pink", "oil", "adamantine", "black") S.forceMove(get_turf(holder.my_atom)) - S.visible_message("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!") - -/datum/chemical_reaction/slime_transfer - name = "Transfer Potion" - id = "slimetransfer" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/rainbow - -/datum/chemical_reaction/slime_transfer/on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/slimepotion/transference/P = new /obj/item/slimepotion/transference - P.forceMove(get_turf(holder.my_atom)) \ No newline at end of file + S.visible_message("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!") \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 7d2462494e9..3c11bdba38a 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -223,50 +223,6 @@ being_used = 0 ..() -/obj/item/slimepotion/transference - name = "consciousness transference potion" - desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle6" - origin_tech = "biotech=6" - var/prompted = 0 - var/animal_type = SENTIENCE_ORGANIC - -/obj/item/slimepotion/transference/afterattack(mob/living/M, mob/user) - if(prompted || !ismob(M)) - return - if(!isanimal(M) || M.ckey) //much like sentience, these will not work on something that is already player controlled - user << "[M] already has a higher consciousness!" - return ..() - if(M.stat) - user << "[M] is dead!" - return ..() - var/mob/living/simple_animal/SM = M - if(SM.sentience_type != animal_type) - user << "You cannot transfer your consciousness to [SM]." //no controlling machines - return ..() - if(jobban_isbanned(user, ROLE_SENTIENT)) - user << "Your mind goes blank as you attempt to use the potion." - return - - prompted = 1 - if(alert("This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?",,"Yes","No")=="No") - prompted = 0 - return - - user << "You drink the potion then place your hands on [SM]..." - - - user.mind.transfer_to(SM) - SM.universal_speak = 1 - SM.faction = user.faction - SM.sentience_act() //Same deal here as with sentience - user.death() - SM << "In a quick flash, you feel your consciousness flow into [SM]!" - SM << "You are now [SM]. Your allegiances, alliances, and roles are still the same as they were prior to consciousness transfer!" - SM.name = "[SM.name] as [user.real_name]" - qdel(src) - /obj/item/slimepotion/steroid name = "slime steroid" desc = "A potent chemical mix that will cause a baby slime to generate more extract." From 467eaa0e717b8f93eba8d52cc981d1aead4a9567 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 26 Apr 2016 20:24:28 -0400 Subject: [PATCH 37/41] Automatic changelog generation for PR #4189 --- html/changelogs/AutoChangeLog-pr-4189.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4189.yml diff --git a/html/changelogs/AutoChangeLog-pr-4189.yml b/html/changelogs/AutoChangeLog-pr-4189.yml new file mode 100644 index 00000000000..ae3c546108d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4189.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - rscadd: "Slime batteries now self-recharge." From f8ebf7d672a5e424f4d1c53a1717f821a0ebac90 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 27 Apr 2016 03:58:32 -0400 Subject: [PATCH 38/41] Fixes reviving while restrained --- code/modules/mob/living/living.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 37b326dc4c5..dd47a9cbcb6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -327,10 +327,13 @@ if (C.handcuffed && !initial(C.handcuffed)) C.unEquip(C.handcuffed) C.handcuffed = initial(C.handcuffed) + C.update_handcuffed() if (C.legcuffed && !initial(C.legcuffed)) C.unEquip(C.legcuffed) C.legcuffed = initial(C.legcuffed) + C.update_inv_legcuffed() + if(C.reagents) for(var/datum/reagent/R in C.reagents.reagent_list) C.reagents.clear_reagents() From 9f8a8cef9b374984191d65412c545f918820828a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20J=C4=99drzejczak?= Date: Wed, 27 Apr 2016 10:56:04 +0200 Subject: [PATCH 39/41] Grammar and that weird proc. --- code/modules/projectiles/ammunition/ammo_casings.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 16fad035055..e337742549a 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -260,7 +260,7 @@ //FOAM DARTS /obj/item/ammo_casing/caseless/foam_dart name = "foam dart" - desc = "Its nerf or nothing! Ages 8 and up." + desc = "It's nerf or nothing! Ages 8 and up." projectile_type = "/obj/item/projectile/bullet/reusable/foam_dart" caliber = "foam_force" icon = 'icons/obj/toyguns.dmi' @@ -268,10 +268,8 @@ var/modified = 0 /obj/item/ammo_casing/caseless/foam_dart/update_icon() - ....() //to omit adding "-live" to the ammo casing if(modified) icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." /obj/item/ammo_casing/caseless/foam_dart/attackby(var/obj/item/weapon/A as obj, mob/user as mob, params) ..() @@ -279,7 +277,7 @@ modified = 1 BB.damage_type = BRUTE icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ...Although, this one doesn't look too safe." + desc = "It's nerf or nothing! ...Although, this one doesn't look too safe." to_chat(user, "You pop the safety cap off of [src].") else if((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) if(!user.unEquip(A)) From 09ee3315d474531623b09969257010e28b9eb5fc Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 27 Apr 2016 11:43:58 -0400 Subject: [PATCH 40/41] Automatic changelog generation for PR #4270 --- html/changelogs/AutoChangeLog-pr-4270.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4270.yml diff --git a/html/changelogs/AutoChangeLog-pr-4270.yml b/html/changelogs/AutoChangeLog-pr-4270.yml new file mode 100644 index 00000000000..c46542d69f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4270.yml @@ -0,0 +1,4 @@ +author: FlattestGuitar +delete-after: True +changes: + - rscadd: "ports /tg/ Foam Force guns, now you can shoot foam at your enemies /with style/" From b54d463e3abef0f0b7fefd92e287f680a17251c7 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 27 Apr 2016 17:13:46 -0400 Subject: [PATCH 41/41] Fixes ai satt supply and scrubber lines actually connecting to something --- _maps/map_files/cyberiad/cyberiad.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 4e12bb5b05a..674e111caae 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -7989,7 +7989,7 @@ "cXG" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/decal/warning_stripes/west,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/aisat) -"cXJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "75"},/turf/simulated/floor/plasteel,/area/aisat/maintenance) +"cXJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "75"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/warning_stripes/north,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/aisat/maintenance) @@ -8003,7 +8003,7 @@ "cXU" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXV" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/aisat/maintenance) "cXW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/plasteel,/area/aisat/maintenance) -"cXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/aisat/maintenance) +"cXX" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/wall,/area/aisat/maintenance) "cXY" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/toxins/xenobiology) "cXZ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) "cYa" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{dir = 10; icon_state = "yellow"},/area/aisat/maintenance)