From ceff4ae424c594eec6c2483788b86fd0dd7002d2 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Sun, 12 Mar 2017 09:52:33 +0000 Subject: [PATCH] Tech Fixes: (#1888) Fixes #1790 Fixes #1791 Fixes a number of issues with robot sprites, chem master machine, and surgery steps The issue with borg sprites was caused by duplicate calls to ..() Ive standardised robot module parent calls to the top of the function Fixed the chemmaster not depositing pills in bottles properly. I added a new add_to_storage proc to storage.dm which is just a simple, safe means of putting stuff in stuff. it handles the checking. Fixed some issues with surgery. A few surgery steps had incorrect "open" var ranges defined which was causing organ repair surgery to be interfered with Also removed screwdriver from the list of bone mending tools, and added duct tape instead as the ghetto alternative. And allowed energyswords + chainswords to be used for cutting open ribs. theyre already useable for amputation Fixed an incorrect return var for surgery that was making surgeons able to attack their patients on help intent. Shouldnt happen anymore And also fixed the experimental welder being un-makeable at the protolathe. --- .../objects/items/weapons/storage/storage.dm | 9 ++++ .../modules/mob/living/silicon/robot/login.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 7 ++-- .../mob/living/silicon/robot/robot_modules.dm | 30 ++++++-------- code/modules/reagents/Chemistry-Machinery.dm | 8 ++-- code/modules/research/designs.dm | 2 +- code/modules/surgery/bones.dm | 8 ++-- code/modules/surgery/encased.dm | 8 ++-- code/modules/surgery/robotics.dm | 4 +- code/modules/surgery/surgery.dm | 1 + html/changelogs/Nanako-Techfixes.yml | 41 +++++++++++++++++++ 11 files changed, 84 insertions(+), 36 deletions(-) create mode 100644 html/changelogs/Nanako-Techfixes.yml diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index e1c2f9796d4..c09aef55f4f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -413,7 +413,16 @@ update_icon() return 1 + //This proc is called when you want to place an item into the storage item. +//Its a safe proc for adding things to the storage that does the necessary checks. Object will not be moved if it fails +/obj/item/weapon/storage/proc/insert_into_storage(obj/item/W as obj, var/prevent_messages = 1) + if(!can_be_inserted(W, prevent_messages)) + return + + return handle_item_insertion(W, prevent_messages) + + /obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) ..() diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 9d9117b9330..72493c1617e 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -6,5 +6,5 @@ winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5") // Forces synths to select an icon relevant to their module - if(!icon_selected) + if(module && !icon_selected) choose_icon(icon_selection_tries, module_sprites) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1954adaed71..b168c5561df 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -254,7 +254,7 @@ if(new_sprites && new_sprites.len) module_sprites = new_sprites.Copy() //Custom_sprite check and entry - + if (custom_sprite == 1) var/list/valid_states = icon_states(CUSTOM_ITEM_SYNTH) if("[ckey]-[modtype]" in valid_states) @@ -268,7 +268,7 @@ else icontype = module_sprites[1] icon_state = module_sprites[icontype] - + updateicon() return module_sprites @@ -463,7 +463,7 @@ /mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) ..(Proj) - if(prob(75) && Proj.damage > 0) + if(prob(75) && Proj.damage > 0) spark_system.queue() return 2 @@ -1031,6 +1031,7 @@ verbs -= /mob/living/silicon/robot/proc/choose_icon src << "Your icon has been set. You now require a module reset to change it." + /mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs set name = "Set Sensor Augmentation" set category = "Robot Commands" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8879295541c..8e7f6fd35b8 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -173,6 +173,7 @@ var/global/list/robot_modules = list( ) /obj/item/weapon/robot_module/standard/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.modules += new /obj/item/weapon/extinguisher(src) @@ -180,7 +181,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/device/healthanalyzer(src) src.emag = new /obj/item/weapon/melee/energy/sword(src) - ..() + /obj/item/weapon/robot_module/medical name = "medical robot module" @@ -194,7 +195,7 @@ var/global/list/robot_modules = list( "Heavy" = "heavyMed", "Needles" = "medicalrobot", "Standard" = "surgeon", - "Advanced Droid - Medical" = "droid-surgery", + "Advanced Droid - Medical" = "droid-medical", "Advanced Droid - Chemistry" = "droid-chemistry", "Drone - Medical" = "drone-surgery", "Drone - Chemistry" = "drone-chemistry", @@ -241,7 +242,6 @@ var/global/list/robot_modules = list( src.modules += N src.modules += B - ..() /obj/item/weapon/robot_module/medical/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules @@ -307,7 +307,6 @@ var/global/list/robot_modules = list( src.modules += B src.modules += S - ..() /obj/item/weapon/robot_module/medical/rescue/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules @@ -388,6 +387,7 @@ var/global/list/robot_modules = list( src.modules += RG /obj/item/weapon/robot_module/engineering/general/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/extinguisher(src) @@ -450,8 +450,6 @@ var/global/list/robot_modules = list( PL.synths = list(plasteel) src.modules += PL - ..() - /obj/item/weapon/robot_module/security name = "security robot module" channels = list("Security" = 1) @@ -477,6 +475,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack) /obj/item/weapon/robot_module/security/general/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) @@ -485,7 +484,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/device/holowarrant(src) src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) - ..() /obj/item/weapon/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() @@ -513,6 +511,7 @@ var/global/list/robot_modules = list( ) /obj/item/weapon/robot_module/janitor/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/soap/nanotrasen(src) src.modules += new /obj/item/weapon/storage/bag/trash(src) @@ -521,7 +520,6 @@ var/global/list/robot_modules = list( src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("lube", 250) src.emag.name = "Lube spray" - ..() /obj/item/weapon/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() @@ -563,6 +561,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/clerical/butler/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/gripper/service(src) src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) @@ -593,19 +592,18 @@ var/global/list/robot_modules = list( R.my_atom = src.emag R.add_reagent("beer2", 50) src.emag.name = "Mickey Finn's Special Brew" - ..() /obj/item/weapon/robot_module/clerical/general name = "clerical robot module" /obj/item/weapon/robot_module/clerical/general/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/pen/robopen(src) src.modules += new /obj/item/weapon/form_printer(src) src.modules += new /obj/item/weapon/gripper/paperwork(src) src.modules += new /obj/item/weapon/hand_labeler(src) src.emag = new /obj/item/weapon/stamp/denied(src) - ..() /obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) ..() @@ -632,6 +630,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack) /obj/item/weapon/robot_module/miner/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/wrench(src) @@ -643,7 +642,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/mining_scanner(src) src.modules += new /obj/item/weapon/crowbar(src) src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - ..() /obj/item/weapon/robot_module/research name = "research module" @@ -657,6 +655,7 @@ var/global/list/robot_modules = list( ) /obj/item/weapon/robot_module/research/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) src.modules += new /obj/item/weapon/gripper/research(src) @@ -687,8 +686,6 @@ var/global/list/robot_modules = list( N.synths = list(nanite) src.modules += N - ..() - /obj/item/weapon/robot_module/syndicate name = "syndicate robot module" languages = list( @@ -733,6 +730,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack) /obj/item/weapon/robot_module/combat/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) @@ -741,7 +739,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/borg/combat/mobility(src) src.modules += new /obj/item/weapon/crowbar(src) src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src) - ..() /obj/item/weapon/robot_module/drone name = "drone module" @@ -749,6 +746,7 @@ var/global/list/robot_modules = list( networks = list(NETWORK_ENGINEERING) /obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) + ..() src.modules += new /obj/item/weapon/weldingtool(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) @@ -823,16 +821,14 @@ var/global/list/robot_modules = list( P.synths = list(plastic) src.modules += P - ..() - /obj/item/weapon/robot_module/drone/construction name = "construction drone module" channels = list("Engineering" = 1) languages = list() /obj/item/weapon/robot_module/drone/construction/New() - src.modules += new /obj/item/weapon/rcd/borg(src) ..() + src.modules += new /obj/item/weapon/rcd/borg(src) /obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/lightreplacer/LR = locate() in src.modules diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 4f8b7304b6f..54007df2d6d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -184,9 +184,7 @@ P.icon_state = "pill"+pillsprite reagents.trans_to_obj(P,amount_per_pill) if(src.loaded_pill_bottle) - if(loaded_pill_bottle.contents.len < loaded_pill_bottle.max_storage_space) - P.loc = loaded_pill_bottle - src.updateUsrDialog() + loaded_pill_bottle.insert_into_storage(P) else if (href_list["createbottle"]) if(!condi) @@ -243,7 +241,7 @@ if(!beaker) dat = "Please insert beaker.
" if(src.loaded_pill_bottle) - dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]

" + dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\]

" else dat += "No pill bottle inserted.

" dat += "Close" @@ -251,7 +249,7 @@ var/datum/reagents/R = beaker:reagents dat += "Eject beaker and Clear Buffer
" if(src.loaded_pill_bottle) - dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]

" + dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\]

" else dat += "No pill bottle inserted.

" if(!R.total_volume) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 8b2919c3d4f..f5208bc45cd 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -766,7 +766,7 @@ datum/design/item/experimental_welder name = "Experimental Welding Tool" desc = "A scientifically-enhanced welding tool that uses fuel-producing microbes to gradually replenish its fuel supply" id = "experimental_welder" - req_tech = list(ENGINEERING = 4, TECH_MATERIAL = 4) + req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4) materials = list(DEFAULT_WALL_MATERIAL = 500) build_path =/obj/item/weapon/weldingtool/experimental sort_string = "VABAJ" diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 25addbd40a4..1ba5179fd88 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -6,7 +6,7 @@ /datum/surgery_step/glue_bone allowed_tools = list( /obj/item/weapon/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/tape_roll = 60 ) can_infect = 1 blood_level = 1 @@ -18,7 +18,7 @@ if (!hasorgans(target)) return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0 + return affected && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.open < 3 && affected.stage == 0 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -115,7 +115,7 @@ /datum/surgery_step/finish_bone allowed_tools = list( /obj/item/weapon/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/tape_roll = 60 ) can_infect = 1 blood_level = 1 @@ -127,7 +127,7 @@ if (!hasorgans(target)) return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open >= 2 && !(affected.status & ORGAN_ROBOT) && affected.stage == 2 + return affected && affected.open >= 2 && affected.open < 3 && !(affected.status & ORGAN_ROBOT) && affected.stage == 2 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 762c2b71c46..fbd1e8b8d89 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -17,7 +17,9 @@ /datum/surgery_step/open_encased/saw allowed_tools = list( - /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/circular_saw = 100, + /obj/item/weapon/melee/energy = 100, + /obj/item/weapon/melee/chainsword = 70, /obj/item/weapon/material/hatchet = 75 ) @@ -172,7 +174,7 @@ affected.createwound(BRUISE, 20) affected.fracture() - + if(affected.internal_organs && affected.internal_organs.len) if(prob(40)) var/obj/item/organ/O = pick(affected.internal_organs) //TODO weight by organ size @@ -182,7 +184,7 @@ /datum/surgery_step/open_encased/mend allowed_tools = list( /obj/item/weapon/bonegel = 100, \ - /obj/item/weapon/screwdriver = 75 + /obj/item/weapon/tape_roll = 60 ) min_duration = 20 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 867e222c3bd..34d34a380ca 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -205,11 +205,11 @@ max_duration = 90 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) return var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return + if(!affected) + return var/is_organ_damaged = 0 for(var/obj/item/organ/I in affected.internal_organs) if(I.damage > 0 && I.robotic >= 2) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index e582d1222f7..30d9e86f8a1 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -110,6 +110,7 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) if (user.a_intent == I_HELP) user << "You can't see any useful way to use [tool] on [M]." + return 1 //Prevents attacking your patient on help intent return 0 proc/sort_surgeries() diff --git a/html/changelogs/Nanako-Techfixes.yml b/html/changelogs/Nanako-Techfixes.yml new file mode 100644 index 00000000000..42faab0d30b --- /dev/null +++ b/html/changelogs/Nanako-Techfixes.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Nanako + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed being unable to repair mechanical organs with nanopaste or screwdriver, these both work now." + - tweak: "Screwdriver can no longer be used as a ghetto alternative to bone gel. Use duct tape instead." + - tweak: "Energy swords and chainswords can be used to cut open ribs in surgery." + - bugfix: "Fixed attacking your patient with tools on help intent when there wasnt a valid surgery step." + - bugfix: "Fixed pillbottle interactions with chemmaster machines." + - bugfix: "Fixed being asked to pick a cyborg sprite multiple times. Also fixed a missing sprite."