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

19 February 2020

+

ATHATH updated:

+ +

ArcaneMusic updated:

+ +

Arkatos updated:

+ +

Bokkiewokkie updated:

+ +

Buggy123 updated:

+ +

Capsandi updated:

+ +

Dennok updated:

+ +

EOBGames updated:

+ +

Fikou updated:

+ +

Iamgoofball updated:

+ +

Improvedname & JustRandomGuy updated:

+ +

JAremko updated:

+ +

JDawg1290 updated:

+ +

JJRcop updated:

+ +

Mickyan updated:

+ +

NecromancerAnne and Kyrsonism updated:

+ +

NikNak updated:

+ +

RaveRadbury updated:

+ +

Skoglol updated:

+ +

TheVekter updated:

+ +

Thunder12345 updated:

+ +

Time-Green updated:

+ +

XDTM updated:

+ +

cacogen updated:

+ +

itseasytosee updated:

+ +

necromanceranne updated:

+ +

nightred updated:

+ +

plapatin updated:

+ +

stylemistake updated:

+ +

wesoda25 updated:

+ +

with thanks to HugBug and Buggy for helping with bug-squashing updated:

+ +

yeeyeh updated:

+ +

15 February 2020

BadSS13Player updated: