Merge pull request #5508 from Citadel-Station-13/upstream-merge-35131

[MIRROR] Adds sounds and some small QoL improvements to the circuit imprinter, and allows them to recycle empty assemblies
This commit is contained in:
deathride58
2018-02-16 01:31:24 +00:00
committed by GitHub
4 changed files with 59 additions and 11 deletions

View File

@@ -250,19 +250,23 @@
assembly_components |= component
/obj/item/device/electronic_assembly/proc/try_remove_component(obj/item/integrated_circuit/IC, mob/user)
/obj/item/device/electronic_assembly/proc/try_remove_component(obj/item/integrated_circuit/IC, mob/user, silent)
if(!opened)
to_chat(user, "<span class='warning'>[src]'s hatch is closed, so you can't fiddle with the internal components.</span>")
if(!silent)
to_chat(user, "<span class='warning'>[src]'s hatch is closed, so you can't fiddle with the internal components.</span>")
return FALSE
if(!IC.removable)
to_chat(user, "<span class='warning'>[src] is permanently attached to the case.</span>")
if(!silent)
to_chat(user, "<span class='warning'>[src] is permanently attached to the case.</span>")
return FALSE
to_chat(user, "<span class='notice'>You pop \the [src] out of the case, and slide it out.</span>")
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
remove_component(IC)
if(!silent)
to_chat(user, "<span class='notice'>You pop \the [IC] out of the case, and slide it out.</span>")
playsound(src, 'sound/items/crowbar.ogg', 50, 1)
user.put_in_hands(IC)
return TRUE
// Actually removes the component, doesn't perform any checks.

View File

@@ -7,6 +7,7 @@
var/upgraded = FALSE // When hit with an upgrade disk, will turn true, allowing it to print the higher tier circuits.
var/can_clone = FALSE // Same for above, but will allow the printer to duplicate a specific assembly.
var/current_category = null
var/recycling = FALSE // If an assembly is being emptied into this printer
var/list/program // Currently loaded save, in form of list
/obj/item/device/integrated_circuit_printer/proc/check_interactivity(mob/user)
@@ -18,9 +19,9 @@
/obj/item/device/integrated_circuit_printer/Initialize()
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit))
AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/device/electronic_assembly))
/obj/item/device/integrated_circuit_printer/attackby(var/obj/item/O, var/mob/user)
/obj/item/device/integrated_circuit_printer/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/disk/integrated_circuit/upgrade/advanced))
if(upgraded)
to_chat(user, "<span class='warning'>\The [src] already has this upgrade. </span>")
@@ -41,9 +42,47 @@
interact(user)
return TRUE
if(istype(O, /obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/EA = O //microtransactions not included
if(EA.assembly_components.len)
if(recycling)
return
if(!EA.opened)
to_chat(user, "<span class='warning'>You can't reach [EA]'s components to remove them!</span>")
return
if(EA.battery)
to_chat(user, "<span class='warning'>Remove [EA]'s power cell first!</span>")
return
for(var/V in EA.assembly_components)
var/obj/item/integrated_circuit/IC = V
if(!IC.removable)
to_chat(user, "<span class='warning'>[EA] has irremovable components in the casing, preventing you from emptying it.</span>")
return
to_chat(user, "<span class='notice'>You begin recycling [EA]'s components...</span>")
playsound(src, 'sound/items/electronic_assembly_emptying.ogg', 50, TRUE)
if(!do_after(user, 30, target = src)) //short channel so you don't accidentally start emptying out a complex assembly
return
recycling = TRUE
var/datum/component/material_container/mats = GetComponent(/datum/component/material_container)
for(var/V in EA.assembly_components)
var/obj/item/integrated_circuit/IC = V
if(!mats.has_space(mats.get_item_material_amount(IC)))
to_chat(user, "<span class='notice'>[src] can't hold any more materials!</span>")
break
if(!do_after(user, 5, target = user))
recycling = FALSE
return
playsound(src, 'sound/items/crowbar.ogg', 50, TRUE)
if(EA.try_remove_component(IC, user, TRUE))
mats.user_insert(IC, user)
to_chat(user, "<span class='notice'>You recycle all the components[EA.assembly_components.len ? " you could " : " "]from [EA]!</span>")
playsound(src, 'sound/items/electronic_assembly_empty.ogg', 50, TRUE)
recycling = FALSE
return TRUE
return ..()
/obj/item/device/integrated_circuit_printer/attack_self(var/mob/user)
/obj/item/device/integrated_circuit_printer/attack_self(mob/user)
interact(user)
/obj/item/device/integrated_circuit_printer/interact(mob/user)
@@ -126,12 +165,16 @@
return TRUE
var/obj/item/built = new build_type(drop_location())
usr.put_in_hands(built)
if(istype(built, /obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/E = built
E.opened = TRUE
E.update_icon()
to_chat(usr, "<span class='notice'>[capitalize(built.name)] printed.</span>")
playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE)
if(href_list["print"])
if(!CONFIG_GET(flag/ic_printing))
to_chat(usr, "<span class='warning'>CentCom has disabled printing of custom circuitry due to recent allegations of copyright infringement.</span>")
@@ -175,8 +218,9 @@
else
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(materials.use_amount_type(program["metal_cost"], MAT_METAL))
SScircuit.load_electronic_assembly(get_turf(src), program)
to_chat(usr, "<span class='notice'>Assembly has been printed.</span>")
var/obj/item/assembly = SScircuit.load_electronic_assembly(get_turf(src), program)
to_chat(usr, "<span class='notice'>[assembly] has been printed from the provided template!</span>")
playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE)
else
to_chat(usr, "<span class='warning'>You need [program["metal_cost"]] metal to build that!</span>")

Binary file not shown.

Binary file not shown.