diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 6081882582f..220e27e0be8 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -18,8 +18,8 @@ /obj/machinery/computer/New() overlay_layer = layer - ..() - + ..() + /obj/machinery/computer/initialize() power_change() update_icon() @@ -79,7 +79,7 @@ overlays += image(icon,"[icon_state]_broken",overlay_layer) else overlays += image(icon,icon_screen,overlay_layer) - + if(icon_keyboard) overlays += image(icon, icon_keyboard ,overlay_layer) @@ -134,6 +134,11 @@ return /obj/machinery/computer/attack_alien(mob/living/user) + if(isalien(user) && user.a_intent == I_HELP) + var/mob/living/carbon/alien/humanoid/xeno = user + if(xeno.has_fine_manipulation) + return attack_hand(user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(circuit) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 0d046868bb8..5d90d407c69 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -341,10 +341,11 @@ Class Procs: return 1 if(user.lying || user.stat) return 1 - if ( ! (istype(usr, /mob/living/carbon/human) || \ - istype(usr, /mob/living/silicon))) - usr << "\red You don't have the dexterity to do this!" + + if(!user.IsAdvancedToolUser()) + user << "\red You don't have the dexterity to do this!" return 1 + /* //distance checks are made by atom/proc/DblClick if ((get_dist(src, user) > 1 || !istype(src.loc, /turf)) && !istype(user, /mob/living/silicon)) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 4e1a5843f60..ef8cba90463 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -183,7 +183,7 @@ obj/item/device/flashlight/lamp/bananalamp update_brightness(U) else update_brightness(null) - + /obj/item/device/flashlight/flare/update_brightness(var/mob/user = null) ..() if(on) @@ -207,7 +207,7 @@ obj/item/device/flashlight/lamp/bananalamp src.force = on_damage src.damtype = "fire" processing_objects += src - + /obj/item/device/flashlight/flare/torch name = "torch" desc = "A torch fashioned from some leaves and a log." diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 976fed562c0..89d235999c6 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -384,7 +384,7 @@ REAGENT SCANNER if (crit_fail) user << "\red This device has critically failed and is no longer functional!" return - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "\red You don't have the dexterity to do this!" return if(reagents.total_volume) @@ -441,7 +441,7 @@ REAGENT SCANNER /obj/item/device/reagent_scanner/afterattack(obj/O, mob/user as mob) if (user.stat) return - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "\red You don't have the dexterity to do this!" return if(!istype(O)) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 4f83c7bd2ac..62214dd86c2 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -15,7 +15,7 @@ user << "\The [src] cannot be applied to [M]!" return 1 - if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))) + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return 1 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 29aeace7ea7..ffae91a70ce 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -169,8 +169,8 @@ afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) if (flag) return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - usr << "\red You don't have the dexterity to do this!" + if (!user.IsAdvancedToolUser()) + user << "\red You don't have the dexterity to do this!" return src.add_fingerprint(user) if (src.bullets < 1) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 51c2a3d2b3a..82379c9defd 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -287,7 +287,7 @@ /turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob, params) user.changeNext_move(CLICK_CD_MELEE) - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 04ef0fdf73f..09656143c3c 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -36,7 +36,7 @@ /turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob, params) user.changeNext_move(CLICK_CD_MELEE) - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1b1964a000f..0194aeea7f3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1758,11 +1758,9 @@ return (health <= config.health_threshold_crit && stat == UNCONSCIOUS) -/mob/living/carbon/human/IsAdvancedToolUser(var/silent) +/mob/living/carbon/human/IsAdvancedToolUser() if(species.has_fine_manipulation) return 1 - if(!silent) - src << "You don't have the dexterity to use that!" return 0 /mob/living/carbon/human/get_permeability_protection() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index ad3146b2527..c78721f8357 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -18,23 +18,23 @@ var/speak_exclamation = "declares" var/speak_query = "queries" var/pose //Yes, now AIs can pose too. - + var/sensor_mode = 0 //Determines the current HUD. - + var/next_alarm_notice var/list/datum/alarm/queued_alarms = new() - + #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode var/local_transmit //If set, can only speak to others of the same type within a short range. var/obj/item/device/radio/common_radio - + /mob/living/silicon/New() silicon_mob_list |= src ..() add_language("Galactic Common") init_subsystems() - + /mob/living/silicon/Destroy() silicon_mob_list -= src for(var/datum/alarm_handler/AH in alarm_handlers) @@ -43,8 +43,8 @@ /mob/living/silicon/proc/SetName(pickedName as text) real_name = pickedName - name = real_name - + name = real_name + /mob/living/silicon/proc/show_laws() return @@ -267,9 +267,6 @@ sensor_mode = 0 src << "Sensor augmentations disabled." -/mob/living/silicon/IsAdvancedToolUser() - return 1 - /mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) if(!next_alarm_notice) next_alarm_notice = world.time + SecondsToTicks(10) @@ -310,7 +307,7 @@ reported = 1 src << "--- [AH.category] Cleared ---" src << "\The [A.alarm_name()]." - + if(alarm_raised) src << "\[Show Alerts\]" @@ -326,4 +323,3 @@ for(var/obj/machinery/camera/C in A.cameras()) cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" src << "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])" - \ No newline at end of file diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index deaae348d30..9b5b2e5da91 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -102,3 +102,10 @@ . = min(., shared_living_nano_distance(src_object)) if(. == STATUS_UPDATE && (TK in mutations)) // If we have telekinesis and remain close enough, allow interaction. return STATUS_INTERACTIVE + +/mob/living/carbon/alien/default_can_use_topic(var/src_object) + . = shared_nano_interaction(src_object) + if(. != STATUS_CLOSE) + . = min(., shared_living_nano_distance(src_object)) + if(!IsAdvancedToolUser()) + . = STATUS_UPDATE \ No newline at end of file