Merge branch 'master' into QM-as-Head

This commit is contained in:
Chayse Ramsay
2018-02-18 03:46:35 +00:00
committed by GitHub
355 changed files with 74624 additions and 281692 deletions
@@ -0,0 +1,48 @@
/datum/wires/autoylathe
holder_type = /obj/machinery/autoylathe
proper_name = "Autoylathe"
/datum/wires/autoylathe/New(atom/holder)
wires = list(
WIRE_HACK, WIRE_DISABLE,
WIRE_SHOCK, WIRE_ZAP
)
add_duds(6)
..()
/datum/wires/autoylathe/interactable(mob/user)
var/obj/machinery/autoylathe/A = holder
if(A.panel_open)
return TRUE
/datum/wires/autoylathe/get_status()
var/obj/machinery/autoylathe/A = holder
var/list/status = list()
status += "The red light is [A.disabled ? "on" : "off"]."
status += "The blue light is [A.hacked ? "on" : "off"]."
return status
/datum/wires/autoylathe/on_pulse(wire)
var/obj/machinery/autoylathe/A = holder
switch(wire)
if(WIRE_HACK)
A.adjust_hacked(!A.hacked)
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
if(WIRE_SHOCK)
A.shocked = !A.shocked
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
if(WIRE_DISABLE)
A.disabled = !A.disabled
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
/datum/wires/autoylathe/on_cut(wire, mend)
var/obj/machinery/autoylathe/A = holder
switch(wire)
if(WIRE_HACK)
A.adjust_hacked(!mend)
if(WIRE_HACK)
A.shocked = !mend
if(WIRE_DISABLE)
A.disabled = !mend
if(WIRE_ZAP)
A.shock(usr, 50)
@@ -0,0 +1,379 @@
#define AUTOYLATHE_MAIN_MENU 1
#define AUTOYLATHE_CATEGORY_MENU 2
#define AUTOYLATHE_SEARCH_MENU 3
/obj/machinery/autoylathe
name = "autoylathe"
desc = "It produces items using plastic, metal and glass."
icon_state = "autolathe"
density = TRUE
anchored = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
circuit = /obj/item/circuitboard/machine/autoylathe
var/hacked = FALSE
var/disabled = FALSE
var/shocked = FALSE
var/busy = FALSE
var/prod_coeff = 1
var/datum/design/being_built
var/datum/techweb/stored_research
var/list/datum/design/matching_designs
var/selected_category
var/screen = 1
var/list/categories = list(
"Toys",
"Figurines",
"Pistols",
"Rifles",
"Heavy",
"Melee",
"Armor",
"Adult",
"Misc",
"Imported"
)
/obj/machinery/autoylathe/Initialize()
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_PLASTIC), 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert))
wires = new /datum/wires/autoylathe(src)
stored_research = new /datum/techweb/specialized/autounlocking/autoylathe
matching_designs = list()
/obj/machinery/autoylathe/Destroy()
QDEL_NULL(wires)
return ..()
/obj/machinery/autoylathe/interact(mob/user)
if(!is_operational())
return
if(shocked && !(stat & NOPOWER))
shock(user,50)
var/dat
switch(screen)
if(AUTOYLATHE_MAIN_MENU)
dat = main_win(user)
if(AUTOYLATHE_CATEGORY_MENU)
dat = category_win(user,selected_category)
if(AUTOYLATHE_SEARCH_MENU)
dat = search_win(user)
var/datum/browser/popup = new(user, "Autoylathe", name, 400, 500)
popup.set_content(dat)
popup.open()
/obj/machinery/autoylathe/on_deconstruction()
GET_COMPONENT(materials, /datum/component/material_container)
materials.retrieve_all()
/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params)
if (busy)
to_chat(user, "<span class=\"alert\">The autoylathe is busy. Please wait for completion of previous operation.</span>")
return TRUE
if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O))
updateUsrDialog()
return TRUE
if(exchange_parts(user, O))
return TRUE
if(default_deconstruction_crowbar(O))
return TRUE
if(panel_open && is_wire_tool(O))
wires.interact(user)
return TRUE
if(user.a_intent == INTENT_HARM) //so we can hit the machine
return ..()
if(stat)
return TRUE
if(istype(O, /obj/item/disk/design_disk))
user.visible_message("[user] begins to load \the [O] in \the [src]...",
"You begin to load a design from \the [O]...",
"You hear the chatter of a floppy drive.")
busy = TRUE
var/obj/item/disk/design_disk/D = O
if(do_after(user, 14.4, target = src))
for(var/B in D.blueprints)
if(B)
stored_research.add_design(B)
busy = FALSE
return TRUE
return ..()
/obj/machinery/autoylathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal))
use_power(amount_inserted / 10)
else
switch(id_inserted)
if (MAT_METAL)
flick("autolathe_o",src)//plays metal insertion animation
if (MAT_GLASS)
flick("autolathe_r",src)//plays glass insertion animation
if (MAT_PLASTIC)
flick("autolathe_o",src)//plays metal insertion animation
use_power(amount_inserted / 10)
updateUsrDialog()
/obj/machinery/autoylathe/Topic(href, href_list)
if(..())
return
if (!busy)
if(href_list["menu"])
screen = text2num(href_list["menu"])
updateUsrDialog()
if(href_list["category"])
selected_category = href_list["category"]
updateUsrDialog()
if(href_list["make"])
/////////////////
//href protection
being_built = stored_research.isDesignResearchedID(href_list["make"])
if(!being_built)
return
var/multiplier = text2num(href_list["multiplier"])
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
/////////////////
var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient
var/metal_cost = being_built.materials[MAT_METAL]
var/glass_cost = being_built.materials[MAT_GLASS]
var/plastic_cost = being_built.materials[MAT_PLASTIC]
var/power = max(2000, (metal_cost+glass_cost+plastic_cost)*multiplier/5)
GET_COMPONENT(materials, /datum/component/material_container)
if((materials.amount(MAT_METAL) >= metal_cost*multiplier*coeff) && (materials.amount(MAT_GLASS) >= glass_cost*multiplier*coeff) && (materials.amount(MAT_PLASTIC) >= plastic_cost*multiplier*coeff))
busy = TRUE
use_power(power)
icon_state = "autolathe_n"
var/time = is_stack ? 32 : 32*coeff*multiplier
addtimer(CALLBACK(src, .proc/make_item, power, metal_cost, glass_cost, plastic_cost, multiplier, coeff, is_stack), time)
if(href_list["search"])
matching_designs.Cut()
for(var/v in stored_research.researched_designs)
var/datum/design/D = stored_research.researched_designs[v]
if(findtext(D.name,href_list["to_search"]))
matching_designs.Add(D)
updateUsrDialog()
else
to_chat(usr, "<span class=\"alert\">The autoylathe is busy. Please wait for completion of previous operation.</span>")
updateUsrDialog()
return
/obj/machinery/autoylathe/proc/make_item(power, metal_cost, glass_cost, plastic_cost, multiplier, coeff, is_stack)
GET_COMPONENT(materials, /datum/component/material_container)
var/atom/A = drop_location()
use_power(power)
var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier, MAT_PLASTIC=plastic_cost*coeff*multiplier)
materials.use_amount(materials_used)
if(is_stack)
var/obj/item/stack/N = new being_built.build_path(A, multiplier)
N.update_icon()
N.autoylathe_crafted(src)
else
for(var/i=1, i<=multiplier, i++)
var/obj/item/new_item = new being_built.build_path(A)
for(var/mat in materials_used)
new_item.materials[mat] = materials_used[mat] / multiplier
new_item.autoylathe_crafted(src)
icon_state = "autolathe"
busy = FALSE
updateDialog()
/obj/machinery/autoylathe/RefreshParts()
var/T = 0
for(var/obj/item/stock_parts/matter_bin/MB in component_parts)
T += MB.rating*75000
GET_COMPONENT(materials, /datum/component/material_container)
materials.max_amount = T
T=1.2
for(var/obj/item/stock_parts/manipulator/M in component_parts)
T -= M.rating*0.2
prod_coeff = CLAMP(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
/obj/machinery/autoylathe/proc/main_win(mob/user)
var/dat = "<div class='statusDisplay'><h3>Autoylathe Menu:</h3><br>"
dat += materials_printout()
dat += "<form name='search' action='?src=[REF(src)]'>\
<input type='hidden' name='src' value='[REF(src)]'>\
<input type='hidden' name='search' value='to_search'>\
<input type='hidden' name='menu' value='[AUTOYLATHE_SEARCH_MENU]'>\
<input type='text' name='to_search'>\
<input type='submit' value='Search'>\
</form><hr>"
var/line_length = 1
dat += "<table style='width:100%' align='center'><tr>"
for(var/C in categories)
if(line_length > 2)
dat += "</tr><tr>"
line_length = 1
dat += "<td><A href='?src=[REF(src)];category=[C];menu=[AUTOYLATHE_CATEGORY_MENU]'>[C]</A></td>"
line_length++
dat += "</tr></table></div>"
return dat
/obj/machinery/autoylathe/proc/category_win(mob/user,selected_category)
var/dat = "<A href='?src=[REF(src)];menu=[AUTOYLATHE_MAIN_MENU]'>Return to main menu</A>"
dat += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3><br>"
dat += materials_printout()
for(var/v in stored_research.researched_designs)
var/datum/design/D = stored_research.researched_designs[v]
if(!(selected_category in D.category))
continue
if(disabled || !can_build(D))
dat += "<span class='linkOff'>[D.name]</span>"
else
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
if(ispath(D.build_path, /obj/item/stack))
GET_COMPONENT(materials, /datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
if (max_multiplier>25 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=25'>x25</a>"
if(max_multiplier > 0 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=[max_multiplier]'>x[max_multiplier]</a>"
else
if(!disabled && can_build(D, 5))
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=5'>x5</a>"
if(!disabled && can_build(D, 10))
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
dat += "[get_design_cost(D)]<br>"
dat += "</div>"
return dat
/obj/machinery/autoylathe/proc/search_win(mob/user)
var/dat = "<A href='?src=[REF(src)];menu=[AUTOYLATHE_MAIN_MENU]'>Return to main menu</A>"
dat += "<div class='statusDisplay'><h3>Search results:</h3><br>"
dat += materials_printout()
for(var/v in matching_designs)
var/datum/design/D = v
if(disabled || !can_build(D))
dat += "<span class='linkOff'>[D.name]</span>"
else
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
if(ispath(D.build_path, /obj/item/stack))
GET_COMPONENT(materials, /datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
if (max_multiplier>25 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=25'>x25</a>"
if(max_multiplier > 0 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=[max_multiplier]'>x[max_multiplier]</a>"
dat += "[get_design_cost(D)]<br>"
dat += "</div>"
return dat
/obj/machinery/autoylathe/proc/materials_printout()
GET_COMPONENT(materials, /datum/component/material_container)
var/dat = "<b>Total amount:</b> [materials.total_amount] / [materials.max_amount] cm<sup>3</sup><br>"
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
dat += "<b>[M.name] amount:</b> [M.amount] cm<sup>3</sup><br>"
return dat
/obj/machinery/autoylathe/proc/can_build(datum/design/D, amount = 1)
if(D.make_reagents.len)
return FALSE
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
GET_COMPONENT(materials, /datum/component/material_container)
if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount)))
return FALSE
if(D.materials[MAT_GLASS] && (materials.amount(MAT_GLASS) < (D.materials[MAT_GLASS] * coeff * amount)))
return FALSE
if(D.materials[MAT_PLASTIC] && (materials.amount(MAT_PLASTIC) < (D.materials[MAT_PLASTIC] * coeff * amount)))
return FALSE
return TRUE
/obj/machinery/autoylathe/proc/get_design_cost(datum/design/D)
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
var/dat
if(D.materials[MAT_METAL])
dat += "[D.materials[MAT_METAL] * coeff] metal "
if(D.materials[MAT_GLASS])
dat += "[D.materials[MAT_GLASS] * coeff] glass "
if(D.materials[MAT_PLASTIC])
dat += "[D.materials[MAT_PLASTIC] * coeff] plastic"
return dat
/obj/machinery/autoylathe/proc/reset(wire)
switch(wire)
if(WIRE_HACK)
if(!wires.is_cut(wire))
adjust_hacked(FALSE)
if(WIRE_SHOCK)
if(!wires.is_cut(wire))
shocked = FALSE
if(WIRE_DISABLE)
if(!wires.is_cut(wire))
disabled = FALSE
/obj/machinery/autoylathe/proc/shock(mob/user, prb)
if(stat & (BROKEN|NOPOWER)) // unpowered, no shock
return FALSE
if(!prob(prb))
return FALSE
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
if (electrocute_mob(user, get_area(src), src, 0.7, TRUE))
return TRUE
else
return FALSE
/obj/machinery/autoylathe/proc/adjust_hacked(state)
hacked = state
for(var/id in SSresearch.techweb_designs)
var/datum/design/D = SSresearch.techweb_designs[id]
if((D.build_type & AUTOYLATHE) && ("hacked" in D.category))
if(hacked)
stored_research.add_design(D)
else
stored_research.remove_design(D)
/obj/machinery/autoylathe/hacked/Initialize()
. = ..()
adjust_hacked(TRUE)
//Called when the object is constructed by an autoylathe
//Has a reference to the autoylathe so you can do !!FUN!! things with hacked lathes
/obj/item/proc/autoylathe_crafted(obj/machinery/autoylathe/A)
return
@@ -1,4 +1,12 @@
/obj/item/circuitboard/machine/kinkmate
name = "Kinkmate Vendor (Machine Board)"
build_path = /obj/machinery/vending/kink
req_components = list(/obj/item/vending_refill/kink)
req_components = list(/obj/item/vending_refill/kink)
/obj/item/circuitboard/machine/autoylathe
name = "Autoylathe (Machine Board)"
build_path = /obj/machinery/autoylathe
req_components = list(
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/sheet/glass = 1)
@@ -180,9 +180,21 @@
category = slot_hands
path = /obj/item/storage/backpack/satchel/carrot
ckeywhitelist = list("improvedname")
/datum/gear/naomisweater
name = "worn black sweater"
category = slot_w_uniform
path = /obj/item/clothing/under/bb_sweater/black/naomi
ckeywhitelist = list("technicalmagi")
/datum/gear/naomicollar
name = "worn pet collar"
category = slot_neck
path = /obj/item/clothing/neck/petcollar/naomi
ckeywhitelist = list("technicalmagi")
/datum/gear/gladiator
name = "Gladiator Armor"
category = slot_wear_suit
path = /obj/item/clothing/under/gladiator
ckeywhitelist = list("aroche")
ckeywhitelist = list("aroche")
@@ -0,0 +1,9 @@
/obj/item/device/flightpack
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
/obj/item/clothing/suit/space/hardsuit/flightsuit
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
/obj/item/clothing/head/helmet/space/hardsuit/flightsuit
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
@@ -0,0 +1,2 @@
/datum/species/jelly/slime
name = "Xenobiological Slimeperson"
@@ -0,0 +1,626 @@
/datum/design/autoylathe
build_type = AUTOYLATHE
/datum/design/autoylathe/mech
category = list("initial", "Figurines")
/datum/design/autoylathe/mech/contraband
category = list("hacked", "Figurines")
/datum/design/autoylathe/figure
category = list("initial", "Figurines")
/datum/design/autoylathe/balloon
name = "Empty Water balloon"
id = "waterballoon"
materials = list(MAT_PLASTIC = 50)
build_path = /obj/item/toy/balloon
category = list("initial", "Toys")
/datum/design/autoylathe/spinningtoy
name = "Toy Singularity"
id = "singuloutoy"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/spinningtoy
category = list("initial", "Toys")
/datum/design/autoylathe/capgun
name = "Cap Gun"
id = "capgun"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/gun
category = list("initial", "Pistols")
/datum/design/autoylathe/capgunammo
name = "Capgun Ammo"
id = "capgunammo"
materials = list(MAT_PLASTIC = 50)
build_path = /obj/item/toy/ammo/gun
category = list("initial", "misc")
/datum/design/autoylathe/toysword
name = "Toy Sword"
id = "toysword"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/sword
category = list("initial", "Melee")
/datum/design/autoylathe/foamblade
name = "Foam Armblade"
id = "foamblade"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/foamblade
category = list("initial", "Melee")
/datum/design/autoylathe/windupbox
name = "Wind Up Toolbox"
id = "windupbox"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/windupToolbox
category = list("initial", "Toys")
/datum/design/autoylathe/toydualsword
name = "Double-Bladed Toy Sword"
id = "dbtoysword"
materials = list(MAT_PLASTIC = 1000)
build_path = /obj/item/twohanded/dualsaber/toy
category = list("initial", "Melee")
/datum/design/autoylathe/toykatana
name = "Replica Katana"
id = "toykatana"
materials = list(MAT_PLASTIC = 50, MAT_METAL = 450)
build_path = /obj/item/toy/katana
category = list("initial", "Melee")
/datum/design/autoylathe/snappop
name = "Snap Pop"
id = "snappop_phoenix"
materials = list(MAT_PLASTIC = 50)
build_path = /obj/item/toy/snappop
category = list("initial", "Toys")
/datum/design/autoylathe/mech/model1
name = "Toy Ripley"
id = "toymech1"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/ripley
/datum/design/autoylathe/mech/model2
name = "Toy Firefighter Ripley"
id = "toymech2"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/fireripley
/datum/design/autoylathe/mech/contraband/model3
name = "Toy Deathsquad fireripley "
id = "toymech3"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/deathripley
/datum/design/autoylathe/mech/model4
name = "Toy Gygax"
id = "toymech4"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/gygax
/datum/design/autoylathe/mech/model5
name = "Toy Durand"
id = "toymech5"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/durand
/datum/design/autoylathe/mech/contraband/model6
name = "Toy H.O.N.K."
id = "toymech6"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/honk
/datum/design/autoylathe/mech/contraband/model7
name = "Toy Marauder"
id = "toymech7"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/marauder
/datum/design/autoylathe/mech/contraband/model8
name = "Toy Seraph"
id = "toymech8"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/seraph
/datum/design/autoylathe/mech/contraband/model9
name = "Toy Mauler"
id = "toymech9"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/mauler
/datum/design/autoylathe/mech/model10
name = "Toy Odysseus"
id = "toymech10"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/odysseus
/datum/design/autoylathe/mech/model11
name = "Toy Phazon"
id = "toymech11"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/phazon
/datum/design/autoylathe/mech/contraband/model12
name = "Toy Reticence"
id = "toymech12"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/prize/reticence
category = list("hacked", "Figurines")
/datum/design/autoylathe/talking/AI
name = "Toy AI"
id = "ToyAICore"
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
build_path = /obj/item/toy/talking/AI
category = list("initial", "Toys")
/datum/design/autoylathe/talking/codex_gigas
name = "Toy Codex Gigas"
id = "ToyCodex"
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
build_path = /obj/item/toy/talking/codex_gigas
category = list("initial", "Toys")
/datum/design/autoylathe/talking/owl
name = "Owl Action Figure"
id = "owlactionfig"
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
build_path = /obj/item/toy/talking/owl
/datum/design/autoylathe/talking/griffin
name = "Griffon Action Figure"
id = "griffinactionfig"
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
build_path = /obj/item/toy/talking/griffin
/datum/design/autoylathe/cards
name = "Deck of Cards"
id = "carddeck"
materials = list(MAT_PLASTIC = 250)
build_path = /obj/item/toy/cards/deck
category = list("initial", "Toys")
/datum/design/autoylathe/nuke
name = "Nuclear Fission Explosive Toy"
id = "nuketoy"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/nuke
category = list("initial", "Toys")
/datum/design/autoylathe/minimeteor
name = "Mini-Meteor"
id = "meattoy"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/minimeteor
category = list("hacked", "Misc")
/datum/design/autoylathe/redbutton
name = "Big Red Button"
id = "redbutton"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/redbutton
category = list("initial", "Toys")
/datum/design/autoylathe/beach_ball
name = "Beach Ball"
id = "beachball"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/beach_ball
category = list("initial", "Toys")
/datum/design/autoylathe/clockwork_watch
name = "Clockwork Watch"
id = "clockwatch"
materials = list(MAT_PLASTIC = 1000)
build_path = /obj/item/toy/clockwork_watch
category = list("initial", "misc")
/datum/design/autoylathe/dagger
name = "Toy Dagger"
id = "toydagger"
materials = list(MAT_PLASTIC = 1000)
build_path = /obj/item/toy/toy_dagger
category = list("initial", "Melee")
/datum/design/autoylathe/xeno
name = "Xenomorph"
id = "xenomorph"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/toy_xeno
/datum/design/autoylathe/cattoy
name = "Toy Mouse"
id = "cattoy"
materials = list(MAT_PLASTIC = 500)
build_path = /obj/item/toy/cattoy
category = list("initial", "Toys")
/datum/design/autoylathe/figure/assistant
name = "Assistant"
id = "assfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/assistant
/datum/design/autoylathe/figure/atmos
name = "Atmos Tech"
id = "atmfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/atmos
/datum/design/autoylathe/figure/bartender
name = "Bartender"
id = "barfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/bartender
/datum/design/autoylathe/figure/botanist
name = "Botanist"
id = "botfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/botanist
/datum/design/autoylathe/figure/captain
name = "Captain"
id = "capfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/captain
/datum/design/autoylathe/figure/cargotech
name = "Cargo Technician"
id = "carfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/cargotech
/datum/design/autoylathe/figure/ce
name = "Chief Engineer"
id = "cefigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/ce
/datum/design/autoylathe/figure/chaplain
name = "Chaplain"
id = "chafigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/chaplain
/datum/design/autoylathe/figure/chef
name = "Chef"
id = "chefigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/chef
/datum/design/autoylathe/figure/chemist
name = "Chemist"
id = "chmfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/chemist
/datum/design/autoylathe/figure/clown
name = "Clown"
id = "clnfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/clown
/datum/design/autoylathe/figure/cmo
name = "Chief Medical Officer"
id = "cmofigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/cmo
/datum/design/autoylathe/figure/curator
name = "Curator"
id = "curfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/curator
/datum/design/autoylathe/figure/borg
name = "Cyborg"
id = "cybfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/borg
/datum/design/autoylathe/figure/detective
name = "Detective"
id = "detfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/detective
/datum/design/autoylathe/figure/engineer
name = "Engineer"
id = "engfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/engineer
/datum/design/autoylathe/figure/geneticist
name = "Geneticist"
id = "genfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/geneticist
/datum/design/autoylathe/figure/hop
name = "Head of Personnel"
id = "hopfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/hop
/datum/design/autoylathe/figure/hos
name = "Head of Security"
id = "hosfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/hos
/datum/design/autoylathe/figure/janitor
name = "Janitor"
id = "janfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/janitor
/datum/design/autoylathe/figure/lawyer
name = "Lawyer"
id = "lawfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/lawyer
/datum/design/autoylathe/figure/md
name = "Medical Doctor"
id = "medfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/md
/datum/design/autoylathe/figure/mime
name = "Mime"
id = "mimfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/mime
/datum/design/autoylathe/figure/miner
name = "Miner"
id = "minfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/miner
/datum/design/autoylathe/figure/rd
name = "Research Director"
id = "rdfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/rd
/datum/design/autoylathe/figure/robotocist
name = "Robotocist"
id = "robfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/roboticist
/datum/design/autoylathe/figure/qm
name = "Quartermaster"
id = "qtmfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/qm
/datum/design/autoylathe/figure/scientist
name = "Scientist"
id = "scifigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/scientist
/datum/design/autoylathe/figure/secofficer
name = "Security Officer"
id = "secfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/secofficer
/datum/design/autoylathe/figure/virologist
name = "Virologist"
id = "virfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/virologist
/datum/design/autoylathe/figure/warden
name = "Warden"
id = "warfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/warden
/datum/design/autoylathe/figure/dsquad
name = "Deathsquad"
id = "dsqfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/dsquad
category = list("hacked", "Figurines")
/datum/design/autoylathe/figure/ian
name = "Ian"
id = "ianfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/ian
category = list("hacked", "Figurines")
/datum/design/autoylathe/figure/ninja
name = "Ninja"
id = "ninfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/ninja
category = list("hacked", "Figurines")
/datum/design/autoylathe/figure/syndie
name = "Nuclear Operative"
id = "nucfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/syndie
category = list("hacked", "Figurines")
/datum/design/autoylathe/figure/wizard
name = "Wizard"
id = "wizfigure"
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
build_path = /obj/item/toy/figure/wizard
category = list("hacked", "Figurines")
/datum/design/autoylathe/dildo
name = "Customizable Dildo"
id = "dildo"
materials = list(MAT_PLASTIC = 2000)
build_path = /obj/item/dildo/custom
category = list("initial", "Adult")
/datum/design/autoylathe/collar
name = "Collar"
id = "collar"
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
build_path = /obj/item/clothing/neck/petcollar
category = list("initial", "Adult")
/datum/design/autoylathe/lastag/blue/gun
name = "Blue Lasertag Rifle"
id = "lastagrifleblue"
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/gun/energy/laser/bluetag
category = list("initial", "Rifles")
/datum/design/autoylathe/lastag/red/gun
name = "Red Lasertag Rifle"
id = "lastagriflered"
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/gun/energy/laser/redtag
category = list("initial", "Rifles")
/datum/design/autoylathe/lastag/blue/hat
name = "Blue Lasertag Helmet"
id = "lastaghatblue"
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
build_path = /obj/item/clothing/head/helmet/bluetaghelm
category = list("initial", "Armor")
/datum/design/autoylathe/lastag/blue/armor
name = "Blue Lasertag Armor"
id = "lastagarmorblue"
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 100)
build_path = /obj/item/clothing/suit/bluetag
category = list("initial", "Armor")
/datum/design/autoylathe/lastag/red/hat
name = "Red Lasertag Helmet"
id = "lastaghelmetred"
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
build_path = /obj/item/clothing/head/helmet/redtaghelm
category = list("initial", "Armor")
/datum/design/autoylathe/lastag/red/armor
name = "Red Lasertag Armor"
id = "lastagarmorred"
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/clothing/suit/redtag
category = list("initial", "Armor")
//because why not make a boxed kit with all of the lastag shit?
/obj/item/storage/box/blueteam
name = "Blue Team Kit"
/obj/item/storage/box/blueteam/PopulateContents()
new /obj/item/clothing/head/helmet/bluetaghelm(src)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/gun/energy/laser/bluetag(src)
new /obj/item/clothing/gloves/color/blue(src)
new /obj/item/clothing/shoes/sneakers/blue(src)
new /obj/item/clothing/under/color/blue(src)
/obj/item/storage/box/redteam
name = "Red Team Kit"
/obj/item/storage/box/redteam/PopulateContents()
new /obj/item/clothing/head/helmet/redtaghelm(src)
new /obj/item/clothing/suit/redtag(src)
new /obj/item/gun/energy/laser/redtag(src)
new /obj/item/clothing/gloves/color/red(src)
new /obj/item/clothing/shoes/sneakers/red(src)
new /obj/item/clothing/under/color/red(src)
/datum/design/autoylathe/lastag/blue
name = "Blue Lasertag Kit"
id = "lastagkitblue"
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
build_path = /obj/item/storage/box/blueteam
category = list("initial", "Misc")
/datum/design/autoylathe/lastag/red
name = "Red Lasertag Kit"
id = "lastagkitred"
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
build_path = /obj/item/storage/box/redteam
category = list("initial", "Misc")
/datum/design/foam_x9
name = "Foam Force X9 Rifle"
id = "foam_x9"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/automatic/x9/toy
category = list("initial", "Rifles")
/datum/design/magfoam_dart
name = "Box of MagFoam Darts"
id = "magfoam_dart"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
build_path = /obj/item/ammo_box/foambox/mag
category = list("initial", "Misc")
/datum/design/foam_magpistol
name = "Foam Force Magpistol"
id = "magfoam_launcher"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
build_path = /obj/item/gun/ballistic/shotgun/toy/mag
category = list("initial", "Pistols")
/datum/design/foam_magrifle
name = "Foam Force MagRifle"
id = "foam_magrifle"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/automatic/magrifle/toy
category = list("initial", "Rifles")
/datum/design/foam_hyperburst
name = "MagTag Hyper Rifle"
id = "foam_hyperburst"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/gun/energy/laser/practice/hyperburst
category = list("initial", "Rifles")
/datum/design/foam_sp
name = "Foam Force Stealth Pistol"
id = "foam_sp"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000)
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth
category = list("initial", "Pistols")
/datum/design/toyray
name = "RayTag Gun"
id = "toyray"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000, MAT_GLASS = 1000)
build_path = /obj/item/gun/energy/laser/practice/raygun
category = list("initial", "Pistols")
/datum/design/foam_p37
name = "Foam Force Mk.37F"
id = "foam_p37"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000, MAT_GLASS = 250)
build_path = /obj/item/gun/ballistic/automatic/pistol/p37/foam
category = list("initial", "Pistols")
/datum/design/am4c
name = "Foam Force AM4-C Rifle"
id = "foam_am4c"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/automatic/AM4C
category = list("initial", "Rifles")
@@ -0,0 +1,6 @@
/datum/design/board/autoylathe
name = "Machine Design (Autoylathe)"
desc = "The circuit board for an autoylathe."
id = "autoylathe"
build_path = /obj/item/circuitboard/machine/autoylathe
category = list("Misc. Machinery")
@@ -0,0 +1,3 @@
/datum/techweb/specialized/autounlocking/autoylathe
design_autounlock_buildtypes = AUTOYLATHE
allowed_buildtypes = AUTOYLATHE
@@ -0,0 +1,8 @@
/datum/techweb_node/computer_board_gaming
id = "computer_board_gaming"
display_name = "Games and Toys"
description = "For the slackers on the station."
prereq_ids = list("comptech")
design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
research_cost = 1000
export_price = 5000