diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 727271749e6..36681edecdc 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -452,137 +452,137 @@ won't update every console in existence) but it's more of a hassle to do. Also,
sync = !sync
if("build") //Causes the Protolathe to build something.
- if(linked_lathe)
- if(linked_lathe.busy)
- to_chat(usr, "[linked_lathe] is busy at the moment.")
- return TRUE
- var/coeff = linked_lathe.efficiency_coeff
- var/g2g = 1
- var/datum/design/being_built = files.known_designs[params["id"]]
- if(being_built)
- var/power = 2000
- var/amount = text2num(params["amount"])
- if(being_built.make_reagents.len)
- return FALSE
- amount = max(1, min(10, amount))
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] * amount / 5)
- power = max(2000, power)
- var/key = usr.key //so we don't lose the info during the spawn delay
- if(!(being_built.build_type & PROTOLATHE))
- g2g = 0
- message_admins("Protolathe exploit attempted by [key_name(usr, TRUE)]!")
+ if(!linked_lathe)
+ return
+ if(linked_lathe.busy)
+ to_chat(usr, "[linked_lathe] is busy at the moment.")
+ return
+ var/coeff = linked_lathe.efficiency_coeff
+ var/datum/design/being_built = files.known_designs[params["id"]]
+ if(!being_built)
+ return
+ var/power = BUILD_POWER
+ var/amount = text2num(params["amount"])
+ if(being_built.make_reagents.len)
+ return FALSE
+ amount = max(1, min(10, amount))
+ for(var/M in being_built.materials)
+ power += round(being_built.materials[M] * amount / 5)
+ power = max(BUILD_POWER, power)
+ var/key = usr.key //so we don't lose the info during the spawn delay
+ if(!(being_built.build_type & PROTOLATHE))
+ message_admins("Protolathe exploit attempted by [key_name(usr, TRUE)]!")
+ return
- if(g2g) //If input is incorrect, nothing happens
- var/new_coeff = coeff * being_built.lathe_time_factor
- var/time_to_construct = PROTOLATHE_CONSTRUCT_DELAY * new_coeff * amount ** 0.8
- var/enough_materials = 1
+ var/new_coeff = coeff * being_built.lathe_time_factor
+ var/time_to_construct = PROTOLATHE_CONSTRUCT_DELAY * new_coeff * amount ** 0.8
+ var/enough_materials = TRUE
- add_wait_message("Constructing Prototype. Please Wait...", time_to_construct)
- linked_lathe.busy = TRUE
- flick("protolathe_n", linked_lathe)
- use_power(power)
+ add_wait_message("Constructing Prototype. Please Wait...", time_to_construct)
+ linked_lathe.busy = TRUE
+ flick("protolathe_n", linked_lathe)
+ use_power(power)
- var/list/efficient_mats = list()
- for(var/MAT in being_built.materials)
- efficient_mats[MAT] = being_built.materials[MAT] * coeff
+ var/list/efficient_mats = list()
+ for(var/MAT in being_built.materials)
+ efficient_mats[MAT] = being_built.materials[MAT] * coeff
- if(!linked_lathe.materials.has_materials(efficient_mats, amount))
- atom_say("Not enough materials to complete prototype.")
- enough_materials = FALSE
- g2g = FALSE
+ if(!linked_lathe.materials.has_materials(efficient_mats, amount))
+ atom_say("Not enough materials to complete prototype.")
+ enough_materials = FALSE
+ else
+ for(var/R in being_built.reagents_list)
+ if(!linked_lathe.reagents.has_reagent(R, being_built.reagents_list[R]) * coeff)
+ atom_say("Not enough reagents to complete prototype.")
+ enough_materials = FALSE
+
+ if(enough_materials)
+ linked_lathe.materials.use_amount(efficient_mats, amount)
+ for(var/R in being_built.reagents_list)
+ linked_lathe.reagents.remove_reagent(R, being_built.reagents_list[R]*coeff)
+
+ var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
+ var/O = being_built.locked
+
+ spawn(time_to_construct)
+ if(enough_materials) //And if we only fail the material requirements, we still spend time and power
+ for(var/i = 0, iCircuit Imprinter is busy at the moment.")
- return
- var/datum/design/being_built = null
- being_built = files.known_designs[params["id"]]
- if(being_built)
- var/power = 2000
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] / 5)
- power = max(2000, power)
- if(!(being_built.build_type & IMPRINTER))
- g2g = 0
- message_admins("Circuit imprinter exploit attempted by [key_name(usr, TRUE)]!")
+ var/enough_materials = TRUE
+ if(!linked_imprinter)
+ return
- if(g2g) //Again, if input is wrong, do nothing
- add_wait_message("Imprinting Circuit. Please Wait...", IMPRINTER_DELAY)
- linked_imprinter.busy = 1
- flick("circuit_imprinter_ani",linked_imprinter)
- use_power(power)
+ if(linked_imprinter.busy)
+ to_chat(usr, "Circuit Imprinter is busy at the moment.")
+ return
- var/list/efficient_mats = list()
- for(var/MAT in being_built.materials)
- efficient_mats[MAT] = being_built.materials[MAT]/coeff
+ var/datum/design/being_built = null
+ being_built = files.known_designs[params["id"]]
+ if(!being_built)
+ return
- if(!linked_imprinter.materials.has_materials(efficient_mats))
- visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"")
- enough_materials = 0
- g2g = 0
- else
- for(var/R in being_built.reagents_list)
- if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R]/coeff))
- visible_message("The [name] beeps, \"Not enough reagents to complete prototype.\"")
- enough_materials = 0
- g2g = 0
+ if(!(being_built.build_type & IMPRINTER))
+ message_admins("Circuit imprinter exploit attempted by [key_name(usr, TRUE)]!")
+ return
- if(enough_materials)
- linked_imprinter.materials.use_amount(efficient_mats)
- for(var/R in being_built.reagents_list)
- linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff)
+ var/power = BUILD_POWER
+ for(var/M in being_built.materials)
+ power += round(being_built.materials[M] / 5)
+ power = max(BUILD_POWER, power)
- var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
- spawn(IMPRINTER_DELAY)
- if(g2g)
- var/obj/item/new_item = new P(src)
- new_item.loc = linked_imprinter.loc
- linked_imprinter.busy = 0
- clear_wait_message()
- SStgui.update_uis(src)
+ add_wait_message("Imprinting Circuit. Please Wait...", IMPRINTER_DELAY)
+ linked_imprinter.busy = TRUE
+ flick("circuit_imprinter_ani", linked_imprinter)
+ use_power(power)
+
+ var/list/efficient_mats = list()
+ for(var/MAT in being_built.materials)
+ efficient_mats[MAT] = being_built.materials[MAT] / coeff
+
+ if(!linked_imprinter.materials.has_materials(efficient_mats))
+ visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"")
+ enough_materials = FALSE
+ else
+ for(var/R in being_built.reagents_list)
+ if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R] / coeff))
+ visible_message("The [name] beeps, \"Not enough reagents to complete prototype.\"")
+ enough_materials = FALSE
+
+ if(enough_materials)
+ linked_imprinter.materials.use_amount(efficient_mats)
+ for(var/R in being_built.reagents_list)
+ linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff)
+
+ var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
+ spawn(IMPRINTER_DELAY)
+ if(enough_materials)
+ var/obj/item/new_item = new P(src)
+ new_item.loc = linked_imprinter.loc
+ linked_imprinter.busy = FALSE
+ clear_wait_message()
+ SStgui.update_uis(src)
if("disposeI") //Causes the circuit imprinter to dispose of a single reagent (all of it)
if(linked_imprinter)