mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
* Moves string overlays to use images. * Fixed overlays being missed in replace due to unexpected string characters.
103 lines
3.3 KiB
Plaintext
103 lines
3.3 KiB
Plaintext
//Makes blueprint items from device analyzers and PDAs with the device analyser setting
|
|
//Can be loaded with both paper and nanopaper
|
|
|
|
/obj/machinery/r_n_d/blueprinter
|
|
name = "Blueprint Printer"
|
|
icon = 'icons/obj/machines/mechanic.dmi'
|
|
icon_state = "blueprinter"
|
|
desc = "An old-fashioned roller printer, capable of producing highly-detailed design blueprints using the special properties of nano-paper, as well as the regular properties of normal paper."
|
|
var/paper_loaded = 0
|
|
var/nano_loaded = 0
|
|
var/max_paper = 10
|
|
var/max_nano = 10
|
|
|
|
research_flags = HASOUTPUT
|
|
|
|
/obj/machinery/r_n_d/blueprinter/New()
|
|
..()
|
|
|
|
component_parts = newlist(
|
|
/obj/item/weapon/circuitboard/blueprinter,
|
|
/obj/item/weapon/stock_parts/matter_bin,
|
|
/obj/item/weapon/stock_parts/matter_bin,
|
|
/obj/item/weapon/stock_parts/manipulator,
|
|
/obj/item/weapon/stock_parts/scanning_module
|
|
)
|
|
|
|
RefreshParts()
|
|
|
|
/obj/machinery/r_n_d/blueprinter/RefreshParts()
|
|
var/list/bins = list()
|
|
if(!component_parts)
|
|
return
|
|
for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts)
|
|
if(istype(MB))
|
|
bins += MB.rating
|
|
max_paper = 10 * bins[1]
|
|
max_nano = 10 * bins[2]
|
|
|
|
/obj/machinery/r_n_d/blueprinter/attackby(var/atom/A, mob/user)
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(A, /obj/item/weapon/paper))
|
|
var/obj/item/weapon/paper/P = A
|
|
if(istype(P, /obj/item/weapon/paper/nano))
|
|
if(max_nano > nano_loaded)
|
|
nano_loaded++
|
|
qdel(P)
|
|
else
|
|
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
|
|
else
|
|
if(max_paper > paper_loaded)
|
|
paper_loaded++
|
|
qdel(P)
|
|
else
|
|
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
|
|
return
|
|
|
|
if(istype(A, /obj/item/weapon/paper_pack))
|
|
var/obj/item/weapon/paper_pack/PP = A
|
|
var/usingamount = 0
|
|
if(!PP.amount)
|
|
to_chat(user, "<span class='notice'>You have to have paper to load the [src]!</span>")
|
|
else
|
|
var/load_overlay = "[base_state][PP.pptype ? "nano" : "regular"]"
|
|
if(PP.pptype == "nano")
|
|
usingamount = min(max_nano - nano_loaded, PP.amount)
|
|
nano_loaded += usingamount
|
|
else
|
|
usingamount = min(max_paper - paper_loaded, PP.amount)
|
|
paper_loaded += usingamount
|
|
overlays += load_overlay
|
|
PP.usepaper(usingamount)
|
|
to_chat(user, "<span class='notice'>You successfully load [usingamount] sheets into the [src].</span>")
|
|
spawn(30)
|
|
overlays -= load_overlay
|
|
return
|
|
|
|
//Creates a blueprint of a given design datum
|
|
//use_nano controls if the design is printed using nanopaper or regular paper
|
|
//nanopaper designs are better, see blueprint.dm for the code details
|
|
/obj/machinery/r_n_d/blueprinter/proc/PrintDesign(var/datum/design/design, var/use_nano = 0)
|
|
if(!istype(design)) //sanity checks yay
|
|
return
|
|
if((use_nano && nano_loaded == 0) || (!use_nano && paper_loaded == 0)) //material checks
|
|
visible_message("[bicon(src)]<span class='notice'> \The [src] beeps: 'Out of [use_nano ? "nanopaper" : "paper"]!'</span>")
|
|
return
|
|
|
|
busy = 1
|
|
overlays += image(icon = icon, icon_state = "[base_state]_ani")
|
|
sleep(30)
|
|
busy = 0
|
|
if(use_nano)
|
|
new/obj/item/research_blueprint/nano(get_output(), design)
|
|
nano_loaded -= 1
|
|
else
|
|
new/obj/item/research_blueprint(get_output(), design)
|
|
paper_loaded -= 1
|
|
src.visible_message("[bicon(src)]<span class='notice'>\The [src] beeps: 'Successfully printed the [design.name] design'.</span>")
|
|
spawn(20)
|
|
overlays -= image(icon = icon, icon_state = "[base_state]_ani")
|
|
return 1
|