Merge pull request #10482 from kappa-sama/modularthing

modular citadel file destruction but only slightly
This commit is contained in:
Lin
2020-01-11 00:30:58 +00:00
committed by GitHub
12 changed files with 105 additions and 143 deletions

View File

@@ -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)

View File

@@ -0,0 +1,389 @@
#define AUTOYLATHE_MAIN_MENU 1
#define AUTOYLATHE_CATEGORY_MENU 2
#define AUTOYLATHE_SEARCH_MENU 3
/obj/machinery/autoylathe
name = "autoylathe"
desc = "It produces toys using plastic, metal and glass."
icon_state = "autolathe"
density = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 100
circuit = /obj/item/circuitboard/machine/autoylathe
layer = BELOW_OBJ_LAYER
var/operating = FALSE
var/list/L = list()
var/list/LL = list()
var/hacked = FALSE
var/disabled = 0
var/shocked = FALSE
var/hack_wire
var/disable_wire
var/shock_wire
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/ui_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()
var/datum/component/material_container/materials = GetComponent(/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(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)
multiplier = CLAMP(multiplier,1,50)
/////////////////
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)
var/datum/component/material_container/materials = GetComponent(/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 = SSresearch.techweb_design_by_id(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)
var/datum/component/material_container/materials = GetComponent(/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)
new_item.materials = new_item.materials.Copy()
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
var/datum/component/material_container/materials = GetComponent(/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 = SSresearch.techweb_design_by_id(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))
var/datum/component/material_container/materials = GetComponent(/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))
var/datum/component/material_container/materials = GetComponent(/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()
var/datum/component/material_container/materials = GetComponent(/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)
var/datum/component/material_container/materials = GetComponent(/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

View File

@@ -1000,3 +1000,16 @@
/obj/item/stock_parts/capacitor = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/reagent_containers/glass/beaker = 6) //So it can hold lots of chems
/obj/item/circuitboard/machine/kinkmate
name = "Kinkmate Vendor (Machine Board)"
build_path = /obj/machinery/vending/kink
req_components = list(/obj/item/vending_refill/kink = 1)
/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)

View File

@@ -0,0 +1,708 @@
/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/foam_dart
name = "Box of Foam Darts"
id = "foam_dart"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
build_path = /obj/item/ammo_box/foambox
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/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")
/datum/design/foam_f3
name = "Replica F3 Justicar"
id = "foam_f3"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
build_path = /obj/item/toy/gun/justicar
category = list("initial", "Pistols")
/datum/design/toy_blaster
name = "pump-action plastic blaster"
id = "toy_blaster"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 750, MAT_GLASS = 1000)
build_path = /obj/item/gun/energy/pumpaction/toy
category = list("initial", "Rifles")
/datum/design/capammo
name = "Box of Caps"
id = "capammo"
build_type = AUTOYLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
build_path = /obj/item/toy/ammo/gun
category = list("initial", "Misc")
/datum/design/foam_smg
name = "Foam Force SMG"
id = "foam_smg"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
build_path = /obj/item/gun/ballistic/automatic/toy/unrestricted
category = list("initial", "Pistols")
/datum/design/foam_pistol
name = "Foam Force Pistol"
id = "foam_pistol"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted
category = list("initial", "Pistols")
/datum/design/foam_shotgun
name = "Foam Force Shotgun"
id = "foam_shotgun"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/shotgun/toy/unrestricted
category = list("initial", "Rifles")
/datum/design/foam_dartred
name = "Box of Lastag Red Foam Darts"
id = "redfoam_dart"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
build_path = /obj/item/ammo_box/foambox/tag/red
category = list("initial", "Misc")
/datum/design/foam_dartblue
name = "Box of Lastag Blue Foam Darts"
id = "bluefoam_dart"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
build_path = /obj/item/ammo_box/foambox/tag/blue
category = list("initial", "Misc")
/datum/design/foam_bow
name = "Foam Force Crossbow"
id = "foam_bow"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
build_path = /obj/item/gun/ballistic/shotgun/toy/crossbow
category = list("initial", "Pistols")
/datum/design/foam_c20
name = "Donksoft C20R"
id = "foam_c20"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted
category = list("hacked", "Rifles")
/datum/design/foam_l6
name = "Donksoft LMG"
id = "foam_LMG"
build_type = AUTOYLATHE
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
build_path = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted
category = list("hacked", "Rifles")

View File

