diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm
index 0a43acb172..f66b580c52 100644
--- a/code/game/machinery/bioprinter.dm
+++ b/code/game/machinery/bioprinter.dm
@@ -13,27 +13,29 @@
idle_power_usage = 40
active_power_usage = 300
- var/stored_matter = 0
- var/max_stored_matter = 0
+ var/obj/item/weapon/reagent_containers/container = null // This is the beaker that holds all of the biomass
+
var/print_delay = 100
+ var/base_print_delay = 100 // For Adminbus reasons
var/printing
var/loaded_dna //Blood sample for DNA hashing.
// These should be subtypes of /obj/item/organ
+ // Costs roughly 20u Phoron (1 sheet) per internal organ, limbs are 60u for limb and extremity
var/list/products = list(
- "Heart" = list(/obj/item/organ/internal/heart, 25),
- "Lungs" = list(/obj/item/organ/internal/lungs, 25),
+ "Heart" = list(/obj/item/organ/internal/heart, 20),
+ "Lungs" = list(/obj/item/organ/internal/lungs, 20),
"Kidneys" = list(/obj/item/organ/internal/kidneys,20),
"Eyes" = list(/obj/item/organ/internal/eyes, 20),
- "Liver" = list(/obj/item/organ/internal/liver, 25),
- "Arm, Left" = list(/obj/item/organ/external/arm, 65),
- "Arm, Right" = list(/obj/item/organ/external/arm/right, 65),
- "Leg, Left" = list(/obj/item/organ/external/leg, 65),
- "Leg, Right" = list(/obj/item/organ/external/leg/right, 65),
- "Foot, Left" = list(/obj/item/organ/external/foot, 40),
- "Foot, Right" = list(/obj/item/organ/external/foot/right, 40),
- "Hand, Left" = list(/obj/item/organ/external/hand, 40),
- "Hand, Right" = list(/obj/item/organ/external/hand/right, 40)
+ "Liver" = list(/obj/item/organ/internal/liver, 20),
+ "Arm, Left" = list(/obj/item/organ/external/arm, 40),
+ "Arm, Right" = list(/obj/item/organ/external/arm/right, 40),
+ "Leg, Left" = list(/obj/item/organ/external/leg, 40),
+ "Leg, Right" = list(/obj/item/organ/external/leg/right, 40),
+ "Foot, Left" = list(/obj/item/organ/external/foot, 20),
+ "Foot, Right" = list(/obj/item/organ/external/foot/right, 20),
+ "Hand, Left" = list(/obj/item/organ/external/hand, 20),
+ "Hand, Right" = list(/obj/item/organ/external/hand/right, 20)
)
/obj/machinery/organ_printer/attackby(var/obj/item/O, var/mob/user)
@@ -57,25 +59,27 @@
/obj/machinery/organ_printer/New()
..()
+
component_parts = list()
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(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/stock_parts/manipulator(src)
RefreshParts()
/obj/machinery/organ_printer/examine(var/mob/user)
. = ..()
- to_chat(user, "It is loaded with [stored_matter]/[max_stored_matter] matter units.")
+ var/biomass = get_biomass_volume()
+ if(biomass)
+ to_chat(user, "It is loaded with [biomass] units of biomass.")
+ else
+ to_chat(user, "It is not loaded with any biomass.")
/obj/machinery/organ_printer/RefreshParts()
- print_delay = initial(print_delay)
- max_stored_matter = 0
- for(var/obj/item/weapon/stock_parts/matter_bin/bin in component_parts)
- max_stored_matter += bin.rating * 100
+ // Print Delay updating
+ print_delay = base_print_delay
for(var/obj/item/weapon/stock_parts/manipulator/manip in component_parts)
print_delay -= (manip.rating-1)*10
print_delay = max(0,print_delay)
+
. = ..()
/obj/machinery/organ_printer/attack_hand(mob/user)
@@ -91,6 +95,14 @@
to_chat(user, "\The [src] is busy!")
return
+ if(container)
+ var/response = alert(user, "What do you want to do?", "Bioprinter Menu", "Print Limbs", "Cancel")
+ if(response == "Print Limbs")
+ printing_menu(user)
+ else
+ to_chat(user, "\The [src] can't operate without a reagent reservoir!")
+
+/obj/machinery/organ_printer/proc/printing_menu(mob/user)
var/choice = input("What would you like to print?") as null|anything in products
if(!choice || printing || (stat & (BROKEN|NOPOWER)))
@@ -99,7 +111,7 @@
if(!can_print(choice))
return
- stored_matter -= products[choice][2]
+ container.reagents.remove_reagent("biomass", products[choice][2])
use_power = 2
printing = 1
@@ -118,9 +130,42 @@
print_organ(choice)
+ return
+
+/obj/machinery/organ_printer/verb/eject_beaker()
+ set name = "Eject Beaker"
+ set category = "Object"
+ set src in oview(1)
+
+ if(usr.stat != 0)
+ return
+ add_fingerprint(usr)
+ remove_beaker()
+ return
+
+// Does exactly what it says it does
+// Returns 1 if it succeeds, 0 if it fails. Added in case someone wants to add messages to the user.
+/obj/machinery/organ_printer/proc/remove_beaker()
+ if(container)
+ container.forceMove(get_turf(src))
+ container = null
+ return 1
+ return 0
+
+// Checks for reagents, then reports how much biomass it has in it
+/obj/machinery/organ_printer/proc/get_biomass_volume()
+ var/biomass_count = 0
+ if(container && container.reagents)
+ for(var/datum/reagent/R in container.reagents.reagent_list)
+ if(R.id == "biomass")
+ biomass_count += R.volume
+
+ return biomass_count
+
/obj/machinery/organ_printer/proc/can_print(var/choice)
- if(stored_matter < products[choice][2])
- visible_message("\The [src] displays a warning: 'Not enough matter. [stored_matter] stored and [products[choice][2]] needed.'")
+ var/biomass = get_biomass_volume()
+ if(biomass < products[choice][2])
+ visible_message("\The [src] displays a warning: 'Not enough biomass. [biomass] stored and [products[choice][2]] needed.'")
return 0
if(!loaded_dna || !loaded_dna["donor"])
@@ -162,6 +207,59 @@
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 2)
+// FLESH ORGAN PRINTER
+/obj/machinery/organ_printer/flesh
+ name = "bioprinter"
+ desc = "It's a machine that prints replacement organs."
+ icon_state = "bioprinter"
+ circuit = /obj/item/weapon/circuitboard/bioprinter
+
+/obj/machinery/organ_printer/flesh/full/New()
+ . = ..()
+ container = new /obj/item/weapon/reagent_containers/glass/bottle/biomass(src)
+
+/obj/machinery/organ_printer/flesh/dismantle()
+ var/turf/T = get_turf(src)
+ if(T)
+ if(container)
+ container.forceMove(T)
+ container = null
+ return ..()
+
+/obj/machinery/organ_printer/flesh/print_organ(var/choice)
+ var/obj/item/organ/O = ..()
+
+ playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
+ visible_message("\The [src] dings, then spits out \a [O].")
+ return O
+
+/obj/machinery/organ_printer/flesh/attackby(obj/item/weapon/W, mob/user)
+ // DNA sample from syringe.
+ if(istype(W,/obj/item/weapon/reagent_containers/syringe)) //TODO: Make this actually empty the syringe
+ var/obj/item/weapon/reagent_containers/syringe/S = W
+ var/datum/reagent/blood/injected = locate() in S.reagents.reagent_list //Grab some blood
+ if(injected && injected.data)
+ loaded_dna = injected.data
+ S.reagents.remove_reagent("blood", injected.volume)
+ to_chat(user, "You scan the blood sample into the bioprinter.")
+ return
+ else if(istype(W,/obj/item/weapon/reagent_containers/glass))
+ var/obj/item/weapon/reagent_containers/glass/G = W
+ if(container)
+ to_chat(user, "\The [src] already has a container loaded!")
+ return
+ else if(do_after(user, 1 SECOND))
+ user.visible_message("[user] has loaded \the [G] into \the [src].", "You load \the [G] into \the [src].")
+ container = G
+ user.drop_item()
+ G.forceMove(src)
+ return
+
+ return ..()
+// END FLESH ORGAN PRINTER
+
+
+/* Roboprinter is made obsolete by the system already in place and mapped into Robotics
/obj/item/weapon/circuitboard/roboprinter
name = "roboprinter circuit"
build_path = /obj/machinery/organ_printer/robot
@@ -224,53 +322,4 @@
return
return ..()
// END ROBOT ORGAN PRINTER
-
-// FLESH ORGAN PRINTER
-/obj/machinery/organ_printer/flesh
- name = "bioprinter"
- desc = "It's a machine that prints replacement organs."
- icon_state = "bioprinter"
- circuit = /obj/item/weapon/circuitboard/bioprinter
-
- var/amount_per_slab = 50
-
-/obj/machinery/organ_printer/flesh/full/New()
- . = ..()
- stored_matter = max_stored_matter
-
-/obj/machinery/organ_printer/flesh/dismantle()
- var/turf/T = get_turf(src)
- if(T)
- while(stored_matter >= amount_per_slab)
- stored_matter -= amount_per_slab
- new /obj/item/weapon/reagent_containers/food/snacks/meat(T)
- return ..()
-
-/obj/machinery/organ_printer/flesh/print_organ(var/choice)
- var/obj/item/organ/O = ..()
-
- playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
- visible_message("\The [src] dings, then spits out \a [O].")
- return O
-
-/obj/machinery/organ_printer/flesh/attackby(obj/item/weapon/W, mob/user)
- // Load with matter for printing.
- if(istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
- if((max_stored_matter - stored_matter) < amount_per_slab)
- to_chat(user, "\The [src] is too full.")
- return
- stored_matter += amount_per_slab
- user.drop_item()
- to_chat(user, "\The [src] processes \the [W]. Levels of stored biomass now: [stored_matter]")
- qdel(W)
- return
- // DNA sample from syringe.
- else if(istype(W,/obj/item/weapon/reagent_containers/syringe)) //TODO: Make this actually empty the syringe
- var/obj/item/weapon/reagent_containers/syringe/S = W
- var/datum/reagent/blood/injected = locate() in S.reagents.reagent_list //Grab some blood
- if(injected && injected.data)
- loaded_dna = injected.data
- to_chat(user, "You scan the blood sample into the bioprinter.")
- return
- return ..()
-// END FLESH ORGAN PRINTER
\ No newline at end of file
+*/
\ No newline at end of file
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 4e1d015033..c25ec8dbbd 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -23,7 +23,7 @@
break
return selected
-#define CLONE_BIOMASS 150
+#define CLONE_BIOMASS 60
/obj/machinery/clonepod
name = "cloning pod"
@@ -33,17 +33,18 @@
circuit = /obj/item/weapon/circuitboard/clonepod
icon = 'icons/obj/cloning.dmi'
icon_state = "pod_0"
- req_access = list(access_genetics) //For premature unlocking.
+ req_access = list(access_genetics) // For premature unlocking.
var/mob/living/occupant
- var/heal_level = 20 //The clone is released once its health reaches this level.
+ var/heal_level = 20 // The clone is released once its health reaches this level.
var/heal_rate = 1
- var/notoxin = 0
var/locked = 0
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
- var/mess = 0 //Need to clean out it if it's full of exploded clone.
- var/attempting = 0 //One clone attempt at a time thanks
- var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
- var/biomass = CLONE_BIOMASS * 3
+ var/mess = 0 // Need to clean out it if it's full of exploded clone.
+ var/attempting = 0 // One clone attempt at a time thanks
+ var/eject_wait = 0 // Don't eject them as soon as they are created fuckkk
+
+ var/list/containers = list() // Beakers for our liquid biomass
+ var/container_limit = 3 // How many beakers can the machine hold?
/obj/machinery/clonepod/New()
..()
@@ -68,11 +69,9 @@
return
if((!isnull(occupant)) && (occupant.stat != 2))
var/completion = (100 * ((occupant.health + 50) / (heal_level + 100))) // Clones start at -150 health
- user << "Current clone cycle is [round(completion)]% complete."
+ to_chat(user, "Current clone cycle is [round(completion)]% complete.")
return
-//Clonepod
-
//Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(var/datum/dna2/record/R)
if(mess || attempting)
@@ -98,6 +97,9 @@
if(istype(modifier_type, /datum/modifier/no_clone))
return 0
+ // Remove biomass when the cloning is started, rather than when the guy pops out
+ remove_biomass(CLONE_BIOMASS)
+
attempting = 1 //One at a time!!
locked = 1
@@ -164,6 +166,7 @@
for(var/datum/language/L in R.languages)
H.add_language(L.name)
+
H.flavor_texts = R.flavor.Copy()
H.suiciding = 0
attempting = 0
@@ -171,16 +174,6 @@
//Grow clones to maturity then kick them out. FREELOADERS
/obj/machinery/clonepod/process()
-
- var/visible_message = 0
- for(var/obj/item/weapon/reagent_containers/food/snacks/meat/meat in range(1, src))
- qdel(meat)
- biomass += 50
- visible_message = 1 // Prevent chatspam when multiple meat are near
-
- if(visible_message)
- visible_message("[src] sucks in and processes the nearby biomass.")
-
if(stat & NOPOWER) //Autoeject if power is lost
if(occupant)
locked = 0
@@ -240,25 +233,34 @@
return
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(!check_access(W))
- user << "Access Denied."
+ to_chat(user, "Access Denied.")
return
if((!locked) || (isnull(occupant)))
return
if((occupant.health < -20) && (occupant.stat != 2))
- user << "Access Refused."
+ to_chat(user, "Access Refused.")
return
else
locked = 0
- user << "System unlocked."
- else if(istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
- user << "\The [src] processes \the [W]."
- biomass += 50
- user.drop_item()
- qdel(W)
- return
+ to_chat(user, "System unlocked.")
+ else if(istype(W,/obj/item/weapon/reagent_containers/glass))
+ var/obj/item/weapon/reagent_containers/glass/G = W
+ if(LAZYLEN(containers))
+ if(containers.len >= container_limit)
+ to_chat(user, "\The [src] has too many containers loaded!")
+ return
+ else if(do_after(user, 1 SECOND))
+ user.visible_message("[user] has loaded \the [G] into \the [src].", "You load \the [G] into \the [src].")
+ containers += G
+ user.drop_item()
+ G.forceMove(src)
+ return
+ else
+ to_chat(user, "\The [src] doesn't have room for \the [G.name].")
+ return
else if(istype(W, /obj/item/weapon/wrench))
if(locked && (anchored || occupant))
- user << "Can not do that while [src] is in use."
+ to_chat(user, "Can not do that while [src] is in use.")
else
if(anchored)
anchored = 0
@@ -274,7 +276,7 @@
else if(istype(W, /obj/item/device/multitool))
var/obj/item/device/multitool/M = W
M.connecting = src
- user << "You load connection data from [src] to [M]."
+ to_chat(user, "You load connection data from [src] to [M].")
M.update_icon()
return
else
@@ -283,7 +285,7 @@
/obj/machinery/clonepod/emag_act(var/remaining_charges, var/mob/user)
if(isnull(occupant))
return
- user << "You force an emergency ejection."
+ to_chat(user, "You force an emergency ejection.")
locked = 0
go_out()
return 1
@@ -308,10 +310,6 @@
heal_level = rating * 10 - 20
heal_rate = round(rating / 4)
- if(rating >= 8)
- notoxin = 1
- else
- notoxin = 0
/obj/machinery/clonepod/verb/eject()
set name = "Eject Cloner"
@@ -348,10 +346,66 @@
domutcheck(occupant) //Waiting until they're out before possible transforming.
occupant = null
- biomass -= CLONE_BIOMASS
update_icon()
return
+// Returns the total amount of biomass reagent in all of the pod's stored containers
+/obj/machinery/clonepod/proc/get_biomass()
+ var/biomass_count = 0
+ if(LAZYLEN(containers))
+ for(var/obj/item/weapon/reagent_containers/glass/G in containers)
+ for(var/datum/reagent/R in G.reagents.reagent_list)
+ if(R.id == "biomass")
+ biomass_count += R.volume
+
+ return biomass_count
+
+// Removes [amount] biomass, spread across all containers. Doesn't have any check that you actually HAVE enough biomass, though.
+/obj/machinery/clonepod/proc/remove_biomass(var/amount = CLONE_BIOMASS) //Just in case it doesn't get passed a new amount, assume one clone
+ var/to_remove = 0 // Tracks how much biomass has been found so far
+ if(LAZYLEN(containers))
+ for(var/obj/item/weapon/reagent_containers/glass/G in containers)
+ if(to_remove < amount) //If we have what we need, we can stop. Checked every time we switch beakers
+ for(var/datum/reagent/R in G.reagents.reagent_list)
+ if(R.id == "biomass") // Finds Biomass
+ var/need_remove = max(0, amount - to_remove) //Figures out how much biomass is in this container
+ if(R.volume >= need_remove) //If we have more than enough in this beaker, only take what we need
+ R.remove_self(need_remove)
+ to_remove = amount
+ else //Otherwise, take everything and move on
+ to_remove += R.volume
+ R.remove_self(R.volume)
+ else
+ continue
+ else
+ return 1
+ return 0
+
+// Empties all of the beakers from the cloning pod, used to refill it
+/obj/machinery/clonepod/verb/empty_beakers()
+ set name = "Eject Beakers"
+ set category = "Object"
+ set src in oview(1)
+
+ if(usr.stat != 0)
+ return
+
+ add_fingerprint(usr)
+ drop_beakers()
+ return
+
+// Actually does all of the beaker dropping
+// Returns 1 if it succeeds, 0 if it fails. Added in case someone wants to add messages to the user.
+/obj/machinery/clonepod/proc/drop_beakers()
+ if(LAZYLEN(containers))
+ var/turf/T = get_turf(src)
+ if(T)
+ for(var/obj/item/weapon/reagent_containers/glass/G in containers)
+ G.forceMove(T)
+ containers -= G
+ return 1
+ return 0
+
/obj/machinery/clonepod/proc/malfunction()
if(occupant)
connected_message("Critical Error!")
@@ -406,6 +460,12 @@
else if(mess)
icon_state = "pod_g"
+
+/obj/machinery/clonepod/full/New()
+ ..()
+ for(var/i = 1 to container_limit)
+ containers += new /obj/item/weapon/reagent_containers/glass/bottle/biomass(src)
+
//Health Tracker Implant
/obj/item/weapon/implant/health
@@ -475,11 +535,11 @@
/obj/item/weapon/disk/data/attack_self(mob/user as mob)
read_only = !read_only
- user << "You flip the write-protect tab to [read_only ? "protected" : "unprotected"]."
+ to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].")
/obj/item/weapon/disk/data/examine(mob/user)
..(user)
- user << text("The write-protect tab is set to [read_only ? "protected" : "unprotected"].")
+ to_chat(user, text("The write-protect tab is set to [read_only ? "protected" : "unprotected"]."))
return
/*
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 4935a2a552..9660eca8bc 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -67,7 +67,7 @@
user.drop_item()
W.loc = src
diskette = W
- user << "You insert [W]."
+ to_chat(user, "You insert [W].")
updateUsrDialog()
return
else if(istype(W, /obj/item/device/multitool))
@@ -77,7 +77,7 @@
pods += P
P.connected = src
P.name = "[initial(P.name)] #[pods.len]"
- user << "You connect [P] to [src]."
+ to_chat(user, "You connect [P] to [src].")
else if (menu == 4 && (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)))
if(check_access(W))
@@ -116,7 +116,7 @@
var/pods_list_ui[0]
for(var/obj/machinery/clonepod/pod in pods)
- pods_list_ui[++pods_list_ui.len] = list("pod" = pod, "biomass" = pod.biomass)
+ pods_list_ui[++pods_list_ui.len] = list("pod" = pod, "biomass" = pod.get_biomass())
if(pods)
data["pods"] = pods_list_ui
@@ -244,7 +244,7 @@
//Look for that player! They better be dead!
if(istype(C))
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
- if(!pods.len)
+ if(!LAZYLEN(pods))
temp = "Error: No clone pods detected."
else
var/obj/machinery/clonepod/pod = pods[1]
@@ -252,13 +252,12 @@
pod = input(usr,"Select a cloning pod to use", "Pod selection") as anything in pods
if(pod.occupant)
temp = "Error: Clonepod is currently occupied."
- else if(pod.biomass < CLONE_BIOMASS)
+ else if(pod.get_biomass() < CLONE_BIOMASS)
temp = "Error: Not enough biomass."
else if(pod.mess)
temp = "Error: Clonepod malfunction."
else if(!config.revival_cloning)
temp = "Error: Unable to initiate cloning cycle."
-
else if(pod.growclone(C))
temp = "Initiating cloning cycle..."
records.Remove(C)
diff --git a/code/game/machinery/computer3/laptop.dm b/code/game/machinery/computer3/laptop.dm
index 38db574200..9a8ba02b00 100644
--- a/code/game/machinery/computer3/laptop.dm
+++ b/code/game/machinery/computer3/laptop.dm
@@ -28,6 +28,9 @@
var/obj/machinery/computer3/laptop/stored_computer = null
+/obj/item/device/laptop/get_cell()
+ return stored_computer.battery
+
/obj/item/device/laptop/verb/open_computer()
set name = "Open Laptop"
set category = "Object"
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 85f97f49aa..b51edaf189 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -41,35 +41,12 @@ obj/machinery/recharger
return
if(istype(G, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = G
- if(!E.power_supply)
- to_chat(user, "Your gun has no power cell.")
- return
if(E.self_recharge)
to_chat(user, "Your gun has no recharge port.")
return
- if(istype(G, /obj/item/weapon/gun/energy/staff))
+ if(!G.get_cell())
+ to_chat(user, "This device does not have a battery installed.")
return
- if(istype(G, /obj/item/device/flashlight))
- var/obj/item/device/flashlight/F = G
- if(!F.power_use)
- return
- if(!F.cell)
- return
- if(istype(G, /obj/item/device/laptop))
- var/obj/item/device/laptop/L = G
- if(!L.stored_computer.battery)
- user << "There's no battery in it!"
- return
- if(istype(G, /obj/item/device/electronic_assembly))
- var/obj/item/device/electronic_assembly/assembly = G
- if(!assembly.battery)
- to_chat(user, "The assembly doesn't have a power cell.")
- return
- if(istype(G, /obj/item/weapon/weldingtool/electric))
- var/obj/item/weapon/weldingtool/electric/welder = G
- if(!welder.power_supply)
- to_chat(user, "Your welder has no power cell.")
- return
user.drop_item()
G.loc = src
@@ -109,71 +86,8 @@ obj/machinery/recharger
update_use_power(1)
icon_state = icon_state_idle
else
- if(istype(charging, /obj/item/weapon/gun/energy))
- var/obj/item/weapon/gun/energy/E = charging
- if(!E.power_supply.fully_charged())
- icon_state = icon_state_charging
- E.power_supply.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/weapon/gun/magnetic))
- var/obj/item/weapon/gun/magnetic/M = charging
- if(!M.cell.fully_charged())
- icon_state = icon_state_charging
- M.cell.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/weapon/melee/baton))
- var/obj/item/weapon/melee/baton/B = charging
- if(B.bcell)
- if(!B.bcell.fully_charged())
- icon_state = icon_state_charging
- B.bcell.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- else
- icon_state = icon_state_idle
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/device/laptop))
- var/obj/item/device/laptop/L = charging
- if(!L.stored_computer.battery.fully_charged())
- icon_state = icon_state_charging
- L.stored_computer.battery.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/device/flashlight))
- var/obj/item/device/flashlight/F = charging
- if(F.cell)
- if(!F.cell.fully_charged())
- icon_state = icon_state_charging
- F.cell.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- else
- icon_state = icon_state_idle
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/weapon/cell))
- var/obj/item/weapon/cell/C = charging
+ var/obj/item/weapon/cell/C = charging.get_cell()
+ if(istype(C))
if(!C.fully_charged())
icon_state = icon_state_charging
C.give(active_power_usage*CELLRATE)
@@ -181,48 +95,17 @@ obj/machinery/recharger
else
icon_state = icon_state_charged
update_use_power(1)
- return
-
- if(istype(charging, /obj/item/device/electronic_assembly))
- var/obj/item/device/electronic_assembly/assembly = charging
- if(assembly.battery)
- if(!assembly.battery.fully_charged())
- icon_state = icon_state_charging
- assembly.battery.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- else
- icon_state = icon_state_idle
- update_use_power(1)
- return
-
- if(istype(charging, /obj/item/weapon/weldingtool/electric))
- var/obj/item/weapon/weldingtool/electric/C = charging
- if(!C.power_supply.fully_charged())
- icon_state = icon_state_charging
- C.power_supply.give(active_power_usage*CELLRATE)
- update_use_power(2)
- else
- icon_state = icon_state_charged
- update_use_power(1)
- return
/obj/machinery/recharger/emp_act(severity)
if(stat & (NOPOWER|BROKEN) || !anchored)
..(severity)
return
- if(istype(charging, /obj/item/weapon/gun/energy))
- var/obj/item/weapon/gun/energy/E = charging
- if(E.power_supply)
- E.power_supply.emp_act(severity)
+ if(charging)
+ var/obj/item/weapon/cell/C = charging.get_cell()
+ if(istype(C))
+ C.emp_act(severity)
- else if(istype(charging, /obj/item/weapon/melee/baton))
- var/obj/item/weapon/melee/baton/B = charging
- if(B.bcell)
- B.bcell.charge = 0
..(severity)
/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
@@ -231,7 +114,6 @@ obj/machinery/recharger
else
icon_state = icon_state_idle
-
/obj/machinery/recharger/wallcharger
name = "wall recharger"
icon = 'icons/obj/stationobjs.dmi'
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index d69c2c9d92..44d3c98c8c 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -41,6 +41,9 @@
processing_objects -= src
return ..()
+/obj/item/device/flashlight/get_cell()
+ return cell
+
/obj/item/device/flashlight/verb/toggle()
set name = "Toggle Flashlight Brightness"
set category = "Object"
diff --git a/code/game/objects/items/devices/radio/jammer.dm b/code/game/objects/items/devices/radio/jammer.dm
index 680b5e2b37..868f90251c 100644
--- a/code/game/objects/items/devices/radio/jammer.dm
+++ b/code/game/objects/items/devices/radio/jammer.dm
@@ -38,6 +38,9 @@ var/global/list/active_radio_jammers = list()
qdel_null(power_source)
return ..()
+/obj/item/device/radio_jammer/get_cell()
+ return power_source
+
/obj/item/device/radio_jammer/proc/turn_off(mob/user)
if(user)
to_chat(user,"\The [src] deactivates.")
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 268a8d5ad7..e37b2f9977 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -19,16 +19,19 @@
var/obj/item/weapon/cell/bcell = null
var/hitcost = 240
-/obj/item/weapon/melee/baton/suicide_act(mob/user)
- var/datum/gender/TU = gender_datums[user.get_visible_gender()]
- user.visible_message("\The [user] is putting the live [name] in [TU.his] mouth! It looks like [TU.he] [TU.is] trying to commit suicide.")
- return (FIRELOSS)
-
/obj/item/weapon/melee/baton/New()
..()
update_icon()
return
+/obj/item/weapon/melee/baton/get_cell()
+ return bcell
+
+/obj/item/weapon/melee/baton/suicide_act(mob/user)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ user.visible_message("\The [user] is putting the live [name] in [TU.his] mouth! It looks like [TU.he] [TU.is] trying to commit suicide.")
+ return (FIRELOSS)
+
/obj/item/weapon/melee/baton/MouseDrop(obj/over_object as obj)
if(!canremove)
return
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 7cd6925f8d..0ee916a162 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -775,6 +775,9 @@
acti_sound = 'sound/effects/sparks4.ogg'
deac_sound = 'sound/effects/sparks4.ogg'
+/obj/item/weapon/weldingtool/electric/unloaded/New()
+ cell_type = null
+
/obj/item/weapon/weldingtool/electric/New()
..()
if(cell_type == null)
@@ -785,8 +788,8 @@
power_supply = new /obj/item/weapon/cell/device(src)
update_icon()
-/obj/item/weapon/weldingtool/electric/unloaded/New()
- cell_type = null
+/obj/item/weapon/weldingtool/electric/get_cell()
+ return power_supply
/obj/item/weapon/weldingtool/electric/examine(mob/user)
if(get_dist(src, user) > 1)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 3835b2a24b..0facb97eac 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -163,3 +163,6 @@
/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
return
+
+/obj/proc/get_cell()
+ return
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/core/device.dm b/code/modules/integrated_electronics/core/device.dm
index 6b89a299a4..91243aefab 100644
--- a/code/modules/integrated_electronics/core/device.dm
+++ b/code/modules/integrated_electronics/core/device.dm
@@ -19,6 +19,9 @@
else
..()
+/obj/item/device/electronic_assembly/get_cell()
+ return battery
+
/obj/item/device/assembly/electronic_assembly/proc/toggle_open(mob/user)
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
opened = !opened
diff --git a/code/modules/mob/_modifiers/aura.dm b/code/modules/mob/_modifiers/aura.dm
new file mode 100644
index 0000000000..f72ca67d1a
--- /dev/null
+++ b/code/modules/mob/_modifiers/aura.dm
@@ -0,0 +1,18 @@
+/*
+'Aura' modifiers are semi-permanent, in that they do not have a set duration, but will expire if out of range of the 'source' of the aura.
+Note: The source is defined as an argument in New(), and if not specified, it is assumed the holder is the source,
+making it not expire ever, which is likely not what you want.
+*/
+
+/datum/modifier/aura
+ var/aura_max_distance = 5 // If more than this many tiles away from the source, the modifier expires next tick.
+
+/datum/modifier/aura/check_if_valid()
+ if(!origin)
+ expire()
+ var/atom/A = origin.resolve()
+ if(istype(A)) // Make sure we're not null.
+ if(get_dist(holder, A) > aura_max_distance)
+ expire()
+ else
+ expire() // Source got deleted or something.
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
index 2ada79408d..3e783f9193 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
@@ -130,36 +130,9 @@
desc = "A large robot capable of irradiating a large area from afar."
projectiletype = /obj/item/projectile/arc/radioactive
-/obj/item/projectile/arc/radioactive
- name = "radiation blast"
- icon_state = "green_pellet"
- icon_scale = 2
- var/rad_power = 50
-
-/obj/item/projectile/arc/radioactive/on_impact(turf/T)
- radiation_repository.radiate(T, rad_power)
-
// Essentially a long ranged frag grenade.
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation
name = "anti-personnel artillery hivebot"
desc = "A large robot capable of delivering fragmentation shells to rip apart their fleshy enemies."
- projectiletype = /obj/item/projectile/arc/fragmentation
-
-/obj/item/projectile/arc/fragmentation
- name = "fragmentation shot"
- icon_state = "shell"
- var/list/fragment_types = list(
- /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment, \
- /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong
- )
- var/fragment_amount = 63 // Same as a grenade.
- var/spread_range = 7
-
-/obj/item/projectile/arc/fragmentation/on_impact(turf/T)
- fragmentate(T, fragment_amount, spread_range, fragment_types)
-
-
-
-
-
+ projectiletype = /obj/item/projectile/arc/fragmentation
\ No newline at end of file
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index b76b52e1c0..1f5f583324 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -4,13 +4,13 @@ var/global/list/limb_icon_cache = list()
return
/obj/item/organ/external/proc/compile_icon()
- overlays.Cut()
+ cut_overlays()
// This is a kludge, only one icon has more than one generation of children though.
for(var/obj/item/organ/external/organ in contents)
if(organ.children && organ.children.len)
for(var/obj/item/organ/external/child in organ.children)
overlays += child.mob_icon
- overlays += organ.mob_icon
+ add_overlay(organ.mob_icon)
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
s_tone = null
@@ -94,7 +94,7 @@ var/global/list/limb_icon_cache = list()
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
- overlays |= get_hair_icon()
+ add_overlay(get_hair_icon())
return mob_icon
@@ -107,7 +107,7 @@ var/global/list/limb_icon_cache = list()
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
- res.overlays |= facial_s
+ res.add_overlay(facial_s)
//Head hair
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
@@ -122,7 +122,7 @@ var/global/list/limb_icon_cache = list()
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY)
hair_s.Blend(hair_s_add, ICON_ADD)
- res.overlays |= hair_s
+ res.add_overlay(hair_s)
return res
@@ -164,7 +164,7 @@ var/global/list/limb_icon_cache = list()
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], ICON_ADD)
- overlays |= mark_s //So when it's not on your body, it has icons
+ add_overlay(mark_s) //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
@@ -258,7 +258,7 @@ var/list/robot_hud_colours = list("#CFCFCF","#AFAFAF","#8F8F8F","#6F6F6F","#4F4F
var/b = 0.11 * R.health_hud_intensity
temp.color = list(r, r, r, g, g, g, b, b, b)
hud_damage_image = image(null)
- hud_damage_image.overlays += temp
+ hud_damage_image.add_overlay(temp)
// Calculate the required color index.
var/dam_state = min(1,((brute_dam+burn_dam)/max_damage))
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 4db4d40c4c..f9fca6222f 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -41,6 +41,9 @@
processing_objects -= src
return ..()
+/obj/item/weapon/cell/get_cell()
+ return src
+
/obj/item/weapon/cell/process()
if(self_recharge)
if(world.time >= last_use + charge_delay)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index c87c37a085..9cfd0d152a 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -23,17 +23,6 @@
var/battery_lock = 0 //If set, weapon cannot switch batteries
-/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob)
- ..()
-
-/obj/item/weapon/gun/energy/switch_firemodes(mob/user)
- if(..())
- update_icon()
-
-/obj/item/weapon/gun/energy/emp_act(severity)
- ..()
- update_icon()
-
/obj/item/weapon/gun/energy/New()
..()
if(self_recharge)
@@ -52,6 +41,9 @@
processing_objects.Remove(src)
return ..()
+/obj/item/weapon/gun/energy/get_cell()
+ return power_supply
+
/obj/item/weapon/gun/energy/process()
if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the battery
if(world.time > last_shot + charge_delay) //Doesn't work if you've fired recently
@@ -75,6 +67,17 @@
charge_tick = 0
return 1
+/obj/item/weapon/gun/energy/attackby(var/obj/item/A as obj, mob/user as mob)
+ ..()
+
+/obj/item/weapon/gun/energy/switch_firemodes(mob/user)
+ if(..())
+ update_icon()
+
+/obj/item/weapon/gun/energy/emp_act(severity)
+ ..()
+ update_icon()
+
/obj/item/weapon/gun/energy/consume_next_projectile()
if(!power_supply) return null
if(!ispath(projectile_type)) return null
diff --git a/code/modules/projectiles/guns/energy/phase.dm b/code/modules/projectiles/guns/energy/phase.dm
new file mode 100644
index 0000000000..3e5f8cb186
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/phase.dm
@@ -0,0 +1,56 @@
+// Phase weapons go here
+
+/obj/item/weapon/gun/energy/phasegun
+ name = "phase carbine"
+ desc = "The NT EW26 Artemis is a downsized energy weapon, specifically designed for use against wildlife."
+ icon_state = "phasecarbine"
+ wielded_item_state = "phasecarbine-wielded"
+ slot_flags = SLOT_BACK|SLOT_BELT
+ charge_cost = 240
+ projectile_type = /obj/item/projectile/energy/phase
+ one_handed_penalty = 15
+
+/obj/item/weapon/gun/energy/phasegun/pistol
+ name = "phase pistol"
+ desc = "The NT EW15 Apollo is an energy handgun, specifically designed for self-defense against aggressive wildlife."
+ icon_state = "phase"
+ item_state = "taser" //I don't have an in-hand sprite, taser will be fine
+ w_class = ITEMSIZE_NORMAL
+ slot_flags = SLOT_BELT|SLOT_HOLSTER
+ charge_cost = 300
+ projectile_type = /obj/item/projectile/energy/phase/light
+ one_handed_penalty = 0
+
+/obj/item/weapon/gun/energy/phasegun/pistol/mounted
+ name = "mounted phase pistol"
+ self_recharge = 1
+ use_external_power = 1
+
+/obj/item/weapon/gun/energy/phasegun/pistol/mounted/cyborg
+ charge_cost = 400
+ recharge_time = 7
+
+obj/item/weapon/gun/energy/phasegun/rifle
+ name = "phase rifle"
+ desc = "The NT EW31 Orion is a specialist energy weapon, intended for use against hostile wildlife."
+ icon_state = "phaserifle"
+ item_state = "phaserifle"
+ wielded_item_state = "phaserifle-wielded"
+ slot_flags = SLOT_BACK
+ charge_cost = 150
+ projectile_type = /obj/item/projectile/energy/phase/heavy
+ accuracy = 15
+ one_handed_penalty = 30
+
+/obj/item/weapon/gun/energy/phasegun/cannon
+ name = "phase cannon"
+ desc = "The NT EW50 Gaia is a massive energy weapon, purpose-built for clearing land. You feel dirty just looking at it."
+ icon_state = "phasecannon"
+ item_state = "phasecannon"
+ wielded_item_state = "phasecannon-wielded" //TODO: New Sprites
+ w_class = ITEMSIZE_HUGE // This thing is big.
+ slot_flags = SLOT_BACK
+ charge_cost = 100
+ projectile_type = /obj/item/projectile/energy/phase/heavy/cannon
+ accuracy = 15
+ one_handed_penalty = 65
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 8f18f2f64c..f1e20b169b 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -25,15 +25,6 @@
charge_cost = 480
projectile_type = /obj/item/projectile/ion/pistol
-/obj/item/weapon/gun/energy/phasegun
- name = "phase pistol"
- desc = "The NT Mk26 EW Apollo is an energy handgun, specifically designed for use against wildlife."
- icon_state = "phase"
- item_state = "taser" //I don't have an in-hand sprite, taser will be fine
- slot_flags = SLOT_BELT|SLOT_HOLSTER
- charge_cost = 300
- projectile_type = /obj/item/projectile/energy/phase
-
/obj/item/weapon/gun/energy/decloner
name = "biological demolecularisor"
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index cbce1a7aa1..a34db52887 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -36,6 +36,9 @@
qdel_null(capacitor)
. = ..()
+/obj/item/weapon/gun/magnetic/get_cell()
+ return cell
+
/obj/item/weapon/gun/magnetic/process()
if(capacitor)
if(cell)
diff --git a/code/modules/projectiles/projectile/arc.dm b/code/modules/projectiles/projectile/arc.dm
index d80b738e9c..6e434b1e99 100644
--- a/code/modules/projectiles/projectile/arc.dm
+++ b/code/modules/projectiles/projectile/arc.dm
@@ -78,8 +78,6 @@
// Update our shadow.
shadow.forceMove(loc)
-
-
/obj/effect/projectile_shadow
name = "shadow"
desc = "You better avoid the thing coming down!"
@@ -87,7 +85,50 @@
icon_state = "arc_shadow"
anchored = TRUE
+//////////////
+// Subtypes
+//////////////
-// Subtypes
+// Generic, Hivebot related
+/obj/item/projectile/arc/blue_energy
+ name = "energy missile"
+ icon_state = "force_missile"
+ damage = 15
+ damage_type = BURN
+// Fragmentation arc shot
+/obj/item/projectile/arc/fragmentation
+ name = "fragmentation shot"
+ icon_state = "shell"
+ var/list/fragment_types = list(
+ /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment, \
+ /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong
+ )
+ var/fragment_amount = 63 // Same as a grenade.
+ var/spread_range = 7
+/obj/item/projectile/arc/fragmentation/on_impact(turf/T)
+ fragmentate(T, fragment_amount, spread_range, fragment_types)
+
+// EMP arc shot
+/obj/item/projectile/arc/emp_blast
+ name = "emp blast"
+ icon_state = "bluespace"
+
+/obj/item/projectile/arc/emp_blast/on_impact(turf/T)
+ empulse(T, 2, 4, 7, 10) // Normal EMP grenade.
+ return ..()
+
+/obj/item/projectile/arc/emp_blast/weak/on_impact(turf/T)
+ empulse(T, 1, 2, 3, 4) // Sec EMP grenade.
+ return ..()
+
+// Radiation arc shot
+/obj/item/projectile/arc/radioactive
+ name = "radiation blast"
+ icon_state = "green_pellet"
+ icon_scale = 2
+ var/rad_power = 50
+
+/obj/item/projectile/arc/radioactive/on_impact(turf/T)
+ radiation_repository.radiate(T, rad_power)
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index d5bae0dc22..3448c2a9e9 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -212,7 +212,22 @@
muzzle_type = /obj/effect/projectile/pulse/muzzle
/obj/item/projectile/energy/phase
- kill_count = 4
+ name = "phase wave"
+ icon_state = "phase"
+ kill_count = 6
damage = 5
- SA_bonus_damage = 55 // 60 total on animals.
- SA_vulnerability = SA_ANIMAL
\ No newline at end of file
+ SA_bonus_damage = 45 // 50 total on animals
+ SA_vulnerability = SA_ANIMAL
+
+/obj/item/projectile/energy/phase/light
+ kill_count = 4
+ SA_bonus_damage = 35 // 40 total on animals
+
+/obj/item/projectile/energy/phase/heavy
+ kill_count = 8
+ SA_bonus_damage = 55 // 60 total on animals
+
+/obj/item/projectile/energy/phase/heavy/cannon
+ kill_count = 10
+ damage = 15
+ SA_bonus_damage = 60 // 75 total on animals
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index 6c83b0e26d..53ce37b3ef 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -482,3 +482,11 @@
/datum/reagent/luminol/touch_mob(var/mob/living/L)
L.reveal_blood()
+
+/datum/reagent/nutriment/biomass
+ name = "Biomass"
+ id = "biomass"
+ description = "A slurry of compounds that contains the basic requirements for life."
+ taste_description = "salty meat"
+ reagent_state = LIQUID
+ color = "#DF9FBF"
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 6e79670459..5d46650c3f 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -501,6 +501,7 @@
id = "ammonia"
result = "ammonia"
required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
+ inhibitors = list("phoron" = 1) // Messes with lexorin
result_amount = 3
/datum/chemical_reaction/diethylamine
@@ -2239,4 +2240,12 @@
id = "qerr_quem"
result = "qerr_quem"
required_reagents = list("nicotine" = 1, "carbon" = 1, "sugar" = 2)
- result_amount = 4
\ No newline at end of file
+ result_amount = 4
+
+// Biomass, for cloning and bioprinters
+/datum/chemical_reaction/biomass
+ name = "Biomass"
+ id = "biomass"
+ result = "biomass"
+ required_reagents = list("protein" = 1, "sugar" = 1, "phoron" = 1)
+ result_amount = 1 // Roughly 20u per phoron sheet
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 26e88caec0..159ac6acf3 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -55,7 +55,6 @@
var/image/lid = image(icon, src, "lid_bottle")
overlays += lid
-
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
name = "inaprovaline bottle"
desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
@@ -63,7 +62,6 @@
icon_state = "bottle-4"
prefill = list("inaprovaline" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/toxin
name = "toxin bottle"
desc = "A small bottle of toxins. Do not drink, it is poisonous."
@@ -71,7 +69,6 @@
icon_state = "bottle-3"
prefill = list("toxin" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/cyanide
name = "cyanide bottle"
desc = "A small bottle of cyanide. Bitter almonds?"
@@ -79,7 +76,6 @@
icon_state = "bottle-3"
prefill = list("cyanide" = 30) //volume changed to match chloral
-
/obj/item/weapon/reagent_containers/glass/bottle/stoxin
name = "soporific bottle"
desc = "A small bottle of soporific. Just the fumes make you sleepy."
@@ -87,15 +83,13 @@
icon_state = "bottle-3"
prefill = list("stoxin" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
- name = "Chloral Hydrate Bottle"
+ name = "chloral hydrate bottle"
desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
prefill = list("chloralhydrate" = 30) //Intentionally low since it is so strong. Still enough to knock someone out.
-
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
name = "dylovene bottle"
desc = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug."
@@ -103,7 +97,6 @@
icon_state = "bottle-4"
prefill = list("anti_toxin" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/mutagen
name = "unstable mutagen bottle"
desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
@@ -111,7 +104,6 @@
icon_state = "bottle-1"
prefill = list("mutagen" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/ammonia
name = "ammonia bottle"
desc = "A small bottle."
@@ -119,7 +111,6 @@
icon_state = "bottle-1"
prefill = list("ammonia" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/eznutrient
name = "\improper EZ NUtrient bottle"
desc = "A small bottle."
@@ -127,7 +118,6 @@
icon_state = "bottle-4"
prefill = list("eznutrient" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/left4zed
name = "\improper Left-4-Zed bottle"
desc = "A small bottle."
@@ -135,7 +125,6 @@
icon_state = "bottle-4"
prefill = list("left4zed" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/robustharvest
name = "\improper Robust Harvest"
desc = "A small bottle."
@@ -143,7 +132,6 @@
icon_state = "bottle-4"
prefill = list("robustharvest" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
name = "diethylamine bottle"
desc = "A small bottle."
@@ -152,32 +140,36 @@
prefill = list("diethylamine" = 60)
/obj/item/weapon/reagent_containers/glass/bottle/pacid
- name = "Polytrinic Acid Bottle"
+ name = "polytrinic acid bottle"
desc = "A small bottle. Contains a small amount of Polytrinic Acid"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
prefill = list("pacid" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
- name = "Adminordrazine Bottle"
+ name = "adminordrazine bottle"
desc = "A small bottle. Contains the liquid essence of the gods."
icon = 'icons/obj/drinks.dmi'
icon_state = "holyflask"
prefill = list("adminordrazine" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
- name = "Capsaicin Bottle"
+ name = "capsaicin bottle"
desc = "A small bottle. Contains hot sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
prefill = list("capsaicin" = 60)
-
/obj/item/weapon/reagent_containers/glass/bottle/frostoil
- name = "Frost Oil Bottle"
+ name = "frost oil bottle"
desc = "A small bottle. Contains cold sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
prefill = list("frostoil" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/biomass
+ name = "biomass bottle"
+ desc = "A bottle of raw biomass! Gross!"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
+ prefill = list("biomass" = 60)
\ No newline at end of file
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index ca5a88db4b..106c655ae2 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -79,1828 +79,4 @@ other types of metals and chemistry for reagents).
req_tech = list(TECH_DATA = 1)
materials = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
- sort_string = "GAAAB"
-
-/datum/design/item/stock_part
- build_type = PROTOLATHE
-
-/datum/design/item/stock_part/AssembleDesignName()
- ..()
- name = "Component design ([item_name])"
-
-/datum/design/item/stock_part/AssembleDesignDesc()
- if(!desc)
- desc = "A stock part used in the construction of various devices."
-
-/datum/design/item/stock_part/basic_capacitor
- id = "basic_capacitor"
- req_tech = list(TECH_POWER = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor
- sort_string = "CAAAA"
-
-/datum/design/item/stock_part/adv_capacitor
- id = "adv_capacitor"
- req_tech = list(TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor/adv
- sort_string = "CAAAB"
-
-/datum/design/item/stock_part/super_capacitor
- id = "super_capacitor"
- req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50, "gold" = 20)
- build_path = /obj/item/weapon/stock_parts/capacitor/super
- sort_string = "CAAAC"
-
-/datum/design/item/stock_part/micro_mani
- id = "micro_mani"
- req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator
- sort_string = "CAABA"
-
-/datum/design/item/stock_part/nano_mani
- id = "nano_mani"
- req_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator/nano
- sort_string = "CAABB"
-
-/datum/design/item/stock_part/pico_mani
- id = "pico_mani"
- req_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator/pico
- sort_string = "CAABC"
-
-/datum/design/item/stock_part/basic_matter_bin
- id = "basic_matter_bin"
- req_tech = list(TECH_MATERIAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin
- sort_string = "CAACA"
-
-/datum/design/item/stock_part/adv_matter_bin
- id = "adv_matter_bin"
- req_tech = list(TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin/adv
- sort_string = "CAACB"
-
-/datum/design/item/stock_part/super_matter_bin
- id = "super_matter_bin"
- req_tech = list(TECH_MATERIAL = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin/super
- sort_string = "CAACC"
-
-/datum/design/item/stock_part/basic_micro_laser
- id = "basic_micro_laser"
- req_tech = list(TECH_MAGNET = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser
- sort_string = "CAADA"
-
-/datum/design/item/stock_part/high_micro_laser
- id = "high_micro_laser"
- req_tech = list(TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser/high
- sort_string = "CAADB"
-
-/datum/design/item/stock_part/ultra_micro_laser
- id = "ultra_micro_laser"
- req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20, "uranium" = 10)
- build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
- sort_string = "CAADC"
-
-/datum/design/item/stock_part/basic_sensor
- id = "basic_sensor"
- req_tech = list(TECH_MAGNET = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module
- sort_string = "CAAEA"
-
-/datum/design/item/stock_part/adv_sensor
- id = "adv_sensor"
- req_tech = list(TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module/adv
- sort_string = "CAAEB"
-
-/datum/design/item/stock_part/phasic_sensor
- id = "phasic_sensor"
- req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20, "silver" = 10)
- build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
- sort_string = "CAAEC"
-
-/datum/design/item/stock_part/RPED
- name = "Rapid Part Exchange Device"
- desc = "Special mechanical module made to store, sort, and apply standard machine parts."
- id = "rped"
- req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5000)
- build_path = /obj/item/weapon/storage/part_replacer
- sort_string = "CBAAA"
-
-/datum/design/item/powercell
- build_type = PROTOLATHE | MECHFAB
-
-/datum/design/item/powercell/AssembleDesignName()
- name = "Power Cell Model ([item_name])"
-
-/datum/design/item/powercell/AssembleDesignDesc()
- if(build_path)
- var/obj/item/weapon/cell/C = build_path
- desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy."
-
-/datum/design/item/powercell/Fabricate()
- var/obj/item/weapon/cell/C = ..()
- C.charge = 0 //shouldn't produce power out of thin air.
- return C
-
-/datum/design/item/powercell/basic
- name = "basic"
- build_type = PROTOLATHE | MECHFAB
- id = "basic_cell"
- req_tech = list(TECH_POWER = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
- build_path = /obj/item/weapon/cell
- category = "Misc"
- sort_string = "DAAAA"
-
-/datum/design/item/powercell/high
- name = "high-capacity"
- build_type = PROTOLATHE | MECHFAB
- id = "high_cell"
- req_tech = list(TECH_POWER = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 60)
- build_path = /obj/item/weapon/cell/high
- category = "Misc"
- sort_string = "DAAAB"
-
-/datum/design/item/powercell/super
- name = "super-capacity"
- id = "super_cell"
- req_tech = list(TECH_POWER = 3, TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 70)
- build_path = /obj/item/weapon/cell/super
- category = "Misc"
- sort_string = "DAAAC"
-
-/datum/design/item/powercell/hyper
- name = "hyper-capacity"
- id = "hyper_cell"
- req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 400, "gold" = 150, "silver" = 150, "glass" = 70)
- build_path = /obj/item/weapon/cell/hyper
- category = "Misc"
- sort_string = "DAAAD"
-
-/datum/design/item/powercell/device
- name = "device"
- build_type = PROTOLATHE
- id = "device"
- materials = list(DEFAULT_WALL_MATERIAL = 350, "glass" = 25)
- build_path = /obj/item/weapon/cell/device
- category = "Misc"
- sort_string = "DAABA"
-
-/datum/design/item/powercell/weapon
- name = "weapon"
- build_type = PROTOLATHE
- id = "weapon"
- materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
- build_path = /obj/item/weapon/cell/device/weapon
- category = "Misc"
- sort_string = "DAABB"
-
-/datum/design/item/hud
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
-
-/datum/design/item/hud/AssembleDesignName()
- ..()
- name = "HUD glasses prototype ([item_name])"
-
-/datum/design/item/hud/AssembleDesignDesc()
- desc = "Allows for the construction of \a [item_name] HUD glasses."
-
-/datum/design/item/hud/health
- name = "health scanner"
- id = "health_hud"
- req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3)
- build_path = /obj/item/clothing/glasses/hud/health
- sort_string = "GAAAA"
-
-/datum/design/item/hud/security
- name = "security records"
- id = "security_hud"
- req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
- build_path = /obj/item/clothing/glasses/hud/security
- sort_string = "GAAAB"
-
-/datum/design/item/hud/mesons
- name = "Optical meson scanners design"
- desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
- id = "mesons"
- req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
- build_path = /obj/item/clothing/glasses/meson
- sort_string = "GAAAC"
-
-/datum/design/item/weapon/mining/AssembleDesignName()
- ..()
- name = "Mining equipment design ([item_name])"
-
-/datum/design/item/weapon/mining/jackhammer
- id = "jackhammer"
- req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "silver" = 500)
- build_path = /obj/item/weapon/pickaxe/jackhammer
- sort_string = "KAAAA"
-
-/datum/design/item/weapon/mining/drill
- id = "drill"
- req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1000) //expensive, but no need for miners.
- build_path = /obj/item/weapon/pickaxe/drill
- sort_string = "KAAAB"
-
-/datum/design/item/weapon/mining/plasmacutter
- id = "plasmacutter"
- req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
- build_path = /obj/item/weapon/pickaxe/plasmacutter
- sort_string = "KAAAC"
-
-/datum/design/item/weapon/mining/pick_diamond
- id = "pick_diamond"
- req_tech = list(TECH_MATERIAL = 6)
- materials = list("diamond" = 3000)
- build_path = /obj/item/weapon/pickaxe/diamond
- sort_string = "KAAAD"
-
-/datum/design/item/weapon/mining/drill_diamond
- id = "drill_diamond"
- req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000, "diamond" = 2000)
- build_path = /obj/item/weapon/pickaxe/diamonddrill
- sort_string = "KAAAE"
-
-/datum/design/item/device/depth_scanner
- desc = "Used to check spatial depth and density of rock outcroppings."
- id = "depth_scanner"
- req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 1000)
- build_path = /obj/item/device/depth_scanner
- sort_string = "KAAAF"
-
-///////////////////////////////////
-/////////Shield Generators/////////
-///////////////////////////////////
-/datum/design/circuit/shield
- req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
-
-/datum/design/item/medical
- materials = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 20)
-
-/datum/design/item/medical/AssembleDesignName()
- ..()
- name = "Biotech device prototype ([item_name])"
-
-/datum/design/item/medical/robot_scanner
- desc = "A hand-held scanner able to diagnose robotic injuries."
- id = "robot_scanner"
- req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
- build_path = /obj/item/device/robotanalyzer
- sort_string = "MACFA"
-
-/datum/design/item/medical/mass_spectrometer
- desc = "A device for analyzing chemicals in blood."
- id = "mass_spectrometer"
- req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
- build_path = /obj/item/device/mass_spectrometer
- sort_string = "MACAA"
-
-/datum/design/item/medical/adv_mass_spectrometer
- desc = "A device for analyzing chemicals in blood and their quantities."
- id = "adv_mass_spectrometer"
- req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
- build_path = /obj/item/device/mass_spectrometer/adv
- sort_string = "MACAB"
-
-/datum/design/item/medical/reagent_scanner
- desc = "A device for identifying chemicals."
- id = "reagent_scanner"
- req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
- build_path = /obj/item/device/reagent_scanner
- sort_string = "MACBA"
-
-/datum/design/item/medical/adv_reagent_scanner
- desc = "A device for identifying chemicals and their proportions."
- id = "adv_reagent_scanner"
- req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
- build_path = /obj/item/device/reagent_scanner/adv
- sort_string = "MACBB"
-
-/datum/design/item/beaker/AssembleDesignName()
- name = "Beaker prototype ([item_name])"
-
-/datum/design/item/beaker/noreact
- name = "cryostasis"
- desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
- id = "splitbeaker"
- req_tech = list(TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 3000)
- build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact
- sort_string = "MADAA"
-
-/datum/design/item/beaker/bluespace
- name = TECH_BLUESPACE
- desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
- id = "bluespacebeaker"
- req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6)
- materials = list(DEFAULT_WALL_MATERIAL = 3000, "phoron" = 3000, "diamond" = 500)
- build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
- sort_string = "MADAB"
-
-/datum/design/item/medical/nanopaste
- desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
- id = "nanopaste"
- req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000)
- build_path = /obj/item/stack/nanopaste
- sort_string = "MBAAA"
-
-/datum/design/item/medical/scalpel_laser1
- name = "Basic Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
- id = "scalpel_laser1"
- req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_MAGNET = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500)
- build_path = /obj/item/weapon/surgical/scalpel/laser1
- sort_string = "MBBAA"
-
-/datum/design/item/medical/scalpel_laser2
- name = "Improved Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
- id = "scalpel_laser2"
- req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_MAGNET = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2500)
- build_path = /obj/item/weapon/surgical/scalpel/laser2
- sort_string = "MBBAB"
-
-/datum/design/item/medical/scalpel_laser3
- name = "Advanced Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
- id = "scalpel_laser3"
- req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2000, "gold" = 1500)
- build_path = /obj/item/weapon/surgical/scalpel/laser3
- sort_string = "MBBAC"
-
-/datum/design/item/medical/scalpel_manager
- name = "Incision Management System"
- desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
- id = "scalpel_manager"
- req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4)
- materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 1500, "gold" = 1500, "diamond" = 750)
- build_path = /obj/item/weapon/surgical/scalpel/manager
- sort_string = "MBBAD"
-
-/datum/design/item/medical/bone_clamp
- name = "Bone Clamp"
- desc = "A miracle of modern science, this tool rapidly knits together bone, without the need for bone gel."
- id = "bone_clamp"
- req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 5, TECH_MAGNET = 4, TECH_DATA = 4)
- materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2500)
- build_path = /obj/item/weapon/surgical/bone_clamp
- sort_string = "MBBAE"
-
-/datum/design/item/medical/advanced_roller
- name = "advanced roller bed"
- desc = "A more advanced version of the regular roller bed, with inbuilt surgical stabilisers and an improved folding system."
- id = "roller_bed"
- req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 3, TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "phoron" = 2000)
- build_path = /obj/item/roller/adv
- sort_string = "MBBAF"
-
-/datum/design/item/medical/improved_analyzer
- name = "improved health analyzer"
- desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels."
- id = "improved_analyzer"
- req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500)
- build_path = /obj/item/device/healthanalyzer/improved
- sort_string = "MBBAG"
-
-/datum/design/item/implant
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
-
-/datum/design/item/implant/AssembleDesignName()
- ..()
- name = "Implantable biocircuit design ([item_name])"
-
-/datum/design/item/implant/chemical
- name = "chemical"
- id = "implant_chem"
- req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
- build_path = /obj/item/weapon/implantcase/chem
- sort_string = "MFAAA"
-
-/datum/design/item/implant/freedom
- name = "freedom"
- id = "implant_free"
- req_tech = list(TECH_ILLEGAL = 2, TECH_BIO = 3)
- build_path = /obj/item/weapon/implantcase/freedom
- sort_string = "MFAAB"
-
-/datum/design/item/weapon/AssembleDesignName()
- ..()
- name = "Weapon prototype ([item_name])"
-
-/datum/design/item/weapon/AssembleDesignDesc()
- if(!desc)
- if(build_path)
- var/obj/item/I = build_path
- desc = initial(I.desc)
- ..()
-
-/datum/design/item/weapon/stunrevolver
- id = "stunrevolver"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 4000)
- build_path = /obj/item/weapon/gun/energy/stunrevolver
- sort_string = "TAAAA"
-
-/datum/design/item/weapon/nuclear_gun
- id = "nuclear_gun"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "uranium" = 500)
- build_path = /obj/item/weapon/gun/energy/gun/nuclear
- sort_string = "TAAAB"
-
-/datum/design/item/weapon/lasercannon
- desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core."
- id = "lasercannon"
- req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, "diamond" = 2000)
- build_path = /obj/item/weapon/gun/energy/lasercannon
- sort_string = "TAAAC"
-
-/datum/design/item/weapon/phoronpistol
- id = "ppistol"
- req_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "phoron" = 3000)
- build_path = /obj/item/weapon/gun/energy/toxgun
- sort_string = "TAAAD"
-
-/datum/design/item/weapon/decloner
- id = "decloner"
- req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6)
- materials = list("gold" = 5000,"uranium" = 10000)
- build_path = /obj/item/weapon/gun/energy/decloner
- sort_string = "TAAAE"
-
-/datum/design/item/weapon/smg
- id = "smg"
- req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 8000, "silver" = 2000, "diamond" = 1000)
- build_path = /obj/item/weapon/gun/projectile/automatic
- sort_string = "TAABA"
-
-/datum/design/item/weapon/ammo_9mm
- id = "ammo_9mm"
- req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 3750, "silver" = 100)
- build_path = /obj/item/ammo_magazine/box/c9mm
- sort_string = "TAACA"
-
-/datum/design/item/weapon/stunshell
- desc = "A stunning shell for a shotgun."
- id = "stunshell"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 4000)
- build_path = /obj/item/ammo_casing/a12g/stunshell
- sort_string = "TAACB"
-
-/datum/design/item/weapon/chemsprayer
- desc = "An advanced chem spraying device."
- id = "chemsprayer"
- req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000)
- build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
- sort_string = "TABAA"
-
-/datum/design/item/weapon/rapidsyringe
- id = "rapidsyringe"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000)
- build_path = /obj/item/weapon/gun/launcher/syringe/rapid
- sort_string = "TABAB"
-
-/datum/design/item/weapon/temp_gun
- desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
- id = "temp_gun"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 500, "silver" = 3000)
- build_path = /obj/item/weapon/gun/energy/temperature
- sort_string = "TABAC"
-
-/datum/design/item/weapon/large_grenade
- id = "large_Grenade"
- req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 3000)
- build_path = /obj/item/weapon/grenade/chem_grenade/large
- sort_string = "TACAA"
-
-/datum/design/item/weapon/dartgun
- desc = "A gun that fires small hollow chemical-payload darts."
- id = "dartgun_r"
- req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_BIO = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "gold" = 5000, "silver" = 2500, "glass" = 750)
- build_path = /obj/item/weapon/gun/projectile/dartgun/research
- sort_string = "TACAB"
-
-/datum/design/item/weapon/dartgunmag_small
- id = "dartgun_mag_s"
- req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 300, "gold" = 100, "silver" = 100, "glass" = 300)
- build_path = /obj/item/ammo_magazine/chemdart/small
- sort_string = "TACAC"
-
-/datum/design/item/weapon/dartgun_ammo_small
- id = "dartgun_ammo_s"
- req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "gold" = 30, "silver" = 30, "glass" = 50)
- build_path = /obj/item/ammo_casing/chemdart/small
- sort_string = "TACAD"
-
-/datum/design/item/weapon/dartgunmag_med
- id = "dartgun_mag_m"
- req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 500, "gold" = 150, "silver" = 150, "diamond" = 200, "glass" = 400)
- build_path = /obj/item/ammo_magazine/chemdart
- sort_string = "TACAE"
-
-/datum/design/item/weapon/dartgun_ammo_med
- id = "dartgun_ammo_m"
- req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
- materials = list(DEFAULT_WALL_MATERIAL = 80, "gold" = 40, "silver" = 40, "glass" = 60)
- build_path = /obj/item/ammo_casing/chemdart
- sort_string = "TACAF"
-
-/datum/design/item/weapon/fuelrod
- id = "fuelrod_gun"
- req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "gold" = 500, "silver" = 500, "uranium" = 1000, "phoron" = 3000, "diamond" = 1000)
- build_path = /obj/item/weapon/gun/magnetic/fuelrod
- sort_string = "TACBA"
-
-/datum/design/item/weapon/flora_gun
- id = "flora_gun"
- req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "uranium" = 500)
- build_path = /obj/item/weapon/gun/energy/floragun
- sort_string = "TBAAA"
-
-/datum/design/item/weapon/slimebation
- id = "slimebation"
- req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2, TECH_POWER = 3, TECH_COMBAT = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 5000)
- build_path = /obj/item/weapon/melee/baton/slime
- sort_string = "TBAAB"
-
-/datum/design/item/weapon/slimetaser
- id = "slimetaser"
- req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3, TECH_POWER = 4, TECH_COMBAT = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 5000)
- build_path = /obj/item/weapon/gun/energy/taser/xeno
- sort_string = "TBAAC"
-
-/datum/design/item/stock_part/subspace_ansible
- id = "s-ansible"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 80, "silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/ansible
- sort_string = "UAAAA"
-
-/datum/design/item/stock_part/hyperwave_filter
- id = "s-filter"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 40, "silver" = 10)
- build_path = /obj/item/weapon/stock_parts/subspace/sub_filter
- sort_string = "UAAAB"
-
-/datum/design/item/stock_part/subspace_amplifier
- id = "s-amplifier"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "gold" = 30, "uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/amplifier
- sort_string = "UAAAC"
-
-/datum/design/item/stock_part/subspace_treatment
- id = "s-treatment"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/treatment
- sort_string = "UAAAD"
-
-/datum/design/item/stock_part/subspace_analyzer
- id = "s-analyzer"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 10, "gold" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/analyzer
- sort_string = "UAAAE"
-
-/datum/design/item/stock_part/subspace_crystal
- id = "s-crystal"
- req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list("glass" = 1000, "silver" = 20, "gold" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/crystal
- sort_string = "UAAAF"
-
-/datum/design/item/stock_part/subspace_transmitter
- id = "s-transmitter"
- req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
- materials = list("glass" = 100, "silver" = 10, "uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/transmitter
- sort_string = "UAAAG"
-
-/datum/design/item/device/ano_scanner
- name = "Alden-Saraspova counter"
- id = "ano_scanner"
- desc = "Aids in triangulation of exotic particles."
- req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 5000)
- build_path = /obj/item/device/ano_scanner
- sort_string = "UAAAH"
-
-/datum/design/item/light_replacer
- name = "Light replacer"
- desc = "A device to automatically replace lights. Refill with working lightbulbs."
- id = "light_replacer"
- req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 1500, "silver" = 150, "glass" = 3000)
- build_path = /obj/item/device/lightreplacer
- sort_string = "VAAAH"
-
-datum/design/item/laserpointer
- name = "laser pointer"
- desc = "Don't shine it in your eyes!"
- id = "laser_pointer"
- req_tech = list(TECH_MAGNET = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 50)
- build_path = /obj/item/device/laser_pointer
- sort_string = "VAAAI"
-
-/datum/design/item/paicard
- name = "'pAI', personal artificial intelligence device"
- id = "paicard"
- req_tech = list(TECH_DATA = 2)
- materials = list("glass" = 500, DEFAULT_WALL_MATERIAL = 500)
- build_path = /obj/item/device/paicard
- sort_string = "VABAI"
-
-/datum/design/item/communicator
- name = "Communicator"
- id = "communicator"
- req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 500)
- build_path = /obj/item/device/communicator
- sort_string = "VABAJ"
-
-/datum/design/item/intellicard
- name = "'intelliCore', AI preservation and transportation system"
- desc = "Allows for the construction of an intelliCore."
- id = "intellicore"
- req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
- materials = list("glass" = 1000, "gold" = 200)
- build_path = /obj/item/device/aicard
- sort_string = "VACAA"
-
-/datum/design/item/dronebrain
- name = "Robotic intelligence circuit"
- id = "dronebrain"
- req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 5, TECH_DATA = 4)
- build_type = PROTOLATHE | PROSFAB
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500)
- build_path = /obj/item/device/mmi/digital/robot
- category = "Misc"
- sort_string = "VACAC"
-
-/datum/design/item/posibrain
- name = "Positronic brain"
- id = "posibrain"
- req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
- build_type = PROTOLATHE | PROSFAB
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
- build_path = /obj/item/device/mmi/digital/posibrain
- category = "Misc"
- sort_string = "VACAB"
-
-/datum/design/item/mmi
- name = "Man-machine interface"
- id = "mmi"
- req_tech = list(TECH_DATA = 2, TECH_BIO = 3)
- build_type = PROTOLATHE | PROSFAB
- materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500)
- build_path = /obj/item/device/mmi
- category = "Misc"
- sort_string = "VACBA"
-
-/datum/design/item/beacon
- name = "Bluespace tracking beacon design"
- id = "beacon"
- req_tech = list(TECH_BLUESPACE = 1)
- materials = list (DEFAULT_WALL_MATERIAL = 20, "glass" = 10)
- build_path = /obj/item/device/radio/beacon
- sort_string = "VADAA"
-
-/datum/design/item/gps
- name = "Triangulating device design"
- desc = "Triangulates approximate co-ordinates using a nearby satellite network."
- id = "gps"
- req_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 500)
- build_path = /obj/item/device/gps
- sort_string = "VADAB"
-
-/datum/design/item/beacon_locator
- name = "Beacon tracking pinpointer"
- desc = "Used to scan and locate signals on a particular frequency."
- id = "beacon_locator"
- req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 500)
- build_path = /obj/item/device/beacon_locator
- sort_string = "VADAC"
-
-/datum/design/item/bag_holding
- name = "'Bag of Holding', an infinite capacity bag prototype"
- desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy."
- id = "bag_holding"
- req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
- materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
- build_path = /obj/item/weapon/storage/backpack/holding
- sort_string = "VAEAA"
-
-/datum/design/item/dufflebag_holding
- name = "'DuffleBag of Holding', an infinite capacity dufflebag prototype"
- desc = "A minaturized prototype of the popular Bag of Holding, the Dufflebag of Holding is, functionally, identical to the bag of holding, but comes in a more stylish and compact form."
- id = "dufflebag_holding"
- req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
- materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
- build_path = /obj/item/weapon/storage/backpack/holding/duffle
- sort_string = "VAEAB"
-
-/datum/design/item/binaryencrypt
- name = "Binary encryption key"
- desc = "Allows for deciphering the binary channel on-the-fly."
- id = "binaryencrypt"
- req_tech = list(TECH_ILLEGAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 300, "glass" = 300)
- build_path = /obj/item/device/encryptionkey/binary
- sort_string = "VASAA"
-
-/datum/design/item/chameleon
- name = "Holographic equipment kit"
- desc = "A kit of dangerous, high-tech equipment with changeable looks."
- id = "chameleon"
- req_tech = list(TECH_ILLEGAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 500)
- build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
- sort_string = "VASBA"
-
-/datum/design/item/experimental_welder
- name = "Experimental welding tool"
- desc = "A welding tool that generate fuel for itself."
- id = "expwelder"
- req_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3, TECH_MATERIAL = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120, "phoron" = 100)
- build_path = /obj/item/weapon/weldingtool/experimental
- sort_string = "VASCA"
-
-/datum/design/item/hand_drill
- name = "Hand drill"
- desc = "A simple powered hand drill."
- id = "handdrill"
- req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100)
- build_path = /obj/item/weapon/screwdriver/power
- sort_string = "VASDA"
-
-/datum/design/item/jaws_life
- name = "Jaws of life"
- desc = "A set of jaws of life, compressed through the magic of science."
- id = "jawslife"
- req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100)
- build_path = /obj/item/weapon/crowbar/power
- sort_string = "VASEA"
-
-/datum/design/item/device/t_scanner_upg
- name = "Upgraded T-ray Scanner"
- desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
- id = "upgradedtscanner"
- req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 4, TECH_MATERIAL = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 500, "phoron" = 150)
- build_path = /obj/item/device/t_scanner/upgraded
- sort_string = "VASSA"
-
-
-/datum/design/item/device/t_scanner_adv
- name = "Advanced T-ray Scanner"
- desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
- id = "advancedtscanner"
- req_tech = list(TECH_MAGNET = 6, TECH_ENGINEERING = 6, TECH_MATERIAL = 6)
- materials = list(DEFAULT_WALL_MATERIAL = 1250, "phoron" = 500, "silver" = 50)
- build_path = /obj/item/device/t_scanner/advanced
- sort_string = "VASSB"
-/*
-CIRCUITS BELOW
-*/
-
-/datum/design/circuit
- build_type = IMPRINTER
- req_tech = list(TECH_DATA = 2)
- materials = list("glass" = 2000)
- chemicals = list("sacid" = 20)
- time = 5
-
-/datum/design/circuit/AssembleDesignName()
- ..()
- if(build_path)
- var/obj/item/weapon/circuitboard/C = build_path
- if(initial(C.board_type) == "machine")
- name = "Machine circuit design ([item_name])"
- else if(initial(C.board_type) == "computer")
- name = "Computer circuit design ([item_name])"
- else
- name = "Circuit design ([item_name])"
-
-/datum/design/circuit/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [item_name] circuit board."
-
-/datum/design/circuit/arcademachine
- name = "battle arcade machine"
- id = "arcademachine"
- req_tech = list(TECH_DATA = 1)
- build_path = /obj/item/weapon/circuitboard/arcade/battle
- sort_string = "MAAAA"
-
-/datum/design/circuit/oriontrail
- name = "orion trail arcade machine"
- id = "oriontrail"
- req_tech = list(TECH_DATA = 1)
- build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
- sort_string = "MAAAA"
-
-/datum/design/circuit/jukebox
- name = "jukebox"
- id = "jukebox"
- req_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
- build_path = /obj/item/weapon/circuitboard/jukebox
- sort_string = "MAAAB"
-
-/datum/design/circuit/seccamera
- name = "security camera monitor"
- id = "seccamera"
- build_path = /obj/item/weapon/circuitboard/security
- sort_string = "DAAAA"
-
-/datum/design/circuit/secdata
- name = "security records console"
- id = "sec_data"
- build_path = /obj/item/weapon/circuitboard/secure_data
- sort_string = "DABAA"
-
-/datum/design/circuit/prisonmanage
- name = "prisoner management console"
- id = "prisonmanage"
- build_path = /obj/item/weapon/circuitboard/prisoner
- sort_string = "DACAA"
-
-/datum/design/circuit/med_data
- name = "medical records console"
- id = "med_data"
- build_path = /obj/item/weapon/circuitboard/med_data
- sort_string = "FAAAA"
-
-/datum/design/circuit/operating
- name = "patient monitoring console"
- id = "operating"
- build_path = /obj/item/weapon/circuitboard/operating
- sort_string = "FACAA"
-
-/datum/design/circuit/scan_console
- name = "DNA machine"
- id = "scan_console"
- build_path = /obj/item/weapon/circuitboard/scan_consolenew
- sort_string = "FAGAA"
-
-/datum/design/circuit/clonecontrol
- name = "cloning control console"
- id = "clonecontrol"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
- build_path = /obj/item/weapon/circuitboard/cloning
- sort_string = "FAGAC"
-
-/datum/design/circuit/clonepod
- name = "clone pod"
- id = "clonepod"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
- build_path = /obj/item/weapon/circuitboard/clonepod
- sort_string = "FAGAE"
-
-/datum/design/circuit/clonescanner
- name = "cloning scanner"
- id = "clonescanner"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
- build_path = /obj/item/weapon/circuitboard/clonescanner
- sort_string = "FAGAG"
-
-/datum/design/circuit/crewconsole
- name = "crew monitoring console"
- id = "crewconsole"
- req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2)
- build_path = /obj/item/weapon/circuitboard/crew
- sort_string = "FAGAI"
-
-/datum/design/circuit/teleconsole
- name = "teleporter control console"
- id = "teleconsole"
- req_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 2)
- build_path = /obj/item/weapon/circuitboard/teleporter
- sort_string = "HAAAA"
-
-/datum/design/circuit/robocontrol
- name = "robotics control console"
- id = "robocontrol"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/robotics
- sort_string = "HAAAB"
-
-/datum/design/circuit/mechacontrol
- name = "exosuit control console"
- id = "mechacontrol"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/mecha_control
- sort_string = "HAAAC"
-
-/datum/design/circuit/rdconsole
- name = "R&D control console"
- id = "rdconsole"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/rdconsole
- sort_string = "HAAAE"
-
-/datum/design/circuit/aifixer
- name = "AI integrity restorer"
- id = "aifixer"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 2)
- build_path = /obj/item/weapon/circuitboard/aifixer
- sort_string = "HAAAF"
-
-/datum/design/circuit/comm_monitor
- name = "telecommunications monitoring console"
- id = "comm_monitor"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/comm_monitor
- sort_string = "HAACA"
-
-/datum/design/circuit/comm_server
- name = "telecommunications server monitoring console"
- id = "comm_server"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/comm_server
- sort_string = "HAACB"
-
-/datum/design/circuit/message_monitor
- name = "messaging monitor console"
- id = "message_monitor"
- req_tech = list(TECH_DATA = 5)
- build_path = /obj/item/weapon/circuitboard/message_monitor
- sort_string = "HAACC"
-
-/datum/design/circuit/aiupload
- name = "AI upload console"
- id = "aiupload"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/aiupload
- sort_string = "HAABA"
-
-/datum/design/circuit/borgupload
- name = "cyborg upload console"
- id = "borgupload"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/borgupload
- sort_string = "HAABB"
-
-/datum/design/circuit/destructive_analyzer
- name = "destructive analyzer"
- id = "destructive_analyzer"
- req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/destructive_analyzer
- sort_string = "HABAA"
-
-/datum/design/circuit/protolathe
- name = "protolathe"
- id = "protolathe"
- req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/protolathe
- sort_string = "HABAB"
-
-/datum/design/circuit/circuit_imprinter
- name = "circuit imprinter"
- id = "circuit_imprinter"
- req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/circuit_imprinter
- sort_string = "HABAC"
-
-/datum/design/circuit/autolathe
- name = "autolathe board"
- id = "autolathe"
- req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/autolathe
- sort_string = "HABAD"
-
-/datum/design/circuit/rdservercontrol
- name = "R&D server control console"
- id = "rdservercontrol"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/rdservercontrol
- sort_string = "HABBA"
-
-/datum/design/circuit/rdserver
- name = "R&D server"
- id = "rdserver"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/rdserver
- sort_string = "HABBB"
-
-/datum/design/circuit/mechfab
- name = "exosuit fabricator"
- id = "mechfab"
- req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
- build_path = /obj/item/weapon/circuitboard/mechfab
- sort_string = "HABAE"
-
-/datum/design/circuit/prosfab
- name = "prosthetics fabricator"
- id = "prosfab"
- req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
- build_path = /obj/item/weapon/circuitboard/prosthetics
- sort_string = "HABAF"
-
-/datum/design/circuit/mech_recharger
- name = "mech recharger"
- id = "mech_recharger"
- req_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/mech_recharger
- sort_string = "HACAA"
-
-/datum/design/circuit/recharge_station
- name = "cyborg recharge station"
- id = "recharge_station"
- req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/recharge_station
- sort_string = "HACAC"
-
-/datum/design/circuit/atmosalerts
- name = "atmosphere alert console"
- id = "atmosalerts"
- build_path = /obj/item/weapon/circuitboard/atmos_alert
- sort_string = "JAAAA"
-
-/datum/design/circuit/air_management
- name = "atmosphere monitoring console"
- id = "air_management"
- build_path = /obj/item/weapon/circuitboard/air_management
- sort_string = "JAAAB"
-
-/datum/design/circuit/rcon_console
- name = "RCON remote control console"
- id = "rcon_console"
- req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5)
- build_path = /obj/item/weapon/circuitboard/rcon_console
- sort_string = "JAAAC"
-
-/datum/design/circuit/dronecontrol
- name = "drone control console"
- id = "dronecontrol"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/drone_control
- sort_string = "JAAAD"
-
-/datum/design/circuit/powermonitor
- name = "power monitoring console"
- id = "powermonitor"
- build_path = /obj/item/weapon/circuitboard/powermonitor
- sort_string = "JAAAE"
-
-/datum/design/circuit/solarcontrol
- name = "solar control console"
- id = "solarcontrol"
- build_path = /obj/item/weapon/circuitboard/solar_control
- sort_string = "JAAAF"
-
-/datum/design/circuit/pacman
- name = "PACMAN-type generator"
- id = "pacman"
- req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINEERING = 3)
- build_path = /obj/item/weapon/circuitboard/pacman
- sort_string = "JBAAA"
-
-/datum/design/circuit/superpacman
- name = "SUPERPACMAN-type generator"
- id = "superpacman"
- req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
- build_path = /obj/item/weapon/circuitboard/pacman/super
- sort_string = "JBAAB"
-
-/datum/design/circuit/mrspacman
- name = "MRSPACMAN-type generator"
- id = "mrspacman"
- req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
- build_path = /obj/item/weapon/circuitboard/pacman/mrs
- sort_string = "JBAAC"
-
-/datum/design/circuit/batteryrack
- name = "cell rack PSU"
- id = "batteryrack"
- req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/batteryrack
- sort_string = "JBABA"
-
-/datum/design/circuit/smes_cell
- name = "'SMES' superconductive magnetic energy storage"
- desc = "Allows for the construction of circuit boards used to build a SMES."
- id = "smes_cell"
- req_tech = list(TECH_POWER = 7, TECH_ENGINEERING = 5)
- build_path = /obj/item/weapon/circuitboard/smes
- sort_string = "JBABB"
-
-/datum/design/circuit/grid_checker
- name = "power grid checker"
- desc = "Allows for the construction of circuit boards used to build a grid checker."
- id = "grid_checker"
- req_tech = list(TECH_POWER = 4, TECH_ENGINEERING = 3)
- build_path = /obj/item/weapon/circuitboard/grid_checker
- sort_string = "JBABC"
-
-/datum/design/circuit/breakerbox
- name = "breaker box"
- desc = "Allows for the construction of circuit boards used to build a breaker box."
- id = "breakerbox"
- req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3)
- build_path = /obj/item/weapon/circuitboard/breakerbox
- sort_string = "JBABD"
-
-/datum/design/circuit/gas_heater
- name = "gas heating system"
- id = "gasheater"
- req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
- sort_string = "JCAAA"
-
-/datum/design/circuit/gas_cooler
- name = "gas cooling system"
- id = "gascooler"
- req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
- sort_string = "JCAAB"
-
-/datum/design/circuit/secure_airlock
- name = "secure airlock electronics"
- desc = "Allows for the construction of a tamper-resistant airlock electronics."
- id = "securedoor"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/airlock_electronics/secure
- sort_string = "JDAAA"
-
-/datum/design/circuit/ordercomp
- name = "supply ordering console"
- id = "ordercomp"
- build_path = /obj/item/weapon/circuitboard/ordercomp
- sort_string = "KAAAA"
-
-/datum/design/circuit/supplycomp
- name = "supply control console"
- id = "supplycomp"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/circuitboard/supplycomp
- sort_string = "KAAAB"
-
-/datum/design/circuit/biogenerator
- name = "biogenerator"
- id = "biogenerator"
- req_tech = list(TECH_DATA = 2)
- build_path = /obj/item/weapon/circuitboard/biogenerator
- sort_string = "KBAAA"
-
-/datum/design/circuit/miningdrill
- name = "mining drill head"
- id = "mining drill head"
- req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
- build_path = /obj/item/weapon/circuitboard/miningdrill
- sort_string = "KCAAA"
-
-/datum/design/circuit/miningdrillbrace
- name = "mining drill brace"
- id = "mining drill brace"
- req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
- build_path = /obj/item/weapon/circuitboard/miningdrillbrace
- sort_string = "KCAAB"
-
-/datum/design/circuit/comconsole
- name = "communications console"
- id = "comconsole"
- build_path = /obj/item/weapon/circuitboard/communications
- sort_string = "LAAAA"
-
-/datum/design/circuit/idcardconsole
- name = "ID card modification console"
- id = "idcardconsole"
- build_path = /obj/item/weapon/circuitboard/card
- sort_string = "LAAAB"
-
-/datum/design/circuit/emp_data
- name = "employment records console"
- id = "emp_data"
- build_path = /obj/item/weapon/circuitboard/skills
- sort_string = "LAAAC"
-
-/datum/design/circuit/mecha
- req_tech = list(TECH_DATA = 3)
-
-/datum/design/circuit/mecha/AssembleDesignName()
- name = "Exosuit module circuit design ([name])"
-/datum/design/circuit/mecha/AssembleDesignDesc()
- desc = "Allows for the construction of \a [name] module."
-
-/datum/design/circuit/mecha/ripley_main
- name = "APLU 'Ripley' central control"
- id = "ripley_main"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
- sort_string = "NAAAA"
-
-/datum/design/circuit/mecha/ripley_peri
- name = "APLU 'Ripley' peripherals control"
- id = "ripley_peri"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
- sort_string = "NAAAB"
-
-/datum/design/circuit/mecha/odysseus_main
- name = "'Odysseus' central control"
- id = "odysseus_main"
- req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
- sort_string = "NAABA"
-
-/datum/design/circuit/mecha/odysseus_peri
- name = "'Odysseus' peripherals control"
- id = "odysseus_peri"
- req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
- sort_string = "NAABB"
-
-/datum/design/circuit/mecha/gygax_main
- name = "'Gygax' central control"
- id = "gygax_main"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
- sort_string = "NAACA"
-
-/datum/design/circuit/mecha/gygax_peri
- name = "'Gygax' peripherals control"
- id = "gygax_peri"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
- sort_string = "NAACB"
-
-/datum/design/circuit/mecha/gygax_targ
- name = "'Gygax' weapon control and targeting"
- id = "gygax_targ"
- req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
- sort_string = "NAACC"
-
-/datum/design/circuit/mecha/durand_main
- name = "'Durand' central control"
- id = "durand_main"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/main
- sort_string = "NAADA"
-
-/datum/design/circuit/mecha/durand_peri
- name = "'Durand' peripherals control"
- id = "durand_peri"
- req_tech = list(TECH_DATA = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
- sort_string = "NAADB"
-
-/datum/design/circuit/mecha/durand_targ
- name = "'Durand' weapon control and targeting"
- id = "durand_targ"
- req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
- sort_string = "NAADC"
-
-/datum/design/circuit/tcom
- req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
-
-/datum/design/circuit/tcom/AssembleDesignName()
- name = "Telecommunications machinery circuit design ([name])"
-/datum/design/circuit/tcom/AssembleDesignDesc()
- desc = "Allows for the construction of a telecommunications [name] circuit board."
-
-/datum/design/circuit/tcom/server
- name = "server mainframe"
- id = "tcom-server"
- build_path = /obj/item/weapon/circuitboard/telecomms/server
- sort_string = "PAAAA"
-
-/datum/design/circuit/tcom/processor
- name = "processor unit"
- id = "tcom-processor"
- build_path = /obj/item/weapon/circuitboard/telecomms/processor
- sort_string = "PAAAB"
-
-/datum/design/circuit/tcom/bus
- name = "bus mainframe"
- id = "tcom-bus"
- build_path = /obj/item/weapon/circuitboard/telecomms/bus
- sort_string = "PAAAC"
-
-/datum/design/circuit/tcom/hub
- name = "hub mainframe"
- id = "tcom-hub"
- build_path = /obj/item/weapon/circuitboard/telecomms/hub
- sort_string = "PAAAD"
-
-/datum/design/circuit/tcom/relay
- name = "relay mainframe"
- id = "tcom-relay"
- req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
- build_path = /obj/item/weapon/circuitboard/telecomms/relay
- sort_string = "PAAAE"
-
-/datum/design/circuit/tcom/broadcaster
- name = "subspace broadcaster"
- id = "tcom-broadcaster"
- req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
- sort_string = "PAAAF"
-
-/datum/design/circuit/tcom/receiver
- name = "subspace receiver"
- id = "tcom-receiver"
- req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/receiver
- sort_string = "PAAAG"
-
-/datum/design/circuit/tcom/exonet_node
- name = "exonet node"
- id = "tcom-exonet_node"
- req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
- build_path = /obj/item/weapon/circuitboard/telecomms/exonet_node
- sort_string = "PAAAH"
-
-/datum/design/circuit/shield
- req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
- materials = list("glass" = 2000, "gold" = 1000)
-
-/datum/design/circuit/shield/AssembleDesignName()
- name = "Shield generator circuit design ([name])"
-/datum/design/circuit/shield/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [name] shield generator."
-
-/datum/design/circuit/shield/bubble
- name = "bubble"
- id = "shield_gen"
- build_path = /obj/item/weapon/circuitboard/shield_gen
- sort_string = "VAAAA"
-
-/datum/design/circuit/shield/hull
- name = "hull"
- id = "shield_gen_ex"
- build_path = /obj/item/weapon/circuitboard/shield_gen_ex
- sort_string = "VAAAB"
-
-/datum/design/circuit/shield/capacitor
- name = "capacitor"
- desc = "Allows for the construction of a shield capacitor circuit board."
- id = "shield_cap"
- req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
- build_path = /obj/item/weapon/circuitboard/shield_cap
- sort_string = "VAAAC"
-
-/datum/design/circuit/aicore
- name = "AI core"
- id = "aicore"
- req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
- build_path = /obj/item/weapon/circuitboard/aicore
- sort_string = "XAAAA"
-
-/datum/design/aimodule
- build_type = IMPRINTER
- materials = list("glass" = 2000, "gold" = 100)
-
-/datum/design/aimodule/AssembleDesignName()
- name = "AI module design ([name])"
-
-/datum/design/aimodule/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI module."
-
-/datum/design/aimodule/safeguard
- name = "Safeguard"
- id = "safeguard"
- req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
- build_path = /obj/item/weapon/aiModule/safeguard
- sort_string = "XABAA"
-
-/datum/design/aimodule/onehuman
- name = "OneCrewMember"
- id = "onehuman"
- req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
- build_path = /obj/item/weapon/aiModule/oneHuman
- sort_string = "XABAB"
-
-/datum/design/aimodule/protectstation
- name = "ProtectStation"
- id = "protectstation"
- req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
- build_path = /obj/item/weapon/aiModule/protectStation
- sort_string = "XABAC"
-
-/datum/design/aimodule/notele
- name = "TeleporterOffline"
- id = "notele"
- req_tech = list(TECH_DATA = 3)
- build_path = /obj/item/weapon/aiModule/teleporterOffline
- sort_string = "XABAD"
-
-/datum/design/aimodule/quarantine
- name = "Quarantine"
- id = "quarantine"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
- build_path = /obj/item/weapon/aiModule/quarantine
- sort_string = "XABAE"
-
-/datum/design/aimodule/oxygen
- name = "OxygenIsToxicToHumans"
- id = "oxygen"
- req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
- build_path = /obj/item/weapon/aiModule/oxygen
- sort_string = "XABAF"
-
-/datum/design/aimodule/freeform
- name = "Freeform"
- id = "freeform"
- req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
- build_path = /obj/item/weapon/aiModule/freeform
- sort_string = "XABAG"
-
-/datum/design/aimodule/reset
- name = "Reset"
- id = "reset"
- req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
- build_path = /obj/item/weapon/aiModule/reset
- sort_string = "XAAAA"
-
-/datum/design/aimodule/purge
- name = "Purge"
- id = "purge"
- req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
- build_path = /obj/item/weapon/aiModule/purge
- sort_string = "XAAAB"
-
-// Core modules
-/datum/design/aimodule/core
- req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
-
-/datum/design/aimodule/core/AssembleDesignName()
- name = "AI core module design ([name])"
-
-/datum/design/aimodule/core/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI core module."
-
-/datum/design/aimodule/core/freeformcore
- name = "Freeform"
- id = "freeformcore"
- build_path = /obj/item/weapon/aiModule/freeformcore
- sort_string = "XACAA"
-
-/datum/design/aimodule/core/asimov
- name = "Asimov"
- id = "asimov"
- build_path = /obj/item/weapon/aiModule/asimov
- sort_string = "XACAB"
-
-/datum/design/aimodule/core/paladin
- name = "P.A.L.A.D.I.N."
- id = "paladin"
- build_path = /obj/item/weapon/aiModule/paladin
- sort_string = "XACAC"
-
-/datum/design/aimodule/core/tyrant
- name = "T.Y.R.A.N.T."
- id = "tyrant"
- req_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 2, TECH_MATERIAL = 6)
- build_path = /obj/item/weapon/aiModule/tyrant
- sort_string = "XACAD"
-
-/datum/design/item/pda
- name = "PDA design"
- desc = "Cheaper than whiny non-digital assistants."
- id = "pda"
- req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
- build_path = /obj/item/device/pda
- sort_string = "VAAAA"
-
-// Cartridges
-/datum/design/item/pda_cartridge
- req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
-
-/datum/design/item/pda_cartridge/AssembleDesignName()
- ..()
- name = "PDA accessory ([item_name])"
-
-/datum/design/item/pda_cartridge/cart_basic
- id = "cart_basic"
- build_path = /obj/item/weapon/cartridge
- sort_string = "VBAAA"
-
-/datum/design/item/pda_cartridge/engineering
- id = "cart_engineering"
- build_path = /obj/item/weapon/cartridge/engineering
- sort_string = "VBAAB"
-
-/datum/design/item/pda_cartridge/atmos
- id = "cart_atmos"
- build_path = /obj/item/weapon/cartridge/atmos
- sort_string = "VBAAC"
-
-/datum/design/item/pda_cartridge/medical
- id = "cart_medical"
- build_path = /obj/item/weapon/cartridge/medical
- sort_string = "VBAAD"
-
-/datum/design/item/pda_cartridge/chemistry
- id = "cart_chemistry"
- build_path = /obj/item/weapon/cartridge/chemistry
- sort_string = "VBAAE"
-
-/datum/design/item/pda_cartridge/security
- id = "cart_security"
- build_path = /obj/item/weapon/cartridge/security
- sort_string = "VBAAF"
-
-/datum/design/item/pda_cartridge/janitor
- id = "cart_janitor"
- build_path = /obj/item/weapon/cartridge/janitor
- sort_string = "VBAAG"
-
-/datum/design/item/pda_cartridge/science
- id = "cart_science"
- build_path = /obj/item/weapon/cartridge/signal/science
- sort_string = "VBAAH"
-
-/datum/design/item/pda_cartridge/quartermaster
- id = "cart_quartermaster"
- build_path = /obj/item/weapon/cartridge/quartermaster
- sort_string = "VBAAI"
-
-/datum/design/item/pda_cartridge/hop
- id = "cart_hop"
- build_path = /obj/item/weapon/cartridge/hop
- sort_string = "VBAAJ"
-
-/datum/design/item/pda_cartridge/hos
- id = "cart_hos"
- build_path = /obj/item/weapon/cartridge/hos
- sort_string = "VBAAK"
-
-/datum/design/item/pda_cartridge/ce
- id = "cart_ce"
- build_path = /obj/item/weapon/cartridge/ce
- sort_string = "VBAAL"
-
-/datum/design/item/pda_cartridge/cmo
- id = "cart_cmo"
- build_path = /obj/item/weapon/cartridge/cmo
- sort_string = "VBAAM"
-
-/datum/design/item/pda_cartridge/rd
- id = "cart_rd"
- build_path = /obj/item/weapon/cartridge/rd
- sort_string = "VBAAN"
-
-/datum/design/item/pda_cartridge/captain
- id = "cart_captain"
- build_path = /obj/item/weapon/cartridge/captain
- sort_string = "VBAAO"
-
-
-
-/datum/design/item/wirer
- name = "Custom wirer tool"
- id = "wirer"
- req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
- build_path = /obj/item/device/integrated_electronics/wirer
- sort_string = "VBVAA"
-
-/datum/design/item/debugger
- name = "Custom circuit debugger tool"
- id = "debugger"
- req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
- build_path = /obj/item/device/integrated_electronics/debugger
- sort_string = "VBVAB"
-
-
-
-/datum/design/item/custom_circuit_assembly
- name = "Small custom assembly"
- desc = "A customizable assembly for simple, small devices."
- id = "assembly-small"
- req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_POWER = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
- build_path = /obj/item/device/electronic_assembly
- sort_string = "VCAAA"
-
-/datum/design/item/custom_circuit_assembly/medium
- name = "Medium custom assembly"
- desc = "A customizable assembly suited for more ambitious mechanisms."
- id = "assembly-medium"
- req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 20000)
- build_path = /obj/item/device/electronic_assembly/medium
- sort_string = "VCAAB"
-
-/datum/design/item/custom_circuit_assembly/drone
- name = "Drone custom assembly"
- desc = "A customizable assembly optimized for autonomous devices."
- id = "assembly-drone"
- req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_POWER = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 30000)
- build_path = /obj/item/device/electronic_assembly/drone
- sort_string = "VCAAC"
-
-/datum/design/item/custom_circuit_assembly/large
- name = "Large custom assembly"
- desc = "A customizable assembly for large machines."
- id = "assembly-large"
- req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 40000)
- build_path = /obj/item/device/electronic_assembly/large
- sort_string = "VCAAD"
-
-/datum/design/item/custom_circuit_assembly/implant
- name = "Implant custom assembly"
- desc = "An customizable assembly for very small devices, implanted into living entities."
- id = "assembly-implant"
- req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 3, TECH_BIO = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 2000)
- build_path = /obj/item/weapon/implant/integrated_circuit
- sort_string = "VCAAE"
-
-/datum/design/item/custom_circuit_assembly/device
- name = "Device custom assembly"
- desc = "An customizable assembly designed to interface with other devices."
- id = "assembly-device"
- req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2)
- materials = list(DEFAULT_WALL_MATERIAL = 5000)
- build_path = /obj/item/device/assembly/electronic_assembly
- sort_string = "VCAAF"
-
-/datum/design/item/custom_circuit_printer
- name = "Portable integrated circuit printer"
- desc = "A portable(ish) printer for modular machines."
- id = "ic_printer"
- req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_DATA = 5)
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
- build_path = /obj/item/device/integrated_circuit_printer
- sort_string = "VCAAG"
-
-/datum/design/item/custom_circuit_printer_upgrade
- name = "Integrated circuit printer upgrade - advanced designs"
- desc = "Allows the integrated circuit printer to create advanced circuits"
- id = "ic_printer_upgrade_adv"
- req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 2000)
- build_path = /obj/item/weapon/disk/integrated_circuit/upgrade/advanced
- sort_string = "VCAAH"
-
-/datum/design/item/translator
- name = "handheld translator"
- id = "translator"
- req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000)
- build_path = /obj/item/device/universal_translator
- sort_string = "HABQA"
-
-/datum/design/item/ear_translator
- name = "earpiece translator"
- id = "ear_translator"
- req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5) //It's been hella miniaturized.
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "gold" = 1000)
- build_path = /obj/item/device/universal_translator/ear
- sort_string = "HABQB"
-
-/datum/design/item/xenoarch_multi_tool
- name = "xenoarcheology multitool"
- id = "xenoarch_multitool"
- req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3)
- build_path = /obj/item/device/xenoarch_multi_tool
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "uranium" = 500, "phoron" = 500)
- sort_string = "HABQC"
-
-/datum/design/item/excavationdrill
- name = "Excavation Drill"
- id = "excavationdrill"
- req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3)
- build_type = PROTOLATHE
- materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000)
- build_path = /obj/item/weapon/pickaxe/excavationdrill
- sort_string = "HABQD"
-
-/* Uncomment if someone makes these buildable
-/datum/design/circuit/general_alert
- name = "general alert console"
- id = "general_alert"
- build_path = /obj/item/weapon/circuitboard/general_alert
-
-// Removal of loyalty implants. Can't think of a way to add this to the config option.
-/datum/design/item/implant/loyalty
- name = "loyalty"
- id = "implant_loyal"
- req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000)
- build_path = /obj/item/weapon/implantcase/loyalty"
-
-/datum/design/rust_core_control
- name = "Circuit Design (RUST core controller)"
- desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine."
- id = "rust_core_control"
- req_tech = list("programming" = 4, "engineering" = 4)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20)
- build_path = "/obj/item/weapon/circuitboard/rust_core_control"
-
-datum/design/rust_fuel_control
- name = "Circuit Design (RUST fuel controller)"
- desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine."
- id = "rust_fuel_control"
- req_tech = list("programming" = 4, "engineering" = 4)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20)
- build_path = "/obj/item/weapon/circuitboard/rust_fuel_control"
-
-datum/design/rust_fuel_port
- name = "Internal circuitry (RUST fuel port)"
- desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine."
- id = "rust_fuel_port"
- req_tech = list("engineering" = 4, "materials" = 5)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20, "uranium" = 3000)
- build_path = "/obj/item/weapon/module/rust_fuel_port"
-
-datum/design/rust_fuel_compressor
- name = "Circuit Design (RUST fuel compressor)"
- desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine."
- id = "rust_fuel_compressor"
- req_tech = list("materials" = 6, "phorontech" = 4)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 1000)
- build_path = "/obj/item/weapon/module/rust_fuel_compressor"
-
-datum/design/rust_core
- name = "Internal circuitry (RUST tokamak core)"
- desc = "The circuit board that for a RUST-pattern tokamak fusion core."
- id = "pacman"
- req_tech = list(bluespace = 3, phorontech = 4, magnets = 5, powerstorage = 6)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 2000)
- build_path = "/obj/item/weapon/circuitboard/rust_core"
-
-datum/design/rust_injector
- name = "Internal circuitry (RUST tokamak core)"
- desc = "The circuit board that for a RUST-pattern particle accelerator."
- id = "pacman"
- req_tech = list(powerstorage = 3, engineering = 4, phorontech = 4, materials = 6)
- build_type = IMPRINTER
- materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "uranium" = 2000)
- build_path = "/obj/item/weapon/circuitboard/rust_core"
-*/
+ sort_string = "GAAAB"
\ No newline at end of file
diff --git a/code/modules/research/designs/ai_modules.dm b/code/modules/research/designs/ai_modules.dm
new file mode 100644
index 0000000000..eae26ea386
--- /dev/null
+++ b/code/modules/research/designs/ai_modules.dm
@@ -0,0 +1,117 @@
+/datum/design/aimodule
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "gold" = 100)
+
+/datum/design/aimodule/AssembleDesignName()
+ name = "AI module design ([name])"
+
+/datum/design/aimodule/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI module."
+
+/datum/design/aimodule/safeguard
+ name = "Safeguard"
+ id = "safeguard"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/safeguard
+ sort_string = "XABAA"
+
+/datum/design/aimodule/onehuman
+ name = "OneCrewMember"
+ id = "onehuman"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/oneHuman
+ sort_string = "XABAB"
+
+/datum/design/aimodule/protectstation
+ name = "ProtectStation"
+ id = "protectstation"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/protectStation
+ sort_string = "XABAC"
+
+/datum/design/aimodule/notele
+ name = "TeleporterOffline"
+ id = "notele"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/aiModule/teleporterOffline
+ sort_string = "XABAD"
+
+/datum/design/aimodule/quarantine
+ name = "Quarantine"
+ id = "quarantine"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/quarantine
+ sort_string = "XABAE"
+
+/datum/design/aimodule/oxygen
+ name = "OxygenIsToxicToHumans"
+ id = "oxygen"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/oxygen
+ sort_string = "XABAF"
+
+/datum/design/aimodule/freeform
+ name = "Freeform"
+ id = "freeform"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/freeform
+ sort_string = "XABAG"
+
+/datum/design/aimodule/reset
+ name = "Reset"
+ id = "reset"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/reset
+ sort_string = "XAAAZ" // Duplicate string, really need to redo this whole thing
+
+/datum/design/aimodule/purge
+ name = "Purge"
+ id = "purge"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/purge
+ sort_string = "XAAAB"
+
+// Core modules
+/datum/design/aimodule/core
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+
+/datum/design/aimodule/core/AssembleDesignName()
+ name = "AI core module design ([name])"
+
+/datum/design/aimodule/core/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI core module."
+
+/datum/design/aimodule/core/freeformcore
+ name = "Freeform"
+ id = "freeformcore"
+ build_path = /obj/item/weapon/aiModule/freeformcore
+ sort_string = "XACAA"
+
+/datum/design/aimodule/core/asimov
+ name = "Asimov"
+ id = "asimov"
+ build_path = /obj/item/weapon/aiModule/asimov
+ sort_string = "XACAB"
+
+/datum/design/aimodule/core/paladin
+ name = "P.A.L.A.D.I.N."
+ id = "paladin"
+ build_path = /obj/item/weapon/aiModule/paladin
+ sort_string = "XACAC"
+
+/datum/design/aimodule/core/tyrant
+ name = "T.Y.R.A.N.T."
+ id = "tyrant"
+ req_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 2, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/tyrant
+ sort_string = "XACAD"
+
+// AI file, AI tool
+/datum/design/item/intellicard
+ name = "'intelliCore', AI preservation and transportation system"
+ desc = "Allows for the construction of an intelliCore."
+ id = "intellicore"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ materials = list("glass" = 1000, "gold" = 200)
+ build_path = /obj/item/device/aicard
+ sort_string = "VACAA"
\ No newline at end of file
diff --git a/code/modules/research/designs/circuit_assembly.dm b/code/modules/research/designs/circuit_assembly.dm
new file mode 100644
index 0000000000..9f20032445
--- /dev/null
+++ b/code/modules/research/designs/circuit_assembly.dm
@@ -0,0 +1,89 @@
+/datum/design/item/wirer
+ name = "Custom wirer tool"
+ id = "wirer"
+ req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
+ build_path = /obj/item/device/integrated_electronics/wirer
+ sort_string = "VBVAA"
+
+/datum/design/item/debugger
+ name = "Custom circuit debugger tool"
+ id = "debugger"
+ req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
+ build_path = /obj/item/device/integrated_electronics/debugger
+ sort_string = "VBVAB"
+
+
+
+/datum/design/item/custom_circuit_assembly
+ name = "Small custom assembly"
+ desc = "A customizable assembly for simple, small devices."
+ id = "assembly-small"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ build_path = /obj/item/device/electronic_assembly
+ sort_string = "VCAAA"
+
+/datum/design/item/custom_circuit_assembly/medium
+ name = "Medium custom assembly"
+ desc = "A customizable assembly suited for more ambitious mechanisms."
+ id = "assembly-medium"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 20000)
+ build_path = /obj/item/device/electronic_assembly/medium
+ sort_string = "VCAAB"
+
+/datum/design/item/custom_circuit_assembly/drone
+ name = "Drone custom assembly"
+ desc = "A customizable assembly optimized for autonomous devices."
+ id = "assembly-drone"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 4, TECH_POWER = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 30000)
+ build_path = /obj/item/device/electronic_assembly/drone
+ sort_string = "VCAAC"
+
+/datum/design/item/custom_circuit_assembly/large
+ name = "Large custom assembly"
+ desc = "A customizable assembly for large machines."
+ id = "assembly-large"
+ req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 40000)
+ build_path = /obj/item/device/electronic_assembly/large
+ sort_string = "VCAAD"
+
+/datum/design/item/custom_circuit_assembly/implant
+ name = "Implant custom assembly"
+ desc = "An customizable assembly for very small devices, implanted into living entities."
+ id = "assembly-implant"
+ req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 3, TECH_BIO = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000)
+ build_path = /obj/item/weapon/implant/integrated_circuit
+ sort_string = "VCAAE"
+
+/datum/design/item/custom_circuit_assembly/device
+ name = "Device custom assembly"
+ desc = "An customizable assembly designed to interface with other devices."
+ id = "assembly-device"
+ req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000)
+ build_path = /obj/item/device/assembly/electronic_assembly
+ sort_string = "VCAAF"
+
+/datum/design/item/custom_circuit_printer
+ name = "Portable integrated circuit printer"
+ desc = "A portable(ish) printer for modular machines."
+ id = "ic_printer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_DATA = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ build_path = /obj/item/device/integrated_circuit_printer
+ sort_string = "VCAAG"
+
+/datum/design/item/custom_circuit_printer_upgrade
+ name = "Integrated circuit printer upgrade - advanced designs"
+ desc = "Allows the integrated circuit printer to create advanced circuits"
+ id = "ic_printer_upgrade_adv"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000)
+ build_path = /obj/item/weapon/disk/integrated_circuit/upgrade/advanced
+ sort_string = "VCAAH"
\ No newline at end of file
diff --git a/code/modules/research/designs/circuits.dm b/code/modules/research/designs/circuits.dm
new file mode 100644
index 0000000000..e00a47786d
--- /dev/null
+++ b/code/modules/research/designs/circuits.dm
@@ -0,0 +1,597 @@
+/*
+CIRCUITS BELOW
+*/
+
+/datum/design/circuit
+ build_type = IMPRINTER
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 2000)
+ chemicals = list("sacid" = 20)
+ time = 5
+
+/datum/design/circuit/AssembleDesignName()
+ ..()
+ if(build_path)
+ var/obj/item/weapon/circuitboard/C = build_path
+ if(initial(C.board_type) == "machine")
+ name = "Machine circuit design ([item_name])"
+ else if(initial(C.board_type) == "computer")
+ name = "Computer circuit design ([item_name])"
+ else
+ name = "Circuit design ([item_name])"
+
+/datum/design/circuit/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [item_name] circuit board."
+
+/datum/design/circuit/arcademachine
+ name = "battle arcade machine"
+ id = "arcademachine"
+ req_tech = list(TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/arcade/battle
+ sort_string = "MAAAA"
+
+/datum/design/circuit/oriontrail
+ name = "orion trail arcade machine"
+ id = "oriontrail"
+ req_tech = list(TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
+ sort_string = "MAAAZ" // Duplicate string, really need to redo this whole thing
+
+/datum/design/circuit/jukebox
+ name = "jukebox"
+ id = "jukebox"
+ req_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/jukebox
+ sort_string = "MAAAB"
+
+/datum/design/circuit/seccamera
+ name = "security camera monitor"
+ id = "seccamera"
+ build_path = /obj/item/weapon/circuitboard/security
+ sort_string = "DAAAZ" // Duplicate string, really need to redo this whole thing
+
+/datum/design/circuit/secdata
+ name = "security records console"
+ id = "sec_data"
+ build_path = /obj/item/weapon/circuitboard/secure_data
+ sort_string = "DABAA"
+
+/datum/design/circuit/prisonmanage
+ name = "prisoner management console"
+ id = "prisonmanage"
+ build_path = /obj/item/weapon/circuitboard/prisoner
+ sort_string = "DACAA"
+
+/datum/design/circuit/med_data
+ name = "medical records console"
+ id = "med_data"
+ build_path = /obj/item/weapon/circuitboard/med_data
+ sort_string = "FAAAA"
+
+/datum/design/circuit/operating
+ name = "patient monitoring console"
+ id = "operating"
+ build_path = /obj/item/weapon/circuitboard/operating
+ sort_string = "FACAA"
+
+/datum/design/circuit/scan_console
+ name = "DNA machine"
+ id = "scan_console"
+ build_path = /obj/item/weapon/circuitboard/scan_consolenew
+ sort_string = "FAGAA"
+
+/datum/design/circuit/clonecontrol
+ name = "cloning control console"
+ id = "clonecontrol"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/cloning
+ sort_string = "FAGAC"
+
+/datum/design/circuit/clonepod
+ name = "clone pod"
+ id = "clonepod"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonepod
+ sort_string = "FAGAE"
+
+/datum/design/circuit/clonescanner
+ name = "cloning scanner"
+ id = "clonescanner"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonescanner
+ sort_string = "FAGAG"
+
+/datum/design/circuit/crewconsole
+ name = "crew monitoring console"
+ id = "crewconsole"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/crew
+ sort_string = "FAGAI"
+
+/datum/design/circuit/teleconsole
+ name = "teleporter control console"
+ id = "teleconsole"
+ req_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/teleporter
+ sort_string = "HAAAA"
+
+/datum/design/circuit/robocontrol
+ name = "robotics control console"
+ id = "robocontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/robotics
+ sort_string = "HAAAB"
+
+/datum/design/circuit/mechacontrol
+ name = "exosuit control console"
+ id = "mechacontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/mecha_control
+ sort_string = "HAAAC"
+
+/datum/design/circuit/rdconsole
+ name = "R&D control console"
+ id = "rdconsole"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/rdconsole
+ sort_string = "HAAAE"
+
+/datum/design/circuit/aifixer
+ name = "AI integrity restorer"
+ id = "aifixer"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/aifixer
+ sort_string = "HAAAF"
+
+/datum/design/circuit/comm_monitor
+ name = "telecommunications monitoring console"
+ id = "comm_monitor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_monitor
+ sort_string = "HAACA"
+
+/datum/design/circuit/comm_server
+ name = "telecommunications server monitoring console"
+ id = "comm_server"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_server
+ sort_string = "HAACB"
+
+/datum/design/circuit/message_monitor
+ name = "messaging monitor console"
+ id = "message_monitor"
+ req_tech = list(TECH_DATA = 5)
+ build_path = /obj/item/weapon/circuitboard/message_monitor
+ sort_string = "HAACC"
+
+/datum/design/circuit/aiupload
+ name = "AI upload console"
+ id = "aiupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/aiupload
+ sort_string = "HAABA"
+
+/datum/design/circuit/borgupload
+ name = "cyborg upload console"
+ id = "borgupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/borgupload
+ sort_string = "HAABB"
+
+/datum/design/circuit/destructive_analyzer
+ name = "destructive analyzer"
+ id = "destructive_analyzer"
+ req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/destructive_analyzer
+ sort_string = "HABAA"
+
+/datum/design/circuit/protolathe
+ name = "protolathe"
+ id = "protolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/protolathe
+ sort_string = "HABAB"
+
+/datum/design/circuit/circuit_imprinter
+ name = "circuit imprinter"
+ id = "circuit_imprinter"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/circuit_imprinter
+ sort_string = "HABAC"
+
+/datum/design/circuit/autolathe
+ name = "autolathe board"
+ id = "autolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/autolathe
+ sort_string = "HABAD"
+
+/datum/design/circuit/rdservercontrol
+ name = "R&D server control console"
+ id = "rdservercontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdservercontrol
+ sort_string = "HABBA"
+
+/datum/design/circuit/rdserver
+ name = "R&D server"
+ id = "rdserver"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdserver
+ sort_string = "HABBB"
+
+/datum/design/circuit/mechfab
+ name = "exosuit fabricator"
+ id = "mechfab"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/mechfab
+ sort_string = "HABAE"
+
+/datum/design/circuit/prosfab
+ name = "prosthetics fabricator"
+ id = "prosfab"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/prosthetics
+ sort_string = "HABAF"
+
+/datum/design/circuit/mech_recharger
+ name = "mech recharger"
+ id = "mech_recharger"
+ req_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/mech_recharger
+ sort_string = "HACAA"
+
+/datum/design/circuit/recharge_station
+ name = "cyborg recharge station"
+ id = "recharge_station"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/recharge_station
+ sort_string = "HACAC"
+
+/datum/design/circuit/atmosalerts
+ name = "atmosphere alert console"
+ id = "atmosalerts"
+ build_path = /obj/item/weapon/circuitboard/atmos_alert
+ sort_string = "JAAAA"
+
+/datum/design/circuit/air_management
+ name = "atmosphere monitoring console"
+ id = "air_management"
+ build_path = /obj/item/weapon/circuitboard/air_management
+ sort_string = "JAAAB"
+
+/datum/design/circuit/rcon_console
+ name = "RCON remote control console"
+ id = "rcon_console"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5)
+ build_path = /obj/item/weapon/circuitboard/rcon_console
+ sort_string = "JAAAC"
+
+/datum/design/circuit/dronecontrol
+ name = "drone control console"
+ id = "dronecontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/drone_control
+ sort_string = "JAAAD"
+
+/datum/design/circuit/powermonitor
+ name = "power monitoring console"
+ id = "powermonitor"
+ build_path = /obj/item/weapon/circuitboard/powermonitor
+ sort_string = "JAAAE"
+
+/datum/design/circuit/solarcontrol
+ name = "solar control console"
+ id = "solarcontrol"
+ build_path = /obj/item/weapon/circuitboard/solar_control
+ sort_string = "JAAAF"
+
+/datum/design/circuit/pacman
+ name = "PACMAN-type generator"
+ id = "pacman"
+ req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/pacman
+ sort_string = "JBAAA"
+
+/datum/design/circuit/superpacman
+ name = "SUPERPACMAN-type generator"
+ id = "superpacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
+ build_path = /obj/item/weapon/circuitboard/pacman/super
+ sort_string = "JBAAB"
+
+/datum/design/circuit/mrspacman
+ name = "MRSPACMAN-type generator"
+ id = "mrspacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
+ build_path = /obj/item/weapon/circuitboard/pacman/mrs
+ sort_string = "JBAAC"
+
+/datum/design/circuit/batteryrack
+ name = "cell rack PSU"
+ id = "batteryrack"
+ req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/batteryrack
+ sort_string = "JBABA"
+
+/datum/design/circuit/smes_cell
+ name = "'SMES' superconductive magnetic energy storage"
+ desc = "Allows for the construction of circuit boards used to build a SMES."
+ id = "smes_cell"
+ req_tech = list(TECH_POWER = 7, TECH_ENGINEERING = 5)
+ build_path = /obj/item/weapon/circuitboard/smes
+ sort_string = "JBABB"
+
+/datum/design/circuit/grid_checker
+ name = "power grid checker"
+ desc = "Allows for the construction of circuit boards used to build a grid checker."
+ id = "grid_checker"
+ req_tech = list(TECH_POWER = 4, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/grid_checker
+ sort_string = "JBABC"
+
+/datum/design/circuit/breakerbox
+ name = "breaker box"
+ desc = "Allows for the construction of circuit boards used to build a breaker box."
+ id = "breakerbox"
+ req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/breakerbox
+ sort_string = "JBABD"
+
+/datum/design/circuit/gas_heater
+ name = "gas heating system"
+ id = "gasheater"
+ req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
+ sort_string = "JCAAA"
+
+/datum/design/circuit/gas_cooler
+ name = "gas cooling system"
+ id = "gascooler"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
+ sort_string = "JCAAB"
+
+/datum/design/circuit/secure_airlock
+ name = "secure airlock electronics"
+ desc = "Allows for the construction of a tamper-resistant airlock electronics."
+ id = "securedoor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/airlock_electronics/secure
+ sort_string = "JDAAA"
+
+/datum/design/circuit/ordercomp
+ name = "supply ordering console"
+ id = "ordercomp"
+ build_path = /obj/item/weapon/circuitboard/ordercomp
+ sort_string = "KAAAY" // Duplicate string, really need to redo this whole thing
+
+/datum/design/circuit/supplycomp
+ name = "supply control console"
+ id = "supplycomp"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/supplycomp
+ sort_string = "KAAAZ" // Duplicate string, really need to redo this whole thing
+
+/datum/design/circuit/biogenerator
+ name = "biogenerator"
+ id = "biogenerator"
+ req_tech = list(TECH_DATA = 2)
+ build_path = /obj/item/weapon/circuitboard/biogenerator
+ sort_string = "KBAAA"
+
+/datum/design/circuit/miningdrill
+ name = "mining drill head"
+ id = "mining drill head"
+ req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
+ build_path = /obj/item/weapon/circuitboard/miningdrill
+ sort_string = "KCAAA"
+
+/datum/design/circuit/miningdrillbrace
+ name = "mining drill brace"
+ id = "mining drill brace"
+ req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
+ build_path = /obj/item/weapon/circuitboard/miningdrillbrace
+ sort_string = "KCAAB"
+
+/datum/design/circuit/comconsole
+ name = "communications console"
+ id = "comconsole"
+ build_path = /obj/item/weapon/circuitboard/communications
+ sort_string = "LAAAA"
+
+/datum/design/circuit/idcardconsole
+ name = "ID card modification console"
+ id = "idcardconsole"
+ build_path = /obj/item/weapon/circuitboard/card
+ sort_string = "LAAAB"
+
+/datum/design/circuit/emp_data
+ name = "employment records console"
+ id = "emp_data"
+ build_path = /obj/item/weapon/circuitboard/skills
+ sort_string = "LAAAC"
+
+/datum/design/circuit/mecha
+ req_tech = list(TECH_DATA = 3)
+
+/datum/design/circuit/mecha/AssembleDesignName()
+ name = "Exosuit module circuit design ([name])"
+/datum/design/circuit/mecha/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [name] module."
+
+/datum/design/circuit/mecha/ripley_main
+ name = "APLU 'Ripley' central control"
+ id = "ripley_main"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
+ sort_string = "NAAAA"
+
+/datum/design/circuit/mecha/ripley_peri
+ name = "APLU 'Ripley' peripherals control"
+ id = "ripley_peri"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
+ sort_string = "NAAAB"
+
+/datum/design/circuit/mecha/odysseus_main
+ name = "'Odysseus' central control"
+ id = "odysseus_main"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
+ sort_string = "NAABA"
+
+/datum/design/circuit/mecha/odysseus_peri
+ name = "'Odysseus' peripherals control"
+ id = "odysseus_peri"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
+ sort_string = "NAABB"
+
+/datum/design/circuit/mecha/gygax_main
+ name = "'Gygax' central control"
+ id = "gygax_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
+ sort_string = "NAACA"
+
+/datum/design/circuit/mecha/gygax_peri
+ name = "'Gygax' peripherals control"
+ id = "gygax_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
+ sort_string = "NAACB"
+
+/datum/design/circuit/mecha/gygax_targ
+ name = "'Gygax' weapon control and targeting"
+ id = "gygax_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
+ sort_string = "NAACC"
+
+/datum/design/circuit/mecha/durand_main
+ name = "'Durand' central control"
+ id = "durand_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/main
+ sort_string = "NAADA"
+
+/datum/design/circuit/mecha/durand_peri
+ name = "'Durand' peripherals control"
+ id = "durand_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
+ sort_string = "NAADB"
+
+/datum/design/circuit/mecha/durand_targ
+ name = "'Durand' weapon control and targeting"
+ id = "durand_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
+ sort_string = "NAADC"
+
+/datum/design/circuit/tcom
+ req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
+
+/datum/design/circuit/tcom/AssembleDesignName()
+ name = "Telecommunications machinery circuit design ([name])"
+/datum/design/circuit/tcom/AssembleDesignDesc()
+ desc = "Allows for the construction of a telecommunications [name] circuit board."
+
+/datum/design/circuit/tcom/server
+ name = "server mainframe"
+ id = "tcom-server"
+ build_path = /obj/item/weapon/circuitboard/telecomms/server
+ sort_string = "PAAAA"
+
+/datum/design/circuit/tcom/processor
+ name = "processor unit"
+ id = "tcom-processor"
+ build_path = /obj/item/weapon/circuitboard/telecomms/processor
+ sort_string = "PAAAB"
+
+/datum/design/circuit/tcom/bus
+ name = "bus mainframe"
+ id = "tcom-bus"
+ build_path = /obj/item/weapon/circuitboard/telecomms/bus
+ sort_string = "PAAAC"
+
+/datum/design/circuit/tcom/hub
+ name = "hub mainframe"
+ id = "tcom-hub"
+ build_path = /obj/item/weapon/circuitboard/telecomms/hub
+ sort_string = "PAAAD"
+
+/datum/design/circuit/tcom/relay
+ name = "relay mainframe"
+ id = "tcom-relay"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
+ build_path = /obj/item/weapon/circuitboard/telecomms/relay
+ sort_string = "PAAAE"
+
+/datum/design/circuit/tcom/broadcaster
+ name = "subspace broadcaster"
+ id = "tcom-broadcaster"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
+ sort_string = "PAAAF"
+
+/datum/design/circuit/tcom/receiver
+ name = "subspace receiver"
+ id = "tcom-receiver"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/receiver
+ sort_string = "PAAAG"
+
+/datum/design/circuit/tcom/exonet_node
+ name = "exonet node"
+ id = "tcom-exonet_node"
+ req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
+ build_path = /obj/item/weapon/circuitboard/telecomms/exonet_node
+ sort_string = "PAAAH"
+
+/datum/design/circuit/shield
+ req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
+ materials = list("glass" = 2000, "gold" = 1000)
+
+/datum/design/circuit/shield/AssembleDesignName()
+ name = "Shield generator circuit design ([name])"
+/datum/design/circuit/shield/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [name] shield generator."
+
+/datum/design/circuit/shield/bubble
+ name = "bubble"
+ id = "shield_gen"
+ build_path = /obj/item/weapon/circuitboard/shield_gen
+ sort_string = "VAAAZ" // Duplicate string, really need to redo this whole thing
+
+/datum/design/circuit/shield/hull
+ name = "hull"
+ id = "shield_gen_ex"
+ build_path = /obj/item/weapon/circuitboard/shield_gen_ex
+ sort_string = "VAAAB"
+
+/datum/design/circuit/shield/capacitor
+ name = "capacitor"
+ desc = "Allows for the construction of a shield capacitor circuit board."
+ id = "shield_cap"
+ req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
+ build_path = /obj/item/weapon/circuitboard/shield_cap
+ sort_string = "VAAAC"
+
+/datum/design/circuit/aicore
+ name = "AI core"
+ id = "aicore"
+ req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/aicore
+ sort_string = "XAAAA"
+
+
+/* I have no idea how this was even running before, but it doesn't seem to be necessary.
+///////////////////////////////////
+/////////Shield Generators/////////
+///////////////////////////////////
+/datum/design/circuit/shield
+ req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
+ materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
+*/
\ No newline at end of file
diff --git a/code/modules/research/designs/illegal.dm b/code/modules/research/designs/illegal.dm
new file mode 100644
index 0000000000..1542e929b6
--- /dev/null
+++ b/code/modules/research/designs/illegal.dm
@@ -0,0 +1,19 @@
+// Yeah yeah, vague file name. Basically a misc folder for antag things that RnD can make.
+
+/datum/design/item/binaryencrypt
+ name = "Binary encryption key"
+ desc = "Allows for deciphering the binary channel on-the-fly."
+ id = "binaryencrypt"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 300, "glass" = 300)
+ build_path = /obj/item/device/encryptionkey/binary
+ sort_string = "VASAA"
+
+/datum/design/item/chameleon
+ name = "Holographic equipment kit"
+ desc = "A kit of dangerous, high-tech equipment with changeable looks."
+ id = "chameleon"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 500)
+ build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
+ sort_string = "VASBA"
\ No newline at end of file
diff --git a/code/modules/research/designs/medical.dm b/code/modules/research/designs/medical.dm
new file mode 100644
index 0000000000..8e821fe0fe
--- /dev/null
+++ b/code/modules/research/designs/medical.dm
@@ -0,0 +1,186 @@
+/datum/design/item/medical
+ materials = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 20)
+
+/datum/design/item/medical/AssembleDesignName()
+ ..()
+ name = "Biotech device prototype ([item_name])"
+
+/datum/design/item/medical/robot_scanner
+ desc = "A hand-held scanner able to diagnose robotic injuries."
+ id = "robot_scanner"
+ req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINEERING = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
+ build_path = /obj/item/device/robotanalyzer
+ sort_string = "MACFA"
+
+/datum/design/item/medical/mass_spectrometer
+ desc = "A device for analyzing chemicals in blood."
+ id = "mass_spectrometer"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
+ build_path = /obj/item/device/mass_spectrometer
+ sort_string = "MACAA"
+
+/datum/design/item/medical/adv_mass_spectrometer
+ desc = "A device for analyzing chemicals in blood and their quantities."
+ id = "adv_mass_spectrometer"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
+ build_path = /obj/item/device/mass_spectrometer/adv
+ sort_string = "MACAB"
+
+/datum/design/item/medical/reagent_scanner
+ desc = "A device for identifying chemicals."
+ id = "reagent_scanner"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
+ build_path = /obj/item/device/reagent_scanner
+ sort_string = "MACBA"
+
+/datum/design/item/medical/adv_reagent_scanner
+ desc = "A device for identifying chemicals and their proportions."
+ id = "adv_reagent_scanner"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
+ build_path = /obj/item/device/reagent_scanner/adv
+ sort_string = "MACBB"
+
+/datum/design/item/beaker/AssembleDesignName()
+ name = "Beaker prototype ([item_name])"
+
+/datum/design/item/beaker/noreact
+ name = "cryostasis"
+ desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
+ id = "splitbeaker"
+ req_tech = list(TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 3000)
+ build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact
+ sort_string = "MADAA"
+
+/datum/design/item/beaker/bluespace
+ name = TECH_BLUESPACE
+ desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
+ id = "bluespacebeaker"
+ req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6)
+ materials = list(DEFAULT_WALL_MATERIAL = 3000, "phoron" = 3000, "diamond" = 500)
+ build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
+ sort_string = "MADAB"
+
+/datum/design/item/medical/nanopaste
+ desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
+ id = "nanopaste"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000)
+ build_path = /obj/item/stack/nanopaste
+ sort_string = "MBAAA"
+
+/datum/design/item/medical/scalpel_laser1
+ name = "Basic Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
+ id = "scalpel_laser1"
+ req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_MAGNET = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500)
+ build_path = /obj/item/weapon/surgical/scalpel/laser1
+ sort_string = "MBBAA"
+
+/datum/design/item/medical/scalpel_laser2
+ name = "Improved Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
+ id = "scalpel_laser2"
+ req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_MAGNET = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2500)
+ build_path = /obj/item/weapon/surgical/scalpel/laser2
+ sort_string = "MBBAB"
+
+/datum/design/item/medical/scalpel_laser3
+ name = "Advanced Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
+ id = "scalpel_laser3"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2000, "gold" = 1500)
+ build_path = /obj/item/weapon/surgical/scalpel/laser3
+ sort_string = "MBBAC"
+
+/datum/design/item/medical/scalpel_manager
+ name = "Incision Management System"
+ desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
+ id = "scalpel_manager"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4)
+ materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 1500, "gold" = 1500, "diamond" = 750)
+ build_path = /obj/item/weapon/surgical/scalpel/manager
+ sort_string = "MBBAD"
+
+/datum/design/item/medical/bone_clamp
+ name = "Bone Clamp"
+ desc = "A miracle of modern science, this tool rapidly knits together bone, without the need for bone gel."
+ id = "bone_clamp"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 5, TECH_MAGNET = 4, TECH_DATA = 4)
+ materials = list (DEFAULT_WALL_MATERIAL = 12500, "glass" = 7500, "silver" = 2500)
+ build_path = /obj/item/weapon/surgical/bone_clamp
+ sort_string = "MBBAE"
+
+/datum/design/item/medical/advanced_roller
+ name = "advanced roller bed"
+ desc = "A more advanced version of the regular roller bed, with inbuilt surgical stabilisers and an improved folding system."
+ id = "roller_bed"
+ req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 3, TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "phoron" = 2000)
+ build_path = /obj/item/roller/adv
+ sort_string = "MBBAF"
+
+/datum/design/item/medical/improved_analyzer
+ name = "improved health analyzer"
+ desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels."
+ id = "improved_analyzer"
+ req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500)
+ build_path = /obj/item/device/healthanalyzer/improved
+ sort_string = "MBBAG"
+
+/datum/design/item/implant
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/datum/design/item/implant/AssembleDesignName()
+ ..()
+ name = "Implantable biocircuit design ([item_name])"
+
+/datum/design/item/implant/chemical
+ name = "chemical"
+ id = "implant_chem"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
+ build_path = /obj/item/weapon/implantcase/chem
+ sort_string = "MFAAA"
+
+/datum/design/item/implant/freedom
+ name = "freedom"
+ id = "implant_free"
+ req_tech = list(TECH_ILLEGAL = 2, TECH_BIO = 3)
+ build_path = /obj/item/weapon/implantcase/freedom
+ sort_string = "MFAAB"
+
+// These are in here because Robotics is close enough to Medical and I don't want to make a new brains.dm file
+/datum/design/item/dronebrain
+ name = "Robotic intelligence circuit"
+ id = "dronebrain"
+ req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 5, TECH_DATA = 4)
+ build_type = PROTOLATHE | PROSFAB
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500)
+ build_path = /obj/item/device/mmi/digital/robot
+ category = "Misc"
+ sort_string = "VACAC"
+
+/datum/design/item/posibrain
+ name = "Positronic brain"
+ id = "posibrain"
+ req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
+ build_type = PROTOLATHE | PROSFAB
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
+ build_path = /obj/item/device/mmi/digital/posibrain
+ category = "Misc"
+ sort_string = "VACAB"
+
+/datum/design/item/mmi
+ name = "Man-machine interface"
+ id = "mmi"
+ req_tech = list(TECH_DATA = 2, TECH_BIO = 3)
+ build_type = PROTOLATHE | PROSFAB
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500)
+ build_path = /obj/item/device/mmi
+ category = "Misc"
+ sort_string = "VACBA"
\ No newline at end of file
diff --git a/code/modules/research/designs/mining_toys.dm b/code/modules/research/designs/mining_toys.dm
new file mode 100644
index 0000000000..f9b76032cb
--- /dev/null
+++ b/code/modules/research/designs/mining_toys.dm
@@ -0,0 +1,48 @@
+// Assorted Mining-related items
+
+/datum/design/item/weapon/mining/AssembleDesignName()
+ ..()
+ name = "Mining equipment design ([item_name])"
+
+/datum/design/item/weapon/mining/jackhammer
+ id = "jackhammer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "silver" = 500)
+ build_path = /obj/item/weapon/pickaxe/jackhammer
+ sort_string = "KAAAA"
+
+/datum/design/item/weapon/mining/drill
+ id = "drill"
+ req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1000) //expensive, but no need for miners.
+ build_path = /obj/item/weapon/pickaxe/drill
+ sort_string = "KAAAB"
+
+/datum/design/item/weapon/mining/plasmacutter
+ id = "plasmacutter"
+ req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
+ build_path = /obj/item/weapon/pickaxe/plasmacutter
+ sort_string = "KAAAC"
+
+/datum/design/item/weapon/mining/pick_diamond
+ id = "pick_diamond"
+ req_tech = list(TECH_MATERIAL = 6)
+ materials = list("diamond" = 3000)
+ build_path = /obj/item/weapon/pickaxe/diamond
+ sort_string = "KAAAD"
+
+/datum/design/item/weapon/mining/drill_diamond
+ id = "drill_diamond"
+ req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000, "diamond" = 2000)
+ build_path = /obj/item/weapon/pickaxe/diamonddrill
+ sort_string = "KAAAE"
+
+/datum/design/item/device/depth_scanner
+ desc = "Used to check spatial depth and density of rock outcroppings."
+ id = "depth_scanner"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 1000)
+ build_path = /obj/item/device/depth_scanner
+ sort_string = "KAAAF"
\ No newline at end of file
diff --git a/code/modules/research/designs/misc.dm b/code/modules/research/designs/misc.dm
new file mode 100644
index 0000000000..ab420d142f
--- /dev/null
+++ b/code/modules/research/designs/misc.dm
@@ -0,0 +1,203 @@
+/*
+//
+// THIS IS GOING TO GET REAL DAMN BLOATED, SO LET'S TRY TO AVOID THAT IF POSSIBLE
+//
+*/
+
+/datum/design/item/hud
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/datum/design/item/hud/AssembleDesignName()
+ ..()
+ name = "HUD glasses prototype ([item_name])"
+
+/datum/design/item/hud/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [item_name] HUD glasses."
+
+/datum/design/item/hud/health
+ name = "health scanner"
+ id = "health_hud"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3)
+ build_path = /obj/item/clothing/glasses/hud/health
+ sort_string = "GAAAA"
+
+/datum/design/item/hud/security
+ name = "security records"
+ id = "security_hud"
+ req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
+ build_path = /obj/item/clothing/glasses/hud/security
+ sort_string = "GAAAB"
+
+/datum/design/item/hud/mesons
+ name = "Optical meson scanners design"
+ desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
+ id = "mesons"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ build_path = /obj/item/clothing/glasses/meson
+ sort_string = "GAAAC"
+
+/datum/design/item/device/ano_scanner
+ name = "Alden-Saraspova counter"
+ id = "ano_scanner"
+ desc = "Aids in triangulation of exotic particles."
+ req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 5000)
+ build_path = /obj/item/device/ano_scanner
+ sort_string = "UAAAH"
+
+/datum/design/item/light_replacer
+ name = "Light replacer"
+ desc = "A device to automatically replace lights. Refill with working lightbulbs."
+ id = "light_replacer"
+ req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 1500, "silver" = 150, "glass" = 3000)
+ build_path = /obj/item/device/lightreplacer
+ sort_string = "VAAAH"
+
+datum/design/item/laserpointer
+ name = "laser pointer"
+ desc = "Don't shine it in your eyes!"
+ id = "laser_pointer"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 50)
+ build_path = /obj/item/device/laser_pointer
+ sort_string = "VAAAI"
+
+/datum/design/item/paicard
+ name = "'pAI', personal artificial intelligence device"
+ id = "paicard"
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 500, DEFAULT_WALL_MATERIAL = 500)
+ build_path = /obj/item/device/paicard
+ sort_string = "VABAI"
+
+/datum/design/item/communicator
+ name = "Communicator"
+ id = "communicator"
+ req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 500)
+ build_path = /obj/item/device/communicator
+ sort_string = "VABAJ"
+
+/datum/design/item/beacon
+ name = "Bluespace tracking beacon design"
+ id = "beacon"
+ req_tech = list(TECH_BLUESPACE = 1)
+ materials = list (DEFAULT_WALL_MATERIAL = 20, "glass" = 10)
+ build_path = /obj/item/device/radio/beacon
+ sort_string = "VADAA"
+
+/datum/design/item/gps
+ name = "Triangulating device design"
+ desc = "Triangulates approximate co-ordinates using a nearby satellite network."
+ id = "gps"
+ req_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 500)
+ build_path = /obj/item/device/gps
+ sort_string = "VADAB"
+
+/datum/design/item/beacon_locator
+ name = "Beacon tracking pinpointer"
+ desc = "Used to scan and locate signals on a particular frequency."
+ id = "beacon_locator"
+ req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 500)
+ build_path = /obj/item/device/beacon_locator
+ sort_string = "VADAC"
+
+/datum/design/item/bag_holding
+ name = "'Bag of Holding', an infinite capacity bag prototype"
+ desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy."
+ id = "bag_holding"
+ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
+ materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
+ build_path = /obj/item/weapon/storage/backpack/holding
+ sort_string = "VAEAA"
+
+/datum/design/item/dufflebag_holding
+ name = "'DuffleBag of Holding', an infinite capacity dufflebag prototype"
+ desc = "A minaturized prototype of the popular Bag of Holding, the Dufflebag of Holding is, functionally, identical to the bag of holding, but comes in a more stylish and compact form."
+ id = "dufflebag_holding"
+ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
+ materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
+ build_path = /obj/item/weapon/storage/backpack/holding/duffle
+ sort_string = "VAEAB"
+
+/datum/design/item/experimental_welder
+ name = "Experimental welding tool"
+ desc = "A welding tool that generate fuel for itself."
+ id = "expwelder"
+ req_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3, TECH_MATERIAL = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120, "phoron" = 100)
+ build_path = /obj/item/weapon/weldingtool/experimental
+ sort_string = "VASCA"
+
+/datum/design/item/hand_drill
+ name = "Hand drill"
+ desc = "A simple powered hand drill."
+ id = "handdrill"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100)
+ build_path = /obj/item/weapon/screwdriver/power
+ sort_string = "VASDA"
+
+/datum/design/item/jaws_life
+ name = "Jaws of life"
+ desc = "A set of jaws of life, compressed through the magic of science."
+ id = "jawslife"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 300, "silver" = 100)
+ build_path = /obj/item/weapon/crowbar/power
+ sort_string = "VASEA"
+
+/datum/design/item/device/t_scanner_upg
+ name = "Upgraded T-ray Scanner"
+ desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
+ id = "upgradedtscanner"
+ req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 4, TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 500, "phoron" = 150)
+ build_path = /obj/item/device/t_scanner/upgraded
+ sort_string = "VASSA"
+
+/datum/design/item/device/t_scanner_adv
+ name = "Advanced T-ray Scanner"
+ desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
+ id = "advancedtscanner"
+ req_tech = list(TECH_MAGNET = 6, TECH_ENGINEERING = 6, TECH_MATERIAL = 6)
+ materials = list(DEFAULT_WALL_MATERIAL = 1250, "phoron" = 500, "silver" = 50)
+ build_path = /obj/item/device/t_scanner/advanced
+ sort_string = "VASSB"
+
+/datum/design/item/translator
+ name = "handheld translator"
+ id = "translator"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000)
+ build_path = /obj/item/device/universal_translator
+ sort_string = "HABQA"
+
+/datum/design/item/ear_translator
+ name = "earpiece translator"
+ id = "ear_translator"
+ req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5) //It's been hella miniaturized.
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "gold" = 1000)
+ build_path = /obj/item/device/universal_translator/ear
+ sort_string = "HABQB"
+
+/datum/design/item/xenoarch_multi_tool
+ name = "xenoarcheology multitool"
+ id = "xenoarch_multitool"
+ req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3)
+ build_path = /obj/item/device/xenoarch_multi_tool
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "uranium" = 500, "phoron" = 500)
+ sort_string = "HABQC"
+
+/datum/design/item/excavationdrill
+ name = "Excavation Drill"
+ id = "excavationdrill"
+ req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3)
+ build_type = PROTOLATHE
+ materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000)
+ build_path = /obj/item/weapon/pickaxe/excavationdrill
+ sort_string = "HABQD"
diff --git a/code/modules/research/designs/pdas.dm b/code/modules/research/designs/pdas.dm
new file mode 100644
index 0000000000..4aca3062b9
--- /dev/null
+++ b/code/modules/research/designs/pdas.dm
@@ -0,0 +1,92 @@
+/datum/design/item/pda
+ name = "PDA design"
+ desc = "Cheaper than whiny non-digital assistants."
+ id = "pda"
+ req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ build_path = /obj/item/device/pda
+ sort_string = "VAAAA"
+
+// Cartridges
+/datum/design/item/pda_cartridge
+ req_tech = list(TECH_ENGINEERING = 2, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/datum/design/item/pda_cartridge/AssembleDesignName()
+ ..()
+ name = "PDA accessory ([item_name])"
+
+/datum/design/item/pda_cartridge/cart_basic
+ id = "cart_basic"
+ build_path = /obj/item/weapon/cartridge
+ sort_string = "VBAAA"
+
+/datum/design/item/pda_cartridge/engineering
+ id = "cart_engineering"
+ build_path = /obj/item/weapon/cartridge/engineering
+ sort_string = "VBAAB"
+
+/datum/design/item/pda_cartridge/atmos
+ id = "cart_atmos"
+ build_path = /obj/item/weapon/cartridge/atmos
+ sort_string = "VBAAC"
+
+/datum/design/item/pda_cartridge/medical
+ id = "cart_medical"
+ build_path = /obj/item/weapon/cartridge/medical
+ sort_string = "VBAAD"
+
+/datum/design/item/pda_cartridge/chemistry
+ id = "cart_chemistry"
+ build_path = /obj/item/weapon/cartridge/chemistry
+ sort_string = "VBAAE"
+
+/datum/design/item/pda_cartridge/security
+ id = "cart_security"
+ build_path = /obj/item/weapon/cartridge/security
+ sort_string = "VBAAF"
+
+/datum/design/item/pda_cartridge/janitor
+ id = "cart_janitor"
+ build_path = /obj/item/weapon/cartridge/janitor
+ sort_string = "VBAAG"
+
+/datum/design/item/pda_cartridge/science
+ id = "cart_science"
+ build_path = /obj/item/weapon/cartridge/signal/science
+ sort_string = "VBAAH"
+
+/datum/design/item/pda_cartridge/quartermaster
+ id = "cart_quartermaster"
+ build_path = /obj/item/weapon/cartridge/quartermaster
+ sort_string = "VBAAI"
+
+/datum/design/item/pda_cartridge/hop
+ id = "cart_hop"
+ build_path = /obj/item/weapon/cartridge/hop
+ sort_string = "VBAAJ"
+
+/datum/design/item/pda_cartridge/hos
+ id = "cart_hos"
+ build_path = /obj/item/weapon/cartridge/hos
+ sort_string = "VBAAK"
+
+/datum/design/item/pda_cartridge/ce
+ id = "cart_ce"
+ build_path = /obj/item/weapon/cartridge/ce
+ sort_string = "VBAAL"
+
+/datum/design/item/pda_cartridge/cmo
+ id = "cart_cmo"
+ build_path = /obj/item/weapon/cartridge/cmo
+ sort_string = "VBAAM"
+
+/datum/design/item/pda_cartridge/rd
+ id = "cart_rd"
+ build_path = /obj/item/weapon/cartridge/rd
+ sort_string = "VBAAN"
+
+/datum/design/item/pda_cartridge/captain
+ id = "cart_captain"
+ build_path = /obj/item/weapon/cartridge/captain
+ sort_string = "VBAAO"
\ No newline at end of file
diff --git a/code/modules/research/designs/powercells.dm b/code/modules/research/designs/powercells.dm
new file mode 100644
index 0000000000..1ae3a3c361
--- /dev/null
+++ b/code/modules/research/designs/powercells.dm
@@ -0,0 +1,71 @@
+/datum/design/item/powercell
+ build_type = PROTOLATHE | MECHFAB
+
+/datum/design/item/powercell/AssembleDesignName()
+ name = "Power Cell Model ([item_name])"
+
+/datum/design/item/powercell/AssembleDesignDesc()
+ if(build_path)
+ var/obj/item/weapon/cell/C = build_path
+ desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy."
+
+/datum/design/item/powercell/Fabricate()
+ var/obj/item/weapon/cell/C = ..()
+ C.charge = 0 //shouldn't produce power out of thin air.
+ return C
+
+/datum/design/item/powercell/basic
+ name = "basic"
+ build_type = PROTOLATHE | MECHFAB
+ id = "basic_cell"
+ req_tech = list(TECH_POWER = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
+ build_path = /obj/item/weapon/cell
+ category = "Misc"
+ sort_string = "DAAAA"
+
+/datum/design/item/powercell/high
+ name = "high-capacity"
+ build_type = PROTOLATHE | MECHFAB
+ id = "high_cell"
+ req_tech = list(TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 60)
+ build_path = /obj/item/weapon/cell/high
+ category = "Misc"
+ sort_string = "DAAAB"
+
+/datum/design/item/powercell/super
+ name = "super-capacity"
+ id = "super_cell"
+ req_tech = list(TECH_POWER = 3, TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 70)
+ build_path = /obj/item/weapon/cell/super
+ category = "Misc"
+ sort_string = "DAAAC"
+
+/datum/design/item/powercell/hyper
+ name = "hyper-capacity"
+ id = "hyper_cell"
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 400, "gold" = 150, "silver" = 150, "glass" = 70)
+ build_path = /obj/item/weapon/cell/hyper
+ category = "Misc"
+ sort_string = "DAAAD"
+
+/datum/design/item/powercell/device
+ name = "device"
+ build_type = PROTOLATHE
+ id = "device"
+ materials = list(DEFAULT_WALL_MATERIAL = 350, "glass" = 25)
+ build_path = /obj/item/weapon/cell/device
+ category = "Misc"
+ sort_string = "DAABA"
+
+/datum/design/item/powercell/weapon
+ name = "weapon"
+ build_type = PROTOLATHE
+ id = "weapon"
+ materials = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
+ build_path = /obj/item/weapon/cell/device/weapon
+ category = "Misc"
+ sort_string = "DAABB"
\ No newline at end of file
diff --git a/code/modules/research/designs/stock_parts.dm b/code/modules/research/designs/stock_parts.dm
new file mode 100644
index 0000000000..fb629e7ad7
--- /dev/null
+++ b/code/modules/research/designs/stock_parts.dm
@@ -0,0 +1,178 @@
+/*
+ Various Stock Parts
+*/
+
+/datum/design/item/stock_part
+ build_type = PROTOLATHE
+
+/datum/design/item/stock_part/AssembleDesignName()
+ ..()
+ name = "Component design ([item_name])"
+
+/datum/design/item/stock_part/AssembleDesignDesc()
+ if(!desc)
+ desc = "A stock part used in the construction of various devices."
+
+/datum/design/item/stock_part/basic_capacitor
+ id = "basic_capacitor"
+ req_tech = list(TECH_POWER = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor
+ sort_string = "CAAAA"
+
+/datum/design/item/stock_part/adv_capacitor
+ id = "adv_capacitor"
+ req_tech = list(TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor/adv
+ sort_string = "CAAAB"
+
+/datum/design/item/stock_part/super_capacitor
+ id = "super_capacitor"
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/capacitor/super
+ sort_string = "CAAAC"
+
+/datum/design/item/stock_part/micro_mani
+ id = "micro_mani"
+ req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator
+ sort_string = "CAABA"
+
+/datum/design/item/stock_part/nano_mani
+ id = "nano_mani"
+ req_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/nano
+ sort_string = "CAABB"
+
+/datum/design/item/stock_part/pico_mani
+ id = "pico_mani"
+ req_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/pico
+ sort_string = "CAABC"
+
+/datum/design/item/stock_part/basic_matter_bin
+ id = "basic_matter_bin"
+ req_tech = list(TECH_MATERIAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin
+ sort_string = "CAACA"
+
+/datum/design/item/stock_part/adv_matter_bin
+ id = "adv_matter_bin"
+ req_tech = list(TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/adv
+ sort_string = "CAACB"
+
+/datum/design/item/stock_part/super_matter_bin
+ id = "super_matter_bin"
+ req_tech = list(TECH_MATERIAL = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/super
+ sort_string = "CAACC"
+
+/datum/design/item/stock_part/basic_micro_laser
+ id = "basic_micro_laser"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser
+ sort_string = "CAADA"
+
+/datum/design/item/stock_part/high_micro_laser
+ id = "high_micro_laser"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/high
+ sort_string = "CAADB"
+
+/datum/design/item/stock_part/ultra_micro_laser
+ id = "ultra_micro_laser"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "glass" = 20, "uranium" = 10)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
+ sort_string = "CAADC"
+
+/datum/design/item/stock_part/basic_sensor
+ id = "basic_sensor"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module
+ sort_string = "CAAEA"
+
+/datum/design/item/stock_part/adv_sensor
+ id = "adv_sensor"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/adv
+ sort_string = "CAAEB"
+
+/datum/design/item/stock_part/phasic_sensor
+ id = "phasic_sensor"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
+ sort_string = "CAAEC"
+
+/datum/design/item/stock_part/subspace_ansible
+ id = "s-ansible"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 80, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/ansible
+ sort_string = "UAAAA"
+
+/datum/design/item/stock_part/hyperwave_filter
+ id = "s-filter"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 40, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/subspace/sub_filter
+ sort_string = "UAAAB"
+
+/datum/design/item/stock_part/subspace_amplifier
+ id = "s-amplifier"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "gold" = 30, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/amplifier
+ sort_string = "UAAAC"
+
+/datum/design/item/stock_part/subspace_treatment
+ id = "s-treatment"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/treatment
+ sort_string = "UAAAD"
+
+/datum/design/item/stock_part/subspace_analyzer
+ id = "s-analyzer"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 10, "gold" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/analyzer
+ sort_string = "UAAAE"
+
+/datum/design/item/stock_part/subspace_crystal
+ id = "s-crystal"
+ req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("glass" = 1000, "silver" = 20, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/crystal
+ sort_string = "UAAAF"
+
+/datum/design/item/stock_part/subspace_transmitter
+ id = "s-transmitter"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
+ materials = list("glass" = 100, "silver" = 10, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/transmitter
+ sort_string = "UAAAG"
+
+// RPED lives here because it handles stock parts
+/datum/design/item/stock_part/RPED
+ name = "Rapid Part Exchange Device"
+ desc = "Special mechanical module made to store, sort, and apply standard machine parts."
+ id = "rped"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5000)
+ build_path = /obj/item/weapon/storage/part_replacer
+ sort_string = "CBAAA"
\ No newline at end of file
diff --git a/code/modules/research/designs/uncommented.dm b/code/modules/research/designs/uncommented.dm
new file mode 100644
index 0000000000..7bbf53571a
--- /dev/null
+++ b/code/modules/research/designs/uncommented.dm
@@ -0,0 +1,69 @@
+
+/* Uncomment if someone makes these buildable
+/datum/design/circuit/general_alert
+ name = "general alert console"
+ id = "general_alert"
+ build_path = /obj/item/weapon/circuitboard/general_alert
+
+// Removal of loyalty implants. Can't think of a way to add this to the config option.
+/datum/design/item/implant/loyalty
+ name = "loyalty"
+ id = "implant_loyal"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 7000)
+ build_path = /obj/item/weapon/implantcase/loyalty"
+
+/datum/design/rust_core_control
+ name = "Circuit Design (RUST core controller)"
+ desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine."
+ id = "rust_core_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_core_control"
+
+datum/design/rust_fuel_control
+ name = "Circuit Design (RUST fuel controller)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine."
+ id = "rust_fuel_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_fuel_control"
+
+datum/design/rust_fuel_port
+ name = "Internal circuitry (RUST fuel port)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine."
+ id = "rust_fuel_port"
+ req_tech = list("engineering" = 4, "materials" = 5)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "uranium" = 3000)
+ build_path = "/obj/item/weapon/module/rust_fuel_port"
+
+datum/design/rust_fuel_compressor
+ name = "Circuit Design (RUST fuel compressor)"
+ desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine."
+ id = "rust_fuel_compressor"
+ req_tech = list("materials" = 6, "phorontech" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 1000)
+ build_path = "/obj/item/weapon/module/rust_fuel_compressor"
+
+datum/design/rust_core
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern tokamak fusion core."
+ id = "pacman"
+ req_tech = list(bluespace = 3, phorontech = 4, magnets = 5, powerstorage = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+
+datum/design/rust_injector
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern particle accelerator."
+ id = "pacman"
+ req_tech = list(powerstorage = 3, engineering = 4, phorontech = 4, materials = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "uranium" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+*/
diff --git a/code/modules/research/designs/weapons.dm b/code/modules/research/designs/weapons.dm
new file mode 100644
index 0000000000..ddf64473eb
--- /dev/null
+++ b/code/modules/research/designs/weapons.dm
@@ -0,0 +1,192 @@
+/datum/design/item/weapon/AssembleDesignName()
+ ..()
+ name = "Weapon prototype ([item_name])"
+
+/datum/design/item/weapon/AssembleDesignDesc()
+ if(!desc)
+ if(build_path)
+ var/obj/item/I = build_path
+ desc = initial(I.desc)
+ ..()
+
+/datum/design/item/weapon/stunrevolver
+ id = "stunrevolver"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 4000)
+ build_path = /obj/item/weapon/gun/energy/stunrevolver
+ sort_string = "TAAAA"
+
+/datum/design/item/weapon/nuclear_gun
+ id = "nuclear_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/gun/nuclear
+ sort_string = "TAAAB"
+
+/datum/design/item/weapon/lasercannon
+ desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core."
+ id = "lasercannon"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, "diamond" = 2000)
+ build_path = /obj/item/weapon/gun/energy/lasercannon
+ sort_string = "TAAAC"
+
+/datum/design/item/weapon/phoronpistol
+ id = "ppistol"
+ req_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "phoron" = 3000)
+ build_path = /obj/item/weapon/gun/energy/toxgun
+ sort_string = "TAAAD"
+
+/datum/design/item/weapon/decloner
+ id = "decloner"
+ req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6)
+ materials = list("gold" = 5000,"uranium" = 10000)
+ build_path = /obj/item/weapon/gun/energy/decloner
+ sort_string = "TAAAE"
+
+/datum/design/item/weapon/smg
+ id = "smg"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 8000, "silver" = 2000, "diamond" = 1000)
+ build_path = /obj/item/weapon/gun/projectile/automatic
+ sort_string = "TAABA"
+
+/datum/design/item/weapon/ammo_9mm
+ id = "ammo_9mm"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 3750, "silver" = 100)
+ build_path = /obj/item/ammo_magazine/box/c9mm
+ sort_string = "TAACA"
+
+/datum/design/item/weapon/stunshell
+ desc = "A stunning shell for a shotgun."
+ id = "stunshell"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 4000)
+ build_path = /obj/item/ammo_casing/a12g/stunshell
+ sort_string = "TAACB"
+
+/datum/design/item/weapon/chemsprayer
+ desc = "An advanced chem spraying device."
+ id = "chemsprayer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
+ sort_string = "TABAA"
+
+/datum/design/item/weapon/rapidsyringe
+ id = "rapidsyringe"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_BIO = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/gun/launcher/syringe/rapid
+ sort_string = "TABAB"
+
+/datum/design/item/weapon/temp_gun
+ desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
+ id = "temp_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 500, "silver" = 3000)
+ build_path = /obj/item/weapon/gun/energy/temperature
+ sort_string = "TABAC"
+
+/datum/design/item/weapon/large_grenade
+ id = "large_Grenade"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 3000)
+ build_path = /obj/item/weapon/grenade/chem_grenade/large
+ sort_string = "TACAA"
+
+/datum/design/item/weapon/dartgun
+ desc = "A gun that fires small hollow chemical-payload darts."
+ id = "dartgun_r"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_BIO = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "gold" = 5000, "silver" = 2500, "glass" = 750)
+ build_path = /obj/item/weapon/gun/projectile/dartgun/research
+ sort_string = "TACAB"
+
+/datum/design/item/weapon/dartgunmag_small
+ id = "dartgun_mag_s"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 300, "gold" = 100, "silver" = 100, "glass" = 300)
+ build_path = /obj/item/ammo_magazine/chemdart/small
+ sort_string = "TACAC"
+
+/datum/design/item/weapon/dartgun_ammo_small
+ id = "dartgun_ammo_s"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 50, "gold" = 30, "silver" = 30, "glass" = 50)
+ build_path = /obj/item/ammo_casing/chemdart/small
+ sort_string = "TACAD"
+
+/datum/design/item/weapon/dartgunmag_med
+ id = "dartgun_mag_m"
+ req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 500, "gold" = 150, "silver" = 150, "diamond" = 200, "glass" = 400)
+ build_path = /obj/item/ammo_magazine/chemdart
+ sort_string = "TACAE"
+
+/datum/design/item/weapon/dartgun_ammo_med
+ id = "dartgun_ammo_m"
+ req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_MAGNET = 1, TECH_ILLEGAL = 1)
+ materials = list(DEFAULT_WALL_MATERIAL = 80, "gold" = 40, "silver" = 40, "glass" = 60)
+ build_path = /obj/item/ammo_casing/chemdart
+ sort_string = "TACAF"
+
+/datum/design/item/weapon/fuelrod
+ id = "fuelrod_gun"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "gold" = 500, "silver" = 500, "uranium" = 1000, "phoron" = 3000, "diamond" = 1000)
+ build_path = /obj/item/weapon/gun/magnetic/fuelrod
+ sort_string = "TACBA"
+
+/datum/design/item/weapon/flora_gun
+ id = "flora_gun"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 500, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/floragun
+ sort_string = "TBAAA"
+
+// Xenobio Tools
+/datum/design/item/weapon/slimebation
+ id = "slimebation"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2, TECH_POWER = 3, TECH_COMBAT = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000)
+ build_path = /obj/item/weapon/melee/baton/slime
+ sort_string = "TBAAB"
+
+/datum/design/item/weapon/slimetaser
+ id = "slimetaser"
+ req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3, TECH_POWER = 4, TECH_COMBAT = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000)
+ build_path = /obj/item/weapon/gun/energy/taser/xeno
+ sort_string = "TBAAC"
+
+// Phase Weapons
+/datum/design/item/weapon/phase_pistol
+ id = "phasepistol"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 4000)
+ build_path = /obj/item/weapon/gun/energy/phasegun/pistol
+ sort_string = "TPAAA"
+
+/datum/design/item/weapon/phase_carbine
+ id = "phasecarbine"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1500)
+ build_path = /obj/item/weapon/gun/energy/phasegun
+ sort_string = "TPAAB"
+
+/datum/design/item/weapon/phase_rifle
+ id = "phaserifle"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2000, "silver" = 500)
+ build_path = /obj/item/weapon/gun/energy/phasegun/rifle
+ sort_string = "TPAAC"
+
+/datum/design/item/weapon/phase_cannon
+ id = "phasecannon"
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_POWER = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "silver" = 1000, "diamond" = 750)
+ build_path = /obj/item/weapon/gun/energy/phasegun/cannon
+ sort_string = "TPAAD"
\ No newline at end of file
diff --git a/code/modules/shieldgen/handheld_defuser.dm b/code/modules/shieldgen/handheld_defuser.dm
index a2909fa7e6..d65a0060a8 100644
--- a/code/modules/shieldgen/handheld_defuser.dm
+++ b/code/modules/shieldgen/handheld_defuser.dm
@@ -7,11 +7,6 @@
var/obj/item/weapon/cell/device/cell
var/enabled = 0
-/obj/item/weapon/shield_diffuser/update_icon()
- if(enabled)
- icon_state = "hdiffuser_on"
- else
- icon_state = "hdiffuser_off"
/obj/item/weapon/shield_diffuser/New()
cell = new(src)
@@ -24,6 +19,9 @@
processing_objects.Remove(src)
. = ..()
+/obj/item/weapon/shield_diffuser/get_cell()
+ return cell
+
/obj/item/weapon/shield_diffuser/process()
if(!enabled)
return
@@ -34,6 +32,12 @@
if(istype(S) && cell.checked_use(10 KILOWATTS * CELLRATE))
qdel(S)
+/obj/item/weapon/shield_diffuser/update_icon()
+ if(enabled)
+ icon_state = "hdiffuser_on"
+ else
+ icon_state = "hdiffuser_off"
+
/obj/item/weapon/shield_diffuser/attack_self()
enabled = !enabled
update_icon()
diff --git a/html/changelogs/Anewbe - Biomass.yml b/html/changelogs/Anewbe - Biomass.yml
new file mode 100644
index 0000000000..ccf35e17ad
--- /dev/null
+++ b/html/changelogs/Anewbe - Biomass.yml
@@ -0,0 +1,38 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added a biomass reagent, made from protein, sugar, and phoron."
+ - tweak: "Cloners and bioprinters now use the biomass reagent. Both can be refilled or have their capacity increased by replacing the bottles they spawn with."
+ - experiment: "Mapped in a bioprinter, for further testing."
\ No newline at end of file
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index b5d549fbc5..b3b9a852c9 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 54b20e0165..1ed8e7cf12 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/belt_mirror.dmi b/icons/mob/belt_mirror.dmi
index d8e8291a80..3712f83039 100644
Binary files a/icons/mob/belt_mirror.dmi and b/icons/mob/belt_mirror.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index 1a830a6e49..3dce22596f 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index 8a7c74bf3d..f13fb1c997 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 3ea938e4ee..4354fad0c7 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index e58dc7028e..efc1184dd5 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/maps/southern_cross/datums/supplypacks/munitions.dm b/maps/southern_cross/datums/supplypacks/munitions.dm
index 819e96d428..5b88cc698c 100644
--- a/maps/southern_cross/datums/supplypacks/munitions.dm
+++ b/maps/southern_cross/datums/supplypacks/munitions.dm
@@ -4,13 +4,32 @@
*/
/datum/supply_packs/munitions/bolt_rifles_explorer
- name = "Weapons - Surplus explorer rifles"
+ name = "Weapons - Surplus Hunting Rifles"
contains = list(
- /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 4,
- /obj/item/ammo_magazine/clip/c762 = 4,
- /obj/item/ammo_magazine/clip/c762/hunter = 8
+ /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 2,
+ /obj/item/ammo_magazine/clip/c762/hunter = 6
)
cost = 50
containertype = /obj/structure/closet/crate/secure/weapon
- containername = "Explorer weapons crate"
+ containername = "Hunting Rifle crate"
access = access_explorer
+
+/datum/supply_packs/munitions/phase_carbines_explorer
+ name = "Weapons - Surplus Phase Carbines"
+ contains = list(
+ /obj/item/weapon/gun/energy/phasegun = 2,
+ )
+ cost = 25
+ containertype = /obj/structure/closet/crate/secure/weapon
+ containername = "Phase Carbine crate"
+ access = access_explorer
+
+/datum/supply_packs/munitions/phase_rifles_explorer
+ name = "Weapons - Phase Rifles"
+ contains = list(
+ /obj/item/weapon/gun/energy/phasegun/rifle = 2,
+ )
+ cost = 50
+ containertype = /obj/structure/closet/crate/secure/weapon
+ containername = "Phase Rifle crate"
+ access = access_explorer
\ No newline at end of file
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index 60cb0cd7ac..cec11cbaa6 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -7685,8 +7685,8 @@
"cRO" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cRP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner2{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cRQ" = (/obj/item/device/radio/intercom/department/medbay{dir = 2; pixel_x = 0; pixel_y = 21},/obj/machinery/camera/network/medbay{c_tag = "MED - Cloning"; dir = 2},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
-"cRR" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
-"cRS" = (/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"cRR" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/organ_printer/flesh/full,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"cRS" = (/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cRT" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue)
"cRU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/medical/morgue)
"cRV" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue)
@@ -7803,7 +7803,7 @@
"cUc" = (/obj/structure/closet/wardrobe/medic_white,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/ward)
"cUd" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/structure/curtain/open/privacy,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward)
"cUe" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/structure/curtain/open/privacy,/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
-"cUf" = (/obj/machinery/clonepod{biomass = 600},/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"cUf" = (/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/obj/machinery/clonepod/full,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cUg" = (/obj/machinery/computer/cloning,/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cUh" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"cUi" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
@@ -10577,7 +10577,7 @@
"dVu" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
"dVv" = (/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard)
"dVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/starboard)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11351,4 +11351,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
dUOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
-
diff --git a/polaris.dme b/polaris.dme
index 6639df0b4e..2293f8f361 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1708,7 +1708,7 @@
#include "code\modules\mob\transform_procs.dm"
#include "code\modules\mob\typing_indicator.dm"
#include "code\modules\mob\update_icons.dm"
-#include "code\modules\mob\_modifiers\auras.dm"
+#include "code\modules\mob\_modifiers\aura.dm"
#include "code\modules\mob\_modifiers\cloning.dm"
#include "code\modules\mob\_modifiers\modifiers.dm"
#include "code\modules\mob\_modifiers\modifiers_misc.dm"
@@ -2161,6 +2161,7 @@
#include "code\modules\projectiles\guns\vox.dm"
#include "code\modules\projectiles\guns\energy\laser.dm"
#include "code\modules\projectiles\guns\energy\nuclear.dm"
+#include "code\modules\projectiles\guns\energy\phase.dm"
#include "code\modules\projectiles\guns\energy\pulse.dm"
#include "code\modules\projectiles\guns\energy\special.dm"
#include "code\modules\projectiles\guns\energy\stun.dm"
@@ -2282,6 +2283,17 @@
#include "code\modules\research\rdmachines.dm"
#include "code\modules\research\research.dm"
#include "code\modules\research\server.dm"
+#include "code\modules\research\designs\ai_modules.dm"
+#include "code\modules\research\designs\circuit_assembly.dm"
+#include "code\modules\research\designs\circuits.dm"
+#include "code\modules\research\designs\illegal.dm"
+#include "code\modules\research\designs\medical.dm"
+#include "code\modules\research\designs\mining_toys.dm"
+#include "code\modules\research\designs\misc.dm"
+#include "code\modules\research\designs\pdas.dm"
+#include "code\modules\research\designs\powercells.dm"
+#include "code\modules\research\designs\stock_parts.dm"
+#include "code\modules\research\designs\weapons.dm"
#include "code\modules\scripting\Errors.dm"
#include "code\modules\scripting\IDE.dm"
#include "code\modules\scripting\Options.dm"
@@ -2492,7 +2504,7 @@
#include "code\ZAS\Zone.dm"
#include "interface\interface.dm"
#include "interface\skin.dmf"
-#include "maps\example\example.dm"
+#include "maps\southern_cross\southern_cross.dm"
#include "maps\submaps\_readme.dm"
#include "maps\submaps\space_submaps\space.dm"
#include "maps\submaps\surface_submaps\mountains\mountains.dm"