Files
Bubberstation/code/modules/research/circuitprinter.dm
Razharas 4f8389ec0e Constructable machines will depend on R&D parts
DNA scanner:
Laser quality lessens the irradiation
Manipulator quality drastically improves the precision(9 times with best
part)
Scanner quality allows to scan suiciders/ling husks, best part enables
cloner's autoprocess button, making it scan people in the scanner
automatically
Clone pod:
Manipulator quality improves the speed of cloning
Scanning module quality affects with how much health people will be
ejected, will they get negative mutation/no mutations/clean of all
mutations/random good mutation, at best quality will enable clone
console's autoprocess button and will try to clone all the dead people
in records automatically, together with best DNA scanner parts cloning
console will be able to work in full automatic regime autoscanning
people and autocloning them
Borg recharger:
Capacitors' quality and powercell max charge affect the speed at which
borgs recharge
Manipulator quality allows borg to be slowly repaired while inside the
recharges, best manipulator allows even fire damage to be slowly
repaired
Portable power generators:
Capacitors' quality produce more power
Better lasers consume less fuel and reduce heat production
PACMAN with best parts can keep whole station powered with about sheet
of plamsa per minute(approximately, wasnt potent enough to test)
Protolathe:
Manipulators quality affects the cost of things(they will also have less
m_amt and g_amt to prevent production of infinity metal), best
manipulators reduces the cost 5 times (!)
Imprinter:
Manipulator quality affects the cost, best manipulator reduce cost(acid
insluded) 4 times, i.e. 20 boards per 100 units of acid
Destructive analyzer:
Better parts allow items with less reliability in
Redone how reliability is handled, you now see item reliability in the
deconstruction menu and deconstructing items that has same or one point
less research type level will rise the reliability of all known designs
that has one or more research type requarements as the deconstructed
item
Designs of the same type raise in reliability more
Removed reliability_base and reliability_mod completely because they
served no purpose
Critically broken things rise reliability of the design drastically
Whole reliability system is not used a lot but now at least on the R&D
part it finally matters
Didnt touch telecomms machinery, R&D code is messy but tcomms is just
another level, im not high enough to touch it yet
Most of things except for pacman are tested ingame, no bugs/runtimes
detected
2013-12-23 21:39:27 +04:00

131 lines
4.7 KiB
Plaintext

/*///////////////Circuit Imprinter (By Darem)////////////////////////
Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
using metal and glass, it uses glass and reagents (usually sulfuric acis).
*/
/obj/machinery/r_n_d/circuit_imprinter
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
flags = OPENCONTAINER
var/g_amount = 0
var/gold_amount = 0
var/diamond_amount = 0
var/max_material_amount = 75000.0
var/efficiency_coeff
New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
RefreshParts()
RefreshParts()
var/T = 0
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
T += G.reagents.maximum_volume
var/datum/reagents/R = new/datum/reagents(T) //Holder for the reagents used as materials.
reagents = R
R.my_atom = src
T = 0
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
T += M.rating
max_material_amount = T * 75000.0
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
efficiency_coeff = T-1
blob_act()
if (prob(50))
del(src)
meteorhit()
del(src)
return
proc/TotalMaterials()
return g_amount + gold_amount + diamond_amount
attackby(var/obj/item/O as obj, var/mob/user as mob)
if (shocked)
shock(user,50)
if (istype(O, /obj/item/weapon/screwdriver))
if(linked_console)
linked_console.linked_imprinter = null
linked_console = null
default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter")
return
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
reagents.trans_to(I, reagents.total_volume)
if(I.reliability != 100 && crit_fail)
I.crit_fail = 1
I.loc = src.loc
if(g_amount >= 3750)
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
G.amount = round(g_amount / 3750)
if(gold_amount >= 2000)
var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc)
G.amount = round(gold_amount / 2000)
if(diamond_amount >= 2000)
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
G.amount = round(diamond_amount / 2000)
del(src)
return
else
user << "\red You can't load the [src.name] while it's opened."
return
if (disabled)
return
if (!linked_console)
user << "\The [name] must be linked to an R&D console first!"
return
if (O.is_open_container())
return
if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond))
user << "\red You cannot insert this item into the [name]!"
return
if (stat)
return
if (busy)
user << "\red The [name] is busy. Please wait for completion of previous operation."
return
var/obj/item/stack/sheet/stack = O
if ((TotalMaterials() + stack.perunit) > max_material_amount)
user << "\red The [name] is full. Please remove glass from the protolathe in order to insert more."
return
var/amount = round(input("How many sheets do you want to add?") as num)
if(amount < 0)
amount = 0
if(amount == 0)
return
if(amount > stack.amount)
amount = min(stack.amount, round((max_material_amount-TotalMaterials())/stack.perunit))
busy = 1
use_power(max(1000, (3750*amount/10)))
spawn(16)
user << "\blue You add [amount] sheets to the [src.name]."
if(istype(stack, /obj/item/stack/sheet/glass))
g_amount += amount * 3750
else if(istype(stack, /obj/item/stack/sheet/mineral/gold))
gold_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/mineral/diamond))
diamond_amount += amount * 2000
stack.use(amount)
busy = 0
src.updateUsrDialog()