Shell May Cry: A comprehensive rework of synthetics. (#20721)

https://www.youtube.com/watch?v=9mPvZ96pHJI

A pull request commissioned by the Synthetic Lore Team to
comprehensively rework synthetics (read: IPCs) and how they work in
Aurora. The objective is to make IPCs as unique as possible from humans,
upgrading the robotic feel and atmosphere, while also preserving a good
sense of balance in-game.

Key features:

- A comprehensive expansion of synthetic organs, all of which now
fulfill a purpose: hydraulics, cooling units, power systems, actuators,
diagnostics units.
- Customizable organs with benefits and drawbacks, such as with cooling
units and power systems.
- Unique ways to repair the organs and more involved steps.
- Unique damage mechanics - every organ has wiring and electronics which
affect its functioning, and they are defended by plating which provides
natural armour.
- Improved and immersive diagnostics.
- Unique features, benefits, and drawbacks for every IPC frame.
- A rework of the positronic brain, which can be either destroyed or
shut down, alongside effects caused by low integrity.
- A rework of how EMPs affect IPC organs.
- Non-binary damage states for each organ.

To-do:

- [x] Finish the unique features for each frame.
- [x] Look into if mechanical synthskin is possible.
- [x] Power system.
- [x] Posibrain mechanics.
- [ ] Passive cooling expansion.
- [x] EMP mechanics.
- [x] Repair mechanics.
- [x] Mob weight mechanics.
- [ ] Gurney for heavy mobs.
- [x] New augments.
- [ ] IPC tag scanning and flashing.

---------

Signed-off-by: Werner <1331699+Arrow768@users.noreply.github.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: Geeves <22774890+Geevies@users.noreply.github.com>
Co-authored-by: Werner <1331699+Arrow768@users.noreply.github.com>
This commit is contained in:
Matt Atlas
2025-12-21 16:26:23 +00:00
committed by GitHub
co-authored by Matt Atlas Geeves Werner
parent 1898ad3417
commit e0aa218843
201 changed files with 5962 additions and 896 deletions
@@ -0,0 +1,127 @@
/datum/design/item/synthetic
build_type = MECHFAB
time = 12 SECONDS
materials = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000)
category = "Synthetic Parts"
/datum/design/item/synthetic/air_cooling_unit
name = "Standard Air Cooling Unit"
desc = "Parts to assemble a retail air cooling unit."
build_path = /obj/item/organ/internal/machine/cooling_unit/air
materials = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000)
/datum/design/item/synthetic/zenghu_air_cooling_unit
name = "Zeng-Hu Penta-Fan Air Cooling System"
desc = "Parts to assemble a Zeng-Hu penta-fan air cooling system."
build_path = /obj/item/organ/internal/machine/cooling_unit/air/zenghu
materials = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000, MATERIAL_DIAMOND = 5000, MATERIAL_PLASTEEL = 2500)
/datum/design/item/synthetic/xion_air_cooling_unit
name = "Xion Advanced Air Cooling Unit"
desc = "Parts to assemble a Xion advanced air cooling unitw."
build_path = /obj/item/organ/internal/machine/cooling_unit/air/xion
materials = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 5000, MATERIAL_DIAMOND = 1000, MATERIAL_PLASTEEL = 7500)
/datum/design/item/synthetic/liquid_cooling_unit
name = "Standard Liquid Cooling Unit"
desc = "Parts to assemble a retail liquid cooling unit."
build_path = /obj/item/organ/internal/machine/cooling_unit/liquid
materials = list(MATERIAL_PLASTEEL = 5000, MATERIAL_GLASS = 5000, MATERIAL_ALUMINIUM = 5000)
/datum/design/item/synthetic/zenghu_liquid_cooling_unit
name = "Zeng-Hu Lamellar Liquid Cooling System"
desc = "Parts to assemble a Zeng-Hu lamellar liquid cooling system."
build_path = /obj/item/organ/internal/machine/cooling_unit/liquid/zenghu
materials = list(MATERIAL_PLASTEEL = 5000, MATERIAL_GLASS = 5000, MATERIAL_ALUMINIUM = 5000, MATERIAL_URANIUM = 2500, MATERIAL_DIAMOND = 2500)
req_tech = list(TECH_MATERIAL = 5, TECH_POWER = 4)
/datum/design/item/synthetic/xion_liquid_cooling_unit
name = "Xion Advanced Cryo-Cooling System"
desc = "Parts to assemble a Xion cryo-cooling pump and radiator array."
build_path = /obj/item/organ/internal/machine/cooling_unit/liquid/xion
materials = list(MATERIAL_PLASTEEL = 5000, MATERIAL_GLASS = 5000, MATERIAL_ALUMINIUM = 5000, MATERIAL_DIAMOND = 5000)
req_tech = list(TECH_MATERIAL = 5, TECH_POWER = 4)
/datum/design/item/synthetic/passive_cooling_unit
name = "Standard Passive Cooling Unit"
desc = "Parts to assemble a retail passive cooling unit."
build_path = /obj/item/organ/internal/machine/cooling_unit/passive
materials = list(MATERIAL_STEEL = 10000)
/datum/design/item/synthetic/zenghu_passive_cooling_unit
name = "Zeng-Hu Suprafin Cooling Fins"
desc = "Parts to assemble a Zeng-Hu passive cooling unit."
build_path = /obj/item/organ/internal/machine/cooling_unit/passive/zenghu
materials = list(MATERIAL_STEEL = 10000, MATERIAL_DIAMOND = 2500, MATERIAL_PLASTEEL = 5000)
/datum/design/item/synthetic/zenghu_passive_cooling_unit
name = "Xion Passive Intra-fin Array"
desc = "Parts to assemble a Zeng-Hu passive cooling unit."
build_path = /obj/item/organ/internal/machine/cooling_unit/passive/xion
materials = list(MATERIAL_STEEL = 10000, MATERIAL_DIAMOND = 1000, MATERIAL_PLASTEEL = 7500)
/datum/design/item/synthetic/diagnostics_unit
name = "Diagnostics Unit"
desc = "Parts to assemble a retail diagnostics unit."
build_path = /obj/item/organ/internal/machine/internal_diagnostics
materials = list(MATERIAL_PLASTEEL = 7500, MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500)
/datum/design/item/synthetic/actuator
name = "Left Arm Actuator"
desc = "Parts to assemble retail actuators for the left arm."
build_path = /obj/item/organ/internal/machine/actuators/left
materials = list(MATERIAL_PLASTEEL = 1500, MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1500)
/datum/design/item/synthetic/actuator/right
name = "Right Arm Actuator"
desc = "Parts to assemble retail actuators for the right arm."
build_path = /obj/item/organ/internal/machine/actuators/right
materials = list(MATERIAL_PLASTEEL = 1500, MATERIAL_STEEL = 5000, MATERIAL_GLASS = 1500)
/datum/design/item/synthetic/hydraulics
name = "Hydraulics"
desc = "Parts to assemble retail hydraulics."
build_path = /obj/item/organ/internal/machine/hydraulics
materials = list(MATERIAL_PLASTEEL = 3000, MATERIAL_ALUMINIUM = 1500, MATERIAL_GLASS = 1500)
/datum/design/item/synthetic/voice_synthesizer
name = "Voice Synthesizer"
desc = "Parts to assemble a retail voice synthesizer."
build_path = /obj/item/organ/internal/machine/voice_synthesizer
materials = list(MATERIAL_STEEL = 5000, MATERIAL_PLASTEEL = 1000, MATERIAL_ALUMINIUM = 1500, MATERIAL_GLASS = 1500)
/datum/design/item/synthetic/ipc_tag
name = "IPC Tag"
desc = "Parts to assemble a proprietary and specialized tag for IPCs."
build_path = /obj/item/organ/internal/machine/ipc_tag
materials = list(MATERIAL_PLASTEEL = 2000, MATERIAL_ALUMINIUM = 2000, MATERIAL_GLASS = 5000, MATERIAL_DIAMOND = 1500)
/datum/design/item/synthetic/optical_sensor
name = "Optical Sensor"
desc = "Parts to assemble retail optical sensors."
build_path = /obj/item/organ/internal/eyes/optical_sensor
materials = list(MATERIAL_PLASTEEL = 1000, MATERIAL_ALUMINIUM = 3000, MATERIAL_GLASS = 10000, MATERIAL_DIAMOND = 1000)
/datum/design/item/synthetic/power_core
name = "Power Core"
desc = "Parts to assemble a retail power core."
build_path = /obj/item/organ/internal/machine/power_core
materials = list(MATERIAL_PLASTEEL = 5000, MATERIAL_ALUMINIUM = 1000, MATERIAL_GLASS = 2500, MATERIAL_URANIUM = 1500)
/datum/design/item/synthetic/reactor
name = "Electric Reactor"
desc = "Parts to assemble a retail electric reactor for IPCs."
build_path = /obj/item/organ/internal/machine/reactor
materials = list(MATERIAL_PLASTEEL = 7500, MATERIAL_ALUMINIUM = 5000, MATERIAL_GLASS = 1000)
/datum/design/item/synthetic/access_port
name = "Access Port"
desc = "Parts to assemble a retail access port."
build_path = /obj/item/organ/internal/machine/access_port
materials = list(MATERIAL_STEEL = 2000, MATERIAL_ALUMINIUM = 2000, MATERIAL_GLASS = 1000)
/datum/design/item/synthetic/access_port
name = "Synthetic Plating"
desc = "Specially lathed steel plates to replace destroyed plating around a synthetic's internal components, or to substitute their external armour plating altogether."
build_path = /obj/item/synth_plating
materials = list(MATERIAL_STEEL = 40000)
+2 -2
View File
@@ -176,13 +176,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
src.updateUsrDialog()
return
/obj/machinery/computer/rdconsole/emp_act(severity)
/obj/machinery/computer/rdconsole/emag_act(remaining_charges, mob/user, emag_source)
. = ..()
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
to_chat(usr, SPAN_NOTICE("You you disable the security protocols."))
to_chat(usr, SPAN_NOTICE("You disable the security protocols."))
return 1
/obj/machinery/computer/rdconsole/Topic(href, href_list)
+1 -1
View File
@@ -363,7 +363,7 @@
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
to_chat(user, SPAN_NOTICE("You you disable the security protocols."))
to_chat(user, SPAN_NOTICE("You disable the security protocols."))
src.updateUsrDialog()
return 1