From 7f65c50ba6943bfe1114bc793f7257100f97c088 Mon Sep 17 00:00:00 2001 From: Geeves Date: Wed, 13 Nov 2019 22:45:27 +0200 Subject: [PATCH 1/6] Robotics Mechfab Update (#7359) --- aurorastation.dme | 15 +- code/game/mecha/equipment/tools/tools.dm | 23 +- code/game/mecha/mech_fabricator.dm | 4 +- .../designs/mechfab/hardsuit/modules.dm | 132 +++ .../research/designs/mechfab/hardsuit/rigs.dm | 64 ++ .../research/designs/mechfab/mechs/durand.dm | 58 ++ .../research/designs/mechfab/mechs/gygax.dm | 58 ++ .../research/designs/mechfab/mechs/hermes.dm | 51 + .../mechs/mech_equipment/_equipment.dm | 24 + .../mechfab/mechs/mech_equipment/tools.dm | 144 +++ .../mechfab/mechs/mech_equipment/weaponry.dm | 112 +++ .../designs/mechfab/mechs/odysseus.dm | 51 + .../research/designs/mechfab/mechs/ripley.dm | 49 + .../designs/mechfab/prosthetics/external.dm | 38 + .../designs/mechfab/prosthetics/internal.dm | 35 + .../research/designs/mechfab/robot/robot.dm | 111 +++ .../designs/mechfab/robot/robot_upgrades.dm | 52 + .../research/designs/mechfab_designs.dm | 934 ------------------ html/changelogs/geeves - roboticsRedux.yml | 9 + 19 files changed, 1006 insertions(+), 958 deletions(-) create mode 100644 code/modules/research/designs/mechfab/hardsuit/modules.dm create mode 100644 code/modules/research/designs/mechfab/hardsuit/rigs.dm create mode 100644 code/modules/research/designs/mechfab/mechs/durand.dm create mode 100644 code/modules/research/designs/mechfab/mechs/gygax.dm create mode 100644 code/modules/research/designs/mechfab/mechs/hermes.dm create mode 100644 code/modules/research/designs/mechfab/mechs/mech_equipment/_equipment.dm create mode 100644 code/modules/research/designs/mechfab/mechs/mech_equipment/tools.dm create mode 100644 code/modules/research/designs/mechfab/mechs/mech_equipment/weaponry.dm create mode 100644 code/modules/research/designs/mechfab/mechs/odysseus.dm create mode 100644 code/modules/research/designs/mechfab/mechs/ripley.dm create mode 100644 code/modules/research/designs/mechfab/prosthetics/external.dm create mode 100644 code/modules/research/designs/mechfab/prosthetics/internal.dm create mode 100644 code/modules/research/designs/mechfab/robot/robot.dm create mode 100644 code/modules/research/designs/mechfab/robot/robot_upgrades.dm delete mode 100644 code/modules/research/designs/mechfab_designs.dm create mode 100644 html/changelogs/geeves - roboticsRedux.yml diff --git a/aurorastation.dme b/aurorastation.dme index 2197ce10a3e..667049f7c69 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -2273,7 +2273,6 @@ #include "code\modules\research\stockparts.dm" #include "code\modules\research\designs\AI_modules_designs.dm" #include "code\modules\research\designs\circuit_designs.dm" -#include "code\modules\research\designs\mechfab_designs.dm" #include "code\modules\research\designs\medical_designs.dm" #include "code\modules\research\designs\mining_designs.dm" #include "code\modules\research\designs\modular_computer_designs.dm" @@ -2281,6 +2280,20 @@ #include "code\modules\research\designs\stock_parts_designs.dm" #include "code\modules\research\designs\tcom_designs.dm" #include "code\modules\research\designs\weapon_designs.dm" +#include "code\modules\research\designs\mechfab\hardsuit\modules.dm" +#include "code\modules\research\designs\mechfab\hardsuit\rigs.dm" +#include "code\modules\research\designs\mechfab\mechs\durand.dm" +#include "code\modules\research\designs\mechfab\mechs\gygax.dm" +#include "code\modules\research\designs\mechfab\mechs\hermes.dm" +#include "code\modules\research\designs\mechfab\mechs\odysseus.dm" +#include "code\modules\research\designs\mechfab\mechs\ripley.dm" +#include "code\modules\research\designs\mechfab\mechs\mech_equipment\_equipment.dm" +#include "code\modules\research\designs\mechfab\mechs\mech_equipment\tools.dm" +#include "code\modules\research\designs\mechfab\mechs\mech_equipment\weaponry.dm" +#include "code\modules\research\designs\mechfab\prosthetics\external.dm" +#include "code\modules\research\designs\mechfab\prosthetics\internal.dm" +#include "code\modules\research\designs\mechfab\robot\robot.dm" +#include "code\modules\research\designs\mechfab\robot\robot_upgrades.dm" #include "code\modules\research\xenoarchaeology\chemistry.dm" #include "code\modules\research\xenoarchaeology\geosample.dm" #include "code\modules\research\xenoarchaeology\manuals.dm" diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index ca039570e25..8f9e658744b 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -815,7 +815,7 @@ /obj/item/mecha_parts/mecha_equipment/generator name = "phoron generator" - desc = "Generates power using solid phoron as fuel. Pollutes the environment." + desc = "Generates power using solid phoron as fuel." icon_state = "tesla" origin_tech = list(TECH_PHORON = 2, TECH_POWER = 2, TECH_ENGINEERING = 1) equip_cooldown = 10 @@ -892,29 +892,13 @@ /obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user) var/result = load_fuel(weapon) if(isnull(result)) - user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.") + user.visible_message("[user] tries to shove [weapon] into [src].","[fuel] traces minimal. [weapon] cannot be used as fuel.") else if(!result) to_chat(user, "Unit is full.") else user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.") return -/obj/item/mecha_parts/mecha_equipment/generator/critfail() - ..() - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/GM = new - if(prob(10)) - T.assume_gas("phoron", 100, 1500+T0C) - T.visible_message("The [src] suddenly disgorges a cloud of heated phoron.") - destroy() - else - T.assume_gas("phoron", 5, istype(T) ? T.air.temperature : T20C) - T.visible_message("The [src] suddenly disgorges a cloud of phoron.") - T.assume_air(GM) - return - /obj/item/mecha_parts/mecha_equipment/generator/process() // Process every 10 ds. if ((last_tick + 10) > world.time) @@ -957,9 +941,6 @@ fuel_type = /obj/item/stack/material/uranium var/rad_per_cycle = 0.3 -/obj/item/mecha_parts/mecha_equipment/generator/nuclear/critfail() - return - /obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() . = ..() if(. != PROCESS_KILL) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index fb00cbe1b93..9b4ba2f7e74 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -1,8 +1,8 @@ /obj/machinery/mecha_part_fabricator icon = 'icons/obj/robotics.dmi' icon_state = "fab-idle" - name = "Exosuit Fabricator" - desc = "A machine used for construction of robotcs and mechas." + name = "Mechatronic Fabricator" + desc = "A general purpose fabricator that can be used to fabricate robotic equipment." density = 1 anchored = 1 use_power = 1 diff --git a/code/modules/research/designs/mechfab/hardsuit/modules.dm b/code/modules/research/designs/mechfab/hardsuit/modules.dm new file mode 100644 index 00000000000..7e7fec2c0fa --- /dev/null +++ b/code/modules/research/designs/mechfab/hardsuit/modules.dm @@ -0,0 +1,132 @@ +/datum/design/hardsuitmodules + build_type = MECHFAB + category = "Hardsuit (Modules)" + time = 10 + +/datum/design/hardsuitmodules/iss_module + name = "IIS module" + desc = "An integrated intelligence system module suitable for most hardsuits." + id = "iis_module" + req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 3) + materials = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 5000) + build_path = /obj/item/rig_module/ai_container + +/datum/design/hardsuitmodules/sink_module + name = "hardsuit power sink" + desc = "An heavy-duty power sink suitable for hardsuits." + id = "power_sink_module" + req_tech = list(TECH_POWER = 4, TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_ILLEGAL = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold"= 2000, "silver"= 3000, "glass"= 2000) + build_path = /obj/item/rig_module/power_sink + +/datum/design/hardsuitmodules/meson_module + name = "hardsuit meson scanner" + desc = "A layered, translucent visor system for a hardsuit." + id = "meson_module" + req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) + materials = list("glass"= 5000, DEFAULT_WALL_MATERIAL= 1500) + build_path = /obj/item/rig_module/vision/meson + +/datum/design/hardsuitmodules/sechud_module + name = "hardsuit security hud" + desc = "A simple tactical information system for a hardsuit." + id = "sechud_module" + req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3) + materials = list("glass" = 5000, DEFAULT_WALL_MATERIAL =1500) + build_path = /obj/item/rig_module/vision/sechud + +/datum/design/hardsuitmodules/medhud_module + name = "hardsuit medical hud" + desc = "A simple medical status indicator for a hardsuit." + id = "medhu_module" + req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3) + materials = list("glass"= 5000, DEFAULT_WALL_MATERIAL =1500) + build_path = /obj/item/rig_module/vision/medhud + +/datum/design/hardsuitmodules/nvg_module + name = "hardsuit night vision interface" + desc = "A multi input night vision system for a hardsuit." + id = "nvg_module" + req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 3, TECH_MAGNET = 4) + materials = list("glass" = 5000, DEFAULT_WALL_MATERIAL = 1500, "uranium" = 5000) + build_path = /obj/item/rig_module/vision/nvg + +/datum/design/hardsuitmodules/healthscanner_module + name = "hardsuit health scanner" + desc = "A hardsuit-mounted health scanner." + id = "healthscanner_module" + req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 3, TECH_MAGNET = 2) + materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 2500) + build_path = /obj/item/rig_module/device/healthscanner + +/datum/design/hardsuitmodules/chem_module + name = "mounted chemical injector" + desc = "A complex web of tubing and a large needle suitable for hardsuit use." + id = "chem_module" + req_tech = list(TECH_BIO = 5, TECH_MATERIAL = 4, TECH_DATA = 3, TECH_PHORON = 2) + materials = list("glass" = 9250, DEFAULT_WALL_MATERIAL = 10000, "gold" = 2500, "silver" = 4250, "phoron" = 5500) + build_path = /obj/item/rig_module/chem_dispenser/injector + +/datum/design/hardsuitmodules/plasmacutter_module + name = "hardsuit plasma cutter" + desc = "A self-sustaining plasma arc capable of cutting through walls." + id = "plasmacutter_module" + req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_PHORON = 4) + materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250) + build_path = /obj/item/rig_module/mounted/plasmacutter + +/datum/design/hardsuitmodules/jet_module + name = "hardsuit maneuvering jets" + desc = "A compact gas thruster system for a hardsuit." + id = "jet_module" + req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_POWER = 2) + materials = list("glass" = 4250, DEFAULT_WALL_MATERIAL = 15000, "silver" = 4250,"uranium" = 5250) + build_path = /obj/item/rig_module/maneuvering_jets + +/datum/design/hardsuitmodules/drill_module + name = "hardsuit drill mount" + desc = "A very heavy diamond-tipped drill." + id = "drill_module" + req_tech = list(TECH_ENGINEERING = 5, TECH_MATERIAL = 5, TECH_POWER = 4, TECH_MAGNET = 4) + materials = list("glass" = 2250, DEFAULT_WALL_MATERIAL = 55000, "silver" = 5250, "diamond" = 3750) + build_path = /obj/item/rig_module/device/drill + +/datum/design/hardsuitmodules/rfd_c_module + name = "RFD-C mount" + desc = "A cell-powered Rapid-Fabrication-Device C-Class for a hardsuit." + id = "rcd_module" + req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5, TECH_POWER = 5, TECH_BLUESPACE = 4) + materials = list(DEFAULT_WALL_MATERIAL= 30000, "phoron" = 12500, "silver" = 10000, "gold" = 10000) + build_path = /obj/item/rig_module/device/rfd_c + +/datum/design/hardsuitmodules/actuators_module + name = "leg actuators" + desc = "A set of electromechanical actuators, for safe traversal of multilevelled areas." + id = "actuators_module" + req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_POWER = 3) + materials = list(DEFAULT_WALL_MATERIAL = 85000, "glass" = 1250, "silver" = 5250, "gold" = 2750) + build_path = /obj/item/rig_module/actuators + +/datum/design/hardsuitmodules/taser_module + name = "mounted taser" + desc = "A palm-mounted nonlethal energy projector." + id = "taser_module" + req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_MAGNET = 2) + materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 5250) + build_path = /obj/item/rig_module/mounted/taser + +/datum/design/hardsuitmodules/egun_module + name = "mounted energy gun" + desc = "A forearm-mounted energy projector." + id = "egun_module" + req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 4, TECH_COMBAT = 4, TECH_MAGNET = 3) + materials = list(DEFAULT_WALL_MATERIAL= 7000, "glass"= 2250, "uranium"= 3250, "gold"= 2500) + build_path = /obj/item/rig_module/mounted/egun + +/datum/design/hardsuitmodules/cooling_module + name = "mounted cooling unit" + desc = "A heat sink with liquid cooled radiator." + id = "cooling_module" + req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL= 7000, "glass"= 5500) + build_path = /obj/item/rig_module/cooling_unit \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/hardsuit/rigs.dm b/code/modules/research/designs/mechfab/hardsuit/rigs.dm new file mode 100644 index 00000000000..033dcfa060b --- /dev/null +++ b/code/modules/research/designs/mechfab/hardsuit/rigs.dm @@ -0,0 +1,64 @@ +/datum/design/rig + build_type = MECHFAB + category = "Hardsuit (Assemblies)" + materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500) + req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_MAGNET = 3, TECH_POWER = 3) + time = 20 + +/datum/design/rig/ce + name = "advanced voidsuit control module assembly" + desc = "An assembly frame for an advanced voidsuit that protects against hazardous, low pressure environments." + id = "rig_ce" + build_path = /obj/item/rig_assembly/ce + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_POWER = 4) + materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "silver" = 5500, "gold" = 5500, "phoron" = 7550) + +/datum/design/rig/eva + name = "EVA suit control module assembly" + desc = "An assembly for light rig that is desiged for repairs and maintenance to the outside of habitats and vessels." + id = "rig_eva" + build_path = /obj/item/rig_assembly/eva + +/datum/design/rig/industrial + name = "industrial suit control module assembly" + desc = "An assembly for a heavy, powerful rig used by construction crews and mining corporations." + id = "rig_industrial" + build_path = /obj/item/rig_assembly/industrial + +/datum/design/rig/hazmat + name = "AMI control module assembly" + desc = "An assembly for Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." + id = "rig_hazmat" + build_path = /obj/item/rig_assembly/hazmat + materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 25000, "silver" = 5500, "gold" = 5500, "phoron" = 7550) + +/datum/design/rig/medical + name = "rescue suit control module assembly" + desc = "An assembly for a durable suit designed for medical rescue in high risk areas." + id = "rig_medical" + build_path = /obj/item/rig_assembly/medical + materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "silver" = 5500, "gold" = 3500, "phoron" = 7550) + +/datum/design/rig/hazard + name = "hazard hardsuit control module" + desc = "An assembly for a security hardsuit designed for prolonged EVA in dangerous environments." + id = "rig_hazard" + build_path = /obj/item/rig_assembly/combat/hazard + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 3) + materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500, "silver" = 3500, "gold" = 5500) + +/datum/design/rig/combat + name = "combat hardsuit control module assembly" + desc = "An assembly frame for a sleek and dangerous hardsuit for active combat." + id = "rig_combat" + build_path = /obj/item/rig_assembly/combat/combat + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 5) + materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500, "silver" = 3500, "gold" = 3500, "uranium" = 5550, "diamond" = 7500) + +/datum/design/rig/hacker + name = "cybersuit control module assembly" + desc = "An assembly for an advanced powered armour suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." + id = "rig_hacker" + build_path = /obj/item/rig_assembly/combat/illegal/hacker + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3) + materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "gold" = 2500, "silver" = 3500, "uranium" = 5550) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/durand.dm b/code/modules/research/designs/mechfab/mechs/durand.dm new file mode 100644 index 00000000000..a3874440973 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/durand.dm @@ -0,0 +1,58 @@ +/datum/design/item/mechfab/durand + category = "Durand" + +/datum/design/item/mechfab/durand/chassis + name = "Durand chassis" + id = "durand_chassis" + build_path = /obj/item/mecha_parts/chassis/durand + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/durand/torso + name = "Durand torso" + id = "durand_torso" + build_path = /obj/item/mecha_parts/part/durand_torso + time = 30 + materials = list(DEFAULT_WALL_MATERIAL = 55000, "glass" = 20000, "silver" = 10000) + +/datum/design/item/mechfab/durand/head + name = "Durand head" + id = "durand_head" + build_path = /obj/item/mecha_parts/part/durand_head + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 10000, "silver" = 3000) + +/datum/design/item/mechfab/durand/left_arm + name = "Durand left arm" + id = "durand_left_arm" + build_path = /obj/item/mecha_parts/part/durand_left_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000) + +/datum/design/item/mechfab/durand/right_arm + name = "Durand right arm" + id = "durand_right_arm" + build_path = /obj/item/mecha_parts/part/durand_right_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000) + +/datum/design/item/mechfab/durand/left_leg + name = "Durand left leg" + id = "durand_left_leg" + build_path = /obj/item/mecha_parts/part/durand_left_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000) + +/datum/design/item/mechfab/durand/right_leg + name = "Durand right leg" + id = "durand_right_leg" + build_path = /obj/item/mecha_parts/part/durand_right_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000) + +/datum/design/item/mechfab/durand/armour + name = "Durand armour plates" + id = "durand_armour" + build_path = /obj/item/mecha_parts/part/durand_armour + time = 60 + materials = list(DEFAULT_WALL_MATERIAL = 50000, "uranium" = 10000) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/gygax.dm b/code/modules/research/designs/mechfab/mechs/gygax.dm new file mode 100644 index 00000000000..35d77da0f16 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/gygax.dm @@ -0,0 +1,58 @@ +/datum/design/item/mechfab/gygax + category = "Gygax" + +/datum/design/item/mechfab/gygax/chassis + name = "Gygax chassis" + id = "gygax_chassis" + build_path = /obj/item/mecha_parts/chassis/gygax + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/gygax/torso + name = "Gygax torso" + id = "gygax_torso" + build_path = /obj/item/mecha_parts/part/gygax_torso + time = 30 + materials = list(DEFAULT_WALL_MATERIAL = 50000, "glass" = 20000) + +/datum/design/item/mechfab/gygax/head + name = "Gygax head" + id = "gygax_head" + build_path = /obj/item/mecha_parts/part/gygax_head + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 10000) + +/datum/design/item/mechfab/gygax/left_arm + name = "Gygax left arm" + id = "gygax_left_arm" + build_path = /obj/item/mecha_parts/part/gygax_left_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 30000) + +/datum/design/item/mechfab/gygax/right_arm + name = "Gygax right arm" + id = "gygax_right_arm" + build_path = /obj/item/mecha_parts/part/gygax_right_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 30000) + +/datum/design/item/mechfab/gygax/left_leg + name = "Gygax left leg" + id = "gygax_left_leg" + build_path = /obj/item/mecha_parts/part/gygax_left_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 35000) + +/datum/design/item/mechfab/gygax/right_leg + name = "Gygax right leg" + id = "gygax_right_leg" + build_path = /obj/item/mecha_parts/part/gygax_right_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 35000) + +/datum/design/item/mechfab/gygax/armour + name = "Gygax armour plates" + id = "gygax_armour" + build_path = /obj/item/mecha_parts/part/gygax_armour + time = 60 + materials = list(DEFAULT_WALL_MATERIAL = 50000, "diamond" = 10000) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/hermes.dm b/code/modules/research/designs/mechfab/mechs/hermes.dm new file mode 100644 index 00000000000..df4ef362241 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/hermes.dm @@ -0,0 +1,51 @@ +/datum/design/item/mechfab/hermes + category = "Hermes" + +/datum/design/item/mechfab/hermes/chassis + name = "Hermes chassis" + id = "hermes_chassis" + build_path = /obj/item/mecha_parts/chassis/hermes + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 20000) + +/datum/design/item/mechfab/hermes/torso + name = "Hermes torso" + id = "hermes_torso" + build_path = /obj/item/mecha_parts/part/hermes_torso + time = 18 + materials = list(DEFAULT_WALL_MATERIAL = 21000) + +/datum/design/item/mechfab/hermes/head + name = "Hermes head" + id = "hermes_head" + build_path = /obj/item/mecha_parts/part/hermes_head + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000) + +/datum/design/item/mechfab/hermes/left_arm + name = "Hermes left arm" + id = "hermes_left_arm" + build_path = /obj/item/mecha_parts/part/hermes_left_arm + time = 12 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mechfab/hermes/right_arm + name = "Hermes right arm" + id = "hermes_right_arm" + build_path = /obj/item/mecha_parts/part/hermes_right_arm + time = 12 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mechfab/hermes/left_leg + name = "Hermes left leg" + id = "hermes_left_leg" + build_path = /obj/item/mecha_parts/part/hermes_left_leg + time = 13 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mechfab/hermes/right_leg + name = "Hermes right leg" + id = "hermes_right_leg" + build_path = /obj/item/mecha_parts/part/hermes_right_leg + time = 13 + materials = list(DEFAULT_WALL_MATERIAL = 10000) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/mech_equipment/_equipment.dm b/code/modules/research/designs/mechfab/mechs/mech_equipment/_equipment.dm new file mode 100644 index 00000000000..139959946d9 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/mech_equipment/_equipment.dm @@ -0,0 +1,24 @@ +/datum/design/item/mecha + build_type = MECHFAB + category = "Exosuit Equipment" + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mecha/AssembleDesignDesc() + if(!desc) + desc = "Allows for the construction of \a '[item_name]' exosuit module." + +/datum/design/item/mecha/tracking + name = "Exosuit tracking beacon" + id = "exotrack" + build_type = MECHFAB + time = 5 + materials = list(DEFAULT_WALL_MATERIAL = 500) + build_path = /obj/item/mecha_parts/mecha_tracking + +/datum/design/item/mecha/tracking/control + name = "Exosuit control beacon" + id = "exocontrol" + time = 30 + materials = list(DEFAULT_WALL_MATERIAL = 3000) + build_path = /obj/item/mecha_parts/mecha_tracking/control \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/mech_equipment/tools.dm b/code/modules/research/designs/mechfab/mechs/mech_equipment/tools.dm new file mode 100644 index 00000000000..d8fedf9421b --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/mech_equipment/tools.dm @@ -0,0 +1,144 @@ +/datum/design/item/mecha/tool + build_type = MECHFAB + category = "Exosuit Equipment (Tools)" + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mecha/tool/hydraulic_clamp + name = "Hydraulic clamp" + id = "hydraulic_clamp" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + +/datum/design/item/mecha/tool/drill + name = "Drill" + id = "drill" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill + +/datum/design/item/mecha/tool/kinetic_accelerator + name = "Burst kinetic accelerator" + id = "kinetic_accelerator" + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_PHORON = 3) + materials = list("glass" = 2250, DEFAULT_WALL_MATERIAL = 55000, "silver" = 5250) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/kin_accelerator + +/datum/design/item/mecha/tool/kinetic_accelerator/burst + name = "Kinetic accelerator" + id = "kinetic_accelerator_burst" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_MAGNET = 4, TECH_PHORON = 4) + materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 60000, "silver" = 7250) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/kin_accelerator/burst + +/datum/design/item/mecha/tool/extinguisher + name = "Extinguisher" + id = "extinguisher" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher + +/datum/design/item/mecha/tool/cable_layer + name = "Cable layer" + id = "mech_cable_layer" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer + +/datum/design/item/mecha/tool/sleeper + name = "Sleeper" + id = "mech_sleeper" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 10000) + +/datum/design/item/mecha/tool/syringe_gun + name = "Syringe gun" + id = "mech_syringe_gun" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000) + +/datum/design/item/mecha/tool/passenger + name = "Passenger compartment" + id = "mech_passenger" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/passenger + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + +/datum/design/item/mecha/tool/wormhole_gen + name = "Wormhole generator" + desc = "An exosuit module that can generate small quasi-stable wormholes." + id = "mech_wormhole_gen" + req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator + +/datum/design/item/mecha/tool/teleporter + name = "Teleporter" + desc = "An exosuit module that allows teleportation to any position in view." + id = "mech_teleporter" + req_tech = list(TECH_BLUESPACE = 6, TECH_MAGNET = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/teleporter + +/datum/design/item/mecha/tool/rfd_c + name = "RFD-C" + desc = "An exosuit-mounted Rapid-Fabrication-Device C-Class." + id = "mech_rfd_c" + time = 120 + materials = list(DEFAULT_WALL_MATERIAL = 30000, "phoron" = 25000, "silver" = 20000, "gold" = 20000) + req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/rfd_c + +/datum/design/item/mecha/tool/gravcatapult + name = "Gravitational catapult" + desc = "An exosuit-mounted gravitational catapult." + id = "mech_gravcatapult" + req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult + +/datum/design/item/mecha/tool/repair_droid + name = "Repair droid" + desc = "Automated repair droid, exosuits' best companion. BEEP BOOP" + id = "mech_repair_droid" + req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 1000, "silver" = 2000, "glass" = 5000) + build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid + +/datum/design/item/mecha/tool/phoron_generator + name = "Phoron generator" + desc = "Converts sheets of phoron into energy." + id = "mech_phoron_generator" + req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINEERING = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/generator + materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000) + +/datum/design/item/mecha/tool/energy_relay + name = "Energy relay" + desc = "Saps power from APCs in range to power on-board energy cell." + id = "mech_energy_relay" + req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "silver" = 3000, "glass" = 2000) + build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay + +/datum/design/item/mecha/tool/ccw_armor + name = "CQC armor booster" + desc = "Exosuit close-combat armor booster. Anti-melee." + id = "mech_cqc_armor" + req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4) + materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 5000) + build_path = /obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster + +/datum/design/item/mecha/tool/proj_armor + name = "Ranged-combat armor booster" + desc = "Exosuit projectile armor booster. Anti-firearm." + id = "mech_proj_armor" + req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 5000) + build_path = /obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster + +/datum/design/item/mecha/tool/diamond_drill + name = "Diamond drill" + desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger." + id = "mech_diamond_drill" + req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "diamond" = 6500) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + +/datum/design/item/mecha/tool/generator_nuclear + name = "Nuclear generator" + desc = "Exosuit-held nuclear reactor. Converts uranium into energy. Leaks radiation." + id = "mech_generator_nuclear" + req_tech = list(TECH_POWER= 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/mech_equipment/weaponry.dm b/code/modules/research/designs/mechfab/mechs/mech_equipment/weaponry.dm new file mode 100644 index 00000000000..85b47856816 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/mech_equipment/weaponry.dm @@ -0,0 +1,112 @@ +/datum/design/item/mecha/weapon + req_tech = list(TECH_COMBAT = 3) + build_type = MECHFAB + category = "Exosuit Equipment (Weapons)" + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mecha/weapon/flamethrower + name = "Flamethrower" + id = "flamethrower" + req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_COMBAT = 2, TECH_PHORON = 2) + materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 40000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/flamethrower + +/datum/design/item/mecha/weapon/taser + name = "Mounted taser carbine" + id = "mech_taser" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser + +/datum/design/item/mecha/weapon/lmg + name = "Mounted machine gun" + id = "mech_lmg" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + +/datum/design/item/mecha/weapon/scattershot + name = "Mounted shotgun" + id = "mech_scattershot" + req_tech = list(TECH_COMBAT = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot + +/datum/design/item/mecha/weapon/laser + name = "Mounted laser carbine" + id = "mech_laser" + req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser + +/datum/design/item/mecha/weapon/laser_rigged + name = "Jury-rigged welder-laser" + desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits." + id = "mech_laser_rigged" + req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser + +/datum/design/item/mecha/weapon/laser_heavy + name = "Mounted laser cannon" + id = "mech_laser_heavy" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy + +/datum/design/item/mecha/weapon/ion + name = "Heavy ion cannon" + id = "mech_ion" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion + +/datum/design/item/mecha/weapon/laser_gatling + name = "Mounted gatling laser" + id = "laser_gatling" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/gatling + materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000) + +/datum/design/item/mecha/weapon/xray_gatling + name = "Gatling xray gun" + id = "xray_gatling" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray + materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "phoron" = 6000) + +/datum/design/item/mecha/weapon/tesla_gun + name = "Mounted tesla cannon" + id = "tesla_gun" + req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 5, TECH_MATERIAL = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla + materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 6000, "phoron" = 6000) + +/datum/design/item/mecha/weapon/gyro_gun + name = "Mounted gyrojet autocannon" + id = "gyro_gun" + req_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 5, TECH_MATERIAL = 6, TECH_ILLEGAL = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gyro + materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 6000, "phoron" = 6000, "diamond" = 7500) + +/datum/design/item/mecha/weapon/grenade_launcher + name = "Grenade launcher" + id = "mech_grenade_launcher" + req_tech = list(TECH_COMBAT = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + +/datum/design/item/mecha/weapon/clusterbang_launcher + name = "Clusterbang Grenade launcher" + desc = "A weapon that violates the Geneva Convention at 6 rounds per minute." + id = "clusterbang_launcher" + req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) + materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "uranium" = 6000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited + +/datum/design/item/mecha/weapon/plasma_cutter + name = "Heavy plasma cutter" + desc = "A large mining tool capable of expelling concentrated plasma bursts, useful for crushing rocks." + id = "mecha_plasmacutter" + req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ENGINEERING = 4) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "gold" = 1000, "phoron" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma + +/datum/design/item/mecha/weapon/incendiary + name = "Mounted incendiary carbine" + desc = "A weapon for combat exosuits. Shoots incendiary shells." + id = "mecha_incendiary" + req_tech = list(TECH_COMBAT= 4, TECH_MATERIAL = 4, TECH_PHORON = 3) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "phoron" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/mechs/odysseus.dm b/code/modules/research/designs/mechfab/mechs/odysseus.dm new file mode 100644 index 00000000000..125078a07b2 --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/odysseus.dm @@ -0,0 +1,51 @@ +/datum/design/item/mechfab/odysseus + category = "Odysseus" + +/datum/design/item/mechfab/odysseus/chassis + name = "Odysseus chassis" + id = "odysseus_chassis" + build_path = /obj/item/mecha_parts/chassis/odysseus + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 20000) + +/datum/design/item/mechfab/odysseus/torso + name = "Odysseus torso" + id = "odysseus_torso" + build_path = /obj/item/mecha_parts/part/odysseus_torso + time = 18 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/odysseus/head + name = "Odysseus head" + id = "odysseus_head" + build_path = /obj/item/mecha_parts/part/odysseus_head + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 10000) + +/datum/design/item/mechfab/odysseus/left_arm + name = "Odysseus left arm" + id = "odysseus_left_arm" + build_path = /obj/item/mecha_parts/part/odysseus_left_arm + time = 12 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mechfab/odysseus/right_arm + name = "Odysseus right arm" + id = "odysseus_right_arm" + build_path = /obj/item/mecha_parts/part/odysseus_right_arm + time = 12 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + +/datum/design/item/mechfab/odysseus/left_leg + name = "Odysseus left leg" + id = "odysseus_left_leg" + build_path = /obj/item/mecha_parts/part/odysseus_left_leg + time = 13 + materials = list(DEFAULT_WALL_MATERIAL = 15000) + +/datum/design/item/mechfab/odysseus/right_leg + name = "Odysseus right leg" + id = "odysseus_right_leg" + build_path = /obj/item/mecha_parts/part/odysseus_right_leg + time = 13 + materials = list(DEFAULT_WALL_MATERIAL = 15000) diff --git a/code/modules/research/designs/mechfab/mechs/ripley.dm b/code/modules/research/designs/mechfab/mechs/ripley.dm new file mode 100644 index 00000000000..b2188586f8f --- /dev/null +++ b/code/modules/research/designs/mechfab/mechs/ripley.dm @@ -0,0 +1,49 @@ +/datum/design/item/mechfab/ripley + category = "Ripley" + +/datum/design/item/mechfab/ripley/chassis + name = "Ripley chassis" + id = "ripley_chassis" + build_path = /obj/item/mecha_parts/chassis/ripley + time = 10 + materials = list(DEFAULT_WALL_MATERIAL = 20000) + +/datum/design/item/mechfab/ripley/chassis/firefighter + name = "Firefigher chassis" + id = "firefighter_chassis" + build_path = /obj/item/mecha_parts/chassis/firefighter + +/datum/design/item/mechfab/ripley/torso + name = "Ripley torso" + id = "ripley_torso" + build_path = /obj/item/mecha_parts/part/ripley_torso + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 40000, "glass" = 15000) + +/datum/design/item/mechfab/ripley/left_arm + name = "Ripley left arm" + id = "ripley_left_arm" + build_path = /obj/item/mecha_parts/part/ripley_left_arm + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/ripley/right_arm + name = "Ripley right arm" + id = "ripley_right_arm" + build_path = /obj/item/mecha_parts/part/ripley_right_arm + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/ripley/left_leg + name = "Ripley left leg" + id = "ripley_left_leg" + build_path = /obj/item/mecha_parts/part/ripley_left_leg + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 30000) + +/datum/design/item/mechfab/ripley/right_leg + name = "Ripley right leg" + id = "ripley_right_leg" + build_path = /obj/item/mecha_parts/part/ripley_right_leg + time = 15 + materials = list(DEFAULT_WALL_MATERIAL = 30000) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/prosthetics/external.dm b/code/modules/research/designs/mechfab/prosthetics/external.dm new file mode 100644 index 00000000000..e0fd0a598da --- /dev/null +++ b/code/modules/research/designs/mechfab/prosthetics/external.dm @@ -0,0 +1,38 @@ +/datum/design/item/mechfab/prosthetic + category = "Prosthetic (External)" + +//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor +/datum/design/item/mechfab/prosthetic/Fabricate(var/newloc, var/fabricator) + if(istype(fabricator, /obj/machinery/mecha_part_fabricator)) + var/obj/machinery/mecha_part_fabricator/mechfab = fabricator + return new build_path(newloc, mechfab.manufacturer) + return ..() + +// Copied from robot.dm, but reflavoured to be more fitting to prosthetics. +/datum/design/item/mechfab/prosthetic/l_arm + name = "Prosthetic left arm" + id = "robot_l_arm" + build_path = /obj/item/robot_parts/l_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 18000) + +/datum/design/item/mechfab/prosthetic/r_arm + name = "Prosthetic right arm" + id = "robot_r_arm" + build_path = /obj/item/robot_parts/r_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 18000) + +/datum/design/item/mechfab/prosthetic/l_leg + name = "Prosthetic left leg" + id = "robot_l_leg" + build_path = /obj/item/robot_parts/l_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 15000) + +/datum/design/item/mechfab/prosthetic/r_leg + name = "Prosthetic right leg" + id = "robot_r_leg" + build_path = /obj/item/robot_parts/r_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 15000) \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/prosthetics/internal.dm b/code/modules/research/designs/mechfab/prosthetics/internal.dm new file mode 100644 index 00000000000..6b9a2eb2a9a --- /dev/null +++ b/code/modules/research/designs/mechfab/prosthetics/internal.dm @@ -0,0 +1,35 @@ +/datum/design/item/mechfab/prosthetic/internal + category = "Prosthetic (Internal)" + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 9000, "glass" = 3000) + +//make sure the printed organ is actually robotic +/datum/design/item/mechfab/prosthetic/internal/Fabricate() + var/obj/item/organ/O = ..() + O.robotize() + return O + +/datum/design/item/mechfab/prosthetic/internal/heart + name = "Prosthetic Heart" + id = "robotic_heart" + build_path = /obj/item/organ/heart + +/datum/design/item/mechfab/prosthetic/internal/lungs + name = "Prosthetic Lungs" + id = "robotic_lungs" + build_path = /obj/item/organ/lungs + +/datum/design/item/mechfab/prosthetic/internal/kidneys + name = "Prosthetic Kidneys" + id = "robotic_kidneys" + build_path = /obj/item/organ/kidneys + +/datum/design/item/mechfab/prosthetic/internal/eyes + name = "Prosthetic Eyes" + id = "robotic_eyes" + build_path = /obj/item/organ/eyes + +/datum/design/item/mechfab/prosthetic/internal/liver + name = "Prosthetic Liver" + id = "robotic_liver" + build_path = /obj/item/organ/liver \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/robot/robot.dm b/code/modules/research/designs/mechfab/robot/robot.dm new file mode 100644 index 00000000000..a2ddd08019b --- /dev/null +++ b/code/modules/research/designs/mechfab/robot/robot.dm @@ -0,0 +1,111 @@ +/datum/design/item/mechfab + build_type = MECHFAB + req_tech = list() + +/datum/design/item/mechfab/robot + category = "Robot" + +//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor +/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator) + if(istype(fabricator, /obj/machinery/mecha_part_fabricator)) + var/obj/machinery/mecha_part_fabricator/mechfab = fabricator + return new build_path(newloc, mechfab.manufacturer) + return ..() + +/datum/design/item/mechfab/robot/exoskeleton + name = "Robot exoskeleton" + id = "robot_exoskeleton" + build_path = /obj/item/robot_parts/robot_suit + time = 50 + materials = list(DEFAULT_WALL_MATERIAL = 50000) + +/datum/design/item/mechfab/robot/torso + name = "Robot torso" + id = "robot_torso" + build_path = /obj/item/robot_parts/chest + time = 35 + materials = list(DEFAULT_WALL_MATERIAL = 40000) + +/datum/design/item/mechfab/robot/head + name = "Robot head" + id = "robot_head" + build_path = /obj/item/robot_parts/head + time = 35 + materials = list(DEFAULT_WALL_MATERIAL = 25000) + +/datum/design/item/mechfab/robot/l_arm + name = "Robot left arm" + id = "robot_l_arm" + build_path = /obj/item/robot_parts/l_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 18000) + +/datum/design/item/mechfab/robot/r_arm + name = "Robot right arm" + id = "robot_r_arm" + build_path = /obj/item/robot_parts/r_arm + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 18000) + +/datum/design/item/mechfab/robot/l_leg + name = "Robot left leg" + id = "robot_l_leg" + build_path = /obj/item/robot_parts/l_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 15000) + +/datum/design/item/mechfab/robot/r_leg + name = "Robot right leg" + id = "robot_r_leg" + build_path = /obj/item/robot_parts/r_leg + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 15000) + +/datum/design/item/mechfab/robot/component + time = 20 + materials = list(DEFAULT_WALL_MATERIAL = 5000) + +/datum/design/item/mechfab/robot/component/synthetic_flash + name = "Synthetic flash" + id = "sflash" + req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2) + materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750) + build_path = /obj/item/device/flash/synthetic + +/datum/design/item/mechfab/robot/component/binary_communication_device + name = "Binary communication device" + id = "binary_communication_device" + build_path = /obj/item/robot_parts/robot_component/binary_communication_device + +/datum/design/item/mechfab/robot/component/radio + name = "Radio" + id = "radio" + build_path = /obj/item/robot_parts/robot_component/radio + +/datum/design/item/mechfab/robot/component/actuator + name = "Actuator" + id = "actuator" + build_path = /obj/item/robot_parts/robot_component/actuator + +/datum/design/item/mechfab/robot/component/diagnosis_unit + name = "Diagnosis unit" + id = "diagnosis_unit" + build_path = /obj/item/robot_parts/robot_component/diagnosis_unit + +/datum/design/item/mechfab/robot/component/camera + name = "Camera" + id = "camera" + build_path = /obj/item/robot_parts/robot_component/camera + +/datum/design/item/mechfab/robot/component/armour + name = "Armour plating" + id = "armour" + build_path = /obj/item/robot_parts/robot_component/armour + +/datum/design/item/mechfab/robot/component/surge + name = "Heavy surge prevention module" + desc = "Used to boost prevent damage from EMP. Has limited surge preventions." + id = "borg_surge_module" + materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 6000, "gold" = 5000, "silver" = 7500) // Should be expensive + req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_MAGNET = 5, TECH_POWER = 5, TECH_ENGINEERING = 4, TECH_COMBAT = 3) + build_path = /obj/item/robot_parts/robot_component/surge \ No newline at end of file diff --git a/code/modules/research/designs/mechfab/robot/robot_upgrades.dm b/code/modules/research/designs/mechfab/robot/robot_upgrades.dm new file mode 100644 index 00000000000..dca8ba6a12d --- /dev/null +++ b/code/modules/research/designs/mechfab/robot/robot_upgrades.dm @@ -0,0 +1,52 @@ +/datum/design/item/robot_upgrade + build_type = MECHFAB + time = 12 + materials = list(DEFAULT_WALL_MATERIAL = 10000) + category = "Cyborg Upgrade Modules" + +/datum/design/item/robot_upgrade/rename + name = "Rename module" + desc = "Used to rename a cyborg." + id = "borg_rename_module" + build_path = /obj/item/borg/upgrade/rename + +/datum/design/item/robot_upgrade/reset + name = "Reset module" + desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." + id = "borg_reset_module" + build_path = /obj/item/borg/upgrade/reset + +/datum/design/item/robot_upgrade/floodlight + name = "Floodlight module" + desc = "Used to boost cyborg's integrated light intensity." + id = "borg_floodlight_module" + build_path = /obj/item/borg/upgrade/floodlight + +/datum/design/item/robot_upgrade/restart + name = "Emergency restart module" + desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." + id = "borg_restart_module" + materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 5000) + build_path = /obj/item/borg/upgrade/restart + +/datum/design/item/robot_upgrade/vtec + name = "VTEC module" + desc = "Used to kick in a robot's VTEC systems, increasing their speed." + id = "borg_vtec_module" + materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 5000) + build_path = /obj/item/borg/upgrade/vtec + +/datum/design/item/robot_upgrade/jetpack + name = "Jetpack module" + desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." + id = "borg_jetpack_module" + materials = list(DEFAULT_WALL_MATERIAL = 10000, "phoron" = 15000, "uranium" = 20000) + build_path = /obj/item/robot_parts/robot_component/jetpack + +/datum/design/item/robot_upgrade/syndicate + name = "Illegal upgrade" + desc = "Allows for the construction of lethal upgrades for cyborgs." + id = "borg_syndicate_module" + req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, "diamond" = 10000) + build_path = /obj/item/borg/upgrade/syndicate \ No newline at end of file diff --git a/code/modules/research/designs/mechfab_designs.dm b/code/modules/research/designs/mechfab_designs.dm deleted file mode 100644 index c0aabe76453..00000000000 --- a/code/modules/research/designs/mechfab_designs.dm +++ /dev/null @@ -1,934 +0,0 @@ -/datum/design/item/mechfab - build_type = MECHFAB - category = "Misc" - req_tech = list(TECH_MATERIAL = 1) - -/datum/design/item/mechfab/robot - category = "Robot" - -//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor -/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator) - if(istype(fabricator, /obj/machinery/mecha_part_fabricator)) - var/obj/machinery/mecha_part_fabricator/mechfab = fabricator - return new build_path(newloc, mechfab.manufacturer) - return ..() - -/datum/design/item/mechfab/robot/exoskeleton - name = "Robot exoskeleton" - id = "robot_exoskeleton" - build_path = /obj/item/robot_parts/robot_suit - time = 50 - materials = list(DEFAULT_WALL_MATERIAL = 50000) - -/datum/design/item/mechfab/robot/torso - name = "Robot torso" - id = "robot_torso" - build_path = /obj/item/robot_parts/chest - time = 35 - materials = list(DEFAULT_WALL_MATERIAL = 40000) - -/datum/design/item/mechfab/robot/head - name = "Robot head" - id = "robot_head" - build_path = /obj/item/robot_parts/head - time = 35 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/robot/l_arm - name = "Robot left arm" - id = "robot_l_arm" - build_path = /obj/item/robot_parts/l_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 18000) - -/datum/design/item/mechfab/robot/r_arm - name = "Robot right arm" - id = "robot_r_arm" - build_path = /obj/item/robot_parts/r_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 18000) - -/datum/design/item/mechfab/robot/l_leg - name = "Robot left leg" - id = "robot_l_leg" - build_path = /obj/item/robot_parts/l_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 15000) - -/datum/design/item/mechfab/robot/r_leg - name = "Robot right leg" - id = "robot_r_leg" - build_path = /obj/item/robot_parts/r_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 15000) - -/datum/design/item/mechfab/robot/component - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 5000) - -/datum/design/item/mechfab/robot/component/binary_communication_device - name = "Binary communication device" - id = "binary_communication_device" - build_path = /obj/item/robot_parts/robot_component/binary_communication_device - -/datum/design/item/mechfab/robot/component/radio - name = "Radio" - id = "radio" - build_path = /obj/item/robot_parts/robot_component/radio - -/datum/design/item/mechfab/robot/component/actuator - name = "Actuator" - id = "actuator" - build_path = /obj/item/robot_parts/robot_component/actuator - -/datum/design/item/mechfab/robot/component/diagnosis_unit - name = "Diagnosis unit" - id = "diagnosis_unit" - build_path = /obj/item/robot_parts/robot_component/diagnosis_unit - -/datum/design/item/mechfab/robot/component/camera - name = "Camera" - id = "camera" - build_path = /obj/item/robot_parts/robot_component/camera - -/datum/design/item/mechfab/robot/component/armour - name = "Armour plating" - id = "armour" - build_path = /obj/item/robot_parts/robot_component/armour - -/datum/design/item/mechfab/robot/component/surge - name = "Heavy surge prevention module" - desc = "Used to boost prevent damage from EMP. Has limited surge preventions." - id = "borg_surge_module" - materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 6000, "gold" = 5000, "silver" = 7500) // Should be expensive - req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_MAGNET = 5, TECH_POWER = 5, TECH_ENGINEERING = 4, TECH_COMBAT = 3) - build_path = /obj/item/robot_parts/robot_component/surge - -/datum/design/item/mechfab/ripley - category = "Ripley" - -/datum/design/item/mechfab/ripley/chassis - name = "Ripley chassis" - id = "ripley_chassis" - build_path = /obj/item/mecha_parts/chassis/ripley - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 20000) - -/datum/design/item/mechfab/ripley/chassis/firefighter - name = "Firefigher chassis" - id = "firefighter_chassis" - build_path = /obj/item/mecha_parts/chassis/firefighter - -/datum/design/item/mechfab/ripley/torso - name = "Ripley torso" - id = "ripley_torso" - build_path = /obj/item/mecha_parts/part/ripley_torso - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 40000, "glass" = 15000) - -/datum/design/item/mechfab/ripley/left_arm - name = "Ripley left arm" - id = "ripley_left_arm" - build_path = /obj/item/mecha_parts/part/ripley_left_arm - time = 15 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/ripley/right_arm - name = "Ripley right arm" - id = "ripley_right_arm" - build_path = /obj/item/mecha_parts/part/ripley_right_arm - time = 15 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/ripley/left_leg - name = "Ripley left leg" - id = "ripley_left_leg" - build_path = /obj/item/mecha_parts/part/ripley_left_leg - time = 15 - materials = list(DEFAULT_WALL_MATERIAL = 30000) - -/datum/design/item/mechfab/ripley/right_leg - name = "Ripley right leg" - id = "ripley_right_leg" - build_path = /obj/item/mecha_parts/part/ripley_right_leg - time = 15 - materials = list(DEFAULT_WALL_MATERIAL = 30000) - -/datum/design/item/mechfab/odysseus - category = "Odysseus" - -/datum/design/item/mechfab/odysseus/chassis - name = "Odysseus chassis" - id = "odysseus_chassis" - build_path = /obj/item/mecha_parts/chassis/odysseus - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 20000) - -/datum/design/item/mechfab/odysseus/torso - name = "Odysseus torso" - id = "odysseus_torso" - build_path = /obj/item/mecha_parts/part/odysseus_torso - time = 18 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/odysseus/head - name = "Odysseus head" - id = "odysseus_head" - build_path = /obj/item/mecha_parts/part/odysseus_head - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 10000) - -/datum/design/item/mechfab/odysseus/left_arm - name = "Odysseus left arm" - id = "odysseus_left_arm" - build_path = /obj/item/mecha_parts/part/odysseus_left_arm - time = 12 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mechfab/odysseus/right_arm - name = "Odysseus right arm" - id = "odysseus_right_arm" - build_path = /obj/item/mecha_parts/part/odysseus_right_arm - time = 12 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mechfab/odysseus/left_leg - name = "Odysseus left leg" - id = "odysseus_left_leg" - build_path = /obj/item/mecha_parts/part/odysseus_left_leg - time = 13 - materials = list(DEFAULT_WALL_MATERIAL = 15000) - -/datum/design/item/mechfab/odysseus/right_leg - name = "Odysseus right leg" - id = "odysseus_right_leg" - build_path = /obj/item/mecha_parts/part/odysseus_right_leg - time = 13 - materials = list(DEFAULT_WALL_MATERIAL = 15000) - -/datum/design/item/mechfab/gygax - category = "Gygax" - -/datum/design/item/mechfab/gygax/chassis - name = "Gygax chassis" - id = "gygax_chassis" - build_path = /obj/item/mecha_parts/chassis/gygax - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/gygax/torso - name = "Gygax torso" - id = "gygax_torso" - build_path = /obj/item/mecha_parts/part/gygax_torso - time = 30 - materials = list(DEFAULT_WALL_MATERIAL = 50000, "glass" = 20000) - -/datum/design/item/mechfab/gygax/head - name = "Gygax head" - id = "gygax_head" - build_path = /obj/item/mecha_parts/part/gygax_head - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 10000) - -/datum/design/item/mechfab/gygax/left_arm - name = "Gygax left arm" - id = "gygax_left_arm" - build_path = /obj/item/mecha_parts/part/gygax_left_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 30000) - -/datum/design/item/mechfab/gygax/right_arm - name = "Gygax right arm" - id = "gygax_right_arm" - build_path = /obj/item/mecha_parts/part/gygax_right_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 30000) - -/datum/design/item/mechfab/gygax/left_leg - name = "Gygax left leg" - id = "gygax_left_leg" - build_path = /obj/item/mecha_parts/part/gygax_left_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 35000) - -/datum/design/item/mechfab/gygax/right_leg - name = "Gygax right leg" - id = "gygax_right_leg" - build_path = /obj/item/mecha_parts/part/gygax_right_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 35000) - -/datum/design/item/mechfab/gygax/armour - name = "Gygax armour plates" - id = "gygax_armour" - build_path = /obj/item/mecha_parts/part/gygax_armour - time = 60 - materials = list(DEFAULT_WALL_MATERIAL = 50000, "diamond" = 10000) - -/datum/design/item/mechfab/durand - category = "Durand" - -/datum/design/item/mechfab/durand/chassis - name = "Durand chassis" - id = "durand_chassis" - build_path = /obj/item/mecha_parts/chassis/durand - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 25000) - -/datum/design/item/mechfab/durand/torso - name = "Durand torso" - id = "durand_torso" - build_path = /obj/item/mecha_parts/part/durand_torso - time = 30 - materials = list(DEFAULT_WALL_MATERIAL = 55000, "glass" = 20000, "silver" = 10000) - -/datum/design/item/mechfab/durand/head - name = "Durand head" - id = "durand_head" - build_path = /obj/item/mecha_parts/part/durand_head - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 10000, "silver" = 3000) - -/datum/design/item/mechfab/durand/left_arm - name = "Durand left arm" - id = "durand_left_arm" - build_path = /obj/item/mecha_parts/part/durand_left_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000) - -/datum/design/item/mechfab/durand/right_arm - name = "Durand right arm" - id = "durand_right_arm" - build_path = /obj/item/mecha_parts/part/durand_right_arm - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000) - -/datum/design/item/mechfab/durand/left_leg - name = "Durand left leg" - id = "durand_left_leg" - build_path = /obj/item/mecha_parts/part/durand_left_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000) - -/datum/design/item/mechfab/durand/right_leg - name = "Durand right leg" - id = "durand_right_leg" - build_path = /obj/item/mecha_parts/part/durand_right_leg - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000) - -/datum/design/item/mechfab/durand/armour - name = "Durand armour plates" - id = "durand_armour" - build_path = /obj/item/mecha_parts/part/durand_armour - time = 60 - materials = list(DEFAULT_WALL_MATERIAL = 50000, "uranium" = 10000) - - -/// Hermes - -/datum/design/item/mechfab/hermes - category = "Hermes" - -/datum/design/item/mechfab/hermes/chassis - name = "Hermes chassis" - id = "hermes_chassis" - build_path = /obj/item/mecha_parts/chassis/hermes - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 20000) - -/datum/design/item/mechfab/hermes/torso - name = "Hermes torso" - id = "hermes_torso" - build_path = /obj/item/mecha_parts/part/hermes_torso - time = 18 - materials = list(DEFAULT_WALL_MATERIAL = 21000) - -/datum/design/item/mechfab/hermes/head - name = "Hermes head" - id = "hermes_head" - build_path = /obj/item/mecha_parts/part/hermes_head - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000) - -/datum/design/item/mechfab/hermes/left_arm - name = "Hermes left arm" - id = "hermes_left_arm" - build_path = /obj/item/mecha_parts/part/hermes_left_arm - time = 12 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mechfab/hermes/right_arm - name = "Hermes right arm" - id = "hermes_right_arm" - build_path = /obj/item/mecha_parts/part/hermes_right_arm - time = 12 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mechfab/hermes/left_leg - name = "Hermes left leg" - id = "hermes_left_leg" - build_path = /obj/item/mecha_parts/part/hermes_left_leg - time = 13 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mechfab/hermes/right_leg - name = "Hermes right leg" - id = "hermes_right_leg" - build_path = /obj/item/mecha_parts/part/hermes_right_leg - time = 13 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/robot_upgrade - build_type = MECHFAB - time = 12 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - category = "Cyborg Upgrade Modules" - -/datum/design/item/robot_upgrade/rename - name = "Rename module" - desc = "Used to rename a cyborg." - id = "borg_rename_module" - build_path = /obj/item/borg/upgrade/rename - -/datum/design/item/robot_upgrade/reset - name = "Reset module" - desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." - id = "borg_reset_module" - build_path = /obj/item/borg/upgrade/reset - -/datum/design/item/robot_upgrade/floodlight - name = "Floodlight module" - desc = "Used to boost cyborg's integrated light intensity." - id = "borg_floodlight_module" - build_path = /obj/item/borg/upgrade/floodlight - -/datum/design/item/robot_upgrade/restart - name = "Emergency restart module" - desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." - id = "borg_restart_module" - materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 5000) - build_path = /obj/item/borg/upgrade/restart - -/datum/design/item/robot_upgrade/vtec - name = "VTEC module" - desc = "Used to kick in a robot's VTEC systems, increasing their speed." - id = "borg_vtec_module" - materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 5000) - build_path = /obj/item/borg/upgrade/vtec - -/datum/design/item/robot_upgrade/jetpack - name = "Jetpack module" - desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." - id = "borg_jetpack_module" - materials = list(DEFAULT_WALL_MATERIAL = 10000, "phoron" = 15000, "uranium" = 20000) - build_path = /obj/item/robot_parts/robot_component/jetpack - -/datum/design/item/robot_upgrade/syndicate - name = "Illegal upgrade" - desc = "Allows for the construction of lethal upgrades for cyborgs." - id = "borg_syndicate_module" - req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, "diamond" = 10000) - build_path = /obj/item/borg/upgrade/syndicate - -/datum/design/item/mecha_tracking - name = "Exosuit tracking beacon" - id = "exotrack" - build_type = MECHFAB - time = 5 - materials = list(DEFAULT_WALL_MATERIAL = 500) - build_path = /obj/item/mecha_parts/mecha_tracking - category = "Misc" - -/datum/design/item/mecha_tracking/control - name = "Exosuit control beacon" - id = "exocontrol" - time = 30 - materials = list(DEFAULT_WALL_MATERIAL = 3000) - build_path = /obj/item/mecha_parts/mecha_tracking/control - -/datum/design/item/mecha - build_type = MECHFAB - category = "Exosuit Equipment" - time = 10 - materials = list(DEFAULT_WALL_MATERIAL = 10000) - -/datum/design/item/mecha/AssembleDesignDesc() - if(!desc) - desc = "Allows for the construction of \a '[item_name]' exosuit module." - -/datum/design/item/mecha/hydraulic_clamp - name = "Hydraulic clamp" - id = "hydraulic_clamp" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - -/datum/design/item/mecha/drill - name = "Drill" - id = "drill" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill - -/datum/design/item/mecha/kinetic_accelerator - name = "Burst kinetic accelerator" - id = "kinetic_accelerator" - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_PHORON = 3) - materials = list("glass" = 2250, DEFAULT_WALL_MATERIAL = 55000, "silver" = 5250) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/kin_accelerator - -/datum/design/item/mecha/kinetic_accelerator/burst - name = "Kinetic accelerator" - id = "kinetic_accelerator_burst" - req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_MAGNET = 4, TECH_PHORON = 4) - materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 60000, "silver" = 7250) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/kin_accelerator/burst - -/datum/design/item/mecha/flamethrower - name = "Flamethrower" - id = "flamethrower" - req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_COMBAT = 2, TECH_PHORON = 2) - materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 40000) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/flamethrower - -/datum/design/item/mecha/extinguisher - name = "Extinguisher" - id = "extinguisher" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher - -/datum/design/item/mecha/cable_layer - name = "Cable layer" - id = "mech_cable_layer" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer - -/datum/design/item/mecha/sleeper - name = "Sleeper" - id = "mech_sleeper" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 10000) - -/datum/design/item/mecha/syringe_gun - name = "Syringe gun" - id = "mech_syringe_gun" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - time = 20 - materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000) - -/* -/datum/design/item/mecha/syringe_gun - desc = "Exosuit-mounted syringe gun and chemical synthesizer." - id = "mech_syringe_gun" - req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_MAGNET = 4, TECH_DATA = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - */ - -/datum/design/item/mecha/passenger - name = "Passenger compartment" - id = "mech_passenger" - build_path = /obj/item/mecha_parts/mecha_equipment/tool/passenger - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) - -//obj/item/mecha_parts/mecha_equipment/repair_droid, -//obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING - -/datum/design/item/mecha/generator - name = "Phoron generator" - id = "mech_generator" - build_path = /obj/item/mecha_parts/mecha_equipment/generator - -/datum/design/item/mecha/taser - name = "Mounted taser carbine" - id = "mech_taser" - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - -/datum/design/item/mecha/lmg - name = "Mounted machine gun" - id = "mech_lmg" - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - -/datum/design/item/mecha/weapon - req_tech = list(TECH_COMBAT = 3) - -// *** Weapon modules -/datum/design/item/mecha/weapon/scattershot - name = "Mounted shotgun" - id = "mech_scattershot" - req_tech = list(TECH_COMBAT = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - -/datum/design/item/mecha/weapon/laser - name = "Mounted laser carbine" - id = "mech_laser" - req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - -/datum/design/item/mecha/weapon/laser_rigged - name = "Jury-rigged welder-laser" - desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits." - id = "mech_laser_rigged" - req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser - -/datum/design/item/mecha/weapon/laser_heavy - name = "Mounted laser cannon" - id = "mech_laser_heavy" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - -/datum/design/item/mecha/weapon/ion - name = "Heavy ion cannon" - id = "mech_ion" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - -/datum/design/item/mecha/weapon/laser_gatling - name = "Mounted gatling laser" - id = "laser_gatling" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/gatling - materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000) - -/datum/design/item/mecha/weapon/xray_gatling - name = "Gatling xray gun" - id = "xray_gatling" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray - materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "phoron" = 6000) - -/datum/design/item/mecha/weapon/tesla_gun - name = "Mounted tesla cannon" - id = "tesla_gun" - req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 5, TECH_MATERIAL = 5) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 6000, "phoron" = 6000) - -/datum/design/item/mecha/weapon/gyro_gun - name = "Mounted gyrojet autocannon" - id = "gyro_gun" - req_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 5, TECH_MATERIAL = 6, TECH_ILLEGAL = 5) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gyro - materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 6000, "phoron" = 6000, "diamond" = 7500) - -/datum/design/item/mecha/weapon/grenade_launcher - name = "Grenade launcher" - id = "mech_grenade_launcher" - req_tech = list(TECH_COMBAT = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang - -/datum/design/item/mecha/weapon/clusterbang_launcher - name = "Clusterbang Grenade launcher" - desc = "A weapon that violates the Geneva Convention at 6 rounds per minute." - id = "clusterbang_launcher" - req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "uranium" = 6000) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited - -/datum/design/item/mecha/weapon/plasma_cutter - name = "Heavy plasma cutter" - desc = "A large mining tool capable of expelling concentrated plasma bursts, useful for crushing rocks." - id = "mecha_plasmacutter" - req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ENGINEERING = 4) - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "gold" = 1000, "phoron" = 1000) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - -/datum/design/item/mecha/weapon/incendiary - name = "Mounted incendiary carbine" - desc = "A weapon for combat exosuits. Shoots incendiary shells." - id = "mecha_incendiary" - req_tech = list(TECH_COMBAT= 4, TECH_MATERIAL = 4, TECH_PHORON = 3) - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "phoron" = 1000) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary - -// *** Nonweapon modules -/datum/design/item/mecha/wormhole_gen - name = "Wormhole generator" - desc = "An exosuit module that can generate small quasi-stable wormholes." - id = "mech_wormhole_gen" - req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 2) - build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - -/datum/design/item/mecha/teleporter - name = "Teleporter" - desc = "An exosuit module that allows teleportation to any position in view." - id = "mech_teleporter" - req_tech = list(TECH_BLUESPACE = 6, TECH_MAGNET = 5) - build_path = /obj/item/mecha_parts/mecha_equipment/teleporter - -/datum/design/item/mecha/rfd_c - name = "RFD-C" - desc = "An exosuit-mounted Rapid-Fabrication-Device C-Class." - id = "mech_rfd_c" - time = 120 - materials = list(DEFAULT_WALL_MATERIAL = 30000, "phoron" = 25000, "silver" = 20000, "gold" = 20000) - req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/rfd_c - -/datum/design/item/mecha/gravcatapult - name = "Gravitational catapult" - desc = "An exosuit-mounted gravitational catapult." - id = "mech_gravcatapult" - req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINEERING = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult - -/datum/design/item/mecha/repair_droid - name = "Repair droid" - desc = "Automated repair droid, exosuits' best companion. BEEP BOOP" - id = "mech_repair_droid" - req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 1000, "silver" = 2000, "glass" = 5000) - build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid - -/datum/design/item/mecha/phoron_generator - desc = "Phoron reactor." - id = "mech_phoron_generator" - req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINEERING = 2) - build_path = /obj/item/mecha_parts/mecha_equipment/generator - materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000) - -/datum/design/item/mecha/energy_relay - name = "Energy relay" - id = "mech_energy_relay" - req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "silver" = 3000, "glass" = 2000) - build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - -/datum/design/item/mecha/ccw_armor - name = "CCW armor booster" - desc = "Exosuit close-combat armor booster." - id = "mech_ccw_armor" - req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4) - materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 5000) - build_path = /obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster - -/datum/design/item/mecha/proj_armor - desc = "Exosuit projectile armor booster." - id = "mech_proj_armor" - req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 5000) - build_path = /obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster - -/datum/design/item/mecha/diamond_drill - name = "Diamond drill" - desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger." - id = "mech_diamond_drill" - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "diamond" = 6500) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - -/datum/design/item/mecha/generator_nuclear - name = "Nuclear reactor" - desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy." - id = "mech_generator_nuclear" - req_tech = list(TECH_POWER= 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000) - build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear - -/datum/design/item/synthetic_flash - name = "Synthetic flash" - id = "sflash" - req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2) - build_type = MECHFAB - materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750) - build_path = /obj/item/device/flash/synthetic - category = "Misc" - -//hardsuits modules - -/datum/design/hardsuitmodules - build_type = MECHFAB - category = "Hardsuit Modules" - time = 10 - -/datum/design/hardsuitmodules/iss_module - name = "IIS module" - desc = "An integrated intelligence system module suitable for most hardsuits." - id = "iis_module" - req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 3) - materials = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 5000) - build_path = /obj/item/rig_module/ai_container - -/datum/design/hardsuitmodules/sink_module - name = "hardsuit power sink" - desc = "An heavy-duty power sink suitable for hardsuits." - id = "power_sink_module" - req_tech = list(TECH_POWER = 4, TECH_MATERIAL = 3, TECH_ENGINEERING = 4, TECH_ILLEGAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold"= 2000, "silver"= 3000, "glass"= 2000) - build_path = /obj/item/rig_module/power_sink - -/datum/design/hardsuitmodules/meson_module - name = "hardsuit meson scanner" - desc = "A layered, translucent visor system for a hardsuit." - id = "meson_module" - req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 2, TECH_ENGINEERING = 3) - materials = list("glass"= 5000, DEFAULT_WALL_MATERIAL= 1500) - build_path = /obj/item/rig_module/vision/meson - -/datum/design/hardsuitmodules/sechud_module - name = "hardsuit security hud" - desc = "A simple tactical information system for a hardsuit." - id = "sechud_module" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3) - materials = list("glass" = 5000, DEFAULT_WALL_MATERIAL =1500) - build_path = /obj/item/rig_module/vision/sechud - -/datum/design/hardsuitmodules/medhud_module - name = "hardsuit medical hud" - desc = "A simple medical status indicator for a hardsuit." - id = "medhu_module" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_MAGNET = 3) - materials = list("glass"= 5000, DEFAULT_WALL_MATERIAL =1500) - build_path = /obj/item/rig_module/vision/medhud - -/datum/design/hardsuitmodules/nvg_module - name = "hardsuit night vision interface" - desc = "A multi input night vision system for a hardsuit." - id = "nvg_module" - req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 3, TECH_MAGNET = 4) - materials = list("glass" = 5000, DEFAULT_WALL_MATERIAL = 1500, "uranium" = 5000) - build_path = /obj/item/rig_module/vision/nvg - -/datum/design/hardsuitmodules/healthscanner_module - name = "hardsuit health scanner" - desc = "A hardsuit-mounted health scanner." - id = "healthscanner_module" - req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 3, TECH_MAGNET = 2) - materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 2500) - build_path = /obj/item/rig_module/device/healthscanner - -/datum/design/hardsuitmodules/chem_module - name = "mounted chemical injector" - desc = "A complex web of tubing and a large needle suitable for hardsuit use." - id = "chem_module" - req_tech = list(TECH_BIO = 5, TECH_MATERIAL = 4, TECH_DATA = 3, TECH_PHORON = 2) - materials = list("glass" = 9250, DEFAULT_WALL_MATERIAL = 10000, "gold" = 2500, "silver" = 4250, "phoron" = 5500) - build_path = /obj/item/rig_module/chem_dispenser/injector - -/datum/design/hardsuitmodules/plasmacutter_module - name = "hardsuit plasma cutter" - desc = "A self-sustaining plasma arc capable of cutting through walls." - id = "plasmacutter_module" - req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_PHORON = 4) - materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250) - build_path = /obj/item/rig_module/mounted/plasmacutter - -/datum/design/hardsuitmodules/jet_module - name = "hardsuit maneuvering jets" - desc = "A compact gas thruster system for a hardsuit." - id = "jet_module" - req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list("glass" = 4250, DEFAULT_WALL_MATERIAL = 15000, "silver" = 4250,"uranium" = 5250) - build_path = /obj/item/rig_module/maneuvering_jets - -/datum/design/hardsuitmodules/drill_module - name = "hardsuit drill mount" - desc = "A very heavy diamond-tipped drill." - id = "drill_module" - req_tech = list(TECH_ENGINEERING = 5, TECH_MATERIAL = 5, TECH_POWER = 4, TECH_MAGNET = 4) - materials = list("glass" = 2250, DEFAULT_WALL_MATERIAL = 55000, "silver" = 5250, "diamond" = 3750) - build_path = /obj/item/rig_module/device/drill - -/datum/design/hardsuitmodules/rfd_c_module - name = "RFD-C mount" - desc = "A cell-powered Rapid-Fabrication-Device C-Class for a hardsuit." - id = "rcd_module" - req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5, TECH_POWER = 5, TECH_BLUESPACE = 4) - materials = list(DEFAULT_WALL_MATERIAL= 30000, "phoron" = 12500, "silver" = 10000, "gold" = 10000) - build_path = /obj/item/rig_module/device/rfd_c - -/datum/design/hardsuitmodules/actuators_module - name = "leg actuators" - desc = "A set of electromechanical actuators, for safe traversal of multilevelled areas." - id = "actuators_module" - req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_POWER = 3) - materials = list(DEFAULT_WALL_MATERIAL = 85000, "glass" = 1250, "silver" = 5250, "gold" = 2750) - build_path = /obj/item/rig_module/actuators - -/datum/design/hardsuitmodules/taser_module - name = "mounted taser" - desc = "A palm-mounted nonlethal energy projector." - id = "taser_module" - req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_MAGNET = 2) - materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 5250) - build_path = /obj/item/rig_module/mounted/taser - -/datum/design/hardsuitmodules/egun_module - name = "mounted energy gun" - desc = "A forearm-mounted energy projector." - id = "egun_module" - req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 4, TECH_COMBAT = 4, TECH_MAGNET = 3) - materials = list(DEFAULT_WALL_MATERIAL= 7000, "glass"= 2250, "uranium"= 3250, "gold"= 2500) - build_path = /obj/item/rig_module/mounted/egun - -/datum/design/hardsuitmodules/cooling_module - name = "mounted cooling unit" - desc = "A heat sink with liquid cooled radiator." - id = "cooling_module" - req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL= 7000, "glass"= 5500) - build_path = /obj/item/rig_module/cooling_unit - - -/// RIGS - -/datum/design/rig - build_type = MECHFAB - category = "RIG Assemblies" - materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500) - req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_MAGNET = 3, TECH_POWER = 3) - time = 20 - -/datum/design/rig/ce - name = "advanced voidsuit control module assembly" - desc = "An assembly frame for an advanced voidsuit that protects against hazardous, low pressure environments." - id = "rig_ce" - build_path = /obj/item/rig_assembly/ce - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_POWER = 4) - materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "silver" = 5500, "gold" = 5500, "phoron" = 7550) - -/datum/design/rig/eva - name = "EVA suit control module assembly" - desc = "An assembly for light rig that is desiged for repairs and maintenance to the outside of habitats and vessels." - id = "rig_eva" - build_path = /obj/item/rig_assembly/eva - -/datum/design/rig/industrial - name = "industrial suit control module assembly" - desc = "An assembly for a heavy, powerful rig used by construction crews and mining corporations." - id = "rig_industrial" - build_path = /obj/item/rig_assembly/industrial - -/datum/design/rig/hazmat - name = "AMI control module assembly" - desc = "An assembly for Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." - id = "rig_hazmat" - build_path = /obj/item/rig_assembly/hazmat - materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 25000, "silver" = 5500, "gold" = 5500, "phoron" = 7550) - -/datum/design/rig/medical - name = "rescue suit control module assembly" - desc = "An assembly for a durable suit designed for medical rescue in high risk areas." - id = "rig_medical" - build_path = /obj/item/rig_assembly/medical - materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "silver" = 5500, "gold" = 3500, "phoron" = 7550) - -/datum/design/rig/hazard - name = "hazard hardsuit control module" - desc = "An assembly for a security hardsuit designed for prolonged EVA in dangerous environments." - id = "rig_hazard" - build_path = /obj/item/rig_assembly/combat/hazard - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 3) - materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500, "silver" = 3500, "gold" = 5500) - -/datum/design/rig/combat - name = "combat hardsuit control module assembly" - desc = "An assembly frame for a sleek and dangerous hardsuit for active combat." - id = "rig_combat" - build_path = /obj/item/rig_assembly/combat/combat - req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 5) - materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 12500, "silver" = 3500, "gold" = 3500, "uranium" = 5550, "diamond" = 7500) - -/datum/design/rig/hacker - name = "cybersuit control module assembly" - desc = "An assembly for an advanced powered armour suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." - id = "rig_hacker" - build_path = /obj/item/rig_assembly/combat/illegal/hacker - req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 12500, "gold" = 2500, "silver" = 3500, "uranium" = 5550) \ No newline at end of file diff --git a/html/changelogs/geeves - roboticsRedux.yml b/html/changelogs/geeves - roboticsRedux.yml new file mode 100644 index 00000000000..37b7d10338a --- /dev/null +++ b/html/changelogs/geeves - roboticsRedux.yml @@ -0,0 +1,9 @@ +author: Geeves + +delete-after: True + +changes: + - tweak: "Robotics updates:" + - rscadd: "The phoron generator is now safe to use, it does not pollute the environment." + - rscadd: "More mechfab things have been split into catagories that make sense. Tech level required for some things have been reduced." + - rscadd: "Robotics can now print robotic internal organs to replace organic organs." From 80fb3fa7ea501d4b79e011f5fd3424d0915bf8cf Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Wed, 13 Nov 2019 20:46:00 +0000 Subject: [PATCH 2/6] "[ci skip] Automatic Build - 2019.11.13.20.46.00" --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/geeves - roboticsRedux.yml | 9 --------- 3 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/geeves - roboticsRedux.yml diff --git a/html/changelog.html b/html/changelog.html index a23a450adfd..cac5f571512 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,10 @@

Geeves updated:

12 November 2019

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 5f0827cea38..7d8ff3fbc14 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -9988,3 +9988,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Geeves: - rscadd: You can now crawl under a lot more circumstances, if you click drag yourself while laying down. + - tweak: 'Robotics updates:' + - rscadd: The phoron generator is now safe to use, it does not pollute the environment. + - rscadd: More mechfab things have been split into catagories that make sense. Tech + level required for some things have been reduced. + - rscadd: Robotics can now print robotic internal organs to replace organic organs. diff --git a/html/changelogs/geeves - roboticsRedux.yml b/html/changelogs/geeves - roboticsRedux.yml deleted file mode 100644 index 37b7d10338a..00000000000 --- a/html/changelogs/geeves - roboticsRedux.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: Geeves - -delete-after: True - -changes: - - tweak: "Robotics updates:" - - rscadd: "The phoron generator is now safe to use, it does not pollute the environment." - - rscadd: "More mechfab things have been split into catagories that make sense. Tech level required for some things have been reduced." - - rscadd: "Robotics can now print robotic internal organs to replace organic organs." From ada93c87f56ae958cef3c8b6da51a0c0d8c1d63c Mon Sep 17 00:00:00 2001 From: fernerr <35879136+fernerr@users.noreply.github.com> Date: Wed, 13 Nov 2019 23:17:23 +0100 Subject: [PATCH 3/6] Some ghostspawner fixes (#7403) --- code/modules/ghostroles/spawner/base.dm | 12 +++--- .../modules/ghostroles/spawner/human/human.dm | 2 +- .../191113-bugfix_ghostspawners.yml | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 html/changelogs/191113-bugfix_ghostspawners.yml diff --git a/code/modules/ghostroles/spawner/base.dm b/code/modules/ghostroles/spawner/base.dm index 55a7e7e5ef8..d8aaac49572 100644 --- a/code/modules/ghostroles/spawner/base.dm +++ b/code/modules/ghostroles/spawner/base.dm @@ -27,7 +27,7 @@ var/mob_name_pick_message = "Pick a name." var/mob_name_prefix = null //The prefix that should be applied to the mob (i.e. CCIAA, Tpr., Cmdr.) var/mob_name_suffix = null //The suffix that should be applied to the mob name - + /datum/ghostspawner/New() . = ..() if(!jobban_job) @@ -45,13 +45,13 @@ if(req_head_whitelist && !check_whitelist(user)) return "Missing Head of Staff Whitelist" - + if(req_species_whitelist && !is_alien_whitelisted(user, req_species_whitelist)) return "Missing Species Whitelist" if(jobban_job && jobban_isbanned(user,jobban_job)) return "Job Banned" - + if(!enabled && !can_edit(user)) //If its not enabled and the user cant edit it, dont show it return "Currently Disabled" @@ -83,10 +83,10 @@ return FALSE //Proc executed before someone is spawned in -/datum/ghostspawner/proc/pre_spawn(mob/user) +/datum/ghostspawner/proc/pre_spawn(mob/user) count++ //Increment the spawned in mob count if(max_count && count >= max_count) - disable() + enabled = FALSE return TRUE //This proc selects the spawnpoint to use. @@ -114,6 +114,8 @@ //Proc executed after someone is spawned in /datum/ghostspawner/proc/post_spawn(mob/user) + if(max_count && count >= max_count) + disable() if(welcome_message) to_chat(user, span("notice", welcome_message)) return TRUE diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm index 7f72e5ecb7f..c664d3a2f66 100644 --- a/code/modules/ghostroles/spawner/human/human.dm +++ b/code/modules/ghostroles/spawner/human/human.dm @@ -64,7 +64,7 @@ var/picked_species = input(user,"Select your species") as null|anything in species_selection if(!picked_species) - picked_species = "Human" + picked_species = possible_species[1] //Get the name / age from them first var/mname = get_mob_name(user, picked_species) diff --git a/html/changelogs/191113-bugfix_ghostspawners.yml b/html/changelogs/191113-bugfix_ghostspawners.yml new file mode 100644 index 00000000000..20690dc774a --- /dev/null +++ b/html/changelogs/191113-bugfix_ghostspawners.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Ferner + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed an issue with single slot ghost spawners being disabled preemptively. Made the Kataphracts truly unathi exclusive." From ec9c3f5decd693abe7534ba00c93edd22489a230 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Wed, 13 Nov 2019 22:18:01 +0000 Subject: [PATCH 4/6] "[ci skip] Automatic Build - 2019.11.13.22.18.01" --- html/changelog.html | 1 + html/changelogs/.all_changelog.yml | 2 + .../191113-bugfix_ghostspawners.yml | 41 ------------------- 3 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/191113-bugfix_ghostspawners.yml diff --git a/html/changelog.html b/html/changelog.html index cac5f571512..d0029648f31 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,6 +48,7 @@
  • Tweaked the range and heightened the dropoff of some sounds, particularly gunfire. Emitters are also audible through walls again.
  • Xenobotanists will now spawn with the correct uniform.
  • +
  • Fixed an issue with single slot ghost spawners being disabled preemptively. Made the Kataphracts truly unathi exclusive.

Geeves updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7d8ff3fbc14..a2c2d4d1988 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -9985,6 +9985,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Tweaked the range and heightened the dropoff of some sounds, particularly gunfire. Emitters are also audible through walls again. - bugfix: Xenobotanists will now spawn with the correct uniform. + - bugfix: Fixed an issue with single slot ghost spawners being disabled preemptively. + Made the Kataphracts truly unathi exclusive. Geeves: - rscadd: You can now crawl under a lot more circumstances, if you click drag yourself while laying down. diff --git a/html/changelogs/191113-bugfix_ghostspawners.yml b/html/changelogs/191113-bugfix_ghostspawners.yml deleted file mode 100644 index 20690dc774a..00000000000 --- a/html/changelogs/191113-bugfix_ghostspawners.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: Ferner - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed an issue with single slot ghost spawners being disabled preemptively. Made the Kataphracts truly unathi exclusive." From a5e2c5666923cdd6b72ad74aede9d8efd55795cc Mon Sep 17 00:00:00 2001 From: Geeves Date: Thu, 14 Nov 2019 00:18:56 +0200 Subject: [PATCH 5/6] Makes vamp a bit better (#7233) --- .../game/gamemodes/vampire/modular_vampire.dm | 13 ++ code/game/gamemodes/vampire/vampire_datum.dm | 4 +- .../game/gamemodes/vampire/vampire_helpers.dm | 40 ++---- code/game/gamemodes/vampire/vampire_powers.dm | 122 +++++++++++------- code/game/objects/items/devices/scanners.dm | 2 +- html/changelogs/geeves - vampUpdate.yml | 9 ++ 6 files changed, 110 insertions(+), 80 deletions(-) create mode 100644 html/changelogs/geeves - vampUpdate.yml diff --git a/code/game/gamemodes/vampire/modular_vampire.dm b/code/game/gamemodes/vampire/modular_vampire.dm index 312e4f27d72..6f3e21cc69d 100644 --- a/code/game/gamemodes/vampire/modular_vampire.dm +++ b/code/game/gamemodes/vampire/modular_vampire.dm @@ -4,6 +4,13 @@ var/list/datum/power/vampire/vampirepowers = list() /datum/power/vampire var/blood_cost = 0 +/datum/power/vampire/alertness + name = "Alertness" + desc = "Toggle whether you wish for your victims to get paralyzed and forget your deeds." + helptext = "If active, victims will become paralyzed and forget that you fed on them, instead remembering only a pleasant encounter." + blood_cost = 0 + verbpath = /mob/living/carbon/human/proc/vampire_alertness + /datum/power/vampire/drain_blood name = "Drain Blood" desc = "Feed on the blood of a humanoid creature in order to gain further power." @@ -37,6 +44,12 @@ var/list/datum/power/vampire/vampirepowers = list() blood_cost = 50 verbpath = /mob/living/carbon/human/proc/vampire_presence +/datum/power/vampire/touch_of_life + name = "Touch of Life" + desc = "You touch the target, transferring healing chemicals to them." + blood_cost = 50 + verbpath = /mob/living/carbon/human/proc/vampire_touch_of_life + /datum/power/vampire/veil_step name = "Veil Step" desc = "Enter the Veil for a moment, and skip to a shadow of your choosing." diff --git a/code/game/gamemodes/vampire/vampire_datum.dm b/code/game/gamemodes/vampire/vampire_datum.dm index 5b6cd202562..9e9845632bb 100644 --- a/code/game/gamemodes/vampire/vampire_datum.dm +++ b/code/game/gamemodes/vampire/vampire_datum.dm @@ -8,6 +8,7 @@ var/frenzy = 0 // A vampire's frenzy meter. var/last_frenzy_message = 0 // Keeps track of when the last frenzy alert was sent. var/status = 0 // Bitfield including different statuses. + var/stealth = TRUE // Do you want your victims to know of your sucking? var/list/datum/power/vampire/purchased_powers = list() // List of power datums available for use. var/obj/effect/dummy/veil_walk/holder = null // The veil_walk dummy. var/mob/living/carbon/human/master = null // The vampire/thrall's master. @@ -18,7 +19,6 @@ /datum/vampire/proc/add_power(var/datum/mind/vampire, var/datum/power/vampire/power, var/announce = 0) if (!vampire || !power) return - if (power in purchased_powers) return @@ -26,11 +26,9 @@ if (power.isVerb && power.verbpath) vampire.current.verbs += power.verbpath - if (announce) to_chat(vampire.current, "You have unlocked a new power: [power.name].") to_chat(vampire.current, "[power.desc]") - if (power.helptext) to_chat(vampire.current, "[power.helptext]") diff --git a/code/game/gamemodes/vampire/vampire_helpers.dm b/code/game/gamemodes/vampire/vampire_helpers.dm index d61c2264f4d..1c5b918e137 100644 --- a/code/game/gamemodes/vampire/vampire_helpers.dm +++ b/code/game/gamemodes/vampire/vampire_helpers.dm @@ -2,10 +2,8 @@ /mob/proc/make_vampire() if (!mind) return - if (!mind.vampire) mind.vampire = new /datum/vampire() - // No powers to thralls. Ew. if (mind.vampire.status & VAMP_ISTHRALL) return @@ -21,7 +19,7 @@ else if(P.isVerb && P.verbpath) verbs += P.verbpath - return 1 + return TRUE // Checks the vampire's bloodlevel and unlocks new powers based on that. /mob/proc/check_vampire_upgrade() @@ -43,7 +41,6 @@ /mob/proc/vampire_power(var/required_blood = 0, var/max_stat = 0, var/ignore_holder = 0, var/disrupt_healing = 1, var/required_vampire_blood = 0) if (!mind) return - if (!ishuman(src)) return @@ -51,15 +48,12 @@ if (!vampire) log_debug("[src] has a vampire power but is not a vampire.") return - if (vampire.holder && !ignore_holder) to_chat(src, "You cannot use this power while walking through the Veil.") return - if (stat > max_stat) to_chat(src, "You are incapacitated.") return - if (required_blood > vampire.blood_usable) to_chat(src, "You do not have enough usable blood. [required_blood] needed.") return @@ -72,66 +66,57 @@ // Checks whether or not the target can be affected by a vampire's abilities. /mob/proc/vampire_can_affect_target(var/mob/living/carbon/human/T, var/notify = 1, var/account_loyalty_implant = 0, var/ignore_thrall = FALSE) if (!T || !istype(T)) - return 0 - + return FALSE // How did you even get here? if (!mind.vampire) - return 0 - + return FALSE if ((mind.vampire.status & VAMP_FULLPOWER) && !(T.mind && T.mind.vampire && (T.mind.vampire.status & VAMP_FULLPOWER))) - return 1 - + return TRUE if (T.mind) if (T.mind.assigned_role == "Chaplain") if (notify) to_chat(src, "Your connection with the Veil is not strong enough to affect a man as devout as them.") - return 0 + return FALSE else if (T.mind.vampire && (!(T.mind.vampire.status & VAMP_ISTHRALL) || ((T.mind.vampire.status & VAMP_ISTHRALL) && !ignore_thrall))) if (notify) to_chat(src, "You lack the power required to affect another creature of the Veil.") - return 0 + return FALSE if (isipc(T)) if (notify) to_chat(src, "You lack the power interact with mechanical constructs.") - return 0 - + return FALSE if(is_special_character(T) && (!(T.mind.vampire.status & VAMP_ISTHRALL))) if (notify) to_chat(src, "\The [T]'s mind is too strong to be affected by our powers!") - return 0 - + return FALSE if (account_loyalty_implant) for (var/obj/item/weapon/implant/loyalty/I in T) if (I.implanted) if (notify) to_chat(src, "You feel that [T]'s mind is unreachable due to forced loyalty.") - return 0 + return FALSE - return 1 + return TRUE // Plays the vampire phase in animation. /mob/proc/vampire_phase_in(var/turf/T = null) if (!T) return - anim(T, src, 'icons/mob/mob.dmi', , "bloodify_in", , dir) // Plays the vampire phase out animation. /mob/proc/vampire_phase_out(var/turf/T = null) if (!T) return - anim(T, src, 'icons/mob/mob.dmi', , "bloodify_out", , dir) // Make a vampire thrall /mob/proc/vampire_make_thrall() - if (!mind) return var/datum/vampire/thrall/thrall = new() - mind.vampire = thrall /mob/proc/vampire_check_frenzy(var/force_frenzy = 0) @@ -139,7 +124,6 @@ return var/datum/vampire/vampire = mind.vampire - // Thralls don't frenzy. if (vampire.status & VAMP_ISTHRALL) return @@ -218,7 +202,7 @@ sight &= ~SEE_MOBS - visible_message("[src.name]'s eyes no longer glow with violent rage, their form reverting to resemble that of a normal human's.", "The beast within you retreats. You gain control over your body once more.") + visible_message("[src.name]'s eyes no longer glow with violent rage, their form reverting to resemble that of a normal person's.", "The beast within you retreats. You gain control over your body once more.") verbs -= /mob/living/carbon/human/proc/grapple regenerate_icons() @@ -254,8 +238,6 @@ /mob/living/carbon/human/proc/finish_vamp_timeout(vamp_flags = 0) if (!mind || !mind.vampire) return FALSE - if (vamp_flags && !(mind.vampire.status & vamp_flags)) return FALSE - return TRUE diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index b70e6447dbb..303edf113ce 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -1,5 +1,18 @@ // Contains all /mob/procs that relate to vampire. +// Makes vampire's victim not get paralyzed, and remember the suckings +/mob/living/carbon/human/proc/vampire_alertness() + set category = "Vampire" + set name = "Victim Alertness" + set desc = "Toggle whether you wish for your victims to get paralyzed and forget your deeds." + + var/datum/vampire/vampire = vampire_power(0, 0) + vampire.stealth = !vampire.stealth + if(vampire.stealth) + to_chat(src, span("notice", "Your victims will now forget your interactions, and get paralyzed when you do them.")) + else + to_chat(src, span("notice", "Your victims will now remember your interactions, and stay completely mobile during them.")) + // Drains the target's blood. /mob/living/carbon/human/proc/vampire_drain_blood() set category = "Vampire" @@ -12,11 +25,10 @@ var/obj/item/weapon/grab/G = get_active_hand() if (!istype(G)) - to_chat(src, "You must be grabbing a victim in your active hand to drain their blood.") + to_chat(src, span("warning", "You must be grabbing a victim in your active hand to drain their blood.")) return - if (G.state == GRAB_PASSIVE || G.state == GRAB_UPGRADING) - to_chat(src, "You must have the victim pinned to the ground to drain their blood.") + to_chat(src, span("warning", "You must have the victim pinned to the ground to drain their blood.")) return var/mob/living/carbon/human/T = G.affecting @@ -24,15 +36,13 @@ //Added this to prevent vampires draining diona and IPCs //Diona have 'blood' but its really green sap and shouldn't help vampires //IPCs leak oil - to_chat(src, "[T] is not a creature you can drain useful blood from.") + to_chat(src, span("warning", "[T] is not a creature you can drain useful blood from.")) return - if(T.head && (T.head.item_flags & AIRTIGHT)) - to_chat(src, "[T]'s headgear is blocking the way to the neck.") + to_chat(src, span("warning", "[T]'s headgear is blocking the way to the neck.")) return - if (vampire.status & VAMP_DRAINING) - to_chat(src, "Your fangs are already sunk into a victim's neck!") + to_chat(src, span("warning", "Your fangs are already sunk into a victim's neck!")) return var/datum/vampire/draining_vamp = null @@ -46,24 +56,33 @@ vampire.status |= VAMP_DRAINING visible_message("[src.name] bites [T.name]'s neck!", "You bite [T.name]'s neck and begin to drain their blood.", "You hear a soft puncture and a wet sucking noise") - admin_attack_log(src, T, "drained blood from [key_name(T)]", "was drained blood from by [key_name(src)]", "is draining blood from") + var/remembrance + if(vampire.stealth) + remembrance = "forgot" + else + remembrance = "remembered" + admin_attack_log(src, T, "drained blood from [key_name(T)], who [remembrance] the encounter.", "had their blood drained by [key_name(src)] and [remembrance] the encounter.", "is draining blood from") - to_chat(T, "You are unable to resist or even move. Your mind blanks as you're being fed upon.") + if(vampire.stealth) + to_chat(T, span("warning", "You are unable to resist or even move. Your mind blanks as you're being fed upon.")) + T.paralysis = 3400 + else + to_chat(T, span("warning", "You are unable to resist or even move. Your mind is acutely aware of what's occuring.")) + T.paralysis = 3400 playsound(src.loc, 'sound/effects/drain_blood_new.ogg', 50, 1) - T.paralysis = 3400 while (do_mob(src, T, 50)) if (!mind.vampire) - to_chat(src, "Your fangs have disappeared!") + to_chat(src, span("danger", "Your fangs have disappeared!")) return blood_total = vampire.blood_total blood_usable = vampire.blood_usable if (!T.vessel.get_reagent_amount("blood")) - to_chat(src, "[T] has no more blood left to give.") + to_chat(src, span("danger", "[T] has no more blood left to give.")) break if (!T.stunned) @@ -100,18 +119,27 @@ vampire.frenzy-- if (blood_total != vampire.blood_total) - var/update_msg = "You have accumulated [vampire.blood_total] [vampire.blood_total > 1 ? "units" : "unit"] of blood." + var/update_msg = "You have accumulated [vampire.blood_total] [vampire.blood_total > 1 ? "units" : "unit"] of blood" if (blood_usable != vampire.blood_usable) - update_msg += " And have [vampire.blood_usable] left to use." + update_msg += " and have [vampire.blood_usable] left to use." + else + update_msg += "." to_chat(src, update_msg) check_vampire_upgrade() T.vessel.remove_reagent("blood", 25) vampire.status &= ~VAMP_DRAINING - visible_message("[src.name] stops biting [T.name]'s neck!", "You extract your fangs from [T.name]'s neck and stop draining them of blood. They will remember nothing of this occurance. Provided they survived.") - if (T.stat != 2) - to_chat(T, "You remember nothing about being fed upon. Instead, you simply remember having a pleasant encounter with [src.name].") + + var/endsuckmsg = "You extract your fangs from [T.name]'s neck and stop draining them of blood." + if(vampire.stealth) + endsuckmsg += "They will remember nothing of this occurance, provided they survived." + visible_message("[src.name] stops biting [T.name]'s neck!", "[endsuckmsg]") + if(T.stat != 2 && vampire.stealth) + to_chat(T, span("warning", "You remember nothing about being fed upon. Instead, you simply remember having a pleasant encounter with [src.name].")) + T.paralysis = 0 + else if(T.stat != 2) + to_chat(T, span("warning", "You remember everything about being fed upon. How you react to [src.name]'s actions is up to you.")) T.paralysis = 0 // Small area of effect stun. @@ -122,11 +150,9 @@ if (!vampire_power(0, 1)) return - if (!has_eyes()) to_chat(src, "You don't have eyes!") return - if (istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) to_chat(src, "You're blindfolded!") return @@ -136,7 +162,6 @@ for (var/mob/living/carbon/human/H in view(2)) if (H == src) continue - if (!vampire_can_affect_target(H, 0)) continue @@ -160,7 +185,6 @@ var/datum/vampire/vampire = vampire_power(10, 1) if (!vampire) return - if (!has_eyes()) to_chat(src, "You don't have eyes!") return @@ -170,7 +194,6 @@ if (H == src) continue victims += H - if (!victims.len) to_chat(src, "No suitable targets.") return @@ -210,15 +233,12 @@ var/datum/vampire/vampire = vampire_power(20, 1) if (!vampire) return - if (!istype(loc, /turf)) to_chat(src, "You cannot teleport out of your current location.") return - if (T.z != src.z || get_dist(T, get_turf(src)) > world.view) to_chat(src, "Your powers are not capable of taking you that far.") return - if (T.get_lumcount() > 0.1) // Too bright, cannot jump into. to_chat(src, "The destination is too bright.") @@ -307,10 +327,8 @@ for (var/mob/living/carbon/human/T in hearers(4, src)) if (T == src) continue - - if (istype(T) && (T:l_ear || T:r_ear) && istype((T:l_ear || T:r_ear), /obj/item/clothing/ears/earmuffs)) + if (istype(T) && (T.l_ear || T.r_ear) && istype((T.l_ear || T.r_ear), /obj/item/clothing/ears/earmuffs)) continue - if (!vampire_can_affect_target(T, 0)) continue @@ -369,10 +387,10 @@ desc = "A red, shimmering presence." icon = 'icons/mob/mob.dmi' icon_state = "blank" - density = 0 + density = FALSE var/last_valid_turf = null - var/can_move = 1 + var/can_move = TRUE var/mob/owner_mob = null var/datum/vampire/owner_vampire = null var/warning_level = 0 @@ -673,7 +691,6 @@ if (!istype(G)) to_chat(src, "You must be grabbing a victim in your active hand to enthrall them.") return - if (G.state == GRAB_PASSIVE || G.state == GRAB_UPGRADING) to_chat(src, "You must have the victim pinned to the ground to enthrall them.") return @@ -682,18 +699,14 @@ if(isipc(T)) to_chat(src, "[T] is not a creature you can enthrall.") return - if (!istype(T)) to_chat(src, "[T] is not a creature you can enthrall.") return - if (!vampire_can_affect_target(T, 1, 1)) return - if (!T.client || !T.mind) to_chat(src, "[T]'s mind is empty and useless. They cannot be forced into a blood bond.") return - if (vampire.status & VAMP_DRAINING) to_chat(src, "Your fangs are already sunk into a victim's neck!") return @@ -733,7 +746,6 @@ if (H == src) continue victims += H - if (!victims.len) to_chat(src, "No suitable targets.") return @@ -805,10 +817,8 @@ for (var/mob/living/carbon/human/T in view(5)) if (T == src) continue - if (!vampire_can_affect_target(T, 0, 1)) continue - if (!T.client) continue @@ -827,6 +837,32 @@ to_chat(src, "You are no longer influencing those weak of mind.") break +/mob/living/carbon/human/proc/vampire_touch_of_life() + set category = "Vampire" + set name = "Touch of Life (50)" + set desc = "You lay your hands on the target, transferring healing chemicals to them." + + var/datum/vampire/vampire = vampire_power(50, 0) + if (!vampire) + return + + var/obj/item/weapon/grab/G = get_active_hand() + if (!istype(G)) + to_chat(src, "You must be grabbing a victim in your active hand to touch them.") + return + + var/mob/living/carbon/human/T = G.affecting + if (T.species.flags & NO_BLOOD) + to_chat(src, "[T] has no blood and can not be affected by your powers!") + return + + visible_message("[src] gently touches [T].") + to_chat(T, span("notice", "You feel pure bliss as [src] touches you.")) + vampire.use_blood(50) + + T.reagents.add_reagent("rezadone", 3) + T.reagents.add_reagent("oxycodone", 0.15) //enough to get back onto their feet + // Convert a human into a vampire. /mob/living/carbon/human/proc/vampire_embrace() set category = "Vampire" @@ -842,7 +878,6 @@ if (!istype(G)) to_chat(src, "You must be grabbing a victim in your active hand to drain their blood.") return - if (G.state == GRAB_PASSIVE || G.state == GRAB_UPGRADING) to_chat(src, "You must have the victim pinned to the ground to drain their blood.") return @@ -850,19 +885,15 @@ var/mob/living/carbon/human/T = G.affecting if (!vampire_can_affect_target(T, ignore_thrall = TRUE)) return - if (!T.client) to_chat(src, "[T] is a mindless husk. The Veil has no purpose for them.") return - if (T.stat == 2) to_chat(src, "[T]'s body is broken and damaged beyond salvation. You have no use for them.") return - if (T.species.flags & NO_BLOOD) to_chat(src, "[T] has no blood and can not be affected by your powers!") return - if (vampire.status & VAMP_DRAINING) to_chat(src, "Your fangs are already sunk into a victim's neck!") return @@ -901,7 +932,6 @@ if (!mind.vampire) to_chat(src, "Your fangs have disappeared!") return - if (!T.vessel.get_reagent_amount("blood")) to_chat(src, "[T] is now drained of blood. You begin forcing your own blood into their body, spreading the corruption of the Veil to their body.") break @@ -941,7 +971,6 @@ if (status_flags & LEAPING) return - if (stat || paralysis || stunned || weakened || lying || restrained() || buckled) to_chat(src, "You cannot lean in your current state.") return @@ -967,7 +996,6 @@ if (status_flags & LEAPING) status_flags &= ~LEAPING - if (!src.Adjacent(T)) to_chat(src, "You miss!") return diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9f57890c05e..3777b06cd8c 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -213,7 +213,7 @@ BREATH ANALYZER user.show_message(text("Internal bleeding detected. Advanced scanner required for location."), 1) if(M:vessel) var/blood_volume = round(M:vessel.get_reagent_amount("blood")) - var/blood_percent = blood_volume / 560 + var/blood_percent = blood_volume / 560 var/blood_type = M.dna.b_type blood_percent *= 100 if(blood_volume <= 500 && blood_volume > 336) diff --git a/html/changelogs/geeves - vampUpdate.yml b/html/changelogs/geeves - vampUpdate.yml new file mode 100644 index 00000000000..b6fb9e9019e --- /dev/null +++ b/html/changelogs/geeves - vampUpdate.yml @@ -0,0 +1,9 @@ + +author: Geeves + +delete-after: True + +changes: + - rscadd: "Vampires can now choose whether they want their victims to remember the sucking, or forget and be paralyzed." + - rscadd: "A new vampire ability has been added, \"Touch of Life\", which gives the target beneficial chemicals." + - bugfix: "Coming down from frenzy will not call xenos human anymore." From d2cde841aa581638464b23dcbd0d67c24caaddb4 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Wed, 13 Nov 2019 22:19:31 +0000 Subject: [PATCH 6/6] "[ci skip] Automatic Build - 2019.11.13.22.19.31" --- html/changelog.html | 3 +++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/geeves - vampUpdate.yml | 9 --------- 3 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/geeves - vampUpdate.yml diff --git a/html/changelog.html b/html/changelog.html index d0029648f31..33e205aca3a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,9 @@
  • The phoron generator is now safe to use, it does not pollute the environment.
  • More mechfab things have been split into catagories that make sense. Tech level required for some things have been reduced.
  • Robotics can now print robotic internal organs to replace organic organs.
  • +
  • Vampires can now choose whether they want their victims to remember the sucking, or forget and be paralyzed.
  • +
  • A new vampire ability has been added, "Touch of Life", which gives the target beneficial chemicals.
  • +
  • Coming down from frenzy will not call xenos human anymore.

12 November 2019

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a2c2d4d1988..54872389444 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -9995,3 +9995,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: More mechfab things have been split into catagories that make sense. Tech level required for some things have been reduced. - rscadd: Robotics can now print robotic internal organs to replace organic organs. + - rscadd: Vampires can now choose whether they want their victims to remember the + sucking, or forget and be paralyzed. + - rscadd: A new vampire ability has been added, "Touch of Life", which gives the + target beneficial chemicals. + - bugfix: Coming down from frenzy will not call xenos human anymore. diff --git a/html/changelogs/geeves - vampUpdate.yml b/html/changelogs/geeves - vampUpdate.yml deleted file mode 100644 index b6fb9e9019e..00000000000 --- a/html/changelogs/geeves - vampUpdate.yml +++ /dev/null @@ -1,9 +0,0 @@ - -author: Geeves - -delete-after: True - -changes: - - rscadd: "Vampires can now choose whether they want their victims to remember the sucking, or forget and be paralyzed." - - rscadd: "A new vampire ability has been added, \"Touch of Life\", which gives the target beneficial chemicals." - - bugfix: "Coming down from frenzy will not call xenos human anymore."