diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index f36d62f7339..ba319ac8491 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -78,6 +78,7 @@ CREATE TABLE `characters` (
`rlimb_data` mediumtext NOT NULL,
`nanotrasen_relation` varchar(45) NOT NULL,
`speciesprefs` int(1) NOT NULL,
+ `socks` mediumtext NOT NULL,
`body_accessory` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8;
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index f797c520522..031c8a12f60 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -137,7 +137,7 @@
//transfer_ai() defines. Main proc in ai_core.dm
#define AI_TRANS_TO_CARD 1 //Downloading AI to InteliCard.
#define AI_TRANS_FROM_CARD 2 //Uploading AI from InteliCard
-#define AI_MECH_HACK 3 //Malfunctioning AI hijacking mecha
+#define AI_MECH_HACK 3 //Malfunctioning AI hijacking mecha
//singularity defines
#define STAGE_ONE 1
@@ -154,4 +154,17 @@
#define END_FOR_DVIEW dview_mob.loc = null
#define MIN_SUPPLIED_LAW_NUMBER 15
-#define MAX_SUPPLIED_LAW_NUMBER 50
\ No newline at end of file
+#define MAX_SUPPLIED_LAW_NUMBER 50
+
+//Material defines
+#define MAT_METAL "$metal"
+#define MAT_GLASS "$glass"
+#define MAT_SILVER "$silver"
+#define MAT_GOLD "$gold"
+#define MAT_DIAMOND "$diamond"
+#define MAT_URANIUM "$uranium"
+#define MAT_PLASMA "$plasma"
+#define MAT_BANANIUM "$bananium"
+
+#define MAX_STACK_SIZE 50
+//The maximum size of a stack object.
\ No newline at end of file
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index c69742b94c8..a81a99c540b 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -12,6 +12,10 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
//undershirt
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
+ //socks
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f)
+
+
var/list/paths
//Surgery Steps - Initialize all /datum/surgery_step into a list
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 619716363f9..fe27e399c84 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -10,6 +10,12 @@
if(FEMALE) return pick(undershirt_f)
else return pick(undershirt_list)
+/proc/random_socks(gender)
+ switch(gender)
+ if(MALE) return pick(socks_m)
+ if(FEMALE) return pick(socks_f)
+ else return pick(socks_list)
+
proc/random_hair_style(var/gender, species = "Human")
var/h_style = "Bald"
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 882331d21de..516ae5630f9 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -15,6 +15,10 @@ var/global/list/underwear_f = list() //stores only underwear name
var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name
var/global/list/undershirt_m = list() //stores only undershirt name
var/global/list/undershirt_f = list() //stores only undershirt name
+ //Socks
+var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name
+var/global/list/socks_m = list() //stores only socks name
+var/global/list/socks_f = list() //stores only socks name
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm
new file mode 100644
index 00000000000..56750520095
--- /dev/null
+++ b/code/datums/material_container.dm
@@ -0,0 +1,249 @@
+/*
+ This datum should be used for handling mineral contents of machines and whatever else is supposed to hold minerals and make use of them.
+
+ Variables:
+ amount - raw amount of the mineral this container is holding, calculated by the defined value MINERAL_MATERIAL_AMOUNT=2000.
+ max_amount - max raw amount of mineral this container can hold.
+ sheet_type - type of the mineral sheet the container handles, used for output.
+ owner - object that this container is being used by, used for output.
+ MAX_STACK_SIZE - size of a stack of mineral sheets. Constant.
+*/
+
+/datum/material_container
+ var/total_amount = 0
+ var/max_amount
+ var/sheet_type
+ var/obj/owner
+ var/list/materials = list()
+ //MAX_STACK_SIZE = 50
+ //MINERAL_MATERIAL_AMOUNT = 2000
+
+/datum/material_container/New(obj/O, list/mat_list, max_amt = 0)
+ owner = O
+ max_amount = max(0, max_amt)
+
+ if(mat_list[MAT_METAL])
+ materials[MAT_METAL] = new /datum/material/metal()
+ if(mat_list[MAT_GLASS])
+ materials[MAT_GLASS] = new /datum/material/glass()
+ if(mat_list[MAT_SILVER])
+ materials[MAT_SILVER] = new /datum/material/silver()
+ if(mat_list[MAT_GOLD])
+ materials[MAT_GOLD] = new /datum/material/gold()
+ if(mat_list[MAT_DIAMOND])
+ materials[MAT_DIAMOND] = new /datum/material/diamond()
+ if(mat_list[MAT_URANIUM])
+ materials[MAT_URANIUM] = new /datum/material/uranium()
+ if(mat_list[MAT_PLASMA])
+ materials[MAT_PLASMA] = new /datum/material/plasma()
+ if(mat_list[MAT_BANANIUM])
+ materials[MAT_BANANIUM] = new /datum/material/bananium()
+
+/datum/material_container/Destroy()
+ owner = null
+ return ..()
+
+//For inserting an amount of material
+/datum/material_container/proc/insert_amount(amt, material_type = null)
+ if(amt > 0 && has_space(amt))
+ var/total_amount_saved = total_amount
+ if(material_type)
+ for(var/datum/material/M in materials)
+ if(M.material_type == material_type)
+ M.amount += amt
+ total_amount += amt
+ else
+ for(var/datum/material/M in materials)
+ M.amount += amt
+ total_amount += amt
+ return (total_amount - total_amount_saved)
+ return 0
+
+/datum/material_container/proc/insert_stack(obj/item/stack/S, amt = 0)
+ if(!amt)
+ amt = S.amount
+ var/material_amt = get_item_material_amount(S)
+ amt = min(amt, round(((max_amount - total_amount) / material_amt)))
+ if(!amt)
+ return 0
+
+ insert_materials(S,amt)
+ S.use(amt)
+ return amt
+
+/datum/material_container/proc/insert_item(obj/item/I, multiplier = 1)
+ if(!I)
+ return 0
+ if(istype(I,/obj/item/stack))
+ return insert_stack(I)
+
+ var/material_amount = get_item_material_amount(I)
+ if(!material_amount || !has_space(material_amount))
+ return 0
+
+ insert_materials(I, multiplier)
+ return material_amount
+
+/datum/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only
+ var/datum/material/M
+ for(var/MAT in materials)
+ M = materials[MAT]
+ M.amount += I.materials[MAT] * multiplier
+ total_amount += I.materials[MAT] * multiplier
+
+//For consuming material
+//mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200)
+/datum/material_container/proc/use_amount(list/mats)
+ if(!mats || !mats.len)
+ return 0
+
+ var/datum/material/M
+ for(var/MAT in materials)
+ M = materials[MAT]
+ if(M.amount < mats[MAT])
+ return 0
+
+ var/total_amount_save = total_amount
+ for(var/MAT in materials)
+ M = materials[MAT]
+ M.amount -= mats[MAT]
+ total_amount -= mats[MAT]
+
+ return total_amount_save - total_amount
+
+
+/datum/material_container/proc/use_amount_type(amt, material_type)
+ var/datum/material/M
+ M = materials[material_type]
+ if(M)
+ if(M.amount >= amt)
+ M.amount -= amt
+ total_amount -= amt
+ return amt
+ return 0
+
+//For spawning mineral sheets; internal use only
+/datum/material_container/proc/retrieve(sheet_amt, datum/material/M)
+ if(sheet_amt > 0 && M.amount >= (sheet_amt * MINERAL_MATERIAL_AMOUNT))
+ var/count = 0
+
+ while(sheet_amt > MAX_STACK_SIZE)
+ new M.sheet_type(get_turf(owner), MAX_STACK_SIZE)
+ count += MAX_STACK_SIZE
+ use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type)
+ sheet_amt -= MAX_STACK_SIZE
+
+ if(round(M.amount / MINERAL_MATERIAL_AMOUNT))
+ new M.sheet_type(get_turf(owner), sheet_amt)
+ count += sheet_amt
+ use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type)
+ return count
+ return 0
+
+/datum/material_container/proc/retrieve_sheets(sheet_amt, material_type)
+ if(materials[material_type])
+ return retrieve(sheet_amt, materials[material_type])
+ return 0
+
+/datum/material_container/proc/retrieve_amount(amt, material_type)
+ return retrieve_sheets(amount2sheet(amt),material_type)
+
+/datum/material_container/proc/retrieve_all()
+ var/result = 0
+ var/datum/material/M
+ for(var/MAT in materials)
+ M = materials[MAT]
+ result += retrieve_sheets(amount2sheet(M.amount), MAT)
+ return result
+
+/datum/material_container/proc/has_space(amt = 0)
+ return (total_amount + amt) <= max_amount
+
+/datum/material_container/proc/amount2sheet(amt)
+ if(amt >= MINERAL_MATERIAL_AMOUNT)
+ return round(amt / MINERAL_MATERIAL_AMOUNT)
+ return 0
+
+/datum/material_container/proc/sheet2amount(sheet_amt)
+ if(sheet_amt > 0)
+ return sheet_amt * MINERAL_MATERIAL_AMOUNT
+ return 0
+
+/datum/material_container/proc/amount(material_type)
+ var/datum/material/M = materials[material_type]
+ return M ? M.amount : 0
+
+/datum/material_container/proc/can_insert(obj/item/I)
+ return get_item_material_amount(I)
+
+//returns the amount of material relevant to this container;
+//if this container does not support glass, any glass in 'I' will not be taken into account
+/datum/material_container/proc/get_item_material_amount(obj/item/I)
+ if(!istype(I))
+ return 0
+ var/material_amount = 0
+ for(var/MAT in materials)
+ material_amount += I.materials[MAT]
+ return material_amount
+
+
+/datum/material
+ var/amount = 0
+ var/material_type = null
+ var/sheet_type = null
+
+/datum/material/metal
+
+/datum/material/metal/New()
+ ..()
+ material_type = MAT_METAL
+ sheet_type = /obj/item/stack/sheet/metal
+
+/datum/material/glass
+
+/datum/material/glass/New()
+ ..()
+ material_type = MAT_GLASS
+ sheet_type = /obj/item/stack/sheet/glass
+
+/datum/material/silver
+
+/datum/material/silver/New()
+ ..()
+ material_type = MAT_SILVER
+ sheet_type = /obj/item/stack/sheet/mineral/silver
+
+/datum/material/gold
+
+/datum/material/gold/New()
+ ..()
+ material_type = MAT_GOLD
+ sheet_type = /obj/item/stack/sheet/mineral/gold
+
+/datum/material/diamond
+
+/datum/material/diamond/New()
+ ..()
+ material_type = MAT_DIAMOND
+ sheet_type = /obj/item/stack/sheet/mineral/diamond
+
+/datum/material/uranium
+
+/datum/material/uranium/New()
+ ..()
+ material_type = MAT_URANIUM
+ sheet_type = /obj/item/stack/sheet/mineral/uranium
+
+/datum/material/plasma
+
+/datum/material/plasma/New()
+ ..()
+ material_type = MAT_PLASMA
+ sheet_type = /obj/item/stack/sheet/mineral/plasma
+
+/datum/material/bananium
+
+/datum/material/bananium/New()
+ ..()
+ material_type = MAT_BANANIUM
+ sheet_type = /obj/item/stack/sheet/mineral/bananium
\ No newline at end of file
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index bc29494d6ea..9505a0c48a1 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -8,7 +8,7 @@
item_state = "electronic"
throw_speed = 4
throw_range = 20
- m_amt = 500
+ materials = list(MAT_METAL=500)
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 603d293dd55..960b57edacd 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -105,7 +105,7 @@
var/area/alarm_area
var/danger_level = 0
var/alarmActivated = 0 // Manually activated (independent from danger level)
-
+
var/buildstage = 2 //2 is built, 1 is building, 0 is frame.
var/target_temperature = T0C+20
@@ -114,21 +114,21 @@
var/datum/radio_frequency/radio_connection
var/list/TLV = list()
-
+
var/report_danger_level = 1
-
+
/obj/machinery/alarm/monitor
report_danger_level = 0
-
+
/obj/machinery/alarm/server
preset = AALARM_PRESET_SERVER
-
+
/obj/machinery/alarm/vox
preset = AALARM_PRESET_VOX
-
+
/obj/machinery/alarm/kitchen_cold_room
preset = AALARM_PRESET_COLDROOM
-
+
/obj/machinery/alarm/proc/apply_preset(var/no_cycle_after=0)
// Propogate settings.
for (var/obj/machinery/alarm/AA in alarm_area)
@@ -143,10 +143,10 @@
"plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
"other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
"pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20), /* kpa */
- "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K
+ "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K
)
switch(preset)
- if(AALARM_PRESET_VOX)
+ if(AALARM_PRESET_VOX)
TLV = list(
"oxygen" = new/datum/tlv(-1.0, -1.0, 1, 2), // Partial pressure, kpa
"nitrogen" = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
@@ -154,9 +154,9 @@
"plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
"other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
"pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20), /* kpa */
- "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K
+ "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K
)
- if(AALARM_PRESET_SERVER)
+ if(AALARM_PRESET_SERVER)
TLV = list(
"oxygen" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), // Partial pressure, kpa
"nitrogen" = new/datum/tlv(-1.0, -1.0, -1.0, -1.0), // Partial pressure, kpa
@@ -166,7 +166,7 @@
"pressure" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), /* kpa */
"temperature" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), // K
)
- if(AALARM_PRESET_COLDROOM)
+ if(AALARM_PRESET_COLDROOM)
TLV = list(
"oxygen" = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
"nitrogen" = new/datum/tlv(-1.0, -1.0, -1.0, -1.0), // Partial pressure, kpa
@@ -176,7 +176,7 @@
"pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60), /* kpa */
"temperature" = new/datum/tlv(200, 210, 273.15, 283.15), // K
)
-
+
if(!no_cycle_after)
mode = AALARM_MODE_REPLACEMENT
apply_mode()
@@ -185,7 +185,7 @@
..()
air_alarms += src
air_alarms = sortAtom(air_alarms)
-
+
wires = new(src)
if(building)
@@ -223,7 +223,7 @@
set_frequency(frequency)
if (!master_is_operating())
elect_master()
-
+
/obj/machinery/alarm/proc/master_is_operating()
if (! alarm_area)
alarm_area = areaMaster
@@ -243,12 +243,12 @@
return
var/turf/simulated/location = loc
- if(!istype(location))
+ if(!istype(location))
return 0
var/datum/gas_mixture/environment = location.return_air()
var/datum/tlv/cur_tlv
-
+
handle_heating_cooling(environment, cur_tlv, location)
var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
@@ -256,13 +256,13 @@
cur_tlv = TLV["pressure"]
var/environment_pressure = environment.return_pressure()
var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
-
+
cur_tlv = TLV["oxygen"]
var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP)
cur_tlv = TLV["nitrogen"]
- var/nitrogen_dangerlevel = cur_tlv.get_danger_level(environment.nitrogen*GET_PP)
-
+ var/nitrogen_dangerlevel = cur_tlv.get_danger_level(environment.nitrogen*GET_PP)
+
cur_tlv = TLV["carbon dioxide"]
var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP)
@@ -291,11 +291,11 @@
if (old_danger_level!=danger_level)
apply_danger_level()
-
+
if (mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05)
mode = AALARM_MODE_SCRUBBING
apply_mode()
-
+
/obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment, var/datum/tlv/cur_tlv, var/turf/simulated/location)
cur_tlv = TLV["temperature"]
//Handle temperature adjustment here.
@@ -603,7 +603,7 @@
/obj/machinery/alarm/attack_robot(mob/user)
return attack_ai(user)
-
+
/obj/machinery/alarm/attack_ghost(user as mob)
if(stat & (BROKEN|MAINT))
return
@@ -614,22 +614,22 @@
if (.)
return
return interact(user)
-
+
/obj/machinery/alarm/interact(mob/user)
if(buildstage != 2)
return
if(wiresexposed && !istype(user, /mob/living/silicon/ai))
wires.Interact(user)
-
+
if(!shorted)
ui_interact(user)
/obj/machinery/alarm/proc/ui_air_status()
var/turf/location = get_turf(src)
- if(!istype(location))
+ if(!istype(location))
return
-
+
var/datum/gas_mixture/environment = location.return_air()
var/total = environment.oxygen + environment.nitrogen + environment.carbon_dioxide + environment.toxins
if(total==0)
@@ -754,7 +754,7 @@
scrubbers+=list(scrubber_data)
data["scrubbers"]=scrubbers
return data
-
+
/obj/machinery/alarm/proc/get_nano_data_console(mob/user)
var/data[0]
data["name"] = sanitize(name)
@@ -766,7 +766,7 @@
data["y"] = pos.y
data["z"] = pos.z
return data
-
+
/obj/machinery/alarm/proc/generate_thresholds_menu()
var/datum/tlv/selected
var/list/thresholds = list()
@@ -800,9 +800,9 @@
thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2))
return thresholds
-
+
/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state)
- var/list/href = state.href_list(user)
+ var/list/href = state.href_list(user)
var/remote_connection = 0
var/remote_access = 0
if(href)
@@ -812,8 +812,8 @@
var/list/data = get_nano_data(user, href)
data["remote_connection"] = remote_connection
- data["remote_access"] = remote_access
-
+ data["remote_access"] = remote_access
+
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "air_alarm.tmpl", name, 570, 410, state = state)
@@ -828,7 +828,7 @@
return 1
else
return !locked
-
+
/obj/machinery/alarm/proc/is_locked(mob/user as mob, href_list)
if(isobserver(user) && check_rights(R_ADMIN, 0, user))
return 0
@@ -838,13 +838,13 @@
return 0
else
return locked
-
+
/obj/machinery/alarm/proc/is_auth_rcon(href_list)
if(href_list && href_list["remote_connection"] && href_list["remote_access"])
return 1
else
return 0
-
+
/obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list())
if(buildstage != 2)
return STATUS_CLOSE
@@ -862,12 +862,12 @@
. = STATUS_UPDATE
return min(..(), .)
-/obj/machinery/alarm/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state)
+/obj/machinery/alarm/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state)
if(..(href, href_list, nowindow, state))
return 1
-
+
var/state_href = state.href_list(usr)
-
+
if(href_list["rcon"])
var/attempted_rcon_setting = text2num(href_list["rcon"])
switch(attempted_rcon_setting)
@@ -1101,5 +1101,4 @@ Just an object used in constructing air alarms
icon_state = "door_electronics"
desc = "Looks like a circuit. Probably is."
w_class = 2.0
- m_amt = 50
- g_amt = 50
+ materials = list(MAT_METAL=50, MAT_GLASS=50)
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 6228fe05ddd..69d6df5bb50 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -8,12 +8,6 @@
icon_state = "autolathe"
density = 1
- var/m_amount = 0.0
- var/max_m_amount = 150000.0
-
- var/g_amount = 0.0
- var/max_g_amount = 75000.0
-
var/operating = 0.0
var/list/queue = list()
var/queue_max_len = 12
@@ -40,6 +34,8 @@
var/selected_category
var/screen = 1
+ var/datum/material_container/materials
+
var/list/categories = list(
"Communication",
"Construction",
@@ -59,6 +55,7 @@
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1))
RefreshParts()
wires = new(src)
@@ -115,12 +112,7 @@
if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
- if(m_amount >= MINERAL_MATERIAL_AMOUNT)
- var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
- G.amount = round(m_amount / MINERAL_MATERIAL_AMOUNT)
- if(g_amount >= MINERAL_MATERIAL_AMOUNT)
- var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
- G.amount = round(g_amount / MINERAL_MATERIAL_AMOUNT)
+ materials.retrieve_all()
default_deconstruction_crowbar(O)
return 1
else
@@ -129,48 +121,37 @@
if (stat)
return 1
- if (src.m_amount + O.m_amt > max_m_amount)
- user << "The autolathe is full. Please remove metal from the autolathe in order to insert more."
+ var/material_amount = materials.can_insert(O)
+ if(!material_amount)
+ user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe."
return 1
- if (src.g_amount + O.g_amt > max_g_amount)
- user << "The autolathe is full. Please remove glass from the autolathe in order to insert more."
+ if(!materials.has_space(material_amount))
+ user << "The autolathe is full. Please remove metal or glass from the autolathe in order to insert more."
return 1
- if (O.m_amt == 0 && O.g_amt == 0)
- user << "This object does not contain significant amounts of metal or glass, or cannot be accepted by the autolathe due to size or hazardous materials."
+ if(!user.unEquip(O))
+ user << "\The [O] is stuck to you and cannot be placed into the autolathe."
return 1
- var/amount = 1
- var/obj/item/stack/stack
- var/m_amt = O.m_amt
- var/g_amt = O.g_amt
- if (istype(O, /obj/item/stack))
- stack = O
- amount = stack.amount
- if (m_amt)
- amount = min(amount, round((max_m_amount-src.m_amount)/m_amt))
- flick("autolathe_o",src)//plays metal insertion animation
- if (g_amt)
- amount = min(amount, round((max_g_amount-src.g_amount)/g_amt))
- flick("autolathe_r",src)//plays glass insertion animation
- stack.use(amount)
- else
- if(!user.unEquip(O))
- user << "/the [O] is stuck to your hand, you can't put it in \the [src]!"
- O.loc = src
- icon_state = "autolathe"
busy = 1
- use_power(max(1000, (m_amt+g_amt)*amount/10))
- src.m_amount += m_amt * amount
- src.g_amount += g_amt * amount
- user << "You insert [amount] sheet[amount>1 ? "s" : ""] to the autolathe."
- if (O && O.loc == src)
- qdel(O)
+ var/inserted = materials.insert_item(O)
+ if(inserted)
+ if(istype(O,/obj/item/stack))
+ if (O.materials[MAT_METAL])
+ flick("autolathe_o",src)//plays metal insertion animation
+ if (O.materials[MAT_GLASS])
+ flick("autolathe_r",src)//plays glass insertion animation
+ user << "You insert [inserted] sheet[inserted>1 ? "s" : ""] to the autolathe."
+ use_power(inserted*100)
+ else
+ user << "You insert a material total of [inserted] to the autolathe."
+ use_power(max(500,inserted/10))
+ qdel(O)
busy = 0
src.updateUsrDialog()
-/obj/machinery/autolathe/attack_ghost(mob/user)
+/obj/machinery/autolathe/attack_ghost(mob/user)
interact(user)
-
+
/obj/machinery/autolathe/attack_hand(mob/user)
if(..(user, 0))
return
@@ -179,7 +160,7 @@
/obj/machinery/autolathe/Topic(href, href_list)
if(..())
return 1
-
+
if(href_list["menu"])
screen = text2num(href_list["menu"])
@@ -200,7 +181,7 @@
//multiplier checks : only stacks can have one and its value is 1, 10 ,25 or max_multiplier
var/multiplier = text2num(href_list["multiplier"])
- var/max_multiplier = min(50, design_last_ordered.materials["$metal"] ?round(m_amount/design_last_ordered.materials["$metal"]):INFINITY,design_last_ordered.materials["$glass"]?round(g_amount/design_last_ordered.materials["$glass"]):INFINITY)
+ var/max_multiplier = min(50, design_last_ordered.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/design_last_ordered.materials[MAT_METAL]):INFINITY,design_last_ordered.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/design_last_ordered.materials[MAT_GLASS]):INFINITY)
var/is_stack = ispath(design_last_ordered.build_path, /obj/item/stack)
if(!is_stack && (multiplier > 1))
@@ -248,8 +229,7 @@
for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts)
tot_rating += MB.rating
tot_rating *= 25000
- max_m_amount = tot_rating * 2
- max_g_amount = tot_rating
+ materials.max_amount = tot_rating * 3
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
prod_coeff += M.rating - 1
@@ -261,8 +241,8 @@
desc = initial(desc)+"\nIt's building \a [initial(D.name)]."
var/is_stack = ispath(D.build_path, /obj/item/stack)
var/coeff = get_coeff(D)
- var/metal_cost = D.materials["$metal"]
- var/glass_cost = D.materials["$glass"]
+ var/metal_cost = D.materials[MAT_METAL]
+ var/glass_cost = D.materials[MAT_GLASS]
var/power = max(2000, (metal_cost+glass_cost)*multiplier/5)
if (can_build(D,multiplier))
being_built = list(D,multiplier)
@@ -270,11 +250,11 @@
icon_state = "autolathe"
flick("autolathe_n",src)
if(is_stack)
- m_amount -= metal_cost*multiplier
- g_amount -= glass_cost*multiplier
+ var/list/materials_used = list(MAT_METAL=metal_cost*multiplier, MAT_GLASS=glass_cost*multiplier)
+ materials.use_amount(materials_used)
else
- m_amount -= metal_cost/coeff
- g_amount -= glass_cost/coeff
+ var/list/materials_used = list(MAT_METAL=metal_cost/coeff, MAT_GLASS=glass_cost/coeff)
+ materials.use_amount(materials_used)
updateUsrDialog()
sleep(32/coeff)
if(is_stack)
@@ -282,38 +262,34 @@
S.amount = multiplier
else
var/obj/item/new_item = new D.build_path(BuildTurf)
- new_item.m_amt /= coeff
- new_item.g_amt /= coeff
- if(m_amount < 0)
- m_amount = 0
- if(g_amount < 0)
- g_amount = 0
+ new_item.materials[MAT_METAL] /= coeff
+ new_item.materials[MAT_GLASS] /= coeff
updateUsrDialog()
desc = initial(desc)
/obj/machinery/autolathe/proc/can_build(var/datum/design/D,var/multiplier=1,var/custom_metal,var/custom_glass)
var/coeff = get_coeff(D)
- var/metal_amount = m_amount
+ var/metal_amount = materials.amount(MAT_METAL)
if(custom_metal)
metal_amount = custom_metal
- var/glass_amount = g_amount
+ var/glass_amount = materials.amount(MAT_GLASS)
if(custom_glass)
glass_amount = custom_glass
- if(D.materials["$metal"] && (metal_amount < (multiplier*D.materials["$metal"] / coeff)))
+ if(D.materials[MAT_METAL] && (metal_amount < (multiplier*D.materials[MAT_METAL] / coeff)))
return 0
- if(D.materials["$glass"] && (glass_amount < (multiplier*D.materials["$glass"] / coeff)))
+ if(D.materials[MAT_GLASS] && (glass_amount < (multiplier*D.materials[MAT_GLASS] / coeff)))
return 0
return 1
/obj/machinery/autolathe/proc/get_design_cost_as_list(var/datum/design/D,var/multiplier=1)
var/list/OutputList = list(0,0)
var/coeff = get_coeff(D)
- if(D.materials["$metal"])
- OutputList[1] = (D.materials["$metal"] / coeff)*multiplier
- if(D.materials["$glass"])
- OutputList[2] = (D.materials["$glass"] / coeff)*multiplier
+ if(D.materials[MAT_METAL])
+ OutputList[1] = (D.materials[MAT_METAL] / coeff)*multiplier
+ if(D.materials[MAT_GLASS])
+ OutputList[2] = (D.materials[MAT_GLASS] / coeff)*multiplier
return OutputList
/obj/machinery/autolathe/proc/get_processing_line()
@@ -324,8 +300,8 @@
return output
/obj/machinery/autolathe/proc/get_queue()
- var/temp_metal = m_amount
- var/temp_glass = g_amount
+ var/temp_metal = materials.amount(MAT_METAL)
+ var/temp_glass = materials.amount(MAT_GLASS)
var/output = "
"
output += ""
output += " Queue contains:"
@@ -402,8 +378,9 @@
var/dat = " "
dat += ""
dat += "Autolathe Menu:"
- dat += " Metal amount: [src.m_amount] / [max_m_amount] cm 3"
- dat += " Glass amount: [src.g_amount] / [max_g_amount] cm 3"
+ dat += " Total amount: [materials.total_amount] / [materials.max_amount] cm 3"
+ dat += " Metal amount: [materials.amount(MAT_METAL)] cm 3"
+ dat += " Glass amount: [materials.amount(MAT_GLASS)] cm 3"
dat += " | Preview
  |
"
@@ -1015,6 +1017,9 @@ datum/preferences
if("undershirt")
undershirt = random_undershirt(gender)
ShowChoices(user)
+ if("socks")
+ socks = random_socks(gender)
+ ShowChoices(user)
if("eyes")
r_eyes = rand(0,255)
g_eyes = rand(0,255)
@@ -1232,6 +1237,22 @@ datum/preferences
undershirt = new_undershirt
ShowChoices(user)
+ if("socks")
+ var/list/valid_sockstyles = list()
+ for(var/sockstyle in socks_list)
+ var/datum/sprite_accessory/S = socks_list[sockstyle]
+ if(gender == MALE && S.gender == FEMALE)
+ continue
+ if(gender == FEMALE && S.gender == MALE)
+ continue
+ if( !(species in S.species_allowed))
+ continue
+ valid_sockstyles[sockstyle] = socks_list[sockstyle]
+ var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles
+ ShowChoices(user)
+ if(new_socks)
+ socks = new_socks
+
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null
if(new_eyes)
@@ -1570,6 +1591,7 @@ datum/preferences
character.underwear = underwear
character.undershirt = undershirt
+ character.socks = socks
if(body_accessory)
character.body_accessory = body_accessory_by_name["[body_accessory]"]
diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm
index f89a76d7689..f60b315d912 100644
--- a/code/modules/client/preferences_mysql.dm
+++ b/code/modules/client/preferences_mysql.dm
@@ -148,8 +148,11 @@
rlimb_data = params2list(query.item[51])
nanotrasen_relation = query.item[52]
speciesprefs = text2num(query.item[53])
- body_accessory = query.item[54]
+ //socks
+ socks = query.item[54]
+ body_accessory = query.item[55]
+
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name)
@@ -197,6 +200,9 @@
disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities))
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
+ socks = sanitize_text(socks, initial(socks))
+ body_accessory = sanitize_text(body_accessory, initial(body_accessory))
+
// if(isnull(disabilities)) disabilities = 0
if(!player_alt_titles) player_alt_titles = new()
if(!organ_data) src.organ_data = list()
@@ -269,6 +275,7 @@
rlimb_data='[rlimblist]',
nanotrasen_relation='[nanotrasen_relation]',
speciesprefs='[speciesprefs]',
+ socks='[socks]',
body_accessory='[body_accessory]'
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
@@ -298,7 +305,8 @@
flavor_text, med_record, sec_record, gen_record,
player_alt_titles, be_special,
disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs,
- body_accessory)
+ socks, body_accessory)
+
VALUES
('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]',
'[age]', '[sql_sanitize_text(species)]', '[sql_sanitize_text(language)]',
@@ -316,7 +324,8 @@
'[sql_sanitize_text(flavor_text)]', '[sql_sanitize_text(med_record)]', '[sql_sanitize_text(sec_record)]', '[sql_sanitize_text(gen_record)]',
'[playertitlelist]', '[be_special]',
'[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]',
- '[body_accessory]')
+ '[socks]', '[body_accessory]')
+
"}
)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 8e1c0e12964..f1dd7b307f3 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -141,6 +141,7 @@
S["eyes_blue"] >> b_eyes
S["underwear"] >> underwear
S["undershirt"] >> undershirt
+ S["socks"] >> socks
S["backbag"] >> backbag
S["b_type"] >> b_type
S["accent"] >> accent
@@ -203,6 +204,7 @@
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear))
undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt))
+ socks = sanitize_integer(socks,1 socks_t.len, initial(socks))
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
accent = sanitize_text(accent, initial(accent))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 6b66b5fb244..993ec11e7c1 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -130,6 +130,7 @@
w_class = 2.0
flags = GLASSESCOVERSEYES
slot_flags = SLOT_EYES
+ materials = list(MAT_GLASS = 250)
var/vision_flags = 0
var/darkness_view = 0//Base human is 2
var/invisa_view = 0
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 6224f0d5f9e..f744b9fa26b 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -17,8 +17,7 @@
icon_state = "welding"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
- m_amt = 1750
- g_amt = 400
+ materials = list(MAT_METAL=1750, MAT_GLASS=400)
var/up = 0
flash_protect = 2
tint = 2
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 769f1644e8d..1ed9ffce30c 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -21,8 +21,7 @@
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
icon_state = "weldingmask"
item_state = "weldingmask"
- m_amt = 3000
- g_amt = 1000
+ materials = list(MAT_METAL=4000, MAT_GLASS=2000)
var/up = 0
flash_protect = 2
tint = 2
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index e43b72a499c..ba2e2f7f723 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -118,10 +118,11 @@
desc = "A bronze medal."
icon_state = "bronze"
_color = "bronze"
+ materials = list(MAT_METAL=1000)
/obj/item/clothing/accessory/medal/conduct
name = "distinguished conduct medal"
- desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
+ desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
/obj/item/clothing/accessory/medal/bronze_heart
name = "bronze heart medal"
@@ -137,6 +138,7 @@
desc = "A silver medal."
icon_state = "silver"
_color = "silver"
+ materials = list(MAT_SILVER=1000)
/obj/item/clothing/accessory/medal/silver/valor
name = "medal of valor"
@@ -151,6 +153,7 @@
desc = "A prestigious golden medal."
icon_state = "gold"
_color = "gold"
+ materials = list(MAT_GOLD=1000)
/obj/item/clothing/accessory/medal/gold/captain
name = "medal of captaincy"
diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm
index dcbff456b37..fd8f3d79c6b 100644
--- a/code/modules/fish/fish_items.dm
+++ b/code/modules/fish/fish_items.dm
@@ -153,7 +153,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi
icon_state = "teeth"
force = 2.0
throwforce = 5.0
- g_amt = 0
+ materials = list()
/obj/item/weapon/shard/shark_teeth/New()
src.pixel_x = rand(-5,5)
diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm
index d3db34ec060..137d724f9cd 100644
--- a/code/modules/hydroponics/trays/tray_tools.dm
+++ b/code/modules/hydroponics/trays/tray_tools.dm
@@ -264,7 +264,7 @@
force = 5.0
throwforce = 7.0
w_class = 2.0
- m_amt = 50
+ materials = list(MAT_METAL=50)
attack_verb = list("slashed", "sliced", "cut", "clawed")
//Hatchets and things to kill kudzu
@@ -281,7 +281,7 @@
throwforce = 15.0
throw_speed = 4
throw_range = 4
- m_amt = 15000
+ materials = list(MAT_METAL=15000)
origin_tech = "materials=2;combat=1"
attack_verb = list("chopped", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm
index 9516af4268f..16643f8842a 100644
--- a/code/modules/mining/coins.dm
+++ b/code/modules/mining/coins.dm
@@ -25,36 +25,43 @@
/obj/item/weapon/coin/gold
cmineral = "gold"
icon_state = "coin_gold_heads"
+ materials = list(MAT_GOLD = 200)
credits = 160
/obj/item/weapon/coin/silver
cmineral = "silver"
icon_state = "coin_silver_heads"
+ materials = list(MAT_SILVER = 200)
credits = 40
/obj/item/weapon/coin/diamond
cmineral = "diamond"
icon_state = "coin_diamond_heads"
+ materials = list(MAT_DIAMOND = 200)
credits = 120
/obj/item/weapon/coin/iron
cmineral = "iron"
icon_state = "coin_iron_heads"
+ materials = list(MAT_METAL = 200)
credits = 20
/obj/item/weapon/coin/plasma
cmineral = "plasma"
icon_state = "coin_plasma_heads"
+ materials = list(MAT_PLASMA = 200)
credits = 80
/obj/item/weapon/coin/uranium
cmineral = "uranium"
icon_state = "coin_uranium_heads"
+ materials = list(MAT_URANIUM = 200)
credits = 160
/obj/item/weapon/coin/clown
cmineral = "bananium"
icon_state = "coin_bananium_heads"
+ materials = list(MAT_BANANIUM = 200)
credits = 600 //makes the clown cri
/obj/item/weapon/coin/adamantine
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index eaf2dfe384f..1c6aa5a4500 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -58,7 +58,7 @@
throwforce = 10.0
item_state = "pickaxe"
w_class = 4.0
- m_amt = 3750 //one sheet, but where can you make them?
+ materials = list(MAT_METAL=3750) //one sheet, but where can you make them?
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
origin_tech = "materials=1;engineering=1"
attack_verb = list("hit", "pierced", "sliced", "attacked")
@@ -151,7 +151,7 @@
throwforce = 4.0
item_state = "shovel"
w_class = 3.0
- m_amt = 50
+ materials = list(MAT_METAL=50)
origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index a6dff1764df..a2a7cbc706a 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -393,6 +393,13 @@ var/global/list/rockTurfEdgeCache
gets_drilled()
..()
+/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M)
+ M << " You start digging into the rock..."
+ playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
+ if(do_after(M, 40, target = src))
+ M << " You tunnel into the rock."
+ gets_drilled()
+
/turf/simulated/mineral/Bumped(AM as mob|obj)
. = ..()
if(istype(AM,/mob/living/carbon/human))
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 5e6a471834d..d354671f565 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -8,10 +8,6 @@
w_class = 3
origin_tech = "biotech=3"
- var/list/construction_cost = list("metal"=1000,"glass"=500)
- var/construction_time = 75
- //these vars are so the mecha fabricator doesn't shit itself anymore. --NEO
-
req_access = list(access_robotics)
//Revised. Brainmob is now contained directly within object of transfer. MMI in this case.
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 15e71c98abc..92a2ebcd053 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -6,8 +6,6 @@
w_class = 3
origin_tech = "engineering=4;materials=4;bluespace=2;programming=4"
- construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"plasma"=100,"diamond"=10)
- construction_time = 75
var/searching = 0
var/askDelay = 10 * 60 * 1
//var/mob/living/carbon/brain/brainmob = null
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a63f487aec7..b5e637fa546 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -244,6 +244,8 @@
stat(null, eta_status)
if (client.statpanel == "Status")
+ if(locate(/obj/item/device/assembly/health) in src)
+ stat(null, "Health: [health]")
if (internal)
if (!internal.air_contents)
qdel(internal)
@@ -431,7 +433,7 @@
var/armor_block = run_armor_check(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block)
-/mob/living/carbon/human/proc/is_loyalty_implanted()
+/mob/living/carbon/human/proc/is_loyalty_implanted()
for(var/L in contents)
if(istype(L, /obj/item/weapon/implant/loyalty))
for(var/obj/item/organ/external/O in organs)
@@ -694,7 +696,7 @@
// if looting pockets with gloves, do it quietly
if(href_list["pockets"])
- if(isanimal(usr))
+ if(isanimal(usr))
return //animals cannot strip people
if(frozen)
@@ -726,19 +728,19 @@
// Update strip window
if(usr.machine == src && in_range(src, usr))
show_inv(usr)
-
+
else if(!pickpocket)
// Display a warning if the user mocks up
src << " You feel your [pocket_side] pocket being fumbled with!"
// if looting id with gloves, do it quietly - this allows pickpocket gloves to take/place id stealthily - Bone White
if(href_list["item"])
- if(isanimal(usr))
+ if(isanimal(usr))
return //animals cannot strip people
-
+
if(frozen)
usr << "\red Do not attempt to strip frozen people."
- return
+ return
var/itemTarget = href_list["item"]
if(itemTarget == "id")
if(pickpocket)
@@ -1158,7 +1160,7 @@
if(!fail_msg)
fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into."
user << " [fail_msg]"
-
+
/mob/living/carbon/human/proc/check_has_mouth()
// Todo, check stomach organ when implemented.
var/obj/item/organ/external/head/H = get_organ("head")
@@ -1170,7 +1172,7 @@
if(stat==DEAD)return
if(!check_has_mouth())
- return
+ return
if(!lastpuke)
lastpuke = 1
@@ -1517,16 +1519,16 @@
W.add_fingerprint(src)
-// Allows IPC's to change their monitor display
+// Allows IPC's to change their monitor display
/mob/living/carbon/human/proc/change_monitor()
- set category = "IC"
+ set category = "IC"
set name = "Change Monitor Display"
set desc = "Change the display on your monitor."
-
+
if(stat || paralysis || stunned || weakened)
src << " You cannot change your monitor display in your current state."
- return
-
+ return
+
var/list/hair = list()
for(var/i in hair_styles_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
@@ -1540,7 +1542,7 @@
h_style = new_style
update_hair()
-
+
//Putting a couple of procs here that I don't know where else to dump.
//Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse).
/mob/living/carbon/human/proc/leap()
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 38523536807..eead644cc58 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -30,7 +30,8 @@
var/b_type = "A+" //Player's bloodtype
var/underwear = "Nude" //Which underwear the player wants
- var/undershirt = "Nude" //Which undershirt the player wants.
+ var/undershirt = "Nude" //Which undershirt the player wants
+ var/socks = "Nude" //Which socks the player wants
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
//Equipment slots
@@ -83,4 +84,4 @@
var/fire_dmi = 'icons/mob/OnFire.dmi'
var/fire_sprite = "Standing"
- var/datum/body_accessory/body_accessory = null
\ No newline at end of file
+ var/datum/body_accessory/body_accessory = null
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 82f09f0f489..875a3a85260 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -64,6 +64,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
life_tick++
var/datum/gas_mixture/environment = loc.return_air()
+ in_stasis = 0
if(istype(loc, /obj/structure/closet/body_bag/cryobag))
var/obj/structure/closet/body_bag/cryobag/loc_as_cryobag = loc
if(!loc_as_cryobag.opened)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index b62ac1a786b..771a2a79e85 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -327,6 +327,13 @@ var/global/list/damage_icon_parts = list()
if(U2)
stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
+
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
+
+
if(update_icons)
update_icons()
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index ae09c2287a8..d0469bc42dc 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -135,8 +135,6 @@
/obj/item/robot_parts/robot_component
icon = 'icons/obj/robot_component.dmi'
icon_state = "working"
- construction_time = 200
- construction_cost = list("metal"=5000)
var/brute = 0
var/burn = 0
@@ -190,7 +188,7 @@
user << " Key: Suffocation/Toxin/Burns/Brute"
user << " Body Temperature: ???"
return
-
+
var/scan_type
if(istype(M, /mob/living/silicon/robot))
scan_type = "robot"
@@ -253,5 +251,5 @@
user << "[capitalize(O.name)]: [O.damage]"
if(!organ_found)
user << " No prosthetics located."
-
+
src.add_fingerprint(user)
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index a09f843b118..80e715dc7d3 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -212,8 +212,9 @@
if(camera)
camera.status = 0
- held_item.loc = src.loc
- held_item = null
+ if(held_item)
+ held_item.forceMove(src.loc)
+ held_item = null
robogibs(src.loc, viruses)
qdel(src)
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index b60ebe12c5d..77f48b976d5 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -7,6 +7,7 @@ datum/preferences
gender = pick(MALE, FEMALE)
underwear = random_underwear(gender)
undershirt = random_undershirt(gender)
+ socks = random_socks(gender)
if(species == "Human")
s_tone = random_skin_tone()
h_style = random_hair_style(gender, species)
@@ -264,6 +265,12 @@ datum/preferences
if(U2)
undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY)
+ var/icon/socks_s = null
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY)
+
var/icon/clothes_s = null
var/uniform_dmi='icons/mob/uniform.dmi'
if(disabilities&DISABILITY_FLAG_FAT)
@@ -792,6 +799,8 @@ datum/preferences
preview_icon.Blend(underwear_s, ICON_OVERLAY)
if(undershirt_s)
preview_icon.Blend(undershirt_s, ICON_OVERLAY)
+ if(socks_s)
+ preview_icon.Blend(socks_s, ICON_OVERLAY)
if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY)
preview_icon_front = new(preview_icon, dir = SOUTH)
@@ -800,4 +809,5 @@ datum/preferences
del(eyes_s)
del(underwear_s)
del(undershirt_s)
+ del(socks_s)
del(clothes_s)
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 45fe53c3d82..5cc722bb7fd 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -1260,4 +1260,193 @@
name = "Fire Tank-Top"
icon_state = "tank_fire"
gender = NEUTER
-//end tanktops
\ No newline at end of file
+//end tanktops
+
+///////////////////////
+// Socks Definitions //
+///////////////////////
+/datum/sprite_accessory/socks
+ icon = 'icons/mob/underwear.dmi'
+
+/datum/sprite_accessory/socks/nude
+ name = "Nude"
+ icon_state = null
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_norm
+ name = "Normal White"
+ icon_state = "white_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_norm
+ name = "Normal Black"
+ icon_state = "black_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_short
+ name = "Short White"
+ icon_state = "white_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_short
+ name = "Short Black"
+ icon_state = "black_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_knee
+ name = "Knee-high White"
+ icon_state = "white_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_knee
+ name = "Knee-high Black"
+ icon_state = "black_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_knee
+ name = "Knee-high Thin"
+ icon_state = "thin_knee"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_knee
+ name = "Knee-high Striped"
+ icon_state = "striped_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_knee
+ name = "Knee-high Rainbow"
+ icon_state = "rainbow_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_thigh
+ name = "Thigh-high White"
+ icon_state = "white_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/black_thigh
+ name = "Thigh-high Black"
+ icon_state = "black_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_thigh
+ name = "Thigh-high Thin"
+ icon_state = "thin_thigh"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_thigh
+ name = "Thigh-high Striped"
+ icon_state = "striped_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_thigh
+ name = "Thigh-high Rainbow"
+ icon_state = "rainbow_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/pantyhose
+ name = "Pantyhose"
+ icon_state = "pantyhose"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_fishnet
+ name = "Black Fishnet"
+ icon_state = "black_fishnet"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/vox_white
+ name = "Vox White"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black
+ name = "Vox Black"
+ icon_state = "vox_black"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin
+ name = "Vox Black Thin"
+ icon_state = "vox_blackthin"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow
+ name = "Vox Rainbow"
+ icon_state = "vox_rainbow"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped
+ name = "Vox Stripped"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_white_thigh
+ name = "Vox Thigh-high White"
+ icon_state = "vox_whiteTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black_thigh
+ name = "Vox Thigh-high Black"
+ icon_state = "vox_blackTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin_thigh
+ name = "Vox Thigh-high Thin"
+ icon_state = "vox_blackthinTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow_thigh
+ name = "Vox Thigh-high Rainbow"
+ icon_state = "vox_rainbowTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped_thigh
+ name = "Vox Thigh-high Stripped"
+ icon_state = "vox_strippedTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_fishnet
+ name = "Vox Fishnets"
+ icon_state = "vox_fishnet"
+ gender = NEUTER
+ species_allowed = list("Vox")
\ No newline at end of file
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 3ab57ea1437..fe721a77d6d 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -21,7 +21,7 @@
w_class = 1.0
throw_speed = 3
throw_range = 7
- m_amt = 10
+ materials = list(MAT_METAL=10)
var/colour = "black" //what colour the ink is!
pressure_resistance = 2
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 2876c7ad89a..d11d6558cce 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -444,7 +444,7 @@
item_state = "videocam"
w_class = 2.0
slot_flags = SLOT_BELT
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
var/on = 0
var/obj/machinery/camera/camera
var/icon_on = "videocam_on"
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index f67021517a4..5a3df2ff47f 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -8,7 +8,7 @@
w_class = 1.0
throw_speed = 3
throw_range = 7
- m_amt = 60
+ materials = list(MAT_METAL=60)
_color = "cargo"
pressure_resistance = 2
attack_verb = list("stamped")
@@ -76,7 +76,7 @@
name = "Nanotrasen Representative's rubber stamp"
icon_state = "stamp-cent"
_color = "centcom"
-
+
/obj/item/weapon/stamp/syndicate
name = "suspicious rubber stamp"
icon_state = "stamp-syndicate"
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index ea9a92f3230..f35d0f6353b 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -470,8 +470,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
w_class = 2.0
throw_speed = 2
throw_range = 5
- m_amt = 50
- g_amt = 20
+ materials = list(MAT_METAL=50, MAT_GLASS=20)
flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "coil"
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 46242540f8f..709bd0cbaff 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -605,7 +605,7 @@
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
var/base_state
var/switchcount = 0 // number of times switched
- m_amt = 60
+ materials = list(MAT_METAL=60)
var/rigged = 0 // true if rigged to explode
var/brightness_range = 2 //how much light it gives off
var/brightness_power = 1
@@ -617,7 +617,7 @@
icon_state = "ltube"
base_state = "ltube"
item_state = "c_tube"
- g_amt = 100
+ materials = list(MAT_GLASS=100)
brightness_range = 8
brightness_power = 3
@@ -633,7 +633,7 @@
icon_state = "lbulb"
base_state = "lbulb"
item_state = "contvapour"
- g_amt = 100
+ materials = list(MAT_GLASS=100)
brightness_range = 5
brightness_power = 2
brightness_color = "#a0a080"
@@ -648,7 +648,7 @@
icon_state = "fbulb"
base_state = "fbulb"
item_state = "egg4"
- g_amt = 100
+ materials = list(MAT_GLASS=100)
brightness_range = 5
brightness_power = 2
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 6b23a7dae2f..57ed66625ec 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -67,7 +67,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "syringe_kit"
- m_amt = 30000
+ materials = list(MAT_METAL=30000)
throwforce = 2
w_class = 1.0
throw_speed = 4
diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm
index 5ceb6aa386b..18cd36a7fc9 100644
--- a/code/modules/projectiles/ammunition/ammo_casings.dm
+++ b/code/modules/projectiles/ammunition/ammo_casings.dm
@@ -38,7 +38,7 @@
icon_state = "blshell"
caliber = "shotgun"
projectile_type = "/obj/item/projectile/bullet"
- m_amt = 4000
+ materials = list(MAT_METAL=4000)
/obj/item/ammo_casing/shotgun/buckshot
@@ -55,7 +55,7 @@
desc = "A weak beanbag slug for riot control."
icon_state = "bshell"
projectile_type = "/obj/item/projectile/bullet/weakbullet/rubber"
- m_amt = 250
+ materials = list(MAT_METAL=250)
/obj/item/ammo_casing/shotgun/improvised
@@ -63,7 +63,7 @@
desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards."
icon_state = "gshell"
projectile_type = "/obj/item/projectile/bullet/pellet/weak"
- m_amt = 250
+ materials = list(MAT_METAL=250)
pellets = 5
deviation = 30
@@ -73,7 +73,7 @@
propellant. It's like playing russian roulette, with a shotgun."
icon_state = "improvshell"
projectile_type = /obj/item/projectile/bullet/pellet/random
- m_amt = 250
+ materials = list(MAT_METAL=250)
pellets = 5
deviation = 30
@@ -86,7 +86,7 @@
desc = "A stunning taser slug."
icon_state = "stunshell"
projectile_type = "/obj/item/projectile/bullet/stunshot"
- m_amt = 200
+ materials = list(MAT_METAL=250)
/obj/item/ammo_casing/shotgun/meteorshot
@@ -164,7 +164,7 @@
desc = "A tranquilizer round used to subdue individuals utilizing stimulants."
icon_state = "cshell"
projectile_type = "/obj/item/projectile/bullet/dart/syringe/tranquilizer"
- m_amt = 250
+ materials = list(MAT_METAL=250)
/obj/item/ammo_casing/syringegun
name = "syringe gun spring"
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index 36bb1207542..36ebbce963b 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -54,7 +54,7 @@
origin_tech = "combat=2"
ammo_type = /obj/item/ammo_casing/shotgun
max_ammo = 8
- m_amt = 100000
+ materials = list(MAT_METAL=32000)
/obj/item/ammo_box/shotgun/buck
name = "Ammunition Box (buckshot)"
@@ -63,15 +63,15 @@
/obj/item/ammo_box/shotgun/stun
name = "Ammunition Box (stun shells)"
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
- m_amt = 20000
+ materials = list(MAT_METAL=2000)
/obj/item/ammo_box/shotgun/beanbag
name = "Ammunition Box (beanbag shells)"
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
- m_amt = 4000
+ materials = list(MAT_METAL=2000)
/obj/item/ammo_box/shotgun/tranquilizer
name = "Ammunition Box (tranquilizer darts)"
icon_state = "45box"
ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer
- m_amt = 2000
\ No newline at end of file
+ materials = list(MAT_METAL=2000)
\ No newline at end of file
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 44d510b42f5..8e3fd960123 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -10,7 +10,7 @@
item_state = "gun"
flags = CONDUCT
slot_flags = SLOT_BELT
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
w_class = 3.0
throwforce = 5
throw_speed = 4
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 25a83332d9a..16141ac7da4 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -6,7 +6,7 @@
fire_sound = 'sound/weapons/Laser.ogg'
charge_cost = 830
w_class = 3.0
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
origin_tech = "combat=3;magnets=2"
projectile_type = "/obj/item/projectile/beam"
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 0eee855c3da..d3e132d6210 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -272,7 +272,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
icon_state = "crossbow"
item_state = "crossbow"
w_class = 2
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
origin_tech = "combat=2;magnets=2;syndicate=5"
silenced = 1
projectile_type = "/obj/item/projectile/energy/bolt"
@@ -285,7 +285,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
desc = "A reverse engineered weapon using syndicate technology."
icon_state = "crossbowlarge"
w_class = 3
- m_amt = 4000
+ materials = list(MAT_METAL=4000)
origin_tech = "combat=2;magnets=2;syndicate=3" //can be further researched for more syndie tech
silenced = 0
projectile_type = "/obj/item/projectile/energy/bolt/large"
@@ -294,7 +294,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
desc = "One and done!"
icon_state = "crossbowlarge"
origin_tech = null
- m_amt = 0
+ materials = list()
/obj/item/weapon/gun/energy/plasmacutter
name = "plasma cutter"
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 22704b55079..d1f0e244d6a 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -63,7 +63,7 @@
icon_state = "crossbow"
w_class = 2.0
item_state = "crossbow"
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
origin_tech = "combat=2;magnets=2;syndicate=5"
silenced = 1
fire_sound = 'sound/weapons/Genhit.ogg'
@@ -98,7 +98,7 @@
silenced = 0
w_class = 3.0
force = 10
- m_amt = 4000
+ materials = list(MAT_METAL=4000)
projectile_type = "/obj/item/projectile/energy/bolt/large"
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 81e47aaceed..4853c5e474f 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -8,7 +8,7 @@
icon_state = "pistol"
origin_tech = "combat=2;materials=2"
w_class = 3.0
- m_amt = 1000
+ materials = list(MAT_METAL=1000)
// recoil = 1
var/mag_type = "/obj/item/ammo_box/magazine/m10mm" //Removes the need for max_ammo and caliber info
var/obj/item/ammo_box/magazine/magazine
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index f8661d168e8..29a67ffe492 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -5,621 +5,618 @@ var/const/INGEST = 2
///////////////////////////////////////////////////////////////////////////////////
-datum
- reagents
- var/list/datum/reagent/reagent_list = new/list()
- var/total_volume = 0
- var/maximum_volume = 100
- var/atom/my_atom = null
+/datum/reagents
+ var/list/datum/reagent/reagent_list = new/list()
+ var/total_volume = 0
+ var/maximum_volume = 100
+ var/atom/my_atom = null
- New(maximum=100)
- maximum_volume = maximum
+/datum/reagents/New(maximum=100)
+ maximum_volume = maximum
- //I dislike having these here but map-objects are initialised before world/New() is called. >_>
- if(!chemical_reagents_list)
- //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
- var/paths = subtypesof(/datum/reagent)
- chemical_reagents_list = list()
- for(var/path in paths)
- var/datum/reagent/D = new path()
- chemical_reagents_list[D.id] = D
- if(!chemical_reactions_list)
- //Chemical Reactions - Initialises all /datum/chemical_reaction into a list
- // It is filtered into multiple lists within a list.
- // For example:
- // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
+ //I dislike having these here but map-objects are initialised before world/New() is called. >_>
+ if(!chemical_reagents_list)
+ //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
+ var/paths = subtypesof(/datum/reagent)
+ chemical_reagents_list = list()
+ for(var/path in paths)
+ var/datum/reagent/D = new path()
+ chemical_reagents_list[D.id] = D
+ if(!chemical_reactions_list)
+ //Chemical Reactions - Initialises all /datum/chemical_reaction into a list
+ // It is filtered into multiple lists within a list.
+ // For example:
+ // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
- var/paths = subtypesof(/datum/chemical_reaction)
- chemical_reactions_list = list()
+ var/paths = subtypesof(/datum/chemical_reaction)
+ chemical_reactions_list = list()
- for(var/path in paths)
+ for(var/path in paths)
- var/datum/chemical_reaction/D = new path()
- var/list/reaction_ids = list()
+ var/datum/chemical_reaction/D = new path()
+ var/list/reaction_ids = list()
- if(D && D.required_reagents && D.required_reagents.len)
- for(var/reaction in D.required_reagents)
- reaction_ids += reaction
+ if(D && D.required_reagents && D.required_reagents.len)
+ for(var/reaction in D.required_reagents)
+ reaction_ids += reaction
- // Create filters based on each reagent id in the required reagents list
- for(var/id in reaction_ids)
- if(!chemical_reactions_list[id])
- chemical_reactions_list[id] = list()
- chemical_reactions_list[id] += D
- break // Don't bother adding ourselves to other reagent ids, it is redundant.
+ // Create filters based on each reagent id in the required reagents list
+ for(var/id in reaction_ids)
+ if(!chemical_reactions_list[id])
+ chemical_reactions_list[id] = list()
+ chemical_reactions_list[id] += D
+ break // Don't bother adding ourselves to other reagent ids, it is redundant.
- proc
+/datum/reagents/proc/remove_any(var/amount=1)
+ var/total_transfered = 0
+ var/current_list_element = 1
- remove_any(var/amount=1)
- var/total_transfered = 0
- var/current_list_element = 1
+ current_list_element = rand(1,reagent_list.len)
- current_list_element = rand(1,reagent_list.len)
+ while(total_transfered != amount)
+ if(total_transfered >= amount) break
+ if(total_volume <= 0 || !reagent_list.len) break
- while(total_transfered != amount)
- if(total_transfered >= amount) break
- if(total_volume <= 0 || !reagent_list.len) break
+ if(current_list_element > reagent_list.len) current_list_element = 1
+ var/datum/reagent/current_reagent = reagent_list[current_list_element]
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
+ src.remove_reagent(current_reagent.id, min(1, amount - total_transfered))
- src.remove_reagent(current_reagent.id, min(1, amount - total_transfered))
+ current_list_element++
+ total_transfered++
+ src.update_total()
- current_list_element++
- total_transfered++
- src.update_total()
+ handle_reactions()
+ return total_transfered
- handle_reactions()
- return total_transfered
+/datum/reagents/proc/get_master_reagent_name()
+ var/the_name = null
+ var/the_volume = 0
+ for(var/datum/reagent/A in reagent_list)
+ if(A.volume > the_volume)
+ the_volume = A.volume
+ the_name = A.name
- get_master_reagent_name()
- var/the_name = null
- var/the_volume = 0
- for(var/datum/reagent/A in reagent_list)
- if(A.volume > the_volume)
- the_volume = A.volume
- the_name = A.name
+ return the_name
- return the_name
+/datum/reagents/proc/get_master_reagent_id()
+ var/the_id = null
+ var/the_volume = 0
+ for(var/datum/reagent/A in reagent_list)
+ if(A.volume > the_volume)
+ the_volume = A.volume
+ the_id = A.id
- get_master_reagent_id()
- var/the_id = null
- var/the_volume = 0
- for(var/datum/reagent/A in reagent_list)
- if(A.volume > the_volume)
- the_volume = A.volume
- the_id = A.id
+ return the_id
- return the_id
+/datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
+ if (!target )
+ return
+ if (!target.reagents || src.total_volume<=0)
+ return
+ var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ var/part = amount / src.total_volume
+ var/trans_data = null
+ for (var/datum/reagent/current_reagent in src.reagent_list)
+ if (!current_reagent)
+ continue
+ if (current_reagent.id == "blood" && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.inject_blood(my_atom, amount)
+ continue
+ var/current_reagent_transfer = current_reagent.volume * part
+ if(preserve_data)
+ trans_data = copy_data(current_reagent)
- trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- if (!current_reagent)
- continue
- if (current_reagent.id == "blood" && ishuman(target))
- var/mob/living/carbon/human/H = target
- H.inject_blood(my_atom, amount)
- continue
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
+ R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp)
+ src.remove_reagent(current_reagent.id, current_reagent_transfer)
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp)
- src.remove_reagent(current_reagent.id, current_reagent_transfer)
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ src.handle_reactions()
+ return amount
- src.update_total()
- R.update_total()
- R.handle_reactions()
- src.handle_reactions()
- return amount
+/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
+ if (!target )
+ return
+ if (!target.reagents || src.total_volume<=0)
+ return
- trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
+ var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
+ B.volume = 1000
- var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
- B.volume = 1000
+ var/datum/reagents/BR = B.reagents
+ var/datum/reagents/R = target.reagents
- var/datum/reagents/BR = B.reagents
- var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ src.trans_to(B, amount)
- src.trans_to(B, amount)
+ spawn(-1)
+ src = null // Survive through deletion of the reagent holder
+ sleep(100)
+ if(!target)
+ return
+ BR.trans_to(target, BR.total_volume)
+ qdel(B)
- spawn(-1)
- src = null // Survive through deletion of the reagent holder
- sleep(100)
- if(!target)
- return
- BR.trans_to(target, BR.total_volume)
- qdel(B)
+ return amount
- return amount
+/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
+ if(!target)
+ return
+ if(!target.reagents || src.total_volume<=0)
+ return
+ var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ var/part = amount / src.total_volume
+ var/trans_data = null
+ for (var/datum/reagent/current_reagent in src.reagent_list)
+ var/current_reagent_transfer = current_reagent.volume * part
+ if(preserve_data)
+ trans_data = copy_data(current_reagent)
+ R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
- copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
- if(!target)
- return
- if(!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ src.handle_reactions()
+ return amount
- src.update_total()
- R.update_total()
- R.handle_reactions()
- src.handle_reactions()
- return amount
+/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
+ if (!target)
+ return
+ if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
+ return
- trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
- if (!target)
- return
- if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
- return
+ var/datum/reagents/R = target.reagents
+ if(src.get_reagent_amount(reagent) R.maximum_volume) return 0
+ if (!target) return
+ var/total_transfered = 0
+ var/current_list_element = 1
+ var/datum/reagents/R = target.reagents
+ var/trans_data = null
+ //if(R.total_volume + amount > R.maximum_volume) return 0
- current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
+ current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
- while(total_transfered != amount)
- if(total_transfered >= amount) break //Better safe than sorry.
- if(total_volume <= 0 || !reagent_list.len) break
- if(R.total_volume >= R.maximum_volume) break
+ while(total_transfered != amount)
+ if(total_transfered >= amount) break //Better safe than sorry.
+ if(total_volume <= 0 || !reagent_list.len) break
+ if(R.total_volume >= R.maximum_volume) break
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
- if(preserve_data)
- trans_data = current_reagent.data
- R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
- src.remove_reagent(current_reagent.id, 1)
+ if(current_list_element > reagent_list.len) current_list_element = 1
+ var/datum/reagent/current_reagent = reagent_list[current_list_element]
+ if(preserve_data)
+ trans_data = current_reagent.data
+ R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
+ src.remove_reagent(current_reagent.id, 1)
- current_list_element++
- total_transfered++
- src.update_total()
- R.update_total()
- R.handle_reactions()
- handle_reactions()
+ current_list_element++
+ total_transfered++
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ handle_reactions()
- return total_transfered
+ return total_transfered
*/
- conditional_update_move(var/atom/A, var/Running = 0)
- for(var/datum/reagent/R in reagent_list)
- R.on_move (A, Running)
- update_total()
+/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0)
+ for(var/datum/reagent/R in reagent_list)
+ R.on_move (A, Running)
+ update_total()
- conditional_update(var/atom/A, )
- for(var/datum/reagent/R in reagent_list)
- R.on_update (A)
- update_total()
+/datum/reagents/proc/conditional_update(var/atom/A, )
+ for(var/datum/reagent/R in reagent_list)
+ R.on_update (A)
+ update_total()
+
+/datum/reagents/proc/handle_reactions()
+ if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree.
+
+ var/reaction_occured = 0
+ do
+ reaction_occured = 0
+ for(var/datum/reagent/R in reagent_list) // Usually a small list
+ for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
+
+ if(!reaction)
+ continue
+
+ var/datum/chemical_reaction/C = reaction
+
+ var/total_required_reagents = C.required_reagents.len
+ var/total_matching_reagents = 0
+ var/total_required_catalysts = C.required_catalysts.len
+ var/total_matching_catalysts= 0
+ var/matching_container = 0
+ var/matching_other = 0
+ var/list/multipliers = new/list()
+ var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this)
+ var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this)
+ for(var/B in C.required_reagents)
+ if(!has_reagent(B, C.required_reagents[B])) break
+ total_matching_reagents++
+ multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
+ for(var/B in C.required_catalysts)
+ if(!has_reagent(B, C.required_catalysts[B])) break
+ total_matching_catalysts++
+
+ if(!C.required_container)
+ matching_container = 1
+
+ else
+ if(my_atom.type == C.required_container)
+ matching_container = 1
+
+ if(!C.required_other)
+ matching_other = 1
+
+ else
+ /*if(istype(my_atom, /obj/item/slime_core))
+ var/obj/item/slime_core/M = my_atom
+
+ if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
+ matching_other = 1*/
+ if(istype(my_atom, /obj/item/slime_extract))
+ var/obj/item/slime_extract/M = my_atom
+
+ if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
+ matching_other = 1
+
+ if(min_temp == 0)
+ min_temp = chem_temp
+
+ if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp)
+ var/multiplier = min(multipliers)
+ var/preserved_data = null
+ for(var/B in C.required_reagents)
+ if(!preserved_data)
+ preserved_data = get_data(B)
+ remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
+
+ var/created_volume = C.result_amount*multiplier
+ if(C.result)
+ feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
+ multiplier = max(multiplier, 1) //this shouldnt happen ...
+ add_reagent(C.result, C.result_amount*multiplier)
+ set_data(C.result, preserved_data)
+
+ //add secondary products
+ for(var/S in C.secondary_results)
+ add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
+
+ var/list/seen = viewers(4, get_turf(my_atom))
+ for(var/mob/M in seen)
+ if(!C.no_message)
+ M << "\blue \icon[my_atom] [C.mix_message]"
+
+ /* if(istype(my_atom, /obj/item/slime_core))
+ var/obj/item/slime_core/ME = my_atom
+ ME.Uses--
+ if(ME.Uses <= 0) // give the notification that the slime core is dead
+ for(var/mob/M in viewers(4, get_turf(my_atom)) )
+ M << "\blue \icon[my_atom] The innards begin to boil!"
+ */
+ if(istype(my_atom, /obj/item/slime_extract))
+ var/obj/item/slime_extract/ME2 = my_atom
+ ME2.Uses--
+ if(ME2.Uses <= 0) // give the notification that the slime core is dead
+ for(var/mob/M in seen)
+ M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
+ ME2.name = "used slime extract"
+ ME2.desc = "This extract has been used up."
+
+ playsound(get_turf(my_atom), C.mix_sound, 80, 1)
+
+ C.on_reaction(src, created_volume)
+ reaction_occured = 1
+ break
+
+ while(reaction_occured)
+ update_total()
+ return 0
+
+/datum/reagents/proc/isolate_reagent(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id != reagent)
+ del_reagent(R.id)
+ update_total()
+
+/datum/reagents/proc/del_reagent(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ if(istype(my_atom, /mob/living))
+ var/mob/living/M = my_atom
+ R.reagent_deleted(M)
+ reagent_list -= A
+ qdel(A)
+ update_total()
+ my_atom.on_reagent_change()
+ check_ignoreslow(my_atom)
+ check_gofast(my_atom)
+ check_goreallyfast(my_atom)
+ return 0
+
+
+ return 1
+
+/datum/reagents/proc/update_total()
+ total_volume = 0
+ for(var/datum/reagent/R in reagent_list)
+ if(R.volume < 0.1)
+ del_reagent(R.id)
+ else
+ total_volume += R.volume
+
+ return 0
+
+/datum/reagents/proc/clear_reagents()
+ for(var/datum/reagent/R in reagent_list)
+ del_reagent(R.id)
+ return 0
+
+/datum/reagents/proc/reaction_check(var/mob/M, var/datum/reagent/R)
+ var/can_process = 0
+ if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
+ return can_process
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ //Check if this mob's species is set and can process this type of reagent
+ if(H.species && H.species.reagent_tag)
+ if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN
+ can_process = 1
+ if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG
+ can_process = 1
+ //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater
+ if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO))
+ can_process = 1
+ //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption)
+ else
+ if(R.process_flags != SYNTHETIC)
+ can_process = 1
+ return can_process
+
+/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
+
+ switch(method)
+ if(TOUCH)
+ for(var/datum/reagent/R in reagent_list)
+ if(ismob(A))
+ spawn(0)
+ if(!R) return
+ var/check = reaction_check(A, R)
+ if(!check)
+ continue
+ else
+ R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
+ if(isturf(A))
+ spawn(0)
+ if(!R) return
+ else R.reaction_turf(A, R.volume+volume_modifier)
+ if(isobj(A))
+ spawn(0)
+ if(!R) return
+ else R.reaction_obj(A, R.volume+volume_modifier)
+ if(INGEST)
+ for(var/datum/reagent/R in reagent_list)
+ if(ismob(A) && R)
+ spawn(0)
+ if(!R) return
+ var/check = reaction_check(A, R)
+ if(!check)
+ continue
+ else
+ R.reaction_mob(A, INGEST, R.volume+volume_modifier)
+ if(isturf(A) && R)
+ spawn(0)
+ if(!R) return
+ else R.reaction_turf(A, R.volume+volume_modifier)
+ if(isobj(A) && R)
+ spawn(0)
+ if(!R) return
+ else R.reaction_obj(A, R.volume+volume_modifier)
+ return
+
+/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300)
+ if(!isnum(amount)) return 1
+ update_total()
+ if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
+ if(amount <= 0) return 0
+ chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
+
+ for(var/A in reagent_list)
+
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ R.volume += amount
+ update_total()
+ my_atom.on_reagent_change()
+/*
+ // mix dem viruses
+ if(R.id == "blood" && reagent == "blood")
+ if(R.data && data)
+
+ if(R.data["viruses"] || data["viruses"])
+
+ var/list/mix1 = R.data["viruses"]
+ var/list/mix2 = data["viruses"]
+
+ // Stop issues with the list changing during mixing.
+ var/list/to_mix = list()
+
+ for(var/datum/disease/advance/AD in mix1)
+ to_mix += AD
+ for(var/datum/disease/advance/AD in mix2)
+ to_mix += AD
+
+ var/datum/disease/advance/AD = Advance_Mix(to_mix)
+ if(AD)
+ var/list/preserve = list(AD)
+ for(var/D in R.data["viruses"])
+ if(!istype(D, /datum/disease/advance))
+ preserve += D
+ R.data["viruses"] = preserve
+*/
handle_reactions()
- if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree.
+ return 0
- var/reaction_occured = 0
- do
- reaction_occured = 0
- for(var/datum/reagent/R in reagent_list) // Usually a small list
- for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
+ var/datum/reagent/D = chemical_reagents_list[reagent]
+ if(D)
- if(!reaction)
- continue
-
- var/datum/chemical_reaction/C = reaction
-
- var/total_required_reagents = C.required_reagents.len
- var/total_matching_reagents = 0
- var/total_required_catalysts = C.required_catalysts.len
- var/total_matching_catalysts= 0
- var/matching_container = 0
- var/matching_other = 0
- var/list/multipliers = new/list()
- var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this)
- var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this)
- for(var/B in C.required_reagents)
- if(!has_reagent(B, C.required_reagents[B])) break
- total_matching_reagents++
- multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
- for(var/B in C.required_catalysts)
- if(!has_reagent(B, C.required_catalysts[B])) break
- total_matching_catalysts++
-
- if(!C.required_container)
- matching_container = 1
-
- else
- if(my_atom.type == C.required_container)
- matching_container = 1
-
- if(!C.required_other)
- matching_other = 1
-
- else
- /*if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/M = my_atom
-
- if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1*/
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/M = my_atom
-
- if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1
-
- if(min_temp == 0)
- min_temp = chem_temp
-
- if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp)
- var/multiplier = min(multipliers)
- var/preserved_data = null
- for(var/B in C.required_reagents)
- if(!preserved_data)
- preserved_data = get_data(B)
- remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
-
- var/created_volume = C.result_amount*multiplier
- if(C.result)
- feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
- multiplier = max(multiplier, 1) //this shouldnt happen ...
- add_reagent(C.result, C.result_amount*multiplier)
- set_data(C.result, preserved_data)
-
- //add secondary products
- for(var/S in C.secondary_results)
- add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
-
- var/list/seen = viewers(4, get_turf(my_atom))
- for(var/mob/M in seen)
- if(!C.no_message)
- M << "\blue \icon[my_atom] [C.mix_message]"
-
- /* if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/ME = my_atom
- ME.Uses--
- if(ME.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in viewers(4, get_turf(my_atom)) )
- M << "\blue \icon[my_atom] The innards begin to boil!"
- */
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/ME2 = my_atom
- ME2.Uses--
- if(ME2.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in seen)
- M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
- ME2.name = "used slime extract"
- ME2.desc = "This extract has been used up."
-
- playsound(get_turf(my_atom), C.mix_sound, 80, 1)
-
- C.on_reaction(src, created_volume)
- reaction_occured = 1
- break
-
- while(reaction_occured)
- update_total()
- return 0
-
- isolate_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id != reagent)
- del_reagent(R.id)
- update_total()
-
- del_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- if(istype(my_atom, /mob/living))
- var/mob/living/M = my_atom
- R.reagent_deleted(M)
- reagent_list -= A
- qdel(A)
- update_total()
- my_atom.on_reagent_change()
- check_ignoreslow(my_atom)
- check_gofast(my_atom)
- check_goreallyfast(my_atom)
- return 0
-
-
- return 1
-
- update_total()
- total_volume = 0
- for(var/datum/reagent/R in reagent_list)
- if(R.volume < 0.1)
- del_reagent(R.id)
- else
- total_volume += R.volume
-
- return 0
-
- clear_reagents()
- for(var/datum/reagent/R in reagent_list)
- del_reagent(R.id)
- return 0
-
- reaction_check(var/mob/M, var/datum/reagent/R)
- var/can_process = 0
- if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
- return can_process
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- //Check if this mob's species is set and can process this type of reagent
- if(H.species && H.species.reagent_tag)
- if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN
- can_process = 1
- if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG
- can_process = 1
- //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater
- if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO))
- can_process = 1
- //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption)
- else
- if(R.process_flags != SYNTHETIC)
- can_process = 1
- return can_process
-
- reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
-
- switch(method)
- if(TOUCH)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A))
- spawn(0)
- if(!R) return
- var/check = reaction_check(A, R)
- if(!check)
- continue
- else
- R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
- if(isturf(A))
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A))
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
- if(INGEST)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A) && R)
- spawn(0)
- if(!R) return
- var/check = reaction_check(A, R)
- if(!check)
- continue
- else
- R.reaction_mob(A, INGEST, R.volume+volume_modifier)
- if(isturf(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
- return
-
- add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300)
- if(!isnum(amount)) return 1
- update_total()
- if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
- if(amount <= 0) return 0
- chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
-
- for(var/A in reagent_list)
-
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.volume += amount
- update_total()
- my_atom.on_reagent_change()
-/*
- // mix dem viruses
- if(R.id == "blood" && reagent == "blood")
- if(R.data && data)
-
- if(R.data["viruses"] || data["viruses"])
-
- var/list/mix1 = R.data["viruses"]
- var/list/mix2 = data["viruses"]
-
- // Stop issues with the list changing during mixing.
- var/list/to_mix = list()
-
- for(var/datum/disease/advance/AD in mix1)
- to_mix += AD
- for(var/datum/disease/advance/AD in mix2)
- to_mix += AD
-
- var/datum/disease/advance/AD = Advance_Mix(to_mix)
- if(AD)
- var/list/preserve = list(AD)
- for(var/D in R.data["viruses"])
- if(!istype(D, /datum/disease/advance))
- preserve += D
- R.data["viruses"] = preserve
-*/
-
- handle_reactions()
- return 0
-
- var/datum/reagent/D = chemical_reagents_list[reagent]
- if(D)
-
- var/datum/reagent/R = new D.type()
- reagent_list += R
- R.holder = src
- R.volume = amount
+ var/datum/reagent/R = new D.type()
+ reagent_list += R
+ R.holder = src
+ R.volume = amount
// SetViruses(R, data) // Includes setting data
- if(data) R.data = data
- //debug
- //world << "Adding data"
- //for(var/D in R.data)
- // world << "Container data: [D] = [R.data[D]]"
- //debug
- update_total()
- my_atom.on_reagent_change()
- handle_reactions()
- return 0
- else
- warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
+ if(data) R.data = data
+ //debug
+ //world << "Adding data"
+ //for(var/D in R.data)
+ // world << "Container data: [D] = [R.data[D]]"
+ //debug
+ update_total()
+ my_atom.on_reagent_change()
+ handle_reactions()
+ return 0
+ else
+ warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
+ handle_reactions()
+
+ return 1
+
+/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to
+
+ if(!isnum(amount)) return 1
+
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ R.volume -= amount
+ update_total()
+ if(!safety)//So it does not handle reactions when it need not to
handle_reactions()
+ my_atom.on_reagent_change()
+ return 0
- return 1
+ return 1
- remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to
+/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1)
- if(!isnum(amount)) return 1
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ if(!amount) return R
+ else
+ if(R.volume >= amount) return R
+ else return 0
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.volume -= amount
- update_total()
- if(!safety)//So it does not handle reactions when it need not to
- handle_reactions()
- my_atom.on_reagent_change()
- return 0
+ return 0
- return 1
+/datum/reagents/proc/get_reagent_amount(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ return R.volume
- has_reagent(var/reagent, var/amount = -1)
+ return 0
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- if(!amount) return R
- else
- if(R.volume >= amount) return R
- else return 0
+/datum/reagents/proc/get_reagents()
+ var/res = ""
+ for(var/datum/reagent/A in reagent_list)
+ if (res != "") res += ","
+ res += A.name
- return 0
+ return res
- get_reagent_amount(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- return R.volume
+/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
+ if(!isnum(amount)) return 1
- return 0
+ var/has_removed_reagent = 0
- get_reagents()
- var/res = ""
- for(var/datum/reagent/A in reagent_list)
- if (res != "") res += ","
- res += A.name
+ for(var/datum/reagent/R in reagent_list)
+ var/matches = 0
+ // Switch between how we check the reagent type
+ if(strict)
+ if(R.type == reagent_type)
+ matches = 1
+ else
+ if(istype(R, reagent_type))
+ matches = 1
+ // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
+ if(matches)
+ // Have our other proc handle removement
+ has_removed_reagent = remove_reagent(R.id, amount, safety)
- return res
+ return has_removed_reagent
- remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
- if(!isnum(amount)) return 1
+// Admin logging.
+/datum/reagents/proc/get_reagent_ids(var/and_amount=0)
+ var/list/stuff = list()
+ for(var/datum/reagent/A in reagent_list)
+ if(and_amount)
+ stuff += "[get_reagent_amount(A.id)]U of [A.id]"
+ else
+ stuff += A.id
+ return english_list(stuff)
- var/has_removed_reagent = 0
+//two helper functions to preserve data across reactions (needed for xenoarch)
+/datum/reagents/proc/get_data(var/reagent_id)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "proffering a data-carrying reagent ([reagent_id])"
+ return D.data
- for(var/datum/reagent/R in reagent_list)
- var/matches = 0
- // Switch between how we check the reagent type
- if(strict)
- if(R.type == reagent_type)
- matches = 1
- else
- if(istype(R, reagent_type))
- matches = 1
- // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
- if(matches)
- // Have our other proc handle removement
- has_removed_reagent = remove_reagent(R.id, amount, safety)
+/datum/reagents/proc/set_data(var/reagent_id, var/new_data)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "reagent data set ([reagent_id])"
+ D.data = new_data
- return has_removed_reagent
+/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
+ if (!current_reagent || !current_reagent.data) return null
+ if (!istype(current_reagent.data, /list)) return current_reagent.data
- // Admin logging.
- get_reagent_ids(var/and_amount=0)
- var/list/stuff = list()
- for(var/datum/reagent/A in reagent_list)
- if(and_amount)
- stuff += "[get_reagent_amount(A.id)]U of [A.id]"
- else
- stuff += A.id
- return english_list(stuff)
+ var/list/trans_data = current_reagent.data.Copy()
- //two helper functions to preserve data across reactions (needed for xenoarch)
- get_data(var/reagent_id)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "proffering a data-carrying reagent ([reagent_id])"
- return D.data
+ // We do this so that introducing a virus to a blood sample
+ // doesn't automagically infect all other blood samples from
+ // the same donor.
+ //
+ // Technically we should probably copy all data lists, but
+ // that could possibly eat up a lot of memory needlessly
+ // if most data lists are read-only.
+ if (trans_data["virus2"])
+ var/list/v = trans_data["virus2"]
+ trans_data["virus2"] = v.Copy()
- set_data(var/reagent_id, var/new_data)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "reagent data set ([reagent_id])"
- D.data = new_data
-
- copy_data(var/datum/reagent/current_reagent)
- if (!current_reagent || !current_reagent.data) return null
- if (!istype(current_reagent.data, /list)) return current_reagent.data
-
- var/list/trans_data = current_reagent.data.Copy()
-
- // We do this so that introducing a virus to a blood sample
- // doesn't automagically infect all other blood samples from
- // the same donor.
- //
- // Technically we should probably copy all data lists, but
- // that could possibly eat up a lot of memory needlessly
- // if most data lists are read-only.
- if (trans_data["virus2"])
- var/list/v = trans_data["virus2"]
- trans_data["virus2"] = v.Copy()
-
- return trans_data
+ return trans_data
///////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
deleted file mode 100644
index 238724c0b09..00000000000
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ /dev/null
@@ -1,3283 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-#define FOOD_METABOLISM 0.4
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
-//so that it can continue working when the reagent is deleted while the proc is still active.
-
-datum
- reagent
- var/name = "Reagent"
- var/id = "reagent"
- var/description = ""
- var/datum/reagents/holder = null
- var/reagent_state = SOLID
- var/list/data = null
- var/volume = 0
- var/nutriment_factor = 0
- var/metabolization_rate = REAGENTS_METABOLISM
- //var/list/viruses = list()
- var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
- var/shock_reduction = 0
- var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin
- //Processing flags, defines the type of mobs the reagent will affect
- //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths
- var/process_flags = ORGANIC
- proc
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
- if(!istype(M, /mob/living)) return 0
- var/datum/reagent/self = src
- src = null
-
- if(self.holder) //for catching rare runtimes
- if(method == TOUCH && self.penetrates_skin)
- var/block = 0
- for(var/obj/item/clothing/C in M.get_equipped_items())
- if(istype(C, /obj/item/clothing/suit/bio_suit))
- block += 1
- if(istype(C, /obj/item/clothing/head/bio_hood))
- block += 1
- if(block < 2)
- if(M.reagents)
- M.reagents.add_reagent(self.id,self.volume)
-
-/*
- if(method == INGEST && istype(M, /mob/living/carbon))
- if(prob(1 * self.addictiveness))
- if(prob(5 * volume))
- var/datum/disease/addiction/A = new /datum/disease/addiction
- A.addicted_to = self
- A.name = "[self.name] Addiction"
- A.addiction ="[self.name]"
- A.cure = self.id
- M.viruses += A
- A.affected_mob = M
- A.holder = M
-*/
- return 1
-
- reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
- src = null //if it can hold reagents. nope!
- //if(O.reagents)
- // O.reagents.add_reagent(id,volume/3)
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- return
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball
- return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO
- // Certain elements in too large amounts cause side-effects
- holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears.
- current_cycle++
- return
-
- // Called when two reagents of the same are mixing.
- on_merge(var/data)
- return
-
- on_move(var/mob/M)
- return
-
- on_update(var/atom/A)
- return
-
- slimejelly
- name = "Slime Jelly"
- id = "slimejelly"
- description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
- reagent_state = LIQUID
- color = "#801E28" // rgb: 128, 30, 40
- on_mob_life(var/mob/living/M as mob)
- if(prob(10))
- M << "\red Your insides are burning!"
- M.adjustToxLoss(rand(20,60)*REM)
- else if(prob(40))
- M.heal_organ_damage(5*REM,0)
- ..()
- return
-
-
- blood
- data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null)
- name = "Blood"
- id = "blood"
- reagent_state = LIQUID
- color = "#C80000" // rgb: 200, 0, 0
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/blood/self = src
- src = null
- if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
- var/list/vlist = self.data["virus2"]
- if (vlist.len)
- for (var/ID in vlist)
- var/datum/disease2/disease/V = vlist[ID]
-
- if(method == TOUCH)
- infect_virus2(M,V.getcopy())
- else
- infect_virus2(M,V.getcopy(),1) //injected, force infection!
- if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
- var/mob/living/carbon/C = M
- C.antibodies |= self.data["antibodies"]
-
- on_merge(var/data)
- if(data["blood_colour"])
- color = data["blood_colour"]
- return ..()
-
- on_update(var/atom/A)
- if(data["blood_colour"])
- color = data["blood_colour"]
- return ..()
-
-
-
- reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
- if(!istype(T)) return
- var/datum/reagent/blood/self = src
- src = null
- if(!(volume >= 3)) return
- //var/datum/disease/D = self.data["virus"]
- if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
- var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
- if(!blood_prop) //first blood!
- blood_prop = new(T)
- blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
-
- if(self.data["virus2"])
- blood_prop.virus2 = virus_copylist(self.data["virus2"])
-
- else if(istype(self.data["donor"], /mob/living/carbon/alien))
- var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T
- if(!blood_prop)
- blood_prop = new(T)
- blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
- return
-
-/* Must check the transfering of reagents and their data first. They all can point to one disease datum.
-
- Destroy()
- if(src.data["virus"])
- var/datum/disease/D = src.data["virus"]
- D.cure(0)
- return ..()
-*/
-
-/*
- vaccine
- //data must contain virus type
- name = "Vaccine"
- id = "vaccine"
- reagent_state = LIQUID
- color = "#C81040" // rgb: 200, 16, 64
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/vaccine/self = src
- src = null
- if(self.data&&method == INGEST)
- for(var/datum/disease/D in M.viruses)
- if(istype(D, /datum/disease/advance))
- var/datum/disease/advance/A = D
- if(A.GetDiseaseID() == self.data)
- D.cure()
- else
- if(D.type == self.data)
- D.cure()
-
- M.resistances += self.data
- return
-*/
-
- // Ported from Bay as part of the Botany Update
- // Allows you to make planks from any plant that has this reagent in it.
- // Also vines with this reagent are considered dense.
- woodpulp
- name = "Wood Pulp"
- id = "woodpulp"
- description = "A mass of wood fibers."
- reagent_state = LIQUID
- color = "#B97A57"
-
- fishwater
- name = "Fish Water"
- id = "fishwater"
- description = "Smelly water from a fish tank. Gross!"
- reagent_state = LIQUID
- color = "#757547"
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == INGEST)
- M << "Oh god, why did you drink that?"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
- if(prob(50)) // 50/50 chance of green vomit vs normal vomit
- M.fakevomit(1)
- else
- M.fakevomit(0)
- ..()
- return
-
- water
- name = "Water"
- id = "water"
- description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
- reagent_state = LIQUID
- color = "#0064C8" // rgb: 0, 100, 200
- var/cooling_temperature = 2
- process_flags = ORGANIC | SYNTHETIC
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
-
- // Put out fire
- if(method == TOUCH)
- M.adjust_fire_stacks(-(volume / 10))
- if(M.fire_stacks <= 0)
- M.ExtinguishMob()
- return
-
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 3)
- if(T.wet >= 1) return
- T.wet = 1
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
- T.overlays += T.wet_overlay
-
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
-
- for(var/mob/living/carbon/slime/M in T)
- M.apply_water()
-
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !istype(T, /turf/space))
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
- return
-
- reaction_obj(var/obj/O, var/volume)
- src = null
- var/turf/T = get_turf(O)
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !istype(T, /turf/space))
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
- var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
- if(!cube.wrapped)
- cube.Expand()
- // Dehydrated carp
- if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
- var/obj/item/toy/carpplushie/dehy_carp/dehy = O
- dehy.Swell() // Makes a carp
- return
-
- hellwater
- name = "Hell Water"
- id = "hell_water"
- description = "YOUR FLESH! IT BURNS!"
- process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
-
- on_mob_life(var/mob/living/M as mob)
- M.fire_stacks = min(5,M.fire_stacks + 3)
- M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
- M.adjustToxLoss(1)
- M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
- M.adjustBrainLoss(5)
- holder.remove_reagent(src.id, 1)
-
- lube
- name = "Space Lube"
- id = "lube"
- description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
- reagent_state = LIQUID
- color = "#1BB1AB"
-
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 1)
- if(T.wet >= 2) return
- T.wet = 2
- spawn(800)
- if (!istype(T)) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- return
-
- toxin
- name = "Toxin"
- id = "toxin"
- description = "A Toxic chemical."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(2)
- ..()
- return
-
- spider_venom
- name = "Spider venom"
- id = "spidertoxin"
- description = "A toxic venom injected by spacefaring arachnids."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1.5)
- ..()
- return
-
- plasticide
- name = "Plasticide"
- id = "plasticide"
- description = "Liquid plastic, do not eat."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1.5)
- ..()
- return
-
- minttoxin
- name = "Mint Toxin"
- id = "minttoxin"
- description = "Useful for dealing with undesirable customers."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if (FAT in M.mutations)
- M.gib()
- ..()
- return
-
- slimetoxin
- name = "Mutation Toxin"
- id = "mutationtoxin"
- description = "A corruptive toxin produced by slimes."
- reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(ishuman(M))
- var/mob/living/carbon/human/human = M
- if(human.species.name != "Shadow")
- M << "\red Your flesh rapidly mutates!"
- M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids."
- M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness."
- M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations."
- human.set_species("Shadow")
- ..()
- return
-
-
-
- aslimetoxin
- name = "Advanced Mutation Toxin"
- id = "amutationtoxin"
- description = "An advanced corruptive toxin produced by slimes."
- reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(istype(M, /mob/living/carbon) && M.stat != DEAD)
- M << "\red Your flesh rapidly mutates!"
- if(M.notransform) return
- M.notransform = 1
- M.canmove = 0
- M.icon = null
- M.overlays.Cut()
- M.invisibility = 101
- for(var/obj/item/W in M)
- if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
- qdel(W)
- continue
- W.layer = initial(W.layer)
- W.loc = M.loc
- W.dropped(M)
- var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
- new_mob.a_intent = "harm"
- new_mob.universal_speak = 1
- if(M.mind)
- M.mind.transfer_to(new_mob)
- else
- new_mob.key = M.key
- qdel(M)
- ..()
- return
-
- space_drugs
- name = "Space drugs"
- id = "space_drugs"
- description = "An illegal chemical compound used as drug."
- reagent_state = LIQUID
- color = "#9087A2"
- metabolization_rate = 0.2
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 15)
- if(isturf(M.loc) && !istype(M.loc, /turf/space))
- if(M.canmove && !M.restrained())
- if(prob(10)) step(M, pick(cardinal))
- if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
- ..()
- return
-
- holywater
- name = "Water"
- id = "holywater"
- description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
- reagent_state = LIQUID
- color = "#0064C8" // rgb: 0, 100, 200
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.jitteriness = max(M.jitteriness-5,0)
- if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 4
- M.Dizzy(5)
- if(iscultist(M) && prob(5))
- M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
- if(data >= 75 && prob(33)) // 30 units, 150 seconds
- if (!M.confused) M.confused = 1
- M.confused += 3
- if(iscultist(M))
- ticker.mode.remove_cultist(M.mind)
- holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
- M.jitteriness = 0
- M.stuttering = 0
- M.confused = 0
- if(ishuman(M)) .
- if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80))
- switch(data)
- if(1 to 4)
- M << "Something sizzles in your veins!"
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- if(5 to 12)
- M << "You feel an intense burning inside of you!"
- M.adjustFireLoss(1)
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- if(13 to INFINITY)
- M << "You suddenly ignite in a holy fire!"
- for(var/mob/O in viewers(M, null))
- O.show_message(text("[] suddenly bursts into flames!", M), 1)
- M.fire_stacks = min(5,M.fire_stacks + 3)
- M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
- M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- ..()
- return
-
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- // Vampires have their powers weakened by holy water applied to the skin.
- if(ishuman(M))
- if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers))
- var/mob/living/carbon/human/H=M
- if(method == TOUCH)
- if(H.wear_mask)
- H << "\red Your mask protects you from the holy water!"
- return
- else if(H.head)
- H << "\red Your helmet protects you from the holy water!"
- return
- else
- M << "Something holy interferes with your powers!"
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- return
-
-
- reaction_turf(var/turf/simulated/T, var/volume)
- ..()
- if(!istype(T)) return
- if(volume>=10)
- for(var/obj/effect/rune/R in T)
- qdel(R)
- T.Bless()
-
- serotrotium
- name = "Serotrotium"
- id = "serotrotium"
- description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
- reagent_state = LIQUID
- color = "#202040" // rgb: 20, 20, 40
-
- on_mob_life(var/mob/living/M as mob)
- if(ishuman(M))
- if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
- holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
- return
-
-/* silicate
- name = "Silicate"
- id = "silicate"
- description = "A compound that can be used to reinforce glass."
- reagent_state = LIQUID
- color = "#C7FFFF" // rgb: 199, 255, 255
-
- reaction_obj(var/obj/O, var/volume)
- src = null
- if(istype(O,/obj/structure/window))
- if(O:silicate <= 200)
-
- O:silicate += volume
- O:health += volume * 3
-
- if(!O:silicateIcon)
- var/icon/I = icon(O.icon,O.icon_state,O.dir)
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
- else
- var/icon/I = O:silicateIcon
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
-
- return*/
-
- oxygen
- name = "Oxygen"
- id = "oxygen"
- description = "A colorless, odorless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
- M.adjustToxLoss(REAGENTS_METABOLISM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
-
- copper
- name = "Copper"
- id = "copper"
- description = "A highly ductile metal."
- color = "#6E3B08" // rgb: 110, 59, 8
-
-
- nitrogen
- name = "Nitrogen"
- id = "nitrogen"
- description = "A colorless, odorless, tasteless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
- M.adjustOxyLoss(-2*REM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
-
- hydrogen
- name = "Hydrogen"
- id = "hydrogen"
- description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-
- potassium
- name = "Potassium"
- id = "potassium"
- description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
- reagent_state = SOLID
- color = "#A0A0A0" // rgb: 160, 160, 160
-
-
- mercury
- name = "Mercury"
- id = "mercury"
- description = "A chemical element."
- reagent_state = LIQUID
- color = "#484848" // rgb: 72, 72, 72
- metabolization_rate = 0.2
- penetrates_skin = 1
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(70))
- M.adjustBrainLoss(1)
- ..()
- return
-
- sulfur
- name = "Sulfur"
- id = "sulfur"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#BF8C00" // rgb: 191, 140, 0
-
- carbon
- name = "Carbon"
- id = "carbon"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#1C1300" // rgb: 30, 20, 0
-
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- // Only add one dirt per turf. Was causing people to crash.
- if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T))
- new /obj/effect/decal/cleanable/dirt(T)
-
- chlorine
- name = "Chlorine"
- id = "chlorine"
- description = "A chemical element."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
- penetrates_skin = 1
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
-
- fluorine
- name = "Fluorine"
- id = "fluorine"
- description = "A highly-reactive chemical element."
- reagent_state = GAS
- color = "#6A6054"
- penetrates_skin = 1
- process_flags = ORGANIC | SYNTHETIC
-
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- M.adjustToxLoss(1*REM)
- ..()
- return
-
- sodium
- name = "Sodium"
- id = "sodium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
-
- phosphorus
- name = "Phosphorus"
- id = "phosphorus"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#832828" // rgb: 131, 40, 40
-
-
- lithium
- name = "Lithium"
- id = "lithium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5)) M.emote(pick("twitch","drool","moan"))
- ..()
- return
-
- sugar
- name = "Sugar"
- id = "sugar"
- description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
- reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255, 255, 255
- overdose_threshold = 200 // Hyperglycaemic shock
-
- on_mob_life(var/mob/living/M as mob)
- if(prob(4))
- M.reagents.add_reagent("epinephrine", 1.2)
- if(prob(50))
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- if(current_cycle >= 90)
- M.jitteriness += 10
- ..()
- return
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 200)
- M << "You pass out from hyperglycemic shock!"
- M.Paralyse(1)
- if(prob(8))
- M.adjustToxLoss(rand(1,2))
- ..()
- return
-
- sacid
- name = "Sulphuric acid"
- id = "sacid"
- description = "A strong mineral acid with the molecular formula H2SO4."
- reagent_state = LIQUID
- color = "#00D72B"
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- if(volume > 25)
-
- if(H.wear_mask)
- H << "\red Your mask protects you from the acid!"
- return
-
- if(H.head)
- H << "\red Your helmet protects you from the acid!"
- return
-
- if(!M.unacidable)
- if(prob(75))
- var/obj/item/organ/external/affecting = H.get_organ("head")
- if(affecting)
- affecting.take_damage(20, 0)
- H.UpdateDamageIcon()
- H.emote("scream")
- else
- M.take_organ_damage(15,0)
- else
- M.take_organ_damage(15,0)
-
- if(method == INGEST)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- if(volume < 10)
- M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!"
-
- if(volume >=10 && volume <=25)
- if(!H.unacidable)
- M.take_organ_damage(min(max(volume-10,2)*2,20),0)
- M.emote("scream")
-
-
- if(volume > 25)
- if(!M.unacidable)
- if(prob(75))
- var/obj/item/organ/external/affecting = H.get_organ("head")
- if(affecting)
- affecting.take_damage(20, 0)
- H.UpdateDamageIcon()
- H.emote("scream")
- else
- M.take_organ_damage(15,0)
-
- reaction_obj(var/obj/O, var/volume)
- if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
- if(!O.unacidable)
- var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
- I.desc = "Looks like this was \an [O] some time ago."
- for(var/mob/M in viewers(5, O))
- M << "\red \the [O] melts."
- qdel(O)
-
- glycerol
- name = "Glycerol"
- id = "glycerol"
- description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
- reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
-
-
- nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
- reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
-
- radium
- name = "Radium"
- id = "radium"
- description = "Radium is an alkaline earth metal. It is extremely radioactive."
- reagent_state = SOLID
- color = "#C7C7C7" // rgb: 199,199,199
- metabolization_rate = 0.4
- penetrates_skin = 1
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(4*REM,IRRADIATE,0)
- // radium may increase your chances to cure a disease
- if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
- var/mob/living/carbon/C = M
- if(C.virus2.len)
- for (var/ID in C.virus2)
- var/datum/disease2/disease/V = C.virus2[ID]
- if(prob(5))
- if(prob(50))
- M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead
- M.adjustToxLoss(100)
- C.antibodies |= V.antigen
- ..()
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/greenglow(T)
- return
-
- thermite
- name = "Thermite"
- id = "thermite"
- description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
- reagent_state = SOLID
- color = "#673910" // rgb: 103, 57, 16
- process_flags = ORGANIC | SYNTHETIC
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 5)
- if(istype(T, /turf/simulated/wall))
- T:thermite = 1
- T.overlays.Cut()
- T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
- return
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
-
- mutagen
- name = "Unstable mutagen"
- id = "mutagen"
- description = "Might cause unpredictable mutations. Keep away from children."
- reagent_state = LIQUID
- color = "#04DF27"
- metabolization_rate = 0.3
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(!..()) return
- if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- src = null
- if((method==TOUCH && prob(33)) || method==INGEST)
- if(prob(98))
- randmutb(M)
- else
- randmutg(M)
- domutcheck(M, null)
- M.UpdateAppearance()
- return
- on_mob_life(var/mob/living/M as mob)
- if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- if(!M) M = holder.my_atom
- M.apply_effect(2*REM,IRRADIATE,0)
- if(prob(4))
- randmutb(M)
- ..()
- return
-
- hydrocodone
- name = "Hydrocodone"
- id = "hydrocodone"
- description = "An extremely effective painkiller; may have long term abuse consequences."
- reagent_state = LIQUID
- color = "#C805DC"
- metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
- shock_reduction = 200
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- ..()
- return
-
- virus_food
- name = "Virus Food"
- id = "virusfood"
- description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#899613" // rgb: 137, 150, 19
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor*REM
- ..()
- return
-
- sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- description = "Sterilizes wounds in preparation for surgery."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
- //makes you squeaky clean
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if (method == TOUCH)
- M.germ_level -= min(volume*20, M.germ_level)
-
- reaction_obj(var/obj/O, var/volume)
- O.germ_level -= min(volume*20, O.germ_level)
-
- reaction_turf(var/turf/T, var/volume)
- T.germ_level -= min(volume*20, T.germ_level)
-
- iron
- name = "Iron"
- id = "iron"
- description = "Pure iron is a metal."
- reagent_state = SOLID
- color = "#C8A5DC" // rgb: 200, 165, 220
-/*
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if((M.virus) && (prob(8) && (M.virus.name=="Magnitis")))
- if(M.virus.spread == "Airborne")
- M.virus.spread = "Remissive"
- M.virus.stage--
- if(M.virus.stage <= 0)
- M.resistances += M.virus.type
- M.virus = null
- holder.remove_reagent(src.id, 0.2)
- return
-*/
-
- gold
- name = "Gold"
- id = "gold"
- description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
- reagent_state = SOLID
- color = "#F7C430" // rgb: 247, 196, 48
-
- silver
- name = "Silver"
- id = "silver"
- description = "A lustrous metallic element regarded as one of the precious metals."
- reagent_state = SOLID
- color = "#D0D0D0" // rgb: 208, 208, 208
-
- uranium
- name ="Uranium"
- id = "uranium"
- description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
- reagent_state = SOLID
- color = "#B8B8C0" // rgb: 184, 184, 192
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(2,IRRADIATE,0)
- ..()
- return
-
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/greenglow(T)
-
- aluminum
- name = "Aluminum"
- id = "aluminum"
- description = "A silvery white and ductile member of the boron group of chemical elements."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
- silicon
- name = "Silicon"
- id = "silicon"
- description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
- fuel
- name = "Welding fuel"
- id = "fuel"
- description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil."
- reagent_state = LIQUID
- color = "#060606"
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
- ..()
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
- name = "Unholy Water"
- id = "unholywater"
- description = "Something that shouldn't exist on this plane of existance."
- process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
-
- on_mob_life(mob/living/M)
- M.adjustBrainLoss(3)
- if(iscultist(M))
- M.status_flags |= GOTTAGOFAST
- M.drowsyness = max(M.drowsyness-5, 0)
- M.AdjustParalysis(-2)
- M.AdjustStunned(-2)
- M.AdjustWeakened(-2)
- else
- M.adjustToxLoss(2)
- M.adjustFireLoss(2)
- M.adjustOxyLoss(2)
- M.adjustBruteLoss(2)
- holder.remove_reagent(src.id, 1)
-
- incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel.
- name = "Incendiary fuel"
- id = "incendiaryfuel"
- description = "A highly flammable compound used in incendiary grenades."
- reagent_state = LIQUID
- color = "#660000" // rgb: 102, 0, 0
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
-
- reaction_obj(var/obj/O, var/volume)
- var/turf/the_turf = get_turf(O)
- if(!the_turf)
- return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
- new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
- reaction_turf(var/turf/T, var/volume)
- new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
- return
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
- reagent_state = LIQUID
- color = "#61C2C2"
-
- reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/effect/decal/cleanable))
- qdel(O)
- else
- if(O)
- O.clean_blood()
- reaction_turf(var/turf/T, var/volume)
- if(volume >= 1)
- T.overlays.Cut()
- T.clean_blood()
- for(var/obj/effect/decal/cleanable/C in src)
- qdel(C)
-
- for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(5,10))
- reaction_turf(var/turf/simulated/S, var/volume)
- if(volume >= 1)
- S.dirt = 0
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.lip_style)
- H.lip_style = null
- H.update_body()
- if(C.r_hand)
- C.r_hand.clean_blood()
- if(C.l_hand)
- C.l_hand.clean_blood()
- if(C.wear_mask)
- if(C.wear_mask.clean_blood())
- C.update_inv_wear_mask(0)
- if(ishuman(M))
- var/mob/living/carbon/human/H = C
- if(H.head)
- if(H.head.clean_blood())
- H.update_inv_head(0,0)
- if(H.wear_suit)
- if(H.wear_suit.clean_blood())
- H.update_inv_wear_suit(0,0)
- else if(H.w_uniform)
- if(H.w_uniform.clean_blood())
- H.update_inv_w_uniform(0,0)
- if(H.shoes)
- if(H.shoes.clean_blood())
- H.update_inv_shoes(0,0)
- M.clean_blood()
- ..()
- return
-
- plasma
- name = "Plasma"
- id = "plasma"
- description = "The liquid phase of an unusual extraterrestrial compound."
- reagent_state = LIQUID
- color = "#7A2B94"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1*REM)
- if(holder.has_reagent("epinephrine"))
- holder.remove_reagent("epinephrine", 2)
- ..()
- return
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 5)
- ..()
- return
- lexorin
- name = "Lexorin"
- id = "lexorin"
- description = "Lexorin temporarily stops respiration. Causes tissue damage."
- reagent_state = LIQUID
- color = "#52685D"
- metabolization_rate = 0.2
-
- on_mob_life(var/mob/living/M as mob)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- adminordrazine //An OP chemical for admins
- name = "Adminordrazine"
- id = "adminordrazine"
- description = "It's magic. We don't have to explain it."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
- process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
-
- on_mob_life(var/mob/living/carbon/M as mob)
- if(!M) M = holder.my_atom ///This can even heal dead people.
- for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R != src)
- M.reagents.remove_reagent(R.id,5)
- M.setCloneLoss(0)
- M.setOxyLoss(0)
- M.radiation = 0
- M.heal_organ_damage(5,5)
- M.adjustToxLoss(-5)
- M.hallucination = 0
- M.setBrainLoss(0)
- M.disabilities = 0
- M.sdisabilities = 0
- M.eye_blurry = 0
- M.eye_blind = 0
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
- if(istype(E))
- E.damage = max(E.damage-5 , 0)
- M.SetWeakened(0)
- M.SetStunned(0)
- M.SetParalysis(0)
- M.silent = 0
- M.dizziness = 0
- M.drowsyness = 0
- M.stuttering = 0
- M.slurring = 0
- M.confused = 0
- M.sleeping = 0
- M.jitteriness = 0
- if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
- var/mob/living/carbon/C = M
- if(C.virus2.len)
- for (var/ID in C.virus2)
- var/datum/disease2/disease/V = C.virus2[ID]
- C.antibodies |= V.antigen
- ..()
- return
-
- nanites
- name = "Nanites"
- id = "nanites"
- description = "Nanomachines that aid in rapid cellular regeneration."
-
-
- synaptizine
- name = "Synaptizine"
- id = "synaptizine"
- description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
- reagent_state = LIQUID
- color = "#FA46FA"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- if(prob(50))
- M.adjustBrainLoss(-1.0)
- ..()
- return
-
- audioline
- name = "Audioline"
- id = "audioline"
- description = "Heals ear damage."
- reagent_state = LIQUID
- color = "#6600FF" // rgb: 100, 165, 255
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.ear_damage = 0
- M.ear_deaf = 0
- ..()
- return
-
- mitocholide
- name = "Mitocholide"
- id = "mitocholide"
- description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- //Mitocholide is hard enough to get, it's probably fair to make this all internal organs
- for(var/name in H.internal_organs_by_name)
- var/obj/item/organ/I = H.internal_organs_by_name[name]
- if(I.damage > 0)
- I.damage -= 0.20
- ..()
- return
-
- cryoxadone
- name = "Cryoxadone"
- id = "cryoxadone"
- description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly."
- reagent_state = LIQUID
- color = "#0000C8" // rgb: 200, 165, 220
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.bodytemperature < 265)
- M.adjustCloneLoss(-4)
- M.adjustOxyLoss(-10)
- M.heal_organ_damage(12,12)
- M.adjustToxLoss(-3)
- M.status_flags &= ~DISFIGURED
- ..()
- return
-
- rezadone
- name = "Rezadone"
- id = "rezadone"
- description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
- reagent_state = SOLID
- color = "#669900" // rgb: 102, 153, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- switch(data)
- if(1 to 15)
- M.adjustCloneLoss(-1)
- M.heal_organ_damage(1,1)
- if(15 to 35)
- M.adjustCloneLoss(-2)
- M.heal_organ_damage(2,1)
- M.status_flags &= ~DISFIGURED
- if(35 to INFINITY)
- M.adjustToxLoss(1)
- M.Dizzy(5)
- M.Jitter(5)
-
- ..()
- return
-
- spaceacillin
- name = "Spaceacillin"
- id = "spaceacillin"
- description = "An all-purpose antibiotic agent extracted from space fungus."
- reagent_state = LIQUID
- color = "#0AB478"
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- return
-
- carpotoxin
- name = "Carpotoxin"
- id = "carpotoxin"
- description = "A deadly neurotoxin produced by the dreaded spess carp."
- reagent_state = LIQUID
- color = "#003333" // rgb: 0, 51, 51
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(2*REM)
- ..()
- return
-
- staminatoxin
- name = "Tirizene"
- id = "tirizene"
- description = "A toxin that affects the stamina of a person when injected into the bloodstream."
- reagent_state = LIQUID
- color = "#6E2828"
- data = 13
-
- on_mob_life(var/mob/living/M)
- M.adjustStaminaLoss(REM * data)
- data = max(data - 1, 3)
- ..()
-
- lsd
- name = "Lysergic acid diethylamide"
- id = "lsd"
- description = "A highly potent hallucinogenic substance. Far out, maaaan."
- reagent_state = LIQUID
- color = "#0000D8"
-
- on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- M.hallucination += 10
- ..()
- return
-
-
- spores
- name = "Spore Toxin"
- id = "spores"
- description = "A toxic spore cloud which blocks vision when ingested."
- color = "#9ACD32"
-
- on_mob_life(var/mob/living/M as mob)
- M.adjustToxLoss(0.5)
- M.damageoverlaytemp = 60
- M.eye_blurry = max(M.eye_blurry, 3)
- ..()
- return
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/*
- nanomachines
- name = "Nanomachines"
- id = "nanomachines"
- description = "Microscopic construction robots."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/robotic_transformation(0),1)
-
- xenomicrobes
- name = "Xenomicrobes"
- id = "xenomicrobes"
- description = "Microbes with an entirely alien cellular structure."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/xeno_transformation(0),1)
-*/
-
- spore
- name = "Blob Spores"
- id = "spore"
- description = "Spores of some blob creature thingy."
- reagent_state = LIQUID
- color = "#CE760A" // rgb: 206, 118, 10
- var/client/blob_client = null
- var/blob_point_rate = 3
-
- on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- if (holder.has_reagent("atrazine",45))
- holder.del_reagent("spore")
- if (prob(1))
- M << "\red Your mouth tastes funny."
- if (prob(1) && prob(25))
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(directory[ckey(C.key)])
- blob_client = directory[ckey(C.key)]
- C.gib()
- if(blob_client)
- var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
- if(core.overmind && core.overmind.mind)
- core.overmind.mind.name = C.name
-
- return
-
-//foam
-
- fluorosurfactant
- name = "Fluorosurfactant"
- id = "fluorosurfactant"
- description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
- reagent_state = LIQUID
- color = "#9E6B38" // rgb: 158, 107, 56
-
-// metal foaming agent
-// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
-
- ammonia
- name = "Ammonia"
- id = "ammonia"
- description = "A caustic substance commonly used in fertilizer or household cleaners."
- reagent_state = GAS
- color = "#404030" // rgb: 64, 64, 48
-
-
- diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- description = "A secondary amine, useful as a plant nutrient and as building block for other compounds."
- reagent_state = LIQUID
- color = "#322D00"
-
- beer2 //disguised as normal beer for use by emagged brobots
- name = "Beer"
- id = "beer2"
- description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!data)
- data = 1
- switch(data)
- if(1 to 50)
- M.sleeping += 1
- if(51 to INFINITY)
- M.sleeping += 1
- M.adjustToxLoss((data - 50)*REM)
- data++
- holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
- ..()
- return
-
-/////////////////////////Food Reagents////////////////////////////
-// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
-// condiments, additives, and such go.
- nutriment // Pure nutriment, universally digestable and thus slightly less effective
- name = "Nutriment"
- id = "nutriment"
- description = "A questionable mixture of various pure nutrients commonly found in processed foods."
- reagent_state = SOLID
- nutriment_factor = 12 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
- name = "Protein"
- id = "protein"
- description = "Various essential proteins and fats commonly found in animal flesh and blood."
- reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
- name = "Plant-matter"
- id = "plantmatter"
- description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
- reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- soysauce
- name = "Soysauce"
- id = "soysauce"
- description = "A salty sauce made from the soy plant."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#792300" // rgb: 121, 35, 0
-
- ketchup
- name = "Ketchup"
- id = "ketchup"
- description = "Ketchup, catsup, whatever. It's tomato paste."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#731008" // rgb: 115, 16, 8
-
-
- capsaicin
- name = "Capsaicin Oil"
- id = "capsaicin"
- description = "This is what makes chilis hot."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("frostoil"))
- holder.remove_reagent("frostoil", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(5,20)
- if(15 to 25)
- M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(15,20)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- data++
- ..()
- return
-
- condensedcapsaicin
- name = "Condensed Capsaicin"
- id = "condensedcapsaicin"
- description = "This shit goes in pepperspray."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/victim = M
- var/mouth_covered = 0
- var/eyes_covered = 0
- var/obj/item/safe_thing = null
- if( victim.wear_mask )
- if ( victim.wear_mask.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.wear_mask
- if ( victim.wear_mask.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.head
- if ( victim.head.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.head
- if(victim.glasses)
- eyes_covered = 1
- if ( !safe_thing )
- safe_thing = victim.glasses
- if ( eyes_covered && mouth_covered )
- victim << "\red Your [safe_thing] protects you from the pepperspray!"
- return
- else if ( mouth_covered ) // Reduced effects if partially protected
- victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
- if(prob(5))
- victim.emote("scream")
- victim.eye_blurry = max(M.eye_blurry, 3)
- victim.eye_blind = max(M.eye_blind, 1)
- victim.confused = max(M.confused, 3)
- victim.damageoverlaytemp = 60
- victim.Weaken(3)
- victim.drop_item()
- return
- else if ( eyes_covered ) // Eye cover is better than mouth cover
- victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 3)
- victim.damageoverlaytemp = 30
- return
- else // Oh dear :D
- if(prob(5))
- victim.emote("scream")
- victim << "\red You're sprayed directly in the eyes with pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 5)
- victim.eye_blind = max(M.eye_blind, 2)
- victim.confused = max(M.confused, 6)
- victim.damageoverlaytemp = 75
- victim.Weaken(5)
- victim.drop_item()
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(5))
- M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
- ..()
- return
-
- frostoil
- name = "Frost Oil"
- id = "frostoil"
- description = "A special oil that noticably chills the body. Extraced from Icepeppers."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 139, 166, 233
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(5,20)
- if(15 to 25)
- M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(prob(1))
- M.emote("shiver")
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(15,20)
- data++
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- reaction_turf(var/turf/simulated/T, var/volume)
- for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(15,30))
-
- sodiumchloride
- name = "Salt"
- id = "sodiumchloride"
- description = "Sodium chloride, common table salt."
- reagent_state = SOLID
- color = "#B1B0B0"
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 100)
- if(prob(70))
- M.adjustBrainLoss(1)
- if(prob(8))
- M.adjustToxLoss(rand(1,2))
- ..()
- return
-
- blackpepper
- name = "Black Pepper"
- id = "blackpepper"
- description = "A powder ground from peppercorns. *AAAACHOOO*"
- reagent_state = SOLID
- // no color (ie, black)
-
- coco
- name = "Coco Powder"
- id = "coco"
- description = "A fatty, bitter paste made from coco beans."
- reagent_state = SOLID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- hot_coco
- name = "Hot Chocolate"
- id = "hot_coco"
- description = "Made with love! And coco beans."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
-
- on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.nutrition += nutriment_factor
- ..()
- return
-
- psilocybin
- name = "Psilocybin"
- id = "psilocybin"
- description = "A strong psycotropic derived from certain species of mushroom."
- color = "#E700E7" // rgb: 231, 0, 231
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 30)
- if(!data) data = 1
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.Dizzy(5)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(10)
- M.Dizzy(10)
- M.druggy = max(M.druggy, 35)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(20)
- M.Dizzy(20)
- M.druggy = max(M.druggy, 40)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- data++
- ..()
- return
-
- sprinkles
- name = "Sprinkles"
- id = "sprinkles"
- description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FF00FF" // rgb: 255, 0, 255
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- cornoil
- name = "Corn Oil"
- id = "cornoil"
- description = "An oil derived from various types of corn."
- reagent_state = LIQUID
- nutriment_factor = 20 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 3)
- if(T.wet >= 1) return
- T.wet = 1
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
- T.overlays += T.wet_overlay
-
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot)
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
-
- enzyme
- name = "Denatured Enzyme"
- id = "enzyme"
- description = "Heated beyond usefulness, this enzyme is now worthless."
- reagent_state = LIQUID
- color = "#282314" // rgb: 54, 94, 48
-
- dry_ramen
- name = "Dry Ramen"
- id = "dry_ramen"
- description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- hot_ramen
- name = "Hot Ramen"
- id = "hot_ramen"
- description = "The noodles are boiled, the flavors are artificial, just like being back in school."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
- ..()
- return
-
- hell_ramen
- name = "Hell Ramen"
- id = "hell_ramen"
- description = "The noodles are boiled, the flavors are artificial, just like being back in school."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- ..()
- return
-
-
- flour
- name = "flour"
- id = "flour"
- description = "This is what you rub all over yourself to pretend to be a ghost."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/flour(T)
-
- rice
- name = "Rice"
- id = "rice"
- description = "Enjoy the great taste of nothing."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- cherryjelly
- name = "Cherry Jelly"
- id = "cherryjelly"
- description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
- reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#801E28" // rgb: 128, 30, 40
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- toxin/coffeepowder
- name = "Coffee Grounds"
- id = "coffeepowder"
- description = "Finely ground Coffee beans, used to make coffee."
- reagent_state = SOLID
- color = "#5B2E0D" // rgb: 91, 46, 13
-
- toxin/teapowder
- name = "Ground Tea Leaves"
- id = "teapowder"
- description = "Finely shredded Tea leaves, used for making tea."
- reagent_state = SOLID
- color = "#7F8400" // rgb: 127, 132, 0
-
- //Reagents used for plant fertilizers.
- toxin/fertilizer
- name = "fertilizer"
- id = "fertilizer"
- description = "A chemical mix good for growing plants with."
- reagent_state = LIQUID
-// toxpwr = 0.2 //It's not THAT poisonous.
- color = "#664330" // rgb: 102, 67, 48
-
-
- toxin/fertilizer/eznutrient
- name = "EZ Nutrient"
- id = "eznutrient"
-
- toxin/fertilizer/left4zed
- name = "Left-4-Zed"
- id = "left4zed"
-
- toxin/fertilizer/robustharvest
- name = "Robust Harvest"
- id = "robustharvest"
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////// DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- drink
- name = "Drink"
- id = "drink"
- description = "Uh, some kind of drink."
- reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#E78108" // rgb: 231, 129, 8
- var/adj_dizzy = 0
- var/adj_drowsy = 0
- var/adj_sleepy = 0
- var/adj_temp = 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
- if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
- if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
- if (adj_temp)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
- // Drinks should be used up faster than other reagents.
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- orangejuice
- name = "Orange juice"
- id = "orangejuice"
- description = "Both delicious AND rich in Vitamin C, what more do you need?"
- color = "#E78108" // rgb: 231, 129, 8
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
- return
-
- tomatojuice
- name = "Tomato Juice"
- id = "tomatojuice"
- description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
- color = "#731008" // rgb: 115, 16, 8
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1)
- return
-
- limejuice
- name = "Lime Juice"
- id = "limejuice"
- description = "The sweet-sour juice of limes."
- color = "#365E30" // rgb: 54, 94, 48
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
- return
-
-
- carrotjuice
- name = "Carrot juice"
- id = "carrotjuice"
- description = "It is just like a carrot but without crunching."
- color = "#973800" // rgb: 151, 56, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.eye_blurry = max(M.eye_blurry-1 , 0)
- M.eye_blind = max(M.eye_blind-1 , 0)
- if(!data) data = 1
- switch(data)
- if(1 to 20)
- //nothing
- if(21 to INFINITY)
- if (prob(data-10))
- M.disabilities &= ~NEARSIGHTED
- data++
- return
-
- doctor_delight
- name = "The Doctor's Delight"
- id = "doctorsdelight"
- description = "A gulp a day keeps the MediBot away. That's probably for the best."
- reagent_state = LIQUID
- color = "#FF8CFF" // rgb: 255, 140, 255
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
- ..()
- return
-
- berryjuice
- name = "Berry Juice"
- id = "berryjuice"
- description = "A delicious blend of several different kinds of berries."
- color = "#863333" // rgb: 134, 51, 51
-
- poisonberryjuice
- name = "Poison Berry Juice"
- id = "poisonberryjuice"
- description = "A tasty juice blended from various kinds of very deadly and toxic berries."
- color = "#863353" // rgb: 134, 51, 83
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.adjustToxLoss(1)
- return
-
- watermelonjuice
- name = "Watermelon Juice"
- id = "watermelonjuice"
- description = "Delicious juice made from watermelon."
- color = "#863333" // rgb: 134, 51, 51
-
- lemonjuice
- name = "Lemon Juice"
- id = "lemonjuice"
- description = "This juice is VERY sour."
- color = "#863333" // rgb: 175, 175, 0
-
- grapejuice
- name = "Grape Juice"
- id = "grapejuice"
- description = "This juice is known to stain shirts."
- color = "#993399" // rgb: 153, 51, 153
-
- banana
- name = "Banana Juice"
- id = "banana"
- description = "The raw essence of a banana."
- color = "#863333" // rgb: 175, 175, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- nothing
- name = "Nothing"
- id = "nothing"
- description = "Absolutely nothing."
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- potato_juice
- name = "Potato Juice"
- id = "potato"
- description = "Juice of the potato. Bleh."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- milk
- name = "Milk"
- id = "milk"
- description = "An opaque white liquid produced by the mammary glands of mammals."
- color = "#DFDFDF" // rgb: 223, 223, 223
-
- on_mob_life(var/mob/living/M as mob)
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
- ..()
- return
-
- soymilk
- name = "Soy Milk"
- id = "soymilk"
- description = "An opaque white liquid made from soybeans."
- color = "#DFDFC7" // rgb: 223, 223, 199
-
- cream
- name = "Cream"
- id = "cream"
- description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
- color = "#DFD7AF" // rgb: 223, 215, 175
-
- chocolate_milk
- name = "Chocolate milk"
- id ="chocolate_milk"
- description = "Chocolate-flavored milk, tastes like being a kid again."
- color = "#85432C"
-
- hot_coco
- name = "Hot Chocolate"
- id = "hot_coco"
- description = "Made with love! And coco beans."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
- adj_temp = 5
-
- coffee
- name = "Coffee"
- id = "coffee"
- description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
- color = "#482000" // rgb: 72, 32, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
- adj_temp = 25
- overdose_threshold = 45
-
- on_mob_life(var/mob/living/M as mob)
- if(adj_temp > 0 && holder.has_reagent("frostoil"))
- holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
- if(prob(50))
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- ..()
- return
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 45)
- M.Jitter(5)
-
- ..()
- return
-
- icecoffee
- name = "Iced Coffee"
- id = "icecoffee"
- description = "Coffee and ice, refreshing and cool."
- color = "#102838" // rgb: 16, 40, 56
- adj_temp = -5
-
- soy_latte
- name = "Soy Latte"
- id = "soy_latte"
- description = "A nice and tasty beverage while you are reading your hippie books."
- color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
- adj_temp = 5
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
-
- cafe_latte
- name = "Cafe Latte"
- id = "cafe_latte"
- description = "A nice, strong and tasty beverage while you are reading."
- color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
- adj_temp = 5
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
-
- tea
- name = "Tea"
- id = "tea"
- description = "Tasty black tea: It has antioxidants. It's good for you!"
- color = "#101000" // rgb: 16, 16, 0
- adj_dizzy = -2
- adj_drowsy = -1
- adj_sleepy = -3
- adj_temp = 20
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getToxLoss() && prob(20))
- M.adjustToxLoss(-1)
- return
-
- icetea
- name = "Iced Tea"
- id = "icetea"
- description = "No relation to a certain rap artist/ actor."
- color = "#104038" // rgb: 16, 64, 56
- adj_temp = -5
-
- kahlua
- name = "Kahlua"
- id = "kahlua"
- description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
- color = "#664300" // rgb: 102, 67, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.Jitter(5)
- return
-
- cold
- name = "Cold drink"
- adj_temp = -5
-
- tonic
- name = "Tonic Water"
- id = "tonic"
- description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
- color = "#664300" // rgb: 102, 67, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
-
- sodawater
- name = "Soda Water"
- id = "sodawater"
- description = "A can of club soda. Why not make a scotch and soda?"
- color = "#619494" // rgb: 97, 148, 148
- adj_dizzy = -5
- adj_drowsy = -3
-
- ice
- name = "Ice"
- id = "ice"
- description = "Frozen water, your dentist wouldn't like you chewing this."
- reagent_state = SOLID
- color = "#619494" // rgb: 97, 148, 148
-
- space_cola
- name = "Cola"
- id = "cola"
- description = "A refreshing beverage."
- reagent_state = LIQUID
- color = "#100800" // rgb: 16, 8, 0
- adj_drowsy = -3
-
- nuka_cola
- name = "Nuka Cola"
- id = "nuka_cola"
- description = "Cola, cola never changes."
- color = "#100800" // rgb: 16, 8, 0
- adj_sleepy = -2
-
- on_mob_life(var/mob/living/M as mob)
- M.Jitter(20)
- M.druggy = max(M.druggy, 30)
- M.dizziness +=5
- M.drowsyness = 0
- M.status_flags |= GOTTAGOFAST
- ..()
- return
-
- spacemountainwind
- name = "Space Mountain Wind"
- id = "spacemountainwind"
- description = "Blows right through you like a space wind."
- color = "#102000" // rgb: 16, 32, 0
- adj_drowsy = -7
- adj_sleepy = -1
-
- dr_gibb
- name = "Dr. Gibb"
- id = "dr_gibb"
- description = "A delicious blend of 42 different flavours"
- color = "#102000" // rgb: 16, 32, 0
- adj_drowsy = -6
-
- space_up
- name = "Space-Up"
- id = "space_up"
- description = "Tastes like a hull breach in your mouth."
- color = "#202800" // rgb: 32, 40, 0
- adj_temp = -8
-
- lemon_lime
- name = "Lemon Lime"
- description = "A tangy substance made of 0.5% natural citrus!"
- id = "lemon_lime"
- color = "#878F00" // rgb: 135, 40, 0
- adj_temp = -8
-
- lemonade
- name = "Lemonade"
- description = "Oh the nostalgia..."
- id = "lemonade"
- color = "#FFFF00" // rgb: 255, 255, 0
-
- kiraspecial
- name = "Kira Special"
- description = "Long live the guy who everyone had mistaken for a girl. Baka!"
- id = "kiraspecial"
- color = "#CCCC99" // rgb: 204, 204, 153
-
- brownstar
- name = "Brown Star"
- description = "Its not what it sounds like..."
- id = "brownstar"
- color = "#9F3400" // rgb: 159, 052, 000
- adj_temp = - 2
-
- milkshake
- name = "Milkshake"
- description = "Glorious brainfreezing mixture."
- id = "milkshake"
- color = "#AEE5E4" // rgb" 174, 229, 228
- adj_temp = -9
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(5,20)
- if(15 to 25)
- M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(prob(1)) M.emote("shiver")
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(15,20)
- data++
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- rewriter
- name = "Rewriter"
- description = "The secert of the sanctuary of the Libarian..."
- id = "rewriter"
- color = "#485000" // rgb:72, 080, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.Jitter(5)
- return
-
- hippies_delight
- name = "Hippie's Delight"
- id = "hippiesdelight"
- description = "You just don't get it maaaan."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 50)
- if(!data) data = 1
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.Dizzy(10)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(20)
- M.Dizzy(20)
- M.druggy = max(M.druggy, 45)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(40)
- M.Dizzy(40)
- M.druggy = max(M.druggy, 60)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- holder.remove_reagent(src.id, 0.2)
- data++
- ..()
- return
-
-//ALCOHOL WOO
- ethanol
- name = "Ethanol" //Parent class for all alcoholic reagents.
- id = "ethanol"
- description = "A well-known alcohol with a variety of applications."
- reagent_state = LIQUID
- nutriment_factor = 0 //So alcohol can fill you up! If they want to.
- color = "#404030" // rgb: 64, 64, 48
- var/datum/martial_art/drunk_brawling/F = new
- var/dizzy_adj = 3
- var/slurr_adj = 3
- var/confused_adj = 2
- var/slur_start = 65 //amount absorbed after which mob starts slurring
- var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style
- var/confused_start = 130 //amount absorbed after which mob starts confusing directions
- var/vomit_start = 180 //amount absorbed after which mob starts vomitting
- var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision
- var/pass_out = 325 //amount absorbed after which mob starts passing out
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- // Sobering multiplier.
- // Sober block makes it more difficult to get drunk
- var/sober_str=!(SOBER in M.mutations)?1:2
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if(!src.data) data = 1
- src.data++
-
- var/d = data
-
- // make all the beverages work together
- for(var/datum/reagent/ethanol/A in holder.reagent_list)
- if(isnum(A.data)) d += A.data
-
- d/=sober_str
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly.
- d*=5
-
- M.dizziness += dizzy_adj.
- if(d >= slur_start && d < pass_out)
- if (!M:slurring) M:slurring = 1
- M:slurring += slurr_adj/sober_str
- if(d >= brawl_start && ishuman(M))
- var/mob/living/carbon/human/H = M
- F.teach(H,1)
- if(src.volume < 3)
- if(H.martial_art == F)
- F.remove(H)
- if(d >= confused_start && prob(33))
- if (!M:confused) M:confused = 1
- M.confused = max(M:confused+(confused_adj/sober_str),0)
- if(d >= blur_start)
- M.eye_blurry = max(M.eye_blurry, 10/sober_str)
- M:drowsyness = max(M:drowsyness, 0)
- if(d >= vomit_start)
- if(prob(8))
- M.fakevomit()
- if(d >= pass_out)
- M:paralysis = max(M:paralysis, 20/sober_str)
- M:drowsyness = max(M:drowsyness, 30/sober_str)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
- if (istype(L))
- L.take_damage(0.1, 1)
- H.adjustToxLoss(0.1)
- holder.remove_reagent(src.id, 0.4)
- ..()
- return
-
- reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/item/weapon/paper))
- var/obj/item/weapon/paper/paperaffected = O
- paperaffected.clearpaper()
- usr << "The solution melts away the ink on the paper."
- if(istype(O,/obj/item/weapon/book))
- if(volume >= 5)
- var/obj/item/weapon/book/affectedbook = O
- affectedbook.dat = null
- usr << "The solution melts away the ink on the book."
- else
- usr << "It wasn't enough..."
- return
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 15)
- return
-
- beer //It's really much more stronger than other drinks.
- name = "Beer"
- id = "beer"
- description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
- on_mob_life(var/mob/living/M as mob)
- ..()
- M:jitteriness = max(M:jitteriness-3,0)
- return
-
- cider
- name = "Cider"
- id = "cider"
- description = "An alcoholic beverage derived from apples."
- color = "#174116"
-
- whiskey
- name = "Whiskey"
- id = "whiskey"
- description = "A superb and well-aged single-malt whiskey. Damn."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
-
- specialwhiskey
- name = "Special Blend Whiskey"
- id = "specialwhiskey"
- description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
- color = "#664300" // rgb: 102, 67, 0
- slur_start = 30 //amount absorbed after which mob starts slurring
- brawl_start = 40
-
- gin
- name = "Gin"
- id = "gin"
- description = "It's gin. In space. I say, good sir."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 3
-
- absinthe
- name = "Absinthe"
- id = "absinthe"
- description = "Watch out that the Green Fairy doesn't come for you!"
- color = "#33EE00" // rgb: lots, ??, ??
- overdose_threshold = 30
- dizzy_adj = 5
- slur_start = 25
- brawl_start = 40
- confused_start = 100
-
- //copy paste from LSD... shoot me
- on_mob_life(var/mob/M)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- M:hallucination += 5
- if(volume > overdose_threshold)
- M:adjustToxLoss(1)
- ..()
- return
-
- rum
- name = "Rum"
- id = "rum"
- description = "Popular with the sailors. Not very popular with everyone else."
- color = "#664300" // rgb: 102, 67, 0
- overdose_threshold = 30
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- if(volume > overdose_threshold)
- M:adjustToxLoss(1)
- return
-
- mojito
- name = "Mojito"
- id = "mojito"
- description = "If it's good enough for Spesscuba, it's good enough for you."
- color = "#664300" // rgb: 102, 67, 0
-
- vodka
- name = "Vodka"
- id = "vodka"
- description = "Number one drink AND fueling choice for Russians worldwide."
- color = "#664300" // rgb: 102, 67, 0
-
- sake
- name = "Sake"
- id = "sake"
- description = "Anime's favorite drink."
- color = "#664300" // rgb: 102, 67, 0
-
- tequilla
- name = "Tequila"
- id = "tequilla"
- description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
- color = "#A8B0B7" // rgb: 168, 176, 183
-
- vermouth
- name = "Vermouth"
- id = "vermouth"
- description = "You suddenly feel a craving for a martini..."
- color = "#664300" // rgb: 102, 67, 0
-
- wine
- name = "Wine"
- id = "wine"
- description = "An premium alchoholic beverage made from distilled grape juice."
- color = "#7E4043" // rgb: 126, 64, 67
- dizzy_adj = 2
- slur_start = 65 //amount absorbed after which mob starts slurring
- confused_start = 145 //amount absorbed after which mob starts confusing directions
-
- cognac
- name = "Cognac"
- id = "cognac"
- description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- confused_start = 115 //amount absorbed after which mob starts confusing directions
-
- suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
- name = "Suicider"
- id = "suicider"
- description = "An unbelievably strong and potent variety of Cider."
- color = "#CF3811"
- dizzy_adj = 20
- slurr_adj = 20
- confused_adj = 3
- slur_start = 15
- brawl_start = 25
- confused_start = 40
- blur_start = 60
- pass_out = 80
-
- ale
- name = "Ale"
- id = "ale"
- description = "A dark alchoholic beverage made by malted barley and yeast."
- color = "#664300" // rgb: 102, 67, 0
-
- thirteenloko
- name = "Thirteen Loko"
- id = "thirteenloko"
- description = "A potent mixture of caffeine and alcohol."
- reagent_state = LIQUID
- color = "#102000" // rgb: 16, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- M:drowsyness = max(0,M:drowsyness-7)
- //if(!M:sleeping_willingly)
- // M:sleeping = max(0,M.sleeping-2)
- if (M.bodytemperature > 310)
- M.bodytemperature = max(310, M.bodytemperature-5)
- M.Jitter(1)
- return
-
-
-/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
-
- bilk
- name = "Bilk"
- id = "bilk"
- description = "This appears to be beer mixed with milk. Disgusting."
- reagent_state = LIQUID
- color = "#895C4C" // rgb: 137, 92, 76
-
- atomicbomb
- name = "Atomic Bomb"
- id = "atomicbomb"
- description = "Nuclear proliferation never tasted so good."
- reagent_state = LIQUID
- color = "#666300" // rgb: 102, 99, 0
-
- threemileisland
- name = "THree Mile Island Iced Tea"
- id = "threemileisland"
- description = "Made for a woman, strong enough for a man."
- reagent_state = LIQUID
- color = "#666340" // rgb: 102, 99, 64
-
- goldschlager
- name = "Goldschlager"
- id = "goldschlager"
- description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- patron
- name = "Patron"
- id = "patron"
- description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
- reagent_state = LIQUID
- color = "#585840" // rgb: 88, 88, 64
-
- gintonic
- name = "Gin and Tonic"
- id = "gintonic"
- description = "An all time classic, mild cocktail."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- cuba_libre
- name = "Cuba Libre"
- id = "cubalibre"
- description = "Rum, mixed with cola. Viva la revolution."
- reagent_state = LIQUID
- color = "#3E1B00" // rgb: 62, 27, 0
-
- whiskey_cola
- name = "Whiskey Cola"
- id = "whiskeycola"
- description = "Whiskey, mixed with cola. Surprisingly refreshing."
- reagent_state = LIQUID
- color = "#3E1B00" // rgb: 62, 27, 0
-
- martini
- name = "Classic Martini"
- id = "martini"
- description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- vodkamartini
- name = "Vodka Martini"
- id = "vodkamartini"
- description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- white_russian
- name = "White Russian"
- id = "whiterussian"
- description = "That's just, like, your opinion, man..."
- reagent_state = LIQUID
- color = "#A68340" // rgb: 166, 131, 64
-
- screwdrivercocktail
- name = "Screwdriver"
- id = "screwdrivercocktail"
- description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- booger
- name = "Booger"
- id = "booger"
- description = "Ewww..."
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- bloody_mary
- name = "Bloody Mary"
- id = "bloodymary"
- description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- gargle_blaster
- name = "Pan-Galactic Gargle Blaster"
- id = "gargleblaster"
- description = "Whoah, this stuff looks volatile!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- brave_bull
- name = "Brave Bull"
- id = "bravebull"
- description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- tequilla_sunrise
- name = "Tequila Sunrise"
- id = "tequillasunrise"
- description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- toxins_special
- name = "Toxins Special"
- id = "toxinsspecial"
- description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- beepsky_smash
- name = "Beepsky Smash"
- id = "beepskysmash"
- description = "Deny drinking this and prepare for THE LAW."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- description = "You take a tiny sip and feel a burning sensation..."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- irish_cream
- name = "Irish Cream"
- id = "irishcream"
- description = "Whiskey-imbued cream, what else would you expect from the Irish."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- manly_dorf
- name = "The Manly Dorf"
- id = "manlydorf"
- description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- longislandicedtea
- name = "Long Island Iced Tea"
- id = "longislandicedtea"
- description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- moonshine
- name = "Moonshine"
- id = "moonshine"
- description = "You've really hit rock bottom now... your liver packed its bags and left last night."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- b52
- name = "B-52"
- id = "b52"
- description = "Coffee, Irish Cream, and congac. You will get bombed."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- irishcoffee
- name = "Irish Coffee"
- id = "irishcoffee"
- description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- margarita
- name = "Margarita"
- id = "margarita"
- description = "On the rocks with salt on the rim. Arriba~!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- black_russian
- name = "Black Russian"
- id = "blackrussian"
- description = "For the lactose-intolerant. Still as classy as a White Russian."
- reagent_state = LIQUID
- color = "#360000" // rgb: 54, 0, 0
-
- manhattan
- name = "Manhattan"
- id = "manhattan"
- description = "The Detective's undercover drink of choice. He never could stomach gin..."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- manhattan_proj
- name = "Manhattan Project"
- id = "manhattan_proj"
- description = "A scienitst's drink of choice, for pondering ways to blow up the station."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- whiskeysoda
- name = "Whiskey Soda"
- id = "whiskeysoda"
- description = "Ultimate refreshment."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- antifreeze
- name = "Anti-freeze"
- id = "antifreeze"
- description = "Ultimate refreshment."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- barefoot
- name = "Barefoot"
- id = "barefoot"
- description = "Barefoot and pregnant"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- snowwhite
- name = "Snow White"
- id = "snowwhite"
- description = "A cold refreshment"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- demonsblood
- name = "Demons Blood"
- id = "demonsblood"
- description = "AHHHH!!!!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 10
- slurr_adj = 10
-
- vodkatonic
- name = "Vodka and Tonic"
- id = "vodkatonic"
- description = "For when a gin and tonic isn't russian enough."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- slurr_adj = 3
-
- ginfizz
- name = "Gin Fizz"
- id = "ginfizz"
- description = "Refreshingly lemony, deliciously dry."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- slurr_adj = 3
-
- bahama_mama
- name = "Bahama mama"
- id = "bahama_mama"
- description = "Tropic cocktail."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- singulo
- name = "Singulo"
- id = "singulo"
- description = "A blue-space beverage!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
- dizzy_adj = 15
- slurr_adj = 15
-
- sbiten
- name = "Sbiten"
- id = "sbiten"
- description = "A spicy Vodka! Might be a little hot for the little guys!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if (M.bodytemperature < 360)
- M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
- return
-
- devilskiss
- name = "Devils Kiss"
- id = "devilskiss"
- description = "Creepy time!"
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- red_mead
- name = "Red Mead"
- id = "red_mead"
- description = "The true Viking drink! Even though it has a strange red color."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- mead
- name = "Mead"
- id = "mead"
- description = "A Vikings drink, though a cheap one."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- iced_beer
- name = "Iced Beer"
- id = "iced_beer"
- description = "A beer which is so cold the air around it freezes."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if (M.bodytemperature < 270)
- M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
- return
-
- grog
- name = "Grog"
- id = "grog"
- description = "Watered down rum, Nanotrasen approves!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- aloe
- name = "Aloe"
- id = "aloe"
- description = "So very, very, very good."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- andalusia
- name = "Andalusia"
- id = "andalusia"
- description = "A nice, strange named drink."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- alliescocktail
- name = "Allies Cocktail"
- id = "alliescocktail"
- description = "A drink made from your allies."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- acid_spit
- name = "Acid Spit"
- id = "acidspit"
- description = "A drink by Nanotrasen. Made from live aliens."
- reagent_state = LIQUID
- color = "#365000" // rgb: 54, 80, 0
-
- amasec
- name = "Amasec"
- id = "amasec"
- description = "Official drink of the Imperium."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
-
- neurotoxin
- name = "Neurotoxin"
- id = "neurotoxin"
- description = "A strong neurotoxin that puts the subject into a death-like state."
- reagent_state = LIQUID
- color = "#2E2E61" // rgb: 46, 46, 97
-
- on_mob_life(var/mob/living/M as mob)
- M.weakened = max(M.weakened, 3)
- if(!data)
- data = 1
- data++
- M.dizziness +=6
- if(data >= 15 && data <45)
- if (!M.slurring)
- M.slurring = 1
- M.slurring += 3
- else if(data >= 45 && prob(50) && data <55)
- M.confused = max(M.confused+3,0)
- else if(data >=55)
- M.druggy = max(M.druggy, 55)
- else if(data >=200)
- M.adjustToxLoss(2)
- ..()
- return
-
- bananahonk
- name = "Banana Mama"
- id = "bananahonk"
- description = "A drink from Clown Heaven."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- silencer
- name = "Silencer"
- id = "silencer"
- description = "A drink from Mime Heaven."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- description = "A stingy drink."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- return
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- description = "The surprise is, it's green!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- irishcarbomb
- name = "Irish Car Bomb"
- id = "irishcarbomb"
- description = "Mmm, tastes like chocolate cake..."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- return
-
- syndicatebomb
- name = "Syndicate Bomb"
- id = "syndicatebomb"
- description = "A Syndicate bomb"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- description = "The surprise is, it's green!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- driestmartini
- name = "Driest Martini"
- id = "driestmartini"
- description = "Only for the experienced. You think you see sand floating in the glass."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.dizziness +=10
- if(data >= 55 && data <115)
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 10
- else if(data >= 115 && prob(33))
- M.confused = max(M.confused+15,15)
- ..()
-
- return
-
-// Undefine the alias for REAGENTS_EFFECT_MULTIPLER
-#undef REM
-
-
-/datum/reagent/Destroy()
- holder = null
- return ..()
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
deleted file mode 100644
index 8fcd9e8117b..00000000000
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ /dev/null
@@ -1,1576 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////
-datum
- chemical_reaction
- var/name = null
- var/id = null
- var/result = null
- var/list/required_reagents = list()
- var/list/required_catalysts = list()
-
- // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
- var/atom/required_container = null // the container required for the reaction to happen
- var/required_other = 0 // an integer required for the reaction to happen
-
- var/result_amount = 0
- var/secondary = 0 // set to nonzero if secondary reaction
- var/list/secondary_results = list() //additional reagents produced by the reaction
- var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement
- var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this).
- var/mix_message = "The solution begins to bubble."
- var/mix_sound = 'sound/effects/bubbles.ogg'
- var/no_message = 0
-
-
- proc
- on_reaction(var/datum/reagents/holder, var/created_volume)
- return
-
- //I recommend you set the result amount to the total volume of all components.
-
- explosion_potassium
- name = "Explosion"
- id = "explosion_potassium"
- result = null
- required_reagents = list("water" = 1, "potassium" = 1)
- result_amount = 2
- mix_message = "The mixture explodes!"
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
- e.start()
- holder.clear_reagents()
- return
-
- emp_pulse
- name = "EMP Pulse"
- id = "emp_pulse"
- result = null
- required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
- result_amount = 2
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
- // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
- empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
- holder.clear_reagents()
- return
-/*
- silicate
- name = "Silicate"
- id = "silicate"
- result = "silicate"
- required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
- result_amount = 3
-*/
-
- ice
- name = "Ice"
- id = "ice"
- result = "ice"
- required_reagents = list("water" = 1)
- result_amount = 1
- max_temp = 273
- mix_message = "Ice forms as the water freezes."
- mix_sound = null
-
- sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- result = "sterilizine"
- required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1)
- result_amount = 3
-
- mutagen
- name = "Unstable mutagen"
- id = "mutagen"
- result = "mutagen"
- required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
- result_amount = 3
- mix_message = "The substance turns neon green and bubbles unnervingly."
-
- hydrocodone
- name = "Hydrocodone"
- id = "hydrocodone"
- result = "hydrocodone"
- required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1)
- result_amount = 2
-
- thermite
- name = "Thermite"
- id = "thermite"
- result = "thermite"
- required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
- result_amount = 3
-
- space_drugs
- name = "Space Drugs"
- id = "space_drugs"
- result = "space_drugs"
- required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
- result_amount = 3
- mix_message = "Slightly dizzying fumes drift from the solution."
-
- lube
- name = "Space Lube"
- id = "lube"
- result = "lube"
- required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
- result_amount = 3
- mix_message = "The substance turns a striking cyan and becomes oily."
-
- mitocholide
- name = "mitocholide"
- id = "mitocholide"
- result = "mitocholide"
- required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1)
- result_amount = 3
-
- holy_water
- name = "Holy Water"
- id = "holywater"
- result = "holywater"
- required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1)
- result_amount = 3
- mix_message = "The water somehow seems purified. Or maybe defiled."
-
- cryoxadone
- name = "Cryoxadone"
- id = "cryoxadone"
- result = "cryoxadone"
- required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1)
- result_amount = 4
- mix_message = "The solution bubbles softly."
-
- spaceacillin
- name = "Spaceacillin"
- id = "spaceacillin"
- result = "spaceacillin"
- required_reagents = list("fungus" = 1, "ethanol" = 1)
- result_amount = 2
- mix_message = "The solvent extracts an antibiotic compound from the fungus."
-
- Audioline
- name = "Audioline"
- id = "audioline"
- result = "audioline"
- required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
- result_amount = 3
-
- glycerol
- name = "Glycerol"
- id = "glycerol"
- result = "glycerol"
- required_reagents = list("cornoil" = 3, "sacid" = 1)
- result_amount = 1
-
- nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- result = "nitroglycerin"
- required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
- result_amount = 2
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
- e.start()
-
- holder.clear_reagents()
- return
-
- sodiumchloride
- name = "Sodium Chloride"
- id = "sodiumchloride"
- result = "sodiumchloride"
- required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1)
- result_amount = 3
- mix_message = "The solution crystallizes with a brief flare of light."
-
- rezadone
- name = "Rezadone"
- id = "rezadone"
- result = "rezadone"
- required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1)
- result_amount = 3
-
- lsd
- name = "Lysergic acid diethylamide"
- id = "lsd"
- result = "lsd"
- required_reagents = list("diethylamine" = 1, "fungus" = 1)
- result_amount = 3
- mix_message = "The mixture turns a rather unassuming color and settles."
-
- plastication
- name = "Plastic"
- id = "solidplastic"
- result = null
- required_reagents = list("facid" = 10, "plasticide" = 20)
- result_amount = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
- M.amount = 10
- M.loc = get_turf(holder.my_atom)
- return
-
- virus_food
- name = "Virus Food"
- id = "virusfood"
- result = "virusfood"
- required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1)
- result_amount = 3
-/*
- mix_virus
- name = "Mix Virus"
- id = "mixvirus"
- result = "blood"
- required_reagents = list("virusfood" = 5)
- required_catalysts = list("blood")
- var/level = 2
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Evolve(level - rand(0, 1))
-
-
- mix_virus_2
-
- name = "Mix Virus 2"
- id = "mixvirus2"
- required_reagents = list("mutagen" = 5)
- level = 4
-
- rem_virus
-
- name = "Devolve Virus"
- id = "remvirus"
- required_reagents = list("synaptizine" = 5)
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Devolve()
-*/
- condensedcapsaicin
- name = "Condensed Capsaicin"
- id = "condensedcapsaicin"
- result = "condensedcapsaicin"
- required_reagents = list("capsaicin" = 2)
- required_catalysts = list("plasma" = 5)
- result_amount = 1
-///////////////////////////////////////////////////////////////////////////////////
-
-// foam and foam precursor
-
- surfactant
- name = "Foam surfactant"
- id = "foam surfactant"
- result = "fluorosurfactant"
- required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
- result_amount = 5
- mix_message = "A head of foam results from the mixture's constant fizzing."
-
-
- foam
- name = "Foam"
- id = "foam"
- result = null
- required_reagents = list("fluorosurfactant" = 1, "water" = 1)
- result_amount = 2
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
-
- var/location = get_turf(holder.my_atom)
- for(var/mob/M in viewers(5, location))
- M << "\red The solution violently bubbles!"
-
- location = get_turf(holder.my_atom)
-
- for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out foam!"
-
- //world << "Holder volume is [holder.total_volume]"
- //for(var/datum/reagent/R in holder.reagent_list)
- // world << "[R.name] = [R.volume]"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 0)
- s.start()
- holder.clear_reagents()
- return
-
- metalfoam
- name = "Metal Foam"
- id = "metalfoam"
- result = null
- required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1)
- result_amount = 5
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
-
- var/location = get_turf(holder.my_atom)
-
- for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 1)
- s.start()
- return
-
- ironfoam
- name = "Iron Foam"
- id = "ironlfoam"
- result = null
- required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1)
- result_amount = 5
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
-
- var/location = get_turf(holder.my_atom)
-
- for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 2)
- s.start()
- return
-
- // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game!
- ammonia
- name = "Ammonia"
- id = "ammonia"
- result = "ammonia"
- required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
- result_amount = 3
- mix_message = "The mixture bubbles, emitting an acrid reek."
-
- diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- result = "diethylamine"
- required_reagents = list ("ammonia" = 1, "ethanol" = 1)
- result_amount = 2
- min_temp = 374
- mix_message = "A horrible smell pours forth from the mixture."
-
- space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- result = "cleaner"
- required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1)
- result_amount = 3
- mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!"
-
- sulfuric_acid
- name = "Sulfuric Acid"
- id = "sacid"
- result = "sacid"
- required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1)
- result_amount = 2
- mix_message = "The mixture gives off a sharp acidic tang."
-
-///////Changeling Blood Test/////////////
-/*
- changeling_test
- name = "Changeling blood test"
- id = "changelingblood"
- result = "blood"
- required_reagents = list("blood" = 5)
- required_catalysts = list("fuel")
- result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred.
- on_reaction(var/datum/reagents/holder, var/created_volume)
- if(!holder.reagent_list) //reagent_list is not null
- return
- var/datum/reagent/blood/B = locate() in holder.reagent_list
- if(!B) //B is not null
- return
- var/mob/living/carbon/human/H = B.data["donor"]
- if(!H) //H is not null.
- return
- if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling.
- for(var/mob/M in viewers(get_turf(holder.my_atom), null))
- M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2)
- else
- for(var/mob/M in viewers(get_turf(holder.my_atom), null))
- M.show_message( "The blood seems to break apart in the fuel.", 1)
- holder.del_reagent("blood")
- return
-*/
-
-/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
-
-//Grey
- slimespawn
- name = "Slime Spawn"
- id = "m_spawn"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
- var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
- S.loc = get_turf(holder.my_atom)
-
-
- slimeinaprov
- name = "Slime Epinephrine"
- id = "m_epinephrine"
- result = "epinephrine"
- required_reagents = list("water" = 5)
- result_amount = 3
- required_other = 1
- required_container = /obj/item/slime_extract/grey
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
-
-
- slimemonkey
- name = "Slime Monkey"
- id = "m_monkey"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/i = 1, i <= 3, i++)
- var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
- M.loc = get_turf(holder.my_atom)
-
-//Green
- slimemutate
- name = "Mutation Toxin"
- id = "mutationtoxin"
- result = "mutationtoxin"
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/green
-
-//Metal
- slimemetal
- name = "Slime Metal"
- id = "m_metal"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/metal
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
- M.amount = 15
- M.loc = get_turf(holder.my_atom)
- var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
- P.amount = 5
- P.loc = get_turf(holder.my_atom)
-
-//Gold
- slimecrit
- name = "Slime Crit"
- id = "m_tele"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/blocked = blocked_mobs //global variable of blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "slimesummon"
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
-// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
-
-
- slimecritlesser
- name = "Slime Crit Lesser"
- id = "m_tele3"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently!"), 1)
- spawn(50)
-
- if(holder && holder.my_atom)
-
- var/blocked = blocked_mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "neutral"
- C.loc = get_turf(holder.my_atom)
-
-//Silver
- slimebork
- name = "Slime Bork"
- id = "m_tele2"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/silver
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks)
- // BORK BORK BORK
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 4 + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
- slimedrinks
- name = "Slime Drinks"
- id = "m_tele3"
- result = null
- required_reagents = list("water" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/silver
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
- // BORK BORK BORK
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 4 + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
-
-
-//Blue
- slimefrost
- name = "Slime Frost Oil"
- id = "m_frostoil"
- result = "frostoil"
- required_reagents = list("plasma" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/blue
- required_other = 1
-//Dark Blue
- slimefreeze
- name = "Slime Freeze"
- id = "m_freeze"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/darkblue
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
- M.bodytemperature -= 140
- M << "\blue You feel a chill!"
-
-//Orange
- slimecasp
- name = "Slime Capsaicin Oil"
- id = "m_capsaicinoil"
- result = "capsaicin"
- required_reagents = list("blood" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/orange
- required_other = 1
-
- slimefire
- name = "Slime fire"
- id = "m_fire"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/orange
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- var/turf/simulated/T = get_turf(holder.my_atom)
- if(istype(T))
- T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
-
-//Yellow
- slimeoverload
- name = "Slime EMP"
- id = "m_emp"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- empulse(get_turf(holder.my_atom), 3, 7)
-
-
- slimecell
- name = "Slime Powercell"
- id = "m_cell"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
- P.loc = get_turf(holder.my_atom)
-
- slimeglow
- name = "Slime Glow"
- id = "m_glow"
- result = null
- required_reagents = list("water" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1)
- var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
- F.loc = get_turf(holder.my_atom)
-
-//Purple
-
- slimepsteroid
- name = "Slime Steroid"
- id = "m_steroid"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/purple
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
- P.loc = get_turf(holder.my_atom)
-
-
-
- slimejam
- name = "Slime Jam"
- id = "m_jam"
- result = "slimejelly"
- required_reagents = list("sugar" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/purple
- required_other = 1
-
-
-//Dark Purple
- slimeplasma
- name = "Slime Plasma"
- id = "m_plasma"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/darkpurple
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
- P.amount = 10
- P.loc = get_turf(holder.my_atom)
-
-//Red
- slimeglycerol
- name = "Slime Glycerol"
- id = "m_glycerol"
- result = "glycerol"
- required_reagents = list("plasma" = 5)
- result_amount = 8
- required_container = /obj/item/slime_extract/red
- required_other = 1
-
-
- slimebloodlust
- name = "Bloodlust"
- id = "m_bloodlust"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/red
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
- slime.rabid = 1
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The [slime] is driven into a frenzy!."), 1)
-
-//Pink
- slimeppotion
- name = "Slime Potion"
- id = "m_potion"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/pink
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
- P.loc = get_turf(holder.my_atom)
-
-
-//Black
- slimemutate2
- name = "Advanced Mutation Toxin"
- id = "mutationtoxin2"
- result = "amutationtoxin"
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/black
-
-//Oil
- slimeexplosion
- name = "Slime Explosion"
- id = "m_explosion"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/oil
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- explosion(get_turf(holder.my_atom), 1 ,3, 6)
-//Light Pink
- slimepotion2
- name = "Slime Potion 2"
- id = "m_potion2"
- result = null
- result_amount = 1
- required_container = /obj/item/slime_extract/lightpink
- required_reagents = list("plasma" = 5)
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
- P.loc = get_turf(holder.my_atom)
-//Adamantine
- slimegolem
- name = "Slime Golem"
- id = "m_golem"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/adamantine
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe
- Z.loc = get_turf(holder.my_atom)
- Z.announce_to_ghosts()
-//Bluespace
- slimecrystal
- name = "Slime Crystal"
- id = "m_crystal"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/bluespace
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- if(holder.my_atom)
- var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
- BC.visible_message("The [BC.name] appears out of thin air!")
-//Cerulean
- slimepsteroid2
- name = "Slime Steroid 2"
- id = "m_steroid2"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/cerulean
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
- P.loc = get_turf(holder.my_atom)
-//Sepia
- slimecamera
- name = "Slime Camera"
- id = "m_camera"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/sepia
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/device/camera/P = new /obj/item/device/camera
- P.loc = get_turf(holder.my_atom)
-
-
- slimefilm
- name = "Slime Film"
- id = "m_film"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/sepia
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
- P.loc = get_turf(holder.my_atom)
-//Pyrite
- slimepaint
- name = "Slime Paint"
- id = "s_paint"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/pyrite
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint)
- var/chosen = pick(paints)
- var/obj/P = new chosen
- if(P)
- P.loc = get_turf(holder.my_atom)
-
-
-//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
-
- tofu
- name = "Tofu"
- id = "tofu"
- result = null
- required_reagents = list("soymilk" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
- return
-
- chocolate_bar
- name = "Chocolate Bar"
- id = "chocolate_bar"
- result = null
- required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
- return
-
- chocolate_bar2
- name = "Chocolate Bar"
- id = "chocolate_bar"
- result = null
- required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
- return
-
- hot_coco
- name = "Hot Coco"
- id = "hot_coco"
- result = "hot_coco"
- required_reagents = list("water" = 5, "coco" = 1)
- result_amount = 5
-
- chocolate_milk
- name = "Chocolate Milk"
- id = "chocolate_milk"
- result = "chocolate_milk"
- required_reagents = list("chocolate" = 1, "milk" = 1)
- result_amount = 2
- mix_message = "The mixture turns a nice brown color."
-
- coffee
- name = "Coffee"
- id = "coffee"
- result = "coffee"
- required_reagents = list("coffeepowder" = 1, "water" = 5)
- result_amount = 5
-
- tea
- name = "Tea"
- id = "tea"
- result = "tea"
- required_reagents = list("teapowder" = 1, "water" = 5)
- result_amount = 5
-
- soysauce
- name = "Soy Sauce"
- id = "soysauce"
- result = "soysauce"
- required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3)
- result_amount = 7
-
- cheesewheel
- name = "Cheesewheel"
- id = "cheesewheel"
- result = null
- required_reagents = list("milk" = 40)
- required_catalysts = list("enzyme" = 5)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
- return
-
- syntiflesh
- name = "Syntiflesh"
- id = "syntiflesh"
- result = null
- required_reagents = list("blood" = 5, "cryoxadone" = 1)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
- return
-
- hot_ramen
- name = "Hot Ramen"
- id = "hot_ramen"
- result = "hot_ramen"
- required_reagents = list("water" = 1, "dry_ramen" = 3)
- result_amount = 3
-
- hell_ramen
- name = "Hell Ramen"
- id = "hell_ramen"
- result = "hell_ramen"
- required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
- result_amount = 6
-
- doughball
- name = "Ball of dough"
- id = "dough_ball"
- result = "dough_ball"
- required_reagents = list("flour" = 15, "water" = 5)
- required_catalysts = list("enzyme" = 5)
-
-
-////////////////////////////////////////// COCKTAILS //////////////////////////////////////
-
-
- goldschlager
- name = "Goldschlager"
- id = "goldschlager"
- result = "goldschlager"
- required_reagents = list("vodka" = 10, "gold" = 1)
- result_amount = 10
-
- patron
- name = "Patron"
- id = "patron"
- result = "patron"
- required_reagents = list("tequilla" = 10, "silver" = 1)
- result_amount = 10
-
- bilk
- name = "Bilk"
- id = "bilk"
- result = "bilk"
- required_reagents = list("milk" = 1, "beer" = 1)
- result_amount = 2
-
- icetea
- name = "Iced Tea"
- id = "icetea"
- result = "icetea"
- required_reagents = list("ice" = 1, "tea" = 3)
- result_amount = 4
-
- icecoffee
- name = "Iced Coffee"
- id = "icecoffee"
- result = "icecoffee"
- required_reagents = list("ice" = 1, "coffee" = 3)
- result_amount = 4
-
- nuka_cola
- name = "Nuka Cola"
- id = "nuka_cola"
- result = "nuka_cola"
- required_reagents = list("uranium" = 1, "cola" = 6)
- result_amount = 6
-
- moonshine
- name = "Moonshine"
- id = "moonshine"
- result = "moonshine"
- required_reagents = list("nutriment" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- wine
- name = "Wine"
- id = "wine"
- result = "wine"
- required_reagents = list("berryjuice" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- spacebeer
- name = "Space Beer"
- id = "spacebeer"
- result = "beer"
- required_reagents = list("cornoil" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- vodka
- name = "Vodka"
- id = "vodka"
- result = "vodka"
- required_reagents = list("potato" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
- sake
- name = "Sake"
- id = "sake"
- result = "sake"
- required_reagents = list("rice" = 10,"water" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 15
-
- kahlua
- name = "Kahlua"
- id = "kahlua"
- result = "kahlua"
- required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 5
-
- kahluaVodka
- name = "KahluaVodka"
- id = "kahlauVodka"
- result = "kahlua"
- required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 5
- gin_tonic
- name = "Gin and Tonic"
- id = "gintonic"
- result = "gintonic"
- required_reagents = list("gin" = 2, "tonic" = 1)
- result_amount = 3
- mix_message = "The tonic water and gin mix together perfectly."
-
- cuba_libre
- name = "Cuba Libre"
- id = "cubalibre"
- result = "cubalibre"
- required_reagents = list("rum" = 2, "cola" = 1)
- result_amount = 3
-
- mojito
- name = "Mojito"
- id = "mojito"
- result = "mojito"
- required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1)
- result_amount = 4
-
- martini
- name = "Classic Martini"
- id = "martini"
- result = "martini"
- required_reagents = list("gin" = 2, "vermouth" = 1)
- result_amount = 3
-
- vodkamartini
- name = "Vodka Martini"
- id = "vodkamartini"
- result = "vodkamartini"
- required_reagents = list("vodka" = 2, "vermouth" = 1)
- result_amount = 3
-
- white_russian
- name = "White Russian"
- id = "whiterussian"
- result = "whiterussian"
- required_reagents = list("blackrussian" = 3, "cream" = 2)
- result_amount = 5
-
- whiskey_cola
- name = "Whiskey Cola"
- id = "whiskeycola"
- result = "whiskeycola"
- required_reagents = list("whiskey" = 2, "cola" = 1)
- result_amount = 3
-
- screwdriver
- name = "Screwdriver"
- id = "screwdrivercocktail"
- result = "screwdrivercocktail"
- required_reagents = list("vodka" = 2, "orangejuice" = 1)
- result_amount = 3
-
- bloody_mary
- name = "Bloody Mary"
- id = "bloodymary"
- result = "bloodymary"
- required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1)
- result_amount = 4
-
- gargle_blaster
- name = "Pan-Galactic Gargle Blaster"
- id = "gargleblaster"
- result = "gargleblaster"
- required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
- result_amount = 5
-
- brave_bull
- name = "Brave Bull"
- id = "bravebull"
- result = "bravebull"
- required_reagents = list("tequilla" = 2, "kahlua" = 1)
- result_amount = 3
-
- tequilla_sunrise
- name = "Tequilla Sunrise"
- id = "tequillasunrise"
- result = "tequillasunrise"
- required_reagents = list("tequilla" = 2, "orangejuice" = 1)
- result_amount = 3
-
- toxins_special
- name = "Toxins Special"
- id = "toxinsspecial"
- result = "toxinsspecial"
- required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2)
- result_amount = 5
-
- beepsky_smash
- name = "Beepksy Smash"
- id = "beepksysmash"
- result = "beepskysmash"
- required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
- result_amount = 4
-
- doctor_delight
- name = "The Doctor's Delight"
- id = "doctordelight"
- result = "doctorsdelight"
- required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
- result_amount = 5
-
- irish_cream
- name = "Irish Cream"
- id = "irishcream"
- result = "irishcream"
- required_reagents = list("whiskey" = 2, "cream" = 1)
- result_amount = 3
-
- manly_dorf
- name = "The Manly Dorf"
- id = "manlydorf"
- result = "manlydorf"
- required_reagents = list ("beer" = 1, "ale" = 2)
- result_amount = 3
-
- suicider
- name = "Suicider"
- id = "suicider"
- result = "suicider"
- required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
- result_amount = 4
- mix_message = "The drinks and chemicals mix together, emitting a potent smell."
-
- irish_coffee
- name = "Irish Coffee"
- id = "irishcoffee"
- result = "irishcoffee"
- required_reagents = list("irishcream" = 1, "coffee" = 1)
- result_amount = 2
-
- b52
- name = "B-52"
- id = "b52"
- result = "b52"
- required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
- result_amount = 3
-
- atomicbomb
- name = "Atomic Bomb"
- id = "atomicbomb"
- result = "atomicbomb"
- required_reagents = list("b52" = 10, "uranium" = 1)
- result_amount = 10
-
- margarita
- name = "Margarita"
- id = "margarita"
- result = "margarita"
- required_reagents = list("tequilla" = 2, "limejuice" = 1)
- result_amount = 3
-
- longislandicedtea
- name = "Long Island Iced Tea"
- id = "longislandicedtea"
- result = "longislandicedtea"
- required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1)
- result_amount = 4
-
- threemileisland
- name = "Three Mile Island Iced Tea"
- id = "threemileisland"
- result = "threemileisland"
- required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
- result_amount = 10
-
- whiskeysoda
- name = "Whiskey Soda"
- id = "whiskeysoda"
- result = "whiskeysoda"
- required_reagents = list("whiskey" = 2, "sodawater" = 1)
- result_amount = 3
-
- black_russian
- name = "Black Russian"
- id = "blackrussian"
- result = "blackrussian"
- required_reagents = list("vodka" = 3, "kahlua" = 2)
- result_amount = 5
-
- manhattan
- name = "Manhattan"
- id = "manhattan"
- result = "manhattan"
- required_reagents = list("whiskey" = 2, "vermouth" = 1)
- result_amount = 3
-
- manhattan_proj
- name = "Manhattan Project"
- id = "manhattan_proj"
- result = "manhattan_proj"
- required_reagents = list("manhattan" = 10, "uranium" = 1)
- result_amount = 10
-
- vodka_tonic
- name = "Vodka and Tonic"
- id = "vodkatonic"
- result = "vodkatonic"
- required_reagents = list("vodka" = 2, "tonic" = 1)
- result_amount = 3
-
- gin_fizz
- name = "Gin Fizz"
- id = "ginfizz"
- result = "ginfizz"
- required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1)
- result_amount = 4
-
- bahama_mama
- name = "Bahama mama"
- id = "bahama_mama"
- result = "bahama_mama"
- required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1)
- result_amount = 6
-
- singulo
- name = "Singulo"
- id = "singulo"
- result = "singulo"
- required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
- result_amount = 10
-
- alliescocktail
- name = "Allies Cocktail"
- id = "alliescocktail"
- result = "alliescocktail"
- required_reagents = list("martini" = 1, "vodka" = 1)
- result_amount = 2
-
- demonsblood
- name = "Demons Blood"
- id = "demonsblood"
- result = "demonsblood"
- required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
- result_amount = 4
-
- booger
- name = "Booger"
- id = "booger"
- result = "booger"
- required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
- result_amount = 4
-
- antifreeze
- name = "Anti-freeze"
- id = "antifreeze"
- result = "antifreeze"
- required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1)
- result_amount = 4
-
- barefoot
- name = "Barefoot"
- id = "barefoot"
- result = "barefoot"
- required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
- result_amount = 3
-
-
-////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
-
- sbiten
- name = "Sbiten"
- id = "sbiten"
- result = "sbiten"
- required_reagents = list("vodka" = 10, "capsaicin" = 1)
- result_amount = 10
-
- red_mead
- name = "Red Mead"
- id = "red_mead"
- result = "red_mead"
- required_reagents = list("blood" = 1, "mead" = 1)
- result_amount = 2
-
- mead
- name = "Mead"
- id = "mead"
- result = "mead"
- required_reagents = list("sugar" = 1, "water" = 1)
- required_catalysts = list("enzyme" = 5)
- result_amount = 2
-
- iced_beer
- name = "Iced Beer"
- id = "iced_beer"
- result = "iced_beer"
- required_reagents = list("beer" = 10, "frostoil" = 1)
- result_amount = 10
-
- iced_beer2
- name = "Iced Beer"
- id = "iced_beer"
- result = "iced_beer"
- required_reagents = list("beer" = 5, "ice" = 1)
- result_amount = 6
-
- grog
- name = "Grog"
- id = "grog"
- result = "grog"
- required_reagents = list("rum" = 1, "water" = 1)
- result_amount = 2
-
- soy_latte
- name = "Soy Latte"
- id = "soy_latte"
- result = "soy_latte"
- required_reagents = list("coffee" = 1, "soymilk" = 1)
- result_amount = 2
-
- cafe_latte
- name = "Cafe Latte"
- id = "cafe_latte"
- result = "cafe_latte"
- required_reagents = list("coffee" = 1, "milk" = 1)
- result_amount = 2
-
- acidspit
- name = "Acid Spit"
- id = "acidspit"
- result = "acidspit"
- required_reagents = list("sacid" = 1, "wine" = 5)
- result_amount = 6
-
- amasec
- name = "Amasec"
- id = "amasec"
- result = "amasec"
- required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
- result_amount = 10
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- result = "changelingsting"
- required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
- result_amount = 5
-
- aloe
- name = "Aloe"
- id = "aloe"
- result = "aloe"
- required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
- result_amount = 2
-
- andalusia
- name = "Andalusia"
- id = "andalusia"
- result = "andalusia"
- required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
- result_amount = 3
-
- neurotoxin
- name = "Neurotoxin"
- id = "neurotoxin"
- result = "neurotoxin"
- required_reagents = list("gargleblaster" = 1, "ether" = 1)
- result_amount = 2
-
- snowwhite
- name = "Snow White"
- id = "snowwhite"
- result = "snowwhite"
- required_reagents = list("beer" = 1, "lemon_lime" = 1)
- result_amount = 2
-
- irishcarbomb
- name = "Irish Car Bomb"
- id = "irishcarbomb"
- result = "irishcarbomb"
- required_reagents = list("ale" = 1, "irishcream" = 1)
- result_amount = 2
-
- syndicatebomb
- name = "Syndicate Bomb"
- id = "syndicatebomb"
- result = "syndicatebomb"
- required_reagents = list("beer" = 1, "whiskeycola" = 1)
- result_amount = 2
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- result = "erikasurprise"
- required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
- result_amount = 5
-
- devilskiss
- name = "Devils Kiss"
- id = "devilskiss"
- result = "devilskiss"
- required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
- result_amount = 3
-
- hippiesdelight
- name = "Hippies Delight"
- id = "hippiesdelight"
- result = "hippiesdelight"
- required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
- result_amount = 2
-
- bananahonk
- name = "Banana Honk"
- id = "bananahonk"
- result = "bananahonk"
- required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
- result_amount = 3
-
- silencer
- name = "Silencer"
- id = "silencer"
- result = "silencer"
- required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
- result_amount = 3
-
- driestmartini
- name = "Driest Martini"
- id = "driestmartini"
- result = "driestmartini"
- required_reagents = list("nothing" = 1, "gin" = 1)
- result_amount = 2
-
- lemonade
- name = "Lemonade"
- id = "lemonade"
- result = "lemonade"
- required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
- result_amount = 3
-
- kiraspecial
- name = "Kira Special"
- id = "kiraspecial"
- result = "kiraspecial"
- required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
- result_amount = 2
-
- brownstar
- name = "Brown Star"
- id = "brownstar"
- result = "brownstar"
- required_reagents = list("orangejuice" = 2, "cola" = 1)
- result_amount = 2
-
- milkshake
- name = "Milkshake"
- id = "milkshake"
- result = "milkshake"
- required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
- result_amount = 5
-
- rewriter
- name = "Rewriter"
- id = "rewriter"
- result = "rewriter"
- required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
- result_amount = 2
diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm
index e7e1e0e2a7e..48c467fed02 100644
--- a/code/modules/reagents/grenade_launcher.dm
+++ b/code/modules/reagents/grenade_launcher.dm
@@ -15,59 +15,59 @@
var/ammo_type = /obj/item/weapon/grenade
var/unloaded
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\icon [name]:"
- usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
+/obj/item/weapon/gun/grenadelauncher/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\icon [name]:"
+ usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
- attackby(obj/item/I as obj, mob/user as mob, params)
+/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params)
- if((istype(I, ammo_type)))
- if(grenades.len < max_grenades)
- user.drop_item()
- I.loc = src
- grenades += I
- user << "\blue You put the [ammo_name] in the [name]."
- user << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
- else
- usr << "\red The grenade launcher cannot hold more [ammo_name]s."
-
- afterattack(obj/target, mob/user , flag)
-
- if (istype(target, /obj/item/weapon/storage/backpack ))
- return
-
- else if (locate (/obj/structure/table, src.loc))
- return
-
- else if(target == user)
- return
-
- if(grenades.len)
- spawn(0) fire_grenade(target,user)
+ if((istype(I, ammo_type)))
+ if(grenades.len < max_grenades)
+ user.drop_item()
+ I.loc = src
+ grenades += I
+ user << "\blue You put the [ammo_name] in the [name]."
+ user << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
else
- usr << "\red The [name] is empty."
+ usr << "\red The grenade launcher cannot hold more [ammo_name]s."
+
+/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag)
+
+ if (istype(target, /obj/item/weapon/storage/backpack ))
+ return
+
+ else if (locate (/obj/structure/table, src.loc))
+ return
+
+ else if(target == user)
+ return
+
+ if(grenades.len)
+ spawn(0) fire_grenade(target,user)
+ else
+ usr << "\red The [name] is empty."
+
+/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user)
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] fired a [ammo_name]!", user), 1)
+ user << "\red You fire the [name]!"
+ var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
+ grenades -= F
+ F.loc = user.loc
+ F.throw_at(target, 30, 2, user)
+ message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).")
+ log_game("[key_name_admin(user)] used a [ammo_name] ([name]).")
+ F.active = 1
+ F.icon_state = initial(icon_state) + "_active"
+ playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
+ spawn(15)
+ F.prime()
- proc
- fire_grenade(atom/target, mob/user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] fired a [ammo_name]!", user), 1)
- user << "\red You fire the [name]!"
- var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2, user)
- message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).")
- log_game("[key_name_admin(user)] used a [ammo_name] ([name]).")
- F.active = 1
- F.icon_state = initial(icon_state) + "_active"
- playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
/obj/item/weapon/gun/grenadelauncher/piecannon
name = "pie cannon"
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index ea2675034e7..a54072e9bbb 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -825,6 +825,35 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob)
..()
return
+/datum/reagent/medicine/stimulative_agent
+ name = "Stimulative Agent"
+ id = "stimulative_agent"
+ description = "An illegal compound that dramatically enhances the body's performance and healing capabilities."
+ color = "#C8A5DC"
+ metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ overdose_threshold = 60
+
+/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M)
+ M.status_flags |= GOTTAGOFAST
+ if(M.health < 50 && M.health > 0)
+ M.adjustOxyLoss(-1*REM)
+ M.adjustToxLoss(-1*REM)
+ M.adjustBruteLoss(-1*REM)
+ M.adjustFireLoss(-1*REM)
+ M.AdjustParalysis(-3)
+ M.AdjustStunned(-3)
+ M.AdjustWeakened(-3)
+ M.adjustStaminaLoss(-5*REM)
+ ..()
+
+/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M)
+ if(prob(33))
+ M.adjustStaminaLoss(2.5*REM)
+ M.adjustToxLoss(1*REM)
+ M.losebreath++
+ ..()
+ return
+
datum/reagent/insulin
name = "Insulin"
id = "insulin"
diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm
index 5c87c0f0044..b2d6edc0995 100644
--- a/code/modules/reagents/newchem/newchem_procs.dm
+++ b/code/modules/reagents/newchem/newchem_procs.dm
@@ -96,7 +96,7 @@ datum/reagents/proc/check_ignoreslow(var/mob/M)
datum/reagents/proc/check_gofast(var/mob/M)
if(istype(M, /mob))
- if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola"))
+ if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulative_agent"))
return 1
else
M.status_flags &= ~GOTTAGOFAST
diff --git a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm
new file mode 100644
index 00000000000..6b5656c8dc5
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////////
+/datum/chemical_reaction
+ var/name = null
+ var/id = null
+ var/result = null
+ var/list/required_reagents = list()
+ var/list/required_catalysts = list()
+
+ // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
+ var/atom/required_container = null // the container required for the reaction to happen
+ var/required_other = 0 // an integer required for the reaction to happen
+
+ var/result_amount = 0
+ var/secondary = 0 // set to nonzero if secondary reaction
+ var/list/secondary_results = list() //additional reagents produced by the reaction
+ var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement
+ var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this).
+ var/mix_message = "The solution begins to bubble."
+ var/mix_sound = 'sound/effects/bubbles.ogg'
+ var/no_message = 0
+
+/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm
new file mode 100644
index 00000000000..d56cdcf5644
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm
@@ -0,0 +1,590 @@
+/datum/chemical_reaction/
+
+ hot_coco
+ name = "Hot Coco"
+ id = "hot_coco"
+ result = "hot_coco"
+ required_reagents = list("water" = 5, "coco" = 1)
+ result_amount = 5
+
+ chocolate_milk
+ name = "Chocolate Milk"
+ id = "chocolate_milk"
+ result = "chocolate_milk"
+ required_reagents = list("chocolate" = 1, "milk" = 1)
+ result_amount = 2
+ mix_message = "The mixture turns a nice brown color."
+
+ coffee
+ name = "Coffee"
+ id = "coffee"
+ result = "coffee"
+ required_reagents = list("coffeepowder" = 1, "water" = 5)
+ result_amount = 5
+
+ tea
+ name = "Tea"
+ id = "tea"
+ result = "tea"
+ required_reagents = list("teapowder" = 1, "water" = 5)
+ result_amount = 5
+
+
+
+
+ goldschlager
+ name = "Goldschlager"
+ id = "goldschlager"
+ result = "goldschlager"
+ required_reagents = list("vodka" = 10, "gold" = 1)
+ result_amount = 10
+
+ patron
+ name = "Patron"
+ id = "patron"
+ result = "patron"
+ required_reagents = list("tequilla" = 10, "silver" = 1)
+ result_amount = 10
+
+ bilk
+ name = "Bilk"
+ id = "bilk"
+ result = "bilk"
+ required_reagents = list("milk" = 1, "beer" = 1)
+ result_amount = 2
+
+ icetea
+ name = "Iced Tea"
+ id = "icetea"
+ result = "icetea"
+ required_reagents = list("ice" = 1, "tea" = 3)
+ result_amount = 4
+
+ icecoffee
+ name = "Iced Coffee"
+ id = "icecoffee"
+ result = "icecoffee"
+ required_reagents = list("ice" = 1, "coffee" = 3)
+ result_amount = 4
+
+ nuka_cola
+ name = "Nuka Cola"
+ id = "nuka_cola"
+ result = "nuka_cola"
+ required_reagents = list("uranium" = 1, "cola" = 6)
+ result_amount = 6
+
+ moonshine
+ name = "Moonshine"
+ id = "moonshine"
+ result = "moonshine"
+ required_reagents = list("nutriment" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ wine
+ name = "Wine"
+ id = "wine"
+ result = "wine"
+ required_reagents = list("berryjuice" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ spacebeer
+ name = "Space Beer"
+ id = "spacebeer"
+ result = "beer"
+ required_reagents = list("cornoil" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ vodka
+ name = "Vodka"
+ id = "vodka"
+ result = "vodka"
+ required_reagents = list("potato" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+ sake
+ name = "Sake"
+ id = "sake"
+ result = "sake"
+ required_reagents = list("rice" = 10,"water" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 15
+
+ kahlua
+ name = "Kahlua"
+ id = "kahlua"
+ result = "kahlua"
+ required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 5
+
+ kahluaVodka
+ name = "KahluaVodka"
+ id = "kahlauVodka"
+ result = "kahlua"
+ required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 5
+ gin_tonic
+ name = "Gin and Tonic"
+ id = "gintonic"
+ result = "gintonic"
+ required_reagents = list("gin" = 2, "tonic" = 1)
+ result_amount = 3
+ mix_message = "The tonic water and gin mix together perfectly."
+
+ cuba_libre
+ name = "Cuba Libre"
+ id = "cubalibre"
+ result = "cubalibre"
+ required_reagents = list("rum" = 2, "cola" = 1)
+ result_amount = 3
+
+ mojito
+ name = "Mojito"
+ id = "mojito"
+ result = "mojito"
+ required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1)
+ result_amount = 4
+
+ martini
+ name = "Classic Martini"
+ id = "martini"
+ result = "martini"
+ required_reagents = list("gin" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ vodkamartini
+ name = "Vodka Martini"
+ id = "vodkamartini"
+ result = "vodkamartini"
+ required_reagents = list("vodka" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ white_russian
+ name = "White Russian"
+ id = "whiterussian"
+ result = "whiterussian"
+ required_reagents = list("blackrussian" = 3, "cream" = 2)
+ result_amount = 5
+
+ whiskey_cola
+ name = "Whiskey Cola"
+ id = "whiskeycola"
+ result = "whiskeycola"
+ required_reagents = list("whiskey" = 2, "cola" = 1)
+ result_amount = 3
+
+ screwdriver
+ name = "Screwdriver"
+ id = "screwdrivercocktail"
+ result = "screwdrivercocktail"
+ required_reagents = list("vodka" = 2, "orangejuice" = 1)
+ result_amount = 3
+
+ bloody_mary
+ name = "Bloody Mary"
+ id = "bloodymary"
+ result = "bloodymary"
+ required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1)
+ result_amount = 4
+
+ gargle_blaster
+ name = "Pan-Galactic Gargle Blaster"
+ id = "gargleblaster"
+ result = "gargleblaster"
+ required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
+ result_amount = 5
+
+ brave_bull
+ name = "Brave Bull"
+ id = "bravebull"
+ result = "bravebull"
+ required_reagents = list("tequilla" = 2, "kahlua" = 1)
+ result_amount = 3
+
+ tequilla_sunrise
+ name = "Tequilla Sunrise"
+ id = "tequillasunrise"
+ result = "tequillasunrise"
+ required_reagents = list("tequilla" = 2, "orangejuice" = 1)
+ result_amount = 3
+
+ toxins_special
+ name = "Toxins Special"
+ id = "toxinsspecial"
+ result = "toxinsspecial"
+ required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2)
+ result_amount = 5
+
+ beepsky_smash
+ name = "Beepksy Smash"
+ id = "beepksysmash"
+ result = "beepskysmash"
+ required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
+ result_amount = 4
+
+ doctor_delight
+ name = "The Doctor's Delight"
+ id = "doctordelight"
+ result = "doctorsdelight"
+ required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
+ result_amount = 5
+
+ irish_cream
+ name = "Irish Cream"
+ id = "irishcream"
+ result = "irishcream"
+ required_reagents = list("whiskey" = 2, "cream" = 1)
+ result_amount = 3
+
+ manly_dorf
+ name = "The Manly Dorf"
+ id = "manlydorf"
+ result = "manlydorf"
+ required_reagents = list ("beer" = 1, "ale" = 2)
+ result_amount = 3
+
+ suicider
+ name = "Suicider"
+ id = "suicider"
+ result = "suicider"
+ required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
+ result_amount = 4
+ mix_message = "The drinks and chemicals mix together, emitting a potent smell."
+
+ irish_coffee
+ name = "Irish Coffee"
+ id = "irishcoffee"
+ result = "irishcoffee"
+ required_reagents = list("irishcream" = 1, "coffee" = 1)
+ result_amount = 2
+
+ b52
+ name = "B-52"
+ id = "b52"
+ result = "b52"
+ required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
+ result_amount = 3
+
+ atomicbomb
+ name = "Atomic Bomb"
+ id = "atomicbomb"
+ result = "atomicbomb"
+ required_reagents = list("b52" = 10, "uranium" = 1)
+ result_amount = 10
+
+ margarita
+ name = "Margarita"
+ id = "margarita"
+ result = "margarita"
+ required_reagents = list("tequilla" = 2, "limejuice" = 1)
+ result_amount = 3
+
+ longislandicedtea
+ name = "Long Island Iced Tea"
+ id = "longislandicedtea"
+ result = "longislandicedtea"
+ required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1)
+ result_amount = 4
+
+ threemileisland
+ name = "Three Mile Island Iced Tea"
+ id = "threemileisland"
+ result = "threemileisland"
+ required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
+ result_amount = 10
+
+ whiskeysoda
+ name = "Whiskey Soda"
+ id = "whiskeysoda"
+ result = "whiskeysoda"
+ required_reagents = list("whiskey" = 2, "sodawater" = 1)
+ result_amount = 3
+
+ black_russian
+ name = "Black Russian"
+ id = "blackrussian"
+ result = "blackrussian"
+ required_reagents = list("vodka" = 3, "kahlua" = 2)
+ result_amount = 5
+
+ manhattan
+ name = "Manhattan"
+ id = "manhattan"
+ result = "manhattan"
+ required_reagents = list("whiskey" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ manhattan_proj
+ name = "Manhattan Project"
+ id = "manhattan_proj"
+ result = "manhattan_proj"
+ required_reagents = list("manhattan" = 10, "uranium" = 1)
+ result_amount = 10
+
+ vodka_tonic
+ name = "Vodka and Tonic"
+ id = "vodkatonic"
+ result = "vodkatonic"
+ required_reagents = list("vodka" = 2, "tonic" = 1)
+ result_amount = 3
+
+ gin_fizz
+ name = "Gin Fizz"
+ id = "ginfizz"
+ result = "ginfizz"
+ required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1)
+ result_amount = 4
+
+ bahama_mama
+ name = "Bahama mama"
+ id = "bahama_mama"
+ result = "bahama_mama"
+ required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1)
+ result_amount = 6
+
+ singulo
+ name = "Singulo"
+ id = "singulo"
+ result = "singulo"
+ required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
+ result_amount = 10
+
+ alliescocktail
+ name = "Allies Cocktail"
+ id = "alliescocktail"
+ result = "alliescocktail"
+ required_reagents = list("martini" = 1, "vodka" = 1)
+ result_amount = 2
+
+ demonsblood
+ name = "Demons Blood"
+ id = "demonsblood"
+ result = "demonsblood"
+ required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
+ result_amount = 4
+
+ booger
+ name = "Booger"
+ id = "booger"
+ result = "booger"
+ required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
+ result_amount = 4
+
+ antifreeze
+ name = "Anti-freeze"
+ id = "antifreeze"
+ result = "antifreeze"
+ required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1)
+ result_amount = 4
+
+ barefoot
+ name = "Barefoot"
+ id = "barefoot"
+ result = "barefoot"
+ required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
+ result_amount = 3
+
+
+////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
+
+ sbiten
+ name = "Sbiten"
+ id = "sbiten"
+ result = "sbiten"
+ required_reagents = list("vodka" = 10, "capsaicin" = 1)
+ result_amount = 10
+
+ red_mead
+ name = "Red Mead"
+ id = "red_mead"
+ result = "red_mead"
+ required_reagents = list("blood" = 1, "mead" = 1)
+ result_amount = 2
+
+ mead
+ name = "Mead"
+ id = "mead"
+ result = "mead"
+ required_reagents = list("sugar" = 1, "water" = 1)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 2
+
+ iced_beer
+ name = "Iced Beer"
+ id = "iced_beer"
+ result = "iced_beer"
+ required_reagents = list("beer" = 10, "frostoil" = 1)
+ result_amount = 10
+
+ iced_beer2
+ name = "Iced Beer"
+ id = "iced_beer"
+ result = "iced_beer"
+ required_reagents = list("beer" = 5, "ice" = 1)
+ result_amount = 6
+
+ grog
+ name = "Grog"
+ id = "grog"
+ result = "grog"
+ required_reagents = list("rum" = 1, "water" = 1)
+ result_amount = 2
+
+ soy_latte
+ name = "Soy Latte"
+ id = "soy_latte"
+ result = "soy_latte"
+ required_reagents = list("coffee" = 1, "soymilk" = 1)
+ result_amount = 2
+
+ cafe_latte
+ name = "Cafe Latte"
+ id = "cafe_latte"
+ result = "cafe_latte"
+ required_reagents = list("coffee" = 1, "milk" = 1)
+ result_amount = 2
+
+ acidspit
+ name = "Acid Spit"
+ id = "acidspit"
+ result = "acidspit"
+ required_reagents = list("sacid" = 1, "wine" = 5)
+ result_amount = 6
+
+ amasec
+ name = "Amasec"
+ id = "amasec"
+ result = "amasec"
+ required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
+ result_amount = 10
+
+ changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ result = "changelingsting"
+ required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
+ result_amount = 5
+
+ aloe
+ name = "Aloe"
+ id = "aloe"
+ result = "aloe"
+ required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
+ result_amount = 2
+
+ andalusia
+ name = "Andalusia"
+ id = "andalusia"
+ result = "andalusia"
+ required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
+ result_amount = 3
+
+ neurotoxin
+ name = "Neurotoxin"
+ id = "neurotoxin"
+ result = "neurotoxin"
+ required_reagents = list("gargleblaster" = 1, "ether" = 1)
+ result_amount = 2
+
+ snowwhite
+ name = "Snow White"
+ id = "snowwhite"
+ result = "snowwhite"
+ required_reagents = list("beer" = 1, "lemon_lime" = 1)
+ result_amount = 2
+
+ irishcarbomb
+ name = "Irish Car Bomb"
+ id = "irishcarbomb"
+ result = "irishcarbomb"
+ required_reagents = list("ale" = 1, "irishcream" = 1)
+ result_amount = 2
+
+ syndicatebomb
+ name = "Syndicate Bomb"
+ id = "syndicatebomb"
+ result = "syndicatebomb"
+ required_reagents = list("beer" = 1, "whiskeycola" = 1)
+ result_amount = 2
+
+ erikasurprise
+ name = "Erika Surprise"
+ id = "erikasurprise"
+ result = "erikasurprise"
+ required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
+ result_amount = 5
+
+ devilskiss
+ name = "Devils Kiss"
+ id = "devilskiss"
+ result = "devilskiss"
+ required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
+ result_amount = 3
+
+ hippiesdelight
+ name = "Hippies Delight"
+ id = "hippiesdelight"
+ result = "hippiesdelight"
+ required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
+ result_amount = 2
+
+ bananahonk
+ name = "Banana Honk"
+ id = "bananahonk"
+ result = "bananahonk"
+ required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
+ result_amount = 3
+
+ silencer
+ name = "Silencer"
+ id = "silencer"
+ result = "silencer"
+ required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
+ result_amount = 3
+
+ driestmartini
+ name = "Driest Martini"
+ id = "driestmartini"
+ result = "driestmartini"
+ required_reagents = list("nothing" = 1, "gin" = 1)
+ result_amount = 2
+
+ lemonade
+ name = "Lemonade"
+ id = "lemonade"
+ result = "lemonade"
+ required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
+ result_amount = 3
+
+ kiraspecial
+ name = "Kira Special"
+ id = "kiraspecial"
+ result = "kiraspecial"
+ required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
+ result_amount = 2
+
+ brownstar
+ name = "Brown Star"
+ id = "brownstar"
+ result = "brownstar"
+ required_reagents = list("orangejuice" = 2, "cola" = 1)
+ result_amount = 2
+
+ milkshake
+ name = "Milkshake"
+ id = "milkshake"
+ result = "milkshake"
+ required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
+ result_amount = 5
+
+ rewriter
+ name = "Rewriter"
+ id = "rewriter"
+ result = "rewriter"
+ required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
+ result_amount = 2
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm
new file mode 100644
index 00000000000..146dc1da95c
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm
@@ -0,0 +1,108 @@
+/datum/chemical_reaction/
+
+ tofu
+ name = "Tofu"
+ id = "tofu"
+ result = null
+ required_reagents = list("soymilk" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
+ return
+
+ chocolate_bar
+ name = "Chocolate Bar"
+ id = "chocolate_bar"
+ result = null
+ required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
+ return
+
+ chocolate_bar2
+ name = "Chocolate Bar"
+ id = "chocolate_bar"
+ result = null
+ required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
+ return
+
+
+ soysauce
+ name = "Soy Sauce"
+ id = "soysauce"
+ result = "soysauce"
+ required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3)
+ result_amount = 7
+
+ cheesewheel
+ name = "Cheesewheel"
+ id = "cheesewheel"
+ result = null
+ required_reagents = list("milk" = 40)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
+ return
+
+ syntiflesh
+ name = "Syntiflesh"
+ id = "syntiflesh"
+ result = null
+ required_reagents = list("blood" = 5, "cryoxadone" = 1)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
+ return
+
+ hot_ramen
+ name = "Hot Ramen"
+ id = "hot_ramen"
+ result = "hot_ramen"
+ required_reagents = list("water" = 1, "dry_ramen" = 3)
+ result_amount = 3
+
+ hell_ramen
+ name = "Hell Ramen"
+ id = "hell_ramen"
+ result = "hell_ramen"
+ required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
+ result_amount = 6
+
+ doughball
+ name = "Ball of dough"
+ id = "dough_ball"
+ result = "dough_ball"
+ required_reagents = list("flour" = 15, "water" = 5)
+ required_catalysts = list("enzyme" = 5)
+
+ sodiumchloride
+ name = "Sodium Chloride"
+ id = "sodiumchloride"
+ result = "sodiumchloride"
+ required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1)
+ result_amount = 3
+ mix_message = "The solution crystallizes with a brief flare of light."
+
+ ice
+ name = "Ice"
+ id = "ice"
+ result = "ice"
+ required_reagents = list("water" = 1)
+ result_amount = 1
+ max_temp = 273
+ mix_message = "Ice forms as the water freezes."
+ mix_sound = null
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm
new file mode 100644
index 00000000000..4ec4c1bb9e4
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm
@@ -0,0 +1,76 @@
+//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen)
+/datum/chemical_reaction
+
+ explosion_potassium
+ name = "Explosion"
+ id = "explosion_potassium"
+ result = null
+ required_reagents = list("water" = 1, "potassium" = 1)
+ result_amount = 2
+ mix_message = "The mixture explodes!"
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/datum/effect/effect/system/reagents_explosion/e = new()
+ e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
+ e.start()
+ holder.clear_reagents()
+ return
+
+ emp_pulse
+ name = "EMP Pulse"
+ id = "emp_pulse"
+ result = null
+ required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
+ result_amount = 2
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
+ // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
+ empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
+ holder.clear_reagents()
+ return
+
+ mutagen
+ name = "Unstable mutagen"
+ id = "mutagen"
+ result = "mutagen"
+ required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
+ result_amount = 3
+ mix_message = "The substance turns neon green and bubbles unnervingly."
+
+ thermite
+ name = "Thermite"
+ id = "thermite"
+ result = "thermite"
+ required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
+ result_amount = 3
+
+ glycerol
+ name = "Glycerol"
+ id = "glycerol"
+ result = "glycerol"
+ required_reagents = list("cornoil" = 3, "sacid" = 1)
+ result_amount = 1
+
+ nitroglycerin
+ name = "Nitroglycerin"
+ id = "nitroglycerin"
+ result = "nitroglycerin"
+ required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
+ result_amount = 2
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/datum/effect/effect/system/reagents_explosion/e = new()
+ e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
+ e.start()
+
+ holder.clear_reagents()
+ return
+
+ condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ result = "condensedcapsaicin"
+ required_reagents = list("capsaicin" = 2)
+ required_catalysts = list("plasma" = 5)
+ result_amount = 1
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
new file mode 100644
index 00000000000..02e1f4a65cd
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
@@ -0,0 +1,98 @@
+/datum/chemical_reaction/
+
+ hydrocodone
+ name = "Hydrocodone"
+ id = "hydrocodone"
+ result = "hydrocodone"
+ required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1)
+ result_amount = 2
+
+ mitocholide
+ name = "mitocholide"
+ id = "mitocholide"
+ result = "mitocholide"
+ required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1)
+ result_amount = 3
+
+ cryoxadone
+ name = "Cryoxadone"
+ id = "cryoxadone"
+ result = "cryoxadone"
+ required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1)
+ result_amount = 4
+ mix_message = "The solution bubbles softly."
+
+ spaceacillin
+ name = "Spaceacillin"
+ id = "spaceacillin"
+ result = "spaceacillin"
+ required_reagents = list("fungus" = 1, "ethanol" = 1)
+ result_amount = 2
+ mix_message = "The solvent extracts an antibiotic compound from the fungus."
+
+ audioline
+ name = "Audioline"
+ id = "audioline"
+ result = "audioline"
+ required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
+ result_amount = 3
+
+ rezadone
+ name = "Rezadone"
+ id = "rezadone"
+ result = "rezadone"
+ required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1)
+ result_amount = 3
+
+ virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ result = "virusfood"
+ required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1)
+ result_amount = 3
+/*
+ mix_virus
+ name = "Mix Virus"
+ id = "mixvirus"
+ result = "blood"
+ required_reagents = list("virusfood" = 5)
+ required_catalysts = list("blood")
+ var/level = 2
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+ var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
+ if(B && B.data)
+ var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ if(D)
+ D.Evolve(level - rand(0, 1))
+
+
+ mix_virus_2
+
+ name = "Mix Virus 2"
+ id = "mixvirus2"
+ required_reagents = list("mutagen" = 5)
+ level = 4
+
+ rem_virus
+
+ name = "Devolve Virus"
+ id = "remvirus"
+ required_reagents = list("synaptizine" = 5)
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+ var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
+ if(B && B.data)
+ var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ if(D)
+ D.Devolve()
+*/
+
+ sterilizine
+ name = "Sterilizine"
+ id = "sterilizine"
+ result = "sterilizine"
+ required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1)
+ result_amount = 3
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm
new file mode 100644
index 00000000000..f884ef6cb63
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm
@@ -0,0 +1,199 @@
+/datum/chemical_reaction/
+// foam and foam precursor
+
+ surfactant
+ name = "Foam surfactant"
+ id = "foam surfactant"
+ result = "fluorosurfactant"
+ required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
+ result_amount = 5
+ mix_message = "A head of foam results from the mixture's constant fizzing."
+
+
+ foam
+ name = "Foam"
+ id = "foam"
+ result = null
+ required_reagents = list("fluorosurfactant" = 1, "water" = 1)
+ result_amount = 2
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+
+ var/location = get_turf(holder.my_atom)
+ for(var/mob/M in viewers(5, location))
+ M << "\red The solution violently bubbles!"
+
+ location = get_turf(holder.my_atom)
+
+ for(var/mob/M in viewers(5, location))
+ M << "\red The solution spews out foam!"
+
+ //world << "Holder volume is [holder.total_volume]"
+ //for(var/datum/reagent/R in holder.reagent_list)
+ // world << "[R.name] = [R.volume]"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 0)
+ s.start()
+ holder.clear_reagents()
+ return
+
+ metalfoam
+ name = "Metal Foam"
+ id = "metalfoam"
+ result = null
+ required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1)
+ result_amount = 5
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+
+ var/location = get_turf(holder.my_atom)
+
+ for(var/mob/M in viewers(5, location))
+ M << "\red The solution spews out a metalic foam!"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 1)
+ s.start()
+ return
+
+ ironfoam
+ name = "Iron Foam"
+ id = "ironlfoam"
+ result = null
+ required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1)
+ result_amount = 5
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+
+ var/location = get_turf(holder.my_atom)
+
+ for(var/mob/M in viewers(5, location))
+ M << "\red The solution spews out a metalic foam!"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 2)
+ s.start()
+ return
+
+ // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game!
+ ammonia
+ name = "Ammonia"
+ id = "ammonia"
+ result = "ammonia"
+ required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
+ result_amount = 3
+ mix_message = "The mixture bubbles, emitting an acrid reek."
+
+ diethylamine
+ name = "Diethylamine"
+ id = "diethylamine"
+ result = "diethylamine"
+ required_reagents = list ("ammonia" = 1, "ethanol" = 1)
+ result_amount = 2
+ min_temp = 374
+ mix_message = "A horrible smell pours forth from the mixture."
+
+ space_cleaner
+ name = "Space cleaner"
+ id = "cleaner"
+ result = "cleaner"
+ required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1)
+ result_amount = 3
+ mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!"
+
+ sulfuric_acid
+ name = "Sulfuric Acid"
+ id = "sacid"
+ result = "sacid"
+ required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1)
+ result_amount = 2
+ mix_message = "The mixture gives off a sharp acidic tang."
+
+///////Changeling Blood Test/////////////
+/*
+ changeling_test
+ name = "Changeling blood test"
+ id = "changelingblood"
+ result = "blood"
+ required_reagents = list("blood" = 5)
+ required_catalysts = list("fuel")
+ result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred.
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ if(!holder.reagent_list) //reagent_list is not null
+ return
+ var/datum/reagent/blood/B = locate() in holder.reagent_list
+ if(!B) //B is not null
+ return
+ var/mob/living/carbon/human/H = B.data["donor"]
+ if(!H) //H is not null.
+ return
+ if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling.
+ for(var/mob/M in viewers(get_turf(holder.my_atom), null))
+ M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2)
+ else
+ for(var/mob/M in viewers(get_turf(holder.my_atom), null))
+ M.show_message( "The blood seems to break apart in the fuel.", 1)
+ holder.del_reagent("blood")
+ return
+*/
+
+ plastication
+ name = "Plastic"
+ id = "solidplastic"
+ result = null
+ required_reagents = list("facid" = 10, "plasticide" = 20)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
+ M.amount = 10
+ M.loc = get_turf(holder.my_atom)
+ return
+
+
+
+//Not really misc chems, but not enough to deserve their own file
+/*
+ silicate
+ name = "Silicate"
+ id = "silicate"
+ result = "silicate"
+ required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
+ result_amount = 3
+*/
+
+ space_drugs
+ name = "Space Drugs"
+ id = "space_drugs"
+ result = "space_drugs"
+ required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
+ result_amount = 3
+ mix_message = "Slightly dizzying fumes drift from the solution."
+
+ lube
+ name = "Space Lube"
+ id = "lube"
+ result = "lube"
+ required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
+ result_amount = 3
+ mix_message = "The substance turns a striking cyan and becomes oily."
+
+ holy_water
+ name = "Holy Water"
+ id = "holywater"
+ result = "holywater"
+ required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1)
+ result_amount = 3
+ mix_message = "The water somehow seems purified. Or maybe defiled."
+
+
+ lsd
+ name = "Lysergic acid diethylamide"
+ id = "lsd"
+ result = "lsd"
+ required_reagents = list("diethylamine" = 1, "fungus" = 1)
+ result_amount = 3
+ mix_message = "The mixture turns a rather unassuming color and settles."
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
new file mode 100644
index 00000000000..a1d8b033672
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
@@ -0,0 +1,487 @@
+/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
+
+//Grey
+/datum/chemical_reaction/
+
+ slimespawn
+ name = "Slime Spawn"
+ id = "m_spawn"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/grey
+ required_other = 1
+
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
+ var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
+ S.loc = get_turf(holder.my_atom)
+
+
+ slimeinaprov
+ name = "Slime Epinephrine"
+ id = "m_epinephrine"
+ result = "epinephrine"
+ required_reagents = list("water" = 5)
+ result_amount = 3
+ required_other = 1
+ required_container = /obj/item/slime_extract/grey
+
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+
+
+ slimemonkey
+ name = "Slime Monkey"
+ id = "m_monkey"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/grey
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/i = 1, i <= 3, i++)
+ var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ M.loc = get_turf(holder.my_atom)
+
+//Green
+ slimemutate
+ name = "Mutation Toxin"
+ id = "mutationtoxin"
+ result = "mutationtoxin"
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_other = 1
+ required_container = /obj/item/slime_extract/green
+
+//Metal
+ slimemetal
+ name = "Slime Metal"
+ id = "m_metal"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/metal
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
+ M.amount = 15
+ M.loc = get_turf(holder.my_atom)
+ var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
+ P.amount = 5
+ P.loc = get_turf(holder.my_atom)
+
+//Gold
+ slimecrit
+ name = "Slime Crit"
+ id = "m_tele"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/blocked = blocked_mobs //global variable of blocked mobs
+
+ var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 5, i++)
+ var/chosen = pick(critters)
+ var/mob/living/simple_animal/hostile/C = new chosen
+ C.faction |= "slimesummon"
+ C.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(C, pick(NORTH,SOUTH,EAST,WEST))
+// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
+
+
+ slimecritlesser
+ name = "Slime Crit Lesser"
+ id = "m_tele3"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("The slime extract begins to vibrate violently!"), 1)
+ spawn(50)
+
+ if(holder && holder.my_atom)
+
+ var/blocked = blocked_mobs
+
+ var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ var/chosen = pick(critters)
+ var/mob/living/simple_animal/hostile/C = new chosen
+ C.faction |= "neutral"
+ C.loc = get_turf(holder.my_atom)
+
+//Silver
+ slimebork
+ name = "Slime Bork"
+ id = "m_tele2"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/silver
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks)
+ // BORK BORK BORK
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 4 + rand(1,2), i++)
+ var/chosen = pick(borks)
+ var/obj/B = new chosen
+ if(B)
+ B.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(B, pick(NORTH,SOUTH,EAST,WEST))
+ slimedrinks
+ name = "Slime Drinks"
+ id = "m_tele3"
+ result = null
+ required_reagents = list("water" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/silver
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
+ // BORK BORK BORK
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 4 + rand(1,2), i++)
+ var/chosen = pick(borks)
+ var/obj/B = new chosen
+ if(B)
+ B.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(B, pick(NORTH,SOUTH,EAST,WEST))
+
+
+//Blue
+ slimefrost
+ name = "Slime Frost Oil"
+ id = "m_frostoil"
+ result = "frostoil"
+ required_reagents = list("plasma" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/blue
+ required_other = 1
+//Dark Blue
+ slimefreeze
+ name = "Slime Freeze"
+ id = "m_freeze"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/darkblue
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+ for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
+ M.bodytemperature -= 140
+ M << "\blue You feel a chill!"
+
+//Orange
+ slimecasp
+ name = "Slime Capsaicin Oil"
+ id = "m_capsaicinoil"
+ result = "capsaicin"
+ required_reagents = list("blood" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/orange
+ required_other = 1
+
+ slimefire
+ name = "Slime fire"
+ id = "m_fire"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/orange
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ var/turf/simulated/T = get_turf(holder.my_atom)
+ if(istype(T))
+ T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
+
+//Yellow
+ slimeoverload
+ name = "Slime EMP"
+ id = "m_emp"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ empulse(get_turf(holder.my_atom), 3, 7)
+
+
+ slimecell
+ name = "Slime Powercell"
+ id = "m_cell"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
+ P.loc = get_turf(holder.my_atom)
+
+ slimeglow
+ name = "Slime Glow"
+ id = "m_glow"
+ result = null
+ required_reagents = list("water" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1)
+ var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
+ F.loc = get_turf(holder.my_atom)
+
+//Purple
+
+ slimepsteroid
+ name = "Slime Steroid"
+ id = "m_steroid"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/purple
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
+ P.loc = get_turf(holder.my_atom)
+
+
+
+ slimejam
+ name = "Slime Jam"
+ id = "m_jam"
+ result = "slimejelly"
+ required_reagents = list("sugar" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/purple
+ required_other = 1
+
+
+//Dark Purple
+ slimeplasma
+ name = "Slime Plasma"
+ id = "m_plasma"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/darkpurple
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
+ P.amount = 10
+ P.loc = get_turf(holder.my_atom)
+
+//Red
+ slimeglycerol
+ name = "Slime Glycerol"
+ id = "m_glycerol"
+ result = "glycerol"
+ required_reagents = list("plasma" = 5)
+ result_amount = 8
+ required_container = /obj/item/slime_extract/red
+ required_other = 1
+
+
+ slimebloodlust
+ name = "Bloodlust"
+ id = "m_bloodlust"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/red
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
+ slime.rabid = 1
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The [slime] is driven into a frenzy!."), 1)
+
+//Pink
+ slimeppotion
+ name = "Slime Potion"
+ id = "m_potion"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/pink
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
+ P.loc = get_turf(holder.my_atom)
+
+
+//Black
+ slimemutate2
+ name = "Advanced Mutation Toxin"
+ id = "mutationtoxin2"
+ result = "amutationtoxin"
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_other = 1
+ required_container = /obj/item/slime_extract/black
+
+//Oil
+ slimeexplosion
+ name = "Slime Explosion"
+ id = "m_explosion"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/oil
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ explosion(get_turf(holder.my_atom), 1 ,3, 6)
+//Light Pink
+ slimepotion2
+ name = "Slime Potion 2"
+ id = "m_potion2"
+ result = null
+ result_amount = 1
+ required_container = /obj/item/slime_extract/lightpink
+ required_reagents = list("plasma" = 5)
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
+ P.loc = get_turf(holder.my_atom)
+//Adamantine
+ slimegolem
+ name = "Slime Golem"
+ id = "m_golem"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/adamantine
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe
+ Z.loc = get_turf(holder.my_atom)
+ Z.announce_to_ghosts()
+//Bluespace
+ slimecrystal
+ name = "Slime Crystal"
+ id = "m_crystal"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/bluespace
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ if(holder.my_atom)
+ var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
+ BC.visible_message("The [BC.name] appears out of thin air!")
+//Cerulean
+ slimepsteroid2
+ name = "Slime Steroid 2"
+ id = "m_steroid2"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/cerulean
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
+ P.loc = get_turf(holder.my_atom)
+//Sepia
+ slimecamera
+ name = "Slime Camera"
+ id = "m_camera"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/sepia
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/device/camera/P = new /obj/item/device/camera
+ P.loc = get_turf(holder.my_atom)
+
+
+ slimefilm
+ name = "Slime Film"
+ id = "m_film"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/sepia
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
+ P.loc = get_turf(holder.my_atom)
+//Pyrite
+ slimepaint
+ name = "Slime Paint"
+ id = "s_paint"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/pyrite
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint)
+ var/chosen = pick(paints)
+ var/obj/P = new chosen
+ if(P)
+ P.loc = get_turf(holder.my_atom)
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm
new file mode 100644
index 00000000000..815c1208dd9
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm
@@ -0,0 +1,5 @@
+#define SOLID 1
+#define LIQUID 2
+#define GAS 3
+#define FOOD_METABOLISM 0.4
+#define REM REAGENTS_EFFECT_MULTIPLIER
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
new file mode 100644
index 00000000000..2b2a94ee149
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
@@ -0,0 +1,82 @@
+/datum/reagent
+ var/name = "Reagent"
+ var/id = "reagent"
+ var/description = ""
+ var/datum/reagents/holder = null
+ var/reagent_state = SOLID
+ var/list/data = null
+ var/volume = 0
+ var/nutriment_factor = 0
+ var/metabolization_rate = REAGENTS_METABOLISM
+ //var/list/viruses = list()
+ var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
+ var/shock_reduction = 0
+ var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin
+ //Processing flags, defines the type of mobs the reagent will affect
+ //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths
+ var/process_flags = ORGANIC
+
+
+/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
+ if(!istype(M, /mob/living)) return 0
+ var/datum/reagent/self = src
+ src = null
+
+ if(self.holder) //for catching rare runtimes
+ if(method == TOUCH && self.penetrates_skin)
+ var/block = 0
+ for(var/obj/item/clothing/C in M.get_equipped_items())
+ if(istype(C, /obj/item/clothing/suit/bio_suit))
+ block += 1
+ if(istype(C, /obj/item/clothing/head/bio_hood))
+ block += 1
+ if(block < 2)
+ if(M.reagents)
+ M.reagents.add_reagent(self.id,self.volume)
+
+/*
+ if(method == INGEST && istype(M, /mob/living/carbon))
+ if(prob(1 * self.addictiveness))
+ if(prob(5 * volume))
+ var/datum/disease/addiction/A = new /datum/disease/addiction
+ A.addicted_to = self
+ A.name = "[self.name] Addiction"
+ A.addiction ="[self.name]"
+ A.cure = self.id
+ M.viruses += A
+ A.affected_mob = M
+ A.holder = M
+*/
+ return 1
+
+/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
+ src = null //if it can hold reagents. nope!
+ //if(O.reagents)
+ // O.reagents.add_reagent(id,volume/3)
+ return
+
+/datum/reagent/proc/reaction_turf(var/turf/T, var/volume)
+ src = null
+ return
+
+/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball
+ return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO
+ // Certain elements in too large amounts cause side-effects
+ holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears.
+ current_cycle++
+ return
+
+// Called when two reagents of the same are mixing.
+/datum/reagent/proc/on_merge(var/data)
+ return
+
+/datum/reagent/proc/on_move(var/mob/M)
+ return
+
+/datum/reagent/proc/on_update(var/atom/A)
+ return
+
+/datum/reagent/Destroy()
+ holder = null
+ return ..()
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
new file mode 100644
index 00000000000..b07cd8355e3
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
@@ -0,0 +1,748 @@
+//ALCOHOL WOO
+/datum/reagent/ethanol
+ name = "Ethanol" //Parent class for all alcoholic reagents.
+ id = "ethanol"
+ description = "A well-known alcohol with a variety of applications."
+ reagent_state = LIQUID
+ nutriment_factor = 0 //So alcohol can fill you up! If they want to.
+ color = "#404030" // rgb: 64, 64, 48
+ var/datum/martial_art/drunk_brawling/F = new
+ var/dizzy_adj = 3
+ var/slurr_adj = 3
+ var/confused_adj = 2
+ var/slur_start = 65 //amount absorbed after which mob starts slurring
+ var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style
+ var/confused_start = 130 //amount absorbed after which mob starts confusing directions
+ var/vomit_start = 180 //amount absorbed after which mob starts vomitting
+ var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision
+ var/pass_out = 325 //amount absorbed after which mob starts passing out
+
+/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien)
+ // Sobering multiplier.
+ // Sober block makes it more difficult to get drunk
+ var/sober_str=!(SOBER in M.mutations)?1:2
+ M:nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ if(!src.data) data = 1
+ src.data++
+
+ var/d = data
+
+ // make all the beverages work together
+ for(var/datum/reagent/ethanol/A in holder.reagent_list)
+ if(isnum(A.data)) d += A.data
+
+ d/=sober_str
+
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly.
+ d*=5
+
+ M.dizziness += dizzy_adj.
+ if(d >= slur_start && d < pass_out)
+ if (!M:slurring) M:slurring = 1
+ M:slurring += slurr_adj/sober_str
+ if(d >= brawl_start && ishuman(M))
+ var/mob/living/carbon/human/H = M
+ F.teach(H,1)
+ if(src.volume < 3)
+ if(H.martial_art == F)
+ F.remove(H)
+ if(d >= confused_start && prob(33))
+ if (!M:confused) M:confused = 1
+ M.confused = max(M:confused+(confused_adj/sober_str),0)
+ if(d >= blur_start)
+ M.eye_blurry = max(M.eye_blurry, 10/sober_str)
+ M:drowsyness = max(M:drowsyness, 0)
+ if(d >= vomit_start)
+ if(prob(8))
+ M.fakevomit()
+ if(d >= pass_out)
+ M:paralysis = max(M:paralysis, 20/sober_str)
+ M:drowsyness = max(M:drowsyness, 30/sober_str)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
+ if (istype(L))
+ L.take_damage(0.1, 1)
+ H.adjustToxLoss(0.1)
+ holder.remove_reagent(src.id, 0.4)
+ ..()
+ return
+
+/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
+ if(istype(O,/obj/item/weapon/paper))
+ var/obj/item/weapon/paper/paperaffected = O
+ paperaffected.clearpaper()
+ usr << "The solution melts away the ink on the paper."
+ if(istype(O,/obj/item/weapon/book))
+ if(volume >= 5)
+ var/obj/item/weapon/book/affectedbook = O
+ affectedbook.dat = null
+ usr << "The solution melts away the ink on the book."
+ else
+ usr << "It wasn't enough..."
+ return
+
+/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 15)
+ return
+
+
+/datum/reagent/ethanol/beer //It's really much more stronger than other drinks.
+ name = "Beer"
+ id = "beer"
+ description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M:jitteriness = max(M:jitteriness-3,0)
+ return
+
+/datum/reagent/ethanol/cider
+ name = "Cider"
+ id = "cider"
+ description = "An alcoholic beverage derived from apples."
+ color = "#174116"
+
+/datum/reagent/ethanol/whiskey
+ name = "Whiskey"
+ id = "whiskey"
+ description = "A superb and well-aged single-malt whiskey. Damn."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+
+/datum/reagent/ethanol/specialwhiskey
+ name = "Special Blend Whiskey"
+ id = "specialwhiskey"
+ description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
+ color = "#664300" // rgb: 102, 67, 0
+ slur_start = 30 //amount absorbed after which mob starts slurring
+ brawl_start = 40
+
+/datum/reagent/ethanol/gin
+ name = "Gin"
+ id = "gin"
+ description = "It's gin. In space. I say, good sir."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 3
+
+/datum/reagent/ethanol/absinthe
+ name = "Absinthe"
+ id = "absinthe"
+ description = "Watch out that the Green Fairy doesn't come for you!"
+ color = "#33EE00" // rgb: lots, ??, ??
+ overdose_threshold = 30
+ dizzy_adj = 5
+ slur_start = 25
+ brawl_start = 40
+ confused_start = 100
+
+//copy paste from LSD... shoot me
+/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/M)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ data++
+ M:hallucination += 5
+ if(volume > overdose_threshold)
+ M:adjustToxLoss(1)
+ ..()
+ return
+
+/datum/reagent/ethanol/rum
+ name = "Rum"
+ id = "rum"
+ description = "Popular with the sailors. Not very popular with everyone else."
+ color = "#664300" // rgb: 102, 67, 0
+ overdose_threshold = 30
+
+/datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ if(volume > overdose_threshold)
+ M:adjustToxLoss(1)
+ return
+
+/datum/reagent/ethanol/mojito
+ name = "Mojito"
+ id = "mojito"
+ description = "If it's good enough for Spesscuba, it's good enough for you."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/vodka
+ name = "Vodka"
+ id = "vodka"
+ description = "Number one drink AND fueling choice for Russians worldwide."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/sake
+ name = "Sake"
+ id = "sake"
+ description = "Anime's favorite drink."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/tequilla
+ name = "Tequila"
+ id = "tequilla"
+ description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
+ color = "#A8B0B7" // rgb: 168, 176, 183
+
+/datum/reagent/ethanol/vermouth
+ name = "Vermouth"
+ id = "vermouth"
+ description = "You suddenly feel a craving for a martini..."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/wine
+ name = "Wine"
+ id = "wine"
+ description = "An premium alchoholic beverage made from distilled grape juice."
+ color = "#7E4043" // rgb: 126, 64, 67
+ dizzy_adj = 2
+ slur_start = 65 //amount absorbed after which mob starts slurring
+ confused_start = 145 //amount absorbed after which mob starts confusing directions
+
+/datum/reagent/ethanol/cognac
+ name = "Cognac"
+ id = "cognac"
+ description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ confused_start = 115 //amount absorbed after which mob starts confusing directions
+
+/datum/reagent/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
+ name = "Suicider"
+ id = "suicider"
+ description = "An unbelievably strong and potent variety of Cider."
+ color = "#CF3811"
+ dizzy_adj = 20
+ slurr_adj = 20
+ confused_adj = 3
+ slur_start = 15
+ brawl_start = 25
+ confused_start = 40
+ blur_start = 60
+ pass_out = 80
+
+/datum/reagent/ethanol/ale
+ name = "Ale"
+ id = "ale"
+ description = "A dark alchoholic beverage made by malted barley and yeast."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/thirteenloko
+ name = "Thirteen Loko"
+ id = "thirteenloko"
+ description = "A potent mixture of caffeine and alcohol."
+ reagent_state = LIQUID
+ color = "#102000" // rgb: 16, 32, 0
+
+/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M:nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ M:drowsyness = max(0,M:drowsyness-7)
+ //if(!M:sleeping_willingly)
+ // M:sleeping = max(0,M.sleeping-2)
+ if (M.bodytemperature > 310)
+ M.bodytemperature = max(310, M.bodytemperature-5)
+ M.Jitter(1)
+ return
+
+
+/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
+
+/datum/reagent/ethanol/bilk
+ name = "Bilk"
+ id = "bilk"
+ description = "This appears to be beer mixed with milk. Disgusting."
+ reagent_state = LIQUID
+ color = "#895C4C" // rgb: 137, 92, 76
+
+/datum/reagent/ethanol/atomicbomb
+ name = "Atomic Bomb"
+ id = "atomicbomb"
+ description = "Nuclear proliferation never tasted so good."
+ reagent_state = LIQUID
+ color = "#666300" // rgb: 102, 99, 0
+
+/datum/reagent/ethanol/threemileisland
+ name = "THree Mile Island Iced Tea"
+ id = "threemileisland"
+ description = "Made for a woman, strong enough for a man."
+ reagent_state = LIQUID
+ color = "#666340" // rgb: 102, 99, 64
+
+/datum/reagent/ethanol/goldschlager
+ name = "Goldschlager"
+ id = "goldschlager"
+ description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/patron
+ name = "Patron"
+ id = "patron"
+ description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
+ reagent_state = LIQUID
+ color = "#585840" // rgb: 88, 88, 64
+
+/datum/reagent/ethanol/gintonic
+ name = "Gin and Tonic"
+ id = "gintonic"
+ description = "An all time classic, mild cocktail."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/cuba_libre
+ name = "Cuba Libre"
+ id = "cubalibre"
+ description = "Rum, mixed with cola. Viva la revolution."
+ reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
+/datum/reagent/ethanol/whiskey_cola
+ name = "Whiskey Cola"
+ id = "whiskeycola"
+ description = "Whiskey, mixed with cola. Surprisingly refreshing."
+ reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
+/datum/reagent/ethanol/martini
+ name = "Classic Martini"
+ id = "martini"
+ description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/vodkamartini
+ name = "Vodka Martini"
+ id = "vodkamartini"
+ description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/white_russian
+ name = "White Russian"
+ id = "whiterussian"
+ description = "That's just, like, your opinion, man..."
+ reagent_state = LIQUID
+ color = "#A68340" // rgb: 166, 131, 64
+
+/datum/reagent/ethanol/screwdrivercocktail
+ name = "Screwdriver"
+ id = "screwdrivercocktail"
+ description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/booger
+ name = "Booger"
+ id = "booger"
+ description = "Ewww..."
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/bloody_mary
+ name = "Bloody Mary"
+ id = "bloodymary"
+ description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/gargle_blaster
+ name = "Pan-Galactic Gargle Blaster"
+ id = "gargleblaster"
+ description = "Whoah, this stuff looks volatile!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/brave_bull
+ name = "Brave Bull"
+ id = "bravebull"
+ description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/tequilla_sunrise
+ name = "Tequila Sunrise"
+ id = "tequillasunrise"
+ description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/toxins_special
+ name = "Toxins Special"
+ id = "toxinsspecial"
+ description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/beepsky_smash
+ name = "Beepsky Smash"
+ id = "beepskysmash"
+ description = "Deny drinking this and prepare for THE LAW."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ description = "You take a tiny sip and feel a burning sensation..."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/irish_cream
+ name = "Irish Cream"
+ id = "irishcream"
+ description = "Whiskey-imbued cream, what else would you expect from the Irish."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/manly_dorf
+ name = "The Manly Dorf"
+ id = "manlydorf"
+ description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/longislandicedtea
+ name = "Long Island Iced Tea"
+ id = "longislandicedtea"
+ description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/moonshine
+ name = "Moonshine"
+ id = "moonshine"
+ description = "You've really hit rock bottom now... your liver packed its bags and left last night."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/b52
+ name = "B-52"
+ id = "b52"
+ description = "Coffee, Irish Cream, and congac. You will get bombed."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/irishcoffee
+ name = "Irish Coffee"
+ id = "irishcoffee"
+ description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/margarita
+ name = "Margarita"
+ id = "margarita"
+ description = "On the rocks with salt on the rim. Arriba~!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/black_russian
+ name = "Black Russian"
+ id = "blackrussian"
+ description = "For the lactose-intolerant. Still as classy as a White Russian."
+ reagent_state = LIQUID
+ color = "#360000" // rgb: 54, 0, 0
+
+/datum/reagent/ethanol/manhattan
+ name = "Manhattan"
+ id = "manhattan"
+ description = "The Detective's undercover drink of choice. He never could stomach gin..."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/manhattan_proj
+ name = "Manhattan Project"
+ id = "manhattan_proj"
+ description = "A scienitst's drink of choice, for pondering ways to blow up the station."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/whiskeysoda
+ name = "Whiskey Soda"
+ id = "whiskeysoda"
+ description = "Ultimate refreshment."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/antifreeze
+ name = "Anti-freeze"
+ id = "antifreeze"
+ description = "Ultimate refreshment."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/barefoot
+ name = "Barefoot"
+ id = "barefoot"
+ description = "Barefoot and pregnant"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/snowwhite
+ name = "Snow White"
+ id = "snowwhite"
+ description = "A cold refreshment"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/demonsblood
+ name = "Demons Blood"
+ id = "demonsblood"
+ description = "AHHHH!!!!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 10
+ slurr_adj = 10
+
+/datum/reagent/ethanol/vodkatonic
+ name = "Vodka and Tonic"
+ id = "vodkatonic"
+ description = "For when a gin and tonic isn't russian enough."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ slurr_adj = 3
+
+/datum/reagent/ethanol/ginfizz
+ name = "Gin Fizz"
+ id = "ginfizz"
+ description = "Refreshingly lemony, deliciously dry."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ slurr_adj = 3
+
+/datum/reagent/ethanol/bahama_mama
+ name = "Bahama mama"
+ id = "bahama_mama"
+ description = "Tropic cocktail."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/singulo
+ name = "Singulo"
+ id = "singulo"
+ description = "A blue-space beverage!"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+ dizzy_adj = 15
+ slurr_adj = 15
+
+/datum/reagent/ethanol/sbiten
+ name = "Sbiten"
+ id = "sbiten"
+ description = "A spicy Vodka! Might be a little hot for the little guys!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if (M.bodytemperature < 360)
+ M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
+ return
+
+/datum/reagent/ethanol/devilskiss
+ name = "Devils Kiss"
+ id = "devilskiss"
+ description = "Creepy time!"
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/red_mead
+ name = "Red Mead"
+ id = "red_mead"
+ description = "The true Viking drink! Even though it has a strange red color."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/mead
+ name = "Mead"
+ id = "mead"
+ description = "A Vikings drink, though a cheap one."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/iced_beer
+ name = "Iced Beer"
+ id = "iced_beer"
+ description = "A beer which is so cold the air around it freezes."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if (M.bodytemperature < 270)
+ M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
+ return
+
+/datum/reagent/ethanol/grog
+ name = "Grog"
+ id = "grog"
+ description = "Watered down rum, Nanotrasen approves!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/aloe
+ name = "Aloe"
+ id = "aloe"
+ description = "So very, very, very good."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/andalusia
+ name = "Andalusia"
+ id = "andalusia"
+ description = "A nice, strange named drink."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/alliescocktail
+ name = "Allies Cocktail"
+ id = "alliescocktail"
+ description = "A drink made from your allies."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/acid_spit
+ name = "Acid Spit"
+ id = "acidspit"
+ description = "A drink by Nanotrasen. Made from live aliens."
+ reagent_state = LIQUID
+ color = "#365000" // rgb: 54, 80, 0
+
+/datum/reagent/ethanol/amasec
+ name = "Amasec"
+ id = "amasec"
+ description = "Official drink of the Imperium."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+
+/datum/reagent/ethanol/neurotoxin
+ name = "Neurotoxin"
+ id = "neurotoxin"
+ description = "A strong neurotoxin that puts the subject into a death-like state."
+ reagent_state = LIQUID
+ color = "#2E2E61" // rgb: 46, 46, 97
+
+/datum/reagent/ethanol/neurotoxin/on_mob_life(var/mob/living/M as mob)
+ M.weakened = max(M.weakened, 3)
+ if(!data)
+ data = 1
+ data++
+ M.dizziness +=6
+ if(data >= 15 && data <45)
+ if (!M.slurring)
+ M.slurring = 1
+ M.slurring += 3
+ else if(data >= 45 && prob(50) && data <55)
+ M.confused = max(M.confused+3,0)
+ else if(data >=55)
+ M.druggy = max(M.druggy, 55)
+ else if(data >=200)
+ M.adjustToxLoss(2)
+ ..()
+ return
+
+/datum/reagent/ethanol/bananahonk
+ name = "Banana Mama"
+ id = "bananahonk"
+ description = "A drink from Clown Heaven."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/bananahonk/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/ethanol/silencer
+ name = "Silencer"
+ id = "silencer"
+ description = "A drink from Mime Heaven."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/silencer/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/ethanol/changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ description = "A stingy drink."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/changelingsting/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ return
+
+/datum/reagent/ethanol/irishcarbomb
+ name = "Irish Car Bomb"
+ id = "irishcarbomb"
+ description = "Mmm, tastes like chocolate cake..."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/irishcarbomb/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ return
+
+/datum/reagent/ethanol/syndicatebomb
+ name = "Syndicate Bomb"
+ id = "syndicatebomb"
+ description = "A Syndicate bomb"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/erikasurprise
+ name = "Erika Surprise"
+ id = "erikasurprise"
+ description = "The surprise is, it's green!"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/driestmartini
+ name = "Driest Martini"
+ id = "driestmartini"
+ description = "Only for the experienced. You think you see sand floating in the glass."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/driestmartini/on_mob_life(var/mob/living/M as mob)
+ if(!data) data = 1
+ data++
+ M.dizziness +=10
+ if(data >= 55 && data <115)
+ if (!M.stuttering) M.stuttering = 1
+ M.stuttering += 10
+ else if(data >= 115 && prob(33))
+ M.confused = max(M.confused+15,15)
+ ..()
+
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm
new file mode 100644
index 00000000000..e66e48fbdfe
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm
@@ -0,0 +1,279 @@
+/datum/reagent/drink/orangejuice
+ name = "Orange juice"
+ id = "orangejuice"
+ description = "Both delicious AND rich in Vitamin C, what more do you need?"
+ color = "#E78108" // rgb: 231, 129, 8
+
+/datum/reagent/drink/orangejuicde/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
+ return
+
+/datum/reagent/drink/tomatojuice
+ name = "Tomato Juice"
+ id = "tomatojuice"
+ description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
+ color = "#731008" // rgb: 115, 16, 8
+
+/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1)
+ return
+
+/datum/reagent/drink/limejuice
+ name = "Lime Juice"
+ id = "limejuice"
+ description = "The sweet-sour juice of limes."
+ color = "#365E30" // rgb: 54, 94, 48
+
+/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
+ return
+
+
+/datum/reagent/drink/carrotjuice
+ name = "Carrot juice"
+ id = "carrotjuice"
+ description = "It is just like a carrot but without crunching."
+ color = "#973800" // rgb: 151, 56, 0
+
+/datum/reagent/drink/carrotjuicde/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.eye_blurry = max(M.eye_blurry-1 , 0)
+ M.eye_blind = max(M.eye_blind-1 , 0)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 20)
+ //nothing
+ if(21 to INFINITY)
+ if (prob(data-10))
+ M.disabilities &= ~NEARSIGHTED
+ data++
+ return
+
+/datum/reagent/drink/doctor_delight
+ name = "The Doctor's Delight"
+ id = "doctorsdelight"
+ description = "A gulp a day keeps the MediBot away. That's probably for the best."
+ reagent_state = LIQUID
+ color = "#FF8CFF" // rgb: 255, 140, 255
+
+/datum/reagent/drink/doctors_delight/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
+ ..()
+ return
+
+/datum/reagent/drink/berryjuice
+ name = "Berry Juice"
+ id = "berryjuice"
+ description = "A delicious blend of several different kinds of berries."
+ color = "#863333" // rgb: 134, 51, 51
+
+/datum/reagent/drink/poisonberryjuice
+ name = "Poison Berry Juice"
+ id = "poisonberryjuice"
+ description = "A tasty juice blended from various kinds of very deadly and toxic berries."
+ color = "#863353" // rgb: 134, 51, 83
+
+/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.adjustToxLoss(1)
+ return
+
+/datum/reagent/drink/watermelonjuice
+ name = "Watermelon Juice"
+ id = "watermelonjuice"
+ description = "Delicious juice made from watermelon."
+ color = "#863333" // rgb: 134, 51, 51
+
+/datum/reagent/drink/lemonjuice
+ name = "Lemon Juice"
+ id = "lemonjuice"
+ description = "This juice is VERY sour."
+ color = "#863333" // rgb: 175, 175, 0
+
+/datum/reagent/drink/grapejuice
+ name = "Grape Juice"
+ id = "grapejuice"
+ description = "This juice is known to stain shirts."
+ color = "#993399" // rgb: 153, 51, 153
+
+/datum/reagent/drink/banana
+ name = "Banana Juice"
+ id = "banana"
+ description = "The raw essence of a banana."
+ color = "#863333" // rgb: 175, 175, 0
+
+/datum/reagent/drink/banana/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/drink/nothing
+ name = "Nothing"
+ id = "nothing"
+ description = "Absolutely nothing."
+
+/datum/reagent/drink/nothing/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/drink/potato_juice
+ name = "Potato Juice"
+ id = "potato"
+ description = "Juice of the potato. Bleh."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/drink/milk
+ name = "Milk"
+ id = "milk"
+ description = "An opaque white liquid produced by the mammary glands of mammals."
+ color = "#DFDFDF" // rgb: 223, 223, 223
+
+/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob)
+ if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/drink/milk/soymilk
+ name = "Soy Milk"
+ id = "soymilk"
+ description = "An opaque white liquid made from soybeans."
+ color = "#DFDFC7" // rgb: 223, 223, 199
+
+/datum/reagent/drink/milk/cream
+ name = "Cream"
+ id = "cream"
+ description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
+ color = "#DFD7AF" // rgb: 223, 215, 175
+
+/datum/reagent/drink/milk/chocolate_milk
+ name = "Chocolate milk"
+ id ="chocolate_milk"
+ description = "Chocolate-flavored milk, tastes like being a kid again."
+ color = "#85432C"
+
+/datum/reagent/drink/hot_coco
+ name = "Hot Chocolate"
+ id = "hot_coco"
+ description = "Made with love! And coco beans."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#403010" // rgb: 64, 48, 16
+ adj_temp = 5
+
+/datum/reagent/drink/coffee
+ name = "Coffee"
+ id = "coffee"
+ description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
+ color = "#482000" // rgb: 72, 32, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+ adj_temp = 25
+ overdose_threshold = 45
+
+/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob)
+ if(adj_temp > 0 && holder.has_reagent("frostoil"))
+ holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
+ if(prob(50))
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ ..()
+ return
+
+/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob)
+ if(volume > 45)
+ M.Jitter(5)
+
+ ..()
+ return
+
+/datum/reagent/drink/coffee/icecoffee
+ name = "Iced Coffee"
+ id = "icecoffee"
+ description = "Coffee and ice, refreshing and cool."
+ color = "#102838" // rgb: 16, 40, 56
+ adj_temp = -5
+
+/datum/reagent/drink/coffee/soy_latte
+ name = "Soy Latte"
+ id = "soy_latte"
+ description = "A nice and tasty beverage while you are reading your hippie books."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_sleepy = 0
+ adj_temp = 5
+
+/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.sleeping = 0
+ if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
+ return
+
+/datum/reagent/drink/coffee/cafe_latte
+ name = "Cafe Latte"
+ id = "cafe_latte"
+ description = "A nice, strong and tasty beverage while you are reading."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_sleepy = 0
+ adj_temp = 5
+
+/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.sleeping = 0
+ if(M.getBruteLoss() && prob(20))
+ M.heal_organ_damage(1,0)
+ return
+
+/datum/reagent/drink/tea
+ name = "Tea"
+ id = "tea"
+ description = "Tasty black tea: It has antioxidants. It's good for you!"
+ color = "#101000" // rgb: 16, 16, 0
+ adj_dizzy = -2
+ adj_drowsy = -1
+ adj_sleepy = -3
+ adj_temp = 20
+
+/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getToxLoss() && prob(20))
+ M.adjustToxLoss(-1)
+ return
+
+/datum/reagent/drink/tea/icetea
+ name = "Iced Tea"
+ id = "icetea"
+ description = "No relation to a certain rap artist/ actor."
+ color = "#104038" // rgb: 16, 64, 56
+ adj_temp = -5
+
+/datum/reagent/drink/kahlua
+ name = "Kahlua"
+ id = "kahlua"
+ description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
+ color = "#664300" // rgb: 102, 67, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+
+/datum/reagent/drink/kahlua/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.Jitter(5)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm
new file mode 100644
index 00000000000..3bc3b364929
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm
@@ -0,0 +1,26 @@
+/datum/reagent/drink
+ name = "Drink"
+ id = "drink"
+ description = "Uh, some kind of drink."
+ reagent_state = LIQUID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#E78108" // rgb: 231, 129, 8
+ var/adj_dizzy = 0
+ var/adj_drowsy = 0
+ var/adj_sleepy = 0
+ var/adj_temp = 0
+
+/datum/reagent/drink/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
+ if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
+ if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
+ if (adj_temp)
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ // Drinks should be used up faster than other reagents.
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm
new file mode 100644
index 00000000000..e9acef2da7d
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm
@@ -0,0 +1,141 @@
+/datum/reagent/drink/cold
+ name = "Cold drink"
+ adj_temp = -5
+
+/datum/reagent/drink/cold/tonic
+ name = "Tonic Water"
+ id = "tonic"
+ description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+
+/datum/reagent/drink/cold/sodawater
+ name = "Soda Water"
+ id = "sodawater"
+ description = "A can of club soda. Why not make a scotch and soda?"
+ color = "#619494" // rgb: 97, 148, 148
+ adj_dizzy = -5
+ adj_drowsy = -3
+
+/datum/reagent/drink/cold/ice
+ name = "Ice"
+ id = "ice"
+ description = "Frozen water, your dentist wouldn't like you chewing this."
+ reagent_state = SOLID
+ color = "#619494" // rgb: 97, 148, 148
+
+/datum/reagent/drink/cold/space_cola
+ name = "Cola"
+ id = "cola"
+ description = "A refreshing beverage."
+ reagent_state = LIQUID
+ color = "#100800" // rgb: 16, 8, 0
+ adj_drowsy = -3
+
+/datum/reagent/drink/cold/nuka_cola
+ name = "Nuka Cola"
+ id = "nuka_cola"
+ description = "Cola, cola never changes."
+ color = "#100800" // rgb: 16, 8, 0
+ adj_sleepy = -2
+
+/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob)
+ M.Jitter(20)
+ M.druggy = max(M.druggy, 30)
+ M.dizziness +=5
+ M.drowsyness = 0
+ M.status_flags |= GOTTAGOFAST
+ ..()
+ return
+
+/datum/reagent/drink/cold/spacemountainwind
+ name = "Space Mountain Wind"
+ id = "spacemountainwind"
+ description = "Blows right through you like a space wind."
+ color = "#102000" // rgb: 16, 32, 0
+ adj_drowsy = -7
+ adj_sleepy = -1
+
+/datum/reagent/drink/cold/dr_gibb
+ name = "Dr. Gibb"
+ id = "dr_gibb"
+ description = "A delicious blend of 42 different flavours"
+ color = "#102000" // rgb: 16, 32, 0
+ adj_drowsy = -6
+
+/datum/reagent/drink/cold/space_up
+ name = "Space-Up"
+ id = "space_up"
+ description = "Tastes like a hull breach in your mouth."
+ color = "#202800" // rgb: 32, 40, 0
+ adj_temp = -8
+
+/datum/reagent/drink/cold/lemon_lime
+ name = "Lemon Lime"
+ description = "A tangy substance made of 0.5% natural citrus!"
+ id = "lemon_lime"
+ color = "#878F00" // rgb: 135, 40, 0
+ adj_temp = -8
+
+/datum/reagent/drink/cold/lemonade
+ name = "Lemonade"
+ description = "Oh the nostalgia..."
+ id = "lemonade"
+ color = "#FFFF00" // rgb: 255, 255, 0
+
+/datum/reagent/drink/cold/kiraspecial
+ name = "Kira Special"
+ description = "Long live the guy who everyone had mistaken for a girl. Baka!"
+ id = "kiraspecial"
+ color = "#CCCC99" // rgb: 204, 204, 153
+
+/datum/reagent/drink/cold/brownstar
+ name = "Brown Star"
+ description = "Its not what it sounds like..."
+ id = "brownstar"
+ color = "#9F3400" // rgb: 159, 052, 000
+ adj_temp = - 2
+
+/datum/reagent/drink/cold/milkshake
+ name = "Milkshake"
+ description = "Glorious brainfreezing mixture."
+ id = "milkshake"
+ color = "#AEE5E4" // rgb" 174, 229, 228
+ adj_temp = -9
+
+/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(5,20)
+ if(15 to 25)
+ M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(prob(1)) M.emote("shiver")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(15,20)
+ data++
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/drink/cold/rewriter
+ name = "Rewriter"
+ description = "The secert of the sanctuary of the Libarian..."
+ id = "rewriter"
+ color = "#485000" // rgb:72, 080, 0
+
+/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.Jitter(5)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
new file mode 100644
index 00000000000..dd9e73a96b1
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
@@ -0,0 +1,54 @@
+/datum/reagent/adminordrazine //An OP chemical for admins
+ name = "Adminordrazine"
+ id = "adminordrazine"
+ description = "It's magic. We don't have to explain it."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+ process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
+
+/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
+ if(!M) M = holder.my_atom ///This can even heal dead people.
+ for(var/datum/reagent/R in M.reagents.reagent_list)
+ if(R != src)
+ M.reagents.remove_reagent(R.id,5)
+ M.setCloneLoss(0)
+ M.setOxyLoss(0)
+ M.radiation = 0
+ M.heal_organ_damage(5,5)
+ M.adjustToxLoss(-5)
+ M.hallucination = 0
+ M.setBrainLoss(0)
+ M.disabilities = 0
+ M.sdisabilities = 0
+ M.eye_blurry = 0
+ M.eye_blind = 0
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
+ if(istype(E))
+ E.damage = max(E.damage-5 , 0)
+ M.SetWeakened(0)
+ M.SetStunned(0)
+ M.SetParalysis(0)
+ M.silent = 0
+ M.dizziness = 0
+ M.drowsyness = 0
+ M.stuttering = 0
+ M.slurring = 0
+ M.confused = 0
+ M.sleeping = 0
+ M.jitteriness = 0
+ if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
+ var/mob/living/carbon/C = M
+ if(C.virus2.len)
+ for (var/ID in C.virus2)
+ var/datum/disease2/disease/V = C.virus2[ID]
+ C.antibodies |= V.antigen
+ ..()
+ return
+
+
+/datum/reagent/adminordrazine/nanites
+ name = "Nanites"
+ id = "nanites"
+ description = "Nanomachines that aid in rapid cellular regeneration."
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm
new file mode 100644
index 00000000000..a00da8f283a
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm
@@ -0,0 +1,95 @@
+/datum/reagent/serotrotium
+ name = "Serotrotium"
+ id = "serotrotium"
+ description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
+ reagent_state = LIQUID
+ color = "#202040" // rgb: 20, 20, 40
+
+/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
+ if(ishuman(M))
+ if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
+ holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
+ return
+
+
+/datum/reagent/lithium
+ name = "Lithium"
+ id = "lithium"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
+ if(prob(5)) M.emote(pick("twitch","drool","moan"))
+ ..()
+ return
+
+
+/datum/reagent/hippies_delight
+ name = "Hippie's Delight"
+ id = "hippiesdelight"
+ description = "You just don't get it maaaan."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 50)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 5)
+ if (!M.stuttering) M.stuttering = 1
+ M.Dizzy(10)
+ if(prob(10)) M.emote(pick("twitch","giggle"))
+ if(5 to 10)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(20)
+ M.Dizzy(20)
+ M.druggy = max(M.druggy, 45)
+ if(prob(20)) M.emote(pick("twitch","giggle"))
+ if (10 to INFINITY)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(40)
+ M.Dizzy(40)
+ M.druggy = max(M.druggy, 60)
+ if(prob(30)) M.emote(pick("twitch","giggle"))
+ holder.remove_reagent(src.id, 0.2)
+ data++
+ ..()
+ return
+
+
+/datum/reagent/lsd
+ name = "Lysergic acid diethylamide"
+ id = "lsd"
+ description = "A highly potent hallucinogenic substance. Far out, maaaan."
+ reagent_state = LIQUID
+ color = "#0000D8"
+
+/datum/reagent/lsd/on_mob_life(var/mob/living/M)
+ if(!M) M = holder.my_atom
+ M.hallucination += 10
+ ..()
+ return
+
+
+/datum/reagent/space_drugs
+ name = "Space drugs"
+ id = "space_drugs"
+ description = "An illegal chemical compound used as drug."
+ reagent_state = LIQUID
+ color = "#9087A2"
+ metabolization_rate = 0.2
+
+/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 15)
+ if(isturf(M.loc) && !istype(M.loc, /turf/space))
+ if(M.canmove && !M.restrained())
+ if(prob(10)) step(M, pick(cardinal))
+ if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
+ ..()
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm
new file mode 100644
index 00000000000..4603aa6c238
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm
@@ -0,0 +1,136 @@
+/datum/reagent/fuel
+ name = "Welding fuel"
+ id = "fuel"
+ description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil."
+ reagent_state = LIQUID
+ color = "#060606"
+
+/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 10)
+ return
+ ..()
+
+/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
+ name = "Unholy Water"
+ id = "unholywater"
+ description = "Something that shouldn't exist on this plane of existance."
+ process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
+
+/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
+ M.adjustBrainLoss(3)
+ if(iscultist(M))
+ M.status_flags |= GOTTAGOFAST
+ M.drowsyness = max(M.drowsyness-5, 0)
+ M.AdjustParalysis(-2)
+ M.AdjustStunned(-2)
+ M.AdjustWeakened(-2)
+ else
+ M.adjustToxLoss(2)
+ M.adjustFireLoss(2)
+ M.adjustOxyLoss(2)
+ M.adjustBruteLoss(2)
+ holder.remove_reagent(src.id, 1)
+
+
+/datum/reagent/incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel.
+ name = "Incendiary fuel"
+ id = "incendiaryfuel"
+ description = "A highly flammable compound used in incendiary grenades."
+ reagent_state = LIQUID
+ color = "#660000" // rgb: 102, 0, 0
+
+/datum/reagent/incendiary_fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 10)
+ return
+
+/datum/reagent/incendiary_fuel/reaction_obj(var/obj/O, var/volume)
+ var/turf/the_turf = get_turf(O)
+ if(!the_turf)
+ return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
+ new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
+
+/datum/reagent/incendiary_fuel/reaction_turf(var/turf/T, var/volume)
+ new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
+ return
+
+/datum/reagent/incendiary_fuel/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/plasma
+ name = "Plasma"
+ id = "plasma"
+ description = "The liquid phase of an unusual extraterrestrial compound."
+ reagent_state = LIQUID
+ color = "#7A2B94"
+
+/datum/reagent/plasma/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1*REM)
+ if(holder.has_reagent("epinephrine"))
+ holder.remove_reagent("epinephrine", 2)
+ ..()
+ return
+
+/datum/reagent/plasma/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 5)
+ ..()
+ return
+
+
+/datum/reagent/thermite
+ name = "Thermite"
+ id = "thermite"
+ description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
+ reagent_state = SOLID
+ color = "#673910" // rgb: 103, 57, 16
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 5)
+ if(istype(T, /turf/simulated/wall))
+ T:thermite = 1
+ T.overlays.Cut()
+ T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
+ return
+
+/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/glycerol
+ name = "Glycerol"
+ id = "glycerol"
+ description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
+ reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/nitroglycerin
+ name = "Nitroglycerin"
+ id = "nitroglycerin"
+ description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
+ reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm
new file mode 100644
index 00000000000..485a42e7ca7
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm
@@ -0,0 +1,425 @@
+/////////////////////////Food Reagents////////////////////////////
+// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
+// condiments, additives, and such go.
+/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective
+ name = "Nutriment"
+ id = "nutriment"
+ description = "A questionable mixture of various pure nutrients commonly found in processed foods."
+ reagent_state = SOLID
+ nutriment_factor = 12 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/nutriment/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
+ name = "Protein"
+ id = "protein"
+ description = "Various essential proteins and fats commonly found in animal flesh and blood."
+ reagent_state = SOLID
+ nutriment_factor = 15 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/protein/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
+ name = "Plant-matter"
+ id = "plantmatter"
+ description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
+ reagent_state = SOLID
+ nutriment_factor = 15 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/plantmatter/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/soysauce
+ name = "Soysauce"
+ id = "soysauce"
+ description = "A salty sauce made from the soy plant."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#792300" // rgb: 121, 35, 0
+
+/datum/reagent/ketchup
+ name = "Ketchup"
+ id = "ketchup"
+ description = "Ketchup, catsup, whatever. It's tomato paste."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#731008" // rgb: 115, 16, 8
+
+
+/datum/reagent/capsaicin
+ name = "Capsaicin Oil"
+ id = "capsaicin"
+ description = "This is what makes chilis hot."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 179, 16, 8
+
+/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("frostoil"))
+ holder.remove_reagent("frostoil", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(5,20)
+ if(15 to 25)
+ M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(15,20)
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ data++
+ ..()
+ return
+
+
+/datum/reagent/sodiumchloride
+ name = "Salt"
+ id = "sodiumchloride"
+ description = "Sodium chloride, common table salt."
+ reagent_state = SOLID
+ color = "#B1B0B0"
+
+/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob)
+ if(volume > 100)
+ if(prob(70))
+ M.adjustBrainLoss(1)
+ if(prob(8))
+ M.adjustToxLoss(rand(1,2))
+ ..()
+ return
+
+
+/datum/reagent/blackpepper
+ name = "Black Pepper"
+ id = "blackpepper"
+ description = "A powder ground from peppercorns. *AAAACHOOO*"
+ reagent_state = SOLID
+ // no color (ie, black)
+
+/datum/reagent/coco
+ name = "Coco Powder"
+ id = "coco"
+ description = "A fatty, bitter paste made from coco beans."
+ reagent_state = SOLID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/coco/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/hot_coco
+ name = "Hot Chocolate"
+ id = "hot_coco"
+ description = "Made with love! And coco beans."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#403010" // rgb: 64, 48, 16
+
+/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob)
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/psilocybin
+ name = "Psilocybin"
+ id = "psilocybin"
+ description = "A strong psycotropic derived from certain species of mushroom."
+ color = "#E700E7" // rgb: 231, 0, 231
+
+/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 30)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 5)
+ if (!M.stuttering) M.stuttering = 1
+ M.Dizzy(5)
+ if(prob(10)) M.emote(pick("twitch","giggle"))
+ if(5 to 10)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(10)
+ M.Dizzy(10)
+ M.druggy = max(M.druggy, 35)
+ if(prob(20)) M.emote(pick("twitch","giggle"))
+ if (10 to INFINITY)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(20)
+ M.Dizzy(20)
+ M.druggy = max(M.druggy, 40)
+ if(prob(30)) M.emote(pick("twitch","giggle"))
+ data++
+ ..()
+ return
+
+
+/datum/reagent/sprinkles
+ name = "Sprinkles"
+ id = "sprinkles"
+ description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FF00FF" // rgb: 255, 0, 255
+
+/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+
+/datum/reagent/cornoil
+ name = "Corn Oil"
+ id = "cornoil"
+ description = "An oil derived from various types of corn."
+ reagent_state = LIQUID
+ nutriment_factor = 20 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 3)
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
+
+ spawn(800)
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot)
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+
+
+/datum/reagent/enzyme
+ name = "Denatured Enzyme"
+ id = "enzyme"
+ description = "Heated beyond usefulness, this enzyme is now worthless."
+ reagent_state = LIQUID
+ color = "#282314" // rgb: 54, 94, 48
+
+
+/datum/reagent/dry_ramen
+ name = "Dry Ramen"
+ id = "dry_ramen"
+ description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/hot_ramen
+ name = "Hot Ramen"
+ id = "hot_ramen"
+ description = "The noodles are boiled, the flavors are artificial, just like being back in school."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ ..()
+ return
+
+
+/datum/reagent/hell_ramen
+ name = "Hell Ramen"
+ id = "hell_ramen"
+ description = "The noodles are boiled, the flavors are artificial, just like being back in school."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ ..()
+ return
+
+
+/datum/reagent/flour
+ name = "flour"
+ id = "flour"
+ description = "This is what you rub all over yourself to pretend to be a ghost."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FFFFFF" // rgb: 0, 0, 0
+
+/datum/reagent/flour/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/flour/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/flour(T)
+
+
+/datum/reagent/rice
+ name = "Rice"
+ id = "rice"
+ description = "Enjoy the great taste of nothing."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FFFFFF" // rgb: 0, 0, 0
+
+/datum/reagent/rice/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/cherryjelly
+ name = "Cherry Jelly"
+ id = "cherryjelly"
+ description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
+ reagent_state = LIQUID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#801E28" // rgb: 128, 30, 40
+
+/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/toxin/coffeepowder
+ name = "Coffee Grounds"
+ id = "coffeepowder"
+ description = "Finely ground Coffee beans, used to make coffee."
+ reagent_state = SOLID
+ color = "#5B2E0D" // rgb: 91, 46, 13
+
+/datum/reagent/toxin/teapowder
+ name = "Ground Tea Leaves"
+ id = "teapowder"
+ description = "Finely shredded Tea leaves, used for making tea."
+ reagent_state = SOLID
+ color = "#7F8400" // rgb: 127, 132, 0
+
+//Reagents used for plant fertilizers.
+/datum/reagent/toxin/fertilizer
+ name = "fertilizer"
+ id = "fertilizer"
+ description = "A chemical mix good for growing plants with."
+ reagent_state = LIQUID
+// toxpwr = 0.2 //It's not THAT poisonous.
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/toxin/fertilizer/eznutrient
+ name = "EZ Nutrient"
+ id = "eznutrient"
+
+/datum/reagent/toxin/fertilizer/left4zed
+ name = "Left-4-Zed"
+ id = "left4zed"
+
+/datum/reagent/toxin/fertilizer/robustharvest
+ name = "Robust Harvest"
+ id = "robustharvest"
+
+
+/datum/reagent/sugar
+ name = "Sugar"
+ id = "sugar"
+ description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
+ reagent_state = SOLID
+ color = "#FFFFFF" // rgb: 255, 255, 255
+ overdose_threshold = 200 // Hyperglycaemic shock
+
+/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob)
+ if(prob(4))
+ M.reagents.add_reagent("epinephrine", 1.2)
+ if(prob(50))
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ if(current_cycle >= 90)
+ M.jitteriness += 10
+ ..()
+ return
+
+/datum/reagent/sugar/overdose_process(var/mob/living/M as mob)
+ if(volume > 200)
+ M << "You pass out from hyperglycemic shock!"
+ M.Paralyse(1)
+ if(prob(8))
+ M.adjustToxLoss(rand(1,2))
+ ..()
+ return
diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm
new file mode 100644
index 00000000000..696fa6354a5
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm
@@ -0,0 +1,152 @@
+/datum/reagent/hydrocodone
+ name = "Hydrocodone"
+ id = "hydrocodone"
+ description = "An extremely effective painkiller; may have long term abuse consequences."
+ reagent_state = LIQUID
+ color = "#C805DC"
+ metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
+ shock_reduction = 200
+
+/datum/reagent/hydrocodone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ ..()
+ return
+
+/datum/reagent/virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#899613" // rgb: 137, 150, 19
+
+/datum/reagent/virus_food/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.nutrition += nutriment_factor*REM
+ ..()
+ return
+
+/datum/reagent/sterilizine
+ name = "Sterilizine"
+ id = "sterilizine"
+ description = "Sterilizes wounds in preparation for surgery."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
+ //makes you squeaky clean
+/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if (method == TOUCH)
+ M.germ_level -= min(volume*20, M.germ_level)
+
+/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume)
+ O.germ_level -= min(volume*20, O.germ_level)
+
+/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume)
+ T.germ_level -= min(volume*20, T.germ_level)
+
+/datum/reagent/synaptizine
+ name = "Synaptizine"
+ id = "synaptizine"
+ description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
+ reagent_state = LIQUID
+ color = "#FA46FA"
+
+/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ if(prob(50))
+ M.adjustBrainLoss(-1.0)
+ ..()
+ return
+
+/datum/reagent/audioline
+ name = "Audioline"
+ id = "audioline"
+ description = "Heals ear damage."
+ reagent_state = LIQUID
+ color = "#6600FF" // rgb: 100, 165, 255
+
+/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.ear_damage = 0
+ M.ear_deaf = 0
+ ..()
+ return
+
+/datum/reagent/mitocholide
+ name = "Mitocholide"
+ id = "mitocholide"
+ description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
+/datum/reagent/mitocholide/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ //Mitocholide is hard enough to get, it's probably fair to make this all internal organs
+ for(var/name in H.internal_organs_by_name)
+ var/obj/item/organ/I = H.internal_organs_by_name[name]
+ if(I.damage > 0)
+ I.damage -= 0.20
+ ..()
+ return
+
+/datum/reagent/cryoxadone
+ name = "Cryoxadone"
+ id = "cryoxadone"
+ description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly."
+ reagent_state = LIQUID
+ color = "#0000C8" // rgb: 200, 165, 220
+
+/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.bodytemperature < 265)
+ M.adjustCloneLoss(-4)
+ M.adjustOxyLoss(-10)
+ M.heal_organ_damage(12,12)
+ M.adjustToxLoss(-3)
+ M.status_flags &= ~DISFIGURED
+ ..()
+ return
+
+/datum/reagent/rezadone
+ name = "Rezadone"
+ id = "rezadone"
+ description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
+ reagent_state = SOLID
+ color = "#669900" // rgb: 102, 153, 0
+
+/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ data++
+ switch(data)
+ if(1 to 15)
+ M.adjustCloneLoss(-1)
+ M.heal_organ_damage(1,1)
+ if(15 to 35)
+ M.adjustCloneLoss(-2)
+ M.heal_organ_damage(2,1)
+ M.status_flags &= ~DISFIGURED
+ if(35 to INFINITY)
+ M.adjustToxLoss(1)
+ M.Dizzy(5)
+ M.Jitter(5)
+
+ ..()
+ return
+
+/datum/reagent/spaceacillin
+ name = "Spaceacillin"
+ id = "spaceacillin"
+ description = "An all-purpose antibiotic agent extracted from space fungus."
+ reagent_state = LIQUID
+ color = "#0AB478"
+
+/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob)
+ ..()
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_misc.dm b/code/modules/reagents/oldchem/reagents/reagents_misc.dm
new file mode 100644
index 00000000000..8c3352243eb
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_misc.dm
@@ -0,0 +1,222 @@
+/*/datum/reagent/silicate
+ name = "Silicate"
+ id = "silicate"
+ description = "A compound that can be used to reinforce glass."
+ reagent_state = LIQUID
+ color = "#C7FFFF" // rgb: 199, 255, 255
+
+/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume)
+ src = null
+ if(istype(O,/obj/structure/window))
+ if(O:silicate <= 200)
+
+ O:silicate += volume
+ O:health += volume * 3
+
+ if(!O:silicateIcon)
+ var/icon/I = icon(O.icon,O.icon_state,O.dir)
+
+ var/r = (volume / 100) + 1
+ var/g = (volume / 70) + 1
+ var/b = (volume / 50) + 1
+ I.SetIntensity(r,g,b)
+ O.icon = I
+ O:silicateIcon = I
+ else
+ var/icon/I = O:silicateIcon
+
+ var/r = (volume / 100) + 1
+ var/g = (volume / 70) + 1
+ var/b = (volume / 50) + 1
+ I.SetIntensity(r,g,b)
+ O.icon = I
+ O:silicateIcon = I
+
+ return*/
+
+
+/datum/reagent/oxygen
+ name = "Oxygen"
+ id = "oxygen"
+ description = "A colorless, odorless gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(M.stat == 2) return
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
+ M.adjustToxLoss(REAGENTS_METABOLISM)
+ holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
+ return
+ ..()
+
+
+/datum/reagent/nitrogen
+ name = "Nitrogen"
+ id = "nitrogen"
+ description = "A colorless, odorless, tasteless gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(M.stat == 2) return
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
+ M.adjustOxyLoss(-2*REM)
+ holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
+ return
+ ..()
+
+
+/datum/reagent/hydrogen
+ name = "Hydrogen"
+ id = "hydrogen"
+ description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/potassium
+ name = "Potassium"
+ id = "potassium"
+ description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
+ reagent_state = SOLID
+ color = "#A0A0A0" // rgb: 160, 160, 160
+
+
+/datum/reagent/sulfur
+ name = "Sulfur"
+ id = "sulfur"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#BF8C00" // rgb: 191, 140, 0
+
+
+/datum/reagent/sodium
+ name = "Sodium"
+ id = "sodium"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/phosphorus
+ name = "Phosphorus"
+ id = "phosphorus"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#832828" // rgb: 131, 40, 40
+
+
+/datum/reagent/carbon
+ name = "Carbon"
+ id = "carbon"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#1C1300" // rgb: 30, 20, 0
+
+/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
+ src = null
+ // Only add one dirt per turf. Was causing people to crash.
+ if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T))
+ new /obj/effect/decal/cleanable/dirt(T)
+
+
+/datum/reagent/gold
+ name = "Gold"
+ id = "gold"
+ description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
+ reagent_state = SOLID
+ color = "#F7C430" // rgb: 247, 196, 48
+
+
+/datum/reagent/silver
+ name = "Silver"
+ id = "silver"
+ description = "A lustrous metallic element regarded as one of the precious metals."
+ reagent_state = SOLID
+ color = "#D0D0D0" // rgb: 208, 208, 208
+
+
+/datum/reagent/aluminum
+ name = "Aluminum"
+ id = "aluminum"
+ description = "A silvery white and ductile member of the boron group of chemical elements."
+ reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
+
+
+/datum/reagent/silicon
+ name = "Silicon"
+ id = "silicon"
+ description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
+ reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
+
+
+/datum/reagent/copper
+ name = "Copper"
+ id = "copper"
+ description = "A highly ductile metal."
+ color = "#6E3B08" // rgb: 110, 59, 8
+
+
+/datum/reagent/iron
+ name = "Iron"
+ id = "iron"
+ description = "Pure iron is a metal."
+ reagent_state = SOLID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+/*
+/datum/reagent/iron/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if((M.virus) && (prob(8) && (M.virus.name=="Magnitis")))
+ if(M.virus.spread == "Airborne")
+ M.virus.spread = "Remissive"
+ M.virus.stage--
+ if(M.virus.stage <= 0)
+ M.resistances += M.virus.type
+ M.virus = null
+ holder.remove_reagent(src.id, 0.2)
+ return
+*/
+
+
+
+//foam
+/datum/reagent/fluorosurfactant
+ name = "Fluorosurfactant"
+ id = "fluorosurfactant"
+ description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
+ reagent_state = LIQUID
+ color = "#9E6B38" // rgb: 158, 107, 56
+
+// metal foaming agent
+// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
+/datum/reagent/ammonia
+ name = "Ammonia"
+ id = "ammonia"
+ description = "A caustic substance commonly used in fertilizer or household cleaners."
+ reagent_state = GAS
+ color = "#404030" // rgb: 64, 64, 48
+
+/datum/reagent/diethylamine
+ name = "Diethylamine"
+ id = "diethylamine"
+ description = "A secondary amine, useful as a plant nutrient and as building block for other compounds."
+ reagent_state = LIQUID
+ color = "#322D00"
+
+
+// Ported from Bay as part of the Botany Update
+// Allows you to make planks from any plant that has this reagent in it.
+// Also vines with this reagent are considered dense.
+/datum/reagent/woodpulp
+ name = "Wood Pulp"
+ id = "woodpulp"
+ description = "A mass of wood fibers."
+ reagent_state = LIQUID
+ color = "#B97A57"
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
new file mode 100644
index 00000000000..89bc66cda68
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
@@ -0,0 +1,597 @@
+/datum/reagent/toxin
+ name = "Toxin"
+ id = "toxin"
+ description = "A Toxic chemical."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(2)
+ ..()
+ return
+
+
+/datum/reagent/spider_venom
+ name = "Spider venom"
+ id = "spidertoxin"
+ description = "A toxic venom injected by spacefaring arachnids."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/spider_venom/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1.5)
+ ..()
+ return
+
+
+/datum/reagent/plasticide
+ name = "Plasticide"
+ id = "plasticide"
+ description = "Liquid plastic, do not eat."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1.5)
+ ..()
+ return
+
+
+/datum/reagent/minttoxin
+ name = "Mint Toxin"
+ id = "minttoxin"
+ description = "Useful for dealing with undesirable customers."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/minttoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if (FAT in M.mutations)
+ M.gib()
+ ..()
+ return
+
+
+/datum/reagent/slimejelly
+ name = "Slime Jelly"
+ id = "slimejelly"
+ description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
+ reagent_state = LIQUID
+ color = "#801E28" // rgb: 128, 30, 40
+
+/datum/reagent/slimejelly/on_mob_life(var/mob/living/M as mob)
+ if(prob(10))
+ M << "\red Your insides are burning!"
+ M.adjustToxLoss(rand(20,60)*REM)
+ else if(prob(40))
+ M.heal_organ_damage(5*REM,0)
+ ..()
+ return
+
+/datum/reagent/slimetoxin
+ name = "Mutation Toxin"
+ id = "mutationtoxin"
+ description = "A corruptive toxin produced by slimes."
+ reagent_state = LIQUID
+ color = "#13BC5E" // rgb: 19, 188, 94
+
+/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(ishuman(M))
+ var/mob/living/carbon/human/human = M
+ if(human.species.name != "Shadow")
+ M << "\red Your flesh rapidly mutates!"
+ M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids."
+ M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness."
+ M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations."
+ human.set_species("Shadow")
+ ..()
+ return
+
+/datum/reagent/aslimetoxin
+ name = "Advanced Mutation Toxin"
+ id = "amutationtoxin"
+ description = "An advanced corruptive toxin produced by slimes."
+ reagent_state = LIQUID
+ color = "#13BC5E" // rgb: 19, 188, 94
+
+/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(istype(M, /mob/living/carbon) && M.stat != DEAD)
+ M << "\red Your flesh rapidly mutates!"
+ if(M.notransform) return
+ M.notransform = 1
+ M.canmove = 0
+ M.icon = null
+ M.overlays.Cut()
+ M.invisibility = 101
+ for(var/obj/item/W in M)
+ if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
+ qdel(W)
+ continue
+ W.layer = initial(W.layer)
+ W.loc = M.loc
+ W.dropped(M)
+ var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
+ new_mob.a_intent = "harm"
+ new_mob.universal_speak = 1
+ if(M.mind)
+ M.mind.transfer_to(new_mob)
+ else
+ new_mob.key = M.key
+ qdel(M)
+ ..()
+ return
+
+
+/datum/reagent/mercury
+ name = "Mercury"
+ id = "mercury"
+ description = "A chemical element."
+ reagent_state = LIQUID
+ color = "#484848" // rgb: 72, 72, 72
+ metabolization_rate = 0.2
+ penetrates_skin = 1
+
+/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(70))
+ M.adjustBrainLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/chlorine
+ name = "Chlorine"
+ id = "chlorine"
+ description = "A chemical element."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+ penetrates_skin = 1
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+/datum/reagent/fluorine
+ name = "Fluorine"
+ id = "fluorine"
+ description = "A highly-reactive chemical element."
+ reagent_state = GAS
+ color = "#6A6054"
+ penetrates_skin = 1
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ M.adjustToxLoss(1*REM)
+ ..()
+ return
+
+
+/datum/reagent/radium
+ name = "Radium"
+ id = "radium"
+ description = "Radium is an alkaline earth metal. It is extremely radioactive."
+ reagent_state = SOLID
+ color = "#C7C7C7" // rgb: 199,199,199
+ metabolization_rate = 0.4
+ penetrates_skin = 1
+
+/datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.apply_effect(4*REM,IRRADIATE,0)
+ // radium may increase your chances to cure a disease
+ if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
+ var/mob/living/carbon/C = M
+ if(C.virus2.len)
+ for (var/ID in C.virus2)
+ var/datum/disease2/disease/V = C.virus2[ID]
+ if(prob(5))
+ if(prob(50))
+ M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead
+ M.adjustToxLoss(100)
+ C.antibodies |= V.antigen
+ ..()
+ return
+
+/datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 3)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/greenglow(T)
+ return
+
+
+/datum/reagent/mutagen
+ name = "Unstable mutagen"
+ id = "mutagen"
+ description = "Might cause unpredictable mutations. Keep away from children."
+ reagent_state = LIQUID
+ color = "#04DF27"
+ metabolization_rate = 0.3
+
+/datum/reagent/mutagen/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(!..()) return
+ if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
+ src = null
+ if((method==TOUCH && prob(33)) || method==INGEST)
+ if(prob(98))
+ randmutb(M)
+ else
+ randmutg(M)
+ domutcheck(M, null)
+ M.UpdateAppearance()
+ return
+
+/datum/reagent/mutagen/on_mob_life(var/mob/living/M as mob)
+ if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
+ if(!M) M = holder.my_atom
+ M.apply_effect(2*REM,IRRADIATE,0)
+ if(prob(4))
+ randmutb(M)
+ ..()
+ return
+
+
+/datum/reagent/uranium
+ name ="Uranium"
+ id = "uranium"
+ description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
+ reagent_state = SOLID
+ color = "#B8B8C0" // rgb: 184, 184, 192
+
+/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.apply_effect(2,IRRADIATE,0)
+ ..()
+ return
+
+/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 3)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/greenglow(T)
+
+
+/datum/reagent/lexorin
+ name = "Lexorin"
+ id = "lexorin"
+ description = "Lexorin temporarily stops respiration. Causes tissue damage."
+ reagent_state = LIQUID
+ color = "#52685D"
+ metabolization_rate = 0.2
+
+/datum/reagent/lexorin/on_mob_life(var/mob/living/M as mob)
+ if(M.stat == 2.0)
+ return
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/sacid
+ name = "Sulphuric acid"
+ id = "sacid"
+ description = "A strong mineral acid with the molecular formula H2SO4."
+ reagent_state = LIQUID
+ color = "#00D72B"
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/sacid/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ if(volume > 25)
+
+ if(H.wear_mask)
+ H << "\red Your mask protects you from the acid!"
+ return
+
+ if(H.head)
+ H << "\red Your helmet protects you from the acid!"
+ return
+
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(20, 0)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(15,0)
+ else
+ M.take_organ_damage(15,0)
+
+ if(method == INGEST)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ if(volume < 10)
+ M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!"
+
+ if(volume >=10 && volume <=25)
+ if(!H.unacidable)
+ M.take_organ_damage(min(max(volume-10,2)*2,20),0)
+ M.emote("scream")
+
+
+ if(volume > 25)
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(20, 0)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(15,0)
+
+/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume)
+ if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
+ if(!O.unacidable)
+ var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
+ I.desc = "Looks like this was \an [O] some time ago."
+ for(var/mob/M in viewers(5, O))
+ M << "\red \the [O] melts."
+ qdel(O)
+
+
+/datum/reagent/hellwater
+ name = "Hell Water"
+ id = "hell_water"
+ description = "YOUR FLESH! IT BURNS!"
+ process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
+
+/datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob)
+ M.fire_stacks = min(5,M.fire_stacks + 3)
+ M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
+ M.adjustToxLoss(1)
+ M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
+ M.adjustBrainLoss(5)
+ holder.remove_reagent(src.id, 1)
+
+
+/datum/reagent/carpotoxin
+ name = "Carpotoxin"
+ id = "carpotoxin"
+ description = "A deadly neurotoxin produced by the dreaded spess carp."
+ reagent_state = LIQUID
+ color = "#003333" // rgb: 0, 51, 51
+
+/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(2*REM)
+ ..()
+ return
+
+
+/datum/reagent/staminatoxin
+ name = "Tirizene"
+ id = "tirizene"
+ description = "A toxin that affects the stamina of a person when injected into the bloodstream."
+ reagent_state = LIQUID
+ color = "#6E2828"
+ data = 13
+
+/datum/reagent/staminatoxin/on_mob_life(var/mob/living/M)
+ M.adjustStaminaLoss(REM * data)
+ data = max(data - 1, 3)
+ ..()
+
+
+/datum/reagent/spores
+ name = "Spore Toxin"
+ id = "spores"
+ description = "A toxic spore cloud which blocks vision when ingested."
+ color = "#9ACD32"
+
+/datum/reagent/spores/on_mob_life(var/mob/living/M as mob)
+ M.adjustToxLoss(0.5)
+ M.damageoverlaytemp = 60
+ M.eye_blurry = max(M.eye_blurry, 3)
+ ..()
+ return
+
+
+/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots
+ name = "Beer"
+ id = "beer2"
+ description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/beer2/on_mob_life(var/mob/living/M as mob)
+ if(!data)
+ data = 1
+ switch(data)
+ if(1 to 50)
+ M.sleeping += 1
+ if(51 to INFINITY)
+ M.sleeping += 1
+ M.adjustToxLoss((data - 50)*REM)
+ data++
+ holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
+ ..()
+ return
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/*
+/datum/reagent/nanomachines
+ name = "Nanomachines"
+ id = "nanomachines"
+ description = "Microscopic construction robots."
+ reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/nanomachines/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ src = null
+ if( (prob(10) && method==TOUCH) || method==INGEST)
+ M.contract_disease(new /datum/disease/robotic_transformation(0),1)
+
+/datum/reagent/xenomicrobes
+ name = "Xenomicrobes"
+ id = "xenomicrobes"
+ description = "Microbes with an entirely alien cellular structure."
+ reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ src = null
+ if( (prob(10) && method==TOUCH) || method==INGEST)
+ M.contract_disease(new /datum/disease/xeno_transformation(0),1)
+*/
+
+/datum/reagent/spore
+ name = "Blob Spores"
+ id = "spore"
+ description = "Spores of some blob creature thingy."
+ reagent_state = LIQUID
+ color = "#CE760A" // rgb: 206, 118, 10
+ var/client/blob_client = null
+ var/blob_point_rate = 3
+
+/datum/reagent/spore/on_mob_life(var/mob/living/M)
+ if(!M) M = holder.my_atom
+ if (holder.has_reagent("atrazine",45))
+ holder.del_reagent("spore")
+ if (prob(1))
+ M << "\red Your mouth tastes funny."
+ if (prob(1) && prob(25))
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(directory[ckey(C.key)])
+ blob_client = directory[ckey(C.key)]
+ C.gib()
+ if(blob_client)
+ var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
+ if(core.overmind && core.overmind.mind)
+ core.overmind.mind.name = C.name
+
+ return
+
+/datum/reagent/condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ description = "This shit goes in pepperspray."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 179, 16, 8
+
+/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/victim = M
+ var/mouth_covered = 0
+ var/eyes_covered = 0
+ var/obj/item/safe_thing = null
+ if( victim.wear_mask )
+ if ( victim.wear_mask.flags & MASKCOVERSEYES )
+ eyes_covered = 1
+ safe_thing = victim.wear_mask
+ if ( victim.wear_mask.flags & MASKCOVERSMOUTH )
+ mouth_covered = 1
+ safe_thing = victim.wear_mask
+ if( victim.head )
+ if ( victim.head.flags & MASKCOVERSEYES )
+ eyes_covered = 1
+ safe_thing = victim.head
+ if ( victim.head.flags & MASKCOVERSMOUTH )
+ mouth_covered = 1
+ safe_thing = victim.head
+ if(victim.glasses)
+ eyes_covered = 1
+ if ( !safe_thing )
+ safe_thing = victim.glasses
+ if ( eyes_covered && mouth_covered )
+ victim << "\red Your [safe_thing] protects you from the pepperspray!"
+ return
+ else if ( mouth_covered ) // Reduced effects if partially protected
+ victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
+ if(prob(5))
+ victim.emote("scream")
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.eye_blind = max(M.eye_blind, 1)
+ victim.confused = max(M.confused, 3)
+ victim.damageoverlaytemp = 60
+ victim.Weaken(3)
+ victim.drop_item()
+ return
+ else if ( eyes_covered ) // Eye cover is better than mouth cover
+ victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.damageoverlaytemp = 30
+ return
+ else // Oh dear :D
+ if(prob(5))
+ victim.emote("scream")
+ victim << "\red You're sprayed directly in the eyes with pepperspray!"
+ victim.eye_blurry = max(M.eye_blurry, 5)
+ victim.eye_blind = max(M.eye_blind, 2)
+ victim.confused = max(M.confused, 6)
+ victim.damageoverlaytemp = 75
+ victim.Weaken(5)
+ victim.drop_item()
+
+/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
+ ..()
+ return
+
+/datum/reagent/frostoil
+ name = "Frost Oil"
+ id = "frostoil"
+ description = "A special oil that noticably chills the body. Extraced from Icepeppers."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 139, 166, 233
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(5,20)
+ if(15 to 25)
+ M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(prob(1))
+ M.emote("shiver")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(15,20)
+ data++
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume)
+ for(var/mob/living/carbon/slime/M in T)
+ M.adjustToxLoss(rand(15,30))
diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm
new file mode 100644
index 00000000000..12dfe89bb28
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm
@@ -0,0 +1,351 @@
+/*
+// Frankly, this is just for chemicals that are sortof 'watery', which really didn't seem to fit under any other file
+// Current chems: Water, Space Lube, Space Cleaner, Blood, Fish Water, Holy water
+//
+//
+*/
+
+
+
+/datum/reagent/water
+ name = "Water"
+ id = "water"
+ description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
+ reagent_state = LIQUID
+ color = "#0064C8" // rgb: 0, 100, 200
+ var/cooling_temperature = 2
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+
+// Put out fire
+ if(method == TOUCH)
+ M.adjust_fire_stacks(-(volume / 10))
+ if(M.fire_stacks <= 0)
+ M.ExtinguishMob()
+ return
+
+/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 3)
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
+
+ spawn(800)
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+
+ for(var/mob/living/carbon/slime/M in T)
+ M.apply_water()
+
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+ return
+
+/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
+ src = null
+ var/turf/T = get_turf(O)
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+ if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
+ if(!cube.wrapped)
+ cube.Expand()
+ // Dehydrated carp
+ if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
+ var/obj/item/toy/carpplushie/dehy_carp/dehy = O
+ dehy.Swell() // Makes a carp
+ return
+
+
+/datum/reagent/lube
+ name = "Space Lube"
+ id = "lube"
+ description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
+ reagent_state = LIQUID
+ color = "#1BB1AB"
+
+/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 1)
+ if(T.wet >= 2) return
+ T.wet = 2
+ spawn(800)
+ if (!istype(T)) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ return
+
+
+/datum/reagent/space_cleaner
+ name = "Space cleaner"
+ id = "cleaner"
+ description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
+ reagent_state = LIQUID
+ color = "#61C2C2"
+
+/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
+ if(O)
+ O.color = initial(O.color)
+ if(istype(O,/obj/effect/decal/cleanable))
+ qdel(O)
+ else
+ if(O)
+ O.clean_blood()
+
+/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
+ if(volume >= 1)
+ if(T)
+ T.color = initial(T.color)
+ T.overlays.Cut()
+ T.clean_blood()
+ for(var/obj/effect/decal/cleanable/C in src)
+ qdel(C)
+
+ for(var/mob/living/carbon/slime/M in T)
+ M.adjustToxLoss(rand(5,10))
+ if(istype(T,/turf/simulated))
+ var/turf/simulated/S = T
+ S.dirt = 0
+
+/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.lip_style)
+ H.lip_style = null
+ H.update_body()
+ if(C.r_hand)
+ C.r_hand.clean_blood()
+ if(C.l_hand)
+ C.l_hand.clean_blood()
+ if(C.wear_mask)
+ if(C.wear_mask.clean_blood())
+ C.update_inv_wear_mask(0)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = C
+ if(H.head)
+ if(H.head.clean_blood())
+ H.update_inv_head(0,0)
+ if(H.wear_suit)
+ if(H.wear_suit.clean_blood())
+ H.update_inv_wear_suit(0,0)
+ else if(H.w_uniform)
+ if(H.w_uniform.clean_blood())
+ H.update_inv_w_uniform(0,0)
+ if(H.shoes)
+ if(H.shoes.clean_blood())
+ H.update_inv_shoes(0,0)
+ M.clean_blood()
+ ..()
+ return
+
+
+/datum/reagent/blood
+ data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null)
+ name = "Blood"
+ id = "blood"
+ reagent_state = LIQUID
+ color = "#C80000" // rgb: 200, 0, 0
+
+/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ var/datum/reagent/blood/self = src
+ src = null
+ if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
+ var/list/vlist = self.data["virus2"]
+ if (vlist.len)
+ for (var/ID in vlist)
+ var/datum/disease2/disease/V = vlist[ID]
+
+ if(method == TOUCH)
+ infect_virus2(M,V.getcopy())
+ else
+ infect_virus2(M,V.getcopy(),1) //injected, force infection!
+ if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
+ var/mob/living/carbon/C = M
+ C.antibodies |= self.data["antibodies"]
+
+/datum/reagent/blood/on_merge(var/data)
+ if(data["blood_colour"])
+ color = data["blood_colour"]
+ return ..()
+
+/datum/reagent/blood/on_update(var/atom/A)
+ if(data["blood_colour"])
+ color = data["blood_colour"]
+ return ..()
+
+
+
+/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
+ if(!istype(T)) return
+ var/datum/reagent/blood/self = src
+ src = null
+ if(!(volume >= 3)) return
+ //var/datum/disease/D = self.data["virus"]
+ if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
+ var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
+ if(!blood_prop) //first blood!
+ blood_prop = new(T)
+ blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
+
+ if(self.data["virus2"])
+ blood_prop.virus2 = virus_copylist(self.data["virus2"])
+
+ else if(istype(self.data["donor"], /mob/living/carbon/alien))
+ var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T
+ if(!blood_prop)
+ blood_prop = new(T)
+ blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
+ return
+
+
+/datum/reagent/fishwater
+ name = "Fish Water"
+ id = "fishwater"
+ description = "Smelly water from a fish tank. Gross!"
+ reagent_state = LIQUID
+ color = "#757547"
+
+/datum/reagent/fishwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == INGEST)
+ M << "Oh god, why did you drink that?"
+
+/datum/reagent/fishwater/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
+ if(prob(50)) // 50/50 chance of green vomit vs normal vomit
+ M.fakevomit(1)
+ else
+ M.fakevomit(0)
+ ..()
+ return
+
+
+/datum/reagent/holywater
+ name = "Water"
+ id = "holywater"
+ description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
+ reagent_state = LIQUID
+ color = "#0064C8" // rgb: 0, 100, 200
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/holywater/on_mob_life(var/mob/living/M as mob)
+ if(!data) data = 1
+ data++
+ M.jitteriness = max(M.jitteriness-5,0)
+ if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
+ if (!M.stuttering) M.stuttering = 1
+ M.stuttering += 4
+ M.Dizzy(5)
+ if(iscultist(M) && prob(5))
+ M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
+ if(data >= 75 && prob(33)) // 30 units, 150 seconds
+ if (!M.confused) M.confused = 1
+ M.confused += 3
+ if(iscultist(M))
+ ticker.mode.remove_cultist(M.mind)
+ holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
+ M.jitteriness = 0
+ M.stuttering = 0
+ M.confused = 0
+ if(ishuman(M)) .
+ if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80))
+ switch(data)
+ if(1 to 4)
+ M << "Something sizzles in your veins!"
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ if(5 to 12)
+ M << "You feel an intense burning inside of you!"
+ M.adjustFireLoss(1)
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ if(13 to INFINITY)
+ M << "You suddenly ignite in a holy fire!"
+ for(var/mob/O in viewers(M, null))
+ O.show_message(text("[] suddenly bursts into flames!", M), 1)
+ M.fire_stacks = min(5,M.fire_stacks + 3)
+ M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
+ M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ ..()
+ return
+
+
+/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ // Vampires have their powers weakened by holy water applied to the skin.
+ if(ishuman(M))
+ if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers))
+ var/mob/living/carbon/human/H=M
+ if(method == TOUCH)
+ if(H.wear_mask)
+ H << "\red Your mask protects you from the holy water!"
+ return
+ else if(H.head)
+ H << "\red Your helmet protects you from the holy water!"
+ return
+ else
+ M << "Something holy interferes with your powers!"
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ return
+
+
+/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
+ ..()
+ if(!istype(T)) return
+ if(volume>=10)
+ for(var/obj/effect/rune/R in T)
+ qdel(R)
+ T.Bless()
+
+/*
+/datum/reagent/vaccine
+ //data must contain virus type
+ name = "Vaccine"
+ id = "vaccine"
+ reagent_state = LIQUID
+ color = "#C81040" // rgb: 200, 16, 64
+
+/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ var/datum/reagent/vaccine/self = src
+ src = null
+ if(self.data&&method == INGEST)
+ for(var/datum/disease/D in M.viruses)
+ if(istype(D, /datum/disease/advance))
+ var/datum/disease/advance/A = D
+ if(A.GetDiseaseID() == self.data)
+ D.cure()
+ else
+ if(D.type == self.data)
+ D.cure()
+
+ M.resistances += self.data
+ return
+*/
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 374f9cf603a..97c2693e439 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -175,6 +175,7 @@
force = 14
throwforce = 10
amount_per_transfer_from_this = 20
+ materials = list(MAT_GOLD=800)
possible_transfer_amounts = null
volume = 150
flags = CONDUCT | OPENCONTAINER
@@ -357,12 +358,14 @@
name = "Captain's Flask"
desc = "A metal flask belonging to the captain"
icon_state = "flask"
+ materials = list(MAT_SILVER=300)
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "Detective's Flask"
desc = "A metal flask with a leather band and golden badge belonging to the detective."
icon_state = "detflask"
+ materials = list(MAT_METAL=200)
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index ce50606d7c5..0338cc9ff89 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -6,7 +6,7 @@
icon_state = "glass_empty"
amount_per_transfer_from_this = 10
volume = 50
- g_amt = 500
+ materials = list(MAT_GLASS=500)
proc/smash(mob/living/target as mob, mob/living/user as mob)
diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm
index 608fbc405be..617255f133f 100644
--- a/code/modules/reagents/reagent_containers/glass_containers.dm
+++ b/code/modules/reagents/reagent_containers/glass_containers.dm
@@ -181,8 +181,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker"
item_state = "beaker"
- m_amt = 0
- g_amt = 500
+ materials = list(MAT_GLASS=500)
var/obj/item/device/assembly_holder/assembly = null
on_reagent_change()
@@ -276,7 +275,7 @@
name = "large beaker"
desc = "A large beaker. Can hold up to 100 units."
icon_state = "beakerlarge"
- g_amt = 2500
+ materials = list(MAT_GLASS=2500)
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
@@ -286,7 +285,7 @@
name = "vial"
desc = "A small glass vial. Can hold up to 25 units."
icon_state = "vial"
- g_amt = 250
+ materials = list(MAT_GLASS=250)
volume = 25
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25)
@@ -296,7 +295,7 @@
name = "cryostasis beaker"
desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
icon_state = "beakernoreact"
- g_amt = 500
+ materials = list(MAT_GLASS=500)
volume = 50
amount_per_transfer_from_this = 10
flags = OPENCONTAINER | NOREACT
@@ -305,7 +304,7 @@
name = "bluespace beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
icon_state = "beakerbluespace"
- g_amt = 5000
+ materials = list(MAT_GLASS=5000)
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
@@ -335,8 +334,7 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "bucket"
item_state = "bucket"
- m_amt = 200
- g_amt = 0
+ materials = list(MAT_METAL=200)
w_class = 3.0
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120)
@@ -357,7 +355,7 @@
name = "vial"
desc = "Small glass vial. Looks fragile."
icon_state = "vial"
- g_amt = 500
+ materials = list(MAT_GLASS=500)
volume = 15
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1,5,15)
@@ -386,8 +384,7 @@
icon = 'icons/obj/tank.dmi'
icon_state = "canister"
item_state = "canister"
- m_amt = 300
- g_amt = 0
+ materials = list(MAT_METAL=300)
w_class = 4.0
amount_per_transfer_from_this = 20
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index cd306a78e49..6c3b0db41e0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -12,60 +12,60 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
- attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+ return
+
+/obj/structure/reagent_dispensers/New()
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ if (!possible_transfer_amounts)
+ src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
+ ..()
+
+/obj/structure/reagent_dispensers/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\blue It contains:"
+ if(reagents && reagents.reagent_list.len)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "\blue [R.volume] units of [R.name]"
+ else
+ usr << "\blue Nothing."
+
+/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in view(1)
+ if(usr.stat || !usr.canmove || usr.restrained())
return
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
- New()
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
- if (!possible_transfer_amounts)
- src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
- ..()
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in view(1)
- if(usr.stat || !usr.canmove || usr.restrained())
+/obj/structure/reagent_dispensers/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ qdel(src)
return
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- ex_act(severity)
- switch(severity)
- if(1.0)
+ if(2.0)
+ if (prob(50))
+ new /obj/effect/effect/water(src.loc)
qdel(src)
return
- if(2.0)
- if (prob(50))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- if(3.0)
- if (prob(5))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- else
- return
+ if(3.0)
+ if (prob(5))
+ new /obj/effect/effect/water(src.loc)
+ qdel(src)
+ return
+ else
+ return
- blob_act()
- if(prob(50))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
+/obj/structure/reagent_dispensers/blob_act()
+ if(prob(50))
+ new /obj/effect/effect/water(src.loc)
+ qdel(src)
@@ -80,9 +80,11 @@
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("water",1000)
+
+/obj/structure/reagent_dispensers/watertank/New()
+ ..()
+ reagents.add_reagent("water",1000)
+
/obj/structure/reagent_dispensers/fueltank
name = "fueltank"
@@ -91,22 +93,23 @@
icon_state = "weldtank"
amount_per_transfer_from_this = 10
var/obj/item/device/assembly_holder/rig = null
- New()
- ..()
- reagents.add_reagent("fuel",1000)
- bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
- if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
- message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
- log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
- explode()
+/obj/structure/reagent_dispensers/fueltank/New()
+ ..()
+ reagents.add_reagent("fuel",1000)
- blob_act()
- explosion(src.loc,0,1,5,7,10, flame_range = 5)
+/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
+ if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
+ if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
+ message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
+ log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
+ explode()
- ex_act()
- explode()
+/obj/structure/reagent_dispensers/fueltank/blob_act()
+ explosion(src.loc,0,1,5,7,10, flame_range = 5)
+
+/obj/structure/reagent_dispensers/fueltank/ex_act()
+ explode()
/obj/structure/reagent_dispensers/fueltank/examine()
set src in view()
@@ -180,6 +183,7 @@
if(rig)
rig.process_movement()
+
/obj/structure/reagent_dispensers/peppertank
name = "Pepper Spray Refiller"
desc = "Refill pepper spray canisters."
@@ -188,9 +192,10 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 45
- New()
- ..()
- reagents.add_reagent("condensedcapsaicin",1000)
+
+/obj/structure/reagent_dispensers/peppertank/New()
+ ..()
+ reagents.add_reagent("condensedcapsaicin",1000)
/obj/structure/reagent_dispensers/water_cooler
@@ -201,9 +206,10 @@
icon_state = "water_cooler"
possible_transfer_amounts = null
anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
+
+/obj/structure/reagent_dispensers/water_cooler/New()
+ ..()
+ reagents.add_reagent("water",500)
/obj/structure/reagent_dispensers/beerkeg
@@ -212,9 +218,10 @@
icon = 'icons/obj/objects.dmi'
icon_state = "beertankTEMP"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("beer",1000)
+
+/obj/structure/reagent_dispensers/beerkeg/New()
+ ..()
+ reagents.add_reagent("beer",1000)
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
@@ -229,9 +236,9 @@
anchored = 1
density = 0
- New()
- ..()
- reagents.add_reagent("virusfood", 1000)
+/obj/structure/reagent_dispensers/virusfood/New()
+ ..()
+ reagents.add_reagent("virusfood", 1000)
/obj/structure/reagent_dispensers/spacecleanertank
name = "space cleaner refiller"
@@ -241,6 +248,7 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 250
- New()
- ..()
- reagents.add_reagent("cleaner",5000)
+
+/obj/structure/reagent_dispensers/spacecleanertank/New()
+ ..()
+ reagents.add_reagent("cleaner",5000)
diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm
index ac70be0f387..18630fdbfff 100644
--- a/code/modules/reagents/syringe_gun.dm
+++ b/code/modules/reagents/syringe_gun.dm
@@ -7,7 +7,7 @@
throw_speed = 2
throw_range = 10
force = 4
- m_amt = 2000
+ materials = list(MAT_METAL=2000)
clumsy_check = 0
fire_sound = 'sound/items/syringeproj.ogg'
var/list/syringes = list()
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index a0997497d34..9e4b3661c0d 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -10,7 +10,6 @@
anchored = 0
density = 0
pressure_resistance = 5*ONE_ATMOSPHERE
- m_amt = 1850
level = 2
var/ptype = 0
// 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index dd0bfb9d0e8..249b4956953 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -72,11 +72,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
/obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M)
switch(M)
- if("$glass")
+ if(MAT_GLASS)
return (g_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
- if("$gold")
+ if(MAT_GOLD)
return (gold_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
- if("$diamond")
+ if(MAT_DIAMOND)
return (diamond_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
else
return (reagents.has_reagent(M, (being_built.materials[M]/efficiency_coeff)) != 0)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 87e413565a7..e458feb1fb5 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -9,15 +9,14 @@ For the materials datum, it assumes you need reagents unless specified otherwise
you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum),
they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents.
The currently supporting non-reagent materials:
-- $metal (/obj/item/stack/metal). One sheet = 3750 units.
-- $glass (/obj/item/stack/glass). One sheet = 3750 units.
-- $plasma (/obj/item/stack/plasma). One sheet = 3750 units.
-- $plasteel (/obj/item/stack/sheet/plasteel). One sheet = 3750 units.
-- $silver (/obj/item/stack/silver). One sheet = 3750 units.
-- $gold (/obj/item/stack/gold). One sheet = 3750 units.
-- $uranium (/obj/item/stack/uranium). One sheet = 3750 units.
-- $diamond (/obj/item/stack/diamond). One sheet = 3750 units.
-- $clown (/obj/item/stack/clown). One sheet = 3750 units. ("Bananium")
+- MAT_METAL (/obj/item/stack/metal).
+- MAT_GLASS (/obj/item/stack/glass).
+- MAT_PLASMA (/obj/item/stack/plasma).
+- MAT_SILVER (/obj/item/stack/silver).
+- MAT_GOLD (/obj/item/stack/gold).
+- MAT_URANIUM (/obj/item/stack/uranium).
+- MAT_DIAMOND (/obj/item/stack/diamond).
+- MAT_BANANIUM (/obj/item/stack/bananium).
(Insert new ones here)
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm
index f58f8075893..01de6f63848 100644
--- a/code/modules/research/designs/AI_module_designs.dm
+++ b/code/modules/research/designs/AI_module_designs.dm
@@ -8,27 +8,27 @@
id = "freeform_module"
req_tech = list("programming" = 4, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/freeform
category = list("AI Modules")
-
+
/datum/design/onecrewmember_module
name = "AI Module (oneCrewMember)"
desc = "Allows for the construction of a oneCrewMember AI Module."
id = "onecrewmember_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/oneCrewMember
category = list("AI Modules")
-
+
/datum/design/oxygen_module
name = "AI Module (OxygenIsToxicToHumans)"
desc = "Allows for the construction of a Safeguard AI Module."
id = "oxygen_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/oxygen
category = list("AI Modules")
@@ -38,9 +38,9 @@
id = "protectstation_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/protectStation
- category = list("AI Modules")
+ category = list("AI Modules")
/datum/design/purge_module
name = "AI Module (Purge)"
@@ -48,7 +48,7 @@
id = "purge_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/purge
category = list("AI Modules")
@@ -58,27 +58,27 @@
id = "quarantine_module"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/quarantine
category = list("AI Modules")
-
+
/datum/design/reset_module
name = "AI Module (Reset)"
desc = "Allows for the construction of a Reset AI Module."
id = "reset_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/reset
category = list("AI Modules")
-
+
/datum/design/safeguard_module
name = "AI Module (Safeguard)"
desc = "Allows for the construction of a Safeguard AI Module."
id = "safeguard_module"
req_tech = list("programming" = 3, "materials" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
build_path = /obj/item/weapon/aiModule/safeguard
category = list("AI Modules")
@@ -88,47 +88,47 @@
id = "antimov_module"
req_tech = list("programming" = 4, "materials" = 6, "syndicate" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/antimov
- category = list("AI Modules")
-
+ category = list("AI Modules")
+
/datum/design/asimov
name = "Core AI Module (Asimov)"
desc = "Allows for the construction of a Asimov AI Core Module."
id = "asimov_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/asimov
- category = list("AI Modules")
-
+ category = list("AI Modules")
+
/datum/design/corporate_module
name = "Core AI Module (Corporate)"
desc = "Allows for the construction of a Corporate AI Core Module."
id = "corporate_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/corp
category = list("AI Modules")
-
+
/datum/design/crewsimov
name = "Core AI Module (Crewsimov)"
desc = "Allows for the construction of a Crewsimov AI Core Module."
id = "crewsimov_module"
req_tech = list("programming" = 3, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/crewsimov
- category = list("AI Modules")
-
+ category = list("AI Modules")
+
/datum/design/freeformcore_module
name = "Core AI Module (Freeform)"
desc = "Allows for the construction of a Freeform AI Core Module."
id = "freeformcore_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/freeformcore
category = list("AI Modules")
@@ -138,7 +138,7 @@
id = "paladin_module"
req_tech = list("programming" = 4, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/paladin
category = list("AI Modules")
@@ -148,6 +148,6 @@
id = "tyrant_module"
req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/aiModule/tyrant
category = list("AI Modules")
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index d58d23f09cf..90cebcf4648 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -6,7 +6,7 @@
name = "Analyzer"
id = "analyzer"
build_type = AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
build_path = /obj/item/device/analyzer
category = list("initial","Tools")
@@ -14,7 +14,7 @@
name = "Bucket"
id = "bucket"
build_type = AUTOLATHE
- materials = list("$metal" = 200)
+ materials = list(MAT_METAL = 200)
build_path = /obj/item/weapon/reagent_containers/glass/bucket
category = list("initial","Tools")
@@ -22,7 +22,7 @@
name = "Pocket Crowbar"
id = "crowbar"
build_type = AUTOLATHE
- materials = list("$metal" = 50)
+ materials = list(MAT_METAL = 50)
build_path = /obj/item/weapon/crowbar
category = list("initial","Tools")
@@ -30,7 +30,7 @@
name = "Fire Extinguisher"
id = "extinguisher"
build_type = AUTOLATHE
- materials = list("$metal" = 90)
+ materials = list(MAT_METAL = 90)
build_path = /obj/item/weapon/extinguisher
category = list("initial","Tools")
@@ -38,7 +38,7 @@
name = "Flashlight"
id = "flashlight"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 20)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/device/flashlight
category = list("initial","Tools")
@@ -46,7 +46,7 @@
name = "Multitool"
id = "multitool"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 20)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/device/multitool
category = list("initial","Tools")
@@ -54,7 +54,7 @@
name = "Screwdriver"
id = "screwdriver"
build_type = AUTOLATHE
- materials = list("$metal" = 75)
+ materials = list(MAT_METAL = 75)
build_path = /obj/item/weapon/screwdriver
category = list("initial","Tools")
@@ -62,7 +62,7 @@
name = "T-ray Scanner"
id = "tscanner"
build_type = AUTOLATHE
- materials = list("$metal" = 150)
+ materials = list(MAT_METAL = 150)
build_path = /obj/item/device/t_scanner
category = list("initial","Tools")
@@ -70,7 +70,7 @@
name = "Welding Helmet"
id = "welding_helmet"
build_type = AUTOLATHE
- materials = list("$metal" = 1750, "$glass" = 400)
+ materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
build_path = /obj/item/clothing/head/welding
category = list("initial","Tools")
@@ -78,7 +78,7 @@
name = "Welding Tool"
id = "welding_tool"
build_type = AUTOLATHE
- materials = list("$metal" = 70, "$glass" = 20)
+ materials = list(MAT_METAL = 70, MAT_GLASS = 20)
build_path = /obj/item/weapon/weldingtool
category = list("initial","Tools")
@@ -86,7 +86,7 @@
name = "Wirecutters"
id = "wirecutters"
build_type = AUTOLATHE
- materials = list("$metal" = 80)
+ materials = list(MAT_METAL = 80)
build_path = /obj/item/weapon/wirecutters
category = list("initial","Tools")
@@ -94,7 +94,7 @@
name = "Wrench"
id = "wrench"
build_type = AUTOLATHE
- materials = list("$metal" = 150)
+ materials = list(MAT_METAL = 150)
build_path = /obj/item/weapon/wrench
category = list("initial","Tools")
@@ -102,7 +102,7 @@
name = "Spraycan"
id = "spraycan"
build_type = AUTOLATHE
- materials = list("$metal" = 100, "$glass" = 100)
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/toy/crayon/spraycan
category = list("initial", "Tools")
@@ -110,7 +110,7 @@
name = "Air Alarm Electronics"
id = "airalarm_electronics"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/airalarm_electronics
category = list("initial", "Electronics")
@@ -118,7 +118,7 @@
name = "Airlock Electronics"
id = "airlock_board"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/airlock_electronics
category = list("initial", "Electronics")
@@ -126,7 +126,7 @@
name = "Intercom Electronics"
id = "intercom_electronics"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/intercom_electronics
category = list("initial", "Electronics")
@@ -134,7 +134,7 @@
name = "Console Screen"
id = "console_screen"
build_type = AUTOLATHE
- materials = list("$glass" = 200)
+ materials = list(MAT_GLASS = 200)
build_path = /obj/item/weapon/stock_parts/console_screen
category = list("initial", "Electronics")
@@ -142,7 +142,7 @@
name = "Fire Alarm Electronics"
id = "firealarm_electronics"
build_type = AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/firealarm_electronics
category = list("initial", "Electronics")
@@ -150,7 +150,7 @@
name = "Igniter"
id = "igniter"
build_type = AUTOLATHE
- materials = list("$metal" = 500, "$glass" = 50)
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/device/assembly/igniter
category = list("initial", "Miscellaneous")
@@ -158,15 +158,23 @@
name = "Infrared Emitter"
id = "infrared_emitter"
build_type = AUTOLATHE
- materials = list("$metal" = 1000, "$glass" = 500)
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
build_path = /obj/item/device/assembly/infra
category = list("initial", "Miscellaneous")
+/datum/design/health_sensor
+ name = "Health sensor"
+ id = "health_sensor"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
+ build_path = /obj/item/device/assembly/health
+ category = list("initial", "Medical")
+
/datum/design/kitchen_knife
name = "Kitchen knife"
id = "kitchen_knife"
build_type = AUTOLATHE
- materials = list("$metal" = 12000)
+ materials = list(MAT_METAL = 12000)
build_path = /obj/item/weapon/kitchenknife
category = list("initial","Miscellaneous")
@@ -174,7 +182,7 @@
name = "Pipe Painter"
id = "pipe_painter"
build_type = AUTOLATHE
- materials = list("$metal" = 5000, "$glass" = 2000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
build_path = /obj/item/device/pipe_painter
category = list("initial", "Miscellaneous")
@@ -182,7 +190,7 @@
name = "Proximity Sensor"
id = "prox_sensor"
build_type = AUTOLATHE
- materials = list("$metal" = 800, "$glass" = 200)
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/device/assembly/prox_sensor
category = list("initial", "Miscellaneous")
@@ -190,7 +198,7 @@
name = "Mousetrap"
id = "mousetrap"
build_type = AUTOLATHE
- materials = list("$metal" = 800, "$glass" = 200)
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/device/assembly/mousetrap
category = list("initial", "Miscellaneous")
@@ -198,7 +206,7 @@
name = "Timer"
id = "timer"
build_type = AUTOLATHE
- materials = list("$metal" = 500, "$glass" = 50)
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/device/assembly/timer
category = list("initial", "Miscellaneous")
@@ -206,7 +214,7 @@
name = "Universal Recorder"
id = "recorder"
build_type = AUTOLATHE
- materials = list("$metal" = 60, "$glass" = 30)
+ materials = list(MAT_METAL = 60, MAT_GLASS = 30)
build_path = /obj/item/device/taperecorder/empty
category = list("initial", "Miscellaneous")
@@ -214,7 +222,7 @@
name = "Tape"
id = "tape"
build_type = AUTOLATHE
- materials = list("$metal" = 20, "$glass" = 5)
+ materials = list(MAT_METAL = 20, MAT_GLASS = 5)
build_path = /obj/item/device/tape/random
category = list("initial", "Miscellaneous")
@@ -222,7 +230,7 @@
name = "Voice Analyser"
id = "voice_analyser"
build_type = AUTOLATHE
- materials = list("$metal" = 500, "$glass" = 50)
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/device/assembly/voice
category = list("initial", "Miscellaneous")
@@ -230,7 +238,7 @@
name = "11px by 11px Canvas"
id = "canvas"
build_type = AUTOLATHE
- materials = list("$metal" = 50)
+ materials = list(MAT_METAL = 50)
build_path = /obj/item/weapon/canvas
category = list("initial", "Miscellaneous")
@@ -238,7 +246,7 @@
name = "19px by 19px Canvas"
id = "canvas19x19"
build_type = AUTOLATHE
- materials = list("$metal" = 50)
+ materials = list(MAT_METAL = 50)
build_path = /obj/item/weapon/canvas/nineteenXnineteen
category = list("initial", "Miscellaneous")
@@ -246,7 +254,7 @@
name = "23px by 19px Canvas"
id = "canvas23x19"
build_type = AUTOLATHE
- materials = list("$metal" = 70)
+ materials = list(MAT_METAL = 70)
build_path = /obj/item/weapon/canvas/twentythreeXnineteen
category = list("initial", "Miscellaneous")
@@ -254,7 +262,7 @@
name = "23px by 23px Canvas"
id = "canvas23x23"
build_type = AUTOLATHE
- materials = list("$metal" = 100)
+ materials = list(MAT_METAL = 100)
build_path = /obj/item/weapon/canvas/twentythreeXtwentythree
category = list("initial", "Miscellaneous")
@@ -262,7 +270,7 @@
name = "Camera Assembly"
id = "camera_assembly"
build_type = AUTOLATHE
- materials = list("$metal" = 400, "$glass" = 250)
+ materials = list(MAT_METAL = 400, MAT_GLASS = 250)
build_path = /obj/item/weapon/camera_assembly
category = list("initial", "Construction")
@@ -270,7 +278,7 @@
name = "Glass"
id = "glass"
build_type = AUTOLATHE
- materials = list("$glass" = MINERAL_MATERIAL_AMOUNT)
+ materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/glass
category = list("initial","Construction")
@@ -278,7 +286,7 @@
name = "Light Bulb"
id = "light_bulb"
build_type = AUTOLATHE
- materials = list("$metal" = 60, "$glass" = 100)
+ materials = list(MAT_METAL = 60, MAT_GLASS = 100)
build_path = /obj/item/weapon/light/bulb
category = list("initial", "Construction")
@@ -286,7 +294,7 @@
name = "Light Tube"
id = "light_tube"
build_type = AUTOLATHE
- materials = list("$metal" = 60, "$glass" = 100)
+ materials = list(MAT_METAL = 60, MAT_GLASS = 100)
build_path = /obj/item/weapon/light/tube
category = list("initial", "Construction")
@@ -294,7 +302,7 @@
name = "Metal"
id = "metal"
build_type = AUTOLATHE
- materials = list("$metal" = 3750)
+ materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/metal
category = list("initial","Construction")
@@ -302,7 +310,7 @@
name = "Newscaster Frame"
id = "newscaster_frame"
build_type = AUTOLATHE
- materials = list("$metal" = 14000, "$glass" = 8000)
+ materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
build_path = /obj/item/mounted/frame/newscaster_frame
category = list("initial", "Construction")
@@ -310,7 +318,7 @@
name = "Compressed Matter Cardridge"
id = "rcd_ammo"
build_type = AUTOLATHE
- materials = list("$metal" = 16000, "$glass"=8000)
+ materials = list(MAT_METAL = 16000, MAT_GLASS=8000)
build_path = /obj/item/weapon/rcd_ammo
category = list("initial","Construction")
@@ -318,7 +326,7 @@
name = "Reinforced Glass"
id = "rglass"
build_type = AUTOLATHE
- materials = list("$metal" = 1875, "$glass" = MINERAL_MATERIAL_AMOUNT)
+ materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/rglass
category = list("initial","Construction")
@@ -326,7 +334,7 @@
name = "Metal Rod"
id = "rods"
build_type = AUTOLATHE
- materials = list("$metal" = 1875)
+ materials = list(MAT_METAL = 1000)
build_path = /obj/item/stack/rods
category = list("initial","Construction")
@@ -334,7 +342,7 @@
name = "Beaker"
id = "beaker"
build_type = AUTOLATHE
- materials = list("$glass" = 500)
+ materials = list(MAT_GLASS = 500)
build_path = /obj/item/weapon/reagent_containers/glass/beaker
category = list("initial", "Medical")
@@ -342,7 +350,7 @@
name = "Cautery"
id = "cautery"
build_type = AUTOLATHE
- materials = list("$metal" = 2500, "$glass" = 750)
+ materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
build_path = /obj/item/weapon/cautery
category = list("initial", "Medical")
@@ -350,7 +358,7 @@
name = "Circular Saw"
id = "circular_saw"
build_type = AUTOLATHE
- materials = list("$metal" = 10000, "$glass" = 6000)
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/weapon/circular_saw
category = list("initial", "Medical")
@@ -358,7 +366,7 @@
name = "Hemostat"
id = "hemostat"
build_type = AUTOLATHE
- materials = list("$metal" = 5000, "$glass" = 2500)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
build_path = /obj/item/weapon/hemostat
category = list("initial", "Medical")
@@ -366,7 +374,7 @@
name = "Large Beaker"
id = "large_beaker"
build_type = AUTOLATHE
- materials = list("$glass" = 2500)
+ materials = list(MAT_GLASS = 2500)
build_path = /obj/item/weapon/reagent_containers/glass/beaker/large
category = list("initial", "Medical")
@@ -374,7 +382,7 @@
name = "Retractor"
id = "retractor"
build_type = AUTOLATHE
- materials = list("$metal" = 6000, "$glass" = 3000)
+ materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
build_path = /obj/item/weapon/retractor
category = list("initial", "Medical")
@@ -382,7 +390,7 @@
name = "Scalpel"
id = "scalpel"
build_type = AUTOLATHE
- materials = list("$metal" = 4000, "$glass" = 1000)
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/scalpel
category = list("initial", "Medical")
@@ -390,7 +398,7 @@
name = "Surgical Drill"
id = "surgicaldrill"
build_type = AUTOLATHE
- materials = list("$metal" = 10000, "$glass" = 6000)
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/weapon/surgicaldrill
category = list("initial", "Medical")
@@ -398,7 +406,7 @@
name = "Syringe"
id = "syringe"
build_type = AUTOLATHE
- materials = list("$metal" = 10, "$glass" = 20)
+ materials = list(MAT_METAL = 10, MAT_GLASS = 20)
build_path = /obj/item/weapon/reagent_containers/syringe
category = list("initial", "Medical")
@@ -406,7 +414,7 @@
name = "Beanbag Slug"
id = "beanbag_slug"
build_type = AUTOLATHE
- materials = list("$metal" = 250)
+ materials = list(MAT_METAL = 250)
build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list("initial", "Security")
@@ -414,7 +422,7 @@
name = "Speed Loader (.38)"
id = "c38"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c38
category = list("initial", "Security")
@@ -422,7 +430,7 @@
name = "Radio Headset"
id = "radio_headset"
build_type = AUTOLATHE
- materials = list("$metal" = 75)
+ materials = list(MAT_METAL = 75)
build_path = /obj/item/device/radio/headset
category = list("initial", "Communication")
@@ -430,7 +438,7 @@
name = "Remote Signaling Device"
id = "signaler"
build_type = AUTOLATHE
- materials = list("$metal" = 400, "$glass" = 120)
+ materials = list(MAT_METAL = 400, MAT_GLASS = 120)
build_path = /obj/item/device/assembly/signaler
category = list("initial", "Communication")
@@ -438,7 +446,7 @@
name = "Station Bounced Radio"
id = "bounced_radio"
build_type = AUTOLATHE
- materials = list("$metal" = 75, "$glass" = 25)
+ materials = list(MAT_METAL = 75, MAT_GLASS = 25)
build_path = /obj/item/device/radio/off
category = list("initial", "Communication")
@@ -447,7 +455,7 @@
name = "Ammo Box (.45)"
id = "c45"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c45
category = list("hacked", "Security")
@@ -455,7 +463,7 @@
name = "Ammo Box (.357)"
id = "a357"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/a357
category = list("hacked", "Security")
@@ -463,7 +471,7 @@
name = "Ammo Box (9mm)"
id = "c9mm"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c9mm
category = list("hacked", "Security")
@@ -471,7 +479,7 @@
name = "Ammo Box (10mm)"
id = "c10mm"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c10mm
category = list("hacked", "Security")
@@ -479,7 +487,7 @@
name = "Buckshot Shell"
id = "buckshot_shell"
build_type = AUTOLATHE
- materials = list("$metal" = 4000)
+ materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/buckshot
category = list("hacked", "Security")
@@ -487,7 +495,7 @@
name = "Electropack"
id = "electropack"
build_type = AUTOLATHE
- materials = list("$metal" = 10000, "$glass" = 2500)
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
build_path = /obj/item/device/radio/electropack
category = list("hacked", "Tools")
@@ -495,7 +503,7 @@
name = "Flamethrower"
id = "flamethrower"
build_type = AUTOLATHE
- materials = list("$metal" = 500)
+ materials = list(MAT_METAL = 500)
build_path = /obj/item/weapon/flamethrower/full
category = list("hacked", "Security")
@@ -503,7 +511,7 @@
name = "Handcuffs"
id = "handcuffs"
build_type = AUTOLATHE
- materials = list("$metal" = 500)
+ materials = list(MAT_METAL = 500)
build_path = /obj/item/weapon/restraints/handcuffs
category = list("hacked", "Security")
@@ -511,7 +519,7 @@
name = "Incendiary Slug"
id = "incendiary_slug"
build_type = AUTOLATHE
- materials = list("$metal" = 4000)
+ materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/incendiary
category = list("hacked", "Security")
@@ -519,7 +527,7 @@
name = "Industrial Welding Tool"
id = "large_welding_tool"
build_type = AUTOLATHE
- materials = list("$metal" = 70, "$glass" = 60)
+ materials = list(MAT_METAL = 70, MAT_GLASS = 60)
build_path = /obj/item/weapon/weldingtool/largetank
category = list("hacked", "Tools")
@@ -527,7 +535,7 @@
name = "Rapid Construction Device (RCD)"
id = "rcd"
build_type = AUTOLATHE
- materials = list("$metal" = 30000)
+ materials = list(MAT_METAL = 30000)
build_path = /obj/item/weapon/rcd
category = list("hacked", "Construction")
@@ -535,7 +543,7 @@
name = "Shotgun Dart"
id = "shotgun_dart"
build_type = AUTOLATHE
- materials = list("$metal" = 4000)
+ materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/dart
category = list("hacked", "Security")
@@ -543,6 +551,22 @@
name = "Shotgun Slug"
id = "shotgun_slug"
build_type = AUTOLATHE
- materials = list("$metal" = 4000)
+ materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun
category = list("hacked", "Security")
+
+/datum/design/desttagger
+ name = "Destination tagger"
+ id = "desttagger"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 125)
+ build_path = /obj/item/device/destTagger
+ category = list("initial", "Electronics")
+
+/datum/design/handlabeler
+ name = "Hand labeler"
+ id = "handlabel"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150, MAT_GLASS = 125)
+ build_path = /obj/item/weapon/hand_labeler
+ category = list("initial", "Electronics")
\ No newline at end of file
diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm
index 13b3dcadf7c..13a1923c76f 100644
--- a/code/modules/research/designs/bluespace_designs.dm
+++ b/code/modules/research/designs/bluespace_designs.dm
@@ -7,40 +7,40 @@
id = "bluespace_crystal"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
- materials = list("$diamond" = 1500, "$plasma" = 1500)
+ materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500)
reliability_base = 100
build_path = /obj/item/bluespace_crystal/artificial
- category = list("Bluespace")
-
+ category = list("Bluespace")
+
/datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
id = "bag_holding"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
- materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
+ materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250)
reliability_base = 80
build_path = /obj/item/weapon/storage/backpack/holding
category = list("Bluespace")
-
+
/datum/design/bluespace_belt
name = "Belt of Holding"
desc = "An astonishingly complex belt popularized by a rich blue-space technology magnate."
id = "bluespace_belt"
req_tech = list("bluespace" = 4, "materials" = 6)
build_type = PROTOLATHE
- materials = list("$gold" = 1500, "$diamond" = 3000, "$uranium" = 1000)
+ materials = list(MAT_GOLD = 1500, MAT_DIAMOND = 3000, MAT_URANIUM = 1000)
reliability_base = 80
build_path = /obj/item/weapon/storage/belt/bluespace
category = list("Bluespace")
-
+
/datum/design/bluespacebeaker
name = "Bluespace Beaker"
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("bluespace" = 2, "materials" = 6)
build_type = PROTOLATHE
- materials = list("$metal" = 3000, "$plasma" = 3000, "$diamond" = 500)
+ materials = list(MAT_METAL = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 500)
reliability_base = 76
build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
category = list("Medical")
@@ -51,17 +51,17 @@
id = "telesci_Gps"
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 500, "$glass" = 1000)
+ materials = list(MAT_METAL = 500, MAT_GLASS = 1000)
build_path = /obj/item/device/gps
category = list("Bluespace")
-
+
/datum/design/miningsatchel_holding
name = "Mining Satchel of Holding"
desc = "A mining satchel that can hold an infinite amount of ores."
id = "minerbag_holding"
req_tech = list("bluespace" = 3, "materials" = 4)
build_type = PROTOLATHE
- materials = list("$gold" = 250, "$uranium" = 500) //quite cheap, for more convenience
+ materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience
reliability = 100
build_path = /obj/item/weapon/storage/bag/ore/holding
category = list("Bluespace")
@@ -72,7 +72,7 @@
id = "telepad_beacon"
req_tech = list("bluespace" = 3, "materials" = 4)
build_type = PROTOLATHE
- materials = list ("$metal" = 2000, "$glass" = 1750, "$silver" = 500)
+ materials = list (MAT_METAL = 2000, MAT_GLASS = 1750, MAT_SILVER = 500)
build_path = /obj/item/device/telepad_beacon
category = list("Bluespace")
@@ -82,6 +82,6 @@
id = "beacon"
req_tech = list("bluespace" = 1)
build_type = PROTOLATHE
- materials = list ("$metal" = 20, "$glass" = 10)
+ materials = list (MAT_METAL = 20, MAT_GLASS = 10)
build_path = /obj/item/device/radio/beacon
category = list("Bluespace")
\ No newline at end of file
diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm
index 7318429f7e7..416f901c455 100644
--- a/code/modules/research/designs/comp_board_designs.dm
+++ b/code/modules/research/designs/comp_board_designs.dm
@@ -8,7 +8,7 @@
id = "aicore"
req_tech = list("programming" = 4, "biotech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/aicore
category = list("Computer Boards")
@@ -18,7 +18,7 @@
id = "aifixer"
req_tech = list("programming" = 3, "biotech" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/aifixer
category = list("Computer Boards")
@@ -28,7 +28,7 @@
id = "aiupload"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/aiupload
category = list("Computer Boards")
@@ -38,7 +38,7 @@
id = "atmosalerts"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/atmos_alert
category = list("Computer Boards")
@@ -48,7 +48,7 @@
id = "air_management"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/air_management
category = list("Computer Boards")
@@ -58,7 +58,7 @@
id = "seccamera"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/camera
category = list("Computer Boards")
@@ -68,7 +68,7 @@
id = "clonecontrol"
req_tech = list("programming" = 3, "biotech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/cloning
category = list("Computer Boards")
@@ -78,7 +78,7 @@
id = "comconsole"
req_tech = list("programming" = 2, "magnets" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/communications
category = list("Computer Boards")
@@ -88,7 +88,7 @@
id = "crewconsole"
req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/crew
category = list("Computer Boards")
@@ -98,7 +98,7 @@
id = "borgupload"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/borgupload
category = list("Computer Boards")
@@ -108,7 +108,7 @@
id = "scan_console"
req_tech = list("programming" = 2, "biotech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/scan_consolenew
category = list("Computer Boards")
@@ -118,7 +118,7 @@
id = "dronecontrol"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/drone_control
category = list("Computer Boards")
@@ -128,7 +128,7 @@
id = "mechacontrol"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha_control
category = list("Computer Boards")
@@ -138,7 +138,7 @@
id = "idcardconsole"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/card
category = list("Computer Boards")
@@ -148,7 +148,7 @@
id = "mechapower"
req_tech = list("programming" = 2, "powerstorage" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
category = list("Computer Boards")
@@ -158,7 +158,7 @@
id = "med_data"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/med_data
category = list("Computer Boards")
@@ -168,7 +168,7 @@
id = "message_monitor"
req_tech = list("programming" = 5)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/message_monitor
category = list("Computer Boards")
@@ -178,7 +178,7 @@
id = "operating"
req_tech = list("programming" = 2, "biotech" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/operating
category = list("Computer Boards")
@@ -188,7 +188,7 @@
id = "powermonitor"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/powermonitor
category = list("Computer Boards")
@@ -198,7 +198,7 @@
id = "prisonmanage"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/prisoner
category = list("Computer Boards")
@@ -208,7 +208,7 @@
id = "rdconsole"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/rdconsole
category = list("Computer Boards")
@@ -218,7 +218,7 @@
id = "rdservercontrol"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/rdservercontrol
category = list("Computer Boards")
@@ -228,7 +228,7 @@
id = "robocontrol"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/robotics
category = list("Computer Boards")
@@ -238,7 +238,7 @@
id = "secdata"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/secure_data
category = list("Computer Boards")
@@ -248,7 +248,7 @@
id = "solarcontrol"
req_tech = list("programming" = 2, "powerstorage" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/solar_control
category = list("Computer Boards")
@@ -258,7 +258,7 @@
id = "spacepodc"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pod_locater
category = list("Computer Boards")
@@ -268,7 +268,7 @@
id = "ordercomp"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/ordercomp
category = list("Computer Boards")
@@ -278,7 +278,7 @@
id = "supplycomp"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/supplycomp
category = list("Computer Boards")
@@ -288,7 +288,7 @@
id = "comm_monitor"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/comm_monitor
category = list("Computer Boards")
@@ -298,7 +298,7 @@
id = "comm_server"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/comm_server
category = list("Computer Boards")
@@ -308,7 +308,7 @@
id = "comm_traffic"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/comm_traffic
category = list("Computer Boards")
@@ -318,7 +318,7 @@
id = "telesci_console"
req_tech = list("programming" = 3, "bluespace" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telesci_console
category = list("Computer Boards")
@@ -328,7 +328,7 @@
id = "teleconsole"
req_tech = list("programming" = 3, "bluespace" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/teleporter
category = list("Computer Boards")
@@ -338,7 +338,7 @@ datum/design/GAC
id = "GAC"
req_tech = list("programming" = 3, "magnets" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/air_management
datum/design/tank_control
@@ -347,7 +347,7 @@ datum/design/tank_control
id = "tankcontrol"
req_tech = list("programming" = 3, "magnets" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/large_tank_control
datum/design/AAC
@@ -356,5 +356,5 @@ datum/design/AAC
id = "AAC"
req_tech = list("programming" = 4, "magnets" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/atmos_automation
diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm
index ab78834a877..9cdefac2cb6 100644
--- a/code/modules/research/designs/equipment_designs.dm
+++ b/code/modules/research/designs/equipment_designs.dm
@@ -7,7 +7,7 @@
id = "health_hud"
req_tech = list("biotech" = 2, "magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/clothing/glasses/hud/health
category = list("Equipment")
@@ -17,7 +17,7 @@
id = "magboots"
req_tech = list("materials" = 4, "magnets" = 4, "engineering" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 4500, "$silver" = 1500, "$gold" = 2500)
+ materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500)
build_path = /obj/item/clothing/shoes/magboots
category = list("Equipment")
@@ -27,7 +27,7 @@
id = "night_vision_goggles"
req_tech = list("magnets" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 100, "$glass" = 100, "$uranium" = 1000)
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/night
category = list("Equipment")
@@ -37,7 +37,7 @@
id = "health_hud_night"
req_tech = list("biotech" = 4, "magnets" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
+ materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_SILVER = 250)
build_path = /obj/item/clothing/glasses/hud/health/night
category = list("Equipment")
@@ -47,7 +47,7 @@
id = "security_hud_night"
req_tech = list("magnets" = 5, "combat" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
+ materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_GOLD = 350)
build_path = /obj/item/clothing/glasses/hud/security/night
category = list("Equipment")
@@ -57,7 +57,7 @@
id = "nvgmesons"
req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000)
+ materials = list(MAT_METAL = 300, MAT_GLASS = 400, MAT_PLASMA = 250, MAT_URANIUM = 1000)
build_path = /obj/item/clothing/glasses/meson/night
category = list("Equipment")
@@ -67,7 +67,7 @@
id = "mesons"
req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 200, "$glass" = 300, "$plasma" = 100)
+ materials = list(MAT_METAL = 200, MAT_GLASS = 300, MAT_PLASMA = 100)
build_path = /obj/item/clothing/glasses/meson
category = list("Equipment")
@@ -77,7 +77,7 @@
id = "security_hud"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/clothing/glasses/hud/security
category = list("Equipment")
@@ -87,7 +87,7 @@
id = "air_horn"
req_tech = list("materials" = 2, "engineering" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 4000, "$bananium" = 1000)
+ materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
build_path = /obj/item/weapon/bikehorn/airhorn
category = list("Equipment")
@@ -97,7 +97,7 @@
id = "weldingmask"
req_tech = list("materials" = 2, "engineering" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 4000, "$glass" = 1000)
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/clothing/mask/gas/welding
category = list("Equipment")
@@ -107,7 +107,7 @@
id = "detectivescanner"
req_tech = list("biotech" = 2, "magnets" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 6000, "$glass" = 2000)
+ materials = list(MAT_METAL = 6000, MAT_GLASS = 2000)
build_path = /obj/item/device/detective_scanner
locked = 1 //no validhunting scientists.
category = list("Equipment")
\ No newline at end of file
diff --git a/code/modules/research/designs/janitorial_designs.dm b/code/modules/research/designs/janitorial_designs.dm
index 3d81f8614ef..76a469d04e6 100644
--- a/code/modules/research/designs/janitorial_designs.dm
+++ b/code/modules/research/designs/janitorial_designs.dm
@@ -7,7 +7,7 @@
id = "advmop"
req_tech = list("materials" = 4, "engineering" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 2500, "$glass" = 200)
+ materials = list(MAT_METAL = 2500, MAT_GLASS = 200)
build_path = /obj/item/weapon/mop/advanced
category = list("Janitorial")
@@ -17,16 +17,16 @@
id = "holosign"
req_tech = list("magnets" = 3, "powerstorage" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 2000, "$glass" = 1000)
+ materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/holosign_creator
category = list("Janitorial")
-
+
/datum/design/light_replacer
name = "Light Replacer"
desc = "A device to automatically replace lights. Refill with working lightbulbs."
id = "light_replacer"
req_tech = list("magnets" = 3, "materials" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000)
+ materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000)
build_path = /obj/item/device/lightreplacer
category = list("Janitorial")
\ No newline at end of file
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index f7c2252dbd9..7a2e7046de1 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -8,7 +8,7 @@
id = "thermomachine"
req_tech = list("programming" = 3, "plasmatech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/thermomachine
category = list ("Engineering Machinery")
@@ -18,7 +18,7 @@
id = "smes"
req_tech = list("programming" = 4, "power" = 5, "engineering" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/smes
category = list ("Engineering Machinery")
@@ -28,7 +28,7 @@
id = "emitter"
req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 5)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/emitter
category = list ("Engineering Machinery")
@@ -38,7 +38,7 @@
id = "telepad"
req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telesci_pad
category = list ("Teleportation Machinery")
@@ -48,7 +48,7 @@
id = "tele_hub"
req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/teleporter_hub
category = list ("Teleportation Machinery")
@@ -58,7 +58,7 @@
id = "tele_station"
req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/teleporter_station
category = list ("Teleportation Machinery")
@@ -68,7 +68,7 @@
id = "bodyscanner"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/bodyscanner
category = list("Medical Machinery")
@@ -78,7 +78,7 @@
id = "bodyscanner_console"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/bodyscanner_console
category = list("Medical Machinery")
@@ -88,7 +88,7 @@
id = "clonepod"
req_tech = list("programming" = 3, "biotech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/clonepod
category = list("Medical Machinery")
@@ -98,7 +98,7 @@
id = "clonescanner"
req_tech = list("programming" = 3, "biotech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/clonescanner
category = list("Medical Machinery")
@@ -108,7 +108,7 @@
id = "cryotube"
req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/cryo_tube
category = list("Medical Machinery")
@@ -118,7 +118,7 @@
id = "chem_dispenser"
req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/chem_dispenser
category = list("Medical Machinery")
@@ -128,7 +128,7 @@
id = "chem_heater"
req_tech = list("engineering" = 2, "materials" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/chem_heater
category = list ("Medical Machinery")
@@ -138,7 +138,7 @@
id = "sleeper"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/sleeper
category = list("Medical Machinery")
@@ -148,7 +148,7 @@
id = "sleeper_console"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/sleep_console
category = list("Medical Machinery")
@@ -158,7 +158,7 @@
id = "biogenerator"
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/biogenerator
category = list ("Hydroponics Machinery")
@@ -168,7 +168,7 @@
id = "hydro_tray"
req_tech = list("programming" = 1, "biotech" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/hydroponics
category = list ("Hydroponics Machinery")
@@ -178,7 +178,7 @@
id = "autolathe"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/autolathe
category = list("Research Machinery")
@@ -188,7 +188,7 @@
id = "circuit_imprinter"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/circuit_imprinter
category = list("Research Machinery")
@@ -198,7 +198,7 @@
id = "cyborgrecharger"
req_tech = list("powerstorage" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/cyborgrecharger
category = list("Research Machinery")
@@ -208,7 +208,7 @@
id = "destructive_analyzer"
req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/destructive_analyzer
category = list("Research Machinery")
@@ -218,7 +218,7 @@
id = "mechfab"
req_tech = list("programming" = 3, "engineering" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mechfab
category = list("Research Machinery")
@@ -228,7 +228,7 @@
id = "mech_recharger"
req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mech_recharger
category = list("Research Machinery")
@@ -238,7 +238,7 @@
id = "protolathe"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/protolathe
category = list("Research Machinery")
@@ -248,7 +248,7 @@
id = "rdserver"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/rdserver
category = list("Research Machinery")
@@ -258,7 +258,7 @@
id = "gibber"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/gibber
category = list ("Misc. Machinery")
@@ -268,7 +268,7 @@
id = "smartfridge"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/smartfridge
category = list ("Misc. Machinery")
@@ -278,7 +278,7 @@
id = "monkey_recycler"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/monkey_recycler
category = list ("Misc. Machinery")
@@ -288,7 +288,7 @@
id = "seed_extractor"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/seed_extractor
category = list ("Misc. Machinery")
@@ -298,7 +298,7 @@
id = "processor"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/processor
category = list ("Misc. Machinery")
@@ -308,7 +308,7 @@
id = "recycler"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/recycler
category = list ("Misc. Machinery")
@@ -318,7 +318,7 @@
id = "holopad"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/holopad
category = list ("Misc. Machinery")
@@ -328,7 +328,7 @@
id = "arcademachinebattle"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/arcade/battle
category = list("Misc. Machinery")
@@ -338,7 +338,7 @@
id = "microwave"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/microwave
category = list("Misc. Machinery")
@@ -348,7 +348,7 @@
id = "oven"
req_tech = list("programming" = 1, "plasmatech" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/oven
category = list("Misc. Machinery")
@@ -358,7 +358,7 @@
id = "grill"
req_tech = list("programming" = 1, "plasmatech" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/grill
category = list("Misc. Machinery")
@@ -368,7 +368,7 @@
id = "candymaker"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/candy_maker
category = list("Misc. Machinery")
@@ -378,7 +378,7 @@
id = "arcademachineonion"
req_tech = list("programming" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
category = list("Misc. Machinery")
@@ -388,7 +388,7 @@
id = "selunload"
req_tech = list("programming" = 5)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/programmable
category = list("Misc. Machinery")
@@ -398,7 +398,7 @@
id = "vendor"
req_tech = list("programming" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/vendor
category = list("Misc. Machinery")
@@ -408,7 +408,7 @@
id = "pod"
req_tech = list("programming" = 2,"engineering" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pod
category = list("Misc. Machinery")
@@ -418,7 +418,7 @@
id = "ore_redemption"
req_tech = list("programming" = 1, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass"=1000, "sacid"=20)
+ materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/ore_redemption
category = list ("Misc. Machinery")
@@ -428,6 +428,6 @@
id = "mining_equipment_vendor"
req_tech = list("programming" = 1, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass"=1000, "sacid"=20)
+ materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor
category = list ("Misc. Machinery")
\ No newline at end of file
diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm
index f1f58a0ca0e..842fde52857 100644
--- a/code/modules/research/designs/mecha_designs.dm
+++ b/code/modules/research/designs/mecha_designs.dm
@@ -8,7 +8,7 @@
id = "ripley_main"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
category = list("Exosuit Modules")
@@ -18,7 +18,7 @@
id = "ripley_peri"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
category = list("Exosuit Modules")
@@ -29,7 +29,7 @@
id = "odysseus_main"
req_tech = list("programming" = 3,"biotech" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
category = list("Exosuit Modules")
@@ -39,7 +39,7 @@
id = "odysseus_peri"
req_tech = list("programming" = 3,"biotech" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
category = list("Exosuit Modules")
@@ -50,7 +50,7 @@
id = "gygax_main"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
category = list("Exosuit Modules")
@@ -60,7 +60,7 @@
id = "gygax_peri"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
category = list("Exosuit Modules")
@@ -70,7 +70,7 @@
id = "gygax_targ"
req_tech = list("programming" = 4, "combat" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
category = list("Exosuit Modules")
@@ -81,7 +81,7 @@
id = "durand_main"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/main
category = list("Exosuit Modules")
@@ -91,7 +91,7 @@
id = "durand_peri"
req_tech = list("programming" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
category = list("Exosuit Modules")
@@ -101,7 +101,7 @@
id = "durand_targ"
req_tech = list("programming" = 4, "combat" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
category = list("Exosuit Modules")
@@ -112,7 +112,7 @@
id = "phazon_main"
req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
category = list("Exosuit Modules")
@@ -122,7 +122,7 @@
id = "phazon_peri"
req_tech = list("programming" = 5, "bluespace" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
category = list("Exosuit Modules")
@@ -132,7 +132,7 @@
id = "phazon_targ"
req_tech = list("programming" = 5, "magnets" = 6)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
category = list("Exosuit Modules")
@@ -143,7 +143,7 @@
id = "honker_main"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/honker/main
category = list("Exosuit Modules")
@@ -153,7 +153,7 @@
id = "honker_peri"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals
category = list("Exosuit Modules")
@@ -163,6 +163,6 @@
id = "honker_targ"
req_tech = list("programming" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
category = list("Exosuit Modules")
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 2ae7d1216d3..62acc4f884b 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -7,7 +7,7 @@
id = "borg_suit"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_suit
- materials = list("$metal"=15000)
+ materials = list(MAT_METAL=15000)
construction_time = 500
category = list("Cyborg")
@@ -16,7 +16,7 @@
id = "borg_chest"
build_type = MECHFAB
build_path = /obj/item/robot_parts/chest
- materials = list("$metal"=40000)
+ materials = list(MAT_METAL=40000)
construction_time = 350
category = list("Cyborg")
@@ -25,7 +25,7 @@
id = "borg_head"
build_type = MECHFAB
build_path = /obj/item/robot_parts/head
- materials = list("$metal"=5000)
+ materials = list(MAT_METAL=5000)
construction_time = 350
category = list("Cyborg")
@@ -34,7 +34,7 @@
id = "borg_l_arm"
build_type = MECHFAB
build_path = /obj/item/robot_parts/l_arm
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 200
category = list("Cyborg")
@@ -43,7 +43,7 @@
id = "borg_r_arm"
build_type = MECHFAB
build_path = /obj/item/robot_parts/r_arm
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 200
category = list("Cyborg")
@@ -52,7 +52,7 @@
id = "borg_l_leg"
build_type = MECHFAB
build_path = /obj/item/robot_parts/l_leg
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 200
category = list("Cyborg")
@@ -61,7 +61,7 @@
id = "borg_r_leg"
build_type = MECHFAB
build_path = /obj/item/robot_parts/r_leg
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 200
category = list("Cyborg")
@@ -71,7 +71,7 @@
id = "borg_binary_communication"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/binary_communication_device
- materials = list("$metal"=2500, "$glass"=1000)
+ materials = list(MAT_METAL=2500, MAT_GLASS=1000)
construction_time = 200
category = list("Cyborg Repair")
@@ -80,7 +80,7 @@
id = "borg_radio"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/radio
- materials = list("$metal"=2500, "$glass"=1000)
+ materials = list(MAT_METAL=2500, MAT_GLASS=1000)
construction_time = 200
category = list("Cyborg Repair")
@@ -89,7 +89,7 @@
id = "borg_actuator"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/actuator
- materials = list("$metal"=3500)
+ materials = list(MAT_METAL=3500)
construction_time = 200
category = list("Cyborg Repair")
@@ -98,7 +98,7 @@
id = "borg_diagnosis_unit"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/diagnosis_unit
- materials = list("$metal"=3500)
+ materials = list(MAT_METAL=3500)
construction_time = 200
category = list("Cyborg Repair")
@@ -107,7 +107,7 @@
id = "borg_camera"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/camera
- materials = list("$metal"=2500, "$glass"=1000)
+ materials = list(MAT_METAL=2500, MAT_GLASS=1000)
construction_time = 200
category = list("Cyborg Repair")
@@ -116,7 +116,7 @@
id = "borg_armor"
build_type = MECHFAB
build_path = /obj/item/robot_parts/robot_component/armour
- materials = list("$metal"=5000)
+ materials = list(MAT_METAL=5000)
construction_time = 200
category = list("Cyborg Repair")
@@ -126,7 +126,7 @@
id = "ripley_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/ripley
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("Ripley")
@@ -136,7 +136,7 @@
id = "firefighter_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/firefighter
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("Firefighter")
@@ -145,7 +145,7 @@
id = "ripley_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/ripley_torso
- materials = list("$metal"=20000, "$glass"=7500)
+ materials = list(MAT_METAL=20000, MAT_GLASS=7500)
construction_time = 200
category = list("Ripley","Firefighter")
@@ -154,7 +154,7 @@
id = "ripley_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/ripley_left_arm
- materials = list("$metal"=15000)
+ materials = list(MAT_METAL=15000)
construction_time = 150
category = list("Ripley","Firefighter")
@@ -163,7 +163,7 @@
id = "ripley_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/ripley_right_arm
- materials = list("$metal"=15000)
+ materials = list(MAT_METAL=15000)
construction_time = 150
category = list("Ripley","Firefighter")
@@ -172,7 +172,7 @@
id = "ripley_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/ripley_left_leg
- materials = list("$metal"=15000)
+ materials = list(MAT_METAL=15000)
construction_time = 150
category = list("Ripley","Firefighter")
@@ -181,7 +181,7 @@
id = "ripley_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/ripley_right_leg
- materials = list("$metal"=15000)
+ materials = list(MAT_METAL=15000)
construction_time = 150
category = list("Ripley","Firefighter")
@@ -191,7 +191,7 @@
id = "odysseus_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/odysseus
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("Odysseus")
@@ -200,7 +200,7 @@
id = "odysseus_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_torso
- materials = list("$metal"=12000)
+ materials = list(MAT_METAL=12000)
construction_time = 180
category = list("Odysseus")
@@ -209,7 +209,7 @@
id = "odysseus_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_head
- materials = list("$metal"=6000,"$glass"=10000)
+ materials = list(MAT_METAL=6000,MAT_GLASS=10000)
construction_time = 100
category = list("Odysseus")
@@ -218,7 +218,7 @@
id = "odysseus_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_left_arm
- materials = list("$metal"=6000)
+ materials = list(MAT_METAL=6000)
construction_time = 120
category = list("Odysseus")
@@ -227,7 +227,7 @@
id = "odysseus_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_right_arm
- materials = list("$metal"=6000)
+ materials = list(MAT_METAL=6000)
construction_time = 120
category = list("Odysseus")
@@ -236,7 +236,7 @@
id = "odysseus_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_left_leg
- materials = list("$metal"=7000)
+ materials = list(MAT_METAL=7000)
construction_time = 130
category = list("Odysseus")
@@ -245,7 +245,7 @@
id = "odysseus_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/odysseus_right_leg
- materials = list("$metal"=7000)
+ materials = list(MAT_METAL=7000)
construction_time = 130
category = list("Odysseus")
@@ -255,7 +255,7 @@
id = "gygax_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/gygax
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("Gygax")
@@ -264,7 +264,7 @@
id = "gygax_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_torso
- materials = list("$metal"=20000,"$glass"=10000,"$diamond"=2000)
+ materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_DIAMOND=2000)
construction_time = 300
category = list("Gygax")
@@ -273,7 +273,7 @@
id = "gygax_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_head
- materials = list("$metal"=10000,"$glass"=5000, "$diamond"=2000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=5000, MAT_DIAMOND=2000)
construction_time = 200
category = list("Gygax")
@@ -282,7 +282,7 @@
id = "gygax_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_left_arm
- materials = list("$metal"=15000, "$diamond"=1000)
+ materials = list(MAT_METAL=15000, MAT_DIAMOND=1000)
construction_time = 200
category = list("Gygax")
@@ -291,7 +291,7 @@
id = "gygax_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_right_arm
- materials = list("$metal"=15000, "$diamond"=1000)
+ materials = list(MAT_METAL=15000, MAT_DIAMOND=1000)
construction_time = 200
category = list("Gygax")
@@ -300,7 +300,7 @@
id = "gygax_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_left_leg
- materials = list("$metal"=15000, "$diamond"=2000)
+ materials = list(MAT_METAL=15000, MAT_DIAMOND=2000)
construction_time = 200
category = list("Gygax")
@@ -309,7 +309,7 @@
id = "gygax_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_right_leg
- materials = list("$metal"=15000, "$diamond"=2000)
+ materials = list(MAT_METAL=15000, MAT_DIAMOND=2000)
construction_time = 200
category = list("Gygax")
@@ -318,7 +318,7 @@
id = "gygax_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/gygax_armour
- materials = list("$metal"=25000,"$diamond"=10000)
+ materials = list(MAT_METAL=25000,MAT_DIAMOND=10000)
construction_time = 600
category = list("Gygax")
@@ -328,7 +328,7 @@
id = "durand_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/durand
- materials = list("$metal"=25000)
+ materials = list(MAT_METAL=25000)
construction_time = 100
category = list("Durand")
@@ -337,7 +337,7 @@
id = "durand_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_torso
- materials = list("$metal"=25000,"$glass"=10000,"$silver"=10000)
+ materials = list(MAT_METAL=25000,MAT_GLASS=10000,MAT_SILVER=10000)
construction_time = 300
category = list("Durand")
@@ -346,7 +346,7 @@
id = "durand_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_head
- materials = list("$metal"=10000,"$glass"=15000,"$silver"=2000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_SILVER=2000)
construction_time = 200
category = list("Durand")
@@ -355,7 +355,7 @@
id = "durand_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_left_arm
- materials = list("$metal"=10000,"$silver"=4000)
+ materials = list(MAT_METAL=10000,MAT_SILVER=4000)
construction_time = 200
category = list("Durand")
@@ -364,7 +364,7 @@
id = "durand_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_right_arm
- materials = list("$metal"=10000,"$silver"=4000)
+ materials = list(MAT_METAL=10000,MAT_SILVER=4000)
construction_time = 200
category = list("Durand")
@@ -373,7 +373,7 @@
id = "durand_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_left_leg
- materials = list("$metal"=15000,"$silver"=4000)
+ materials = list(MAT_METAL=15000,MAT_SILVER=4000)
construction_time = 200
category = list("Durand")
@@ -382,7 +382,7 @@
id = "durand_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_right_leg
- materials = list("$metal"=15000,"$silver"=4000)
+ materials = list(MAT_METAL=15000,MAT_SILVER=4000)
construction_time = 200
category = list("Durand")
@@ -391,7 +391,7 @@
id = "durand_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/durand_armor
- materials = list("$metal"=50000,"$uranium"=30000)
+ materials = list(MAT_METAL=50000,MAT_URANIUM=30000)
construction_time = 600
category = list("Durand")
@@ -401,7 +401,7 @@
id = "honk_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/honker
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("H.O.N.K")
@@ -410,7 +410,7 @@
id = "honk_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_torso
- materials = list("$metal"=20000,"$glass"=10000,"$bananium"=10000)
+ materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_BANANIUM=10000)
construction_time = 300
category = list("H.O.N.K")
@@ -419,7 +419,7 @@
id = "honk_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_head
- materials = list("$metal"=10000,"$glass"=5000,"$bananium"=5000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_BANANIUM=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -428,7 +428,7 @@
id = "honk_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_left_arm
- materials = list("$metal"=15000,"$bananium"=5000)
+ materials = list(MAT_METAL=15000,MAT_BANANIUM=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -437,7 +437,7 @@
id = "honk_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_arm
- materials = list("$metal"=15000,"$bananium"=5000)
+ materials = list(MAT_METAL=15000,MAT_BANANIUM=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -446,7 +446,7 @@
id = "honk_left_leg"
build_type = MECHFAB
build_path =/obj/item/mecha_parts/part/honker_left_leg
- materials = list("$metal"=20000,"$bananium"=5000)
+ materials = list(MAT_METAL=20000,MAT_BANANIUM=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -455,7 +455,7 @@
id = "honk_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_leg
- materials = list("$metal"=20000,"$bananium"=5000)
+ materials = list(MAT_METAL=20000,MAT_BANANIUM=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -465,7 +465,7 @@
id = "phazon_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/phazon
- materials = list("$metal"=20000)
+ materials = list(MAT_METAL=20000)
construction_time = 100
category = list("Phazon")
@@ -474,7 +474,7 @@
id = "phazon_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_torso
- materials = list("$metal"=35000,"$glass"=10000,"$plasma"=20000)
+ materials = list(MAT_METAL=35000,MAT_GLASS=10000,MAT_PLASMA=20000)
construction_time = 300
category = list("Phazon")
@@ -483,7 +483,7 @@
id = "phazon_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_head
- materials = list("$metal"=15000,"$glass"=5000,"$plasma"=10000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000)
construction_time = 200
category = list("Phazon")
@@ -492,7 +492,7 @@
id = "phazon_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_left_arm
- materials = list("$metal"=20000,"$plasma"=10000)
+ materials = list(MAT_METAL=20000,MAT_PLASMA=10000)
construction_time = 200
category = list("Phazon")
@@ -501,7 +501,7 @@
id = "phazon_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_right_arm
- materials = list("$metal"=20000,"$plasma"=10000)
+ materials = list(MAT_METAL=20000,MAT_PLASMA=10000)
construction_time = 200
category = list("Phazon")
@@ -510,7 +510,7 @@
id = "phazon_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_left_leg
- materials = list("$metal"=20000,"$plasma"=10000)
+ materials = list(MAT_METAL=20000,MAT_PLASMA=10000)
construction_time = 200
category = list("Phazon")
@@ -519,7 +519,7 @@
id = "phazon_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_right_leg
- materials = list("$metal"=20000,"$plasma"=10000)
+ materials = list(MAT_METAL=20000,MAT_PLASMA=10000)
construction_time = 200
category = list("Phazon")
@@ -528,7 +528,7 @@
id = "phazon_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/phazon_armor
- materials = list("$metal"=45000,"$plasma"=30000)
+ materials = list(MAT_METAL=45000,MAT_PLASMA=30000)
construction_time = 300
category = list("Phazon")
@@ -538,7 +538,7 @@
id = "mech_cable_layer"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -547,7 +547,7 @@
id = "mech_drill"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -556,7 +556,7 @@
id = "mech_extinguisher"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -565,7 +565,7 @@
id = "mech_hydraulic_clamp"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -574,7 +574,7 @@
id = "mech_sleeper"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper
- materials = list("$metal"=5000,"$glass"=10000)
+ materials = list(MAT_METAL=5000,MAT_GLASS=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -583,7 +583,7 @@
id = "mech_syringe_gun"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
- materials = list("$metal"=3000,"$glass"=2000)
+ materials = list(MAT_METAL=3000,MAT_GLASS=2000)
construction_time = 200
category = list("Exosuit Equipment")
@@ -592,7 +592,7 @@
id = "mech_generator"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/generator
- materials = list("$metal"=10000,"$glass"=1000,"$silver"=500)
+ materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500)
construction_time = 100
category = list("Exosuit Equipment")
@@ -601,7 +601,7 @@
id = "mech_taser"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -610,7 +610,7 @@
id = "mech_lmg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -619,7 +619,7 @@
id = "mech_banana_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
- materials = list("$metal"=20000,"$bananium"=5000)
+ materials = list(MAT_METAL=20000,MAT_BANANIUM=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -628,7 +628,7 @@
id = "mech_honker"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker
- materials = list("$metal"=20000,"$bananium"=10000)
+ materials = list(MAT_METAL=20000,MAT_BANANIUM=10000)
construction_time = 500
category = list("Exosuit Equipment")
@@ -637,7 +637,7 @@
id = "mech_mousetrap_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar
- materials = list("$metal"=20000,"$bananium"=5000)
+ materials = list(MAT_METAL=20000,MAT_BANANIUM=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -649,7 +649,7 @@
build_type = MECHFAB
req_tech = list("materials" = 4, "engineering" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
- materials = list("$metal"=10000,"$diamond"=6500)
+ materials = list(MAT_METAL=10000,MAT_DIAMOND=6500)
construction_time = 100
category = list("Exosuit Equipment")
@@ -658,7 +658,7 @@
id = "mech_mscanner"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner
- materials = list("$metal"=5000,"$glass"=2500)
+ materials = list(MAT_METAL=5000,MAT_GLASS=2500)
construction_time = 50
category = list("Exosuit Equipment")
@@ -669,7 +669,7 @@
build_type = MECHFAB
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
- materials = list("$metal"=10000,"$glass"=1000,"$silver"=500)
+ materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500)
construction_time = 100
category = list("Exosuit Equipment")
@@ -680,7 +680,7 @@
build_type = MECHFAB
req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -691,7 +691,7 @@
build_type = MECHFAB
req_tech = list("bluespace" = 3, "magnets" = 2)
build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -702,7 +702,7 @@
build_type = MECHFAB
req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
- materials = list("$metal"=30000,"$gold"=20000,"$plasma"=25000,"$silver"=20000)
+ materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000)
construction_time = 1200
category = list("Exosuit Equipment")
@@ -713,7 +713,7 @@
build_type = MECHFAB
req_tech = list("materials" = 5, "combat" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
- materials = list("$metal"=20000,"$silver"=5000)
+ materials = list(MAT_METAL=20000,MAT_SILVER=5000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -724,7 +724,7 @@
build_type = MECHFAB
req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
- materials = list("$metal"=20000,"$gold"=5000)
+ materials = list(MAT_METAL=20000,MAT_GOLD=5000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -735,7 +735,7 @@
build_type = MECHFAB
req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
- materials = list("$metal"=10000,"$glass"=5000,"$gold"=1000,"$silver"=2000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -746,7 +746,7 @@
build_type = MECHFAB
req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang
- materials = list("$metal"=20000,"$gold"=10000,"$uranium"=10000)
+ materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -757,7 +757,7 @@
build_type = MECHFAB
req_tech = list("combat" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -768,7 +768,7 @@
build_type = MECHFAB
req_tech = list("bluespace" = 10, "magnets" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -779,7 +779,7 @@
build_type = MECHFAB
req_tech = list("magnets" = 4, "powerstorage" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
- materials = list("$metal"=10000,"$glass"=2000,"$gold"=2000,"$silver"=3000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -791,7 +791,7 @@
build_type = MECHFAB
req_tech = list("combat" = 4, "magnets" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -802,7 +802,7 @@
build_type = MECHFAB
req_tech = list("combat" = 3, "magnets" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -813,7 +813,7 @@
build_type = MECHFAB
req_tech = list("combat" = 5, "materials" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -824,7 +824,7 @@
build_type = MECHFAB
req_tech = list("combat" = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -835,7 +835,7 @@
build_type = MECHFAB
req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
- materials = list("$metal"=20000,"$silver"=6000,"$uranium"=2000)
+ materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -846,7 +846,7 @@
build_type = MECHFAB
req_tech = list("combat" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
- materials = list("$metal"=22000,"$gold"=6000,"$silver"=8000)
+ materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -857,7 +857,7 @@
build_type = MECHFAB
req_tech = list("combat" = 6, "materials" = 6)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
- materials = list("$metal"=22000,"$gold"=6000,"$silver"=8000)
+ materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000)
construction_time = 100
category = list("Exosuit Equipment")
@@ -868,7 +868,7 @@
build_type = MECHFAB
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasma" = 2)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
- materials = list("$metal"=1500, "$glass"=500, "$plasma"=200)
+ materials = list(MAT_METAL=1500, MAT_GLASS=500, MAT_PLASMA=200)
construction_time = 100
category = list("Exosuit Equipment")
@@ -880,7 +880,7 @@
build_type = MECHFAB
req_tech = list("combat" = 4, "syndicate" = 3)
build_path = /obj/item/borg/upgrade/syndicate
- materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -890,7 +890,7 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/jetpack
req_tech = list("engineering" = 4, "power" = 4)
- materials = list("$metal"=10000, "$plasma"=5000, "$uranium" = 6000)
+ materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -900,7 +900,7 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/disablercooler
req_tech = list("combat" = 5, "power" = 4)
- materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 2000, "$diamond" = 500)
+ materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -909,7 +909,7 @@
id = "borg_upgrade_rename"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/rename
- materials = list("$metal"=35000)
+ materials = list(MAT_METAL=35000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -918,7 +918,7 @@
id = "borg_upgrade_reset"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/reset
- materials = list("$metal"=10000)
+ materials = list(MAT_METAL=10000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -927,7 +927,7 @@
id = "borg_upgrade_restart"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/restart
- materials = list("$metal"=60000 , "$glass"=5000)
+ materials = list(MAT_METAL=60000 , MAT_GLASS=5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -937,7 +937,7 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/vtec
req_tech = list("engineering" = 4, "materials" = 5)
- materials = list("$metal"=80000 , "$glass"=6000 , "$uranium"= 5000)
+ materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_URANIUM= 5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -947,7 +947,7 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/ddrill
req_tech = list("engineering" = 5, "materials" = 5)
- materials = list("$metal"=10000, "$diamond"=3750)
+ materials = list(MAT_METAL=10000, MAT_DIAMOND=3750)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -957,7 +957,7 @@
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/soh
req_tech = list("engineering" = 5, "materials" = 5, "bluespace" = 3)
- materials = list("$metal" = 10000, "$gold" = 250, "$uranium" = 500)
+ materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -967,33 +967,33 @@
id = "mecha_tracking"
build_type = MECHFAB
build_path =/obj/item/mecha_parts/mecha_tracking
- materials = list("$metal"=500)
+ materials = list(MAT_METAL=500)
construction_time = 50
category = list("Misc")
-
+
/datum/design/ipc_head
name = "IPC Head"
id = "ipc_head"
build_type = MECHFAB
build_path = /obj/item/organ/external/head/ipc
- materials = list("$metal"=15000, "$glass"=5000)
+ materials = list(MAT_METAL=15000, MAT_GLASS=5000)
construction_time = 350
category = list("Misc")
-
+
/datum/design/ipc_cell
name = "IPC Microbattery"
id = "ipc_cell"
build_type = MECHFAB
build_path = /obj/item/organ/cell
- materials = list("$metal"=2000, "$glass"=750)
+ materials = list(MAT_METAL=2000, MAT_GLASS=750)
construction_time = 200
category = list("Misc")
-
+
/datum/design/ipc_optics
name = "IPC Optical Sensor"
id = "ipc_optics"
build_type = MECHFAB
build_path = /obj/item/organ/optical_sensor
- materials = list("$metal"=1000, "$glass"=2500)
+ materials = list(MAT_METAL=1000, MAT_GLASS=2500)
construction_time = 200
category = list("Misc")
\ No newline at end of file
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index f38479d0c93..1cfd36c2bd6 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -7,7 +7,7 @@
id = "adv_mass_spectrometer"
req_tech = list("biotech" = 2, "magnets" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 74
build_path = "/obj/item/device/mass_spectrometer/adv"
category = list("Medical")
@@ -18,7 +18,7 @@
id = "adv_reagent_scanner"
req_tech = list("biotech" = 2, "magnets" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 74
build_path = /obj/item/device/reagent_scanner/adv
category = list("Medical")
@@ -29,7 +29,7 @@
id = "splitbeaker"
req_tech = list("materials" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 3000)
+ materials = list(MAT_METAL = 3000)
reliability_base = 76
build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact
category = list("Medical")
@@ -40,7 +40,7 @@
id = "cyborg_analyzer"
req_tech = list("programming" = 2, "biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 76
build_path = /obj/item/device/robotanalyzer
category = list("Medical")
@@ -51,7 +51,7 @@
id = "healthanalyzer"
req_tech = list("biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 20, "$glass" = 20)
+ materials = list(MAT_METAL = 20, MAT_GLASS = 20)
build_path = /obj/item/device/healthanalyzer
category = list("Medical")
@@ -61,7 +61,7 @@
id = "healthanalyzer_upgrade"
req_tech = list("biotech" = 2, "magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 20, "$glass" = 20)
+ materials = list(MAT_METAL = 20, MAT_GLASS = 20)
build_path = /obj/item/device/healthupgrade
category = list("Medical")
@@ -71,7 +71,7 @@
id = "defib"
req_tech = list("materials" = 7, "biotech" = 5, "powerstorage" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 2000, "$silver" = 1000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2000, MAT_SILVER = 1000)
reliability = 76
build_path = /obj/item/weapon/defibrillator
category = list("Medical")
@@ -83,7 +83,7 @@
id = "sensor_device"
req_tech = list("biotech" = 4, "magnets" = 3, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 76
build_path = /obj/item/device/sensor_device
category = list("Medical")
@@ -94,7 +94,7 @@
id = "mmi"
req_tech = list("programming" = 2, "biotech" = 3)
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1000, "$glass" = 500)
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
construction_time = 75
reliability_base = 76
build_path = /obj/item/device/mmi
@@ -106,7 +106,7 @@
id = "mass_spectrometer"
req_tech = list("biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 76
build_path = /obj/item/device/mass_spectrometer
category = list("Medical")
@@ -117,7 +117,7 @@
id = "posibrain"
req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$plasma" = 500, "$diamond" = 100)
+ materials = list(MAT_METAL = 2000, MAT_GLASS = 1000, MAT_SILVER = 1000, MAT_GOLD = 500, MAT_PLASMA = 500, MAT_DIAMOND = 100)
build_path = /obj/item/device/mmi/posibrain
category = list("Misc","Medical")
@@ -127,7 +127,7 @@
id = "mmi_radio"
req_tech = list("programming" = 2, "biotech" = 4)
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1200, "$glass" = 500)
+ materials = list(MAT_METAL = 1200, MAT_GLASS = 500)
construction_time = 75
reliability_base = 74
build_path = /obj/item/device/mmi/radio_enabled
@@ -139,7 +139,7 @@
id = "nanopaste"
req_tech = list("materials" = 4, "engineering" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 7000, "$glass" = 7000)
+ materials = list(MAT_METAL = 7000, MAT_GLASS = 7000)
build_path = /obj/item/stack/nanopaste
category = list("Medical")
@@ -149,7 +149,7 @@
id = "reagent_scanner"
req_tech = list("biotech" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 30, "$glass" = 20)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
reliability_base = 76
build_path = /obj/item/device/reagent_scanner
category = list("Medical")
@@ -160,7 +160,7 @@
id = "sflash"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = MECHFAB
- materials = list("$metal" = 750, "$glass" = 750)
+ materials = list(MAT_METAL = 750, MAT_GLASS = 750)
construction_time = 100
reliability_base = 76
build_path = /obj/item/device/flash/synthetic
@@ -172,7 +172,7 @@
id = "scalpel_laser1"
req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 12500, "$glass" = 7500)
+ materials = list(MAT_METAL = 12500, MAT_GLASS = 7500)
build_path = /obj/item/weapon/scalpel/laser1
category = list("Medical")
@@ -182,7 +182,7 @@
id = "scalpel_laser2"
req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500)
+ materials = list(MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 2500)
build_path = /obj/item/weapon/scalpel/laser2
category = list("Medical")
@@ -192,7 +192,7 @@
id = "scalpel_laser3"
req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500)
+ materials = list(MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 2000, MAT_GOLD = 1500)
build_path = /obj/item/weapon/scalpel/laser3
category = list("Medical")
@@ -202,6 +202,50 @@
id = "scalpel_manager"
req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4)
build_type = PROTOLATHE
- materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750)
+ materials = list (MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 750)
build_path = /obj/item/weapon/scalpel/manager
+ category = list("Medical")
+
+/////////////////////////////////////////
+////////////Regular Implants/////////////
+/////////////////////////////////////////
+
+/datum/design/implanter
+ name = "Implanter"
+ desc = "A sterile automatic implant injector."
+ id = "implanter"
+ req_tech = list("materials" = 1, "programming" = 2, "biotech" = 3)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 600, MAT_GLASS = 200)
+ build_path = /obj/item/weapon/implanter
+ category = list("Medical")
+
+/datum/design/implantcase
+ name = "Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implantcase"
+ req_tech = list("materials" = 1, "biotech" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_GLASS = 500)
+ build_path = /obj/item/weapon/implantcase
+ category = list("Medical")
+
+/datum/design/implant_freedom
+ name = "Freedom Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implant_freedom"
+ req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "syndicate" = 5)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 250)
+ build_path = /obj/item/weapon/implantcase/freedom
+ category = list("Medical")
+
+/datum/design/implant_adrenalin
+ name = "Adrenalin Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implant_adrenalin"
+ req_tech = list("materials" = 2, "biotech" = 5, "combat" = 3, "syndicate" = 6)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 100, MAT_DIAMOND = 200)
+ build_path = /obj/item/weapon/implantcase/adrenaline
category = list("Medical")
\ No newline at end of file
diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm
index c78e79ca50f..32a4012926f 100644
--- a/code/modules/research/designs/mining_designs.dm
+++ b/code/modules/research/designs/mining_designs.dm
@@ -7,7 +7,7 @@
id = "drill_diamond"
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 3750) //Yes, a whole diamond is needed.
reliability_base = 79
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
category = list("Mining")
@@ -18,7 +18,7 @@
id = "pick_diamond"
req_tech = list("materials" = 6)
build_type = PROTOLATHE
- materials = list("$diamond" = 3000)
+ materials = list(MAT_DIAMOND = 3000)
build_path = /obj/item/weapon/pickaxe/diamond
category = list("Mining")
@@ -28,7 +28,7 @@
id = "drill"
req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 6000, "$glass" = 1000)
+ materials = list(MAT_METAL = 6000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/pickaxe/drill
category = list("Mining")
@@ -38,7 +38,7 @@
id = "plasmacutter"
req_tech = list("materials" = 2, "plasmatech" = 2, "engineering" = 2, "combat" = 1, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
+ materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_GOLD = 500, MAT_PLASMA = 500)
reliability_base = 79
build_path = /obj/item/weapon/gun/energy/plasmacutter
category = list("Mining")
@@ -49,7 +49,7 @@
id = "plasmacutter_adv"
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3, "combat" = 3, "magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 3000, "$glass" = 1000, "$plasma" = 2000, "$gold" = 500)
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500)
reliability_base = 79
build_path = /obj/item/weapon/gun/energy/plasmacutter/adv
category = list("Mining")
@@ -60,6 +60,6 @@
id = "jackhammer"
req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6)
build_type = PROTOLATHE
- materials = list("$metal" = 8000, "$glass" = 1500, "$silver" = 2000, "$diamond" = 6000)
+ materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_DIAMOND = 6000)
build_path = /obj/item/weapon/pickaxe/drill/jackhammer
category = list("Mining")
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 403e5745ca8..44aff0048d5 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -7,27 +7,27 @@
id = "design_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 10)
build_path = /obj/item/weapon/disk/design_disk
category = list("Miscellaneous")
-
+
/datum/design/intellicard
name = "Intellicard"
desc = "Allows for the construction of an intellicard."
id = "intellicard"
req_tech = list("programming" = 4, "materials" = 4)
build_type = PROTOLATHE
- materials = list("$glass" = 1000, "$gold" = 200)
+ materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
build_path = /obj/item/device/aicard
category = list("Miscellaneous")
-
+
/datum/design/paicard
name = "Personal Artificial Intelligence Card"
desc = "Allows for the construction of a pAI Card"
id = "paicard"
req_tech = list("programming" = 2)
build_type = PROTOLATHE
- materials = list("$glass" = 500, "$metal" = 500)
+ materials = list(MAT_GLASS = 500, MAT_METAL = 500)
build_path = /obj/item/device/paicard
category = list("Miscellaneous")
@@ -37,7 +37,7 @@
id = "tech_disk"
req_tech = list("programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ materials = list(MAT_METAL = 30, MAT_GLASS = 10)
build_path = /obj/item/weapon/disk/tech_disk
category = list("Miscellaneous")
@@ -47,6 +47,6 @@
id = "digitalcamera"
req_tech = list("programming" = 2, "materials" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 500, "$glass" = 300)
+ materials = list(MAT_METAL = 500, MAT_GLASS = 300)
build_path = /obj/item/device/camera/digital
category = list("Miscellaneous")
\ No newline at end of file
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index 70be59438fa..9fb7000bf52 100644
--- a/code/modules/research/designs/power_designs.dm
+++ b/code/modules/research/designs/power_designs.dm
@@ -8,7 +8,7 @@
id = "basic_cell"
req_tech = list("powerstorage" = 1)
build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB
- materials = list("$metal" = 700, "$glass" = 50)
+ materials = list(MAT_METAL = 700, MAT_GLASS = 50)
construction_time=100
build_path = /obj/item/weapon/stock_parts/cell
category = list("Misc","Power")
@@ -19,7 +19,7 @@
id = "high_cell"
req_tech = list("powerstorage" = 2)
build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB
- materials = list("$metal" = 700, "$glass" = 60)
+ materials = list(MAT_METAL = 700, MAT_GLASS = 60)
construction_time=100
build_path = /obj/item/weapon/stock_parts/cell/high
category = list("Misc","Power")
@@ -31,7 +31,7 @@
req_tech = list("powerstorage" = 5, "materials" = 4)
reliability_base = 70
build_type = PROTOLATHE | MECHFAB | PODFAB
- materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
+ materials = list(MAT_METAL = 400, MAT_GOLD = 150, MAT_SILVER = 150, MAT_GLASS = 70)
construction_time=100
build_path = /obj/item/weapon/stock_parts/cell/hyper
category = list("Misc","Power")
@@ -43,7 +43,7 @@
req_tech = list("powerstorage" = 3, "materials" = 2)
reliability_base = 75
build_type = PROTOLATHE | MECHFAB | PODFAB
- materials = list("$metal" = 700, "$glass" = 70)
+ materials = list(MAT_METAL = 700, MAT_GLASS = 70)
construction_time=100
build_path = /obj/item/weapon/stock_parts/cell/super
category = list("Misc","Power")
@@ -55,7 +55,7 @@
req_tech = list("powerstorage" = 6, "materials" = 5)
reliability_base = 70
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 800, "$gold" = 300, "$silver" = 300, "$glass" = 160, "$diamond" = 160)
+ materials = list(MAT_METAL = 800, MAT_GOLD = 300, MAT_SILVER = 300, MAT_GLASS = 160, MAT_DIAMOND = 160)
construction_time=100
build_path = /obj/item/weapon/stock_parts/cell/bluespace
category = list("Misc","Power")
@@ -67,7 +67,7 @@
req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3)
build_type = IMPRINTER
reliability_base = 79
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman
category = list("Engineering Machinery")
@@ -78,7 +78,7 @@
req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5)
build_type = IMPRINTER
reliability_base = 74
- materials = list("$glass" = 2000, "sacid" = 20)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman/mrs
category = list("Engineering Machinery")
@@ -89,6 +89,6 @@
req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
build_type = IMPRINTER
reliability_base = 76
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pacman/super
category = list("Engineering Machinery")
diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm
index 3f7b5182d09..57f8490be5e 100644
--- a/code/modules/research/designs/spacepod_designs.dm
+++ b/code/modules/research/designs/spacepod_designs.dm
@@ -5,7 +5,7 @@
id = "spacepod_main"
req_tech = list("materials" = 1) //All parts required to build a basic pod have materials 1, so the mechanic can do his damn job.
build_type = PODFAB
- materials = list("$metal"=5000)
+ materials = list(MAT_METAL=5000)
build_path = /obj/item/weapon/circuitboard/mecha/pod
category = list("Pod_Parts")
@@ -21,7 +21,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/pod_frame/fore_port
category = list("Pod_Frame")
- materials = list("$metal"=15000,"$glass"=5000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000)
/datum/design/podframe_ap
construction_time = 200
@@ -32,7 +32,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/pod_frame/aft_port
category = list("Pod_Frame")
- materials = list("$metal"=15000,"$glass"=5000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000)
/datum/design/podframe_fs
construction_time = 200
@@ -43,7 +43,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/pod_frame/fore_starboard
category = list("Pod_Frame")
- materials = list("$metal"=15000,"$glass"=5000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000)
/datum/design/podframe_as
construction_time = 200
@@ -54,7 +54,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/pod_frame/aft_starboard
category = list("Pod_Frame")
- materials = list("$metal"=15000,"$glass"=5000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000)
//////////////////////////
////////POD CORE////////
@@ -69,7 +69,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/core
category = list("Pod_Parts")
- materials = list("$metal"=5000,"$uranium"=1000,"$plasma"=5000)
+ materials = list(MAT_METAL=5000,MAT_URANIUM=1000,MAT_PLASMA=5000)
//////////////////////////////////////////
////////SPACEPOD ARMOR////////////////////
@@ -84,7 +84,7 @@
req_tech = list("materials" = 1)
build_path = /obj/item/pod_parts/armor
category = list("Pod_Armor")
- materials = list("$metal"=15000,"$glass"=5000,"$plasma"=10000)
+ materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000)
//////////////////////////////////////////
//////SPACEPOD GUNS///////////////////////
@@ -98,7 +98,7 @@
req_tech = list("materials" = 2, "combat" = 2)
build_path = /obj/item/device/spacepod_equipment/weaponry/taser
category = list("Pod_Weaponry")
- materials = list("$metal" = 15000)
+ materials = list(MAT_METAL = 15000)
locked = 1
/datum/design/pod_gun_btaser
@@ -110,7 +110,7 @@
req_tech = list("materials" = 3, "combat" = 3)
build_path = /obj/item/device/spacepod_equipment/weaponry/burst_taser
category = list("Pod_Weaponry")
- materials = list("$metal" = 15000,"$plasma"=2000)
+ materials = list(MAT_METAL = 15000,MAT_PLASMA=2000)
locked = 1
/datum/design/pod_gun_laser
@@ -122,7 +122,7 @@
req_tech = list("materials" = 3, "combat" = 3, "plasma" = 2)
build_path = /obj/item/device/spacepod_equipment/weaponry/laser
category = list("Pod_Weaponry")
- materials = list("$metal"=10000,"$glass"=5000,"$gold"=1000,"$silver"=2000)
+ materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000)
locked = 1
//////////////////////////////////////////
//////SPACEPOD MISC. ITEMS////////////////
@@ -135,6 +135,6 @@
id = "podmisc_tracker"
req_tech = list("materials" = 2) //Materials 2: easy to get, no trackers with 0 science progress
build_type = PODFAB
- materials = list("$metal"=5000)
+ materials = list(MAT_METAL=5000)
build_path = /obj/item/device/spacepod_equipment/misc/tracker
category = list("Pod_Parts")
\ No newline at end of file
diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm
index 6f8ff421069..fcfc62012ea 100644
--- a/code/modules/research/designs/stock_parts_designs.dm
+++ b/code/modules/research/designs/stock_parts_designs.dm
@@ -8,7 +8,7 @@
id = "basic_capacitor"
req_tech = list("powerstorage" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/stock_parts/capacitor
category = list("Stock Parts")
@@ -18,7 +18,7 @@
id = "basic_sensor"
req_tech = list("magnets" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 50, "$glass" = 20)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/weapon/stock_parts/scanning_module
category = list("Stock Parts")
@@ -28,7 +28,7 @@
id = "micro_mani"
req_tech = list("materials" = 1, "programming" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30)
+ materials = list(MAT_METAL = 30)
build_path = /obj/item/weapon/stock_parts/manipulator
category = list("Stock Parts")
@@ -38,7 +38,7 @@
id = "basic_micro_laser"
req_tech = list("magnets" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 10, "$glass" = 20)
+ materials = list(MAT_METAL = 10, MAT_GLASS = 20)
build_path = /obj/item/weapon/stock_parts/micro_laser
category = list("Stock Parts")
@@ -48,7 +48,7 @@
id = "basic_matter_bin"
req_tech = list("materials" = 1)
build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 80)
+ materials = list(MAT_METAL = 80)
build_path = /obj/item/weapon/stock_parts/matter_bin
category = list("Stock Parts")
@@ -58,7 +58,7 @@
id = "adv_capacitor"
req_tech = list("powerstorage" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 50, "$glass" = 50)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/weapon/stock_parts/capacitor/adv
category = list("Stock Parts")
@@ -68,7 +68,7 @@
id = "adv_sensor"
req_tech = list("magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 50, "$glass" = 20)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/weapon/stock_parts/scanning_module/adv
category = list("Stock Parts")
@@ -78,7 +78,7 @@
id = "nano_mani"
req_tech = list("materials" = 3, "programming" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 30)
+ materials = list(MAT_METAL = 30)
build_path = /obj/item/weapon/stock_parts/manipulator/nano
category = list("Stock Parts")
@@ -88,7 +88,7 @@
id = "high_micro_laser"
req_tech = list("magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 10, "$glass" = 20)
+ materials = list(MAT_METAL = 10, MAT_GLASS = 20)
build_path = /obj/item/weapon/stock_parts/micro_laser/high
category = list("Stock Parts")
@@ -98,7 +98,7 @@
id = "adv_matter_bin"
req_tech = list("materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 80)
+ materials = list(MAT_METAL = 80)
build_path = /obj/item/weapon/stock_parts/matter_bin/adv
category = list("Stock Parts")
@@ -109,7 +109,7 @@
req_tech = list("powerstorage" = 5, "materials" = 4)
build_type = PROTOLATHE
reliability_base = 71
- materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50, MAT_GOLD = 20)
build_path = /obj/item/weapon/stock_parts/capacitor/super
category = list("Stock Parts")
@@ -119,7 +119,7 @@
id = "phasic_sensor"
req_tech = list("magnets" = 5, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10)
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20, MAT_SILVER = 10)
reliability_base = 72
build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
category = list("Stock Parts")
@@ -130,7 +130,7 @@
id = "pico_mani"
req_tech = list("materials" = 5, "programming" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 30)
+ materials = list(MAT_METAL = 30)
reliability_base = 73
build_path = /obj/item/weapon/stock_parts/manipulator/pico
category = list("Stock Parts")
@@ -141,7 +141,7 @@
id = "ultra_micro_laser"
req_tech = list("magnets" = 5, "materials" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10)
+ materials = list(MAT_METAL = 10, MAT_GLASS = 20, MAT_URANIUM = 10)
reliability_base = 70
build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
category = list("Stock Parts")
@@ -152,7 +152,7 @@
id = "super_matter_bin"
req_tech = list("materials" = 5)
build_type = PROTOLATHE
- materials = list("$metal" = 80)
+ materials = list(MAT_METAL = 80)
reliability_base = 75
build_path = /obj/item/weapon/stock_parts/matter_bin/super
category = list("Stock Parts")
@@ -164,7 +164,7 @@
req_tech = list("powerstorage" = 6, "materials" = 5)
build_type = PROTOLATHE
reliability_base = 71
- materials = list("$metal" = 100, "$glass" = 100, "$diamond" = 40)
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100, MAT_DIAMOND = 40)
build_path = /obj/item/weapon/stock_parts/capacitor/quadratic
category = list("Stock Parts")
@@ -174,7 +174,7 @@
id = "triphasic_scanning"
req_tech = list("magnets" = 6, "materials" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 100, "$glass" = 40, "$diamond" = 20)
+ materials = list(MAT_METAL = 100, MAT_GLASS = 40, MAT_DIAMOND = 20)
reliability_base = 72
build_path = /obj/item/weapon/stock_parts/scanning_module/triphasic
category = list("Stock Parts")
@@ -185,7 +185,7 @@
id = "femto_mani"
req_tech = list("materials" = 6, "programming" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 60, "$diamond" = 30)
+ materials = list(MAT_METAL = 60, MAT_DIAMOND = 30)
reliability_base = 73
build_path = /obj/item/weapon/stock_parts/manipulator/femto
category = list("Stock Parts")
@@ -196,7 +196,7 @@
id = "quadultra_micro_laser"
req_tech = list("magnets" = 6, "materials" = 6)
build_type = PROTOLATHE
- materials = list("$metal" = 20, "$glass" = 40, "$uranium" = 20, "$diamond" = 20)
+ materials = list(MAT_METAL = 20, MAT_GLASS = 40, MAT_URANIUM = 20, MAT_DIAMOND = 20)
reliability_base = 70
build_path = /obj/item/weapon/stock_parts/micro_laser/quadultra
category = list("Stock Parts")
@@ -207,7 +207,7 @@
id = "bluespace_matter_bin"
req_tech = list("materials" = 6)
build_type = PROTOLATHE
- materials = list("$metal" = 160, "$diamond" = 200)
+ materials = list(MAT_METAL = 160, MAT_DIAMOND = 200)
reliability_base = 75
build_path = /obj/item/weapon/stock_parts/matter_bin/bluespace
category = list("Stock Parts")
@@ -218,7 +218,7 @@
id = "rped"
req_tech = list("engineering" = 3, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 10000, "$glass" = 5000) //hardcore
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 5000) //hardcore
build_path = /obj/item/weapon/storage/part_replacer
category = list("Stock Parts")
@@ -228,6 +228,6 @@
id = "bs_rped"
req_tech = list("engineering" = 3, "materials" = 5, "programming" = 3, "bluespace" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 15000, "$glass" = 5000, "$silver" = 2500) //hardcore
+ materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore
build_path = /obj/item/weapon/storage/part_replacer/bluespace
category = list("Stock Parts")
\ No newline at end of file
diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm
index 2f60fc78311..4c6d72c0120 100644
--- a/code/modules/research/designs/telecomms_designs.dm
+++ b/code/modules/research/designs/telecomms_designs.dm
@@ -7,17 +7,17 @@
id = "s-bus"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/bus
category = list("Subspace Telecomms")
-
+
/datum/design/telecomms_hub
name = "Machine Board (Hub Mainframe)"
desc = "Allows for the construction of Telecommunications Hub Mainframes."
id = "s-hub"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/hub
category = list("Subspace Telecomms")
@@ -28,17 +28,17 @@
id = "s-processor"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/processor
category = list("Subspace Telecomms")
-
+
/datum/design/telecomms_relay
name = "Machine Board (Relay Mainframe)"
desc = "Allows for the construction of Telecommunications Relay Mainframes."
id = "s-relay"
req_tech = list("programming" = 1, "engineering" = 2, "bluespace" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/relay
category = list("Subspace Telecomms")
@@ -48,7 +48,7 @@
id = "s-server"
req_tech = list("programming" = 2, "engineering" = 2)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/server
category = list("Subspace Telecomms")
@@ -58,27 +58,27 @@
id = "s-broadcaster"
req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
category = list("Subspace Telecomms")
-
+
/datum/design/subspace_receiver
name = "Machine Board (Subspace Receiver)"
desc = "Allows for the construction of Subspace Receiver equipment."
id = "s-receiver"
req_tech = list("programming" = 2, "engineering" = 1, "bluespace" = 1)
build_type = IMPRINTER
- materials = list("$glass" = 1000, "sacid" = 20)
+ materials = list(MAT_GLASS = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/telecomms/receiver
category = list("Subspace Telecomms")
-
+
/datum/design/subspace_crystal
name = "Ansible Crystal"
desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
id = "s-crystal"
req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 1)
build_type = PROTOLATHE
- materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20)
+ materials = list(MAT_GLASS = 1000, MAT_SILVER = 20, MAT_GOLD = 20)
build_path = /obj/item/weapon/stock_parts/subspace/crystal
category = list("Stock Parts")
@@ -88,9 +88,9 @@
id = "s-filter"
req_tech = list("programming" = 2, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 40, "$silver" = 10)
+ materials = list(MAT_METAL = 40, MAT_SILVER = 10)
build_path = /obj/item/weapon/stock_parts/subspace/filter
- category = list("Stock Parts")
+ category = list("Stock Parts")
/datum/design/subspace_amplifier
name = "Subspace Amplifier"
@@ -98,7 +98,7 @@
id = "s-amplifier"
req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1)
build_type = PROTOLATHE
- materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15)
+ materials = list(MAT_METAL = 10, MAT_GOLD = 30, MAT_URANIUM = 15)
build_path = /obj/item/weapon/stock_parts/subspace/amplifier
category = list("Stock Parts")
@@ -108,17 +108,17 @@
id = "s-analyzer"
req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1)
build_type = PROTOLATHE
- materials = list("$metal" = 10, "$gold" = 15)
+ materials = list(MAT_METAL = 10, MAT_GOLD = 15)
build_path = /obj/item/weapon/stock_parts/subspace/analyzer
- category = list("Stock Parts")
-
+ category = list("Stock Parts")
+
/datum/design/subspace_ansible
name = "Subspace Ansible"
desc = "A compact module capable of sensing extradimensional activity."
id = "s-ansible"
req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1)
build_type = PROTOLATHE
- materials = list("$metal" = 80, "$silver" = 20)
+ materials = list(MAT_METAL = 80, MAT_SILVER = 20)
build_path = /obj/item/weapon/stock_parts/subspace/ansible
category = list("Stock Parts")
@@ -128,16 +128,16 @@
id = "s-transmitter"
req_tech = list("magnets" = 3, "materials" = 3, "bluespace" = 2)
build_type = PROTOLATHE
- materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15)
+ materials = list(MAT_GLASS = 100, MAT_SILVER = 10, MAT_URANIUM = 15)
build_path = /obj/item/weapon/stock_parts/subspace/transmitter
- category = list("Stock Parts")
-
+ category = list("Stock Parts")
+
/datum/design/subspace_treatment
name = "Subspace Treatment Disk"
desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves."
id = "s-treatment"
req_tech = list("programming" = 2, "magnets" = 1, "materials" = 2, "bluespace" = 1)
build_type = PROTOLATHE
- materials = list("$metal" = 10, "$silver" = 20)
+ materials = list(MAT_METAL = 10, MAT_SILVER = 20)
build_path = /obj/item/weapon/stock_parts/subspace/treatment
category = list("Stock Parts")
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index f27eb81f01e..e750275ef4e 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -8,7 +8,7 @@
id = "nuclear_gun"
req_tech = list("combat" = 4, "materials" = 5, "powerstorage" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 2000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 2000)
reliability_base = 76
build_path = /obj/item/weapon/gun/energy/gun/nuclear
locked = 1
@@ -20,7 +20,7 @@
id = "decloner"
req_tech = list("combat" = 6, "materials" = 7, "biotech" = 5, "powerstorage" = 6)
build_type = PROTOLATHE
- materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40)
+ materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000, "mutagen" = 40)
build_path = /obj/item/weapon/gun/energy/decloner
locked = 1
category = list("Weapons")
@@ -31,7 +31,7 @@
id = "largecrossbow"
req_tech = list("combat" = 5, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 1500, "$uranium" = 1500, "$silver" = 1500)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 1500, MAT_URANIUM = 1500, MAT_SILVER = 1500)
build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large
locked = 1
category = list("Weapons")
@@ -42,7 +42,7 @@
id = "flora_gun"
req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 2000, "$glass" = 500, "radium" = 20)
+ materials = list(MAT_METAL = 2000, MAT_GLASS = 500, "radium" = 20)
build_path = /obj/item/weapon/gun/energy/floragun
category = list("Weapons")
@@ -52,7 +52,7 @@
id = "ioncarbine"
req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4)
build_type = PROTOLATHE
- materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000)
+ materials = list(MAT_SILVER = 4000, MAT_METAL = 6000, MAT_URANIUM = 1000)
build_path = /obj/item/weapon/gun/energy/ionrifle/carbine
locked = 1
category = list("Weapons")
@@ -63,7 +63,7 @@
id = "large_Grenade"
req_tech = list("combat" = 3, "materials" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 3000)
+ materials = list(MAT_METAL = 3000)
reliability_base = 79
build_path = /obj/item/weapon/grenade/chem_grenade/large
category = list("Weapons")
@@ -74,7 +74,7 @@
id = "tele_shield"
req_tech = list("combat" = 4, "materials" = 3, "engineering" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 4000, "$glass" = 5000, "$silver" = 300)
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 5000, MAT_SILVER = 300)
build_path = /obj/item/weapon/shield/riot/tele
category = list("Weapons")
@@ -84,7 +84,7 @@
id = "lasercannon"
req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 10000, "$glass" = 2000, "$diamond" = 2000)
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_DIAMOND = 2000)
build_path = /obj/item/weapon/gun/energy/lasercannon
locked = 1
category = list("Weapons")
@@ -95,7 +95,7 @@
id = "receiver"
req_tech = list("combat" = 5, "materials" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 6500, "$silver" = 500)
+ materials = list(MAT_METAL = 6500, MAT_SILVER = 500)
build_path = /obj/item/weaponcrafting/receiver
category = list("Weapons")
@@ -105,7 +105,7 @@
id = "ppistol"
req_tech = list("combat" = 5, "plasmatech" = 4)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 1000, "$plasma" = 3000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_PLASMA = 3000)
build_path = /obj/item/weapon/gun/energy/toxgun
locked = 1
category = list("Weapons")
@@ -116,7 +116,7 @@
id = "smg"
req_tech = list("combat" = 4, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000)
+ materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000)
build_path = /obj/item/weapon/gun/projectile/automatic
locked = 1
category = list("Weapons")
@@ -127,7 +127,7 @@
id = "mag_smg"
req_tech = list("combat" = 4, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 2000)
+ materials = list(MAT_METAL = 2000)
build_path = /obj/item/ammo_box/magazine/smgm9mm
category = list("Weapons")
@@ -137,7 +137,7 @@
id = "rapidsyringe"
req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 1000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/gun/syringe/rapidsyringe
category = list("Weapons")
@@ -147,7 +147,7 @@
id = "stunshell"
req_tech = list("combat" = 3, "materials" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 200)
+ materials = list(MAT_METAL = 200)
build_path = /obj/item/ammo_casing/shotgun/stunslug
category = list("Weapons")
@@ -157,7 +157,7 @@
id = "stunrevolver"
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 4000, "$glass" = 1000)
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/gun/energy/stunrevolver
locked = 1
category = list("Weapons")
@@ -168,7 +168,7 @@
id = "temp_gun"
req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2)
build_type = PROTOLATHE
- materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000)
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000)
build_path = /obj/item/weapon/gun/energy/temperature
locked = 1
category = list("Weapons")
@@ -179,7 +179,7 @@
id = "suppressor"
req_tech = list("combat" = 6, "engineering" = 5, "syndicate" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 2000, "$silver" = 500)
+ materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/weapon/suppressor
category = list("Weapons")
@@ -189,7 +189,7 @@
id = "techshotshell"
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 4, "magnets" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 1000, "$glass" = 200, "$silver" = 300)
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 200, MAT_SILVER = 300)
build_path = /obj/item/ammo_casing/shotgun/techshell
category = list("Weapons")
@@ -199,7 +199,7 @@
id = "xray"
req_tech = list("combat" = 6, "materials" = 5, "biotech" = 5, "powerstorage" = 4)
build_type = PROTOLATHE
- materials = list("$gold" = 5000,"$uranium" = 10000, "$metal" = 4000)
+ materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000, MAT_METAL = 4000)
build_path = /obj/item/weapon/gun/energy/xray
locked = 1
category = list("Weapons")
\ No newline at end of file
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 37fc63ce552..4d07d25704d 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -52,7 +52,7 @@ Note: Must be placed west/left of and R&D console to function.
RefreshParts()
reagents.my_atom = src
-
+
/obj/machinery/r_n_d/protolathe/upgraded/New()
..()
component_parts = list()
@@ -85,21 +85,21 @@ Note: Must be placed west/left of and R&D console to function.
/obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, var/M) // now returns how many times the item can be built with the material
var/A = 0
switch(M)
- if("$metal")
+ if(MAT_METAL)
A = m_amount
- if("$glass")
+ if(MAT_GLASS)
A = g_amount
- if("$gold")
+ if(MAT_GOLD)
A = gold_amount
- if("$silver")
+ if(MAT_SILVER)
A = silver_amount
- if("$plasma")
+ if(MAT_PLASMA)
A = plasma_amount
- if("$uranium")
+ if(MAT_URANIUM)
A = uranium_amount
- if("$diamond")
+ if(MAT_DIAMOND)
A = diamond_amount
- if("$bananium")
+ if(MAT_BANANIUM)
A = clown_amount
else
A = reagents.get_reagent_amount(M)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index dca34a6b9b6..b9c5487ca42 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -296,8 +296,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else //Same design always gain quality
screen = 2.3 //Crit fail gives the same design a lot of reliability, like really a lot
if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any.
- linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.m_amt*(linked_destroy.decon_mod/10)))
- linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.g_amt*(linked_destroy.decon_mod/10)))
+ linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_METAL]*(linked_destroy.decon_mod/10)))
+ linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_GLASS]*(linked_destroy.decon_mod/10)))
linked_destroy.loaded_item = null
else
screen = 1.0
@@ -405,21 +405,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(enough_materials)
for(var/M in being_built.materials)
switch(M)
- if("$metal")
+ if(MAT_METAL)
linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount)))
- if("$glass")
+ if(MAT_GLASS)
linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount)))
- if("$gold")
+ if(MAT_GOLD)
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount)))
- if("$silver")
+ if(MAT_SILVER)
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount)))
- if("$plasma")
+ if(MAT_PLASMA)
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount)))
- if("$uranium")
+ if(MAT_URANIUM)
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount)))
- if("$diamond")
+ if(MAT_DIAMOND)
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount)))
- if("$bananium")
+ if(MAT_BANANIUM)
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount)))
else
linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount)
@@ -434,8 +434,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if( new_item.type == /obj/item/weapon/storage/backpack/holding )
new_item.investigate_log("built by [key]","singulo")
new_item.reliability = R
- new_item.m_amt /= coeff
- new_item.g_amt /= coeff
+ new_item.materials[MAT_METAL] /= coeff
+ new_item.materials[MAT_GLASS] /= coeff
if(linked_lathe.hacked)
R = max((new_item.reliability/2), 0)
if(O)
@@ -482,11 +482,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
g2g = 0
break
switch(M)
- if("$glass")
+ if(MAT_GLASS)
linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]/coeff))
- if("$gold")
+ if(MAT_GOLD)
linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]/coeff))
- if("$diamond")
+ if(MAT_DIAMOND)
linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]/coeff))
else
linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]/coeff)
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 5d33c5982f2..bf27e538294 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -271,8 +271,7 @@ datum/tech/robotics
icon_state = "datadisk2"
item_state = "card-id"
w_class = 1.0
- m_amt = 30
- g_amt = 10
+ materials = list(MAT_METAL=30, MAT_GLASS=10)
var/datum/tech/stored
/obj/item/weapon/disk/tech_disk/New()
@@ -286,8 +285,7 @@ datum/tech/robotics
icon_state = "datadisk2"
item_state = "card-id"
w_class = 1.0
- m_amt = 30
- g_amt = 10
+ materials = list(MAT_METAL=30, MAT_GLASS=10)
var/datum/design/blueprint
/obj/item/weapon/disk/design_disk/New()
diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm
index b9ab6fc0b60..a91ed35ca55 100644
--- a/code/modules/research/xenoarchaeology/chemistry.dm
+++ b/code/modules/research/xenoarchaeology/chemistry.dm
@@ -81,8 +81,7 @@ datum
desc = "A small, open-topped glass container for delicate research samples. It sports a re-useable strip for labelling with a pen."
icon = 'icons/obj/device.dmi'
icon_state = "solution_tray"
- m_amt = 0
- g_amt = 5
+ materials = list(MAT_GLASS=5)
w_class = 1.0
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(1, 2)
diff --git a/code/modules/shieldgen/circuits_and_designs.dm b/code/modules/shieldgen/circuits_and_designs.dm
index 1ff3f01dea7..b13a5751822 100644
--- a/code/modules/shieldgen/circuits_and_designs.dm
+++ b/code/modules/shieldgen/circuits_and_designs.dm
@@ -22,7 +22,7 @@ datum/design/shield_gen_ex
id = "shield_gen"
req_tech = list("bluespace" = 4, "plasmatech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_GOLD = 10000)
build_path = "/obj/machinery/shield_gen/external"
////////////////////////////////////////
@@ -48,7 +48,7 @@ datum/design/shield_gen
id = "shield_gen"
req_tech = list("bluespace" = 4, "plasmatech" = 3)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_GOLD = 10000)
build_path = "/obj/machinery/shield_gen/external"
////////////////////////////////////////
@@ -74,5 +74,5 @@ datum/design/shield_cap
id = "shield_cap"
req_tech = list("magnets" = 3, "powerstorage" = 4)
build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$silver" = 10000)
+ materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_SILVER = 10000)
build_path = "/obj/machinery/shield_gen/external"
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 0b91cbd4e9e..da41f1298b4 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -3,8 +3,7 @@
desc = "Retracts stuff."
icon = 'icons/obj/surgery.dmi'
icon_state = "retractor"
- m_amt = 6000
- g_amt = 3000
+ materials = list(MAT_METAL=6000, MAT_GLASS=3000)
flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
@@ -15,8 +14,7 @@
desc = "You think you have seen this before."
icon = 'icons/obj/surgery.dmi'
icon_state = "hemostat"
- m_amt = 5000
- g_amt = 2500
+ materials = list(MAT_METAL=5000, MAT_GLASS=2500)
flags = CONDUCT
w_class = 1.0
origin_tech = "materials=1;biotech=1"
@@ -28,8 +26,7 @@
desc = "This stops bleeding."
icon = 'icons/obj/surgery.dmi'
icon_state = "cautery"
- m_amt = 2500
- g_amt = 750
+ materials = list(MAT_METAL=2500, MAT_GLASS=750)
flags = CONDUCT
w_class = 1.0
origin_tech = "materials=1;biotech=1"
@@ -42,8 +39,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "drill"
hitsound = 'sound/weapons/drill.ogg'
- m_amt = 10000
- g_amt = 6000
+ materials = list(MAT_METAL=10000, MAT_GLASS=6000)
flags = CONDUCT
force = 15.0
sharp = 1
@@ -71,8 +67,7 @@
throwforce = 5.0
throw_speed = 3
throw_range = 5
- m_amt = 4000
- g_amt = 1000
+ materials = list(MAT_METAL=4000, MAT_GLASS=1000)
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -136,8 +131,7 @@
throwforce = 9.0
throw_speed = 3
throw_range = 5
- m_amt = 10000
- g_amt = 6000
+ materials = list(MAT_METAL=10000, MAT_GLASS=6000)
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "sawed", "cut")
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 5c303cbf642..6c36fd0651b 100644
Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ
diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi
index 0f9dc460825..b50ef0e13e3 100644
Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 64e1b4941be..6ee1fbd0fd3 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 7e36a94c82d..aa5649833be 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -179,6 +179,7 @@
#include "code\datums\datumvars.dm"
#include "code\datums\gas_mixture.dm"
#include "code\datums\martial.dm"
+#include "code\datums\material_container.dm"
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"
#include "code\datums\modules.dm"
@@ -958,6 +959,7 @@
#include "code\modules\alarm\power_alarm.dm"
#include "code\modules\assembly\assembly.dm"
#include "code\modules\assembly\bomb.dm"
+#include "code\modules\assembly\health.dm"
#include "code\modules\assembly\helpers.dm"
#include "code\modules\assembly\holder.dm"
#include "code\modules\assembly\igniter.dm"
@@ -1624,8 +1626,6 @@
#include "code\modules\reagents\Chemistry-Holder.dm"
#include "code\modules\reagents\Chemistry-Machinery.dm"
#include "code\modules\reagents\Chemistry-Readme.dm"
-#include "code\modules\reagents\Chemistry-Reagents.dm"
-#include "code\modules\reagents\Chemistry-Recipes.dm"
#include "code\modules\reagents\dartgun.dm"
#include "code\modules\reagents\grenade_launcher.dm"
#include "code\modules\reagents\reagent_containers.dm"
@@ -1642,6 +1642,27 @@
#include "code\modules\reagents\newchem\patch.dm"
#include "code\modules\reagents\newchem\pyro.dm"
#include "code\modules\reagents\newchem\toxins.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\_chemical_reaction_base.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_drink.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_food.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_harm.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_med.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_misc.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_slime.dm"
+#include "code\modules\reagents\oldchem\reagents\__oldchem_defines.dm"
+#include "code\modules\reagents\oldchem\reagents\_reagent_base.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_admin.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_drugs.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_flammable.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_food.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_med.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_misc.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_toxin.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_water.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_alcohol.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_base.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_cold.dm"
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"
|