diff --git a/Dockerfile b/Dockerfile index 7cc479b926..a28b231eab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM tgstation/byond:512.1463 as base +FROM tgstation/byond:512.1467 as base FROM base as build_base diff --git a/code/controllers/subsystem/processing/circuit.dm b/code/controllers/subsystem/processing/circuit.dm index 1ae5bad23c..880e7a16a8 100644 --- a/code/controllers/subsystem/processing/circuit.dm +++ b/code/controllers/subsystem/processing/circuit.dm @@ -50,17 +50,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit) /obj/item/electronic_assembly/simple, /obj/item/electronic_assembly/hook, /obj/item/electronic_assembly/pda, + /obj/item/electronic_assembly/dildo, /obj/item/electronic_assembly/small/default, /obj/item/electronic_assembly/small/cylinder, /obj/item/electronic_assembly/small/scanner, /obj/item/electronic_assembly/small/hook, /obj/item/electronic_assembly/small/box, + /obj/item/electronic_assembly/small/dildo, /obj/item/electronic_assembly/medium/default, /obj/item/electronic_assembly/medium/box, /obj/item/electronic_assembly/medium/clam, /obj/item/electronic_assembly/medium/medical, /obj/item/electronic_assembly/medium/gun, /obj/item/electronic_assembly/medium/radio, + /obj/item/electronic_assembly/medium/dildo, /obj/item/electronic_assembly/large/default, /obj/item/electronic_assembly/large/scope, /obj/item/electronic_assembly/large/terminal, @@ -89,4 +92,4 @@ PROCESSING_SUBSYSTEM_DEF(circuit) /obj/item/card/data/full_color, /obj/item/card/data/disk ) - + diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 16e13a9fe2..56e47ed6f5 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -9,7 +9,7 @@ message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ") log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ") - if(heavy_range > 1) + if(heavy_range >= 1) new /obj/effect/temp_visual/emp/pulse(epicenter) if(heavy_range > light_range) diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index d818191055..a8d0bed2aa 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -362,7 +362,7 @@ AI MODULES /obj/item/aiModule/core/full/asimov name = "'Asimov' Core AI Module" law_id = "asimov" - var/subject = "human being" + var/subject = "person of an NT approved crew species" //CITADEL CHANGED FROM HUMANS! /obj/item/aiModule/core/full/asimov/attack_self(var/mob/user as mob) var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject) diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index 730a459ed4..bbd2e67464 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -12,6 +12,7 @@ var/cell_type = /obj/item/stock_parts/cell/high var/obj/item/stock_parts/cell/cell var/recharging = FALSE + var/gun_charger = FALSE /obj/item/inducer/Initialize() . = ..() @@ -104,7 +105,7 @@ var/obj/item/stock_parts/cell/C = A.get_cell() var/obj/O var/coefficient = 1 - if(istype(A, /obj/item/gun/energy)) + if(istype(A, /obj/item/gun/energy) && gun_charger != TRUE) to_chat(user,"Error unable to interface with device") return FALSE if(istype(A, /obj)) @@ -181,3 +182,26 @@ /obj/item/inducer/sci/Initialize() . = ..() update_icon() + +/obj/item/inducer/sci/combat + icon_state = "inducer-combat" + item_state = "inducer-combat" + w_class = WEIGHT_CLASS_BULKY + slot_flags = SLOT_BELT + desc = "A tool for inductively charging internal power cells. This one has been modified and upgraded to be able to charge into guns as well as normal electronics." + cell_type = /obj/item/stock_parts/cell/hyper + powertransfer = 1300 + opened = FALSE + gun_charger = TRUE + +/obj/item/inducer/sci/combat/dry + cell_type = null + opened = TRUE + +/obj/item/inducer/sci/combat/dry/Initialize() //Just in case + . = ..() + update_icon() + +/obj/item/inducer/sci/combat/Initialize() + . = ..() + update_icon() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index e63ddd1c02..89d939e505 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -382,8 +382,8 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("wall gear", /obj/structure/destructible/clockwork/wall_gear, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ null, - new/datum/stack_recipe("pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("brass pinion airlock", /obj/machinery/door/airlock/clockwork/brass, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass pinion airlock - windowed", /obj/machinery/door/airlock/clockwork/brass, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass windoor", /obj/machinery/door/window/clockwork, 2, time = 30, on_floor = TRUE, window_checks = TRUE), \ null, new/datum/stack_recipe("directional brass window", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ @@ -392,11 +392,14 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("sender - mech sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("sender - lever", /obj/structure/destructible/clockwork/trap/trigger/lever, 1, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("sender - repeater", /obj/structure/destructible/clockwork/trap/trigger/repeater, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("receiver - brass skewer", /obj/structure/destructible/clockwork/trap/brass_skewer, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_ADJACENT), \ new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ + new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ + )) /obj/item/stack/tile/brass diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 25fc96c251..1f1143e7ce 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -48,6 +48,13 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) component_type = /datum/component/storage/concrete/bluespace/bag_of_holding +/obj/item/storage/backpack/holding/satchel + name = "satchel of holding" + desc = "A satchel that opens into a localized pocket of Blue Space." + icon_state = "holdingsat" + item_state = "holdingsat" + species_exception = list(/datum/species/angel) + /obj/item/storage/backpack/holding/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index eb9fc86516..9b8d2b4a21 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -208,3 +208,38 @@ new/obj/item/stack/cable_coil/orange(src) new/obj/item/stack/cable_coil/cyan(src) new/obj/item/stack/cable_coil/white(src) + +/obj/item/storage/toolbox/gold_real + name = "golden toolbox" + desc = "A larger then normal toolbox made of gold plated plastitanium." + item_state = "gold" + icon_state = "gold" + has_latches = FALSE + force = 16 // Less then a spear + throwforce = 14 + throw_speed = 5 + throw_range = 10 + +/obj/item/storage/toolbox/gold_real/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench(src) + new /obj/item/weldingtool/largetank(src) + new /obj/item/crowbar/red(src) + new /obj/item/wirecutters(src, "red") + new /obj/item/multitool/ai_detect(src) + new /obj/item/clothing/gloves/combat(src) + +/obj/item/storage/toolbox/gold_real/ComponentInitialize() + . = ..() + GET_COMPONENT(STR, /datum/component/storage) + STR.max_combined_w_class = 40 + STR.max_items = 12 + +/obj/item/storage/toolbox/gold_fake // used in crafting + name = "golden toolbox" + desc = "A gold plated toolbox, fancy and harmless do to the gold plating being on cardboard!" + icon_state = "gold" + item_state = "gold" + has_latches = FALSE + force = 0 + throwforce = 0 diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 6d3f498a8c..0e2f951f38 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -1,6 +1,6 @@ #define MUSICIAN_HEARCHECK_MINDELAY 4 -#define MUSIC_MAXLINES 300 +#define MUSIC_MAXLINES 600 #define MUSIC_MAXLINECHARS 50 /datum/song diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 3056b459d8..97a799824b 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -217,3 +217,7 @@ /proc/_step_away(ref, trg, max) step_away(ref, trg, max) +/proc/_instantiate_at(thing, location) + new thing(location) + + diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 3fa1020000..b14541d3c8 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -503,6 +503,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} L.lastattacker = user.real_name L.lastattackerckey = user.ckey + L.adjustStaminaLoss(35) //because previously it took 5-6 hits to actually "incapacitate" someone for the purposes of the sleep inducement L.Knockdown(140) L.apply_effect(EFFECT_STUTTER, 7) SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm new file mode 100644 index 0000000000..3eac1b9fef --- /dev/null +++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/pressure_sensor_mech.dm @@ -0,0 +1,20 @@ +//Mech sensor: Activates when stepped on by a mech +/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech + name = "mech sensor" + desc = "A thin plate of brass, barely visible but clearly distinct." + clockwork_desc = "A trigger that will activate when a mech controlled by a non-servant runs across it." + max_integrity = 5 + icon_state = "pressure_sensor" + alpha = 75 + +/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech/Crossed(atom/movable/AM) + + if(!istype(AM,/obj/mecha/)) + return + + var/obj/mecha/M = AM + if(M.occupant && is_servant_of_ratvar(M.occupant)) + return + audible_message("*click*") + playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE) + activate() \ No newline at end of file diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm index 6312228447..ebfb219c9a 100644 --- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm +++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm @@ -68,7 +68,14 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off buckle_mob(squirrel, TRUE) else - visible_message("A massive brass spike erupts from the ground!") + var/obj/mecha/M = locate() in get_turf(src) + if(M) + M.take_damage(50,BRUTE,"melee") + M.visible_message("A massive brass spike erupts from the ground, penetrating \the [M] and shattering the trap into pieces!") + addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1) + else + visible_message("A massive brass spike erupts from the ground!") + playsound(src, 'sound/machines/clockcult/brass_skewer.ogg', 75, FALSE) icon_state = "[initial(icon_state)]_extended" density = TRUE //Skewers are one-use only diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/power_null.dm b/code/modules/antagonists/clockcult/clock_structures/traps/power_null.dm new file mode 100644 index 0000000000..6c8477ab5b --- /dev/null +++ b/code/modules/antagonists/clockcult/clock_structures/traps/power_null.dm @@ -0,0 +1,17 @@ +/obj/structure/destructible/clockwork/trap/power_nullifier + name = "power nullifier" + desc = "A well hidden set of wires and connections." + clockwork_desc = "When triggered, it sets off a 3x3 emp pulse with the center suffering a stronger pulse." + icon_state = "electric_trap" + break_message = "The power nullifier sparks, then slowly crumbles to debris!" + max_integrity = 40 + density = FALSE + var/activated = FALSE + +/obj/structure/destructible/clockwork/trap/power_nullifier/activate() + if(!activated) + activated = TRUE + empulse(get_turf(src),1,1,TRUE) + +/obj/structure/destructible/clockwork/trap/power_nullifier/emp_act(var/strength=1) + activate() diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index d4cfbd1a84..5f7984c707 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -193,15 +193,14 @@ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked var/lock = FALSE -/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params) - if(lock != FALSE) - to_chat(user, "With a click the collar unlocks!") - lock = FALSE - item_flags = NONE - else - to_chat(user, "With a click the collar locks!") - lock = TRUE - item_flags = NODROP +/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/K, mob/user, params) + if(istype(K, /obj/item/key/collar)) + if(lock != FALSE) + to_chat(user, "With a click the collar unlocks!") + lock = FALSE + else + to_chat(user, "With a click the collar locks!") + lock = TRUE return /obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 750b172286..328141b752 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -709,3 +709,14 @@ reqs = list(/obj/item/tank/internals/oxygen/red = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right category = CAT_MISC tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER) + +/datum/crafting_recipe/goldenbox + name = "Gold Plated Toolbox" + result = /obj/item/storage/toolbox/gold_fake + reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting + /obj/item/stack/cable_coil = 10, + /obj/item/stack/sheet/mineral/gold = 1, + /obj/item/stock_parts/cell = 1, + /datum/reagent/water = 15) + time = 40 + category = CAT_MISC diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 1a4bb1fb1b..3862967363 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -643,6 +643,11 @@ icon_state = "setup_small_pda" desc = "It's a case, for building small electronics with. This one resembles a PDA." +/obj/item/electronic_assembly/dildo + name = "type-g electronic assembly" + icon_state = "setup_dildo_medium" + desc = "It's a case, for building small electronics with. This one has a phallic design." + /obj/item/electronic_assembly/small name = "electronic device" icon_state = "setup_device" @@ -674,6 +679,11 @@ icon_state = "setup_device_box" desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design." +/obj/item/electronic_assembly/small/dildo + name = "type-f electronic device" + icon_state = "setup_dildo_small" + desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design." + /obj/item/electronic_assembly/medium name = "electronic mechanism" icon_state = "setup_medium" @@ -714,6 +724,12 @@ icon_state = "setup_medium_radio" desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio." +/obj/item/electronic_assembly/medium/dildo + name = "type-g electronic mechanism" + icon_state = "setup_dildo_large" + desc = "It's a case, for building medium-sized electronics with. This one has a phallic design." + + /obj/item/electronic_assembly/large name = "electronic machine" icon_state = "setup_large" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 8b13789179..e3acab9ebc 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -1 +1,868 @@ +/datum/design/bucket + name = "Bucket" + id = "bucket" + build_type = AUTOLATHE + materials = list(MAT_METAL = 200) + build_path = /obj/item/reagent_containers/glass/bucket + category = list("initial","Tools") +/datum/design/crowbar + name = "Pocket Crowbar" + id = "crowbar" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/crowbar + category = list("initial","Tools") + +/datum/design/flashlight + name = "Flashlight" + id = "flashlight" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 20) + build_path = /obj/item/flashlight + category = list("initial","Tools") + +/datum/design/extinguisher + name = "Fire Extinguisher" + id = "extinguisher" + build_type = AUTOLATHE + materials = list(MAT_METAL = 90) + build_path = /obj/item/extinguisher + category = list("initial","Tools") + +/datum/design/pocketfireextinguisher + name = "Pocket Fire Extinguisher" + id = "pocketfireextinguisher" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 40) + build_path = /obj/item/extinguisher/mini + category = list("initial","Tools") + +/datum/design/multitool + name = "Multitool" + id = "multitool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 20) + build_path = /obj/item/multitool + category = list("initial","Tools") + +/datum/design/analyzer + name = "Analyzer" + id = "analyzer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 20) + build_path = /obj/item/analyzer + category = list("initial","Tools") + +/datum/design/tscanner + name = "T-Ray Scanner" + id = "tscanner" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150) + build_path = /obj/item/t_scanner + category = list("initial","Tools") + +/datum/design/weldingtool + name = "Welding Tool" + id = "welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 70, MAT_GLASS = 20) + build_path = /obj/item/weldingtool + category = list("initial","Tools") + +/datum/design/mini_weldingtool + name = "Emergency Welding Tool" + id = "mini_welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 10) + build_path = /obj/item/weldingtool/mini + category = list("initial","Tools") + +/datum/design/screwdriver + name = "Screwdriver" + id = "screwdriver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75) + build_path = /obj/item/screwdriver + category = list("initial","Tools") + +/datum/design/wirecutters + name = "Wirecutters" + id = "wirecutters" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/wirecutters + category = list("initial","Tools") + +/datum/design/wrench + name = "Wrench" + id = "wrench" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150) + build_path = /obj/item/wrench + category = list("initial","Tools") + +/datum/design/welding_helmet + name = "Welding Helmet" + id = "welding_helmet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1750, MAT_GLASS = 400) + build_path = /obj/item/clothing/head/welding + category = list("initial","Tools") + +/datum/design/cable_coil + name = "Cable Coil" + id = "cable_coil" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 5) + build_path = /obj/item/stack/cable_coil/random + category = list("initial","Tools") + maxstack = 30 + +/datum/design/toolbox + name = "Toolbox" + id = "tool_box" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/storage/toolbox + category = list("initial","Tools") + +/datum/design/apc_board + name = "APC Module" + id = "power control" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/electronics/apc + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/airlock_board + name = "Airlock Electronics" + id = "airlock_board" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/airlock + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/firelock_board + name = "Firelock Circuitry" + id = "firelock_board" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/firelock + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/airalarm_electronics + name = "Air Alarm Electronics" + id = "airalarm_electronics" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/airalarm + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/firealarm_electronics + name = "Fire Alarm Electronics" + id = "firealarm_electronics" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/firealarm + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/camera + name = "Camera" + id = "camera" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 100) + build_path = /obj/item/camera + category = list("initial", "Misc") + +/datum/design/camera_film + name = "Camera Film Cartridge" + id = "camera_film" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 10) + build_path = /obj/item/camera_film + category = list("initial", "Misc") + +/datum/design/earmuffs + name = "Earmuffs" + id = "earmuffs" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/ears/earmuffs + category = list("initial", "Misc") + +/datum/design/pipe_painter + name = "Pipe Painter" + id = "pipe_painter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) + build_path = /obj/item/pipe_painter + category = list("initial", "Misc") + +/datum/design/airlock_painter + name = "Airlock Painter" + id = "airlock_painter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/airlock_painter + category = list("initial", "Misc") + +/datum/design/metal + name = "Metal" + id = "metal" + build_type = AUTOLATHE + materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/metal + category = list("initial","Construction") + maxstack = 50 + +/datum/design/glass + name = "Glass" + id = "glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/glass + category = list("initial","Construction") + maxstack = 50 + +/datum/design/rglass + name = "Reinforced Glass" + id = "rglass" + build_type = AUTOLATHE | SMELTER | PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/rglass + category = list("initial","Construction","Stock Parts") + maxstack = 50 + +/datum/design/rods + name = "Metal Rod" + id = "rods" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000) + build_path = /obj/item/stack/rods + category = list("initial","Construction") + maxstack = 50 + +/datum/design/rcd_ammo + name = "Compressed Matter Cartridge" + id = "rcd_ammo" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000, MAT_GLASS=8000) + build_path = /obj/item/rcd_ammo + category = list("initial","Construction") + +/datum/design/kitchen_knife + name = "Kitchen Knife" + id = "kitchen_knife" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000) + build_path = /obj/item/kitchen/knife + category = list("initial","Dinnerware") + +/datum/design/fork + name = "Fork" + id = "fork" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/kitchen/fork + category = list("initial","Dinnerware") + +/datum/design/tray + name = "Tray" + id = "tray" + build_type = AUTOLATHE + materials = list(MAT_METAL = 3000) + build_path = /obj/item/storage/bag/tray + category = list("initial","Dinnerware") + +/datum/design/bowl + name = "Bowl" + id = "bowl" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/glass/bowl + category = list("initial","Dinnerware") + +/datum/design/drinking_glass + name = "Drinking Glass" + id = "drinking_glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/food/drinks/drinkingglass + category = list("initial","Dinnerware") + +/datum/design/shot_glass + name = "Shot Glass" + id = "shot_glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass + category = list("initial","Dinnerware") + +/datum/design/shaker + name = "Shaker" + id = "shaker" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1500) + build_path = /obj/item/reagent_containers/food/drinks/shaker + category = list("initial","Dinnerware") + +/datum/design/cultivator + name = "Cultivator" + id = "cultivator" + build_type = AUTOLATHE + materials = list(MAT_METAL=50) + build_path = /obj/item/cultivator + category = list("initial","Misc") + +/datum/design/plant_analyzer + name = "Plant Analyzer" + id = "plant_analyzer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 20) + build_path = /obj/item/plant_analyzer + category = list("initial","Misc") + +/datum/design/shovel + name = "Shovel" + id = "shovel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/shovel + category = list("initial","Misc") + +/datum/design/spade + name = "Spade" + id = "spade" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/shovel/spade + category = list("initial","Misc") + +/datum/design/hatchet + name = "Hatchet" + id = "hatchet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000) + build_path = /obj/item/hatchet + category = list("initial","Misc") + +/datum/design/foilhat + name = "Tinfoil Hat" + id = "tinfoil_hat" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5500) + build_path = /obj/item/clothing/head/foilhat + category = list("hacked", "Misc") + +/datum/design/scalpel + name = "Scalpel" + id = "scalpel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) + build_path = /obj/item/scalpel + category = list("initial", "Medical") + +/datum/design/circular_saw + name = "Circular Saw" + id = "circular_saw" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) + build_path = /obj/item/circular_saw + category = list("initial", "Medical") + +/datum/design/surgicaldrill + name = "Surgical Drill" + id = "surgicaldrill" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) + build_path = /obj/item/surgicaldrill + category = list("initial", "Medical") + +/datum/design/retractor + name = "Retractor" + id = "retractor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 6000, MAT_GLASS = 3000) + build_path = /obj/item/retractor + category = list("initial", "Medical") + +/datum/design/cautery + name = "Cautery" + id = "cautery" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2500, MAT_GLASS = 750) + build_path = /obj/item/cautery + category = list("initial", "Medical") + +/datum/design/hemostat + name = "Hemostat" + id = "hemostat" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500) + build_path = /obj/item/hemostat + category = list("initial", "Medical") + +/datum/design/beaker + name = "Beaker" + id = "beaker" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/glass/beaker + category = list("initial", "Medical") + +/datum/design/large_beaker + name = "Large Beaker" + id = "large_beaker" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 2500) + build_path = /obj/item/reagent_containers/glass/beaker/large + category = list("initial", "Medical") + +/datum/design/healthanalyzer + name = "Health Analyzer" + id = "healthanalyzer" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/healthanalyzer + category = list("initial", "Medical") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/pillbottle + name = "Pill Bottle" + id = "pillbottle" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20, MAT_GLASS = 100) + build_path = /obj/item/storage/pill_bottle + category = list("initial", "Medical") + +/datum/design/beanbag_slug + name = "Beanbag Slug" + id = "beanbag_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250) + build_path = /obj/item/ammo_casing/shotgun/beanbag + category = list("initial", "Security") + +/datum/design/rubbershot + name = "Rubber Shot" + id = "rubber_shot" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/rubbershot + category = list("initial", "Security") + +/datum/design/c38 + name = "Speed Loader (.38 rubber)" + id = "c38" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20000) + build_path = /obj/item/ammo_box/c38 + category = list("initial", "Security") + +/datum/design/recorder + name = "Universal Recorder" + id = "recorder" + build_type = AUTOLATHE + materials = list(MAT_METAL = 60, MAT_GLASS = 30) + build_path = /obj/item/taperecorder/empty + category = list("initial", "Misc") + +/datum/design/tape + name = "Tape" + id = "tape" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20, MAT_GLASS = 5) + build_path = /obj/item/tape/random + category = list("initial", "Misc") + +/datum/design/igniter + name = "Igniter" + id = "igniter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/igniter + category = list("initial", "Misc") + +/datum/design/signaler + name = "Remote Signaling Device" + id = "signaler" + build_type = AUTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 120) + build_path = /obj/item/assembly/signaler + category = list("initial", "T-Comm") + +/datum/design/radio_headset + name = "Radio Headset" + id = "radio_headset" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75) + build_path = /obj/item/radio/headset + category = list("initial", "T-Comm") + +/datum/design/bounced_radio + name = "Station Bounced Radio" + id = "bounced_radio" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75, MAT_GLASS = 25) + build_path = /obj/item/radio/off + category = list("initial", "T-Comm") + +/datum/design/intercom_frame + name = "Intercom Frame" + id = "intercom_frame" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75, MAT_GLASS = 25) + build_path = /obj/item/wallframe/intercom + category = list("initial", "T-Comm") + +/datum/design/infrared_emitter + name = "Infrared Emitter" + id = "infrared_emitter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) + build_path = /obj/item/assembly/infra + category = list("initial", "Misc") + +/datum/design/health_sensor + name = "Health Sensor" + id = "health_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/assembly/health + category = list("initial", "Medical") + +/datum/design/timer + name = "Timer" + id = "timer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/timer + category = list("initial", "Misc") + +/datum/design/voice_analyser + name = "Voice Analyser" + id = "voice_analyser" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/voice + category = list("initial", "Misc") + +/datum/design/light_tube + name = "Light Tube" + id = "light_tube" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/light/tube + category = list("initial", "Construction") + +/datum/design/light_bulb + name = "Light Bulb" + id = "light_bulb" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/light/bulb + category = list("initial", "Construction") + +/datum/design/camera_assembly + name = "Camera Assembly" + id = "camera_assembly" + build_type = AUTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 250) + build_path = /obj/item/wallframe/camera + category = list("initial", "Construction") + +/datum/design/newscaster_frame + name = "Newscaster Frame" + id = "newscaster_frame" + build_type = AUTOLATHE + materials = list(MAT_METAL = 14000, MAT_GLASS = 8000) + build_path = /obj/item/wallframe/newscaster + category = list("initial", "Construction") + +/datum/design/syringe + name = "Syringe" + id = "syringe" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 20) + build_path = /obj/item/reagent_containers/syringe + category = list("initial", "Medical") + +/datum/design/prox_sensor + name = "Proximity Sensor" + id = "prox_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/assembly/prox_sensor + category = list("initial", "Misc") + +/datum/design/foam_dart + name = "Box of Foam Darts" + id = "foam_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/ammo_box/foambox + category = list("initial", "Misc") + +//hacked autolathe recipes +/datum/design/flamethrower + name = "Flamethrower" + id = "flamethrower" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/flamethrower/full + category = list("hacked", "Security") + +/datum/design/rcd + name = "Rapid Construction Device (RCD)" + id = "rcd" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/construction/rcd + category = list("hacked", "Construction") + +/datum/design/rpd + name = "Rapid Pipe Dispenser (RPD)" + id = "rpd" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75000, MAT_GLASS = 37500) + build_path = /obj/item/pipe_dispenser + category = list("hacked", "Construction") + +/datum/design/electropack + name = "Electropack" + id = "electropack" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 2500) + build_path = /obj/item/electropack + category = list("hacked", "Tools") + +/datum/design/large_welding_tool + name = "Industrial Welding Tool" + id = "large_welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 70, MAT_GLASS = 60) + build_path = /obj/item/weldingtool/largetank + category = list("hacked", "Tools") + +/datum/design/handcuffs + name = "Handcuffs" + id = "handcuffs" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/restraints/handcuffs + category = list("hacked", "Security") + +/datum/design/receiver + name = "Modular Receiver" + id = "receiver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000) + build_path = /obj/item/weaponcrafting/receiver + category = list("hacked", "Security") + +/datum/design/shotgun_slug + name = "Shotgun Slug" + id = "shotgun_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun + category = list("hacked", "Security") + +/datum/design/buckshot_shell + name = "Buckshot Shell" + id = "buckshot_shell" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/buckshot + category = list("hacked", "Security") + +/datum/design/shotgun_dart + name = "Shotgun Dart" + id = "shotgun_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/dart + category = list("hacked", "Security") + +/datum/design/incendiary_slug + name = "Incendiary Slug" + id = "incendiary_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/incendiary + category = list("hacked", "Security") + +/datum/design/riot_dart + name = "Foam Riot Dart" + id = "riot_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal! + build_path = /obj/item/ammo_casing/caseless/foam_dart/riot + category = list("hacked", "Security") + +/datum/design/riot_darts + name = "Foam Riot Dart Box" + id = "riot_darts" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50000) //Comes with 40 darts + build_path = /obj/item/ammo_box/foambox/riot + category = list("hacked", "Security") + +/datum/design/a357 + name = "Speed Loader (.357)" + id = "a357" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/a357 + category = list("hacked", "Security") + +/datum/design/c10mm + name = "Ammo Box (10mm)" + id = "c10mm" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c10mm + category = list("hacked", "Security") + +/datum/design/c45 + name = "Ammo Box (.45)" + id = "c45" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c45 + category = list("hacked", "Security") + +/datum/design/c9mm + name = "Ammo Box (9mm)" + id = "c9mm" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c9mm + category = list("hacked", "Security") + +/datum/design/cleaver + name = "Butcher's Cleaver" + id = "cleaver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 18000) + build_path = /obj/item/kitchen/knife/butcher + category = list("hacked", "Dinnerware") + +/datum/design/spraycan + name = "Spraycan" + id = "spraycan" + build_type = AUTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/toy/crayon/spraycan + category = list("initial", "Tools") + +/datum/design/desttagger + name = "Destination Tagger" + id = "desttagger" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 125) + build_path = /obj/item/destTagger + category = list("initial", "Electronics") + +/datum/design/handlabeler + name = "Hand Labeler" + id = "handlabel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 125) + build_path = /obj/item/hand_labeler + category = list("initial", "Electronics") + +/datum/design/geiger + name = "Geiger Counter" + id = "geigercounter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 150) + build_path = /obj/item/geiger_counter + category = list("initial", "Tools") + +/datum/design/turret_control_frame + name = "Turret Control Frame" + id = "turret_control" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000) + build_path = /obj/item/wallframe/turret_control + category = list("initial", "Construction") + +/datum/design/conveyor_belt + name = "Conveyor Belt" + id = "conveyor_belt" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000) + build_path = /obj/item/conveyor_construct + category = list("initial", "Construction") + +/datum/design/conveyor_switch + name = "Conveyor Belt Switch" + id = "conveyor_switch" + build_type = AUTOLATHE + materials = list(MAT_METAL = 450, MAT_GLASS = 190) + build_path = /obj/item/conveyor_switch_construct + category = list("initial", "Construction") + +/datum/design/laptop + name = "Laptop Frame" + id = "laptop" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 1000) + build_path = /obj/item/modular_computer/laptop/buildable + category = list("initial","Misc") + +/datum/design/tablet + name = "Tablet Frame" + id = "tablet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) + build_path = /obj/item/modular_computer/tablet + category = list("initial","Misc") + +/datum/design/slime_scanner + name = "Slime Scanner" + id = "slime_scanner" + build_type = AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 200) + build_path = /obj/item/slime_scanner + category = list("initial", "Misc") + +/datum/design/pet_carrier + name = "Pet Carrier" + id = "pet_carrier" + build_type = AUTOLATHE + materials = list(MAT_METAL = 7500, MAT_GLASS = 100) + build_path = /obj/item/pet_carrier + category = list("initial", "Misc") + +/datum/design/miniature_power_cell + name = "Light Fixture Battery" + id = "miniature_power_cell" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 20) + build_path = /obj/item/stock_parts/cell/emergency_light + category = list("initial", "Electronics") + +/datum/design/packageWrap + name = "Package Wrapping" + id = "packagewrap" + build_type = AUTOLATHE + materials = list(MAT_METAL = 200, MAT_GLASS = 200) + build_path = /obj/item/stack/packageWrap + category = list("initial", "Misc") + maxstack = 30 + +/datum/design/holodisk + name = "Holodisk" + id = "holodisk" + build_type = AUTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/disk/holodisk + category = list("initial", "Misc") diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 2dc0ed77b3..c9d11a5a3e 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -24,6 +24,17 @@ dangerous_construction = TRUE departmental_flags = DEPARTMENTAL_FLAG_SCIENCE +/datum/design/satchel_holding + name = "Satchel of Holding" + desc = "A satchel that opens into a localized pocket of bluespace." + id = "satchel_holding" + build_type = PROTOLATHE + materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000) + build_path = /obj/item/storage/backpack/holding/satchel + category = list("Bluespace Designs") + dangerous_construction = TRUE + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/biobag_holding name = "Bio Bag of Holding" desc = "A chemical holding thingy. Mostly used for xenobiology." diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index e1648559a7..f8122c16e3 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -77,6 +77,16 @@ category = list("Power Designs") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING +/datum/design/inducercombat + name = "Combat Ready Inducer" + desc = "The improved NT-8475 Electromagnetic Power Inducer can this one has been SCIENCED to allow for combat. It still comes printed with SCIENCED colors!" + id = "combatinducer" + build_type = PROTOLATHE + materials = list(MAT_METAL = 13000, MAT_GLASS = 10000, MAT_SILVER = 1500, MAT_GOLD = 1250, MAT_DIAMOND = 500, MAT_TITANIUM = 1200) + build_path = /obj/item/inducer/sci/combat/dry + category = list("Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + /datum/design/board/pacman name = "Machine Design (PACMAN-type Generator Board)" desc = "The circuit board that for a PACMAN-type portable generator." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 90c769c5d1..aa091d181c 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -246,7 +246,7 @@ display_name = "Bluespace Pockets" description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality." prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma") - design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash") + design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500) export_price = 5000 /////////////////////////plasma tech///////////////////////// diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 152ce3bc46..dfdf0fde69 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -45,7 +45,8 @@ var/species_color = "" var/mutation_color = "" var/no_update = 0 - var/body_markings //for bodypart markings + var/body_markings = "" //for bodypart markings + var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' var/list/markings_color = list() var/auxmarking var/list/auxmarking_color = list() @@ -260,6 +261,7 @@ icon = DEFAULT_BODYPART_ICON_ORGANIC else if(status == BODYPART_ROBOTIC) icon = DEFAULT_BODYPART_ICON_ROBOTIC + body_markings = null if(owner) owner.updatehealth() @@ -332,14 +334,18 @@ species_color = "" if("mam_body_markings" in S.default_features) + var/datum/sprite_accessory/Smark + Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] if(H.dna.features.["mam_body_markings"] != "None") + body_markings_icon = Smark.icon body_markings = lowertext(H.dna.features.["mam_body_markings"]) if(MATRIXED) markings_color = list(colorlist) else + body_markings = "plain" markings_color = (H.dna.features.["mcolor"]) else - body_markings = "None" + body_markings = null markings_color = "" if(!dropping_limb && H.dna.check_mutation(HULK)) @@ -354,6 +360,7 @@ if(status == BODYPART_ROBOTIC) dmg_overlay_type = "robotic" + body_markings = null if(dropping_limb) no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner. @@ -385,11 +392,11 @@ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir) if(burnstate) . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) - if(body_markings) + if(body_markings && status != BODYPART_ROBOTIC) if(use_digitigrade == NOT_DIGITIGRADE) - . += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux @@ -447,9 +454,9 @@ marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else if(!use_digitigrade) - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking // Citadel End @@ -461,7 +468,7 @@ if(species_id == "husk") auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir) else - auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir) + auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir) . += auxmarking else @@ -475,21 +482,21 @@ . += aux if(body_markings) if(species_id == "husk") - auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[aux_zone]", -aux_layer, image_dir) + auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir) else - auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir) + auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir) . += auxmarking if(body_markings) if(species_id == "husk") - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else if(!use_digitigrade) - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking return diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 9cc56a6ca8..a2e8017956 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -178,6 +178,7 @@ L.update_limb(fixed_icon, src) if(robotic) L.change_bodypart_status(BODYPART_ROBOTIC) + L.body_markings = null . = L /mob/living/carbon/monkey/newBodyPart(zone, robotic, fixed_icon) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index af2c625670..702ddb71a3 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1438,6 +1438,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 20 restricted_roles = list("Assistant") +/datum/uplink_item/role_restricted/goldenbox + name = "Gold Toolbox" + desc = "A gold planted plastitanium toolbox loaded with tools. Comes with a set of AI detection multi-tool and a pare of combat gloves." + item = /obj/item/storage/toolbox/gold_real + cost = 5 // Has synda tools + gloves + a robust weapon + restricted_roles = list("Assistant", "Curator") //Curator do to being made of gold - It fits the theme + /datum/uplink_item/role_restricted/brainwash_disk name = "Brainwashing Surgery Program" desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \ diff --git a/html/changelogs/AutoChangeLog-pr-8316.yml b/html/changelogs/AutoChangeLog-pr-8316.yml new file mode 100644 index 0000000000..b51a40c846 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8316.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "makes collars only locked via key" diff --git a/html/changelogs/AutoChangeLog-pr-8322.yml b/html/changelogs/AutoChangeLog-pr-8322.yml new file mode 100644 index 0000000000..188c988021 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8322.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "charging" diff --git a/html/changelogs/AutoChangeLog-pr-8323.yml b/html/changelogs/AutoChangeLog-pr-8323.yml new file mode 100644 index 0000000000..0c4fc13b48 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8323.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "Combat inducers for COMBAT!" diff --git a/html/changelogs/AutoChangeLog-pr-8334.yml b/html/changelogs/AutoChangeLog-pr-8334.yml new file mode 100644 index 0000000000..3c9152c257 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8334.yml @@ -0,0 +1,4 @@ +author: "dtfe3" +delete-after: True +changes: + - tweak: "Increased music maxlines from 300 to 600" diff --git a/html/changelogs/AutoChangeLog-pr-8341.yml b/html/changelogs/AutoChangeLog-pr-8341.yml new file mode 100644 index 0000000000..50dedb7374 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8341.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "golden swag boxes" diff --git a/html/changelogs/AutoChangeLog-pr-8342.yml b/html/changelogs/AutoChangeLog-pr-8342.yml new file mode 100644 index 0000000000..a159f3240f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8342.yml @@ -0,0 +1,7 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Adds a few important clockcult tips." + - rscadd: "Added Mech Sensors, a brass-created trap that activates when a mech not controlled by a cultist crosses it." + - rscadd: "Added power nullifiers, an emp trap that emps everything in a 3x3 area, with the center suffering a heavy EMP." + - tweak: "Brass Skewers now deal 50 damage to mechs." diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 90c7e42c8e..6099a3f037 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index a8d2a2aef3..50c143b9cb 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/icons/mob/inhands/equipment/backpack_lefthand.dmi b/icons/mob/inhands/equipment/backpack_lefthand.dmi index c37d12e2c0..0e466486c5 100644 Binary files a/icons/mob/inhands/equipment/backpack_lefthand.dmi and b/icons/mob/inhands/equipment/backpack_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/backpack_righthand.dmi b/icons/mob/inhands/equipment/backpack_righthand.dmi index 08e05e055e..1c265a4137 100644 Binary files a/icons/mob/inhands/equipment/backpack_righthand.dmi and b/icons/mob/inhands/equipment/backpack_righthand.dmi differ diff --git a/icons/obj/assemblies/electronic_setups.dmi b/icons/obj/assemblies/electronic_setups.dmi index 58ef0903be..5804c3f8ab 100644 Binary files a/icons/obj/assemblies/electronic_setups.dmi and b/icons/obj/assemblies/electronic_setups.dmi differ diff --git a/icons/obj/clockwork_objects.dmi b/icons/obj/clockwork_objects.dmi index 5b8fc246cb..56cfdf468b 100644 Binary files a/icons/obj/clockwork_objects.dmi and b/icons/obj/clockwork_objects.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 0c9155827b..d6ffc12ae7 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 1454d17a16..8f6b844a23 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm index 4dbd4b61db..8af0dc2013 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm @@ -74,10 +74,12 @@ /obj/item/stock_parts/cell/magrifle_e name = "magrifle power supply" maxcharge = 14400 + chargerate = 3520 /obj/item/stock_parts/cell/magpistol_e name = "magpistol power supply" maxcharge = 6000 + chargerate = 1000 ///sci designs/// diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi index 36313cce66..e1284679b3 100644 Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ diff --git a/strings/clockwork_cult_changelog.txt b/strings/clockwork_cult_changelog.txt index c963ca91d1..3c5e5f5ef6 100644 --- a/strings/clockwork_cult_changelog.txt +++ b/strings/clockwork_cult_changelog.txt @@ -1 +1,4 @@ -Stargazers have been removed. Integration cogs are now the primary way of creating power. \ No newline at end of file +Stargazers have been removed. Integration cogs are now the primary way of creating power. +Brass Skewers now deal damage to mechs. +Mech Sensors are now available. They're similar to pressure sensors, but trigger if a mech steps on them, and can be built the same way. +Power nullifiers are now available. Upon triggering, they send out a small 3x3 EMP, affecting cultists and enemies alike. diff --git a/strings/tips.txt b/strings/tips.txt index 9571527853..e9c1350469 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -229,6 +229,8 @@ As a Servant, wraith spectacles let you see everything through walls at virtuall As a Servant, declaring war empowers a huge amount of your tools and constructs, and makes you into a spaceproof, armored clockwork automaton. As a Servant, converting or sabotaging Science and Genetics can make defending the Ark much easier. As a Servant, the Clockwork Armaments scripture allows you to summon armor and/or a weapon at will. Use it whenever you unlock it! +As a Servant, Brass created from your replica fabricators can be ground down in reagent grinders for teslium and iron. +You can bypass Servant created pressure sensors if you walk instead of jog on them. Alternatively, you can also become a Servant of Ratvar. You can deconvert Cultists of Nar-Sie and Servants of Ratvar by feeding them large amounts of holy water. Unlike revolutionaries, implanting them with mindshield implants won't do it! Tiles sprayed with holy water will permanently block Servants of Ratvar from teleporting onto them. As a Wizard, you can turn people to stone, then animate the resulting statue with a staff of animation to create an extremely powerful minion, for all of 5 minutes at least. diff --git a/tgstation.dme b/tgstation.dme index 6965fccb1a..e15df45bc2 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1236,8 +1236,10 @@ #include "code\modules\antagonists\clockcult\clock_structures\wall_gear.dm" #include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\lever.dm" #include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\pressure_sensor.dm" +#include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\pressure_sensor_mech.dm" #include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\repeater.dm" #include "code\modules\antagonists\clockcult\clock_structures\traps\brass_skewer.dm" +#include "code\modules\antagonists\clockcult\clock_structures\traps\power_null.dm" #include "code\modules\antagonists\clockcult\clock_structures\traps\steam_vent.dm" #include "code\modules\antagonists\cult\blood_magic.dm" #include "code\modules\antagonists\cult\cult.dm"