diff --git a/Dockerfile b/Dockerfile
index 50d5316df56..58be08fec1b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM tgstation/byond:513.1503 as base
+FROM tgstation/byond:513.1511 as base
FROM base as build_base
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 99637bb28c9..08b31193143 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -267,6 +267,7 @@
// /obj/item/clothing signals
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
+#define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle" //from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit)
// /obj/item/implant signals
#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): ()
diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm
index ee3f3ee70fa..e61cb51ab77 100644
--- a/code/__DEFINES/skills.dm
+++ b/code/__DEFINES/skills.dm
@@ -24,7 +24,7 @@
#define GetSkillRef(A) (SSskills.all_skills[A])
//number defines
-#define CLEAN_SKILL_BEAUTY_ADJUSTMENT 15//It's a denominator so no 0. Higher number = less cleaning xp per cleanable
+#define CLEAN_SKILL_BEAUTY_ADJUSTMENT -15//It's a denominator so no 0. Higher number = less cleaning xp per cleanable. Negative value means cleanables with negative beauty give xp.
#define CLEAN_SKILL_GENERIC_WASH_XP 1.5//Value. Higher number = more XP when cleaning non-cleanables (walls/floors/lips)
#define MEDICAL_SKILL_EASY 3 //Cannot be 0
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index f00146d7848..299b829edec 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -157,6 +157,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NOFLASH "noflash" //Makes you immune to flashes
#define TRAIT_XENO_IMMUNE "xeno_immune"//prevents xeno huggies implanting skeletons
#define TRAIT_NAIVE "naive"
+#define TRAIT_GUNFLIP "gunflip"
//non-mob traits
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
diff --git a/code/__HELPERS/reagents.dm b/code/__HELPERS/reagents.dm
index 8238a2e8af0..e96a5509f66 100644
--- a/code/__HELPERS/reagents.dm
+++ b/code/__HELPERS/reagents.dm
@@ -54,8 +54,9 @@
if(!GLOB.chemical_reactions_list)
return
for(var/reagent in GLOB.chemical_reactions_list)
- for(var/datum/chemical_reaction/R in GLOB.chemical_reactions_list[reagent])
- if(R.id == id)
+ for(var/R in GLOB.chemical_reactions_list[reagent])
+ var/datum/reac = R
+ if(reac.type == id)
return R
/proc/remove_chemical_reaction(datum/chemical_reaction/R)
@@ -66,7 +67,7 @@
//see build_chemical_reactions_list in holder.dm for explanations
/proc/add_chemical_reaction(datum/chemical_reaction/R)
- if(!GLOB.chemical_reactions_list || !R.id || !R.required_reagents || !R.required_reagents.len)
+ if(!GLOB.chemical_reactions_list || !R.required_reagents || !R.required_reagents.len)
return
var/primary_reagent = R.required_reagents[1]
if(!GLOB.chemical_reactions_list[primary_reagent])
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index 83ea9fefb6c..1fbfb67d821 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -97,7 +97,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_PASSTABLE" = TRAIT_PASSTABLE,
"TRAIT_NOFLASH" = TRAIT_NOFLASH,
"TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE,
- "TRAIT_NAIVE" = TRAIT_NAIVE
+ "TRAIT_NAIVE" = TRAIT_NAIVE,
+ "TRAIT_GUNFLIP" = TRAIT_GUNFLIP
),
/obj/item/bodypart = list(
"TRAIT_PARALYSIS" = TRAIT_PARALYSIS
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 54bbabdb005..dcb03dcf50b 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -338,7 +338,7 @@ SUBSYSTEM_DEF(persistence)
var/datum/chemical_reaction/randomized/R = new randomized_type
var/loaded = FALSE
if(R.persistent && json)
- var/list/recipe_data = json[R.id]
+ var/list/recipe_data = json[R.type]
if(recipe_data)
if(R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period))
loaded = TRUE
@@ -354,9 +354,8 @@ SUBSYSTEM_DEF(persistence)
//asert globchems done
for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized))
- var/datum/chemical_reaction/randomized/R = randomized_type
- R = get_chemical_reaction(initial(R.id)) //ew, would be nice to add some simple tracking
- if(R && R.persistent && R.id)
+ var/datum/chemical_reaction/randomized/R = get_chemical_reaction(randomized_type) //ew, would be nice to add some simple tracking
+ if(R && R.persistent)
var/recipe_data = list()
recipe_data["timestamp"] = R.created
recipe_data["required_reagents"] = R.required_reagents
@@ -365,7 +364,7 @@ SUBSYSTEM_DEF(persistence)
recipe_data["is_cold_recipe"] = R.is_cold_recipe
recipe_data["results"] = R.results
recipe_data["required_container"] = "[R.required_container]"
- file_data["[R.id]"] = recipe_data
+ file_data["[R.type]"] = recipe_data
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 32b7c643178..cf98e7316e7 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -277,11 +277,22 @@
icon_icon = 'icons/mob/actions/actions_spacesuit.dmi'
button_icon_state = "thermal_off"
+/datum/action/item_action/toggle_spacesuit/New(Target)
+ . = ..()
+ RegisterSignal(target, COMSIG_SUIT_SPACE_TOGGLE, .proc/toggle)
+
+/datum/action/item_action/toggle_spacesuit/Destroy()
+ UnregisterSignal(target, COMSIG_SUIT_SPACE_TOGGLE)
+ return ..()
+
/datum/action/item_action/toggle_spacesuit/Trigger()
var/obj/item/clothing/suit/space/suit = target
if(!istype(suit))
return
suit.toggle_spacesuit()
+
+/// Toggle the action icon for the space suit thermal regulator
+/datum/action/item_action/toggle_spacesuit/proc/toggle(obj/item/clothing/suit/space/suit)
button_icon_state = "thermal_[suit.thermal_on ? "on" : "off"]"
UpdateButtonIcon()
diff --git a/code/datums/keybinding/carbon.dm b/code/datums/keybinding/carbon.dm
index e8059da5dd3..abf84c9aadf 100644
--- a/code/datums/keybinding/carbon.dm
+++ b/code/datums/keybinding/carbon.dm
@@ -6,8 +6,7 @@
return iscarbon(user.mob)
/datum/keybinding/carbon/toggle_throw_mode
- hotkey_keys = list("R")
- classic_keys = list("Southwest") // END
+ hotkey_keys = list("R", "Southwest") // END
name = "toggle_throw_mode"
full_name = "Toggle throw mode"
description = "Toggle throwing the current item or not."
diff --git a/code/datums/keybinding/mob.dm b/code/datums/keybinding/mob.dm
index 693b740513c..f194c7fd2fe 100644
--- a/code/datums/keybinding/mob.dm
+++ b/code/datums/keybinding/mob.dm
@@ -5,7 +5,6 @@
/datum/keybinding/mob/face_north
hotkey_keys = list("CtrlW", "CtrlNorth")
- classic_keys = list("CtrlNorth")
name = "face_north"
full_name = "Face North"
description = ""
@@ -18,7 +17,6 @@
/datum/keybinding/mob/face_east
hotkey_keys = list("CtrlD", "CtrlEast")
- classic_keys = list("CtrlEast")
name = "face_east"
full_name = "Face East"
description = ""
@@ -31,7 +29,6 @@
/datum/keybinding/mob/face_south
hotkey_keys = list("CtrlS", "CtrlSouth")
- classic_keys = list("CtrlSouth")
name = "face_south"
full_name = "Face South"
description = ""
@@ -43,7 +40,6 @@
/datum/keybinding/mob/face_west
hotkey_keys = list("CtrlA", "CtrlWest")
- classic_keys = list("CtrlWest")
name = "face_west"
full_name = "Face West"
description = ""
@@ -55,7 +51,6 @@
/datum/keybinding/mob/stop_pulling
hotkey_keys = list("H", "Delete")
- classic_keys = list("Delete")
name = "stop_pulling"
full_name = "Stop pulling"
description = ""
@@ -91,8 +86,7 @@
return TRUE
/datum/keybinding/mob/swap_hands
- hotkey_keys = list("X")
- classic_keys = list("Northeast") // PAGEUP
+ hotkey_keys = list("X", "Northeast") // PAGEUP
name = "swap_hands"
full_name = "Swap hands"
description = ""
@@ -103,8 +97,7 @@
return TRUE
/datum/keybinding/mob/activate_inhand
- hotkey_keys = list("Z")
- classic_keys = list("Southeast") // PAGEDOWN
+ hotkey_keys = list("Z", "Southeast") // PAGEDOWN
name = "activate_inhand"
full_name = "Activate in-hand"
description = "Uses whatever item you have inhand"
diff --git a/code/datums/keybinding/movement.dm b/code/datums/keybinding/movement.dm
index c021ca928ed..ca199b5eb4d 100644
--- a/code/datums/keybinding/movement.dm
+++ b/code/datums/keybinding/movement.dm
@@ -4,28 +4,24 @@
/datum/keybinding/movement/north
hotkey_keys = list("W", "North")
- classic_keys = list("North")
name = "North"
full_name = "Move North"
description = "Moves your character north"
/datum/keybinding/movement/south
hotkey_keys = list("S", "South")
- classic_keys = list("South")
name = "South"
full_name = "Move South"
description = "Moves your character south"
/datum/keybinding/movement/west
hotkey_keys = list("A", "West")
- classic_keys = list("West")
name = "West"
full_name = "Move West"
description = "Moves your character left"
/datum/keybinding/movement/east
hotkey_keys = list("D", "East")
- classic_keys = list("East")
name = "East"
full_name = "Move East"
description = "Moves your character east"
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 84dbcf8f59e..c515e9798b6 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -166,6 +166,12 @@
return 1
return 0
+/datum/objective_item/steal/blackbox
+ name = "The Blackbox."
+ targetitem = /obj/item/blackbox
+ difficulty = 10
+ excludefromjob = list("Chief Engineer","Station Engineer","Atmospheric Technician")
+
//Unique Objectives
/datum/objective_item/unique/docs_red
name = "the \"Red\" secret documents."
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 9b59c5c5df1..addce4d0be1 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -452,7 +452,9 @@
return ..()
/obj/structure/firelock_frame/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
- if((constructionStep == CONSTRUCTION_NOCIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS))
+ if(the_rcd.mode == RCD_DECONSTRUCT)
+ return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 16)
+ else if((constructionStep == CONSTRUCTION_NOCIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS))
return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
return FALSE
@@ -464,6 +466,10 @@
constructionStep = CONSTRUCTION_GUTTED
update_icon()
return TRUE
+ else if(RCD_DECONSTRUCT)
+ to_chat(user, "You deconstruct [src].")
+ qdel(src)
+ return TRUE
return FALSE
/obj/structure/firelock_frame/heavy
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index 694669775be..e07708b93ba 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -5,7 +5,7 @@
require the message server.
*/
-// A decorational representation of SSblackbox, usually placed alongside the message server.
+// A decorational representation of SSblackbox, usually placed alongside the message server. Also contains a traitor theft item.
/obj/machinery/blackbox_recorder
icon = 'icons/obj/stationobjs.dmi'
icon_state = "blackbox"
@@ -15,7 +15,60 @@
idle_power_usage = 10
active_power_usage = 100
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
+ var/obj/item/stored
+/obj/machinery/blackbox_recorder/Initialize()
+ . = ..()
+ stored = new /obj/item/blackbox(src)
+
+/obj/machinery/blackbox_recorder/attack_hand(mob/living/user)
+ . = ..()
+ if(stored)
+ user.put_in_hands(stored)
+ stored = null
+ to_chat(user, "You remove the blackbox from [src]. The tapes stop spinning.")
+ update_icon()
+ return
+ else
+ to_chat(user, "It seems that the blackbox is missing...")
+ return
+
+/obj/machinery/blackbox_recorder/attackby(obj/item/I, mob/living/user, params)
+ . = ..()
+ if(istype(I, /obj/item/blackbox))
+ if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src))
+ to_chat(user, "[I] is stuck to your hand!")
+ return
+ user.visible_message("[user] clicks [I] into [src]!", \
+ "You press the device into [src], and it clicks into place. The tapes begin spinning again.")
+ playsound(src, 'sound/machines/click.ogg', 50, TRUE)
+ stored = I
+ update_icon()
+ return ..()
+ return ..()
+
+/obj/machinery/blackbox_recorder/Destroy()
+ if(stored)
+ stored.forceMove(loc)
+ new /obj/effect/decal/cleanable/oil(loc)
+ return ..()
+
+/obj/machinery/blackbox_recorder/update_icon()
+ . = ..()
+ if(!stored)
+ icon_state = "blackbox_b"
+ else
+ icon_state = "blackbox"
+
+/obj/item/blackbox
+ name = "the blackbox"
+ desc = "A strange relic, capable of recording data on extradimensional vertices. It lives inside the blackbox recorder for safe keeping."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "blackcube"
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
#define MESSAGE_SERVER_FUNCTIONING_MESSAGE "This is an automated message. The messaging system is functioning correctly."
@@ -95,7 +148,7 @@
/obj/machinery/telecomms/message_server/update_overlays()
. = ..()
-
+
if(calibrating)
. += "message_server_calibrate"
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 7fb300b5449..5cd21715164 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -4,6 +4,26 @@
/datum/component/construction/mecha
var/base_icon
+ // Component typepaths.
+ // most must be defined unless
+ // get_steps is overriden.
+
+ // Circuit board typepaths.
+ // circuit_control and circuit_periph must be defined
+ // unless get_circuit_steps is overriden.
+ var/circuit_control
+ var/circuit_periph
+ var/circuit_weapon
+
+ // Armor plating typepaths. both must be defined
+ // unless relevant step procs are overriden. amounts
+ // must be defined if using /obj/item/stack/sheet types
+ var/inner_plating
+ var/inner_plating_amount
+
+ var/outer_plating
+ var/outer_plating_amount
+
/datum/component/construction/mecha/spawn_result()
if(!result)
return
@@ -19,7 +39,14 @@
SSblackbox.record_feedback("tally", "mechas_created", 1, M.name)
QDEL_NULL(parent)
+// Default proc to generate mech steps.
+// Override if the mech needs an entirely custom process (See HONK mech)
+// Otherwise override specific steps as needed (Ripley, firefighter, Phazon)
+/datum/component/construction/mecha/proc/get_steps()
+ return get_frame_steps() + get_circuit_steps() + (circuit_weapon ? get_circuit_weapon_steps() : list()) + get_stockpart_steps() + get_inner_plating_steps() + get_outer_plating_steps()
+
/datum/component/construction/mecha/update_parent(step_index)
+ steps = get_steps()
..()
// By default, each step in mech construction has a single icon_state:
// "[base_icon][index - 1]"
@@ -43,6 +70,188 @@
parent_atom.cut_overlays()
..()
+// Default proc for the first steps of mech construction.
+/datum/component/construction/mecha/proc/get_frame_steps()
+ return list(
+ list(
+ "key" = TOOL_WRENCH,
+ "desc" = "The hydraulic systems are disconnected."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "The hydraulic systems are connected."
+ ),
+ list(
+ "key" = /obj/item/stack/cable_coil,
+ "amount" = 5,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The hydraulic systems are active."
+ ),
+ list(
+ "key" = TOOL_WIRECUTTER,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The wiring is added."
+ )
+ )
+
+// Default proc for the circuit board steps of a mech.
+// Second set of steps by default.
+/datum/component/construction/mecha/proc/get_circuit_steps()
+ return list(
+ list(
+ "key" = circuit_control,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The wiring is adjusted."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Central control module is installed."
+ ),
+ list(
+ "key" = circuit_periph,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Central control module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Peripherals control module is installed."
+ )
+ )
+
+// Default proc for weapon circuitboard steps
+// Used by combat mechs
+/datum/component/construction/mecha/proc/get_circuit_weapon_steps()
+ return list(
+ list(
+ "key" = circuit_weapon,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Peripherals control module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Weapons control module is installed."
+ )
+ )
+
+// Default proc for stock part installation
+// Third set of steps by default
+/datum/component/construction/mecha/proc/get_stockpart_steps()
+ var/prevstep_text = circuit_weapon ? "Weapons control module is secured." : "Peripherals control module is secured."
+ return list(
+ list(
+ "key" = /obj/item/stock_parts/scanning_module,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = prevstep_text
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Scanner module is installed."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/capacitor,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Scanner module is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Capacitor is installed."
+ ),
+ list(
+ "key" = /obj/item/stock_parts/cell,
+ "action" = ITEM_MOVE_INSIDE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "Capacitor is secured."
+ ),
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "The power cell is installed."
+ )
+ )
+
+// Default proc for inner armor plating
+// Fourth set of steps by default
+/datum/component/construction/mecha/proc/get_inner_plating_steps()
+ var/list/first_step
+ if(ispath(inner_plating, /obj/item/stack/sheet))
+ first_step = list(
+ list(
+ "key" = inner_plating,
+ "amount" = inner_plating_amount,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The power cell is secured."
+ )
+ )
+ else
+ first_step = list(
+ list(
+ "key" = inner_plating,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_SCREWDRIVER,
+ "desc" = "The power cell is secured."
+ )
+ )
+
+ return first_step + list(
+ list(
+ "key" = TOOL_WRENCH,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "Inner plating is installed."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "Inner Plating is wrenched."
+ )
+ )
+
+// Default proc for outer armor plating
+// Fifth set of steps by default
+/datum/component/construction/mecha/proc/get_outer_plating_steps()
+ var/list/first_step
+ if(ispath(outer_plating, /obj/item/stack/sheet))
+ first_step = list(
+ list(
+ "key" = outer_plating,
+ "amount" = outer_plating_amount,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Inner plating is welded."
+ )
+ )
+ else
+ first_step = list(
+ list(
+ "key" = outer_plating,
+ "action" = ITEM_DELETE,
+ "back_key" = TOOL_WELDER,
+ "desc" = "Inner plating is welded."
+ )
+ )
+
+ return first_step + list(
+ list(
+ "key" = TOOL_WRENCH,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "External armor is installed."
+ ),
+ list(
+ "key" = TOOL_WELDER,
+ "back_key" = TOOL_WRENCH,
+ "desc" = "External armor is wrenched."
+ )
+ )
+
/datum/component/construction/unordered/mecha_chassis/ripley
result = /datum/component/construction/mecha/ripley
@@ -57,141 +266,24 @@
/datum/component/construction/mecha/ripley
result = /obj/mecha/working/ripley
base_icon = "ripley"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/ripley/main
+ circuit_periph = /obj/item/circuitboard/mecha/ripley/peripherals
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
+ inner_plating=/obj/item/stack/sheet/metal
+ inner_plating_amount = 5
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
+ outer_plating=/obj/item/stack/rods
+ outer_plating_amount = 10
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Outer plating is installed."
- ),
-
- //17
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Outer Plating is wrenched."
- ),
-
- //18
+/datum/component/construction/mecha/ripley/get_outer_plating_steps()
+ return list(
list(
"key" = /obj/item/stack/rods,
"amount" = 10,
"back_key" = TOOL_WELDER,
"desc" = "Outer Plating is welded."
),
-
- //19
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WIRECUTTER,
@@ -317,170 +409,16 @@
/datum/component/construction/mecha/gygax
result = /obj/mecha/combat/gygax
base_icon = "gygax"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/gygax/main
+ circuit_periph = /obj/item/circuitboard/mecha/gygax/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/gygax/targeting
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/gygax/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //17
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //18
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //19
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //20
- list(
- "key" = /obj/item/mecha_parts/part/gygax_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
-
- )
+ outer_plating=/obj/item/mecha_parts/part/gygax_armor
+ outer_plating_amount=1
/datum/component/construction/mecha/gygax/action(datum/source, atom/used_atom, mob/user)
return check_step(used_atom,user)
@@ -613,155 +551,32 @@
/datum/component/construction/mecha/firefighter
result = /obj/mecha/working/ripley/firefighter
base_icon = "fireripley"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/ripley/main
+ circuit_periph = /obj/item/circuitboard/mecha/ripley/peripherals
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
+ inner_plating = /obj/item/stack/sheet/plasteel
+ inner_plating_amount = 5
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/ripley/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //13
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //17
+/datum/component/construction/mecha/firefighter/get_outer_plating_steps()
+ return list(
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
"back_key" = TOOL_WELDER,
"desc" = "Internal armor is welded."
),
-
- //18
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is being installed."
),
-
- //19
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is installed."
),
-
- //20
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
@@ -893,100 +708,70 @@
/datum/component/construction/mecha/honker
result = /obj/mecha/combat/honker
steps = list(
- //1
list(
"key" = /obj/item/bikehorn
),
-
- //2
list(
"key" = /obj/item/circuitboard/mecha/honker/main,
"action" = ITEM_DELETE
),
-
- //3
list(
"key" = /obj/item/bikehorn
),
-
- //4
list(
"key" = /obj/item/circuitboard/mecha/honker/peripherals,
"action" = ITEM_DELETE
),
-
- //5
list(
"key" = /obj/item/bikehorn
),
-
- //6
list(
"key" = /obj/item/circuitboard/mecha/honker/targeting,
"action" = ITEM_DELETE
),
-
- //7
list(
"key" = /obj/item/bikehorn
),
-
- //6
list(
"key" = /obj/item/stock_parts/scanning_module,
"action" = ITEM_MOVE_INSIDE
),
-
- //8
list(
"key" = /obj/item/bikehorn
),
-
- //9
list(
"key" = /obj/item/stock_parts/capacitor,
"action" = ITEM_MOVE_INSIDE
),
-
- //10
list(
"key" = /obj/item/bikehorn
),
-
- //11
list(
"key" = /obj/item/stock_parts/cell,
"action" = ITEM_MOVE_INSIDE
),
-
- //12
list(
"key" = /obj/item/bikehorn
),
-
- //13
list(
"key" = /obj/item/clothing/mask/gas/clown_hat,
"action" = ITEM_DELETE
),
-
- //14
list(
"key" = /obj/item/bikehorn
),
-
- //15
list(
"key" = /obj/item/clothing/shoes/clown_shoes,
"action" = ITEM_DELETE
),
-
- //16
list(
"key" = /obj/item/bikehorn
),
)
+/datum/component/construction/mecha/honker/get_steps()
+ return steps
+
// HONK doesn't have any construction step icons, so we just set an icon once.
/datum/component/construction/mecha/honker/update_parent(step_index)
if(step_index == 1)
@@ -1037,170 +822,16 @@
/datum/component/construction/mecha/durand
result = /obj/mecha/combat/durand
base_icon = "durand"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/durand/main
+ circuit_periph = /obj/item/circuitboard/mecha/durand/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/durand/targeting
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
-
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/durand/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/durand/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/durand/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Weapon control module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //14
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //15
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //16
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //17
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //18
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //19
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //20
- list(
- "key" = /obj/item/mecha_parts/part/durand_armor,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
+ outer_plating = /obj/item/mecha_parts/part/durand_armor
+ outer_plating_amount = 1
/datum/component/construction/mecha/durand/custom_action(obj/item/I, mob/living/user, diff)
if(!..())
@@ -1333,211 +964,101 @@
/datum/component/construction/mecha/phazon
result = /obj/mecha/combat/phazon
base_icon = "phazon"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/phazon/main
+ circuit_periph = /obj/item/circuitboard/mecha/phazon/peripherals
+ circuit_weapon = /obj/item/circuitboard/mecha/phazon/targeting
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
+ inner_plating = /obj/item/stack/sheet/plasteel
+ inner_plating_amount = 5
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
+ outer_plating = /obj/item/mecha_parts/part/phazon_armor
+ outer_plating_amount = 1
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed"
- ),
-
- //9
- list(
- "key" = /obj/item/circuitboard/mecha/phazon/targeting,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Weapon control is installed."
- ),
-
- //11
+/datum/component/construction/mecha/phazon/get_stockpart_steps()
+ return list(
list(
"key" = /obj/item/stock_parts/scanning_module,
"action" = ITEM_MOVE_INSIDE,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Weapon control module is secured."
),
-
- //12
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "Scanner module is installed."
),
-
- //13
list(
"key" = /obj/item/stock_parts/capacitor,
"action" = ITEM_MOVE_INSIDE,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Scanner module is secured."
),
-
- //14
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "Capacitor is installed."
),
-
- //15
list(
"key" = /obj/item/stack/ore/bluespace_crystal,
"amount" = 1,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Capacitor is secured."
),
-
- //16
list(
"key" = /obj/item/stack/cable_coil,
"amount" = 5,
"back_key" = TOOL_CROWBAR,
"desc" = "The bluespace crystal is installed."
),
-
- //17
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_WIRECUTTER,
"desc" = "The bluespace crystal is connected."
),
-
- //18
list(
"key" = /obj/item/stock_parts/cell,
"action" = ITEM_MOVE_INSIDE,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The bluespace crystal is engaged."
),
-
- //19
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "The power cell is installed.",
"icon_state" = "phazon17"
// This is the point where a step icon is skipped, so "icon_state" had to be set manually starting from here.
- ),
+ )
+ )
- //20
+/datum/component/construction/mecha/phazon/get_outer_plating_steps()
+ return list(
list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured.",
- "icon_state" = "phazon18"
- ),
-
- //21
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Phase armor is installed.",
- "icon_state" = "phazon19"
- ),
-
- //22
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Phase armor is wrenched.",
- "icon_state" = "phazon20"
- ),
-
- //23
- list(
- "key" = /obj/item/mecha_parts/part/phazon_armor,
+ "key" = outer_plating,
+ "amount" = 1,
"action" = ITEM_DELETE,
"back_key" = TOOL_WELDER,
- "desc" = "Phase armor is welded.",
- "icon_state" = "phazon21"
+ "desc" = "Internal armor is welded."
),
-
- //24
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed.",
- "icon_state" = "phazon22"
+ "desc" = "External armor is installed."
),
-
- //25
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched.",
- "icon_state" = "phazon23"
+ "desc" = "External armor is wrenched."
),
-
- //26
list(
"key" = /obj/item/assembly/signaler/anomaly,
"action" = ITEM_DELETE,
"back_key" = TOOL_WELDER,
"desc" = "Anomaly core socket is open.",
"icon_state" = "phazon24"
- ),
+ )
)
-
/datum/component/construction/mecha/phazon/custom_action(obj/item/I, mob/living/user, diff)
if(!..())
return FALSE
@@ -1688,153 +1209,15 @@
/datum/component/construction/mecha/odysseus
result = /obj/mecha/medical/odysseus
base_icon = "odysseus"
- steps = list(
- //1
- list(
- "key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are disconnected."
- ),
- //2
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_WRENCH,
- "desc" = "The hydraulic systems are connected."
- ),
+ circuit_control = /obj/item/circuitboard/mecha/odysseus/main
+ circuit_periph = /obj/item/circuitboard/mecha/odysseus/peripherals
- //3
- list(
- "key" = /obj/item/stack/cable_coil,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The hydraulic systems are active."
- ),
+ inner_plating = /obj/item/stack/sheet/metal
+ inner_plating_amount = 5
- //4
- list(
- "key" = TOOL_WIRECUTTER,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is added."
- ),
-
- //5
- list(
- "key" = /obj/item/circuitboard/mecha/odysseus/main,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The wiring is adjusted."
- ),
-
- //6
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Central control module is installed."
- ),
-
- //7
- list(
- "key" = /obj/item/circuitboard/mecha/odysseus/peripherals,
- "action" = ITEM_DELETE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Central control module is secured."
- ),
-
- //8
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Peripherals control module is installed."
- ),
- //9
- list(
- "key" = /obj/item/stock_parts/scanning_module,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Peripherals control module is secured."
- ),
-
- //10
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Scanner module is installed."
- ),
-
- //11
- list(
- "key" = /obj/item/stock_parts/capacitor,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Scanner module is secured."
- ),
-
- //12
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Capacitor is installed."
- ),
-
- //13
- list(
- "key" = /obj/item/stock_parts/cell,
- "action" = ITEM_MOVE_INSIDE,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "Capacitor is secured."
- ),
-
- //11
- list(
- "key" = TOOL_SCREWDRIVER,
- "back_key" = TOOL_CROWBAR,
- "desc" = "The power cell is installed."
- ),
-
- //12
- list(
- "key" = /obj/item/stack/sheet/metal,
- "amount" = 5,
- "back_key" = TOOL_SCREWDRIVER,
- "desc" = "The power cell is secured."
- ),
-
- //13
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "Internal armor is installed."
- ),
-
- //14
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "Internal armor is wrenched."
- ),
-
- //15
- list(
- "key" = /obj/item/stack/sheet/plasteel,
- "amount" = 5,
- "back_key" = TOOL_WELDER,
- "desc" = "Internal armor is welded."
- ),
-
- //16
- list(
- "key" = TOOL_WRENCH,
- "back_key" = TOOL_CROWBAR,
- "desc" = "External armor is installed."
- ),
-
- //17
- list(
- "key" = TOOL_WELDER,
- "back_key" = TOOL_WRENCH,
- "desc" = "External armor is wrenched."
- ),
- )
+ outer_plating = /obj/item/stack/sheet/plasteel
+ outer_plating_amount = 5
/datum/component/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff)
if(!..())
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index a2557d56879..082e02c587b 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -172,9 +172,12 @@
var/mutable_appearance/mob_underlay
var/preloaded = 0
var/RPpos = null
+ var/attached = TRUE //if the gun arg isn't included initially, then the chronofield will work without one
/obj/structure/chrono_field/Initialize(mapload, mob/living/target, obj/item/gun/energy/chrono_gun/G)
- if(target && isliving(target) && G)
+ if(target && isliving(target))
+ if(!G)
+ attached = FALSE
target.forceMove(src)
captured = target
var/icon/mob_snapshot = getFlatIcon(target)
@@ -234,6 +237,8 @@
else
gun = null
return .()
+ else if(!attached)
+ tickstokill--
else
tickstokill++
else
diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm
index 73204a43162..0200811a33f 100644
--- a/code/game/objects/items/clown_items.dm
+++ b/code/game/objects/items/clown_items.dm
@@ -80,6 +80,11 @@
cleanspeed = 3 //Only the truest of mind soul and body get one of these
uses = 301
+/obj/item/soap/omega/suicide_act(mob/user)
+ user.visible_message("[user] is using [src] to scrub themselves from the timeline! It looks like [user.p_theyre()] trying to commit suicide!")
+ new /obj/structure/chrono_field(user.loc, user)
+ return MANUAL_SUICIDE
+
/obj/item/paper/fluff/stations/soap
name = "ancient janitorial poem"
desc = "An old paper that has passed many hands."
diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm
index 67ac4f310f1..7133e4d56ab 100644
--- a/code/game/objects/items/devices/instruments.dm
+++ b/code/game/objects/items/devices/instruments.dm
@@ -114,6 +114,16 @@
icon_state = "[initial(icon_state)]"
update_icon()
+/obj/item/instrument/piano_synth/headphones/spacepods
+ name = "nanotrasen space pods"
+ desc = "Flex your money, AND ignore what everyone else says, all at once!"
+ icon_state = "spacepods"
+ item_state = "spacepods"
+ slot_flags = ITEM_SLOT_EARS
+ strip_delay = 100 //air pods don't fall out
+ instrumentRange = 0 //you're paying for quality here
+ custom_premium_price = 1800
+
/obj/item/instrument/banjo
name = "banjo"
desc = "A 'Mura' brand banjo. It's pretty much just a drum with a neck and strings."
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 8c48673331c..24abd8fdc00 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -70,11 +70,13 @@ effective or pretty fucking useless.
/obj/item/healthanalyzer/rad_laser
custom_materials = list(/datum/material/iron=400)
- var/irradiate = 1
+ var/ui_x = 320
+ var/ui_y = 335
+ var/irradiate = TRUE
+ var/stealth = FALSE
+ var/used = FALSE // is it cooling down?
var/intensity = 10 // how much damage the radiation does
var/wavelength = 10 // time it takes for the radiation to kick in, in seconds
- var/used = 0 // is it cooling down?
- var/stealth = FALSE
/obj/item/healthanalyzer/rad_laser/attack(mob/living/M, mob/living/user)
if(!stealth || !irradiate)
@@ -83,8 +85,8 @@ effective or pretty fucking useless.
return
if(!used)
log_combat(user, M, "irradiated", src)
- var/cooldown = GetCooldown()
- used = 1
+ var/cooldown = get_cooldown()
+ used = TRUE
icon_state = "health1"
handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength
to_chat(user, "Successfully irradiated [M].")
@@ -98,78 +100,94 @@ effective or pretty fucking useless.
/obj/item/healthanalyzer/rad_laser/proc/handle_cooldown(cooldown)
spawn(cooldown)
- used = 0
+ used = FALSE
icon_state = "health"
+/obj/item/healthanalyzer/rad_laser/proc/get_cooldown()
+ return round(max(10, (stealth*30 + intensity*5 - wavelength/4)))
+
/obj/item/healthanalyzer/rad_laser/attack_self(mob/user)
interact(user)
-/obj/item/healthanalyzer/rad_laser/proc/GetCooldown()
- return round(max(10, (stealth*30 + intensity*5 - wavelength/4)))
-
/obj/item/healthanalyzer/rad_laser/interact(mob/user)
ui_interact(user)
-/obj/item/healthanalyzer/rad_laser/ui_interact(mob/user)
- . = ..()
+/obj/item/healthanalyzer/rad_laser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
+ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "radioactive_microlaser", "Radioactive Microlaser", ui_x, ui_y, master_ui, state)
+ ui.open()
- var/dat = "Irradiation: [irradiate ? "On" : "Off"]
"
- dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): [stealth ? "On" : "Off"]
"
- dat += "Scan Mode: "
- if(!scanmode)
- dat += "Scan Health"
- else if(scanmode == 1)
- dat += "Scan Reagents"
- else
- dat += "Disabled"
- dat += "
"
+/obj/item/healthanalyzer/rad_laser/ui_data(mob/user)
+ var/list/data = list()
+ data["irradiate"] = irradiate
+ data["stealth"] = stealth
+ data["scanmode"] = scanmode
+ data["intensity"] = intensity
+ data["wavelength"] = wavelength
+ data["on_cooldown"] = used
+ data["cooldown"] = DisplayTimeText(get_cooldown())
+ return data
- dat += {"
- Radiation Intensity:
- --
- [intensity]
- ++
+/obj/item/healthanalyzer/rad_laser/ui_act(action, params)
+ if(..())
+ return
- Radiation Wavelength:
- --
- [(wavelength+(intensity*4))]
- ++
- Laser Cooldown: [DisplayTimeText(GetCooldown())]
- "}
-
- var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240)
- popup.set_content(dat)
- popup.open()
-
-/obj/item/healthanalyzer/rad_laser/Topic(href, href_list)
- if(!usr.canUseTopic(src))
- return 1
-
- usr.set_machine(src)
- if(href_list["rad"])
- irradiate = !irradiate
-
- else if(href_list["stealthy"])
- stealth = !stealth
-
- else if(href_list["mode"])
- scanmode += 1
- if(scanmode > 2)
- scanmode = 0
-
- else if(href_list["radint"])
- var/amount = text2num(href_list["radint"])
- amount += intensity
- intensity = max(1,(min(20,amount)))
-
- else if(href_list["radwav"])
- var/amount = text2num(href_list["radwav"])
- amount += wavelength
- wavelength = max(0,(min(120,amount)))
-
- attack_self(usr)
- add_fingerprint(usr)
- return
+ switch(action)
+ if("irradiate")
+ irradiate = !irradiate
+ . = TRUE
+ if("stealth")
+ stealth = !stealth
+ . = TRUE
+ if("scanmode")
+ scanmode = !scanmode
+ . = TRUE
+ if("radintensity")
+ var/target = params["target"]
+ var/adjust = text2num(params["adjust"])
+ if(target == "input")
+ target = input("New output target (1-20):", name, intensity) as num|null
+ if(!isnull(target) && !..())
+ . = TRUE
+ else if(target == "min")
+ target = 1
+ . = TRUE
+ else if(target == "max")
+ target = 20
+ . = TRUE
+ else if(adjust)
+ target = intensity + adjust
+ . = TRUE
+ else if(text2num(target) != null)
+ target = text2num(target)
+ . = TRUE
+ if(.)
+ target = round(target)
+ intensity = clamp(target, 1, 20)
+ if("radwavelength")
+ var/target = params["target"]
+ var/adjust = text2num(params["adjust"])
+ if(target == "input")
+ target = input("New output target (0-120):", name, wavelength) as num|null
+ if(!isnull(target) && !..())
+ . = TRUE
+ else if(target == "min")
+ target = 0
+ . = TRUE
+ else if(target == "max")
+ target = 120
+ . = TRUE
+ else if(adjust)
+ target = wavelength + adjust
+ . = TRUE
+ else if(text2num(target) != null)
+ target = text2num(target)
+ . = TRUE
+ if(.)
+ target = round(target)
+ wavelength = clamp(target, 0, 120)
/obj/item/shadowcloak
name = "cloaker belt"
diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm
index 90b4f798977..78732e7e944 100644
--- a/code/game/objects/items/implants/implant_mindshield.dm
+++ b/code/game/objects/items/implants/implant_mindshield.dm
@@ -22,9 +22,10 @@
ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant")
target.sec_hud_set_implants()
return TRUE
-
+ var/deconverted = FALSE
if(target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
+ deconverted = TRUE
if(target.mind.has_antag_datum(/datum/antagonist/rev/head)|| target.mind.unconvertable)
if(!silent)
@@ -35,6 +36,7 @@
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
if(rev)
+ deconverted = TRUE
rev.remove_revolutionary(FALSE, user)
if(!silent)
if(target.mind in SSticker.mode.cult)
@@ -43,6 +45,9 @@
to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.")
ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant")
target.sec_hud_set_implants()
+ if(deconverted)
+ if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
+ target.say("I'm out! I quit! Whose kidneys are these?", forced = "They're out! They quit! Whose kidneys do they have?")
return TRUE
return FALSE
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 1b8d9ce464a..543ba33bcf0 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -186,7 +186,7 @@
/obj/item/storage/belt/medical/paramedic/PopulateContents()
new /obj/item/sensor_device(src)
- new /obj/item/flashlight/pen(src)
+ new /obj/item/pinpointer/crew/prox(src)
new /obj/item/stack/medical/gauze/twelve(src)
new /obj/item/reagent_containers/syringe(src)
new /obj/item/reagent_containers/glass/bottle/epinephrine(src)
@@ -564,31 +564,6 @@
/obj/item/ammo_casing/shotgun
))
-/obj/item/storage/belt/holster
- name = "shoulder holster"
- desc = "A holster to carry a handgun and ammo. WARNING: Badasses only."
- icon_state = "holster"
- item_state = "holster"
- alternate_worn_layer = UNDER_SUIT_LAYER
-
-/obj/item/storage/belt/holster/ComponentInitialize()
- . = ..()
- var/datum/component/storage/STR = GetComponent(/datum/component/storage)
- STR.max_items = 3
- STR.max_w_class = WEIGHT_CLASS_NORMAL
- STR.set_holdable(list(
- /obj/item/gun/ballistic/automatic/pistol,
- /obj/item/gun/ballistic/revolver,
- /obj/item/ammo_box,
- /obj/item/gun/energy/e_gun/mini
- ))
-
-/obj/item/storage/belt/holster/full/PopulateContents()
- var/static/items_inside = list(
- /obj/item/gun/ballistic/revolver/detective = 1,
- /obj/item/ammo_box/c38 = 2)
- generate_items_inside(items_inside,src)
-
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in."
diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm
new file mode 100644
index 00000000000..39bd034a156
--- /dev/null
+++ b/code/game/objects/items/storage/holsters.dm
@@ -0,0 +1,119 @@
+
+/obj/item/storage/belt/holster
+ name = "shoulder holster"
+ desc = "A rather plain but still badass looking holster with a single pouch that can hold a small firearm."
+ icon_state = "holster"
+ item_state = "holster"
+ alternate_worn_layer = UNDER_SUIT_LAYER
+
+/obj/item/storage/belt/holster/equipped(mob/user, slot)
+ . = ..()
+ if(slot == ITEM_SLOT_BELT)
+ ADD_TRAIT(user, TRAIT_GUNFLIP, CLOTHING_TRAIT)
+
+/obj/item/storage/belt/holster/dropped(mob/user)
+ . = ..()
+ REMOVE_TRAIT(user, TRAIT_GUNFLIP, CLOTHING_TRAIT)
+
+/obj/item/storage/belt/holster/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 1
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.set_holdable(list(
+ /obj/item/gun/ballistic/automatic/pistol,
+ /obj/item/gun/ballistic/revolver,
+ /obj/item/gun/energy/e_gun/mini,
+ /obj/item/gun/energy/disabler,
+ /obj/item/gun/energy/pulse/carbine,
+ /obj/item/gun/energy/dueling
+ ))
+
+/obj/item/storage/belt/holster/detective
+ name = "detective's holster"
+ desc = "A holster to carry a handgun and ammo. WARNING: Badasses only."
+
+/obj/item/storage/belt/holster/detective/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 3
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.set_holdable(list(
+ /obj/item/gun/ballistic/revolver,
+ /obj/item/ammo_box,
+ /obj/item/gun/energy/disabler,
+ /obj/item/gun/energy/dueling
+ ))
+
+/obj/item/storage/belt/holster/detective/full/PopulateContents()
+ var/static/items_inside = list(
+ /obj/item/gun/ballistic/revolver/detective = 1,
+ /obj/item/ammo_box/c38 = 2)
+ generate_items_inside(items_inside,src)
+
+/obj/item/storage/belt/holster/chameleon
+ name = "syndicate holster"
+ desc = "A two pouched hip holster that uses chameleon technology to disguise itself and any guns in it."
+ icon_state = "syndicate_holster"
+ item_state = "syndicate_holster"
+ var/datum/action/item_action/chameleon/change/chameleon_action
+
+/obj/item/storage/belt/holster/chameleon/Initialize()
+ . = ..()
+
+ chameleon_action = new(src)
+ chameleon_action.chameleon_type = /obj/item/storage/belt
+ chameleon_action.chameleon_name = "Belt"
+ chameleon_action.initialize_disguises()
+
+/obj/item/storage/belt/chameleon/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.silent = TRUE
+
+/obj/item/storage/belt/holster/chameleon/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ chameleon_action.emp_randomise()
+
+/obj/item/storage/belt/holster/chameleon/broken/Initialize()
+ . = ..()
+ chameleon_action.emp_randomise(INFINITY)
+
+/obj/item/storage/belt/holster/chameleon/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 2
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.set_holdable(list(
+ /obj/item/gun/ballistic/automatic/pistol,
+ /obj/item/gun/ballistic/revolver,
+ /obj/item/gun/energy/e_gun/mini,
+ /obj/item/gun/energy/disabler,
+ /obj/item/gun/energy/pulse/carbine,
+ /obj/item/gun/energy/dueling
+ ))
+
+/obj/item/storage/belt/holster/nukie
+ name = "operative holster"
+ desc = "A deep shoulder holster capable of holding almost any form of ballistic weaponry."
+ icon_state = "syndicate_holster"
+ item_state = "syndicate_holster"
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/storage/belt/holster/nukie/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 2
+ STR.max_w_class = WEIGHT_CLASS_BULKY
+ STR.set_holdable(list(
+ /obj/item/gun/ballistic/automatic,
+ /obj/item/gun/ballistic/revolver,
+ /obj/item/gun/energy/e_gun/mini,
+ /obj/item/gun/energy/disabler,
+ /obj/item/gun/energy/pulse/carbine,
+ /obj/item/gun/energy/dueling,
+ /obj/item/gun/ballistic/shotgun,
+ /obj/item/gun/ballistic/rocketlauncher
+ ))
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index fa395e32a98..9cc2bac1b19 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -170,12 +170,14 @@
playsound(src, stun_sound, 75, TRUE, -1)
user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
"You accidentally hit yourself with [src]!")
- user.Knockdown(stun_time*3)
+ user.Knockdown(stun_time*3) //should really be an equivalent to attack(user,user)
deductcharge(cell_hit_cost)
- return
+ return TRUE
+ return FALSE
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
- clumsy_check(user)
+ if(clumsy_check(user))
+ return FALSE
if(iscyborg(M))
..()
@@ -206,7 +208,8 @@
/obj/item/melee/baton/proc/baton_effect(mob/living/L, mob/user)
- check_shields(L, user)
+ if(shields_blocked(L, user))
+ return FALSE
if(iscyborg(loc))
var/mob/living/silicon/robot/R = loc
if(!R || !R.cell || !R.cell.use(cell_hit_cost))
@@ -257,12 +260,13 @@
if (!(. & EMP_PROTECT_SELF))
deductcharge(1000 / severity)
-/obj/item/melee/baton/proc/check_shields(mob/living/L, mob/user)
+/obj/item/melee/baton/proc/shields_blocked(mob/living/L, mob/user)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
- playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE)
- return FALSE
+ playsound(H, 'sound/weapons/genhit.ogg', 50, TRUE)
+ return TRUE
+ return FALSE
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/melee/baton/cattleprod
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 43db503b2c0..d8aefab7a1f 100755
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -200,7 +200,7 @@
new /obj/item/holosign_creator/security(src)
new /obj/item/reagent_containers/spray/pepper(src)
new /obj/item/clothing/suit/armor/vest/det_suit(src)
- new /obj/item/storage/belt/holster/full(src)
+ new /obj/item/storage/belt/holster/detective/full(src)
new /obj/item/pinpointer/crew(src)
new /obj/item/twohanded/binoculars(src)
new /obj/item/storage/box/rxglasses/spyglasskit(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 94d1b03fdb0..05f07ecdc46 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -16,6 +16,7 @@
new /obj/item/storage/belt/military(src)
new /obj/item/crowbar/red(src)
new /obj/item/clothing/glasses/night(src)
+ new /obj/item/storage/belt/holster/nukie(src)
/obj/structure/closet/syndicate/nuclear
desc = "It's a storage unit for a Syndicate boarding party."
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 5791d9527ba..6e70a13a261 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -323,3 +323,17 @@
var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]")
new mineral_path(T, 2)
qdel(src)
+
+
+/obj/structure/door_assembly/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
+ if(the_rcd.mode == RCD_DECONSTRUCT)
+ return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 16)
+ return FALSE
+
+/obj/structure/door_assembly/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ to_chat(user, "You deconstruct [src].")
+ qdel(src)
+ return TRUE
+ return FALSE
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 49ef6d4e652..01e1403521e 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -158,7 +158,7 @@
. = ..()
if (prob(mineralChance))
var/path = pickweight(mineralSpawnChanceList)
- if(isturf(path))
+ if(ispath(path, /turf))
var/turf/T = ChangeTurf(path,null,CHANGETURF_IGNORE_AIR)
T.baseturfs = src.baseturfs
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 6018b497931..5cc9ce2ce0a 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -510,7 +510,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
/obj/item/melee/baton/abductor/attack(mob/target, mob/living/user)
if(!AbductorCheck(user))
- return
+ return FALSE
if(!deductcharge(cell_hit_cost))
to_chat(user, "[src] [cell ? "is out of charge" : "does not have a power source installed"].")
@@ -522,16 +522,20 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(iscyborg(target))
if(BATON_STUN)
..()
- return
+ return FALSE
if(!isliving(target))
- return
+ return FALSE
+
+ if(clumsy_check(user))
+ return FALSE
var/mob/living/L = target
user.do_attack_animation(L)
- check_shields(L, user)
+ if(shields_blocked(L, user))
+ return FALSE
switch (mode)
if(BATON_STUN)
diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm
index 9b358956594..807ec65b7e0 100644
--- a/code/modules/antagonists/brainwashing/brainwashing.dm
+++ b/code/modules/antagonists/brainwashing/brainwashing.dm
@@ -22,6 +22,8 @@
var/end_message = "."
var/rendered = begin_message + obj_message + end_message
deadchat_broadcast(rendered, "[L]", follow_target = L, turf_target = get_turf(L), message_type=DEADCHAT_REGULAR)
+ if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
+ L.say("You son of a bitch! I'm in.", forced = "That son of a bitch! They're in.")
/datum/antagonist/brainwashed
name = "Brainwashed Victim"
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index 26483160071..3d1422e3bb2 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -348,7 +348,7 @@
/datum/objective/sacrifice/update_explanation_text()
if(target)
- explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with [target.p_them()] on it and three acolytes around it."
+ explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking an Offer rune with [target.p_them()] on it and three acolytes around it."
else
explanation_text = "The veil has already been weakened here, proceed to the final objective."
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 82f0f6e885d..61c727cf7d0 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -256,6 +256,8 @@ structure_check() searches for nearby cultist structures required for the invoca
H.uncuff()
H.stuttering = 0
H.cultslurring = 0
+ if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
+ H.say("You son of a bitch! I'm in.", forced = "That son of a bitch! They're in.")
return 1
/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers)
@@ -520,7 +522,7 @@ structure_check() searches for nearby cultist structures required for the invoca
icon_state = "1"
color = RUNE_COLOR_MEDIUMRED
var/static/sacrifices_used = -SOULS_TO_REVIVE // Cultists get one "free" revive
-
+
/obj/effect/rune/raise_dead/examine(mob/user)
. = ..()
if(iscultist(user) || user.stat == DEAD)
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index 5478fb639f7..c388537aac2 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -191,6 +191,8 @@
to_chat(user, "They must be conscious before you can convert [H.p_them()]!")
return
if(converter.add_revolutionary(H.mind))
+ if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
+ H.say("You son of a bitch! I'm in.", forced = "That son of a bitch! They're in.")
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
else
to_chat(user, "This mind seems resistant to the flash!")
diff --git a/code/modules/cargo/exports/organs.dm b/code/modules/cargo/exports/organs.dm
new file mode 100644
index 00000000000..83d650e729b
--- /dev/null
+++ b/code/modules/cargo/exports/organs.dm
@@ -0,0 +1,38 @@
+/datum/export/organ
+ include_subtypes = FALSE //Centcom doesn't need organs from non-humans.
+ export_category = EXPORT_CONTRABAND
+
+/datum/export/organ/heart
+ cost = 10 //For the man who has everything and nothing.
+ unit_name = "humanoid heart"
+ export_types = list(/obj/item/organ/heart)
+
+/datum/export/organ/eyes
+ cost = 5
+ unit_name = "humanoid eyes"
+ export_types = list(/obj/item/organ/eyes)
+
+/datum/export/organ/ears
+ cost = 5
+ unit_name = "humanoid ears"
+ export_types = list(/obj/item/organ/ears)
+
+/datum/export/organ/liver
+ cost = 5
+ unit_name = "humanoid liver"
+ export_types = list(/obj/item/organ/liver)
+
+/datum/export/organ/lungs
+ cost = 5
+ unit_name = "humanoid lungs"
+ export_types = list(/obj/item/organ/lungs)
+
+/datum/export/organ/stomach
+ cost = 5
+ unit_name = "humanoid stomach"
+ export_types = list(/obj/item/organ/stomach)
+
+/datum/export/organ/tongue
+ cost = 5
+ unit_name = "humanoid tounge"
+ export_types = list(/obj/item/organ/tongue)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 14509f250cf..b27e33cc063 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1815,3 +1815,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return
else
custom_names[name_id] = sanitized_name
+
+//Used in savefile update 32, can be removed once that is no longer relevant.
+/datum/preferences/proc/force_reset_keybindings()
+ var/choice = tgalert(parent.mob, "Your basic keybindings need to be reset, emotes will remain as before. Would you prefer 'hotkey' or 'classic' mode?", "Reset keybindings", "Hotkey", "Classic")
+ hotkeys = (choice != "Classic")
+ var/list/oldkeys = key_bindings
+ key_bindings = (hotkeys) ? deepCopyList(GLOB.hotkey_keybinding_list_by_key) : deepCopyList(GLOB.classic_keybinding_list_by_key)
+
+ for(var/key in oldkeys)
+ if(!key_bindings[key])
+ key_bindings[key] = oldkeys[key]
+ parent.update_movement_keys()
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 6231006c5bb..b458d28841f 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
-#define SAVEFILE_VERSION_MAX 31
+#define SAVEFILE_VERSION_MAX 32
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -42,11 +42,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//if your savefile is 3 months out of date, then 'tough shit'.
/datum/preferences/proc/update_preferences(current_version, savefile/S)
- if(current_version < 29)
- key_bindings = (hotkeys) ? deepCopyList(GLOB.hotkey_keybinding_list_by_key) : deepCopyList(GLOB.classic_keybinding_list_by_key)
- parent.update_movement_keys(src)
- to_chat(parent, "Empty keybindings, setting default to [hotkeys ? "Hotkey" : "Classic"] mode")
-
if(current_version < 30)
if(clientfps == 0)
clientfps = 60
@@ -55,6 +50,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(clientfps == 60)
clientfps = 0
+ if(current_version < 32) //If you remove this, remove force_reset_keybindings() too.
+ addtimer(CALLBACK(src, .proc/force_reset_keybindings), 30) //No mob available when this is run, timer allows user choice.
+
/datum/preferences/proc/update_character(current_version, savefile/S)
if(current_version < 19)
pda_style = "mono"
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index 1c7a66e3616..16745badb17 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -30,12 +30,3 @@
/obj/item/clothing/ears/earmuffs/dropped(mob/user)
. = ..()
REMOVE_TRAIT(user, TRAIT_DEAF, CLOTHING_TRAIT)
-
-/obj/item/clothing/ears/earmuffs/spacepods
- name = "nanotrasen space pods"
- desc = "Flex your money, AND ignore what everone else says, all at once!"
- icon = 'icons/obj/clothing/accessories.dmi'
- icon_state = "spacepods"
- item_state = "spacepods"
- strip_delay = 100 //air pods don't fall out
- custom_premium_price = 1800
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 1dbb155a269..8e9cdd441db 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -75,10 +75,12 @@
var/mob/living/carbon/human/user = src.loc
if(!user || !ishuman(user) || !(user.wear_suit == src))
return
+ if(!cell && thermal_on)
+ toggle_spacesuit()
if(!cell)
user.update_spacesuit_hud_icon("missing")
else
- var/cell_percent = cell.charge / cell.maxcharge
+ var/cell_percent = cell.percent()
if(cell_percent > 0.6)
user.update_spacesuit_hud_icon("high")
else if(cell_percent > 0.20)
@@ -90,7 +92,7 @@
if(thermal_on && cell.charge >= THERMAL_REGULATOR_COST)
user.adjust_bodytemperature((temperature_setting - user.bodytemperature), use_steps=TRUE, capped=FALSE)
- cell.charge -= THERMAL_REGULATOR_COST
+ cell.use(THERMAL_REGULATOR_COST)
// Clean up the cell on destroy
/obj/item/clothing/suit/space/Destroy()
@@ -116,18 +118,16 @@
// Show the status of the suit and the cell
/obj/item/clothing/suit/space/examine(mob/user)
. = ..()
- if(!in_range(src, user) && !isobserver(user))
- return
-
- . += "The thermal regulator is [thermal_on ? "on" : "off"] and the temperature is set to \
- [round(temperature_setting-T0C,0.1)] °C ([round(temperature_setting*1.8-459.67,0.1)] °F)"
- . += "The power meeter shows [cell ? "[round(cell.charge / cell.maxcharge * 100)]%" : "!invalid!"] charge remaining."
- if(cell_cover_open)
- . += "The cell cover is open exposing the cell and setting knobs."
- if(!cell)
- . += "The slot for a cell is empty."
- else
- . += "\The [cell] is firmly in place."
+ if(in_range(src, user) || isobserver(user))
+ . += "The thermal regulator is [thermal_on ? "on" : "off"] and the temperature is set to \
+ [round(temperature_setting-T0C,0.1)] °C ([round(temperature_setting*1.8-459.67,0.1)] °F)"
+ . += "The power meter shows [cell ? "[round(cell.percent(), 0.1)]%" : "!invalid!"] charge remaining."
+ if(cell_cover_open)
+ . += "The cell cover is open exposing the cell and setting knobs."
+ if(!cell)
+ . += "The slot for a cell is empty."
+ else
+ . += "\The [cell] is firmly in place."
// object handling for accessing features of the suit
/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params)
@@ -159,24 +159,23 @@
/// Open the cell cover when ALT+Click on the suit
/obj/item/clothing/suit/space/AltClick(mob/living/user)
- . = ..()
- if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
+ if(!user || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ return ..()
toggle_spacesuit_cell(user)
/// Remove the cell whent he cover is open on CTRL+Click
/obj/item/clothing/suit/space/CtrlClick(mob/living/user)
- if(istype(user) && user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ if(user && user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
if(cell_cover_open && cell)
remove_cell(user)
return
return ..()
-// Remove suit when using the suit on its self
+// Remove the cell when using the suit on its self
/obj/item/clothing/suit/space/attack_self(mob/user)
remove_cell(user)
-/// Remove the cell from the suit if the over is open
+/// Remove the cell from the suit if the cell cover is open
/obj/item/clothing/suit/space/proc/remove_cell(mob/user)
if(cell_cover_open && cell)
user.visible_message("[user] removes \the [cell] from [src]!", \
@@ -191,10 +190,10 @@
to_chat(user, "You [cell_cover_open ? "open" : "close"] the cell cover on \the [src].")
/// Toggle the space suit's thermal regulator status
-/obj/item/clothing/suit/space/proc/toggle_spacesuit(mob/user)
+/obj/item/clothing/suit/space/proc/toggle_spacesuit()
thermal_on = !thermal_on
min_cold_protection_temperature = thermal_on ? SPACE_SUIT_MIN_TEMP_PROTECT : SPACE_SUIT_MIN_TEMP_PROTECT_OFF
- to_chat(user, "You turn [thermal_on ? "on" : "off"] the thermal regulator on \the [src].")
+ SEND_SIGNAL(src, COMSIG_SUIT_SPACE_TOGGLE)
// let emags override the temperature settings
/obj/item/clothing/suit/space/emag_act(mob/user)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index fc146281b6e..5f331e5df74 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -15,10 +15,6 @@
resistance_flags = NONE
var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
-/obj/item/reagent_containers/food/drinks/on_reagent_change(changetype)
- . = ..()
- gulp_size = max(round(reagents.total_volume / 5), 5)
-
/obj/item/reagent_containers/food/drinks/attack(mob/living/M, mob/user, def_zone)
if(!reagents || !reagents.total_volume)
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 8cb44059ad6..3e886d061b4 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -2,753 +2,519 @@
/datum/chemical_reaction/goldschlager
- name = "Goldschlager"
- id = /datum/reagent/consumable/ethanol/goldschlager
results = list(/datum/reagent/consumable/ethanol/goldschlager = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 10, /datum/reagent/gold = 1)
/datum/chemical_reaction/patron
- name = "Patron"
- id = /datum/reagent/consumable/ethanol/patron
results = list(/datum/reagent/consumable/ethanol/patron = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/tequila = 10, /datum/reagent/silver = 1)
/datum/chemical_reaction/bilk
- name = "Bilk"
- id = /datum/reagent/consumable/ethanol/bilk
results = list(/datum/reagent/consumable/ethanol/bilk = 2)
required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/ethanol/beer = 1)
/datum/chemical_reaction/icetea
- name = "Iced Tea"
- id = /datum/reagent/consumable/icetea
results = list(/datum/reagent/consumable/icetea = 4)
required_reagents = list(/datum/reagent/consumable/ice = 1, /datum/reagent/consumable/tea = 3)
/datum/chemical_reaction/icecoffee
- name = "Iced Coffee"
- id = /datum/reagent/consumable/icecoffee
results = list(/datum/reagent/consumable/icecoffee = 4)
required_reagents = list(/datum/reagent/consumable/ice = 1, /datum/reagent/consumable/coffee = 3)
/datum/chemical_reaction/nuka_cola
- name = "Nuka Cola"
- id = /datum/reagent/consumable/nuka_cola
results = list(/datum/reagent/consumable/nuka_cola = 6)
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/consumable/space_cola = 6)
/datum/chemical_reaction/moonshine
- name = "Moonshine"
- id = /datum/reagent/consumable/ethanol/moonshine
results = list(/datum/reagent/consumable/ethanol/moonshine = 10)
required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/wine
- name = "Wine"
- id = /datum/reagent/consumable/ethanol/wine
results = list(/datum/reagent/consumable/ethanol/wine = 10)
required_reagents = list(/datum/reagent/consumable/grapejuice = 10)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/spacebeer
- name = "Space Beer"
- id = "spacebeer"
results = list(/datum/reagent/consumable/ethanol/beer = 10)
required_reagents = list(/datum/reagent/consumable/flour = 10)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/vodka
- name = "Vodka"
- id = /datum/reagent/consumable/ethanol/vodka
results = list(/datum/reagent/consumable/ethanol/vodka = 10)
required_reagents = list(/datum/reagent/consumable/potato_juice = 10)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/kahlua
- name = "Kahlua"
- id = /datum/reagent/consumable/ethanol/kahlua
results = list(/datum/reagent/consumable/ethanol/kahlua = 5)
required_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/sugar = 5)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/gin_tonic
- name = "Gin and Tonic"
- id = /datum/reagent/consumable/ethanol/gintonic
results = list(/datum/reagent/consumable/ethanol/gintonic = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/tonic = 1)
/datum/chemical_reaction/rum_coke
- name = "Rum and Coke"
- id = /datum/reagent/consumable/ethanol/rum_coke
results = list(/datum/reagent/consumable/ethanol/rum_coke = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/space_cola = 1)
/datum/chemical_reaction/cuba_libre
- name = "Cuba Libre"
- id = /datum/reagent/consumable/ethanol/cuba_libre
results = list(/datum/reagent/consumable/ethanol/cuba_libre = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/rum_coke = 3, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/martini
- name = "Classic Martini"
- id = /datum/reagent/consumable/ethanol/martini
results = list(/datum/reagent/consumable/ethanol/martini = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/ethanol/vermouth = 1)
/datum/chemical_reaction/vodkamartini
- name = "Vodka Martini"
- id = /datum/reagent/consumable/ethanol/vodkamartini
results = list(/datum/reagent/consumable/ethanol/vodkamartini = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/ethanol/vermouth = 1)
/datum/chemical_reaction/white_russian
- name = "White Russian"
- id = /datum/reagent/consumable/ethanol/white_russian
results = list(/datum/reagent/consumable/ethanol/white_russian = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/black_russian = 3, /datum/reagent/consumable/cream = 2)
/datum/chemical_reaction/whiskey_cola
- name = "Whiskey Cola"
- id = /datum/reagent/consumable/ethanol/whiskey_cola
results = list(/datum/reagent/consumable/ethanol/whiskey_cola = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/space_cola = 1)
/datum/chemical_reaction/screwdriver
- name = "Screwdriver"
- id = /datum/reagent/consumable/ethanol/screwdrivercocktail
results = list(/datum/reagent/consumable/ethanol/screwdrivercocktail = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/orangejuice = 1)
/datum/chemical_reaction/bloody_mary
- name = "Bloody Mary"
- id = /datum/reagent/consumable/ethanol/bloody_mary
results = list(/datum/reagent/consumable/ethanol/bloody_mary = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/tomatojuice = 2, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/gargle_blaster
- name = "Pan-Galactic Gargle Blaster"
- id = /datum/reagent/consumable/ethanol/gargle_blaster
results = list(/datum/reagent/consumable/ethanol/gargle_blaster = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/ethanol/gin = 1, /datum/reagent/consumable/ethanol/whiskey = 1, /datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/brave_bull
- name = "Brave Bull"
- id = /datum/reagent/consumable/ethanol/brave_bull
results = list(/datum/reagent/consumable/ethanol/brave_bull = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/tequila = 2, /datum/reagent/consumable/ethanol/kahlua = 1)
/datum/chemical_reaction/tequila_sunrise
- name = "Tequila Sunrise"
- id = /datum/reagent/consumable/ethanol/tequila_sunrise
results = list(/datum/reagent/consumable/ethanol/tequila_sunrise = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/tequila = 2, /datum/reagent/consumable/orangejuice = 2, /datum/reagent/consumable/grenadine = 1)
/datum/chemical_reaction/toxins_special
- name = "Toxins Special"
- id = /datum/chemical_reaction/toxins_special
results = list(/datum/reagent/consumable/ethanol/toxins_special = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vermouth = 1, /datum/reagent/toxin/plasma = 2)
/datum/chemical_reaction/beepsky_smash
- name = "Beepksy Smash"
- id = "beepksysmash"
results = list(/datum/reagent/consumable/ethanol/beepsky_smash = 5)
required_reagents = list(/datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/ethanol/quadruple_sec = 2, /datum/reagent/iron = 1)
/datum/chemical_reaction/doctor_delight
- name = "The Doctor's Delight"
- id = "doctordelight"
results = list(/datum/reagent/consumable/doctor_delight = 5)
required_reagents = list(/datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/cryoxadone = 1)
/datum/chemical_reaction/irish_cream
- name = "Irish Cream"
- id = /datum/reagent/consumable/ethanol/irish_cream
results = list(/datum/reagent/consumable/ethanol/irish_cream = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/manly_dorf
- name = "The Manly Dorf"
- id = /datum/reagent/consumable/ethanol/manly_dorf
results = list(/datum/reagent/consumable/ethanol/manly_dorf = 3)
required_reagents = list (/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/ale = 2)
/datum/chemical_reaction/greenbeer
- name = "Green Beer"
- id = /datum/reagent/consumable/ethanol/beer/green
results = list(/datum/reagent/consumable/ethanol/beer/green = 10)
required_reagents = list(/datum/reagent/colorful_reagent/powder/green = 1, /datum/reagent/consumable/ethanol/beer = 10)
/datum/chemical_reaction/greenbeer2 //apparently there's no other way to do this
- name = "Green Beer"
- id = /datum/reagent/consumable/ethanol/beer/green
results = list(/datum/reagent/consumable/ethanol/beer/green = 10)
required_reagents = list(/datum/reagent/colorful_reagent/powder/green/crayon = 1, /datum/reagent/consumable/ethanol/beer = 10)
/datum/chemical_reaction/hooch
- name = "Hooch"
- id = /datum/reagent/consumable/ethanol/hooch
results = list(/datum/reagent/consumable/ethanol/hooch = 3)
required_reagents = list (/datum/reagent/consumable/ethanol = 2, /datum/reagent/fuel = 1)
required_catalysts = list(/datum/reagent/consumable/enzyme = 1)
/datum/chemical_reaction/irish_coffee
- name = "Irish Coffee"
- id = /datum/reagent/consumable/ethanol/irishcoffee
results = list(/datum/reagent/consumable/ethanol/irishcoffee = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/irish_cream = 1, /datum/reagent/consumable/coffee = 1)
/datum/chemical_reaction/b52
- name = "B-52"
- id = /datum/reagent/consumable/ethanol/b52
results = list(/datum/reagent/consumable/ethanol/b52 = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/irish_cream = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/cognac = 1)
/datum/chemical_reaction/atomicbomb
- name = "Atomic Bomb"
- id = /datum/reagent/consumable/ethanol/atomicbomb
results = list(/datum/reagent/consumable/ethanol/atomicbomb = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/b52 = 10, /datum/reagent/uranium = 1)
/datum/chemical_reaction/margarita
- name = "Margarita"
- id = /datum/reagent/consumable/ethanol/margarita
results = list(/datum/reagent/consumable/ethanol/margarita = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/tequila = 2, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/ethanol/triple_sec = 1)
/datum/chemical_reaction/longislandicedtea
- name = "Long Island Iced Tea"
- id = /datum/reagent/consumable/ethanol/longislandicedtea
results = list(/datum/reagent/consumable/ethanol/longislandicedtea = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/ethanol/gin = 1, /datum/reagent/consumable/ethanol/tequila = 1, /datum/reagent/consumable/ethanol/cuba_libre = 1)
/datum/chemical_reaction/threemileisland
- name = "Three Mile Island Iced Tea"
- id = /datum/reagent/consumable/ethanol/threemileisland
results = list(/datum/reagent/consumable/ethanol/threemileisland = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/longislandicedtea = 10, /datum/reagent/uranium = 1)
/datum/chemical_reaction/whiskeysoda
- name = "Whiskey Soda"
- id = /datum/reagent/consumable/ethanol/whiskeysoda
results = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/sodawater = 1)
/datum/chemical_reaction/black_russian
- name = "Black Russian"
- id = /datum/reagent/consumable/ethanol/black_russian
results = list(/datum/reagent/consumable/ethanol/black_russian = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 3, /datum/reagent/consumable/ethanol/kahlua = 2)
+/datum/chemical_reaction/hiveminderaser
+ results = list(/datum/reagent/consumable/ethanol/hiveminderaser = 4)
+ required_reagents = list(/datum/reagent/consumable/ethanol/black_russian = 2, /datum/reagent/consumable/ethanol/thirteenloko = 1, /datum/reagent/consumable/grenadine = 1)
+
/datum/chemical_reaction/manhattan
- name = "Manhattan"
- id = /datum/reagent/consumable/ethanol/manhattan
results = list(/datum/reagent/consumable/ethanol/manhattan = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/ethanol/vermouth = 1)
/datum/chemical_reaction/manhattan_proj
- name = "Manhattan Project"
- id = /datum/reagent/consumable/ethanol/manhattan_proj
results = list(/datum/reagent/consumable/ethanol/manhattan_proj = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/manhattan = 10, /datum/reagent/uranium = 1)
/datum/chemical_reaction/vodka_tonic
- name = "Vodka and Tonic"
- id = /datum/reagent/consumable/ethanol/vodkatonic
results = list(/datum/reagent/consumable/ethanol/vodkatonic = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/tonic = 1)
/datum/chemical_reaction/gin_fizz
- name = "Gin Fizz"
- id = /datum/reagent/consumable/ethanol/ginfizz
results = list(/datum/reagent/consumable/ethanol/ginfizz = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/sodawater = 1, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/bahama_mama
- name = "Bahama Mama"
- id = /datum/reagent/consumable/ethanol/bahama_mama
results = list(/datum/reagent/consumable/ethanol/bahama_mama = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/creme_de_coconut = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/pineapplejuice = 1)
/datum/chemical_reaction/singulo
- name = "Singulo"
- id = /datum/reagent/consumable/ethanol/singulo
results = list(/datum/reagent/consumable/ethanol/singulo = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/uranium/radium = 1, /datum/reagent/consumable/ethanol/wine = 5)
/datum/chemical_reaction/alliescocktail
- name = "Allies Cocktail"
- id = /datum/reagent/consumable/ethanol/alliescocktail
results = list(/datum/reagent/consumable/ethanol/alliescocktail = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/martini = 1, /datum/reagent/consumable/ethanol/vodka = 1)
/datum/chemical_reaction/demonsblood
- name = "Demons Blood"
- id = /datum/reagent/consumable/ethanol/demonsblood
results = list(/datum/reagent/consumable/ethanol/demonsblood = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/spacemountainwind = 1, /datum/reagent/blood = 1, /datum/reagent/consumable/dr_gibb = 1)
/datum/chemical_reaction/booger
- name = "Booger"
- id = /datum/reagent/consumable/ethanol/booger
results = list(/datum/reagent/consumable/ethanol/booger = 4)
required_reagents = list(/datum/reagent/consumable/cream = 1, /datum/reagent/consumable/banana = 1, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/watermelonjuice = 1)
/datum/chemical_reaction/antifreeze
- name = "Anti-freeze"
- id = /datum/reagent/consumable/ethanol/antifreeze
results = list(/datum/reagent/consumable/ethanol/antifreeze = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/ice = 1)
/datum/chemical_reaction/barefoot
- name = "Barefoot"
- id = /datum/reagent/consumable/ethanol/barefoot
results = list(/datum/reagent/consumable/ethanol/barefoot = 3)
required_reagents = list(/datum/reagent/consumable/berryjuice = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/ethanol/vermouth = 1)
/datum/chemical_reaction/moscow_mule
- name = "Moscow Mule"
- id = /datum/reagent/consumable/ethanol/moscow_mule
results = list(/datum/reagent/consumable/ethanol/moscow_mule = 10)
required_reagents = list(/datum/reagent/consumable/sol_dry = 5, /datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/ice = 1)
mix_sound = 'sound/effects/bubbles2.ogg'
/datum/chemical_reaction/painkiller
- name = "Painkiller"
- id = /datum/reagent/consumable/ethanol/painkiller
results = list(/datum/reagent/consumable/ethanol/painkiller = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/creme_de_coconut = 5, /datum/reagent/consumable/pineapplejuice = 4, /datum/reagent/consumable/orangejuice = 1)
/datum/chemical_reaction/pina_colada
- name = "Pina Colada"
- id = /datum/reagent/consumable/ethanol/pina_colada
results = list(/datum/reagent/consumable/ethanol/pina_colada = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/creme_de_coconut = 1, /datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/limejuice = 1)
////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
/datum/chemical_reaction/sbiten
- name = "Sbiten"
- id = /datum/reagent/consumable/ethanol/sbiten
results = list(/datum/reagent/consumable/ethanol/sbiten = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 10, /datum/reagent/consumable/capsaicin = 1)
/datum/chemical_reaction/red_mead
- name = "Red Mead"
- id = /datum/reagent/consumable/ethanol/red_mead
results = list(/datum/reagent/consumable/ethanol/red_mead = 2)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/ethanol/mead = 1)
/datum/chemical_reaction/mead
- name = "Mead"
- id = /datum/reagent/consumable/ethanol/mead
results = list(/datum/reagent/consumable/ethanol/mead = 2)
required_reagents = list(/datum/reagent/consumable/honey = 2)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/iced_beer
- name = "Iced Beer"
- id = /datum/reagent/consumable/ethanol/iced_beer
results = list(/datum/reagent/consumable/ethanol/iced_beer = 6)
required_reagents = list(/datum/reagent/consumable/ethanol/beer = 5, /datum/reagent/consumable/ice = 1)
/datum/chemical_reaction/grog
- name = "Grog"
- id = /datum/reagent/consumable/ethanol/grog
results = list(/datum/reagent/consumable/ethanol/grog = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/water = 1)
/datum/chemical_reaction/soy_latte
- name = "Soy Latte"
- id = /datum/reagent/consumable/soy_latte
results = list(/datum/reagent/consumable/soy_latte = 2)
required_reagents = list(/datum/reagent/consumable/coffee = 1, /datum/reagent/consumable/soymilk = 1)
/datum/chemical_reaction/cafe_latte
- name = "Cafe Latte"
- id = /datum/reagent/consumable/cafe_latte
results = list(/datum/reagent/consumable/cafe_latte = 2)
required_reagents = list(/datum/reagent/consumable/coffee = 1, /datum/reagent/consumable/milk = 1)
/datum/chemical_reaction/acidspit
- name = "Acid Spit"
- id = /datum/reagent/consumable/ethanol/acid_spit
results = list(/datum/reagent/consumable/ethanol/acid_spit = 6)
required_reagents = list(/datum/reagent/toxin/acid = 1, /datum/reagent/consumable/ethanol/wine = 5)
/datum/chemical_reaction/amasec
- name = "Amasec"
- id = /datum/reagent/consumable/ethanol/amasec
results = list(/datum/reagent/consumable/ethanol/amasec = 10)
required_reagents = list(/datum/reagent/iron = 1, /datum/reagent/consumable/ethanol/wine = 5, /datum/reagent/consumable/ethanol/vodka = 5)
/datum/chemical_reaction/changelingsting
- name = "Changeling Sting"
- id = /datum/reagent/consumable/ethanol/changelingsting
results = list(/datum/reagent/consumable/ethanol/changelingsting = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/screwdrivercocktail = 1, /datum/reagent/consumable/lemon_lime = 2)
/datum/chemical_reaction/aloe
- name = "Aloe"
- id = /datum/reagent/consumable/ethanol/aloe
results = list(/datum/reagent/consumable/ethanol/aloe = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/irish_cream = 1, /datum/reagent/consumable/watermelonjuice = 1)
/datum/chemical_reaction/andalusia
- name = "Andalusia"
- id = /datum/reagent/consumable/ethanol/andalusia
results = list(/datum/reagent/consumable/ethanol/andalusia = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/ethanol/whiskey = 1, /datum/reagent/consumable/lemonjuice = 1)
/datum/chemical_reaction/neurotoxin
- name = "Neurotoxin"
- id = /datum/reagent/consumable/ethanol/neurotoxin
results = list(/datum/reagent/consumable/ethanol/neurotoxin = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/gargle_blaster = 1, /datum/reagent/medicine/morphine = 1)
/datum/chemical_reaction/snowwhite
- name = "Snow White"
- id = /datum/reagent/consumable/ethanol/snowwhite
results = list(/datum/reagent/consumable/ethanol/snowwhite = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/lemon_lime = 1)
/datum/chemical_reaction/irishcarbomb
- name = "Irish Car Bomb"
- id = /datum/reagent/consumable/ethanol/irishcarbomb
results = list(/datum/reagent/consumable/ethanol/irishcarbomb = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/ale = 1, /datum/reagent/consumable/ethanol/irish_cream = 1)
/datum/chemical_reaction/syndicatebomb
- name = "Syndicate Bomb"
- id = /datum/reagent/consumable/ethanol/syndicatebomb
results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1)
/datum/chemical_reaction/erikasurprise
- name = "Erika Surprise"
- id = /datum/reagent/consumable/ethanol/erikasurprise
results = list(/datum/reagent/consumable/ethanol/erikasurprise = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/ale = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/ethanol/whiskey = 1, /datum/reagent/consumable/banana = 1, /datum/reagent/consumable/ice = 1)
/datum/chemical_reaction/devilskiss
- name = "Devils Kiss"
- id = /datum/reagent/consumable/ethanol/devilskiss
results = list(/datum/reagent/consumable/ethanol/devilskiss = 3)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/rum = 1)
/datum/chemical_reaction/hippiesdelight
- name = "Hippies Delight"
- id = /datum/reagent/consumable/ethanol/hippies_delight
results = list(/datum/reagent/consumable/ethanol/hippies_delight = 2)
required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 1, /datum/reagent/consumable/ethanol/gargle_blaster = 1)
/datum/chemical_reaction/bananahonk
- name = "Banana Honk"
- id = /datum/reagent/consumable/ethanol/bananahonk
results = list(/datum/reagent/consumable/ethanol/bananahonk = 2)
required_reagents = list(/datum/reagent/consumable/laughter = 1, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/silencer
- name = "Silencer"
- id = /datum/reagent/consumable/ethanol/silencer
results = list(/datum/reagent/consumable/ethanol/silencer = 3)
required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/sugar = 1)
/datum/chemical_reaction/driestmartini
- name = "Driest Martini"
- id = /datum/reagent/consumable/ethanol/driestmartini
results = list(/datum/reagent/consumable/ethanol/driestmartini = 2)
required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/ethanol/gin = 1)
/datum/chemical_reaction/thirteenloko
- name = "Thirteen Loko"
- id = /datum/reagent/consumable/ethanol/thirteenloko
results = list(/datum/reagent/consumable/ethanol/thirteenloko = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/coffee = 1, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/chocolatepudding
- name = "Chocolate Pudding"
- id = /datum/reagent/consumable/chocolatepudding
results = list(/datum/reagent/consumable/chocolatepudding = 20)
required_reagents = list(/datum/reagent/consumable/milk/chocolate_milk = 10, /datum/reagent/consumable/eggyolk = 5)
/datum/chemical_reaction/vanillapudding
- name = "Vanilla Pudding"
- id = /datum/reagent/consumable/vanillapudding
results = list(/datum/reagent/consumable/vanillapudding = 20)
required_reagents = list(/datum/reagent/consumable/vanilla = 5, /datum/reagent/consumable/milk = 5, /datum/reagent/consumable/eggyolk = 5)
/datum/chemical_reaction/cherryshake
- name = "Cherry Shake"
- id = /datum/reagent/consumable/cherryshake
results = list(/datum/reagent/consumable/cherryshake = 3)
required_reagents = list(/datum/reagent/consumable/cherryjelly = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/bluecherryshake
- name = "Blue Cherry Shake"
- id = /datum/reagent/consumable/bluecherryshake
results = list(/datum/reagent/consumable/bluecherryshake = 3)
required_reagents = list(/datum/reagent/consumable/bluecherryjelly = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/drunkenblumpkin
- name = "Drunken Blumpkin"
- id = /datum/reagent/consumable/ethanol/drunkenblumpkin
results = list(/datum/reagent/consumable/ethanol/drunkenblumpkin = 4)
required_reagents = list(/datum/reagent/consumable/blumpkinjuice = 1, /datum/reagent/consumable/ethanol/irish_cream = 2, /datum/reagent/consumable/ice = 1)
/datum/chemical_reaction/pumpkin_latte
- name = "Pumpkin space latte"
- id = /datum/reagent/consumable/pumpkin_latte
results = list(/datum/reagent/consumable/pumpkin_latte = 15)
required_reagents = list(/datum/reagent/consumable/pumpkinjuice = 5, /datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/cream = 5)
/datum/chemical_reaction/gibbfloats
- name = "Gibb Floats"
- id = /datum/reagent/consumable/gibbfloats
results = list(/datum/reagent/consumable/gibbfloats = 15)
required_reagents = list(/datum/reagent/consumable/dr_gibb = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/cream = 5)
/datum/chemical_reaction/triple_citrus
- name = /datum/reagent/consumable/triple_citrus
- id = /datum/reagent/consumable/triple_citrus
results = list(/datum/reagent/consumable/triple_citrus = 5)
required_reagents = list(/datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/orangejuice = 1)
/datum/chemical_reaction/grape_soda
- name = "grape soda"
- id = /datum/reagent/consumable/grape_soda
results = list(/datum/reagent/consumable/grape_soda = 2)
required_reagents = list(/datum/reagent/consumable/grapejuice = 1, /datum/reagent/consumable/sodawater = 1)
/datum/chemical_reaction/grappa
- name = /datum/reagent/consumable/ethanol/grappa
- id = /datum/reagent/consumable/ethanol/grappa
results = list(/datum/reagent/consumable/ethanol/grappa = 10)
required_reagents = list (/datum/reagent/consumable/ethanol/wine = 10)
required_catalysts = list (/datum/reagent/consumable/enzyme = 5)
/datum/chemical_reaction/whiskey_sour
- name = "Whiskey Sour"
- id = /datum/reagent/consumable/ethanol/whiskey_sour
results = list(/datum/reagent/consumable/ethanol/whiskey_sour = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 1, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/sugar = 1)
mix_message = "The mixture darkens to a rich gold hue."
/datum/chemical_reaction/fetching_fizz
- name = "Fetching Fizz"
- id = /datum/reagent/consumable/ethanol/fetching_fizz
results = list(/datum/reagent/consumable/ethanol/fetching_fizz = 3)
required_reagents = list(/datum/reagent/consumable/nuka_cola = 1, /datum/reagent/iron = 1) //Manufacturable from only the mining station
mix_message = "The mixture slightly vibrates before settling."
/datum/chemical_reaction/hearty_punch
- name = "Hearty Punch"
- id = /datum/reagent/consumable/ethanol/hearty_punch
results = list(/datum/reagent/consumable/ethanol/hearty_punch = 1) //Very little, for balance reasons
required_reagents = list(/datum/reagent/consumable/ethanol/brave_bull = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5, /datum/reagent/consumable/ethanol/absinthe = 5)
mix_message = "The mixture darkens to a healthy crimson."
required_temp = 315 //Piping hot!
/datum/chemical_reaction/bacchus_blessing
- name = "Bacchus' Blessing"
- id = /datum/reagent/consumable/ethanol/bacchus_blessing
results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/hooch = 1, /datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/manly_dorf = 1, /datum/reagent/consumable/ethanol/syndicatebomb = 1)
mix_message = "The mixture turns to a sickening froth."
/datum/chemical_reaction/lemonade
- name = "Lemonade"
- id = /datum/reagent/consumable/lemonade
results = list(/datum/reagent/consumable/lemonade = 5)
required_reagents = list(/datum/reagent/consumable/lemonjuice = 2, /datum/reagent/water = 2, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/ice = 1)
mix_message = "You're suddenly reminded of home."
/datum/chemical_reaction/arnold_palmer
- name = "Arnold Palmer"
- id = /datum/reagent/consumable/tea/arnold_palmer
results = list(/datum/reagent/consumable/tea/arnold_palmer = 2)
required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/consumable/lemonade = 1)
mix_message = "The smells of fresh green grass and sand traps waft through the air as the mixture turns a friendly yellow-orange."
/datum/chemical_reaction/chocolate_milk
- name = "chocolate milk"
- id = /datum/reagent/consumable/milk/chocolate_milk
results = list(/datum/reagent/consumable/milk/chocolate_milk = 2)
required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/coco = 1)
mix_message = "The color changes as the mixture blends smoothly."
/datum/chemical_reaction/hot_coco
- name = "Hot Coco"
- id = /datum/reagent/consumable/hot_coco
results = list(/datum/reagent/consumable/hot_coco = 5)
required_reagents = list(/datum/reagent/consumable/milk = 5, /datum/reagent/consumable/coco = 1)
required_temp = 320
/datum/chemical_reaction/coffee
- name = "Coffee"
- id = /datum/reagent/consumable/coffee
results = list(/datum/reagent/consumable/coffee = 5)
required_reagents = list(/datum/reagent/toxin/coffeepowder = 1, /datum/reagent/water = 5)
/datum/chemical_reaction/tea
- name = "Tea"
- id = /datum/reagent/consumable/tea
results = list(/datum/reagent/consumable/tea = 5)
required_reagents = list(/datum/reagent/toxin/teapowder = 1, /datum/reagent/water = 5)
/datum/chemical_reaction/eggnog
- name = /datum/reagent/consumable/ethanol/eggnog
- id = /datum/reagent/consumable/ethanol/eggnog
results = list(/datum/reagent/consumable/ethanol/eggnog = 15)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 5, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/eggyolk = 5)
/datum/chemical_reaction/narsour
- name = "Nar'sour"
- id = /datum/reagent/consumable/ethanol/narsour
results = list(/datum/reagent/consumable/ethanol/narsour = 1)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/ethanol/demonsblood = 1)
mix_message = "The mixture develops a sinister glow."
mix_sound = 'sound/effects/singlebeat.ogg'
/datum/chemical_reaction/quadruplesec
- name = "Quadruple Sec"
- id = /datum/reagent/consumable/ethanol/quadruple_sec
results = list(/datum/reagent/consumable/ethanol/quadruple_sec = 15)
required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 5, /datum/reagent/consumable/triple_citrus = 5, /datum/reagent/consumable/ethanol/creme_de_menthe = 5)
mix_message = "The snap of a taser emanates clearly from the mixture as it settles."
mix_sound = 'sound/weapons/taser.ogg'
/datum/chemical_reaction/grasshopper
- name = "Grasshopper"
- id = /datum/reagent/consumable/ethanol/grasshopper
results = list(/datum/reagent/consumable/ethanol/grasshopper = 15)
required_reagents = list(/datum/reagent/consumable/cream = 5, /datum/reagent/consumable/ethanol/creme_de_menthe = 5, /datum/reagent/consumable/ethanol/creme_de_cacao = 5)
mix_message = "A vibrant green bubbles forth as the mixture emulsifies."
/datum/chemical_reaction/stinger
- name = "Stinger"
- id = /datum/reagent/consumable/ethanol/stinger
results = list(/datum/reagent/consumable/ethanol/stinger = 15)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 10, /datum/reagent/consumable/ethanol/creme_de_menthe = 5 )
/datum/chemical_reaction/quintuplesec
- name = "Quintuple Sec"
- id = /datum/reagent/consumable/ethanol/quintuple_sec
results = list(/datum/reagent/consumable/ethanol/quintuple_sec = 15)
required_reagents = list(/datum/reagent/consumable/ethanol/quadruple_sec = 5, /datum/reagent/consumable/clownstears = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5)
mix_message = "Judgement is upon you."
mix_sound = 'sound/items/airhorn2.ogg'
/datum/chemical_reaction/bastion_bourbon
- name = "Bastion Bourbon"
- id = /datum/reagent/consumable/ethanol/bastion_bourbon
results = list(/datum/reagent/consumable/ethanol/bastion_bourbon = 2)
required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/consumable/ethanol/creme_de_menthe = 1, /datum/reagent/consumable/triple_citrus = 1, /datum/reagent/consumable/berryjuice = 1) //herbal and minty, with a hint of citrus and berry
mix_message = "You catch an aroma of hot tea and fruits as the mix blends into a blue-green color."
/datum/chemical_reaction/squirt_cider
- name = "Squirt Cider"
- id = /datum/reagent/consumable/ethanol/squirt_cider
results = list(/datum/reagent/consumable/ethanol/squirt_cider = 1)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/nutriment = 1)
mix_message = "The mix swirls and turns a bright red that reminds you of an apple's skin."
/datum/chemical_reaction/fringe_weaver
- name = "Fringe Weaver"
- id = /datum/reagent/consumable/ethanol/fringe_weaver
results = list(/datum/reagent/consumable/ethanol/fringe_weaver = 10)
required_reagents = list(/datum/reagent/consumable/ethanol = 9, /datum/reagent/consumable/sugar = 1) //9 karmotrine, 1 adelhyde
mix_message = "The mix turns a pleasant cream color and foams up."
/datum/chemical_reaction/sugar_rush
- name = "Sugar Rush"
- id = /datum/reagent/consumable/ethanol/sugar_rush
results = list(/datum/reagent/consumable/ethanol/sugar_rush = 4)
required_reagents = list(/datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/ethanol/wine = 1) //2 adelhyde (sweet), 1 powdered delta (sour), 1 karmotrine (alcohol)
mix_message = "The mixture bubbles and brightens into a girly pink."
/datum/chemical_reaction/crevice_spike
- name = "Crevice Spike"
- id = /datum/reagent/consumable/ethanol/crevice_spike
results = list(/datum/reagent/consumable/ethanol/crevice_spike = 6)
required_reagents = list(/datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/capsaicin = 4) //2 powdered delta (sour), 4 flanergide (spicy)
mix_message = "The mixture stings your eyes as it settles."
/datum/chemical_reaction/sake
- name = /datum/reagent/consumable/ethanol/sake
- id = /datum/reagent/consumable/ethanol/sake
results = list(/datum/reagent/consumable/ethanol/sake = 10)
required_reagents = list(/datum/reagent/consumable/rice = 10)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
mix_message = "The rice grains ferment into a clear, sweet-smelling liquid."
/datum/chemical_reaction/peppermint_patty
- name = "Peppermint Patty"
- id = /datum/reagent/consumable/ethanol/peppermint_patty
results = list(/datum/reagent/consumable/ethanol/peppermint_patty = 10)
required_reagents = list(/datum/reagent/consumable/hot_coco = 6, /datum/reagent/consumable/ethanol/creme_de_cacao = 1, /datum/reagent/consumable/ethanol/creme_de_menthe = 1, /datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/menthol = 1)
mix_message = "The coco turns mint green just as the strong scent hits your nose."
/datum/chemical_reaction/alexander
- name = "Alexander"
- id = /datum/reagent/consumable/ethanol/alexander
results = list(/datum/reagent/consumable/ethanol/alexander = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/consumable/ethanol/creme_de_cacao = 1, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/sidecar
- name = "Sidecar"
- id = /datum/reagent/consumable/ethanol/sidecar
results = list(/datum/reagent/consumable/ethanol/sidecar = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 2, /datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/lemonjuice = 1)
/datum/chemical_reaction/between_the_sheets
- name = "Between the Sheets"
- id = /datum/reagent/consumable/ethanol/between_the_sheets
results = list(/datum/reagent/consumable/ethanol/between_the_sheets = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/ethanol/sidecar = 4)
/datum/chemical_reaction/kamikaze
- name = "Kamikaze"
- id = /datum/reagent/consumable/ethanol/kamikaze
results = list(/datum/reagent/consumable/ethanol/kamikaze = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 1, /datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/limejuice = 1)
/datum/chemical_reaction/mojito
- name = "Mojito"
- id = /datum/reagent/consumable/ethanol/mojito
results = list(/datum/reagent/consumable/ethanol/mojito = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/sodawater = 1, /datum/reagent/consumable/menthol = 1)
/datum/chemical_reaction/fernet_cola
- name = "Fernet Cola"
- id = /datum/reagent/consumable/ethanol/fernet_cola
results = list(/datum/reagent/consumable/ethanol/fernet_cola = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/fernet = 1, /datum/reagent/consumable/space_cola = 1)
/datum/chemical_reaction/fanciulli
- name = "Fanciulli"
- id = /datum/reagent/consumable/ethanol/fanciulli
results = list(/datum/reagent/consumable/ethanol/fanciulli = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/manhattan = 1, /datum/reagent/consumable/ethanol/fernet = 1)
/datum/chemical_reaction/branca_menta
- name = "Branca Menta"
- id = /datum/reagent/consumable/ethanol/branca_menta
results = list(/datum/reagent/consumable/ethanol/branca_menta = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/fernet = 1, /datum/reagent/consumable/ethanol/creme_de_menthe = 1, /datum/reagent/consumable/ice = 1)
/datum/chemical_reaction/blank_paper
- name = "Blank Paper"
- id = /datum/reagent/consumable/ethanol/blank_paper
results = list(/datum/reagent/consumable/ethanol/blank_paper = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/silencer = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nuka_cola = 1)
/datum/chemical_reaction/wizz_fizz
- name = "Wizz Fizz"
- id = /datum/reagent/consumable/ethanol/wizz_fizz
results = list(/datum/reagent/consumable/ethanol/wizz_fizz = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/sodawater = 1, /datum/reagent/consumable/ethanol/champagne = 1)
mix_message = "The beverage starts to froth with an almost mystical zeal!"
@@ -756,77 +522,53 @@
/datum/chemical_reaction/bug_spray
- name = "Bug Spray"
- id = /datum/reagent/consumable/ethanol/bug_spray
results = list(/datum/reagent/consumable/ethanol/bug_spray = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 2, /datum/reagent/consumable/lemon_lime = 1, /datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vodka = 1)
mix_message = "The faint aroma of summer camping trips wafts through the air; but what's that buzzing noise?"
mix_sound = 'sound/creatures/bee.ogg'
/datum/chemical_reaction/jack_rose
- name = "Jack Rose"
- id = /datum/reagent/consumable/ethanol/jack_rose
results = list(/datum/reagent/consumable/ethanol/jack_rose = 4)
required_reagents = list(/datum/reagent/consumable/grenadine = 1, /datum/reagent/consumable/ethanol/applejack = 2, /datum/reagent/consumable/limejuice = 1)
mix_message = "As the grenadine incorporates, the beverage takes on a mellow, red-orange glow."
/datum/chemical_reaction/turbo
- name = "Turbo"
- id = /datum/reagent/consumable/ethanol/turbo
results = list(/datum/reagent/consumable/ethanol/turbo = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/moonshine = 2, /datum/reagent/nitrous_oxide = 1, /datum/reagent/consumable/ethanol/sugar_rush = 1, /datum/reagent/consumable/pwr_game = 1)
/datum/chemical_reaction/old_timer
- name = "Old Timer"
- id = /datum/reagent/consumable/ethanol/old_timer
results = list(/datum/reagent/consumable/ethanol/old_timer = 6)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3, /datum/reagent/consumable/parsnipjuice = 2, /datum/reagent/consumable/ethanol/alexander = 1)
/datum/chemical_reaction/rubberneck
- name = "Rubberneck"
- id = /datum/reagent/consumable/ethanol/rubberneck
results = list(/datum/reagent/consumable/ethanol/rubberneck = 10)
required_reagents = list(/datum/reagent/consumable/ethanol = 4, /datum/reagent/consumable/grey_bull = 5, /datum/reagent/consumable/astrotame = 1)
/datum/chemical_reaction/duplex
- name = "Duplex"
- id = /datum/reagent/consumable/ethanol/duplex
results = list(/datum/reagent/consumable/ethanol/duplex = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/hcider = 2, /datum/reagent/consumable/applejuice = 1, /datum/reagent/consumable/berryjuice = 1)
/datum/chemical_reaction/trappist
- name = "Trappist"
- id = /datum/reagent/consumable/ethanol/trappist
results = list(/datum/reagent/consumable/ethanol/trappist = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/ale = 2, /datum/reagent/water/holywater = 2, /datum/reagent/consumable/sugar = 1)
/datum/chemical_reaction/cream_soda
- name = "Cream Soda"
- id = /datum/reagent/consumable/cream_soda
results = list(/datum/reagent/consumable/cream_soda = 4)
required_reagents = list(/datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/sodawater = 2, /datum/reagent/consumable/vanilla = 1)
/datum/chemical_reaction/blazaam
- name = "Blazaam"
- id = /datum/reagent/consumable/ethanol/blazaam
results = list(/datum/reagent/consumable/ethanol/blazaam = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/peachjuice = 1, /datum/reagent/bluespace = 1)
/datum/chemical_reaction/planet_cracker
- name = "Planet Cracker"
- id = /datum/reagent/consumable/ethanol/planet_cracker
results = list(/datum/reagent/consumable/ethanol/planet_cracker = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/champagne = 2, /datum/reagent/consumable/ethanol/lizardwine = 2, /datum/reagent/consumable/eggyolk = 1, /datum/reagent/gold = 1)
mix_message = "The liquid's color starts shifting as the nanogold is alternately corroded and redeposited."
/datum/chemical_reaction/red_queen
- name = "Red Queen"
- id = /datum/reagent/consumable/red_queen
results = list(/datum/reagent/consumable/red_queen = 10)
required_reagents = list(/datum/reagent/consumable/tea = 6, /datum/reagent/mercury = 2, /datum/reagent/consumable/blackpepper = 1, /datum/reagent/growthserum = 1)
/datum/chemical_reaction/mauna_loa
- name = "Mauna Loa"
- id = /datum/reagent/consumable/ethanol/mauna_loa
results = list(/datum/reagent/consumable/ethanol/mauna_loa = 5)
required_reagents = list(/datum/reagent/consumable/capsaicin = 2, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/bahama_mama = 2)
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index 9e0bab02e3c..ceed56e01d9 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -9,8 +9,6 @@
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
/datum/chemical_reaction/tofu
- name = "Tofu"
- id = "tofu"
required_reagents = list(/datum/reagent/consumable/soymilk = 10)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
mob_react = FALSE
@@ -22,8 +20,6 @@
return
/datum/chemical_reaction/chocolate_bar
- name = "Chocolate Bar"
- id = "chocolate_bar"
required_reagents = list(/datum/reagent/consumable/soymilk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2)
/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume)
@@ -33,8 +29,6 @@
return
/datum/chemical_reaction/chocolate_bar2
- name = "Chocolate Bar"
- id = "chocolate_bar"
required_reagents = list(/datum/reagent/consumable/milk/chocolate_milk = 4, /datum/reagent/consumable/sugar = 2)
mob_react = FALSE
@@ -45,37 +39,27 @@
return
/datum/chemical_reaction/soysauce
- name = "Soy Sauce"
- id = /datum/reagent/consumable/soysauce
results = list(/datum/reagent/consumable/soysauce = 5)
required_reagents = list(/datum/reagent/consumable/soymilk = 4, /datum/reagent/toxin/acid = 1)
/datum/chemical_reaction/corn_syrup
- name = /datum/reagent/consumable/corn_syrup
- id = /datum/reagent/consumable/corn_syrup
results = list(/datum/reagent/consumable/corn_syrup = 5)
required_reagents = list(/datum/reagent/consumable/corn_starch = 1, /datum/reagent/toxin/acid = 1)
required_temp = 374
/datum/chemical_reaction/caramel
- name = "Caramel"
- id = /datum/reagent/consumable/caramel
results = list(/datum/reagent/consumable/caramel = 1)
required_reagents = list(/datum/reagent/consumable/sugar = 1)
required_temp = 413.15
mob_react = FALSE
/datum/chemical_reaction/caramel_burned
- name = "Caramel burned"
- id = "caramel_burned"
results = list(/datum/reagent/carbon = 1)
required_reagents = list(/datum/reagent/consumable/caramel = 1)
required_temp = 483.15
mob_react = FALSE
/datum/chemical_reaction/cheesewheel
- name = "Cheesewheel"
- id = "cheesewheel"
required_reagents = list(/datum/reagent/consumable/milk = 40)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
@@ -85,8 +69,6 @@
new /obj/item/reagent_containers/food/snacks/store/cheesewheel(location)
/datum/chemical_reaction/synthmeat
- name = "synthmeat"
- id = "synthmeat"
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/cryoxadone = 1)
mob_react = FALSE
@@ -96,20 +78,14 @@
new /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat(location)
/datum/chemical_reaction/hot_ramen
- name = "Hot Ramen"
- id = /datum/reagent/consumable/hot_ramen
results = list(/datum/reagent/consumable/hot_ramen = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/consumable/dry_ramen = 3)
/datum/chemical_reaction/hell_ramen
- name = "Hell Ramen"
- id = /datum/reagent/consumable/hell_ramen
results = list(/datum/reagent/consumable/hell_ramen = 6)
required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/hot_ramen = 6)
/datum/chemical_reaction/imitationcarpmeat
- name = "Imitation Carpmeat"
- id = "imitationcarpmeat"
required_reagents = list(/datum/reagent/toxin/carpotoxin = 5)
required_container = /obj/item/reagent_containers/food/snacks/tofu
mix_message = "The mixture becomes similar to carp meat."
@@ -121,8 +97,6 @@
qdel(holder.my_atom)
/datum/chemical_reaction/dough
- name = "Dough"
- id = "dough"
required_reagents = list(/datum/reagent/water = 10, /datum/reagent/consumable/flour = 15)
mix_message = "The ingredients form a dough."
@@ -132,8 +106,6 @@
new /obj/item/reagent_containers/food/snacks/dough(location)
/datum/chemical_reaction/cakebatter
- name = "Cake Batter"
- id = "cakebatter"
required_reagents = list(/datum/reagent/consumable/eggyolk = 15, /datum/reagent/consumable/flour = 15, /datum/reagent/consumable/sugar = 5)
mix_message = "The ingredients form a cake batter."
@@ -143,12 +115,9 @@
new /obj/item/reagent_containers/food/snacks/cakebatter(location)
/datum/chemical_reaction/cakebatter/vegan
- id = "vegancakebatter"
required_reagents = list(/datum/reagent/consumable/soymilk = 15, /datum/reagent/consumable/flour = 15, /datum/reagent/consumable/sugar = 5)
/datum/chemical_reaction/ricebowl
- name = "Rice Bowl"
- id = "ricebowl"
required_reagents = list(/datum/reagent/consumable/rice = 10, /datum/reagent/water = 10)
required_container = /obj/item/reagent_containers/glass/bowl
mix_message = "The rice absorbs the water."
@@ -160,14 +129,10 @@
qdel(holder.my_atom)
/datum/chemical_reaction/nutriconversion
- name = "Nutriment Conversion"
- id = "nutriconversion"
results = list(/datum/reagent/consumable/nutriment/peptides = 0.5)
required_reagents = list(/datum/reagent/consumable/nutriment/ = 0.5)
required_catalysts = list(/datum/reagent/medicine/metafactor = 0.5)
/datum/chemical_reaction/bbqsauce
- name = "BBQ Sauce"
- id = /datum/reagent/consumable/bbqsauce
results = list(/datum/reagent/consumable/bbqsauce = 5)
required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/medicine/salglu_solution = 3, /datum/reagent/consumable/blackpepper = 1)
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index ebdcdf9e71d..e750889f8be 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -31,7 +31,7 @@
belt = /obj/item/storage/belt/medical/paramedic
id = /obj/item/card/id
l_pocket = /obj/item/pda/medical
- r_pocket = /obj/item/pinpointer/crew/prox
+ suit_store = /obj/item/flashlight/pen
backpack_contents = list(/obj/item/roller=1)
pda_slot = ITEM_SLOT_LPOCKET
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 42257c51a4d..d0bbaea8b6b 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -49,7 +49,7 @@
if(15)
new /obj/item/nullrod/armblade(src)
if(16)
- new /obj/item/guardiancreator(src)
+ new /obj/item/guardiancreator/hive(src)
if(17)
if(prob(50))
new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index eea2a411d30..dbb8ff45980 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -19,9 +19,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
response_harm_continuous = "punches"
response_harm_simple = "punch"
icon = 'icons/mob/guardian.dmi'
- icon_state = "magicOrange"
- icon_living = "magicOrange"
- icon_dead = "magicOrange"
+ icon_state = "magicbase"
+ icon_living = "magicbase"
+ icon_dead = "magicbase"
speed = 0
a_intent = INTENT_HARM
stop_automated_movement = 1
@@ -44,21 +44,25 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
AIStatus = AI_OFF
hud_type = /datum/hud/guardian
dextrous_hud_type = /datum/hud/dextrous/guardian //if we're set to dextrous, account for it.
+ var/mutable_appearance/cooloverlay
+ var/guardiancolor = "#ffffff"
+ var/recolorentiresprite
+ var/theme
var/list/guardian_overlays[GUARDIAN_TOTAL_LAYERS]
var/reset = 0 //if the summoner has reset the guardian already
var/cooldown = 0
var/mob/living/summoner
var/range = 10 //how far from the user the spirit can be
var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
- var/datum/guardianname/namedatum = new/datum/guardianname()
var/playstyle_string = "You are a standard Guardian. You shouldn't exist!"
var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!"
var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!"
var/carp_fluff_string = "CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP"
+ var/hive_fluff_string = "The mass seems to be an anomaly, it shouldn't exist... Submit a bug report!"
/mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme)
GLOB.parasites += src
- setthemename(theme)
+ updatetheme(theme)
. = ..()
@@ -81,43 +85,52 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
GLOB.parasites -= src
return ..()
-/mob/living/simple_animal/hostile/guardian/proc/setthemename(pickedtheme) //set the guardian's theme to something cool!
- if(!pickedtheme)
- pickedtheme = pick("magic", "tech", "carp")
- var/list/possible_names = list()
- switch(pickedtheme)
+/mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme
+ if(!theme)
+ theme = pick("magic", "tech", "carp", "hive")
+ switch(theme)//should make it easier to create new stand designs in the future if anyone likes that
if("magic")
- for(var/type in (subtypesof(/datum/guardianname/magic) - namedatum.type))
- possible_names += new type
+ name = "Guardian Spirit"
+ real_name = "Guardian Spirit"
+ bubble_icon = "guardian"
+ icon_state = "magicbase"
+ icon_living = "magicbase"
+ icon_dead = "magicbase"
if("tech")
- for(var/type in (subtypesof(/datum/guardianname/tech) - namedatum.type))
- possible_names += new type
+ name = "Holoparasite"
+ real_name = "Holoparasite"
+ bubble_icon = "holo"
+ icon_state = "techbase"
+ icon_living = "techbase"
+ icon_dead = "techbase"
if("carp")
- for(var/type in (subtypesof(/datum/guardianname/carp) - namedatum.type))
- possible_names += new type
- namedatum = pick(possible_names)
- updatetheme(pickedtheme)
-
-/mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme to whatever its datum is; proc for adminfuckery
- name = "[namedatum.prefixname] [namedatum.suffixcolour]"
- real_name = "[name]"
- icon_living = "[namedatum.parasiteicon]"
- icon_state = "[namedatum.parasiteicon]"
- icon_dead = "[namedatum.parasiteicon]"
- bubble_icon = "[namedatum.bubbleicon]"
-
- if (namedatum.stainself)
- add_atom_colour(namedatum.colour, FIXED_COLOUR_PRIORITY)
-
- //Special case holocarp, because #snowflake code
- if(theme == "carp")
- speak_emote = list("gnashes")
- desc = "A mysterious fish that stands by its charge, ever vigilant."
-
- attack_verb_continuous = "bites"
- attack_verb_simple = "bite"
- attack_sound = 'sound/weapons/bite.ogg'
-
+ name = "Holocarp"
+ real_name = "Holocarp"
+ bubble_icon = "holo"
+ icon_state = "holocarp"
+ icon_living = "holocarp"
+ icon_dead = "holocarp"
+ speak_emote = list("gnashes")
+ desc = "A mysterious fish that stands by its charge, ever vigilant."
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ attack_sound = 'sound/weapons/bite.ogg'
+ recolorentiresprite = TRUE
+ if("hive")
+ name = "Hivelord"
+ real_name = "Hivelord"
+ bubble_icon = "guardian"
+ icon_state = "hivebase"
+ icon_living = "hivebase"
+ icon_dead = "hivebase"
+ speak_emote = list("telepathically cries")
+ desc = "A truly alien creature, it is a mass of unknown organic material, standing by its' owner's side."
+ attack_verb_continuous = "lashes out at"
+ attack_verb_simple = "lash out at"
+ attack_sound = 'sound/weapons/pierce.ogg'
+ if(!recolorentiresprite) //we want this to proc before stand logs in, so the overlay isnt gone for some reason
+ cooloverlay = mutable_appearance(icon, theme)
+ add_overlay(cooloverlay)
/mob/living/simple_animal/hostile/guardian/Login() //if we have a mind, set its name to ours when it logs in
..()
@@ -126,10 +139,37 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(!summoner)
to_chat(src, "For some reason, somehow, you have no summoner. Please report this bug immediately.")
return
- to_chat(src, "You are [real_name], bound to serve [summoner.real_name].")
+ to_chat(src, "You are a [real_name], bound to serve [summoner.real_name].")
to_chat(src, "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.")
to_chat(src, "While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.")
to_chat(src, playstyle_string)
+ guardiancustomize()
+
+/mob/living/simple_animal/hostile/guardian/proc/guardiancustomize()
+ guardianrecolor()
+ guardianrename()
+
+/mob/living/simple_animal/hostile/guardian/proc/guardianrecolor()
+ guardiancolor = input(src,"What would you like your color to be?","Choose Your Color","#ffffff") as color|null
+ if(!guardiancolor) //redo proc until we get a color
+ to_chat(src, "Not a valid color, please try again.")
+ guardianrecolor()
+ return
+ if(!recolorentiresprite)
+ cooloverlay.color = guardiancolor
+ cut_overlay(cooloverlay) //we need to get our new color
+ add_overlay(cooloverlay)
+ else
+ add_atom_colour(guardiancolor, FIXED_COLOUR_PRIORITY)
+
+/mob/living/simple_animal/hostile/guardian/proc/guardianrename()
+ var/new_name = sanitize_name(reject_bad_text(stripped_input(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN)))
+ if(!new_name) //redo proc until we get a good name
+ to_chat(src, "Not a valid name, please try again.")
+ guardianrename()
+ return
+ visible_message("Your new name [new_name] anchors itself in your mind.")
+ fully_replace_character_name(null, new_name)
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
. = ..()
@@ -359,7 +399,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
return
var/preliminary_message = "[input]" //apply basic color/bolding
- var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color
+ var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color
to_chat(summoner, my_message)
var/list/guardians = summoner.hasparasites()
@@ -386,7 +426,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/list/guardians = hasparasites()
for(var/para in guardians)
var/mob/living/simple_animal/hostile/guardian/G = para
- to_chat(G, "[src]: [preliminary_message]" )
+ to_chat(G, "[src]: [preliminary_message]" )
for(var/M in GLOB.dead_mob_list)
var/link = FOLLOW_LINK(M, src)
to_chat(M, "[link] [my_message]")
@@ -417,27 +457,31 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(guardians.len)
var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in sortNames(guardians)
if(G)
- to_chat(src, "You attempt to reset [G.real_name]'s personality...")
+ to_chat(src, "You attempt to reset [G.real_name]'s personality...")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")
- to_chat(src, "Your [G.real_name] has been successfully reset.")
+ to_chat(src, "Your [G.real_name] has been successfully reset.")
message_admins("[key_name_admin(C)] has taken control of ([ADMIN_LOOKUPFLW(G)])")
G.ghostize(0)
- G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person
+ G.guardiancustomize() //give it a new color, to show it's a new person
G.key = C.key
G.reset = 1
- switch(G.namedatum.theme)
+ switch(G.theme)
if("tech")
- to_chat(src, "[G.real_name] is now online!")
+ to_chat(src, "[G.real_name] is now online!")
if("magic")
- to_chat(src, "[G.real_name] has been summoned!")
+ to_chat(src, "[G.real_name] has been summoned!")
+ if("carp")
+ to_chat(src, "[G.real_name] has been caught!")
+ if("hive")
+ to_chat(src, "[G.real_name] has been created from the core!")
guardians -= G
if(!guardians.len)
verbs -= /mob/living/proc/guardian_reset
else
- to_chat(src, "There were no ghosts willing to take control of [G.real_name]. Looks like you're stuck with it for now.")
+ to_chat(src, "There were no ghosts willing to take control of [G.real_name]. Looks like you're stuck with it for now.")
else
to_chat(src, "You decide not to reset [guardians.len > 1 ? "any of your guardians":"your guardian"].")
else
@@ -554,6 +598,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
used = FALSE
return
var/mob/living/simple_animal/hostile/guardian/G = new pickedtype(user, theme)
+ G.name = mob_name
G.summoner = user
G.key = key
G.mind.enslave_mind_to_creator(user)
@@ -561,13 +606,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
switch(theme)
if("tech")
to_chat(user, "[G.tech_fluff_string]")
- to_chat(user, "[G.real_name] is now online!")
+ to_chat(user, "[G.real_name] is now online!")
if("magic")
to_chat(user, "[G.magic_fluff_string]")
- to_chat(user, "[G.real_name] has been summoned!")
+ to_chat(user, "[G.real_name] has been summoned!")
if("carp")
to_chat(user, "[G.carp_fluff_string]")
- to_chat(user, "[G.real_name] has been caught!")
+ to_chat(user, "[G.real_name] has been caught!")
+ if("hive")
+ to_chat(user, "[G.hive_fluff_string]")
+ to_chat(user, "[G.real_name] has been created from the core!")
user.verbs += /mob/living/proc/guardian_comm
user.verbs += /mob/living/proc/guardian_recall
user.verbs += /mob/living/proc/guardian_reset
@@ -596,6 +644,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
/obj/item/guardiancreator/tech/choose/traitor
possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support", "Gravitokinetic")
+ allowling = FALSE
/obj/item/guardiancreator/tech/choose
random = FALSE
@@ -680,8 +729,21 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
failure_message = "You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up."
ling_failure = "Carp'sie is fine with changelings, so you shouldn't be seeing this message."
allowmultiple = TRUE
- allowling = TRUE
- random = TRUE
/obj/item/guardiancreator/carp/choose
random = FALSE
+
+/obj/item/guardiancreator/hive
+ name = "mysterious core"
+ desc = "All that remains of a hivelord. It has a mysterious aura around it..."
+ icon = 'icons/obj/surgery.dmi'
+ icon_state = "roro core 2"
+ theme = "hive"
+ mob_name = "Hivelord"
+ use_message = "You place the core near your heart..."
+ used_message = "This core seems to have decayed and doesn't work anymore..."
+ failure_message = "You couldn't gather any mass with the core, maybe try again later."
+ ling_failure = "Even the dark energies seem to not want to be near your horrific body."
+
+/obj/item/guardiancreator/hive/choose
+ random = FALSE
diff --git a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm b/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm
deleted file mode 100644
index f2e1b57255a..00000000000
--- a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm
+++ /dev/null
@@ -1,161 +0,0 @@
-
-/datum/guardianname
- var/prefixname = "Default" //the prefix the guardian uses for its name
- var/suffixcolour = "Name" //the suffix the guardian uses for its name
- var/parasiteicon = "techbase" //the icon of the guardian
- var/bubbleicon = "holo" //the speechbubble icon of the guardian
- var/theme = "tech" //what the actual theme of the guardian is
- var/colour = "#C3C3C3" //what color the guardian's name is in chat and what color is used for effects from the guardian
- var/stainself = 0 //whether to use the color var to literally dye ourself our chosen colour, for lazy spriting
-
-/datum/guardianname/carp
- bubbleicon = "guardian"
- theme = "carp"
- parasiteicon = "holocarp"
- stainself = 1
-
-/datum/guardianname/carp/New()
- prefixname = pick(GLOB.carp_names)
-
-/datum/guardianname/carp/sand
- suffixcolour = "Sand"
- colour = "#C2B280"
-
-/datum/guardianname/carp/seashell
- suffixcolour = "Seashell"
- colour = "#FFF5EE"
-
-/datum/guardianname/carp/coral
- suffixcolour = "Coral"
- colour = "#FF7F50"
-
-/datum/guardianname/carp/salmon
- suffixcolour = "Salmon"
- colour = "#FA8072"
-
-/datum/guardianname/carp/sunset
- suffixcolour = "Sunset"
- colour = "#FAD6A5"
-
-/datum/guardianname/carp/riptide
- suffixcolour = "Riptide"
- colour = "#89D9C8"
-
-/datum/guardianname/carp/seagreen
- suffixcolour = "Sea Green"
- colour = "#2E8B57"
-
-/datum/guardianname/carp/ultramarine
- suffixcolour = "Ultramarine"
- colour = "#3F00FF"
-
-/datum/guardianname/carp/cerulean
- suffixcolour = "Cerulean"
- colour = "#007BA7"
-
-/datum/guardianname/carp/aqua
- suffixcolour = "Aqua"
- colour = "#00FFFF"
-
-/datum/guardianname/carp/paleaqua
- suffixcolour = "Pale Aqua"
- colour = "#BCD4E6"
-
-/datum/guardianname/carp/hookergreen
- suffixcolour = "Hooker Green"
- colour = "#49796B"
-
-/datum/guardianname/magic
- bubbleicon = "guardian"
- theme = "magic"
-
-/datum/guardianname/magic/New()
- prefixname = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces", "Ophiuchus")
-
-/datum/guardianname/magic/red
- suffixcolour = "Red"
- parasiteicon = "magicRed"
- colour = "#E32114"
-
-/datum/guardianname/magic/pink
- suffixcolour = "Pink"
- parasiteicon = "magicPink"
- colour = "#FB5F9B"
-
-/datum/guardianname/magic/orange
- suffixcolour = "Orange"
- parasiteicon = "magicOrange"
- colour = "#F3CF24"
-
-/datum/guardianname/magic/green
- suffixcolour = "Green"
- parasiteicon = "magicGreen"
- colour = "#A4E836"
-
-/datum/guardianname/magic/blue
- suffixcolour = "Blue"
- parasiteicon = "magicBlue"
- colour = "#78C4DB"
-
-/datum/guardianname/tech/New()
- prefixname = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
-
-/datum/guardianname/tech/rose
- suffixcolour = "Rose"
- parasiteicon = "techRose"
- colour = "#F62C6B"
-
-/datum/guardianname/tech/peony
- suffixcolour = "Peony"
- parasiteicon = "techPeony"
- colour = "#E54750"
-
-/datum/guardianname/tech/lily
- suffixcolour = "Lily"
- parasiteicon = "techLily"
- colour = "#F6562C"
-
-/datum/guardianname/tech/daisy
- suffixcolour = "Daisy"
- parasiteicon = "techDaisy"
- colour = "#ECCD39"
-
-/datum/guardianname/tech/zinnia
- suffixcolour = "Zinnia"
- parasiteicon = "techZinnia"
- colour = "#89F62C"
-
-/datum/guardianname/tech/ivy
- suffixcolour = "Ivy"
- parasiteicon = "techIvy"
- colour = "#5DF62C"
-
-/datum/guardianname/tech/iris
- suffixcolour = "Iris"
- parasiteicon = "techIris"
- colour = "#2CF6B8"
-
-/datum/guardianname/tech/petunia
- suffixcolour = "Petunia"
- parasiteicon = "techPetunia"
- colour = "#51A9D4"
-
-/datum/guardianname/tech/violet
- suffixcolour = "Violet"
- parasiteicon = "techViolet"
- colour = "#8A347C"
-
-/datum/guardianname/tech/lotus
- suffixcolour = "Lotus"
- parasiteicon = "techLotus"
- colour = "#463546"
-
-/datum/guardianname/tech/lilac
- suffixcolour = "Lilac"
- parasiteicon = "techLilac"
- colour = "#C7A0F6"
-
-/datum/guardianname/tech/orchid
- suffixcolour = "Orchid"
- parasiteicon = "techOrchid"
- colour = "#F62CF5"
diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
index 026fc1b1c04..44c2ab2e8e1 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
@@ -10,7 +10,7 @@
magic_fluff_string = "..And draw the Space Ninja, a lethal, invisible assassin."
tech_fluff_string = "Boot sequence complete. Assassin modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space."
-
+ hive_fluff_string = "The mass seems to be able to attack with stealth causing massive damage."
toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin
var/toggle = FALSE
var/stealthcooldown = 160
diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
index 01e16cb5027..12463e0bc6c 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
@@ -11,6 +11,7 @@
magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault."
tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs..."
+ hive_fluff_string = "The mass seems to have primal senses, rapidly assaulting its' enemies."
var/charging = 0
var/obj/screen/alert/chargealert
diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
index 7a164f1d6a0..182f45703c0 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
@@ -7,6 +7,7 @@
magic_fluff_string = "..And draw the Drone, a dextrous master of construction and repair."
tech_fluff_string = "Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of."
+ hive_fluff_string = "The mass seems to be able to... hold stuff?"
dextrous = TRUE
held_items = list(null, null)
var/obj/item/internal_storage //what we're storing within ourself
diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
index 840f247a5fb..f1e38dabbb4 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
@@ -14,6 +14,7 @@
magic_fluff_string = "..And draw the Scientist, master of explosive death."
tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy."
+ hive_fluff_string = "The mass seems to generate explosive energy, destroying everything in its' path."
var/bomb_cooldown = 0
var/static/list/boom_signals = list(COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_BUMPED, COMSIG_ATOM_ATTACK_HAND)
@@ -71,6 +72,6 @@
UNREGISTER_BOMB_SIGNALS(A)
/mob/living/simple_animal/hostile/guardian/bomb/proc/display_examine(datum/source, mob/user, text)
- text += "It glows with a strange light!"
+ text += "It glows with a strange light!"
#undef UNREGISTER_BOMB_SIGNALS
diff --git a/code/modules/mob/living/simple_animal/guardian/types/fire.dm b/code/modules/mob/living/simple_animal/guardian/types/fire.dm
index 386c8300528..641e9664e94 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/fire.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/fire.dm
@@ -12,6 +12,7 @@
magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!"
tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish."
+ hive_fluff_string = "The mass seems to generate lots of energy, causing everything except its' owner to burn to ash."
/mob/living/simple_animal/hostile/guardian/fire/Life()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm b/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm
index 02f194500cc..768c50e73ee 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm
@@ -7,6 +7,7 @@
magic_fluff_string = "..And draw the Singularity, an anomalous force of terror."
tech_fluff_string = "Boot sequence complete. Gravitokinetic modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one! It's a gravitokinetic carp! Now do you understand the gravity of the situation?"
+ hive_fluff_string = "The mass seems to be extremely heavy, and able to relay the heaviness to others."
var/list/gravito_targets = list()
var/gravity_power_range = 10 //how close the stand must stay to the target to keep the heavy gravity
diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
index bf626644c6f..62eb1a54300 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
@@ -16,6 +16,7 @@
magic_fluff_string = "..And draw the Tesla, a shocking, lethal source of power."
tech_fluff_string = "Boot sequence complete. Lightning modules active. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap."
+ hive_fluff_string = "The mass seems to cause lots of thunder strikes around itself."
var/datum/beam/summonerchain
var/list/enemychains = list()
var/successfulshocks = 0
diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
index f736d7784fc..b90e99de0e2 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
@@ -8,6 +8,7 @@
magic_fluff_string = "..And draw the Guardian, a stalwart protector that never leaves the side of its charge."
tech_fluff_string = "Boot sequence complete. Protector modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy."
+ hive_fluff_string = "The mass seems to be extremely resistant to damage and have a special connection with the owner."
toggle_button_type = /obj/screen/guardian/ToggleMode
var/toggle = FALSE
@@ -25,8 +26,8 @@
. = ..()
if(. > 0 && toggle)
var/image/I = new('icons/effects/effects.dmi', src, "shield-flash", MOB_LAYER+0.01, dir = pick(GLOB.cardinals))
- if(namedatum)
- I.color = namedatum.colour
+ if(guardiancolor)
+ I.color = guardiancolor
flick_overlay_view(I, src, 5)
/mob/living/simple_animal/hostile/guardian/protector/ToggleMode()
@@ -43,8 +44,8 @@
toggle = FALSE
else
var/mutable_appearance/shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey")
- if(namedatum)
- shield_overlay.color = namedatum.colour
+ if(guardiancolor)
+ shield_overlay.color = guardiancolor
add_overlay(shield_overlay)
melee_damage_lower = 2
melee_damage_upper = 2
@@ -63,7 +64,7 @@
visible_message("\The [src] jumps back to its user.")
Recall(TRUE)
else
- to_chat(summoner, "You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!")
+ to_chat(summoner, "You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!")
summoner.visible_message("\The [summoner] jumps back to [summoner.p_their()] protector.")
new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner))
summoner.forceMove(get_turf(src))
diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
index a24da3d3d9b..996b21e8eb4 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
@@ -22,6 +22,7 @@
magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat."
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean."
+ hive_fluff_string = "The mass seems to be able to create more mass and also hide at will."
see_invisible = SEE_INVISIBLE_LIVING
see_in_dark = 8
toggle_button_type = /obj/screen/guardian/ToggleMode
@@ -57,8 +58,8 @@
. = ..()
if(istype(., /obj/projectile))
var/obj/projectile/P = .
- if(namedatum)
- P.color = namedatum.colour
+ if(guardiancolor)
+ P.color = guardiancolor
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
var/msg
diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm
index 27c528c1ae1..357c593695b 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/standard.dm
@@ -9,6 +9,7 @@
magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated."
tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online."
carp_fluff_string = "CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension."
+ hive_fluff_string = "The mass seems to have immense strength and increased agility."
var/battlecry = "AT"
/mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index 291ae7491c3..4cc09b47598 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -11,6 +11,7 @@
magic_fluff_string = "..And draw the CMO, a potent force of life... and death."
carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!"
tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online."
+ hive_fluff_string = "The mass seems to have regenerative powers, while also possessing strength."
toggle_button_type = /obj/screen/guardian/ToggleMode
var/obj/structure/receiving_pad/beacon
var/beacon_cooldown = 0
@@ -36,8 +37,8 @@
C.adjustOxyLoss(-5)
C.adjustToxLoss(-5)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(C))
- if(namedatum)
- H.color = namedatum.colour
+ if(guardiancolor)
+ H.color = guardiancolor
if(C == summoner)
update_health_hud()
med_hud_set_health()
@@ -100,8 +101,8 @@
/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
. = ..()
- if(G.namedatum)
- add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY)
+ if(G.guardiancolor)
+ add_atom_colour(G.guardiancolor, FIXED_COLOUR_PRIORITY)
/obj/structure/receiving_pad/proc/disappear()
visible_message("[src] vanishes!")
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index bfe738a5bd6..367aaca851f 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -22,7 +22,7 @@ Contents:
armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 40, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
strip_delay = 12
- actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove)
+ actions_types = list(/datum/action/item_action/toggle_spacesuit, /datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove)
//Important parts of the suit.
var/mob/living/carbon/human/affecting = null
@@ -72,6 +72,7 @@ Contents:
//Cell Init
cell = new/obj/item/stock_parts/cell/high
cell.charge = 60000 // larger as it now heats
+ cell.maxcharge = 60000
cell.name = "black power cell"
cell.icon_state = "bscell"
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index dab74c0031e..636486ed471 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -85,6 +85,7 @@
var/tac_reloads = TRUE //Snowflake mechanic no more.
///Whether the gun can be sawn off by sawing tools
var/can_be_sawn_off = FALSE
+ var/flip_cooldown = 0
/obj/item/gun/ballistic/Initialize()
. = ..()
@@ -339,6 +340,18 @@
return ..()
/obj/item/gun/ballistic/attack_self(mob/living/user)
+ if(HAS_TRAIT(user, TRAIT_GUNFLIP))
+ if(flip_cooldown <= world.time)
+ if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40))
+ to_chat(user, "While trying to flip the [src] you pull the trigger and accidently shoot yourself!")
+ var/flip_mistake = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST)
+ process_fire(user, user, FALSE, flip_mistake)
+ user.dropItemToGround(src, TRUE)
+ return
+ flip_cooldown = (world.time + 30)
+ user.visible_message("[user] spins the [src] around their finger by the trigger. That’s pretty badass.")
+ playsound(src, 'sound/items/handling/ammobox_pickup.ogg', 20, FALSE)
+ return
if(!internal_magazine && magazine)
if(!magazine.ammo_count())
eject_magazine(user)
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index abe386a511e..1fb04012245 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -31,12 +31,11 @@
var/datum/chemical_reaction/D = new path()
var/list/reaction_ids = list()
- if(!D.id)
+ if(!D.required_reagents || !D.required_reagents.len) //Skip impossible reactions
continue
- if(D.required_reagents && D.required_reagents.len)
- for(var/reaction in D.required_reagents)
- reaction_ids += reaction
+ 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)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index f473bdfd21b..81d1b463707 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1115,6 +1115,17 @@ All effects don't start immediately, but rather get worse over time; the rate is
playsound(get_turf(M), 'sound/effects/explosionfar.ogg', 100, TRUE)
return ..()
+/datum/reagent/consumable/ethanol/hiveminderaser
+ name = "Hivemind Eraser"
+ description = "A vessel of pure flavor."
+ color = "#FF80FC" // rgb: 255, 128, 252
+ boozepwr = 40
+ quality = DRINK_GOOD
+ taste_description = "psychic links"
+ glass_icon_state = "hiveminderaser"
+ glass_name = "Hivemind Eraser"
+ glass_desc = "For when even mindshields can't save you."
+
/datum/reagent/consumable/ethanol/erikasurprise
name = "Erika Surprise"
description = "The surprise is, it's green!"
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index 802b1c109ec..7ca683dac98 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -1,6 +1,4 @@
/datum/chemical_reaction
- var/name = null
- var/id = null
var/list/results = new/list()
var/list/required_reagents = new/list()
var/list/required_catalysts = new/list()
@@ -24,7 +22,7 @@
if(holder && holder.my_atom)
var/atom/A = holder.my_atom
var/turf/T = get_turf(A)
- var/message = "A [reaction_name] reaction has occurred in [ADMIN_VERBOSEJMP(T)]"
+ var/message = "Mobs have been spawned in [ADMIN_VERBOSEJMP(T)] by a [reaction_name] reaction."
message += " (VV)"
var/mob/M = get(A, /mob)
diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
index 7fa667e7797..1b85aa6bb2d 100644
--- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
+++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
@@ -3,45 +3,33 @@
/*****BRUTE*****/
/datum/chemical_reaction/helbital
- name = "helbital"
- id = /datum/reagent/medicine/C2/helbital
results = list(/datum/reagent/medicine/C2/helbital = 3)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/fluorine = 1, /datum/reagent/carbon = 1)
mix_message = "The mixture turns into a thick, yellow powder."
/datum/chemical_reaction/libital
- name = "Libital"
- id = /datum/reagent/medicine/C2/libital
results = list(/datum/reagent/medicine/C2/libital = 3)
required_reagents = list(/datum/reagent/phenol = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1)
/*****BURN*****/
/datum/chemical_reaction/lenturi
- name = "Lenturi"
- id = /datum/reagent/medicine/C2/lenturi
results = list(/datum/reagent/medicine/C2/lenturi = 5)
required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/silver = 1, /datum/reagent/sulfur = 1, /datum/reagent/oxygen = 1, /datum/reagent/chlorine = 1)
/datum/chemical_reaction/aiuri
- name = "Aiuri"
- id = /datum/reagent/medicine/C2/aiuri
results = list(/datum/reagent/medicine/C2/aiuri = 4)
required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/hydrogen = 2)
/*****OXY*****/
/datum/chemical_reaction/convermol
- name = "Convermol"
- id = /datum/reagent/medicine/C2/convermol
results = list(/datum/reagent/medicine/C2/convermol = 3)
required_reagents = list(/datum/reagent/hydrogen = 1, /datum/reagent/fluorine = 1, /datum/reagent/fuel/oil = 1)
required_temp = 370
mix_message = "The mixture rapidly turns into a dense pink liquid."
/datum/chemical_reaction/tirimol
- name = "Tirimol"
- id = /datum/reagent/medicine/C2/tirimol
results = list(/datum/reagent/medicine/C2/tirimol = 5)
required_reagents = list(/datum/reagent/nitrogen = 3, /datum/reagent/acetone = 2)
required_catalysts = list(/datum/reagent/toxin/acid = 1)
@@ -49,27 +37,19 @@
/*****TOX*****/
/datum/chemical_reaction/seiver
- name = "Seiver"
- id = /datum/reagent/medicine/C2/seiver
results = list(/datum/reagent/medicine/C2/seiver = 3)
required_reagents = list(/datum/reagent/nitrogen = 1, /datum/reagent/potassium = 1, /datum/reagent/aluminium = 1)
/datum/chemical_reaction/multiver
- name = "Multiver"
- id = /datum/reagent/medicine/C2/multiver
results = list(/datum/reagent/medicine/C2/multiver = 2)
required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/sodiumchloride = 1)
mix_message = "The mixture yields a fine black powder."
required_temp = 380
/datum/chemical_reaction/syriniver
- name = "Syriniver"
- id = /datum/reagent/medicine/C2/syriniver
results = list(/datum/reagent/medicine/C2/syriniver = 5)
required_reagents = list(/datum/reagent/sulfur = 1, /datum/reagent/fluorine = 1, /datum/reagent/toxin = 1, /datum/reagent/nitrous_oxide = 2)
/datum/chemical_reaction/penthrite
- name = "Penthrite"
- id = /datum/reagent/medicine/C2/penthrite
results = list(/datum/reagent/medicine/C2/penthrite = 4)
required_reagents = list(/datum/reagent/pentaerythritol = 4, /datum/reagent/acetone = 1, /datum/reagent/toxin/acid/nitracid = 1)
diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm
index 0b66c232c85..6d3d1f794ff 100644
--- a/code/modules/reagents/chemistry/recipes/drugs.dm
+++ b/code/modules/reagents/chemistry/recipes/drugs.dm
@@ -1,12 +1,8 @@
/datum/chemical_reaction/space_drugs
- name = "Space Drugs"
- id = /datum/reagent/drug/space_drugs
results = list(/datum/reagent/drug/space_drugs = 3)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/lithium = 1)
/datum/chemical_reaction/crank
- name = "Crank"
- id = /datum/reagent/drug/crank
results = list(/datum/reagent/drug/crank = 5)
required_reagents = list(/datum/reagent/medicine/diphenhydramine = 1, /datum/reagent/ammonia = 1, /datum/reagent/lithium = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/fuel = 1)
mix_message = "The mixture violently reacts, leaving behind a few crystalline shards."
@@ -14,42 +10,30 @@
/datum/chemical_reaction/krokodil
- name = "Krokodil"
- id = /datum/reagent/drug/krokodil
results = list(/datum/reagent/drug/krokodil = 6)
required_reagents = list(/datum/reagent/medicine/diphenhydramine = 1, /datum/reagent/medicine/morphine = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/potassium = 1, /datum/reagent/phosphorus = 1, /datum/reagent/fuel = 1)
mix_message = "The mixture dries into a pale blue powder."
required_temp = 380
/datum/chemical_reaction/methamphetamine
- name = /datum/reagent/drug/methamphetamine
- id = /datum/reagent/drug/methamphetamine
results = list(/datum/reagent/drug/methamphetamine = 4)
required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/iodine = 1, /datum/reagent/phosphorus = 1, /datum/reagent/hydrogen = 1)
required_temp = 374
/datum/chemical_reaction/bath_salts
- name = /datum/reagent/drug/bath_salts
- id = /datum/reagent/drug/bath_salts
results = list(/datum/reagent/drug/bath_salts = 7)
required_reagents = list(/datum/reagent/toxin/bad_food = 1, /datum/reagent/saltpetre = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/consumable/enzyme = 1, /datum/reagent/consumable/tea = 1, /datum/reagent/mercury = 1)
required_temp = 374
/datum/chemical_reaction/aranesp
- name = /datum/reagent/drug/aranesp
- id = /datum/reagent/drug/aranesp
results = list(/datum/reagent/drug/aranesp = 3)
required_reagents = list(/datum/reagent/medicine/epinephrine = 1, /datum/reagent/medicine/atropine = 1, /datum/reagent/medicine/morphine = 1)
/datum/chemical_reaction/happiness
- name = "Happiness"
- id = /datum/reagent/drug/happiness
results = list(/datum/reagent/drug/happiness = 4)
required_reagents = list(/datum/reagent/nitrous_oxide = 2, /datum/reagent/medicine/epinephrine = 1, /datum/reagent/consumable/ethanol = 1)
required_catalysts = list(/datum/reagent/toxin/plasma = 5)
/datum/chemical_reaction/pumpup
- name = "Pump-Up"
- id = /datum/reagent/drug/pumpup
results = list(/datum/reagent/drug/pumpup = 5)
required_reagents = list(/datum/reagent/medicine/epinephrine = 2, /datum/reagent/consumable/coffee = 5)
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index 7c3c81eed71..c3e0186be74 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -1,248 +1,170 @@
/datum/chemical_reaction/leporazine
- name = "Leporazine"
- id = /datum/reagent/medicine/leporazine
results = list(/datum/reagent/medicine/leporazine = 2)
required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/copper = 1)
required_catalysts = list(/datum/reagent/toxin/plasma = 5)
/datum/chemical_reaction/rezadone
- name = "Rezadone"
- id = /datum/reagent/medicine/rezadone
results = list(/datum/reagent/medicine/rezadone = 3)
required_reagents = list(/datum/reagent/toxin/carpotoxin = 1, /datum/reagent/cryptobiolin = 1, /datum/reagent/copper = 1)
/datum/chemical_reaction/spaceacillin
- name = "Spaceacillin"
- id = /datum/reagent/medicine/spaceacillin
results = list(/datum/reagent/medicine/spaceacillin = 2)
required_reagents = list(/datum/reagent/cryptobiolin = 1, /datum/reagent/medicine/epinephrine = 1)
/datum/chemical_reaction/oculine
- name = "Oculine"
- id = /datum/reagent/medicine/oculine
results = list(/datum/reagent/medicine/oculine = 3)
required_reagents = list(/datum/reagent/medicine/C2/multiver = 1, /datum/reagent/carbon = 1, /datum/reagent/hydrogen = 1)
mix_message = "The mixture bubbles noticeably and becomes a dark grey color!"
/datum/chemical_reaction/inacusiate
- name = /datum/reagent/medicine/inacusiate
- id = /datum/reagent/medicine/inacusiate
results = list(/datum/reagent/medicine/inacusiate = 2)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/carbon = 1, /datum/reagent/medicine/C2/multiver = 1)
mix_message = "The mixture sputters loudly and becomes a light grey color!"
/datum/chemical_reaction/synaptizine
- name = "Synaptizine"
- id = /datum/reagent/medicine/synaptizine
results = list(/datum/reagent/medicine/synaptizine = 3)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/lithium = 1, /datum/reagent/water = 1)
/datum/chemical_reaction/salglu_solution
- name = "Saline-Glucose Solution"
- id = /datum/reagent/medicine/salglu_solution
results = list(/datum/reagent/medicine/salglu_solution = 3)
required_reagents = list(/datum/reagent/consumable/sodiumchloride = 1, /datum/reagent/water = 1, /datum/reagent/consumable/sugar = 1)
/datum/chemical_reaction/mine_salve
- name = "Miner's Salve"
- id = /datum/reagent/medicine/mine_salve
results = list(/datum/reagent/medicine/mine_salve = 3)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/water = 1, /datum/reagent/iron = 1)
/datum/chemical_reaction/mine_salve2
- name = "Miner's Salve"
- id = /datum/reagent/medicine/mine_salve
results = list(/datum/reagent/medicine/mine_salve = 15)
required_reagents = list(/datum/reagent/toxin/plasma = 5, /datum/reagent/iron = 5, /datum/reagent/consumable/sugar = 1) // A sheet of plasma, a twinkie and a sheet of metal makes four of these
/datum/chemical_reaction/instabitaluri
- name = "Synthflesh (Instabitaluri)"
- id = /datum/reagent/medicine/C2/instabitaluri
results = list(/datum/reagent/medicine/C2/instabitaluri = 3)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/carbon = 1, /datum/reagent/medicine/C2/libital = 1)
/datum/chemical_reaction/calomel
- name = "Calomel"
- id = /datum/reagent/medicine/calomel
results = list(/datum/reagent/medicine/calomel = 2)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/chlorine = 1)
required_temp = 374
/datum/chemical_reaction/potass_iodide
- name = "Potassium Iodide"
- id = /datum/reagent/medicine/potass_iodide
results = list(/datum/reagent/medicine/potass_iodide = 2)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/iodine = 1)
/datum/chemical_reaction/pen_acid
- name = "Pentetic Acid"
- id = /datum/reagent/medicine/pen_acid
results = list(/datum/reagent/medicine/pen_acid = 6)
required_reagents = list(/datum/reagent/fuel = 1, /datum/reagent/chlorine = 1, /datum/reagent/ammonia = 1, /datum/reagent/toxin/formaldehyde = 1, /datum/reagent/sodium = 1, /datum/reagent/toxin/cyanide = 1)
/datum/chemical_reaction/sal_acid
- name = "Salicylic Acid"
- id = /datum/reagent/medicine/sal_acid
results = list(/datum/reagent/medicine/sal_acid = 5)
required_reagents = list(/datum/reagent/sodium = 1, /datum/reagent/phenol = 1, /datum/reagent/carbon = 1, /datum/reagent/oxygen = 1, /datum/reagent/toxin/acid = 1)
/datum/chemical_reaction/oxandrolone
- name = "Oxandrolone"
- id = /datum/reagent/medicine/oxandrolone
results = list(/datum/reagent/medicine/oxandrolone = 6)
required_reagents = list(/datum/reagent/carbon = 3, /datum/reagent/phenol = 1, /datum/reagent/hydrogen = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/salbutamol
- name = "Salbutamol"
- id = /datum/reagent/medicine/salbutamol
results = list(/datum/reagent/medicine/salbutamol = 5)
required_reagents = list(/datum/reagent/medicine/sal_acid = 1, /datum/reagent/lithium = 1, /datum/reagent/aluminium = 1, /datum/reagent/bromine = 1, /datum/reagent/ammonia = 1)
/datum/chemical_reaction/ephedrine
- name = "Ephedrine"
- id = /datum/reagent/medicine/ephedrine
results = list(/datum/reagent/medicine/ephedrine = 4)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/fuel/oil = 1, /datum/reagent/hydrogen = 1, /datum/reagent/diethylamine = 1)
mix_message = "The solution fizzes and gives off toxic fumes."
/datum/chemical_reaction/diphenhydramine
- name = "Diphenhydramine"
- id = /datum/reagent/medicine/diphenhydramine
results = list(/datum/reagent/medicine/diphenhydramine = 4)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/carbon = 1, /datum/reagent/bromine = 1, /datum/reagent/diethylamine = 1, /datum/reagent/consumable/ethanol = 1)
mix_message = "The mixture dries into a pale blue powder."
/datum/chemical_reaction/atropine
- name = "Atropine"
- id = /datum/reagent/medicine/atropine
results = list(/datum/reagent/medicine/atropine = 5)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/acetone = 1, /datum/reagent/diethylamine = 1, /datum/reagent/phenol = 1, /datum/reagent/toxin/acid = 1)
/datum/chemical_reaction/epinephrine
- name = "Epinephrine"
- id = /datum/reagent/medicine/epinephrine
results = list(/datum/reagent/medicine/epinephrine = 6)
required_reagents = list(/datum/reagent/phenol = 1, /datum/reagent/acetone = 1, /datum/reagent/diethylamine = 1, /datum/reagent/oxygen = 1, /datum/reagent/chlorine = 1, /datum/reagent/hydrogen = 1)
/datum/chemical_reaction/strange_reagent
- name = "Strange Reagent"
- id = /datum/reagent/medicine/strange_reagent
results = list(/datum/reagent/medicine/strange_reagent = 3)
required_reagents = list(/datum/reagent/medicine/omnizine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1)
/datum/chemical_reaction/strange_reagent/alt
- name = "Strange Reagent"
- id = /datum/reagent/medicine/strange_reagent
results = list(/datum/reagent/medicine/strange_reagent = 2)
required_reagents = list(/datum/reagent/medicine/omnizine/protozine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1)
/datum/chemical_reaction/mannitol
- name = "Mannitol"
- id = /datum/reagent/medicine/mannitol
results = list(/datum/reagent/medicine/mannitol = 3)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/hydrogen = 1, /datum/reagent/water = 1)
mix_message = "The solution slightly bubbles, becoming thicker."
/datum/chemical_reaction/neurine
- name = "Neurine"
- id = /datum/reagent/medicine/neurine
results = list(/datum/reagent/medicine/neurine = 3)
required_reagents = list(/datum/reagent/medicine/mannitol = 1, /datum/reagent/acetone = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/mutadone
- name = "Mutadone"
- id = /datum/reagent/medicine/mutadone
results = list(/datum/reagent/medicine/mutadone = 3)
required_reagents = list(/datum/reagent/toxin/mutagen = 1, /datum/reagent/acetone = 1, /datum/reagent/bromine = 1)
/datum/chemical_reaction/antihol
- name = /datum/reagent/medicine/antihol
- id = /datum/reagent/medicine/antihol
results = list(/datum/reagent/medicine/antihol = 3)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/medicine/C2/multiver = 1, /datum/reagent/copper = 1)
/datum/chemical_reaction/cryoxadone
- name = "Cryoxadone"
- id = /datum/reagent/medicine/cryoxadone
results = list(/datum/reagent/medicine/cryoxadone = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/acetone = 1, /datum/reagent/toxin/mutagen = 1)
/datum/chemical_reaction/pyroxadone
- name = "Pyroxadone"
- id = /datum/reagent/medicine/pyroxadone
results = list(/datum/reagent/medicine/pyroxadone = 2)
required_reagents = list(/datum/reagent/medicine/cryoxadone = 1, /datum/reagent/toxin/slimejelly = 1)
/datum/chemical_reaction/clonexadone
- name = "Clonexadone"
- id = /datum/reagent/medicine/clonexadone
results = list(/datum/reagent/medicine/clonexadone = 2)
required_reagents = list(/datum/reagent/medicine/cryoxadone = 1, /datum/reagent/sodium = 1)
required_catalysts = list(/datum/reagent/toxin/plasma = 5)
/datum/chemical_reaction/haloperidol
- name = "Haloperidol"
- id = /datum/reagent/medicine/haloperidol
results = list(/datum/reagent/medicine/haloperidol = 5)
required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 1, /datum/reagent/aluminium = 1, /datum/reagent/medicine/potass_iodide = 1, /datum/reagent/fuel/oil = 1)
/datum/chemical_reaction/regen_jelly
- name = "Regenerative Jelly"
- id = /datum/reagent/medicine/regen_jelly
results = list(/datum/reagent/medicine/regen_jelly = 2)
required_reagents = list(/datum/reagent/medicine/omnizine = 1, /datum/reagent/toxin/slimejelly = 1)
/datum/chemical_reaction/higadrite
- name = "Higadrite"
- id = /datum/reagent/medicine/higadrite
results = list(/datum/reagent/medicine/higadrite = 3)
required_reagents = list(/datum/reagent/phenol = 2, /datum/reagent/lithium = 1)
/datum/chemical_reaction/morphine
- name = "Morphine"
- id = /datum/reagent/medicine/morphine
results = list(/datum/reagent/medicine/morphine = 2)
required_reagents = list(/datum/reagent/carbon = 2, /datum/reagent/hydrogen = 2, /datum/reagent/consumable/ethanol = 1, /datum/reagent/oxygen = 1)
required_temp = 480
/datum/chemical_reaction/modafinil
- name = "Modafinil"
- id = /datum/reagent/medicine/modafinil
results = list(/datum/reagent/medicine/modafinil = 5)
required_reagents = list(/datum/reagent/diethylamine = 1, /datum/reagent/ammonia = 1, /datum/reagent/phenol = 1, /datum/reagent/acetone = 1, /datum/reagent/toxin/acid = 1)
required_catalysts = list(/datum/reagent/bromine = 1) // as close to the real world synthesis as possible
/datum/chemical_reaction/psicodine
- name = "Psicodine"
- id = /datum/reagent/medicine/psicodine
results = list(/datum/reagent/medicine/psicodine = 5)
required_reagents = list( /datum/reagent/medicine/mannitol = 2, /datum/reagent/water = 2, /datum/reagent/impedrezene = 1)
/datum/chemical_reaction/rhigoxane
- name = "Rhigoxane"
- id = /datum/reagent/medicine/rhigoxane
results = list(/datum/reagent/medicine/rhigoxane/ = 5)
required_reagents = list(/datum/reagent/cryostylane = 3, /datum/reagent/bromine = 1, /datum/reagent/lye = 1)
required_temp = 47
is_cold_recipe = TRUE
/datum/chemical_reaction/trophazole
- name = "Trophazole"
- id = /datum/reagent/medicine/trophazole
results = list(/datum/reagent/medicine/trophazole = 4)
required_reagents = list(/datum/reagent/copper = 1, /datum/reagent/acetone = 2, /datum/reagent/phosphorus = 1)
/datum/chemical_reaction/granibitaluri
- name = "Granibitaluri"
- id = /datum/reagent/medicine/granibitaluri
results = list(/datum/reagent/medicine/granibitaluri = 3)
required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/phenol = 1, /datum/reagent/nitrogen = 1)
required_catalysts = list(/datum/reagent/iron = 5)
/datum/chemical_reaction/medsuture
- name = "Medicated Suture"
- id = "med_suture"
required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/toxin/formaldehyde = 30, /datum/reagent/medicine/polypyr = 30) //This might be a bit much, reagent cost should be reviewed after implementation.
/datum/chemical_reaction/medsuture/on_reaction(datum/reagents/holder, created_volume)
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 63d0b216e0d..cb800c6a62f 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -1,55 +1,37 @@
/datum/chemical_reaction/sterilizine
- name = "Sterilizine"
- id = /datum/reagent/space_cleaner/sterilizine
results = list(/datum/reagent/space_cleaner/sterilizine = 3)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/medicine/C2/multiver = 1, /datum/reagent/chlorine = 1)
/datum/chemical_reaction/lube
- name = "Space Lube"
- id = /datum/reagent/lube
results = list(/datum/reagent/lube = 4)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/silicon = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/spraytan
- name = "Spray Tan"
- id = /datum/reagent/spraytan
results = list(/datum/reagent/spraytan = 2)
required_reagents = list(/datum/reagent/consumable/orangejuice = 1, /datum/reagent/fuel/oil = 1)
/datum/chemical_reaction/spraytan2
- name = "Spray Tan"
- id = /datum/reagent/spraytan
results = list(/datum/reagent/spraytan = 2)
required_reagents = list(/datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cornoil = 1)
/datum/chemical_reaction/impedrezene
- name = "Impedrezene"
- id = /datum/reagent/impedrezene
results = list(/datum/reagent/impedrezene = 2)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/consumable/sugar = 1)
/datum/chemical_reaction/cryptobiolin
- name = "Cryptobiolin"
- id = /datum/reagent/cryptobiolin
results = list(/datum/reagent/cryptobiolin = 3)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/oxygen = 1, /datum/reagent/consumable/sugar = 1)
/datum/chemical_reaction/glycerol
- name = "Glycerol"
- id = /datum/reagent/glycerol
results = list(/datum/reagent/glycerol = 1)
required_reagents = list(/datum/reagent/consumable/cornoil = 3, /datum/reagent/toxin/acid = 1)
/datum/chemical_reaction/sodiumchloride
- name = "Sodium Chloride"
- id = /datum/reagent/consumable/sodiumchloride
results = list(/datum/reagent/consumable/sodiumchloride = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1)
/datum/chemical_reaction/plasmasolidification
- name = "Solid Plasma"
- id = "solidplasma"
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 20)
mob_react = FALSE
@@ -59,8 +41,6 @@
new /obj/item/stack/sheet/mineral/plasma(location)
/datum/chemical_reaction/goldsolidification
- name = "Solid Gold"
- id = "solidgold"
required_reagents = list(/datum/reagent/consumable/frostoil = 5, /datum/reagent/gold = 20, /datum/reagent/iron = 1)
mob_react = FALSE
@@ -70,14 +50,10 @@
new /obj/item/stack/sheet/mineral/gold(location)
/datum/chemical_reaction/capsaicincondensation
- name = "Capsaicincondensation"
- id = "capsaicincondensation"
results = list(/datum/reagent/consumable/condensedcapsaicin = 5)
required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/ethanol = 5)
/datum/chemical_reaction/soapification
- name = "Soapification"
- id = "soapification"
required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/lye = 10) // requires two scooped gib tiles
required_temp = 374
mob_react = FALSE
@@ -88,8 +64,6 @@
new /obj/item/soap/homemade(location)
/datum/chemical_reaction/omegasoapification
- name = "Omega Soap"
- id = "omegasoap"
required_reagents = list(/datum/reagent/consumable/potato_juice = 10, /datum/reagent/consumable/ethanol/lizardwine = 10, /datum/reagent/monkey_powder = 10, /datum/reagent/drug/krokodil = 10, /datum/reagent/toxin/acid/nitracid = 10, /datum/reagent/baldium = 10, /datum/reagent/consumable/ethanol/hooch = 10, /datum/reagent/bluespace = 10, /datum/reagent/drug/pumpup = 10, /datum/reagent/consumable/space_cola = 10)
required_temp = 999
mob_react = FALSE
@@ -100,8 +74,6 @@
new /obj/item/soap/omega(location)
/datum/chemical_reaction/candlefication
- name = "Candlefication"
- id = "candlefication"
required_reagents = list(/datum/reagent/liquidgibs = 5, /datum/reagent/oxygen = 5) //
required_temp = 374
mob_react = FALSE
@@ -112,8 +84,6 @@
new /obj/item/candle(location)
/datum/chemical_reaction/meatification
- name = "Meatification"
- id = "meatification"
required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/consumable/nutriment = 10, /datum/reagent/carbon = 10)
mob_react = FALSE
@@ -124,23 +94,17 @@
return
/datum/chemical_reaction/carbondioxide
- name = "Direct Carbon Oxidation"
- id = "burningcarbon"
results = list(/datum/reagent/carbondioxide = 3)
required_reagents = list(/datum/reagent/carbon = 1, /datum/reagent/oxygen = 2)
required_temp = 777 // pure carbon isn't especially reactive.
/datum/chemical_reaction/nitrous_oxide
- name = "Nitrous Oxide"
- id = /datum/reagent/nitrous_oxide
results = list(/datum/reagent/nitrous_oxide = 5)
required_reagents = list(/datum/reagent/ammonia = 2, /datum/reagent/nitrogen = 1, /datum/reagent/oxygen = 2)
required_temp = 525
//Technically a mutation toxin
/datum/chemical_reaction/mulligan
- name = "Mulligan"
- id = /datum/reagent/mulligan
results = list(/datum/reagent/mulligan = 1)
required_reagents = list(/datum/reagent/mutationtoxin/jelly = 1, /datum/reagent/toxin/mutagen = 1)
@@ -148,74 +112,50 @@
////////////////////////////////// VIROLOGY //////////////////////////////////////////
/datum/chemical_reaction/virus_food
- name = "Virus Food"
- id = /datum/reagent/consumable/virus_food
results = list(/datum/reagent/consumable/virus_food = 15)
required_reagents = list(/datum/reagent/water = 5, /datum/reagent/consumable/milk = 5)
/datum/chemical_reaction/virus_food_mutagen
- name = "mutagenic agar"
- id = /datum/reagent/toxin/mutagen/mutagenvirusfood
results = list(/datum/reagent/toxin/mutagen/mutagenvirusfood = 1)
required_reagents = list(/datum/reagent/toxin/mutagen = 1, /datum/reagent/consumable/virus_food = 1)
/datum/chemical_reaction/virus_food_synaptizine
- name = "virus rations"
- id = /datum/reagent/medicine/synaptizine/synaptizinevirusfood
results = list(/datum/reagent/medicine/synaptizine/synaptizinevirusfood = 1)
required_reagents = list(/datum/reagent/medicine/synaptizine = 1, /datum/reagent/consumable/virus_food = 1)
/datum/chemical_reaction/virus_food_plasma
- name = "virus plasma"
- id = /datum/reagent/toxin/plasma/plasmavirusfood
results = list(/datum/reagent/toxin/plasma/plasmavirusfood = 1)
required_reagents = list(/datum/reagent/toxin/plasma = 1, /datum/reagent/consumable/virus_food = 1)
/datum/chemical_reaction/virus_food_plasma_synaptizine
- name = "weakened virus plasma"
- id = /datum/reagent/toxin/plasma/plasmavirusfood/weak
results = list(/datum/reagent/toxin/plasma/plasmavirusfood/weak = 2)
required_reagents = list(/datum/reagent/medicine/synaptizine = 1, /datum/reagent/toxin/plasma/plasmavirusfood = 1)
/datum/chemical_reaction/virus_food_mutagen_sugar
- name = "sucrose agar"
- id = /datum/reagent/toxin/mutagen/mutagenvirusfood/sugar
results = list(/datum/reagent/toxin/mutagen/mutagenvirusfood/sugar = 2)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/toxin/mutagen/mutagenvirusfood = 1)
/datum/chemical_reaction/virus_food_mutagen_salineglucose
- name = "sucrose agar"
- id = "salineglucosevirusfood"
results = list(/datum/reagent/toxin/mutagen/mutagenvirusfood/sugar = 2)
required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/toxin/mutagen/mutagenvirusfood = 1)
/datum/chemical_reaction/virus_food_uranium
- name = "Decaying uranium gel"
- id = /datum/reagent/uranium/uraniumvirusfood
results = list(/datum/reagent/uranium/uraniumvirusfood = 1)
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/consumable/virus_food = 1)
/datum/chemical_reaction/virus_food_uranium_plasma
- name = "Unstable uranium gel"
- id = "uraniumvirusfood_plasma"
results = list(/datum/reagent/uranium/uraniumvirusfood/unstable = 1)
required_reagents = list(/datum/reagent/uranium = 5, /datum/reagent/toxin/plasma/plasmavirusfood = 1)
/datum/chemical_reaction/virus_food_uranium_plasma_gold
- name = "Stable uranium gel"
- id = "uraniumvirusfood_gold"
results = list(/datum/reagent/uranium/uraniumvirusfood/stable = 1)
required_reagents = list(/datum/reagent/uranium = 10, /datum/reagent/gold = 10, /datum/reagent/toxin/plasma = 1)
/datum/chemical_reaction/virus_food_uranium_plasma_silver
- name = "Stable uranium gel"
- id = "uraniumvirusfood_silver"
results = list(/datum/reagent/uranium/uraniumvirusfood/stable = 1)
required_reagents = list(/datum/reagent/uranium = 10, /datum/reagent/silver = 10, /datum/reagent/toxin/plasma = 1)
/datum/chemical_reaction/mix_virus
- name = "Mix Virus"
- id = "mixvirus"
results = list(/datum/reagent/blood = 1)
required_reagents = list(/datum/reagent/consumable/virus_food = 1)
required_catalysts = list(/datum/reagent/blood = 1)
@@ -223,7 +163,6 @@
var/level_max = 2
/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, 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"]
@@ -232,102 +171,65 @@
/datum/chemical_reaction/mix_virus/mix_virus_2
-
- name = "Mix Virus 2"
- id = "mixvirus2"
required_reagents = list(/datum/reagent/toxin/mutagen = 1)
level_min = 2
level_max = 4
/datum/chemical_reaction/mix_virus/mix_virus_3
-
- name = "Mix Virus 3"
- id = "mixvirus3"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
level_min = 4
level_max = 6
/datum/chemical_reaction/mix_virus/mix_virus_4
-
- name = "Mix Virus 4"
- id = "mixvirus4"
required_reagents = list(/datum/reagent/uranium = 1)
level_min = 5
level_max = 6
/datum/chemical_reaction/mix_virus/mix_virus_5
-
- name = "Mix Virus 5"
- id = "mixvirus5"
required_reagents = list(/datum/reagent/toxin/mutagen/mutagenvirusfood = 1)
level_min = 3
level_max = 3
/datum/chemical_reaction/mix_virus/mix_virus_6
-
- name = "Mix Virus 6"
- id = "mixvirus6"
required_reagents = list(/datum/reagent/toxin/mutagen/mutagenvirusfood/sugar = 1)
level_min = 4
level_max = 4
/datum/chemical_reaction/mix_virus/mix_virus_7
-
- name = "Mix Virus 7"
- id = "mixvirus7"
required_reagents = list(/datum/reagent/toxin/plasma/plasmavirusfood/weak = 1)
level_min = 5
level_max = 5
/datum/chemical_reaction/mix_virus/mix_virus_8
-
- name = "Mix Virus 8"
- id = "mixvirus8"
required_reagents = list(/datum/reagent/toxin/plasma/plasmavirusfood = 1)
level_min = 6
level_max = 6
/datum/chemical_reaction/mix_virus/mix_virus_9
-
- name = "Mix Virus 9"
- id = "mixvirus9"
required_reagents = list(/datum/reagent/medicine/synaptizine/synaptizinevirusfood = 1)
level_min = 1
level_max = 1
/datum/chemical_reaction/mix_virus/mix_virus_10
-
- name = "Mix Virus 10"
- id = "mixvirus10"
required_reagents = list(/datum/reagent/uranium/uraniumvirusfood = 1)
level_min = 6
level_max = 7
/datum/chemical_reaction/mix_virus/mix_virus_11
-
- name = "Mix Virus 11"
- id = "mixvirus11"
required_reagents = list(/datum/reagent/uranium/uraniumvirusfood/unstable = 1)
level_min = 7
level_max = 7
/datum/chemical_reaction/mix_virus/mix_virus_12
-
- name = "Mix Virus 12"
- id = "mixvirus12"
required_reagents = list(/datum/reagent/uranium/uraniumvirusfood/stable = 1)
level_min = 8
level_max = 8
/datum/chemical_reaction/mix_virus/rem_virus
-
- name = "Devolve Virus"
- id = "remvirus"
required_reagents = list(/datum/reagent/medicine/synaptizine = 1)
required_catalysts = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, 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"]
@@ -335,13 +237,10 @@
D.Devolve()
/datum/chemical_reaction/mix_virus/neuter_virus
- name = "Neuter Virus"
- id = "neutervirus"
required_reagents = list(/datum/reagent/toxin/formaldehyde = 1)
required_catalysts = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, 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"]
@@ -354,14 +253,10 @@
/datum/chemical_reaction/surfactant
- name = "Foam surfactant"
- id = "foam surfactant"
results = list(/datum/reagent/fluorosurfactant = 5)
required_reagents = list(/datum/reagent/fluorine = 2, /datum/reagent/carbon = 2, /datum/reagent/toxin/acid = 1)
/datum/chemical_reaction/foam
- name = "Foam"
- id = "foam"
required_reagents = list(/datum/reagent/fluorosurfactant = 1, /datum/reagent/water = 1)
mob_react = FALSE
@@ -369,8 +264,6 @@
holder.create_foam(/datum/effect_system/foam_spread,2*created_volume,notification="The solution spews out foam!")
/datum/chemical_reaction/metalfoam
- name = "Metal Foam"
- id = "metalfoam"
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
@@ -378,8 +271,6 @@
holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,1,"The solution spews out a metallic foam!")
/datum/chemical_reaction/smart_foam
- name = "Smart Metal Foam"
- id = "smart_metal_foam"
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/smart_foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = TRUE
@@ -387,8 +278,6 @@
holder.create_foam(/datum/effect_system/foam_spread/metal/smart,5*created_volume,1,"The solution spews out metallic foam!")
/datum/chemical_reaction/ironfoam
- name = "Iron Foam"
- id = "ironlfoam"
required_reagents = list(/datum/reagent/iron = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
@@ -396,14 +285,10 @@
holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,2,"The solution spews out a metallic foam!")
/datum/chemical_reaction/foaming_agent
- name = "Foaming Agent"
- id = /datum/reagent/foaming_agent
results = list(/datum/reagent/foaming_agent = 1)
required_reagents = list(/datum/reagent/lithium = 1, /datum/reagent/hydrogen = 1)
/datum/chemical_reaction/smart_foaming_agent
- name = "Smart foaming Agent"
- id = /datum/reagent/smart_foaming_agent
results = list(/datum/reagent/smart_foaming_agent = 3)
required_reagents = list(/datum/reagent/foaming_agent = 3, /datum/reagent/acetone = 1, /datum/reagent/iron = 1)
mix_message = "The solution mixes into a frothy metal foam and conforms to the walls of its container."
@@ -412,147 +297,101 @@
/////////////////////////////// Cleaning and hydroponics /////////////////////////////////////////////////
/datum/chemical_reaction/ammonia
- name = "Ammonia"
- id = /datum/reagent/ammonia
results = list(/datum/reagent/ammonia = 3)
required_reagents = list(/datum/reagent/hydrogen = 3, /datum/reagent/nitrogen = 1)
/datum/chemical_reaction/diethylamine
- name = "Diethylamine"
- id = /datum/reagent/diethylamine
results = list(/datum/reagent/diethylamine = 2)
required_reagents = list (/datum/reagent/ammonia = 1, /datum/reagent/consumable/ethanol = 1)
/datum/chemical_reaction/space_cleaner
- name = "Space cleaner"
- id = /datum/reagent/space_cleaner
results = list(/datum/reagent/space_cleaner = 2)
required_reagents = list(/datum/reagent/ammonia = 1, /datum/reagent/water = 1)
/datum/chemical_reaction/plantbgone
- name = "Plant-B-Gone"
- id = /datum/reagent/toxin/plantbgone
results = list(/datum/reagent/toxin/plantbgone = 5)
required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/water = 4)
/datum/chemical_reaction/weedkiller
- name = "Weed Killer"
- id = /datum/reagent/toxin/plantbgone/weedkiller
results = list(/datum/reagent/toxin/plantbgone/weedkiller = 5)
required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/ammonia = 4)
/datum/chemical_reaction/pestkiller
- name = "Pest Killer"
- id = /datum/reagent/toxin/pestkiller
results = list(/datum/reagent/toxin/pestkiller = 5)
required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/consumable/ethanol = 4)
/datum/chemical_reaction/drying_agent
- name = "Drying agent"
- id = /datum/reagent/drying_agent
results = list(/datum/reagent/drying_agent = 3)
required_reagents = list(/datum/reagent/stable_plasma = 2, /datum/reagent/consumable/ethanol = 1, /datum/reagent/sodium = 1)
//////////////////////////////////// Other goon stuff ///////////////////////////////////////////
/datum/chemical_reaction/acetone
- name = /datum/reagent/acetone
- id = /datum/reagent/acetone
results = list(/datum/reagent/acetone = 3)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/fuel = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/carpet
- name = /datum/reagent/carpet
- id = /datum/reagent/carpet
results = list(/datum/reagent/carpet = 2)
required_reagents = list(/datum/reagent/drug/space_drugs = 1, /datum/reagent/blood = 1)
/datum/chemical_reaction/carpet/black
- name = /datum/reagent/carpet/black
- id = /datum/reagent/carpet/black
results = list(/datum/reagent/carpet/black = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/fuel/oil = 1)
/datum/chemical_reaction/carpet/blue
- name = /datum/reagent/carpet/blue
- id = /datum/reagent/carpet/blue
results = list(/datum/reagent/carpet/blue = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/cryostylane = 1)
/datum/chemical_reaction/carpet/cyan
- name = /datum/reagent/carpet/cyan
- id = /datum/reagent/carpet/cyan
results = list(/datum/reagent/carpet/cyan = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/toxin/cyanide = 1)
//cyan = cyanide get it huehueuhuehuehheuhe
/datum/chemical_reaction/carpet/green
- name = /datum/reagent/carpet/green
- id = /datum/reagent/carpet/green
results = list(/datum/reagent/carpet/green = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/ethanol/beer/green = 1)
//make green beer by grinding up green crayons and mixing with beer
/datum/chemical_reaction/carpet/orange
- name = /datum/reagent/carpet/orange
- id = /datum/reagent/carpet/orange
results = list(/datum/reagent/carpet/orange = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/orangejuice = 1)
/datum/chemical_reaction/carpet/purple
- name = /datum/reagent/carpet/purple
- id = /datum/reagent/carpet/purple
results = list(/datum/reagent/carpet/purple = 2)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/medicine/regen_jelly = 1)
//slimes only party
/datum/chemical_reaction/carpet/red
- name = /datum/reagent/carpet/red
- id = /datum/reagent/carpet/red
results = list(/datum/reagent/carpet/red = 2)
required_reagents = list(/datum/reagent/carpet/ = 1, /datum/reagent/liquidgibs = 1)
/datum/chemical_reaction/carpet/royalblack
- name = /datum/reagent/carpet/royal/black
- id = /datum/reagent/carpet/royal/black
results = list(/datum/reagent/carpet/royal/black = 2)
required_reagents = list(/datum/reagent/carpet/black = 1, /datum/reagent/royal_bee_jelly = 1)
/datum/chemical_reaction/carpet/royalblue
- name = /datum/reagent/carpet/royal/blue
- id = /datum/reagent/carpet/royal/blue
results = list(/datum/reagent/carpet/royal/blue = 2)
required_reagents = list(/datum/reagent/carpet/blue = 1, /datum/reagent/royal_bee_jelly = 1)
/datum/chemical_reaction/oil
- name = "Oil"
- id = /datum/reagent/fuel/oil
results = list(/datum/reagent/fuel/oil = 3)
required_reagents = list(/datum/reagent/fuel = 1, /datum/reagent/carbon = 1, /datum/reagent/hydrogen = 1)
/datum/chemical_reaction/phenol
- name = /datum/reagent/phenol
- id = /datum/reagent/phenol
results = list(/datum/reagent/phenol = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/chlorine = 1, /datum/reagent/fuel/oil = 1)
/datum/chemical_reaction/ash
- name = "Ash"
- id = /datum/reagent/ash
results = list(/datum/reagent/ash = 1)
required_reagents = list(/datum/reagent/fuel/oil = 1)
required_temp = 480
/datum/chemical_reaction/colorful_reagent
- name = /datum/reagent/colorful_reagent
- id = /datum/reagent/colorful_reagent
results = list(/datum/reagent/colorful_reagent = 5)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1, /datum/reagent/medicine/cryoxadone = 1, /datum/reagent/consumable/triple_citrus = 1)
/datum/chemical_reaction/life
- name = "Life"
- id = "life"
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/C2/instabitaluri = 1, /datum/reagent/blood = 1)
required_temp = 374
@@ -560,8 +399,6 @@
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (hostile)") //defaults to HOSTILE_SPAWN
/datum/chemical_reaction/life_friendly
- name = "Life (Friendly)"
- id = "life_friendly"
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/C2/instabitaluri = 1, /datum/reagent/consumable/sugar = 1)
required_temp = 374
@@ -569,8 +406,6 @@
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN)
/datum/chemical_reaction/corgium
- name = "corgium"
- id = "corgium"
required_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/blood = 1)
required_temp = 374
@@ -582,14 +417,10 @@
//monkey powder heehoo
/datum/chemical_reaction/monkey_powder
- name = /datum/reagent/monkey_powder
- id = /datum/reagent/monkey_powder
results = list(/datum/reagent/monkey_powder = 3)
required_reagents = list(/datum/reagent/consumable/banana = 1, /datum/reagent/consumable/nutriment=2,/datum/reagent/liquidgibs = 1)
/datum/chemical_reaction/monkey
- name = "monkey"
- id = "monkey"
required_reagents = list(/datum/reagent/monkey_powder = 30, /datum/reagent/water = 1)
/datum/chemical_reaction/monkey/on_reaction(datum/reagents/holder, created_volume)
@@ -597,16 +428,13 @@
new /mob/living/carbon/monkey(location)
//water electrolysis
/datum/chemical_reaction/electrolysis
- name = "electrolysis"
- id = "electrolysis"
results = list(/datum/reagent/oxygen = 10, /datum/reagent/hydrogen = 20)
required_reagents = list(/datum/reagent/consumable/liquidelectricity = 1, /datum/reagent/water = 5)
//butterflium
/datum/chemical_reaction/butterflium
- name = "butterflium"
- id = "butterflium"
required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/omnizine = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/consumable/nutriment = 1)
+
/datum/chemical_reaction/butterflium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = rand(1, created_volume), i <= created_volume, i++)
@@ -614,8 +442,6 @@
..()
//scream powder
/datum/chemical_reaction/scream
- name = "scream"
- id = "scream"
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/ethanol/lizardwine = 5 )
required_temp = 374
@@ -623,63 +449,43 @@
playsound(holder.my_atom, pick(list( 'sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg', 'sound/voice/human/femalescream_1.ogg', 'sound/voice/human/femalescream_2.ogg', 'sound/voice/human/femalescream_3.ogg', 'sound/voice/human/femalescream_4.ogg', 'sound/voice/human/femalescream_5.ogg', 'sound/voice/human/wilhelm_scream.ogg')), created_volume*5,TRUE)
/datum/chemical_reaction/hair_dye
- name = /datum/reagent/hair_dye
- id = /datum/reagent/hair_dye
results = list(/datum/reagent/hair_dye = 5)
required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1)
/datum/chemical_reaction/barbers_aid
- name = /datum/reagent/barbers_aid
- id = /datum/reagent/barbers_aid
results = list(/datum/reagent/barbers_aid = 5)
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1)
/datum/chemical_reaction/concentrated_barbers_aid
- name = /datum/reagent/concentrated_barbers_aid
- id = /datum/reagent/concentrated_barbers_aid
results = list(/datum/reagent/concentrated_barbers_aid = 2)
required_reagents = list(/datum/reagent/barbers_aid = 1, /datum/reagent/toxin/mutagen = 1)
/datum/chemical_reaction/baldium
- name = /datum/reagent/baldium
- id = /datum/reagent/baldium
results = list(/datum/reagent/baldium = 1)
required_reagents = list(/datum/reagent/uranium/radium = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/lye = 1)
required_temp = 395
/datum/chemical_reaction/saltpetre
- name = /datum/reagent/saltpetre
- id = /datum/reagent/saltpetre
results = list(/datum/reagent/saltpetre = 3)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/nitrogen = 1, /datum/reagent/oxygen = 3)
/datum/chemical_reaction/lye
- name = /datum/reagent/lye
- id = /datum/reagent/lye
results = list(/datum/reagent/lye = 3)
required_reagents = list(/datum/reagent/sodium = 1, /datum/reagent/hydrogen = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/lye2
- name = /datum/reagent/lye
- id = /datum/reagent/lye
results = list(/datum/reagent/lye = 2)
required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/water = 1, /datum/reagent/carbon = 1)
/datum/chemical_reaction/royal_bee_jelly
- name = "royal bee jelly"
- id = /datum/reagent/royal_bee_jelly
results = list(/datum/reagent/royal_bee_jelly = 5)
required_reagents = list(/datum/reagent/toxin/mutagen = 10, /datum/reagent/consumable/honey = 40)
/datum/chemical_reaction/laughter
- name = /datum/reagent/consumable/laughter
- id = /datum/reagent/consumable/laughter
results = list(/datum/reagent/consumable/laughter = 10) // Fuck it. I'm not touching this one.
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/banana = 1)
/datum/chemical_reaction/plastic_polymers
- name = "plastic polymers"
- id = /datum/reagent/plastic_polymers
required_reagents = list(/datum/reagent/fuel/oil = 5, /datum/reagent/toxin/acid = 2, /datum/reagent/ash = 3)
required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat.
@@ -689,30 +495,22 @@
new /obj/item/stack/sheet/plastic(location)
/datum/chemical_reaction/pax
- name = /datum/reagent/pax
- id = /datum/reagent/pax
results = list(/datum/reagent/pax = 3)
required_reagents = list(/datum/reagent/toxin/mindbreaker = 1, /datum/reagent/medicine/synaptizine = 1, /datum/reagent/water = 1)
/datum/chemical_reaction/yuck
- name = "Organic Fluid"
- id = /datum/reagent/yuck
results = list(/datum/reagent/yuck = 4)
required_reagents = list(/datum/reagent/fuel = 3)
required_container = /obj/item/reagent_containers/food/snacks/deadmouse
/datum/chemical_reaction/slimejelly
- name = "artificial slime jelly"
- id = /datum/reagent/toxin/slimejelly
results = list(/datum/reagent/toxin/slimejelly = 5)
required_reagents = list(/datum/reagent/fuel/oil = 3, /datum/reagent/uranium/radium = 2, /datum/reagent/consumable/tinlux =1)
required_container = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom
mix_message = "The mushroom's insides bubble and pop and it becomes very limp."
/datum/chemical_reaction/slime_extractification
- name = "slime extractification"
- id = "slime extractification"
required_reagents = list(/datum/reagent/toxin/slimejelly = 30, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 5)
mix_message = "The mixture condenses into a ball."
@@ -721,14 +519,10 @@
new /obj/item/slime_extract/grey(location)
/datum/chemical_reaction/metalgen
- name = "metalgen"
- id = /datum/reagent/metalgen
required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/bluespace = 1, /datum/reagent/toxin/mutagen = 1)
results = list(/datum/reagent/metalgen = 1)
/datum/chemical_reaction/metalgen_imprint
- name = "metalgen imprint"
- id = /datum/reagent/metalgen
required_reagents = list(/datum/reagent/metalgen = 1, /datum/reagent/liquid_dark_matter = 1)
results = list(/datum/reagent/metalgen = 1)
@@ -740,46 +534,32 @@
holder.remove_reagent(R.type, 40)
/datum/chemical_reaction/gravitum
- name = "gravitum"
- id = /datum/reagent/gravitum
required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/sorium = 10)
results = list(/datum/reagent/gravitum = 10)
/datum/chemical_reaction/cellulose_carbonization
- name = "Cellulose_Carbonization"
- id = /datum/reagent/carbon
results = list(/datum/reagent/carbon = 1)
required_reagents = list(/datum/reagent/cellulose = 1)
required_temp = 512
/datum/chemical_reaction/hydrogen_peroxide
- name = "Hydrogen peroxide"
- id = /datum/reagent/hydrogen_peroxide
results = list(/datum/reagent/hydrogen_peroxide = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/oxygen = 1, /datum/reagent/chlorine = 1)
/datum/chemical_reaction/acetone_oxide
- name = "Acetone peroxide"
- id = /datum/reagent/acetone_oxide
results = list(/datum/reagent/acetone_oxide = 2)
required_reagents = list(/datum/reagent/acetone = 2, /datum/reagent/oxygen = 1, /datum/reagent/hydrogen_peroxide = 1)
/datum/chemical_reaction/pentaerythritol
- name = "Pentaerythritol"
- id = /datum/reagent/pentaerythritol
results = list(/datum/reagent/pentaerythritol = 2)
required_reagents = list(/datum/reagent/acetaldehyde = 1, /datum/reagent/toxin/formaldehyde = 3, /datum/reagent/water = 1 )
/datum/chemical_reaction/acetaldehyde
- name = "Acetaldehyde"
- id = /datum/reagent/acetaldehyde
results = list(/datum/reagent/acetaldehyde = 3)
required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/toxin/formaldehyde = 1, /datum/reagent/water = 1)
required_temp = 450
/datum/chemical_reaction/holywater
- name = "Holy Water"
- id = /datum/reagent/water/holywater
results = list(/datum/reagent/water/holywater = 1)
required_reagents = list(/datum/reagent/water/hollowwater = 1)
required_catalysts = list(/datum/reagent/water/holywater = 1)
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 121ab55ee48..a69dbc86866 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -1,6 +1,4 @@
/datum/chemical_reaction/reagent_explosion
- name = "Generic explosive"
- id = "reagent_explosion"
var/strengthdiv = 10
var/modifier = 0
@@ -27,8 +25,6 @@
/datum/chemical_reaction/reagent_explosion/nitroglycerin
- name = "Nitroglycerin"
- id = /datum/reagent/nitroglycerin
results = list(/datum/reagent/nitroglycerin = 2)
required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/toxin/acid = 1)
strengthdiv = 2
@@ -40,15 +36,11 @@
..()
/datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion
- name = "Nitroglycerin explosion"
- id = "nitroglycerin_explosion"
required_reagents = list(/datum/reagent/nitroglycerin = 1)
required_temp = 474
strengthdiv = 2
/datum/chemical_reaction/reagent_explosion/rdx
- name = "RDX"
- id = /datum/reagent/rdx
results = list(/datum/reagent/rdx= 2)
required_reagents = list(/datum/reagent/phenol = 2, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/acetone_oxide = 1 )
required_temp = 404
@@ -61,15 +53,11 @@
..()
/datum/chemical_reaction/reagent_explosion/rdx_explosion
- name = "Heat RDX explosion"
- id = "rdx_explosion"
required_reagents = list(/datum/reagent/rdx = 1)
required_temp = 474
strengthdiv = 8
/datum/chemical_reaction/reagent_explosion/rdx_explosion2 //makes rdx unique , on its own it is a good bomb, but when combined with liquid electricity it becomes truly destructive
- name = "Electric RDX explosion"
- id = "rdx_explosion2"
required_reagents = list(/datum/reagent/rdx = 1 , /datum/reagent/consumable/liquidelectricity = 1)
strengthdiv = 4
modifier = 2
@@ -83,8 +71,6 @@
..()
/datum/chemical_reaction/reagent_explosion/rdx_explosion3
- name = "Teslium RDX explosion"
- id = "rdx_explosion3"
required_reagents = list(/datum/reagent/rdx = 1 , /datum/reagent/teslium = 1)
modifier = 4
strengthdiv = 4
@@ -98,8 +84,6 @@
..()
/datum/chemical_reaction/reagent_explosion/tatp
- name = "TaTP"
- id = /datum/reagent/tatp
results = list(/datum/reagent/tatp= 1)
required_reagents = list(/datum/reagent/acetone_oxide = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/pentaerythritol = 1 )
required_temp = 450
@@ -119,8 +103,6 @@
..()
/datum/chemical_reaction/reagent_explosion/tatp_explosion
- name = "TaTP explosion"
- id = "tatp_explosion"
required_reagents = list(/datum/reagent/tatp = 1)
required_temp = 550 // this makes making tatp before pyro nades, and extreme pain in the ass to make
strengthdiv = 3
@@ -134,21 +116,15 @@
/datum/chemical_reaction/reagent_explosion/penthrite_explosion
- name = "Penthrite explosion"
- id = "penthrite_explosion"
required_reagents = list(/datum/reagent/medicine/C2/penthrite = 1, /datum/reagent/phenol = 1, /datum/reagent/acetone_oxide = 1)
required_temp = 315
strengthdiv = 5
/datum/chemical_reaction/reagent_explosion/potassium_explosion
- name = "Explosion"
- id = "potassium_explosion"
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/potassium = 1)
strengthdiv = 20
/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom
- name = "Holy Explosion"
- id = "holyboom"
required_reagents = list(/datum/reagent/water/holywater = 1, /datum/reagent/potassium = 1)
/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/on_reaction(datum/reagents/holder, created_volume)
@@ -176,14 +152,10 @@
/datum/chemical_reaction/gunpowder
- name = "Gunpowder"
- id = /datum/reagent/gunpowder
results = list(/datum/reagent/gunpowder = 3)
required_reagents = list(/datum/reagent/saltpetre = 1, /datum/reagent/medicine/C2/multiver = 1, /datum/reagent/sulfur = 1)
/datum/chemical_reaction/reagent_explosion/gunpowder_explosion
- name = "Gunpowder Kaboom"
- id = "gunpowder_explosion"
required_reagents = list(/datum/reagent/gunpowder = 1)
required_temp = 474
strengthdiv = 6
@@ -195,14 +167,10 @@
..()
/datum/chemical_reaction/thermite
- name = "Thermite"
- id = /datum/reagent/thermite
results = list(/datum/reagent/thermite = 3)
required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/iron = 1, /datum/reagent/oxygen = 1)
/datum/chemical_reaction/emp_pulse
- name = "EMP Pulse"
- id = "emp_pulse"
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume)
@@ -214,8 +182,6 @@
/datum/chemical_reaction/beesplosion
- name = "Bee Explosion"
- id = "beesplosion"
required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/uranium/radium = 1)
/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, created_volume)
@@ -237,14 +203,10 @@
/datum/chemical_reaction/stabilizing_agent
- name = /datum/reagent/stabilizing_agent
- id = /datum/reagent/stabilizing_agent
results = list(/datum/reagent/stabilizing_agent = 3)
required_reagents = list(/datum/reagent/iron = 1, /datum/reagent/oxygen = 1, /datum/reagent/hydrogen = 1)
/datum/chemical_reaction/clf3
- name = "Chlorine Trifluoride"
- id = /datum/reagent/clf3
results = list(/datum/reagent/clf3 = 4)
required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 3)
required_temp = 424
@@ -256,8 +218,6 @@
holder.chem_temp = 1000 // hot as shit
/datum/chemical_reaction/reagent_explosion/methsplosion
- name = "Meth explosion"
- id = "methboom1"
required_temp = 380 //slightly above the meth mix time.
required_reagents = list(/datum/reagent/drug/methamphetamine = 1)
strengthdiv = 6
@@ -272,13 +232,10 @@
..()
/datum/chemical_reaction/reagent_explosion/methsplosion/methboom2
- id = "methboom2"
required_reagents = list(/datum/reagent/diethylamine = 1, /datum/reagent/iodine = 1, /datum/reagent/phosphorus = 1, /datum/reagent/hydrogen = 1) //diethylamine is often left over from mixing the ephedrine.
required_temp = 300 //room temperature, chilling it even a little will prevent the explosion
/datum/chemical_reaction/sorium
- name = "Sorium"
- id = /datum/reagent/sorium
results = list(/datum/reagent/sorium = 4)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1, /datum/reagent/carbon = 1)
@@ -291,8 +248,6 @@
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/sorium_vortex
- name = "sorium_vortex"
- id = "sorium_vortex"
required_reagents = list(/datum/reagent/sorium = 1)
required_temp = 474
@@ -302,8 +257,6 @@
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/liquid_dark_matter
- name = "Liquid Dark Matter"
- id = /datum/reagent/liquid_dark_matter
results = list(/datum/reagent/liquid_dark_matter = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/carbon = 1)
@@ -316,8 +269,6 @@
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/ldm_vortex
- name = "LDM Vortex"
- id = "ldm_vortex"
required_reagents = list(/datum/reagent/liquid_dark_matter = 1)
required_temp = 474
@@ -327,8 +278,6 @@
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/flash_powder
- name = "Flash powder"
- id = /datum/reagent/flash_powder
results = list(/datum/reagent/flash_powder = 3)
required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1 )
@@ -350,8 +299,6 @@
holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3)
/datum/chemical_reaction/flash_powder_flash
- name = "Flash powder activation"
- id = "flash_powder_flash"
required_reagents = list(/datum/reagent/flash_powder = 1)
required_temp = 374
@@ -370,8 +317,6 @@
C.Stun(100)
/datum/chemical_reaction/smoke_powder
- name = /datum/reagent/smoke_powder
- id = /datum/reagent/smoke_powder
results = list(/datum/reagent/smoke_powder = 3)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/phosphorus = 1)
@@ -391,8 +336,6 @@
holder.clear_reagents()
/datum/chemical_reaction/smoke_powder_smoke
- name = "smoke_powder_smoke"
- id = "smoke_powder_smoke"
required_reagents = list(/datum/reagent/smoke_powder = 1)
required_temp = 374
mob_react = FALSE
@@ -410,8 +353,6 @@
holder.clear_reagents()
/datum/chemical_reaction/sonic_powder
- name = /datum/reagent/sonic_powder
- id = /datum/reagent/sonic_powder
results = list(/datum/reagent/sonic_powder = 3)
required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/consumable/space_cola = 1, /datum/reagent/phosphorus = 1)
@@ -425,8 +366,6 @@
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/sonic_powder_deafen
- name = "sonic_powder_deafen"
- id = "sonic_powder_deafen"
required_reagents = list(/datum/reagent/sonic_powder = 1)
required_temp = 374
@@ -437,8 +376,6 @@
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/phlogiston
- name = /datum/reagent/phlogiston
- id = /datum/reagent/phlogiston
results = list(/datum/reagent/phlogiston = 3)
required_reagents = list(/datum/reagent/phosphorus = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/stable_plasma = 1)
@@ -452,14 +389,10 @@
return
/datum/chemical_reaction/napalm
- name = "Napalm"
- id = /datum/reagent/napalm
results = list(/datum/reagent/napalm = 3)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol = 1 )
/datum/chemical_reaction/cryostylane
- name = /datum/reagent/cryostylane
- id = /datum/reagent/cryostylane
results = list(/datum/reagent/cryostylane = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/nitrogen = 1)
@@ -468,8 +401,6 @@
return
/datum/chemical_reaction/cryostylane_oxygen
- name = "ephemeral cryostylane reaction"
- id = "cryostylane_oxygen"
results = list(/datum/reagent/cryostylane = 1)
required_reagents = list(/datum/reagent/cryostylane = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
@@ -478,8 +409,6 @@
holder.chem_temp = max(holder.chem_temp - 10*created_volume,0)
/datum/chemical_reaction/pyrosium_oxygen
- name = "ephemeral pyrosium reaction"
- id = "pyrosium_oxygen"
results = list(/datum/reagent/pyrosium = 1)
required_reagents = list(/datum/reagent/pyrosium = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
@@ -488,8 +417,6 @@
holder.chem_temp += 10*created_volume
/datum/chemical_reaction/pyrosium
- name = /datum/reagent/pyrosium
- id = /datum/reagent/pyrosium
results = list(/datum/reagent/pyrosium = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/phosphorus = 1)
@@ -498,23 +425,17 @@
return
/datum/chemical_reaction/teslium
- name = "Teslium"
- id = /datum/reagent/teslium
results = list(/datum/reagent/teslium = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/silver = 1, /datum/reagent/gunpowder = 1)
mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry."
required_temp = 400
/datum/chemical_reaction/energized_jelly
- name = "Energized Jelly"
- id = /datum/reagent/teslium/energized_jelly
results = list(/datum/reagent/teslium/energized_jelly = 2)
required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/teslium = 1)
mix_message = "The slime jelly starts glowing intermittently."
/datum/chemical_reaction/reagent_explosion/teslium_lightning
- name = "Teslium Destabilization"
- id = "teslium_lightning"
required_reagents = list(/datum/reagent/teslium = 1, /datum/reagent/water = 1)
strengthdiv = 100
modifier = -100
@@ -541,21 +462,16 @@
..()
/datum/chemical_reaction/reagent_explosion/teslium_lightning/heat
- id = "teslium_lightning2"
required_temp = 474
required_reagents = list(/datum/reagent/teslium = 1)
/datum/chemical_reaction/reagent_explosion/nitrous_oxide
- name = "N2O explosion"
- id = "n2o_explosion"
required_reagents = list(/datum/reagent/nitrous_oxide = 1)
strengthdiv = 7
required_temp = 575
modifier = 1
/datum/chemical_reaction/firefighting_foam
- name = "Firefighting Foam"
- id = /datum/reagent/firefighting_foam
results = list(/datum/reagent/firefighting_foam = 3)
required_reagents = list(/datum/reagent/stabilizing_agent = 1,/datum/reagent/fluorosurfactant = 1,/datum/reagent/carbon = 1)
required_temp = 200
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 153130b5ea5..afe035e42d4 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -14,8 +14,6 @@
//Grey
/datum/chemical_reaction/slime/slimespawn
- name = "Slime Spawn"
- id = "m_spawn"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/grey
required_other = TRUE
@@ -26,16 +24,12 @@
..()
/datum/chemical_reaction/slime/slimeinaprov
- name = "Slime epinephrine"
- id = "m_inaprov"
results = list(/datum/reagent/medicine/epinephrine = 3)
required_reagents = list(/datum/reagent/water = 5)
required_other = TRUE
required_container = /obj/item/slime_extract/grey
/datum/chemical_reaction/slime/slimemonkey
- name = "Slime Monkey"
- id = "m_monkey"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/grey
required_other = TRUE
@@ -47,24 +41,18 @@
//Green
/datum/chemical_reaction/slime/slimemutate
- name = "Mutation Toxin"
- id = "slimetoxin"
results = list(/datum/reagent/mutationtoxin/jelly = 1)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
/datum/chemical_reaction/slime/slimehuman
- name = "Human Mutation Toxin"
- id = "humanmuttoxin"
results = list(/datum/reagent/mutationtoxin = 1)
required_reagents = list(/datum/reagent/blood = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
/datum/chemical_reaction/slime/slimelizard
- name = "Lizard Mutation Toxin"
- id = "lizardmuttoxin"
results = list(/datum/reagent/mutationtoxin/lizard = 1)
required_reagents = list(/datum/reagent/uranium/radium = 1)
required_other = TRUE
@@ -72,8 +60,6 @@
//Metal
/datum/chemical_reaction/slime/slimemetal
- name = "Slime Metal"
- id = "m_metal"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/metal
required_other = TRUE
@@ -85,8 +71,6 @@
..()
/datum/chemical_reaction/slime/slimeglass
- name = "Slime Glass"
- id = "m_glass"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/metal
required_other = TRUE
@@ -99,8 +83,6 @@
//Gold
/datum/chemical_reaction/slime/slimemobspawn
- name = "Slime Crit"
- id = "m_tele"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/gold
required_other = TRUE
@@ -119,8 +101,6 @@
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 5, "Gold Slime", HOSTILE_SPAWN), 50)
/datum/chemical_reaction/slime/slimemobspawn/lesser
- name = "Slime Crit Lesser"
- id = "m_tele3"
required_reagents = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/slime/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T)
@@ -128,8 +108,6 @@
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 3, "Lesser Gold Slime", HOSTILE_SPAWN, "neutral"), 50)
/datum/chemical_reaction/slime/slimemobspawn/friendly
- name = "Slime Crit Friendly"
- id = "m_tele5"
required_reagents = list(/datum/reagent/water = 1)
/datum/chemical_reaction/slime/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T)
@@ -137,8 +115,6 @@
addtimer(CALLBACK(src, .proc/chemical_mob_spawn, holder, 1, "Friendly Gold Slime", FRIENDLY_SPAWN, "neutral"), 50)
/datum/chemical_reaction/slime/slimemobspawn/spider
- name = "Slime Crit Traitor Spider"
- id = "m_tele6"
required_reagents = list(/datum/reagent/spider_extract = 1)
/datum/chemical_reaction/slime/slimemobspawn/spider/summon_mobs(datum/reagents/holder, turf/T)
@@ -148,8 +124,6 @@
//Silver
/datum/chemical_reaction/slime/slimebork
- name = "Slime Bork"
- id = "m_tele2"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/silver
required_other = TRUE
@@ -180,8 +154,6 @@
return get_random_food()
/datum/chemical_reaction/slime/slimebork/drinks
- name = "Slime Bork 2"
- id = "m_tele4"
required_reagents = list(/datum/reagent/water = 1)
/datum/chemical_reaction/slime/slimebork/drinks/getbork()
@@ -189,16 +161,12 @@
//Blue
/datum/chemical_reaction/slime/slimefrost
- name = "Slime Frost Oil"
- id = "m_frostoil"
results = list(/datum/reagent/consumable/frostoil = 10)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
/datum/chemical_reaction/slime/slimestabilizer
- name = "Slime Stabilizer"
- id = "m_slimestabilizer"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
@@ -208,8 +176,6 @@
..()
/datum/chemical_reaction/slime/slimefoam
- name = "Slime Foam"
- id = "m_foam"
required_reagents = list(/datum/reagent/water = 5)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
@@ -219,8 +185,6 @@
//Dark Blue
/datum/chemical_reaction/slime/slimefreeze
- name = "Slime Freeze"
- id = "m_freeze"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/darkblue
required_other = TRUE
@@ -243,8 +207,6 @@
T.atmos_spawn_air("[initial(gastype.id)]=50;TEMP=2.7")
/datum/chemical_reaction/slime/slimefireproof
- name = "Slime Fireproof"
- id = "m_fireproof"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/darkblue
required_other = TRUE
@@ -255,16 +217,12 @@
//Orange
/datum/chemical_reaction/slime/slimecasp
- name = "Slime Capsaicin Oil"
- id = "m_capsaicinoil"
results = list(/datum/reagent/consumable/capsaicin = 10)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/orange
required_other = TRUE
/datum/chemical_reaction/slime/slimefire
- name = "Slime fire"
- id = "m_fire"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/orange
required_other = TRUE
@@ -287,8 +245,6 @@
/datum/chemical_reaction/slime/slimesmoke
- name = "Slime Smoke"
- id = "m_smoke"
results = list(/datum/reagent/phosphorus = 10, /datum/reagent/potassium = 10, /datum/reagent/consumable/sugar = 10)
required_reagents = list(/datum/reagent/water = 5)
required_container = /obj/item/slime_extract/orange
@@ -296,8 +252,6 @@
//Yellow
/datum/chemical_reaction/slime/slimeoverload
- name = "Slime EMP"
- id = "m_emp"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
@@ -307,8 +261,6 @@
..()
/datum/chemical_reaction/slime/slimecell
- name = "Slime Powercell"
- id = "m_cell"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
@@ -318,8 +270,6 @@
..()
/datum/chemical_reaction/slime/slimeglow
- name = "Slime Glow"
- id = "m_glow"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
@@ -332,8 +282,6 @@
//Purple
/datum/chemical_reaction/slime/slimepsteroid
- name = "Slime Steroid"
- id = "m_steroid"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/purple
required_other = TRUE
@@ -343,8 +291,6 @@
..()
/datum/chemical_reaction/slime/slimeregen
- name = "Slime Regen"
- id = "m_regen"
results = list(/datum/reagent/medicine/regen_jelly = 5)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/purple
@@ -352,8 +298,6 @@
//Dark Purple
/datum/chemical_reaction/slime/slimeplasma
- name = "Slime Plasma"
- id = "m_plasma"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/darkpurple
required_other = TRUE
@@ -364,8 +308,6 @@
//Red
/datum/chemical_reaction/slime/slimemutator
- name = "Slime Mutator"
- id = "m_slimemutator"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
@@ -375,8 +317,6 @@
..()
/datum/chemical_reaction/slime/slimebloodlust
- name = "Bloodlust"
- id = "m_bloodlust"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
@@ -393,8 +333,6 @@
..()
/datum/chemical_reaction/slime/slimespeed
- name = "Slime Speed"
- id = "m_speed"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
@@ -405,8 +343,6 @@
//Pink
/datum/chemical_reaction/slime/docility
- name = "Docility Potion"
- id = "m_potion"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/pink
required_other = TRUE
@@ -416,8 +352,6 @@
..()
/datum/chemical_reaction/slime/gender
- name = "Gender Potion"
- id = "m_gender"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/pink
required_other = TRUE
@@ -428,8 +362,6 @@
//Black
/datum/chemical_reaction/slime/slimemutate2
- name = "Advanced Mutation Toxin"
- id = "mutationtoxin2"
results = list(/datum/reagent/aslimetoxin = 1)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
@@ -437,8 +369,6 @@
//Oil
/datum/chemical_reaction/slime/slimeexplosion
- name = "Slime Explosion"
- id = "m_explosion"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/oil
required_other = TRUE
@@ -466,8 +396,6 @@
/datum/chemical_reaction/slime/slimecornoil
- name = "Slime Corn Oil"
- id = "m_cornoil"
results = list(/datum/reagent/consumable/cornoil = 10)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/oil
@@ -475,8 +403,6 @@
//Light Pink
/datum/chemical_reaction/slime/slimepotion2
- name = "Slime Potion 2"
- id = "m_potion2"
required_container = /obj/item/slime_extract/lightpink
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
@@ -486,8 +412,6 @@
..()
/datum/chemical_reaction/slime/renaming
- name = "Renaming Potion"
- id = "m_renaming_potion"
required_container = /obj/item/slime_extract/lightpink
required_reagents = list(/datum/reagent/water = 1)
required_other = TRUE
@@ -499,8 +423,6 @@
//Adamantine
/datum/chemical_reaction/slime/adamantine
- name = "Adamantine"
- id = "adamantine"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/adamantine
required_other = TRUE
@@ -511,8 +433,6 @@
//Bluespace
/datum/chemical_reaction/slime/slimefloor2
- name = "Bluespace Floor"
- id = "m_floor2"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
@@ -523,8 +443,6 @@
/datum/chemical_reaction/slime/slimecrystal
- name = "Slime Crystal"
- id = "m_crystal"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
@@ -535,8 +453,6 @@
..()
/datum/chemical_reaction/slime/slimeradio
- name = "Slime Radio"
- id = "m_radio"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
@@ -547,8 +463,6 @@
//Cerulean
/datum/chemical_reaction/slime/slimepsteroid2
- name = "Slime Steroid 2"
- id = "m_steroid2"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/cerulean
required_other = TRUE
@@ -558,8 +472,6 @@
..()
/datum/chemical_reaction/slime/slime_territory
- name = "Slime Territory"
- id = "s_territory"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/cerulean
required_other = TRUE
@@ -570,8 +482,6 @@
//Sepia
/datum/chemical_reaction/slime/slimestop
- name = "Slime Stop"
- id = "m_stop"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
@@ -590,8 +500,6 @@
..()
/datum/chemical_reaction/slime/slimecamera
- name = "Slime Camera"
- id = "m_camera"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
@@ -602,8 +510,6 @@
..()
/datum/chemical_reaction/slime/slimefloor
- name = "Sepia Floor"
- id = "m_floor"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
@@ -614,8 +520,6 @@
//Pyrite
/datum/chemical_reaction/slime/slimepaint
- name = "Slime Paint"
- id = "s_paint"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/pyrite
required_other = TRUE
@@ -626,8 +530,6 @@
..()
/datum/chemical_reaction/slime/slimecrayon
- name = "Slime Crayon"
- id = "s_crayon"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/pyrite
required_other = TRUE
@@ -639,8 +541,6 @@
//Rainbow :o)
/datum/chemical_reaction/slime/slimeRNG
- name = "Random Core"
- id = "slimerng"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
@@ -658,8 +558,6 @@
..()
/datum/chemical_reaction/slime/slimebomb
- name = "Clusterblorble"
- id = "slimebomb"
required_reagents = list(/datum/reagent/toxin/slimejelly = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
@@ -681,8 +579,6 @@
..()
/datum/chemical_reaction/slime/slime_transfer
- name = "Transfer Potion"
- id = "slimetransfer"
required_reagents = list(/datum/reagent/blood = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
@@ -692,8 +588,6 @@
..()
/datum/chemical_reaction/slime/flight_potion
- name = "Flight Potion"
- id = /datum/reagent/flightpotion
required_reagents = list(/datum/reagent/water/holywater = 5, /datum/reagent/uranium = 5)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm
index 891d75962d4..2549257946e 100644
--- a/code/modules/reagents/chemistry/recipes/special.dm
+++ b/code/modules/reagents/chemistry/recipes/special.dm
@@ -24,7 +24,6 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
#define RNGCHEM_OUTPUT "output"
/datum/chemical_reaction/randomized
- name = "semi randomized reaction"
var/persistent = FALSE
var/persistence_period = 7 //Will reset every x days
@@ -147,8 +146,6 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
return TRUE
/datum/chemical_reaction/randomized/secret_sauce
- name = "secret sauce creation"
- id = "secretsauce"
persistent = TRUE
persistence_period = 7 //Reset every week
randomize_container = TRUE
diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm
index 2e64c5b4166..2f42ed6f4c0 100644
--- a/code/modules/reagents/chemistry/recipes/toxins.dm
+++ b/code/modules/reagents/chemistry/recipes/toxins.dm
@@ -1,128 +1,88 @@
/datum/chemical_reaction/formaldehyde
- name = /datum/reagent/toxin/formaldehyde
- id = "Formaldehyde"
results = list(/datum/reagent/toxin/formaldehyde = 3)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/oxygen = 1, /datum/reagent/silver = 1)
required_temp = 420
/datum/chemical_reaction/fentanyl
- name = /datum/reagent/toxin/fentanyl
- id = /datum/reagent/toxin/fentanyl
results = list(/datum/reagent/toxin/fentanyl = 1)
required_reagents = list(/datum/reagent/drug/space_drugs = 1)
required_temp = 674
/datum/chemical_reaction/cyanide
- name = "Cyanide"
- id = /datum/reagent/toxin/cyanide
results = list(/datum/reagent/toxin/cyanide = 3)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/ammonia = 1, /datum/reagent/oxygen = 1)
required_temp = 380
/datum/chemical_reaction/itching_powder
- name = "Itching Powder"
- id = /datum/reagent/toxin/itching_powder
results = list(/datum/reagent/toxin/itching_powder = 3)
required_reagents = list(/datum/reagent/fuel = 1, /datum/reagent/ammonia = 1, /datum/reagent/medicine/C2/multiver = 1)
/datum/chemical_reaction/facid
- name = "Fluorosulfuric acid"
- id = /datum/reagent/toxin/acid/fluacid
results = list(/datum/reagent/toxin/acid/fluacid = 4)
required_reagents = list(/datum/reagent/toxin/acid = 1, /datum/reagent/fluorine = 1, /datum/reagent/hydrogen = 1, /datum/reagent/potassium = 1)
required_temp = 380
/datum/chemical_reaction/nitracid
- name = "Nitric Acid"
- id = /datum/reagent/toxin/acid/nitracid
results = list(/datum/reagent/toxin/acid/nitracid = 2)
required_reagents = list(/datum/reagent/toxin/acid/fluacid = 1, /datum/reagent/nitrogen = 1, /datum/reagent/oxygen = 1)
required_temp = 380
/datum/chemical_reaction/sulfonal
- name = /datum/reagent/toxin/sulfonal
- id = /datum/reagent/toxin/sulfonal
results = list(/datum/reagent/toxin/sulfonal = 3)
required_reagents = list(/datum/reagent/acetone = 1, /datum/reagent/diethylamine = 1, /datum/reagent/sulfur = 1)
/datum/chemical_reaction/lipolicide
- name = /datum/reagent/toxin/lipolicide
- id = /datum/reagent/toxin/lipolicide
results = list(/datum/reagent/toxin/lipolicide = 3)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/diethylamine = 1, /datum/reagent/medicine/ephedrine = 1)
/datum/chemical_reaction/mutagen
- name = "Unstable mutagen"
- id = /datum/reagent/toxin/mutagen
results = list(/datum/reagent/toxin/mutagen = 3)
required_reagents = list(/datum/reagent/uranium/radium = 1, /datum/reagent/phosphorus = 1, /datum/reagent/chlorine = 1)
/datum/chemical_reaction/lexorin
- name = "Lexorin"
- id = /datum/reagent/toxin/lexorin
results = list(/datum/reagent/toxin/lexorin = 3)
required_reagents = list(/datum/reagent/toxin/plasma = 1, /datum/reagent/hydrogen = 1, /datum/reagent/medicine/salbutamol = 1)
/datum/chemical_reaction/chloralhydrate
- name = "Chloral Hydrate"
- id = /datum/reagent/toxin/chloralhydrate
results = list(/datum/reagent/toxin/chloralhydrate = 1)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/chlorine = 3, /datum/reagent/water = 1)
/datum/chemical_reaction/mutetoxin //i'll just fit this in here snugly between other unfun chemicals :v
- name = "Mute Toxin"
- id = /datum/reagent/toxin/mutetoxin
results = list(/datum/reagent/toxin/mutetoxin = 2)
required_reagents = list(/datum/reagent/uranium = 2, /datum/reagent/water = 1, /datum/reagent/carbon = 1)
/datum/chemical_reaction/zombiepowder
- name = "Zombie Powder"
- id = /datum/reagent/toxin/zombiepowder
results = list(/datum/reagent/toxin/zombiepowder = 2)
required_reagents = list(/datum/reagent/toxin/carpotoxin = 5, /datum/reagent/medicine/morphine = 5, /datum/reagent/copper = 5)
/datum/chemical_reaction/ghoulpowder
- name = "Ghoul Powder"
- id = /datum/reagent/toxin/ghoulpowder
results = list(/datum/reagent/toxin/ghoulpowder = 2)
required_reagents = list(/datum/reagent/toxin/zombiepowder = 1, /datum/reagent/medicine/epinephrine = 1)
/datum/chemical_reaction/mindbreaker
- name = "Mindbreaker Toxin"
- id = /datum/reagent/toxin/mindbreaker
results = list(/datum/reagent/toxin/mindbreaker = 5)
required_reagents = list(/datum/reagent/silicon = 1, /datum/reagent/hydrogen = 1, /datum/reagent/medicine/C2/multiver = 1)
/datum/chemical_reaction/heparin
- name = "Heparin"
- id = "Heparin"
results = list(/datum/reagent/toxin/heparin = 4)
required_reagents = list(/datum/reagent/toxin/formaldehyde = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1, /datum/reagent/lithium = 1)
mix_message = "The mixture thins and loses all color."
/datum/chemical_reaction/rotatium
- name = "Rotatium"
- id = "Rotatium"
results = list(/datum/reagent/toxin/rotatium = 3)
required_reagents = list(/datum/reagent/toxin/mindbreaker = 1, /datum/reagent/teslium = 1, /datum/reagent/toxin/fentanyl = 1)
mix_message = "After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight."
/datum/chemical_reaction/anacea
- name = "Anacea"
- id = /datum/reagent/toxin/anacea
results = list(/datum/reagent/toxin/anacea = 3)
required_reagents = list(/datum/reagent/medicine/haloperidol = 1, /datum/reagent/impedrezene = 1, /datum/reagent/uranium/radium = 1)
/datum/chemical_reaction/mimesbane
- name = "Mime's Bane"
- id = /datum/reagent/toxin/mimesbane
results = list(/datum/reagent/toxin/mimesbane = 3)
required_reagents = list(/datum/reagent/uranium/radium = 1, /datum/reagent/toxin/mutetoxin = 1, /datum/reagent/consumable/nothing = 1)
/datum/chemical_reaction/bonehurtingjuice
- name = "Bone Hurting Juice"
- id = /datum/reagent/toxin/bonehurtingjuice
results = list(/datum/reagent/toxin/bonehurtingjuice = 5)
required_reagents = list(/datum/reagent/toxin/mutagen = 1, /datum/reagent/toxin/itching_powder = 3, /datum/reagent/consumable/milk = 1)
mix_message = "The mixture suddenly becomes clear and looks a lot like water. You feel a strong urge to drink it."
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index 9e8f5dd2078..b5ad324b110 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -10,6 +10,14 @@
make_reagents = list(/datum/reagent/consumable/milk = 10)
category = list("initial","Food")
+/datum/design/soymilk
+ name = "10u Soy Milk"
+ id = "soymilk"
+ build_type = BIOGENERATOR
+ materials = list(/datum/material/biomass= 20)
+ make_reagents = list(/datum/reagent/consumable/soymilk = 10)
+ category = list("initial","Food")
+
/datum/design/ethanol
name = "10u Ethanol"
id = "ethanol"
@@ -56,7 +64,7 @@
build_type = BIOGENERATOR
materials = list(/datum/material/biomass= 250)
build_path = /obj/item/reagent_containers/food/snacks/monkeycube
- category = list("initial", "Food")
+ category = list("initial","Food")
/datum/design/ez_nut //easy nut :)
name = "30u E-Z Nutrient"
diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm
index 8196217ee4b..7768846ff7e 100644
--- a/code/modules/surgery/organic_steps.dm
+++ b/code/modules/surgery/organic_steps.dm
@@ -103,7 +103,7 @@
/datum/surgery_step/saw
name = "saw bone"
implements = list(TOOL_SAW = 100,/obj/item/melee/arm_blade = 75,
- /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
+ /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25, /obj/item = 20) //20% success (sort of) with any sharp item with a force>=10
time = 54
/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -111,7 +111,12 @@
"[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].",
"[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].")
-/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+/datum/surgery_step/saw/tool_check(mob/user, obj/item/tool)
+ if(implement_type == /obj/item && !(tool.get_sharpness() && (tool.force >= 10)))
+ return FALSE
+ return TRUE
+
+/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
target.apply_damage(50, BRUTE, "[target_zone]")
display_results(user, target, "You saw [target]'s [parse_zone(target_zone)] open.",
"[user] saws [target]'s [parse_zone(target_zone)] open!",
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index dcb11a7b567..15a51392606 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -164,10 +164,10 @@
desc = "A sleek, sturdy box."
icon_state = "cyber_implants"
var/list/boxed = list(
- /obj/item/autosurgeon/thermal_eyes,
- /obj/item/autosurgeon/xray_eyes,
- /obj/item/autosurgeon/anti_stun,
- /obj/item/autosurgeon/reviver)
+ /obj/item/autosurgeon/syndicate/thermal_eyes,
+ /obj/item/autosurgeon/syndicate/xray_eyes,
+ /obj/item/autosurgeon/syndicate/anti_stun,
+ /obj/item/autosurgeon/syndicate/reviver)
var/amount = 5
/obj/item/storage/box/cyber_implants/PopulateContents()
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index fe4e7965d21..13bb0fb46ee 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -12,6 +12,10 @@
var/uses = INFINITE
var/starting_organ
+/obj/item/autosurgeon/syndicate
+ name = "suspicious autosurgeon"
+ icon_state = "syndicate_autoimplanter"
+
/obj/item/autosurgeon/Initialize(mapload)
. = ..()
if(starting_organ)
@@ -82,15 +86,19 @@
uses = 1
starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical
+/obj/item/autosurgeon/syndicate/laser_arm
+ desc = "A single use autosurgeon that contains a combat arms-up laser augment. A screwdriver can be used to remove it, but implants can't be placed back in."
+ uses = 1
+ starting_organ = /obj/item/organ/cyberimp/arm/gun/laser
-/obj/item/autosurgeon/thermal_eyes
+/obj/item/autosurgeon/syndicate/thermal_eyes
starting_organ = /obj/item/organ/eyes/robotic/thermals
-/obj/item/autosurgeon/xray_eyes
+/obj/item/autosurgeon/syndicate/xray_eyes
starting_organ = /obj/item/organ/eyes/robotic/xray
-/obj/item/autosurgeon/anti_stun
+/obj/item/autosurgeon/syndicate/anti_stun
starting_organ = /obj/item/organ/cyberimp/brain/anti_stun
-/obj/item/autosurgeon/reviver
+/obj/item/autosurgeon/syndicate/reviver
starting_organ = /obj/item/organ/cyberimp/chest/reviver
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index a53aaa22075..b5dafecf530 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -632,6 +632,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 10
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
+/datum/uplink_item/stealthy_weapons/holster
+ name = "Syndicate Holster"
+ desc = "A useful little device that allows for inconspicuous carrying of guns using chameleon technology. It also allows for badass gun-spinning."
+ item = /obj/item/storage/belt/holster/chameleon
+ cost = 1
+
// Ammunition
/datum/uplink_item/ammo
category = "Ammunition"
@@ -1491,7 +1497,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/implants/antistun
name = "CNS Rebooter Implant"
desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon."
- item = /obj/item/autosurgeon/anti_stun
+ item = /obj/item/autosurgeon/syndicate/anti_stun
cost = 12
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -1532,7 +1538,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/implants/reviver
name = "Reviver Implant"
desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon."
- item = /obj/item/autosurgeon/reviver
+ item = /obj/item/autosurgeon/syndicate/reviver
cost = 8
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -1554,7 +1560,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/implants/thermals
name = "Thermal Eyes"
desc = "These cybernetic eyes will give you thermal vision. Comes with a free autosurgeon."
- item = /obj/item/autosurgeon/thermal_eyes
+ item = /obj/item/autosurgeon/syndicate/thermal_eyes
cost = 8
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -1572,7 +1578,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/implants/xray
name = "X-ray Vision Implant"
desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon."
- item = /obj/item/autosurgeon/xray_eyes
+ item = /obj/item/autosurgeon/syndicate/xray_eyes
cost = 10
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -1786,6 +1792,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/box/hug/reverse_revolver
restricted_roles = list("Clown")
+/datum/uplink_item/role_restricted/laser_arm
+ name = "Laser Arm Implant"
+ desc = "An implant that grants you a recharging laser gun inside your arm. Weak to EMPs. Comes with a syndicate autosurgeon for immediate self-application."
+ cost = 10
+ item = /obj/item/autosurgeon/syndicate/laser_arm
+ restricted_roles = list("Roboticist")
+
+
// Pointless
/datum/uplink_item/badass
category = "(Pointless) Badassery"
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 7cd36e3388c..504a3572f8c 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -126,7 +126,7 @@
/obj/item/clothing/under/pants/mustangjeans = 1,
/obj/item/clothing/neck/necklace/dope = 3,
/obj/item/clothing/suit/jacket/letterman_nanotrasen = 1,
- /obj/item/clothing/ears/earmuffs/spacepods = 1)
+ /obj/item/instrument/piano_synth/headphones/spacepods = 1)
refill_canister = /obj/item/vending_refill/clothing
default_price = 60
extra_price = 120
diff --git a/html/changelog.html b/html/changelog.html
index a4a449f13be..6dfe744a0c3 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -51,6 +51,171 @@
-->