diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm index f25791bd7cd..7e0655c80ce 100644 --- a/code/modules/integrated_electronics/_defines.dm +++ b/code/modules/integrated_electronics/_defines.dm @@ -277,7 +277,7 @@ ..() /datum/integrated_io/proc/display_data() - if(!data) + if(isnull(data)) return "(null)" // Empty data means nothing to show. if(istext(data)) return "(\"[data]\")" // Wraps the 'string' in escaped quotes, so that people know it's a 'string'. diff --git a/code/modules/integrated_electronics/assemblies.dm b/code/modules/integrated_electronics/assemblies.dm index 983d84570a3..e727f4c3d81 100644 --- a/code/modules/integrated_electronics/assemblies.dm +++ b/code/modules/integrated_electronics/assemblies.dm @@ -3,19 +3,21 @@ desc = "It's a case, for building electronics with." w_class = 2 icon = 'icons/obj/electronic_assemblies.dmi' - icon_state = "setup" + icon_state = "setup_small" var/max_components = 10 var/max_complexity = 30 var/opened = 0 /obj/item/device/electronic_assembly/medium name = "electronic mechanism" + icon_state = "setup_medium" w_class = 3 max_components = 20 max_complexity = 50 /obj/item/device/electronic_assembly/large name = "electronic machine" + icon_state = "setup" w_class = 4 max_components = 30 max_complexity = 60 @@ -35,6 +37,12 @@ IC.work() */ +/obj/item/device/electronic_assembly/update_icon() + if(opened) + icon_state = initial(icon_state) + "-open" + else + icon_state = initial(icon_state) + /obj/item/device/electronic_assembly/examine(mob/user) ..() if(user.Adjacent(src)) @@ -87,6 +95,7 @@ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) opened = !opened user << "You [opened ? "opened" : "closed"] \the [src]." + update_icon() if(istype(I, /obj/item/device/integrated_electronics/wirer)) if(opened) var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents diff --git a/code/modules/integrated_electronics/input_output.dm b/code/modules/integrated_electronics/input_output.dm index f36c6a36e5a..4bb4c013097 100644 --- a/code/modules/integrated_electronics/input_output.dm +++ b/code/modules/integrated_electronics/input_output.dm @@ -41,7 +41,7 @@ ) /obj/item/integrated_circuit/input/numberpad/ask_for_input(mob/user) - var/new_input = input(user, "Enter a number, please.","Number pad") as num + var/new_input = input(user, "Enter a number, please.","Number pad") as null|num if(isnum(new_input)) var/datum/integrated_io/O = outputs[1] O.data = new_input @@ -67,7 +67,7 @@ ) /obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user) - var/new_input = input(user, "Enter some words, please.","Number pad") as text + var/new_input = input(user, "Enter some words, please.","Number pad") as null|text if(new_input && istext(new_input)) var/datum/integrated_io/O = outputs[1] O.data = new_input @@ -101,7 +101,7 @@ return var/mob/living/carbon/human/H = I.data if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. - var/total_health = round(H.health/H.maxHealth)*100 + var/total_health = round(H.health/H.maxHealth, 0.1)*100 var/missing_health = H.maxHealth - H.health var/datum/integrated_io/total = outputs[1] @@ -144,7 +144,7 @@ return var/mob/living/carbon/human/H = I.data if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. - var/total_health = round(H.health/H.maxHealth)*100 + var/total_health = round(H.health/H.maxHealth, 0.1)*100 var/missing_health = H.maxHealth - H.health var/datum/integrated_io/total = outputs[1] diff --git a/code/modules/integrated_electronics/memory.dm b/code/modules/integrated_electronics/memory.dm index 3305cf0a939..ec06c7784b2 100644 --- a/code/modules/integrated_electronics/memory.dm +++ b/code/modules/integrated_electronics/memory.dm @@ -58,26 +58,41 @@ number_of_outputs = 1 number_of_activators = 1 activator_names = list( - "trigger output" + "push data" ) + var/accepting_refs = 0 /obj/item/integrated_circuit/memory/constant/work() - if(..()) - var/datum/integrated_io/O = outputs[1] - O.push_data() - -/obj/item/integrated_circuit/memory/constant/attack_hand(mob/user) var/datum/integrated_io/O = outputs[1] - var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number") + O.push_data() + +/obj/item/integrated_circuit/memory/constant/attack_self(mob/user) + var/datum/integrated_io/O = outputs[1] + var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref") var/new_data = null switch(type_to_use) if("string") + accepting_refs = 0 new_data = input("Now type in a string.","[src] string writing") as null|text if(istext(new_data)) O.data = new_data - user << "You set \the [src]'s memory to '[new_data]'." + user << "You set \the [src]'s memory to [O.display_data()]." if("number") + accepting_refs = 0 new_data = input("Now type in a number.","[src] number writing") as null|num if(isnum(new_data)) O.data = new_data - user << "You set \the [src]'s memory to '[new_data]'." \ No newline at end of file + user << "You set \the [src]'s memory to [O.display_data()]." + if("ref") + accepting_refs = 1 + user << "You turn \the [src]'s ref scanner on. Slide it across \ + an object for a ref of that object to save it in memory." + +/obj/item/integrated_circuit/memory/constant/afterattack(atom/target, mob/living/user, proximity) + if(accepting_refs && proximity) + var/datum/integrated_io/O = outputs[1] + O.data = target + visible_message("[user] slides \a [src]'s over \the [target].") + user << "You set \the [src]'s memory to a reference to [O.display_data()]. The ref scanner is \ + now off." + accepting_refs = 0 \ No newline at end of file diff --git a/icons/obj/electronic_assemblies.dmi b/icons/obj/electronic_assemblies.dmi index e4fd3c230bb..18ba8650eed 100644 Binary files a/icons/obj/electronic_assemblies.dmi and b/icons/obj/electronic_assemblies.dmi differ