@@ -0,0 +1,48 @@
/obj/machinery/vending/kink
name = "KinkMate"
desc = "A vending machine for all your unmentionable desires."
icon = 'icons/obj/citvending.dmi'
icon_state = "kink"
circuit = /obj/item/circuitboard/machine/kinkmate
product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
vend_reply = "Have fun, you shameless pervert!"
products = list(
/obj/item/clothing/under/maid = 5,
/obj/item/clothing/under/janimaid = 5,
/obj/item/clothing/neck/petcollar = 5,
/obj/item/clothing/neck/petcollar/choker = 5,
/obj/item/clothing/neck/petcollar/leather = 5,
/obj/item/restraints/handcuffs/fake/kinky = 5,
/obj/item/clothing/glasses/sunglasses/blindfold = 4,
/obj/item/clothing/mask/muzzle = 4,
/obj/item/clothing/under/stripper_pink = 3,
/obj/item/clothing/under/stripper_green = 3,
/obj/item/clothing/under/corset = 3,
/obj/item/clothing/under/gear_harness = 10,
/obj/item/dildo/custom = 5,
/obj/item/electropack/shockcollar = 3,
/obj/item/assembly/signaler = 3
)
contraband = list(
/obj/item/clothing/neck/petcollar/locked = 2,
/obj/item/key/collar = 2,
/obj/item/clothing/head/kitty = 3,
/obj/item/clothing/head/rabbitears = 3,
/obj/item/clothing/under/keyholesweater = 2,
/obj/item/clothing/under/mankini = 2,
/obj/item/clothing/under/jabroni = 2,
/obj/item/dildo/flared/huge = 3,
/obj/item/reagent_containers/glass/bottle/crocin = 5,
/obj/item/reagent_containers/glass/bottle/camphor = 5
)
premium = list(
/obj/item/clothing/accessory/skullcodpiece/fake = 3,
/obj/item/reagent_containers/glass/bottle/hexacrocin = 10,
/obj/item/clothing/under/pants/chaps = 5
)
refill_canister = /obj/item/vending_refill/kink
/obj/item/vending_refill/kink
machine_name = "KinkMate"
icon = 'modular_citadel/icons/vending_restock.dmi'
icon_state = "refill_kink"

View File

@@ -24,6 +24,12 @@
/obj/item/reagent_containers/glass/bottle/morphine = 4,
/obj/item/reagent_containers/glass/bottle/toxin = 3,
/obj/item/reagent_containers/syringe/antiviral = 6,
/obj/item/storage/hypospraykit/fire = 2,
/obj/item/storage/hypospraykit/toxin = 2,
/obj/item/storage/hypospraykit/o2 = 2,
/obj/item/storage/hypospraykit/brute = 2,
/obj/item/storage/hypospraykit/enlarge = 2,
/obj/item/reagent_containers/glass/bottle/vial/small = 5,
/obj/item/storage/briefcase/medical = 2)
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
/obj/item/reagent_containers/pill/morphine = 4,

View File

@@ -0,0 +1,31 @@
/obj/machinery/vending/sovietvend
name = "KomradeVendtink"
desc = "Rodina-mat' zovyot!"
icon = 'icons/obj/citvending.dmi'
icon_state = "soviet"
vend_reply = "The fascist and capitalist svin'ya shall fall, komrade!"
product_slogans = "Quality worth waiting in line for!; Get Hammer and Sickled!; Sosvietsky soyuz above all!; With capitalist pigsky, you would have paid a fortunetink! ; Craftink in Motherland herself!"
products = list(
/obj/item/clothing/under/soviet = 20,
/obj/item/clothing/head/ushanka = 20,
/obj/item/clothing/shoes/jackboots = 20,
/obj/item/clothing/head/squatter_hat = 20,
/obj/item/clothing/under/squatter_outfit = 20,
/obj/item/clothing/under/russobluecamooutfit = 20,
/obj/item/clothing/head/russobluecamohat = 20
)
contraband = list(
/obj/item/clothing/under/syndicate/tacticool = 4,
/obj/item/clothing/mask/balaclava = 4,
/obj/item/clothing/suit/russofurcoat = 4,
/obj/item/clothing/head/russofurhat = 4,
/obj/item/clothing/suit/space/hardsuit/soviet = 3,
/obj/item/gun/energy/laser/LaserAK = 4
)
premium = list()
refill_canister = /obj/item/vending_refill/soviet
/obj/item/vending_refill/soviet
machine_name = "sovietvend"
icon_state = "refill_soviet"

View File

@@ -335,6 +335,8 @@
/obj/item/clothing/head/nemes = 1,
/obj/item/clothing/head/pharaoh = 1,
/obj/item/storage/fancy/candle_box = 3)
premium = list(/obj/item/toy/plush/plushvar = 1,
/obj/item/toy/plush/narplush = 1)
refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe
/obj/item/vending_refill/wardrobe/chap_wardrobe