From cbf607e95d372b8057c551e2c79a25ff19534e13 Mon Sep 17 00:00:00 2001 From: John Space Date: Thu, 12 Dec 2024 07:59:50 -0800 Subject: [PATCH 01/11] Goob Mechs real not fake (#165) Co-authored-by: gluesniffler <159397573+gluesniffler@users.noreply.github.com> --- .../Weapons/Ranged/Systems/GunSystem.cs | 4 + .../Equipment/EntitySystems/MechGunSystem.cs | 61 ++ .../Mech/Components/MechComponent.cs | 7 + .../Mech/EntitySystems/SharedMechSystem.cs | 14 + .../Weapons/Ranged/Systems/SharedGunSystem.cs | 38 +- .../_Goobstation/lathe/lathe-categories.ftl | 10 + .../Locale/en-US/_Goobstation/mech/mechs.ftl | 11 + .../_Goobstation/research/technologies.ftl | 8 + .../_Goobstation/store/uplink-catalog.ftl | 7 + .../Locale/en-US/lathe/lathe-categories.ftl | 1 - .../Objects/Devices/Electronics/mech.yml | 2 +- .../Objects/Specific/Mech/mecha_equipment.yml | 12 +- .../Entities/Objects/Specific/Mech/mechs.yml | 53 +- .../Entities/Structures/Machines/lathe.yml | 56 ++ .../Prototypes/Recipes/Lathes/categories.yml | 4 - .../Prototypes/Recipes/Lathes/mech_parts.yml | 55 +- Resources/Prototypes/Research/arsenal.yml | 19 + Resources/Prototypes/Research/industrial.yml | 35 +- .../Catalog/Bounties/bounties.yml | 43 ++ .../Catalog/Fills/Crates/syndicate.yml | 30 + .../_Goobstation/Catalog/uplink_catalog.yml | 28 + .../_Goobstation/Damage/modifier_sets.yml | 107 ++++ .../Entities/Markers/Spawners/mechs.yml | 186 ++++++ .../Electronics/exosuit_components.yml | 104 +++ .../Objects/Devices/Electronics/mech.yml | 139 +++++ .../Specific/Mech/Weapons/Gun/base.yml | 18 + .../Specific/Mech/Weapons/Gun/combat.yml | 303 +++++++++ .../Specific/Mech/Weapons/Gun/debug.yml | 98 +++ .../Specific/Mech/Weapons/Gun/industrial.yml | 23 + .../Specific/Mech/Weapons/Gun/special.yml | 55 ++ .../Specific/Mech/Weapons/Melee/base.yml | 15 + .../Specific/Mech/Weapons/Melee/combat.yml | 20 + .../Specific/Mech/Weapons/Melee/debug.yml | 18 + .../Mech/Weapons/Melee/industrial.yml | 51 ++ .../Specific/Mech/mech_construction.yml | 494 +++++++++++++++ .../Objects/Specific/Mech/mecha_equipment.yml | 53 ++ .../Entities/Objects/Specific/Mech/mechs.yml | 590 ++++++++++++++++++ .../Graphs/mechs/clarke_construction.yml | 156 +++++ .../Graphs/mechs/durand_construction.yml | 180 ++++++ .../Graphs/mechs/gygax_construction.yml | 180 ++++++ .../Graphs/mechs/ripleymkii_construction.yml | 138 ++++ .../Recipes/Lathes/categories.yml | 40 ++ .../Recipes/Lathes/electronics.yml | 39 ++ .../Recipes/Lathes/mech_parts.yml | 268 ++++++++ .../_Goobstation/Recipes/Lathes/security.yml | 102 +++ .../_Goobstation/Research/arsenal.yml | 66 ++ .../Research/civilianservices.yml | 18 + Resources/Prototypes/_Goobstation/tags.yml | 107 +++- .../mecha_equipment.rsi/mecha_air_tank.png | Bin 0 -> 612 bytes .../Mech/mecha_equipment.rsi/mecha_bin.png | Bin 0 -> 343 bytes .../Mech/mecha_equipment.rsi/mecha_camera.png | Bin 0 -> 507 bytes .../mecha_equipment.rsi/mecha_chainsword.png | Bin 0 -> 3636 bytes .../Mech/mecha_equipment.rsi/mecha_radio.png | Bin 0 -> 357 bytes .../mecha_equipment.rsi/mecha_sleeper.png | Bin 0 -> 562 bytes .../mecha_equipment.rsi/mecha_syringegun.png | Bin 0 -> 476 bytes .../Mech/mecha_equipment.rsi/meta.json | 37 +- .../Mech/mecha_equipment.rsi/paddy_claw.png | Bin 0 -> 889 bytes .../Mech/mecha_equipment.rsi/paddyupgrade.png | Bin 0 -> 1230 bytes .../ripley_chassis.png | Bin 1292 -> 4113 bytes .../ripley_harness+o.png | Bin 719 -> 3438 bytes .../ripley_harness.png | Bin 718 -> 3441 bytes .../Mech/clarke_construction.rsi/clarke0.png | Bin 0 -> 1302 bytes .../Mech/clarke_construction.rsi/clarke1.png | Bin 0 -> 1347 bytes .../Mech/clarke_construction.rsi/clarke10.png | Bin 0 -> 1532 bytes .../Mech/clarke_construction.rsi/clarke11.png | Bin 0 -> 1543 bytes .../Mech/clarke_construction.rsi/clarke12.png | Bin 0 -> 1514 bytes .../Mech/clarke_construction.rsi/clarke13.png | Bin 0 -> 1510 bytes .../Mech/clarke_construction.rsi/clarke14.png | Bin 0 -> 1460 bytes .../Mech/clarke_construction.rsi/clarke15.png | Bin 0 -> 1378 bytes .../Mech/clarke_construction.rsi/clarke16.png | Bin 0 -> 1565 bytes .../Mech/clarke_construction.rsi/clarke2.png | Bin 0 -> 1351 bytes .../Mech/clarke_construction.rsi/clarke3.png | Bin 0 -> 1594 bytes .../Mech/clarke_construction.rsi/clarke4.png | Bin 0 -> 1489 bytes .../Mech/clarke_construction.rsi/clarke5.png | Bin 0 -> 1496 bytes .../Mech/clarke_construction.rsi/clarke6.png | Bin 0 -> 1495 bytes .../Mech/clarke_construction.rsi/clarke7.png | Bin 0 -> 1504 bytes .../Mech/clarke_construction.rsi/clarke8.png | Bin 0 -> 1516 bytes .../Mech/clarke_construction.rsi/clarke9.png | Bin 0 -> 1533 bytes .../clarke_chassis.png | Bin 0 -> 1302 bytes .../clarke_harness+o.png | Bin 0 -> 741 bytes .../clarke_harness.png | Bin 0 -> 741 bytes .../clarke_construction.rsi/clarke_head+o.png | Bin 0 -> 308 bytes .../clarke_construction.rsi/clarke_head.png | Bin 0 -> 308 bytes .../clarke_l_arm+o.png | Bin 0 -> 286 bytes .../clarke_construction.rsi/clarke_l_arm.png | Bin 0 -> 289 bytes .../clarke_r_arm+o.png | Bin 0 -> 290 bytes .../clarke_construction.rsi/clarke_r_arm.png | Bin 0 -> 293 bytes .../clarke_treads+o.png | Bin 0 -> 601 bytes .../clarke_construction.rsi/clarke_treads.png | Bin 0 -> 601 bytes .../Mech/clarke_construction.rsi/meta.json | 95 +++ .../Mech/durand_construction.rsi/durand0.png | Bin 0 -> 1017 bytes .../Mech/durand_construction.rsi/durand1.png | Bin 0 -> 1022 bytes .../Mech/durand_construction.rsi/durand10.png | Bin 0 -> 1117 bytes .../Mech/durand_construction.rsi/durand11.png | Bin 0 -> 1111 bytes .../Mech/durand_construction.rsi/durand12.png | Bin 0 -> 1122 bytes .../Mech/durand_construction.rsi/durand13.png | Bin 0 -> 1112 bytes .../Mech/durand_construction.rsi/durand14.png | Bin 0 -> 1098 bytes .../Mech/durand_construction.rsi/durand15.png | Bin 0 -> 1081 bytes .../Mech/durand_construction.rsi/durand16.png | Bin 0 -> 1152 bytes .../Mech/durand_construction.rsi/durand17.png | Bin 0 -> 1105 bytes .../Mech/durand_construction.rsi/durand18.png | Bin 0 -> 1080 bytes .../Mech/durand_construction.rsi/durand2.png | Bin 0 -> 1248 bytes .../Mech/durand_construction.rsi/durand3.png | Bin 0 -> 1075 bytes .../Mech/durand_construction.rsi/durand4.png | Bin 0 -> 1094 bytes .../Mech/durand_construction.rsi/durand5.png | Bin 0 -> 1093 bytes .../Mech/durand_construction.rsi/durand6.png | Bin 0 -> 1103 bytes .../Mech/durand_construction.rsi/durand7.png | Bin 0 -> 1100 bytes .../Mech/durand_construction.rsi/durand8.png | Bin 0 -> 1108 bytes .../Mech/durand_construction.rsi/durand9.png | Bin 0 -> 1101 bytes .../durand_construction.rsi/durand_armor.png | Bin 0 -> 1035 bytes .../durand_chassis.png | Bin 0 -> 1022 bytes .../durand_harness+o.png | Bin 0 -> 737 bytes .../durand_harness.png | Bin 0 -> 737 bytes .../durand_construction.rsi/durand_head+o.png | Bin 0 -> 237 bytes .../durand_construction.rsi/durand_head.png | Bin 0 -> 238 bytes .../durand_l_arm+o.png | Bin 0 -> 309 bytes .../durand_construction.rsi/durand_l_arm.png | Bin 0 -> 311 bytes .../durand_l_leg+o.png | Bin 0 -> 299 bytes .../durand_construction.rsi/durand_l_leg.png | Bin 0 -> 306 bytes .../durand_r_arm+o.png | Bin 0 -> 303 bytes .../durand_construction.rsi/durand_r_arm.png | Bin 0 -> 309 bytes .../durand_r_leg+o.png | Bin 0 -> 288 bytes .../durand_construction.rsi/durand_r_leg.png | Bin 0 -> 301 bytes .../Mech/durand_construction.rsi/meta.json | 111 ++++ .../Mech/gygax_construction.rsi/gygax0.png | Bin 0 -> 1248 bytes .../Mech/gygax_construction.rsi/gygax1.png | Bin 0 -> 1242 bytes .../Mech/gygax_construction.rsi/gygax10.png | Bin 0 -> 1386 bytes .../Mech/gygax_construction.rsi/gygax11.png | Bin 0 -> 1384 bytes .../Mech/gygax_construction.rsi/gygax12.png | Bin 0 -> 1399 bytes .../Mech/gygax_construction.rsi/gygax13.png | Bin 0 -> 1401 bytes .../Mech/gygax_construction.rsi/gygax14.png | Bin 0 -> 1401 bytes .../Mech/gygax_construction.rsi/gygax15.png | Bin 0 -> 1401 bytes .../Mech/gygax_construction.rsi/gygax16.png | Bin 0 -> 1363 bytes .../Mech/gygax_construction.rsi/gygax17.png | Bin 0 -> 1406 bytes .../Mech/gygax_construction.rsi/gygax18.png | Bin 0 -> 1428 bytes .../Mech/gygax_construction.rsi/gygax19.png | Bin 0 -> 1672 bytes .../Mech/gygax_construction.rsi/gygax2.png | Bin 0 -> 1428 bytes .../Mech/gygax_construction.rsi/gygax20.png | Bin 0 -> 1674 bytes .../Mech/gygax_construction.rsi/gygax3.png | Bin 0 -> 1363 bytes .../Mech/gygax_construction.rsi/gygax4.png | Bin 0 -> 1375 bytes .../Mech/gygax_construction.rsi/gygax5.png | Bin 0 -> 1381 bytes .../Mech/gygax_construction.rsi/gygax6.png | Bin 0 -> 1384 bytes .../Mech/gygax_construction.rsi/gygax7.png | Bin 0 -> 1388 bytes .../Mech/gygax_construction.rsi/gygax8.png | Bin 0 -> 1394 bytes .../Mech/gygax_construction.rsi/gygax9.png | Bin 0 -> 1379 bytes .../gygax_construction.rsi/gygax_armor.png | Bin 0 -> 1312 bytes .../gygax_construction.rsi/gygax_chassis.png | Bin 0 -> 1251 bytes .../gygax_harness+o.png | Bin 0 -> 587 bytes .../gygax_construction.rsi/gygax_harness.png | Bin 0 -> 586 bytes .../gygax_construction.rsi/gygax_head+o.png | Bin 0 -> 244 bytes .../gygax_construction.rsi/gygax_head.png | Bin 0 -> 246 bytes .../gygax_construction.rsi/gygax_l_arm+o.png | Bin 0 -> 412 bytes .../gygax_construction.rsi/gygax_l_arm.png | Bin 0 -> 408 bytes .../gygax_construction.rsi/gygax_l_leg+o.png | Bin 0 -> 389 bytes .../gygax_construction.rsi/gygax_l_leg.png | Bin 0 -> 404 bytes .../gygax_construction.rsi/gygax_r_arm+o.png | Bin 0 -> 393 bytes .../gygax_construction.rsi/gygax_r_arm.png | Bin 0 -> 396 bytes .../gygax_construction.rsi/gygax_r_leg+o.png | Bin 0 -> 400 bytes .../gygax_construction.rsi/gygax_r_leg.png | Bin 0 -> 419 bytes .../Mech/gygax_construction.rsi/meta.json | 117 ++++ .../ripleymkii_construction.rsi/meta.json | 113 ++++ .../ripleymkii0.png | Bin 0 -> 4163 bytes .../ripleymkii1.png | Bin 0 -> 1371 bytes .../ripleymkii10.png | Bin 0 -> 1558 bytes .../ripleymkii11.png | Bin 0 -> 1561 bytes .../ripleymkii12.png | Bin 0 -> 1553 bytes .../ripleymkii13.png | Bin 0 -> 1553 bytes .../ripleymkii14.png | Bin 0 -> 1553 bytes .../ripleymkii15.png | Bin 0 -> 1427 bytes .../ripleymkii16.png | Bin 0 -> 1453 bytes .../ripleymkii17.png | Bin 0 -> 1502 bytes .../ripleymkii18.png | Bin 0 -> 1508 bytes .../ripleymkii19.png | Bin 0 -> 3946 bytes .../ripleymkii2.png | Bin 0 -> 1372 bytes .../ripleymkii20.png | Bin 0 -> 3960 bytes .../ripleymkii3.png | Bin 0 -> 1526 bytes .../ripleymkii4.png | Bin 0 -> 1519 bytes .../ripleymkii5.png | Bin 0 -> 1532 bytes .../ripleymkii6.png | Bin 0 -> 1535 bytes .../ripleymkii7.png | Bin 0 -> 1541 bytes .../ripleymkii8.png | Bin 0 -> 1544 bytes .../ripleymkii9.png | Bin 0 -> 1557 bytes .../ripleymkii_chassis.png | Bin 0 -> 4171 bytes .../ripleymkii_harness+o.png | Bin 0 -> 3438 bytes .../ripleymkii_harness.png | Bin 0 -> 3441 bytes .../ripleymkii_l_arm+o.png | Bin 0 -> 352 bytes .../ripleymkii_l_arm.png | Bin 0 -> 357 bytes .../ripleymkii_l_leg+o.png | Bin 0 -> 359 bytes .../ripleymkii_l_leg.png | Bin 0 -> 369 bytes .../ripleymkii_r_arm+o.png | Bin 0 -> 367 bytes .../ripleymkii_r_arm.png | Bin 0 -> 380 bytes .../ripleymkii_r_leg+o.png | Bin 0 -> 382 bytes .../ripleymkii_r_leg.png | Bin 0 -> 387 bytes .../ripleymkii_upgrade_kit+o.png | Bin 0 -> 2962 bytes .../ripleymkii_upgrade_kit.png | Bin 0 -> 4020 bytes 195 files changed, 4478 insertions(+), 61 deletions(-) create mode 100644 Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs create mode 100644 Resources/Locale/en-US/_Goobstation/lathe/lathe-categories.ftl create mode 100644 Resources/Locale/en-US/_Goobstation/mech/mechs.ftl create mode 100644 Resources/Locale/en-US/_Goobstation/research/technologies.ftl create mode 100644 Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl create mode 100644 Resources/Prototypes/_Goobstation/Catalog/Bounties/bounties.yml create mode 100644 Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/syndicate.yml create mode 100644 Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml create mode 100644 Resources/Prototypes/_Goobstation/Damage/modifier_sets.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Markers/Spawners/mechs.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/exosuit_components.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/mech.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/base.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/combat.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/debug.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/special.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/base.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/combat.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/debug.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mech_construction.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mecha_equipment.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/clarke_construction.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/durand_construction.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/gygax_construction.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/ripleymkii_construction.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Lathes/categories.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Lathes/electronics.yml create mode 100644 Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml create mode 100644 Resources/Prototypes/_Goobstation/Research/arsenal.yml create mode 100644 Resources/Prototypes/_Goobstation/Research/civilianservices.yml create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_air_tank.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_bin.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_camera.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_chainsword.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_radio.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_sleeper.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_syringegun.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddy_claw.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddyupgrade.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke0.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke1.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke10.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke11.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke12.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke13.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke14.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke15.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke16.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke2.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke3.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke4.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke5.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke6.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke7.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke8.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke9.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_chassis.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_head+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_head.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_treads+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_treads.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/meta.json create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand0.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand1.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand10.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand11.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand12.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand13.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand14.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand15.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand16.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand17.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand18.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand2.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand3.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand4.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand5.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand6.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand7.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand8.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand9.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_armor.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_chassis.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/meta.json create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax0.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax1.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax10.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax11.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax12.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax13.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax14.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax15.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax16.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax17.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax18.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax19.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax2.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax20.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax3.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax4.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax5.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax6.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax7.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax8.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax9.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_armor.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_chassis.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_harness+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_harness.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_head+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_head.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/meta.json create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/meta.json create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii0.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii1.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii10.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii11.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii12.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii13.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii14.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii15.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii16.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii17.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii18.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii19.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii2.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii20.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii3.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii4.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii5.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii6.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii7.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii8.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii9.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_chassis.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_harness+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_harness.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_leg+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_leg.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit+o.png create mode 100644 Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit.png diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs index 0ad22bf1d87..acb111bfcf1 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs @@ -5,6 +5,7 @@ using Content.Client.Weapons.Ranged.Components; using Content.Shared.Camera; using Content.Shared.CombatMode; +using Content.Shared.Mech.Components; // Goobstation using Content.Shared.Weapons.Ranged; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; @@ -156,6 +157,9 @@ public override void Update(float frameTime) var entity = entityNull.Value; + if (TryComp(entity, out var mechPilot)) // Goobstation + entity = mechPilot.Mech; + if (!TryGetGun(entity, out var gunUid, out var gun)) { return; diff --git a/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs b/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs new file mode 100644 index 00000000000..5d23f2ebc5b --- /dev/null +++ b/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs @@ -0,0 +1,61 @@ +using Content.Server.Mech.Systems; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Shared.Mech.Components; +using Content.Shared.Mech.Equipment.Components; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Shared.Random; + +namespace Content.Server.Mech.Equipment.EntitySystems; +public sealed class MechGunSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly MechSystem _mech = default!; + [Dependency] private readonly BatterySystem _battery = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(MechGunShot); + } + + private void MechGunShot(EntityUid uid, MechEquipmentComponent component, ref GunShotEvent args) + { + if (!component.EquipmentOwner.HasValue) + return; + + if (!TryComp(component.EquipmentOwner.Value, out var mech)) + return; + + if (TryComp(uid, out var battery)) + { + ChargeGunBattery(uid, battery); + return; + } + } + + private void ChargeGunBattery(EntityUid uid, BatteryComponent component) + { + if (!TryComp(uid, out var mechEquipment) || !mechEquipment.EquipmentOwner.HasValue) + return; + + if (!TryComp(mechEquipment.EquipmentOwner.Value, out var mech)) + return; + + var maxCharge = component.MaxCharge; + var currentCharge = component.CurrentCharge; + + var chargeDelta = maxCharge - currentCharge; + + // TODO: The battery charge of the mech would be spent directly when fired. + if (chargeDelta <= 0 || mech.Energy - chargeDelta < 0) + return; + + if (!_mech.TryChangeEnergy(mechEquipment.EquipmentOwner.Value, -chargeDelta, mech)) + return; + + _battery.SetCharge(uid, component.MaxCharge, component); + } +} diff --git a/Content.Shared/Mech/Components/MechComponent.cs b/Content.Shared/Mech/Components/MechComponent.cs index ba380492bc9..4aa3615b206 100644 --- a/Content.Shared/Mech/Components/MechComponent.cs +++ b/Content.Shared/Mech/Components/MechComponent.cs @@ -13,6 +13,13 @@ namespace Content.Shared.Mech.Components; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class MechComponent : Component { + /// + /// Goobstation: Whether or not an emag disables it. + /// + [DataField("breakOnEmag")] + [AutoNetworkedField] + public bool BreakOnEmag = true; + /// /// How much "health" the mech has left. /// diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index 2ec48085c47..b1e0c00f6df 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -21,6 +21,11 @@ using Robust.Shared.Serialization; using Robust.Shared.Timing; +// Goobstation Change +using Content.Shared.Emag.Components; +using Content.Shared.Emag.Systems; +using Content.Shared.Weapons.Ranged.Events; + namespace Content.Shared.Mech.EntitySystems; /// @@ -51,6 +56,7 @@ public override void Initialize() SubscribeLocalEvent(OnGetAdditionalAccess); SubscribeLocalEvent(OnDragDrop); SubscribeLocalEvent(OnCanDragDrop); + SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnGetMeleeWeapon); SubscribeLocalEvent(OnCanAttackFromContainer); @@ -449,6 +455,14 @@ private void OnCanDragDrop(EntityUid uid, MechComponent component, ref CanDropTa args.CanDrop |= !component.Broken && CanInsert(uid, args.Dragged, component); } + private void OnEmagged(EntityUid uid, MechComponent component, ref GotEmaggedEvent args) // Goobstation + { + if (!component.BreakOnEmag) + return; + args.Handled = true; + component.EquipmentWhitelist = null; + Dirty(uid, component); + } } /// diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 37e6451f92d..d4593b50027 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Gravity; using Content.Shared.Hands; using Content.Shared.Hands.Components; +using Content.Shared.Mech.Components; // Goobstation using Content.Shared.Popups; using Content.Shared.Projectiles; using Content.Shared.Tag; @@ -128,11 +129,15 @@ private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) var user = args.SenderSession.AttachedEntity; if (user == null || - !_combatMode.IsInCombatMode(user) || - !TryGetGun(user.Value, out var ent, out var gun)) - { + !_combatMode.IsInCombatMode(user)) + return; + + if (TryComp(user.Value, out var mechPilot)) + user = mechPilot.Mech; + + if (!TryGetGun(user.Value, out var ent, out var gun) || + HasComp(user)) return; - } if (ent != GetEntity(msg.Gun)) return; @@ -146,14 +151,18 @@ private void OnStopShootRequest(RequestStopShootEvent ev, EntitySessionEventArgs { var gunUid = GetEntity(ev.Gun); - if (args.SenderSession.AttachedEntity == null || - !TryComp(gunUid, out var gun) || - !TryGetGun(args.SenderSession.AttachedEntity.Value, out _, out var userGun)) - { + var user = args.SenderSession.AttachedEntity; + + if (user == null) + return; + + if (TryComp(user.Value, out var mechPilot)) + user = mechPilot.Mech; + + if (!TryGetGun(user.Value, out var ent, out var gun)) return; - } - if (userGun != gun) + if (ent != gunUid) return; StopShooting(gunUid, gun); @@ -172,6 +181,15 @@ public bool TryGetGun(EntityUid entity, out EntityUid gunEntity, [NotNullWhen(tr gunEntity = default; gunComp = null; + if (TryComp(entity, out var mech) && + mech.CurrentSelectedEquipment.HasValue && + TryComp(mech.CurrentSelectedEquipment.Value, out var mechGun)) + { + gunEntity = mech.CurrentSelectedEquipment.Value; + gunComp = mechGun; + return true; + } + if (EntityManager.TryGetComponent(entity, out HandsComponent? hands) && hands.ActiveHandEntity is { } held && TryComp(held, out GunComponent? gun)) diff --git a/Resources/Locale/en-US/_Goobstation/lathe/lathe-categories.ftl b/Resources/Locale/en-US/_Goobstation/lathe/lathe-categories.ftl new file mode 100644 index 00000000000..c72f9b46fed --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/lathe/lathe-categories.ftl @@ -0,0 +1,10 @@ +lathe-category-mechs-vim = Vim +lathe-category-mechs-honker = H.O.N.K. +lathe-category-mechs-hamptr = H.A.M.P.T.R. +lathe-category-mechs-ripley = Riley +lathe-category-mechs-ripleymkii = Riley MK-II +lathe-category-mechs-clarke = Clarke +lathe-category-mechs-gygax = Gygax +lathe-category-mechs-durand = Durand +lathe-category-mechs-equipment = Mech equipment +lathe-category-mechs-weapons = Mech weapons diff --git a/Resources/Locale/en-US/_Goobstation/mech/mechs.ftl b/Resources/Locale/en-US/_Goobstation/mech/mechs.ftl new file mode 100644 index 00000000000..4543710a04a --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/mech/mechs.ftl @@ -0,0 +1,11 @@ +goobstation-clarke-bounty-desc = The local mining colony at the Sol Sector requires some more mechs. Send us a Clarke. +goobstation-clarke-bounty-name = Clarke + +goobstation-durand-bounty-desc = The Tranquility Assurance Force requires some more defensive power on the frontlines. We request a Durand. +goobstation-durand-bounty-name = Durand + +goobstation-ripley-bounty-desc = Hephaestus Industries is looking for some spare mechs to use in their dig sites. Send us a Ripley MkII. +goobstation-ripley-bounty-name = Ripley MkII + +goobstation-gygax-bounty-desc = The Tranquility Assurance Force needs to enhance their Peacekeeping squadrons, we request a Gygax. +goobstation-gygax-bounty-name = Gygax \ No newline at end of file diff --git a/Resources/Locale/en-US/_Goobstation/research/technologies.ftl b/Resources/Locale/en-US/_Goobstation/research/technologies.ftl new file mode 100644 index 00000000000..31a8640b241 --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/research/technologies.ftl @@ -0,0 +1,8 @@ +research-technology-weapon-plasma-rifle = Experimental plasma rifle +research-technology-medical-defense = Medical Control Gear +research-technology-ripley-mkii = Ripley MK-II +research-technology-clarke = Clarke +research-technology-gygax = Gygax +research-technology-durand = Durand +research-technology-explosive-mech-ammunition = Explosive Mech Ammunition +research-technology-honk-weapons = Bananium Weapons diff --git a/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl b/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl new file mode 100644 index 00000000000..f94d63469d7 --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl @@ -0,0 +1,7 @@ +# Mechs + +uplink-mech-teleporter-heavy-name = Heavy Mech teleporter +uplink-mech-teleporter-heavy-desc = Contains a heavily armored Cybersun mech with an integrated chainsword, Ultra AC-2, LBX AC 10 "Scattershot", BRM-6 Missile Rack and P-X Tesla Cannon. + +uplink-mech-teleporter-assault-name = Assault Mech teleporter +uplink-mech-teleporter-assault-desc = Contains a lightly armored Cybersun mech with an integrated chainsword, LBX AC 10 "Scattershot", SRM-8 Light Missile Rack and P-X Tesla Cannon. diff --git a/Resources/Locale/en-US/lathe/lathe-categories.ftl b/Resources/Locale/en-US/lathe/lathe-categories.ftl index 9fa331f3a4a..2a31138b7a6 100644 --- a/Resources/Locale/en-US/lathe/lathe-categories.ftl +++ b/Resources/Locale/en-US/lathe/lathe-categories.ftl @@ -1,7 +1,6 @@ lathe-category-ammo = Ammo lathe-category-circuitry = Circuitry lathe-category-lights = Lights -lathe-category-mechs = Mechs lathe-category-parts = Parts lathe-category-robotics = Robotics lathe-category-tacsuits = Tacsuits diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml index f224c1c2bf9..47c843281a0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml @@ -78,7 +78,7 @@ components: - type: Sprite sprite: Objects/Misc/module.rsi - state: id_mod + state: mcontroller # Goobstation - type: Tag tags: - HonkerTargetingControlModule diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml index a97ca0f017b..e909bac111a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml @@ -15,7 +15,7 @@ - type: entity id: MechEquipmentGrabber - parent: BaseMechEquipment + parent: [ BaseMechEquipment, IndustrialMechEquipment ] # Goobstation name: hydraulic clamp description: Gives the mech the ability to grab things and drag them around. components: @@ -40,18 +40,19 @@ maxContents: 4 grabDelay: 3 grabEnergyDelta: -20 - - type: Tag - tags: - - SmallMech - type: UIFragment ui: !type:MechGrabberUi - type: ContainerContainer containers: item-container: !type:Container + - type: Tag # Goobstation + tags: + - IndustrialMech + - SmallMech - type: entity id: MechEquipmentHorn - parent: BaseMechEquipment + parent: [ BaseMechEquipment, SpecialMechEquipment ] # Goobstation name: mech horn description: An enhanced bike horn that plays a hilarious array of sounds for the enjoyment of the crew. HONK! components: @@ -69,4 +70,3 @@ ui: !type:MechSoundboardUi - type: UseDelay delay: 0.5 - # TODO: tag as being for H.O.N.K. only!!! diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 9da1e9753fc..c062fcf5bbb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -83,19 +83,59 @@ mech-pilot-slot: !type:ContainerSlot mech-equipment-container: !type:Container mech-battery-slot: !type:ContainerSlot + paper_label: !type:ContainerSlot # Goobstation - type: Damageable damageContainer: Inorganic - damageModifierSet: Metallic + damageModifierSet: LightArmor # Goobstation - type: FootstepModifier footstepSoundCollection: path: /Audio/Mecha/mechmove03.ogg - type: GuideHelp guides: - Robotics + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1000 # Goobstation + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ChangeConstructionNodeBehavior + node: start + - !type:DoActsBehavior + acts: ["Destruction"] + # Goobstation Change Start + - type: GenericVisualizer + visuals: + enum.PaperLabelVisuals.HasLabel: + enum.PaperLabelVisuals.Layer: + True: { visible: true } + False: { visible: false } + enum.PaperLabelVisuals.LabelType: + enum.PaperLabelVisuals.Layer: + Paper: { state: paper } + Bounty: { state: bounty } + CaptainsPaper: { state: captains_paper } + Invoice: { state: invoice } + - type: PaperLabel + labelSlot: + insertVerbText: Attach Label + ejectVerbText: Remove Label + whitelist: + components: + - Paper + blacklist: + tags: + - Book + - type: StaticPrice + price: 450 + # Goobstation Change End - type: entity id: MechRipley - parent: BaseMech + parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] # Goobstation name: Ripley APLU description: Versatile and lightly armored, the Ripley is useful for almost any heavy work scenario. The "APLU" stands for Autonomous Power Loading Unit. components: @@ -137,9 +177,8 @@ mech-battery-slot: - PowerCellHigh -# TODO: have a whitelist for honker equipment - type: entity - parent: BaseMech + parent: [ BaseMech, SpecialMech, BaseCivilianContraband ] # Goobstation id: MechHonker name: H.O.N.K. description: "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!" @@ -159,6 +198,7 @@ openState: honker-open brokenState: honker-broken mechToPilotDamageMultiplier: 0.5 + airtight: true # Goobstation - Space Honk is real. pilotWhitelist: components: - HumanoidAppearance @@ -174,7 +214,7 @@ - PowerCellHigh - type: entity - parent: BaseMech + parent: [ BaseMech, SmallMech ] # Goobstation id: MechHamtr name: HAMTR description: "An experimental mech which uses a brain–computer interface to connect directly to a hamsters brain." @@ -196,9 +236,6 @@ mechToPilotDamageMultiplier: 0.2 maxEquipmentAmount: 2 airtight: true - equipmentWhitelist: - tags: - - SmallMech pilotWhitelist: tags: - Hamster diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 7355c3e5d16..5ed95928b09 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -574,6 +574,14 @@ - AutodocCircuitboard # Shitmed Change - OperatingTableCircuitboard # Shitmed Change - MaterialSiloCircuitboard + - GygaxCentralElectronics + - GygaxPeripheralsElectronics + - GygaxTargetingElectronics + - DurandCentralElectronics + - DurandPeripheralsElectronics + - DurandTargetingElectronics + - ClarkeCentralElectronics + - ClarkePeripheralsElectronics - type: EmagLatheRecipes emagDynamicRecipes: - ShuttleGunDusterCircuitboard @@ -672,6 +680,8 @@ - RightLegBorgService - HeadBorgService - TorsoBorgService + - MechAirTank # Goobstation + - MechThruster # Goobstation dynamicRecipes: - ProximitySensor - BorgModuleLightReplacer @@ -703,6 +713,8 @@ - RipleyRArm - RipleyLLeg - RipleyRLeg + - RipleyMKIIHarness + - RipleyUpgradeKit - MechEquipmentGrabber - HonkerHarness - HonkerLArm @@ -721,6 +733,41 @@ - JetpackBlue - JetpackMini # End Nyano additions + - ClarkeHarness + - ClarkeHead + - ClarkeLArm + - ClarkeRArm + - ClarkeTreads + - DurandHarness + - DurandArmor + - DurandHead + - DurandLArm + - DurandLLeg + - DurandRArm + - DurandRLeg + - GygaxHarness + - GygaxArmor + - GygaxHead + - GygaxLArm + - GygaxLLeg + - GygaxRArm + - GygaxRLeg + - MechEquipmentDrill + - MechEquipmentDrillDiamond + - MechEquipmentKineticAccelerator + - MechEquipmentHonkerBananaMortar + - MechEquipmentHonkerMousetrapMortar + - type: EmagLatheRecipes + emagDynamicRecipes: + - WeaponMechCombatImmolationGun + - WeaponMechCombatSolarisLaser + - WeaponMechCombatFiredartLaser + - WeaponMechCombatUltraRifle + - WeaponMechCombatShotgun + - WeaponMechCombatShotgunIncendiary + - WeaponMechCombatDisabler + - WeaponMechCombatFlashbangLauncher + - WeaponMechCombatMissileRack8 - type: MaterialStorage whitelist: tags: @@ -984,6 +1031,15 @@ - ClothingOuterHardsuitCombatAdvanced - ClothingOuterHardsuitSyndieReverseEngineered - ClothingOuterHardsuitJuggernautReverseEngineered + - WeaponMechCombatImmolationGun + - WeaponMechCombatSolarisLaser + - WeaponMechCombatFiredartLaser + - WeaponMechCombatUltraRifle + - WeaponMechCombatShotgun + - WeaponMechCombatShotgunIncendiary + - WeaponMechCombatDisabler + - WeaponMechCombatFlashbangLauncher + - WeaponMechCombatMissileRack8 - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Recipes/Lathes/categories.yml b/Resources/Prototypes/Recipes/Lathes/categories.yml index 37883732552..98205eb4d06 100644 --- a/Resources/Prototypes/Recipes/Lathes/categories.yml +++ b/Resources/Prototypes/Recipes/Lathes/categories.yml @@ -10,10 +10,6 @@ id: Lights name: lathe-category-lights -- type: latheCategory - id: Mech - name: lathe-category-mechs - - type: latheCategory id: Parts name: lathe-category-parts diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml index 4f9f84d0dc8..0c029622740 100644 --- a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml @@ -2,7 +2,7 @@ - type: latheRecipe id: RipleyHarness result: RipleyHarness - category: Mech + category: Ripley # Goobstation completetime: 10 materials: Steel: 1500 @@ -11,7 +11,7 @@ - type: latheRecipe id: RipleyLArm result: RipleyLArm - category: Mech + category: Ripley # Goobstation completetime: 10 materials: Steel: 1000 @@ -20,7 +20,7 @@ - type: latheRecipe id: RipleyLLeg result: RipleyLLeg - category: Mech + category: Ripley # Goobstation completetime: 10 materials: Steel: 1000 @@ -29,7 +29,7 @@ - type: latheRecipe id: RipleyRLeg result: RipleyRLeg - category: Mech + category: Ripley # Goobstation completetime: 10 materials: Steel: 1000 @@ -38,7 +38,7 @@ - type: latheRecipe id: RipleyRArm result: RipleyRArm - category: Mech + category: Ripley completetime: 10 materials: Steel: 1000 @@ -47,17 +47,18 @@ - type: latheRecipe id: MechEquipmentGrabber result: MechEquipmentGrabber - category: Mech + category: MechEquipment completetime: 10 materials: - Steel: 500 - Plastic: 200 + Steel: 1000 + Glass: 750 + # H.O.N.K. - type: latheRecipe id: HonkerHarness result: HonkerHarness - category: Mech + category: Honker # Goobstation completetime: 10 materials: Steel: 3000 @@ -67,7 +68,7 @@ - type: latheRecipe id: HonkerLArm result: HonkerLArm - category: Mech + category: Honker # Goobstation completetime: 10 materials: Steel: 3000 @@ -77,7 +78,7 @@ - type: latheRecipe id: HonkerLLeg result: HonkerLLeg - category: Mech + category: Honker # Goobstation completetime: 10 materials: Steel: 3000 @@ -87,7 +88,7 @@ - type: latheRecipe id: HonkerRLeg result: HonkerRLeg - category: Mech + category: Honker # Goobstation completetime: 10 materials: Steel: 3000 @@ -97,7 +98,7 @@ - type: latheRecipe id: HonkerRArm result: HonkerRArm - category: Mech + category: Honker # Goobstation completetime: 10 materials: Steel: 3000 @@ -107,17 +108,18 @@ - type: latheRecipe id: MechEquipmentHorn result: MechEquipmentHorn - category: Mech + category: MechEquipment completetime: 10 materials: - Steel: 500 - Bananium: 200 + Steel: 3000 + Glass: 1200 + Bananium: 500 # HAMTR - type: latheRecipe id: HamtrHarness result: HamtrHarness - category: Mech + category: Hamptr # Goobstation completetime: 10 materials: Steel: 1200 @@ -126,7 +128,7 @@ - type: latheRecipe id: HamtrLArm result: HamtrLArm - category: Mech + category: Hamptr # Goobstation completetime: 10 materials: Steel: 800 @@ -135,7 +137,7 @@ - type: latheRecipe id: HamtrLLeg result: HamtrLLeg - category: Mech + category: Hamptr # Goobstation completetime: 10 materials: Steel: 800 @@ -144,7 +146,7 @@ - type: latheRecipe id: HamtrRLeg result: HamtrRLeg - category: Mech + category: Hamptr # Goobstation completetime: 10 materials: Steel: 800 @@ -153,7 +155,7 @@ - type: latheRecipe id: HamtrRArm result: HamtrRArm - category: Mech + category: Hamptr # Goobstation completetime: 10 materials: Steel: 800 @@ -162,18 +164,23 @@ - type: latheRecipe id: MechEquipmentGrabberSmall result: MechEquipmentGrabberSmall - category: Mech + category: MechEquipment # Goobstation completetime: 10 materials: Steel: 400 Plastic: 100 -# Vim - type: latheRecipe id: VimHarness result: VimHarness category: Mech completetime: 5 + +- type: latheRecipe + id: MechEquipmentHorn + result: MechEquipmentHorn + category: MechEquipment + completetime: 10 materials: Steel: 500 - Glass: 200 + Bananium: 200 \ No newline at end of file diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index a45c77ec2ae..a672c51fdcf 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -22,6 +22,8 @@ - WeaponDisablerSMG - Truncheon #- WeaponPistolMk58 #todo: Add a bunch of basic ballistic guns to the list and make lathe recipes for them. + - MechEquipmentKineticAccelerator # Goobstation + # These are roundstart but not replenishable for salvage - type: technology id: DraconicMunitions @@ -49,6 +51,19 @@ - CartridgeSpecialIncendiary - MagazineBoxSpecialIncendiary +- type: technology + id: WeaponizedLaserManipulation + name: research-technology-weaponized-laser-manipulation + icon: + sprite: Objects/Weapons/Guns/Battery/laser_gun.rsi + state: icon + discipline: Arsenal + tier: 1 + cost: 7500 + recipeUnlocks: + - WeaponLaserCarbine + - WeaponMechCombatFiredartLaser # Goobstation + - type: technology id: NonlethalAmmunition name: research-technology-nonlethal-ammunition @@ -84,6 +99,7 @@ - MagazineBoxPistolRubber # Frontier - MagazineBoxRifleRubber # Frontier - SpeedLoaderRifleHeavyRubber + - WeaponMechCombatDisabler # Goobstation - type: technology id: UraniumMunitions @@ -167,6 +183,8 @@ - WeaponXrayCannon - WeaponLaserCannon - WeaponGunLaserCarbineAutomatic + - WeaponLaserCannon + - WeaponMechCombatSolarisLaser # Goobstation technologyPrerequisites: - BasicWeapons @@ -205,6 +223,7 @@ - GrenadeEMP - PowerCageHigh - ShuttleGunDusterCircuitboard + - WeaponMechCombatImmolationGun # Goobstation #- EnergySword # TODO: Add a bunch of stupidly exotic energy weapons to act as a reaaaaaally nice incentive for research to consider this. # Make the energy sword for instance include bananium and bluespace in its recipe. :) softCapContribution: 1.5 diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 4ca60df5b93..c380ce9d5e1 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -14,6 +14,7 @@ - WeaponGrapplingGun - BorgModuleMining - BorgModuleGrapplingGun + - MechEquipmentDrill # Goobstation - OreProcessorIndustrialMachineCircuitboard - ClothingMaskWeldingGas - SalvageExpeditionsComputerCircuitboard @@ -182,19 +183,45 @@ recipeUnlocks: - OreBagOfHolding - MiningDrillDiamond + - AdvancedMineralScannerEmpty + - MechEquipmentDrillDiamond - type: technology - id: MechanizedSalvaging - name: research-technology-mechanized-salvaging + id: Ripley2 + name: research-technology-ripley-mkii icon: - sprite: Mobs/Silicon/chassis.rsi - state: miner + sprite: Objects/Specific/Mech/mecha.rsi + state: ripleymkii + discipline: Industrial + tier: 2 + cost: 8000 + recipeUnlocks: + - RipleyMKIIHarness + - RipleyUpgradeKit + technologyPrerequisites: + - RipleyAPLU + +- type: technology + id: Clarke + name: research-technology-clarke + icon: + sprite: Objects/Specific/Mech/mecha.rsi + state: clarke discipline: Industrial tier: 2 cost: 10000 recipeUnlocks: - BorgModulePka - BorgModuleJetpack + - ClarkeHarness + - ClarkeHead + - ClarkeLArm + - ClarkeRArm + - ClarkeTreads + - ClarkeCentralElectronics + - ClarkePeripheralsElectronics + technologyPrerequisites: + - Ripley2 # Tier 3 diff --git a/Resources/Prototypes/_Goobstation/Catalog/Bounties/bounties.yml b/Resources/Prototypes/_Goobstation/Catalog/Bounties/bounties.yml new file mode 100644 index 00000000000..9148afe21ec --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Catalog/Bounties/bounties.yml @@ -0,0 +1,43 @@ +- type: cargoBounty + id: BountyClarke + reward: 20000 + description: goobstation-clarke-bounty-desc + entries: + - name: goobstation-clarke-bounty-name + amount: 1 + whitelist: + tags: + - Clarke + +- type: cargoBounty + id: BountyRipleyMkII + reward: 15000 + description: goobstation-ripley-bounty-desc + entries: + - name: goobstation-ripley-bounty-name + amount: 1 + whitelist: + tags: + - RipleyMkII + +- type: cargoBounty + id: BountyGygax + reward: 30000 + description: goobstation-gygax-bounty-desc + entries: + - name: goobstation-gygax-bounty-name + amount: 1 + whitelist: + tags: + - Gygax + +- type: cargoBounty + id: BountyDurand + reward: 60000 + description: goobstation-durand-bounty-desc + entries: + - name: goobstation-durand-bounty-name + amount: 1 + whitelist: + tags: + - Durand \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/syndicate.yml b/Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/syndicate.yml new file mode 100644 index 00000000000..8af7a6276cf --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/syndicate.yml @@ -0,0 +1,30 @@ + +- type: entity + id: CrateCybersunDarkGygaxBundle + suffix: Filled + parent: CrateSyndicate + name: Cybersun gygax bundle + description: Contains a set of Cybersan light armored mechs. + components: + - type: StorageFill + contents: + - id: MechGygaxSyndieFilled + - id: DoubleEmergencyOxygenTankFilled + - id: DoubleEmergencyNitrogenTankFilled + - id: ToolboxSyndicateFilled + - id: PlushieNuke + +- type: entity + id: CrateCybersunMaulerBundle + suffix: Filled + parent: CrateSyndicate + name: Cybersun mauler bundle + description: Contains a set of Cybersan heavy armored mechs. + components: + - type: StorageFill + contents: + - id: MechMaulerSyndieFilled + - id: DoubleEmergencyOxygenTankFilled + - id: DoubleEmergencyNitrogenTankFilled + - id: ToolboxSyndicateFilled + - id: PlushieNuke diff --git a/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml new file mode 100644 index 00000000000..4706350a444 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml @@ -0,0 +1,28 @@ +# Mechs + +- type: listing + id: UplinkDarkGygax + name: uplink-mech-teleporter-assault-name + description: uplink-mech-teleporter-assault-desc + icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: darkgygax } + productEntity: CrateCybersunDarkGygaxBundle + cost: + Telecrystal: 400 + categories: + - UplinkAllies + +- type: listing + id: UplinkMauler + name: uplink-mech-teleporter-heavy-name + description: uplink-mech-teleporter-heavy-desc + icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: mauler } + productEntity: CrateCybersunMaulerBundle + cost: + Telecrystal: 650 + categories: + - UplinkAllies + conditions: + - !type:StoreWhitelistCondition + whitelist: + tags: + - NukeOpsUplink \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Damage/modifier_sets.yml b/Resources/Prototypes/_Goobstation/Damage/modifier_sets.yml new file mode 100644 index 00000000000..c3b3a9f3c9e --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Damage/modifier_sets.yml @@ -0,0 +1,107 @@ +- type: damageModifierSet + id: Silicon + coefficients: + Heat: 0.8 + flatReductions: + Blunt: 5 + Slash: 5 + Piercing: 5 + +- type: damageModifierSet + id: SiliconProtected + coefficients: + Blunt: 0.6 + Slash: 0.6 + Piercing: 0.6 + Heat: 0.5 + flatReductions: + Blunt: 5 + Slash: 5 + Piercing: 5 + +- type: damageModifierSet + id: Yowie + coefficients: + Blunt: 0.85 + Slash: 0.85 + Piercing: 0.85 + Heat: 1.5 # Fur = Overheating + Shock: 1 + Cold: 0.7 # Fur = Keep warm + Bloodloss: 0.9 + Poison: 0.5 # Should be more resistant to toxin + Radiation : 0.7 # Engie yowies need some help against anti-rads + + +# Mech armor +- type: damageModifierSet + id: ThinArmor + coefficients: + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.9 + Shock: 1.2 + Heat: 0.8 + flatReductions: + Blunt: 3 + Heat: 2 + +- type: damageModifierSet + id: LightArmor + coefficients: + Blunt: 0.75 + Slash: 0.75 + Piercing: 0.7 + Shock: 1.2 + Heat: 0.7 + flatReductions: + Blunt: 5 + Heat: 5 + +- type: damageModifierSet + id: MediumArmorNT + coefficients: + Blunt: 0.6 + Slash: 0.6 + Piercing: 0.65 + Shock: 1.4 + Heat: 0.7 + flatReductions: + Blunt: 8 + Heat: 10 + +- type: damageModifierSet + id: HeavyArmorNT + coefficients: + Blunt: 0.5 + Slash: 0.5 + Piercing: 0.35 + Shock: 1.8 + Heat: 0.6 + flatReductions: + Blunt: 15 + Heat: 15 + +- type: damageModifierSet + id: MediumArmorSyndi + coefficients: + Blunt: 0.6 + Slash: 0.6 + Piercing: 0.6 + Shock: 1.4 + Heat: 0.75 + flatReductions: + Blunt: 8 + Heat: 5 + +- type: damageModifierSet + id: HeavyArmorSyndi + coefficients: + Blunt: 0.5 + Slash: 0.5 + Piercing: 0.4 + Shock: 1.8 + Heat: 0.7 + flatReductions: + Blunt: 10 + Heat: 7 diff --git a/Resources/Prototypes/_Goobstation/Entities/Markers/Spawners/mechs.yml b/Resources/Prototypes/_Goobstation/Entities/Markers/Spawners/mechs.yml new file mode 100644 index 00000000000..300ff0ceaa3 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Markers/Spawners/mechs.yml @@ -0,0 +1,186 @@ +- type: entity + name: Ripley APLU MK-II Spawner + id: SpawnMechRipley2 + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: ripleymkii + - type: ConditionalSpawner + prototypes: + - MechRipley2Battery + +- type: entity + name: H.O.N.K. Spawner + suffix: Filled + id: SpawnMechHonkerFilled + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: honker + - type: ConditionalSpawner + prototypes: + - MechHonkerFilled + +- type: entity + name: Clarke Spawner + id: SpawnMechClarke + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: clarke + - type: ConditionalSpawner + prototypes: + - MechClarkeBattery + +- type: entity + name: Gygax Spawner + id: SpawnMechGygax + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: gygax + - type: ConditionalSpawner + prototypes: + - MechGygaxBattery + +- type: entity + name: Durand Spawner + id: SpawnMechDurand + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: durand + - type: ConditionalSpawner + prototypes: + - MechDurandBattery + +- type: entity + name: Marauder Spawner + id: SpawnMechMarauder + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: marauder + - type: ConditionalSpawner + prototypes: + - MechMarauderBattery + +- type: entity + name: Marauder Spawner + suffix: Filled + id: SpawnMechMarauderFilled + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: marauder + - type: ConditionalSpawner + prototypes: + - MechMarauderFilled + +- type: entity + name: Seraph Spawner + id: SpawnMechSeraph + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: seraph + - type: ConditionalSpawner + prototypes: + - MechSeraphBattery + +- type: entity + name: Seraph Spawner + suffix: Filled + id: SpawnMechSeraphFilled + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: seraph + - type: ConditionalSpawner + prototypes: + - MechSeraphFilled + +- type: entity + name: Dark Gygax Spawner + id: SpawnMechGygaxSyndie + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: darkgygax + - type: ConditionalSpawner + prototypes: + - MechGygaxSyndieBattery + +- type: entity + name: Dark Gygax Spawner + suffix: Filled + id: SpawnMechGygaxSyndieFilled + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: darkgygax + - type: ConditionalSpawner + prototypes: + - MechGygaxSyndieFilled + +- type: entity + name: Mauler Spawner + id: SpawnMechMaulerSyndie + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: mauler + - type: ConditionalSpawner + prototypes: + - MechMaulerSyndieBattery + +- type: entity + name: Mauler Spawner + suffix: Filled + id: SpawnMechMaulerSyndieFilled + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: Objects/Specific/Mech/mecha.rsi + state: mauler + - type: ConditionalSpawner + prototypes: + - MechMaulerSyndieFilled diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/exosuit_components.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/exosuit_components.yml new file mode 100644 index 00000000000..08c7740bdf6 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/exosuit_components.yml @@ -0,0 +1,104 @@ +- type: entity + id: BaseExosuitParts + parent: BaseItem + name: base components + abstract: true + components: + - type: Item + storedRotation: -90 + size: Ginormous + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_camera + - type: StaticPrice + price: 100 + - type: PhysicalComposition + materialComposition: + Steel: 200 + +- type: entity + id: DurandArmorPlate + parent: BaseExosuitParts + name: durand armor plates + description: Armor plates made of plasteel for Durand exosuit. + components: + - type: Item + storedRotation: 0 + - type: Sprite + sprite: _Goobstation/Objects/Specific/Mech/durand_construction.rsi + state: durand_armor + - type: Tag + tags: + - DurandArmor + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: GygaxArmorPlate + parent: BaseExosuitParts + name: gygax armor plates + description: Armor plates made of steel for Gygax exosuit. + components: + - type: Item + storedRotation: 0 + - type: Sprite + sprite: _Goobstation/Objects/Specific/Mech/gygax_construction.rsi + state: gygax_armor + - type: Tag + tags: + - GygaxArmor + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: RipleyUpgradeKit + parent: BaseExosuitParts + name: exosuit upgrade kit + description: This kit allows you to assemble an exosuit Ripley MK-II. + components: + - type: Item + storedRotation: 0 + - type: Sprite + state: ripleyupgrade + - type: Tag + tags: + - RipleyMKIIUpgradeKit + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: MechAirTank + parent: BaseExosuitParts + name: exosuit air tank + description: A special air canister capable of holding a large amount of air. + components: + - type: Item + storedRotation: 0 + - type: Sprite + state: mecha_air_tank + - type: Tag + tags: + - MechAirTank + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: MechThruster + parent: BaseExosuitParts + name: exosuit thruster + description: A thruster with which the exosuit can safely move in the absence of gravity. + components: + - type: Item + storedRotation: 0 + - type: Sprite + state: mecha_bin + - type: Tag + tags: + - MechThruster + - type: GuideHelp + guides: + - Robotics diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/mech.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/mech.yml new file mode 100644 index 00000000000..b76adace4f6 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/mech.yml @@ -0,0 +1,139 @@ +# Clarke + +- type: entity + id: ClarkeCentralElectronics + parent: BaseElectronics + name: clarke central control module + description: The electrical control center for the clarke mech. + components: + - type: Item + storedRotation: 0 + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mainboard + - type: Tag + tags: + - ClarkeCentralControlModule + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: ClarkePeripheralsElectronics + parent: BaseElectronics + name: clarke peripherals control module + description: The electrical peripherals control for the clarke mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: id_mod + - type: Tag + tags: + - ClarkePeripheralsControlModule + - type: GuideHelp + guides: + - Robotics + +# Gygax + +- type: entity + id: GygaxCentralElectronics + parent: BaseElectronics + name: gygax central control module + description: The electrical control center for the gygax mech. + components: + - type: Item + storedRotation: 0 + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mainboard + - type: Tag + tags: + - GygaxCentralControlModule + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: GygaxPeripheralsElectronics + parent: BaseElectronics + name: gygax peripherals control module + description: The electrical peripherals control for the gygax mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: id_mod + - type: Tag + tags: + - GygaxPeripheralsControlModule + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: GygaxTargetingElectronics + parent: BaseElectronics + name: gygax weapon control and targeting module + description: The electrical targeting control for the gygax mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mcontroller + - type: Tag + tags: + - GygaxTargetingControlModule + - type: GuideHelp + guides: + - Robotics + +# Durand + +- type: entity + id: DurandCentralElectronics + parent: BaseElectronics + name: durand central control module + description: The electrical control center for the durand mech. + components: + - type: Item + storedRotation: 0 + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mainboard + - type: Tag + tags: + - DurandCentralControlModule + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: DurandPeripheralsElectronics + parent: BaseElectronics + name: durand peripherals control module + description: The electrical peripherals control for the durand mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: id_mod + - type: Tag + tags: + - DurandPeripheralsControlModule + - type: GuideHelp + guides: + - Robotics + +- type: entity + id: DurandTargetingElectronics + parent: BaseElectronics + name: durand weapon control and targeting module + description: The electrical targeting control for the durand mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mcontroller + - type: Tag + tags: + - DurandTargetingControlModule + - type: GuideHelp + guides: + - Robotics diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/base.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/base.yml new file mode 100644 index 00000000000..f4b8f23f12d --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/base.yml @@ -0,0 +1,18 @@ +- type: entity + id: BaseMechWeaponRange + parent: BaseMechEquipment + abstract: true + components: + - type: Battery + maxCharge: 100 # Battery is charged by mech + startingCharge: 100 + - type: Appearance + - type: StaticPrice + price: 1 + - type: Item + size: Ginormous + - type: MultiHandedItem + - type: ClothingSpeedModifier + walkModifier: 0.5 + sprintModifier: 0.5 + - type: HeldSpeedModifier \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/combat.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/combat.yml new file mode 100644 index 00000000000..9e1882f7cfe --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/combat.yml @@ -0,0 +1,303 @@ +- type: entity + id: WeaponMechCombatPulseRifle + name: eZ-14 mk2 Heavy pulse rifle + description: Fires a heavy pulse laser. + suffix: Mech Weapon, Gun, Combat, Pulse + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_pulse + - type: Gun + fireRate: 1.5 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser3.ogg + - type: HitscanBatteryAmmoProvider + proto: Pulse + fireCost: 40 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatImmolationGun + name: ZFI Immolation Beam Gun + description: A gun for battlemechs, firing high-temperature beams. + suffix: Mech Weapon, Gun, Combat, Laser + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_laser + - type: Gun + fireRate: 0.6 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg + - type: HitscanBatteryAmmoProvider + proto: RedHeavyLaser + fireCost: 99 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatSolarisLaser + name: CH-LC "Solaris" laser cannon + description: An experimental combat mounted laser cannon that causes more damage, but also has a greater cooldown than a "Firedart". + suffix: Mech Weapon, Gun, Combat, Laser + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_laser + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: HitscanBatteryAmmoProvider + proto: RedMediumLaser + fireCost: 59 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatFiredartLaser + name: CH-PS "Firedart" Laser + description: The standard combat armament of the mechs is a combat mounted laser. + suffix: Mech Weapon, Gun, Combat, Laser + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_laser + - type: Gun + fireRate: 0.8 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: HitscanBatteryAmmoProvider + proto: RedLaser + fireCost: 39 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatTeslaCannon + name: P-X Tesla Cannon + description: A weapon for combat mechs, firing energy balls, based on the principle of an experimental Tesla engine. + suffix: Mech Weapon, Gun, Combat, Tesla + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_wholegen + - type: Gun + projectileSpeed: 3 + fireRate: 0.4 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Effects/Lightning/lightningshock.ogg + params: + variation: 0.2 + - type: ProjectileBatteryAmmoProvider + proto: TeslaGunBullet + fireCost: 99 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatDisabler + name: CH-PD Disabler + description: A non-lethal mounted stun gun that allows you to immobilize intruders. + suffix: Mech Weapon, Gun, Combat, Disabler + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_disabler + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/taser2.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletDisabler + fireCost: 29 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatTaser + name: PBT "Pacifier" Mounted Taser + description: A mounted non-lethal taser that allows you to stun intruders. + suffix: Mech Weapon, Gun, Combat, Disabler, admeme + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_taser + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/taser2.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletTaser + fireCost: 19 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatShotgun + name: LBX AC 10 "Scattershot" + description: A mounted non-lethal taser that allows you to stun intruders. + suffix: Mech Weapon, Gun, Combat, Shotgun + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_scatter + - type: Gun + fireRate: 0.5 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/shotgun.ogg + - type: ProjectileBatteryAmmoProvider + proto: ShellShotgun + fireCost: 99 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatShotgunIncendiary + name: FNX-99 "Hades" Carbine + description: Mounted carbine, firing incendiary cartridges. + suffix: Mech Weapon, Gun, Combat, Shotgun, Incendiary + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_carbine + - type: Gun + fireRate: 1.2 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/shotgun.ogg + - type: ProjectileBatteryAmmoProvider + proto: ShellShotgunIncendiary + fireCost: 99 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatUltraRifle + name: Ultra AC-2 + description: Mounted carbine, firing incendiary cartridges. + suffix: Mech Weapon, Gun, Combat, Rifle + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_uac2 + - type: Gun + fireRate: 3 + selectedMode: FullAuto + availableModes: + - FullAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/shotgun.ogg + - type: ProjectileBatteryAmmoProvider + proto: CartridgeLightRifle + fireCost: 15 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatMissileRack8 + name: SRM-8 Light Missile Rack + description: Launches low-explosive breaching missiles designed to explode only when striking a sturdy target. + suffix: Mech Weapon, Gun, Combat, Light Missile + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_missilerack + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/rpgfire.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletWeakRocket + fireCost: 25 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatMissileRack6 + name: BRM-6 Missile Rack + description: Tubes must be reloaded from the outside. + suffix: Mech Weapon, Gun, Combat, Missile + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_missilerack_six + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/rpgfire.ogg + - type: ProjectileBatteryAmmoProvider + proto: GrenadeBlast + fireCost: 100 + - type: Appearance + - type: AmmoCounter + +- type: entity + id: WeaponMechCombatFlashbangLauncher + name: SGL-6 Flashbang Launcher + description: Launches low-explosive breaching missiles designed to explode only when striking a sturdy target. + suffix: Mech Weapon, Gun, Combat, Flashbang + parent: [ BaseMechWeaponRange, CombatMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_grenadelnchr + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg + - type: ProjectileBatteryAmmoProvider + proto: GrenadeFlash + fireCost: 30 + - type: Appearance + - type: AmmoCounter diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/debug.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/debug.yml new file mode 100644 index 00000000000..c98fdc92e32 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/debug.yml @@ -0,0 +1,98 @@ +- type: entity + id: WeaponMechDebugBallistic + parent: [ BaseMechWeaponRange, DebugMechEquipment ] # Debug equipment does have all whitelist tags. + suffix: Mech Weapon, DEBUG, Ballistic + name: debug bang + components: + - type: Sprite + sprite: Objects/Weapons/Guns/SMGs/c20r.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-0 + map: ["enum.GunVisualLayers.Mag"] + - type: Gun + minAngle: 24 + maxAngle: 45 + angleIncrease: 4 + angleDecay: 16 + fireRate: 5 + selectedMode: FullAuto + availableModes: + - FullAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/lmg.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg + - type: AmmoCounter + - type: ProjectileBatteryAmmoProvider + proto: CartridgeLightRifle + fireCost: 9 + - type: MagazineVisuals + magState: mag + steps: 5 + zeroVisible: true + - type: Appearance + +- type: entity + id: WeaponMechDebugLaser + name: debug pow + suffix: Mech Weapon, DEBUG, Laser + parent: [ BaseMechWeaponRange, DebugMechEquipment ] + description: A weapon using light amplified by the stimulated emission of radiation. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Battery/laser_retro.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-unshaded-4 + map: ["enum.GunVisualLayers.MagUnshaded"] + shader: unshaded + - type: HitscanBatteryAmmoProvider + proto: RedMediumLaser + fireCost: 19 + - type: MagazineVisuals + magState: mag + steps: 5 + zeroVisible: true + - type: Gun + fireRate: 2 + selectedMode: FullAuto + availableModes: + - FullAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: AmmoCounter + +- type: entity + id: WeaponMechDebugDisabler + name: debug tew + description: A self-defense weapon that exhausts organic targets, weakening them until they collapse. + suffix: Mech Weapon, DEBUG, Disabler + parent: [ BaseMechWeaponRange, DebugMechEquipment ] + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Battery/disabler.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-unshaded-0 + map: ["enum.GunVisualLayers.MagUnshaded"] + shader: unshaded + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/taser2.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletDisabler + fireCost: 19 + - type: MagazineVisuals + magState: mag + steps: 5 + zeroVisible: true + - type: Appearance + - type: AmmoCounter diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml new file mode 100644 index 00000000000..e1d37125727 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml @@ -0,0 +1,23 @@ +- type: entity + id: WeaponMechIndustrialKineticAccelerator + name: exosuit proto-kinetic accelerator + description: Fires normal-damage kinetic bolts at a short range. + suffix: Mech Weapon, Gun, Industrial, Kinetic Accelerator + parent: [ BaseMechWeaponRange, IndustrialMechEquipment ] + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_kineticgun + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletKineticShuttle + fireCost: 50 + - type: Appearance + - type: AmmoCounter +# TODO: Plasma Cutter diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/special.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/special.yml new file mode 100644 index 00000000000..77d5ac3af42 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/special.yml @@ -0,0 +1,55 @@ +- type: entity + id: WeaponMechSpecialMousetrapMortar + parent: [ BaseMechWeaponRange, SpecialMechEquipment ] + suffix: Mech Weapon, Gun, Special, Mortar + name: mousetrap mortar + description: Mounted mousetrap launcher. + components: + - type: Sprite + state: mecha_mousetrapmrtr + - type: Gun + minAngle: 24 + maxAngle: 45 + angleIncrease: 4 + angleDecay: 16 + fireRate: 0.5 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg + - type: AmmoCounter + - type: ProjectileBatteryAmmoProvider + proto: MousetrapArmed + fireCost: 100 + - type: Appearance + +- type: entity + id: WeaponMechSpecialBananaMortar + parent: [ BaseMechWeaponRange, SpecialMechEquipment ] + suffix: Mech Weapon, Gun, Special, Mortar + name: banana mortar + description: Mounted banana peel launcher. + components: + - type: Sprite + state: mecha_bananamrtr + - type: Gun + minAngle: 24 + maxAngle: 25 + angleIncrease: 4 + angleDecay: 16 + fireRate: 0.5 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg + - type: AmmoCounter + - type: ProjectileBatteryAmmoProvider + proto: TrashBananaPeel + fireCost: 100 + - type: Appearance diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/base.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/base.yml new file mode 100644 index 00000000000..92915ce39a0 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/base.yml @@ -0,0 +1,15 @@ +- type: entity + id: BaseMechWeaponMelee + parent: BaseMechEquipment + abstract: true + components: + - type: Appearance + - type: StaticPrice + price: 1 + - type: Item + size: Ginormous + - type: MultiHandedItem + - type: ClothingSpeedModifier + walkModifier: 0.5 + sprintModifier: 0.5 + - type: HeldSpeedModifier diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/combat.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/combat.yml new file mode 100644 index 00000000000..dcb7ecfb45c --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/combat.yml @@ -0,0 +1,20 @@ +- type: entity + id: WeaponMechChainSword + parent: [ BaseMechWeaponMelee, CombatMechEquipment ] + name: exosuit chainsword + suffix: Mech Weapon, Melee, Combat + description: Equipment for combat exosuits. This is the mechanical chainsword that'll pierce the heavens! + components: + - type: Sprite + state: mecha_chainsword + - type: MeleeWeapon + autoAttack: true + angle: 0 + wideAnimationRotation: -90 + soundHit: + path: "/Audio/Weapons/chainsaw.ogg" + attackRate: 3.5 + damage: + types: + Structural: 35 + Piercing: 15 diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/debug.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/debug.yml new file mode 100644 index 00000000000..5ffd975e44c --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/debug.yml @@ -0,0 +1,18 @@ +- type: entity + id: WeaponMechDebugMelle + parent: [ BaseMechWeaponMelee, DebugMechEquipment ] # Debug equipment does have all whitelist tags. + name: debug bam + suffix: Mech Weapon, DEBUG, Melee + description: A robust thing. + components: + - type: Sprite + state: paddy_claw + - type: MeleeWeapon + hidden: true + attackRate: 0.75 + damage: + types: + Blunt: 40 + Structural: 20 + soundHit: + collection: MetalThud diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml new file mode 100644 index 00000000000..89cd78520e1 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml @@ -0,0 +1,51 @@ +- type: entity + id: WeaponMechMelleDrill + parent: BaseMechWeaponMelee + name: exosuit drill + suffix: Mech Weapon, Melee, Industrial + description: Equipment for mining exosuits. This is the drill that'll pierce the rocks! + components: + - type: Sprite + state: mecha_drill + - type: Tag + tags: + - Pickaxe + - IndustrialMech + - type: MeleeWeapon + autoAttack: true + angle: 0 + wideAnimationRotation: -90 + soundHit: + path: "/Audio/Items/drill_hit.ogg" + attackRate: 3.5 + damage: + groups: + Brute: 9 + types: + Structural: 40 # ~10 seconds for solid wall / ~21 secods for reinforced wall + +- type: entity + id: WeaponMechMelleDrillDiamond + parent: BaseMechWeaponMelee + name: diamond-tipped exosuit drill + suffix: Mech Weapon, Melee, Industrial + description: Equipment for mining exosuits. This is an upgraded version of the drill that'll pierce the rocks! + components: + - type: Sprite + state: mecha_diamond_drill + - type: Tag + tags: + - Pickaxe + - IndustrialMech + - type: MeleeWeapon + autoAttack: true + angle: 0 + wideAnimationRotation: -90 + soundHit: + path: "/Audio/Items/drill_hit.ogg" + attackRate: 4 + damage: + groups: + Brute: 18 + types: + Structural: 60 # ~3 seconds for solid wall / 9 seconds for reinforced wall diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mech_construction.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mech_construction.yml new file mode 100644 index 00000000000..bfe7f488922 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mech_construction.yml @@ -0,0 +1,494 @@ +# Ripley MK-II + +- type: entity + id: BaseRipleyMKIIPart + parent: BaseMechPart + abstract: true + components: + - type: Sprite + drawdepth: Items + noRot: false + sprite: _Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi + +- type: entity + parent: BaseRipleyMKIIPart + id: RipleyMKIIHarness + name: ripley MK-II harness + description: The core of the Ripley MK-II. + components: + - type: Appearance + - type: ItemMapper + mapLayers: + ripleymkii_upgrade_kit+o: + whitelist: + tags: + - RipleyMKIIUpgradeKit + ripleymkii_l_arm+o: + whitelist: + tags: + - RipleyLArm + ripleymkii_r_arm+o: + whitelist: + tags: + - RipleyRArm + ripleymkii_l_leg+o: + whitelist: + tags: + - RipleyLLeg + ripleymkii_r_leg+o: + whitelist: + tags: + - RipleyRLeg + sprite: _Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi + - type: ContainerContainer + containers: + mech-assembly-container: !type:Container + - type: MechAssembly + finishedPrototype: RipleyMKIIChassis + requiredParts: + RipleyMKIIUpgradeKit: false + RipleyLArm: false + RipleyRArm: false + RipleyLLeg: false + RipleyRLeg: false + - type: Sprite + state: ripleymkii_harness+o + noRot: true + +- type: entity + id: RipleyMKIIChassis + parent: BaseRipleyMKIIPart + name: ripley MK-II chassis + description: An in-progress construction of the Ripley MK-II mech. + components: + - type: Appearance + - type: ContainerContainer + containers: + battery-container: !type:Container + - type: MechAssemblyVisuals + statePrefix: ripleymkii + - type: Sprite + noRot: true + state: ripleymkii0 + - type: Construction + graph: RipleyMKII + node: start + defaultTarget: ripleymkii + +# Clarke + +- type: entity + id: BaseClarkePart + parent: BaseMechPart + abstract: true + components: + - type: Sprite + drawdepth: Items + noRot: false + sprite: _Goobstation/Objects/Specific/Mech/clarke_construction.rsi + +- type: entity + id: BaseClarkePartItem + parent: BaseClarkePart + abstract: true + components: + - type: Item + size: Ginormous + +- type: entity + parent: BaseClarkePart + id: ClarkeHarness + name: clarke harness + description: The core of the Clarke. + components: + - type: Appearance + - type: ItemMapper + mapLayers: + clarke_head+o: + whitelist: + tags: + - ClarkeHead + clarke_r_arm+o: + whitelist: + tags: + - ClarkeLArm + clarke_l_arm+o: + whitelist: + tags: + - ClarkeRArm + clarke_treads+o: + whitelist: + tags: + - ClarkeTreads + sprite: _Goobstation/Objects/Specific/Mech/clarke_construction.rsi + - type: ContainerContainer + containers: + mech-assembly-container: !type:Container + - type: MechAssembly + finishedPrototype: ClarkeChassis + requiredParts: + ClarkeHead: false + ClarkeLArm: false + ClarkeRArm: false + ClarkeTreads: false + - type: Sprite + state: clarke_harness+o + noRot: true + +- type: entity + parent: BaseClarkePartItem + id: ClarkeHead + name: clarke head + description: The head of the Clarke. It belongs on the chassis of the mech. + components: + - type: Sprite + state: clarke_head + - type: Tag + tags: + - ClarkeHead + +- type: entity + parent: BaseClarkePartItem + id: ClarkeRArm + name: clarke right arm + description: The right arm of the Clarke. It belongs on the chassis of the mech. + components: + - type: Sprite + state: clarke_l_arm + - type: Tag + tags: + - ClarkeRArm + +- type: entity + parent: BaseClarkePartItem + id: ClarkeLArm + name: clarke left arm + description: The left arm of the Clarke. It belongs on the chassis of the mech. + components: + - type: Sprite + state: clarke_r_arm + - type: Tag + tags: + - ClarkeLArm + +- type: entity + parent: BaseClarkePartItem + id: ClarkeTreads + name: clarke treads + description: The treads of the Clarke. It belongs on the chassis of the mech. + components: + - type: Sprite + state: clarke_treads + - type: Tag + tags: + - ClarkeTreads + +- type: entity + id: ClarkeChassis + parent: BaseClarkePart + name: clarke chassis + description: An in-progress construction of the Clarke mech. + components: + - type: Appearance + - type: ContainerContainer + containers: + battery-container: !type:Container + - type: MechAssemblyVisuals + statePrefix: clarke + - type: Sprite + noRot: true + state: clarke0 + - type: Construction + graph: Clarke + node: start + defaultTarget: clarke + +# Durand + +- type: entity + id: BaseDurandPart + parent: BaseMechPart + abstract: true + components: + - type: Sprite + drawdepth: Items + noRot: false + sprite: _Goobstation/Objects/Specific/Mech/durand_construction.rsi + +- type: entity + id: BaseDurandPartItem + parent: BaseDurandPart + abstract: true + components: + - type: Item + size: Ginormous + +- type: entity + parent: BaseDurandPart + id: DurandHarness + name: durand harness + description: The core of the Durand. + components: + - type: Appearance + - type: ItemMapper + mapLayers: + durand_head+o: + whitelist: + tags: + - DurandHead + durand_l_arm+o: + whitelist: + tags: + - DurandLArm + durand_r_arm+o: + whitelist: + tags: + - DurandRArm + durand_l_leg+o: + whitelist: + tags: + - DurandLLeg + durand_r_leg+o: + whitelist: + tags: + - DurandRLeg + sprite: _Goobstation/Objects/Specific/Mech/durand_construction.rsi + - type: ContainerContainer + containers: + mech-assembly-container: !type:Container + - type: MechAssembly + finishedPrototype: DurandChassis + requiredParts: + DurandHead: false + DurandLArm: false + DurandRArm: false + DurandLLeg: false + DurandRLeg: false + - type: Sprite + state: durand_harness+o + noRot: true + +- type: entity + parent: BaseDurandPartItem + id: DurandHead + name: durand head + description: The head of the Durand. It belongs on the chassis of the mech. + components: + - type: Sprite + state: durand_head + - type: Tag + tags: + - DurandHead + +- type: entity + parent: BaseDurandPartItem + id: DurandLArm + name: durand left arm + description: The left arm of the Durand. It belongs on the chassis of the mech. + components: + - type: Sprite + state: durand_l_arm + - type: Tag + tags: + - DurandLArm + +- type: entity + parent: BaseDurandPartItem + id: DurandLLeg + name: durand left leg + description: The left leg of the Durand. It belongs on the chassis of the mech. + components: + - type: Sprite + state: durand_l_leg + - type: Tag + tags: + - DurandLLeg + +- type: entity + parent: BaseDurandPartItem + id: DurandRLeg + name: durand right leg + description: The right leg of the Durand. It belongs on the chassis of the mech. + components: + - type: Sprite + state: durand_r_leg + - type: Tag + tags: + - DurandRLeg + +- type: entity + parent: BaseDurandPartItem + id: DurandRArm + name: durand right arm + description: The right arm of the Durand. It belongs on the chassis of the mech. + components: + - type: Sprite + state: durand_r_arm + - type: Tag + tags: + - DurandRArm + +- type: entity + id: DurandChassis + parent: BaseDurandPart + name: durand chassis + description: An in-progress construction of the Durand mech. + components: + - type: Appearance + - type: ContainerContainer + containers: + battery-container: !type:Container + - type: MechAssemblyVisuals + statePrefix: durand + - type: Sprite + noRot: true + state: durand0 + - type: Construction + graph: Durand + node: start + defaultTarget: durand + +# Gygax + +- type: entity + id: BaseGygaxPart + parent: BaseMechPart + abstract: true + components: + - type: Sprite + drawdepth: Items + noRot: false + sprite: _Goobstation/Objects/Specific/Mech/gygax_construction.rsi + +- type: entity + id: BaseGygaxPartItem + parent: BaseGygaxPart + abstract: true + components: + - type: Item + size: Ginormous + +- type: entity + parent: BaseGygaxPart + id: GygaxHarness + name: gygax harness + description: The core of the Gygax. + components: + - type: Appearance + - type: ItemMapper + mapLayers: + gygax_head+o: + whitelist: + tags: + - GygaxHead + gygax_l_arm+o: + whitelist: + tags: + - GygaxLArm + gygax_r_arm+o: + whitelist: + tags: + - GygaxRArm + gygax_l_leg+o: + whitelist: + tags: + - GygaxLLeg + gygax_r_leg+o: + whitelist: + tags: + - GygaxRLeg + sprite: _Goobstation/Objects/Specific/Mech/gygax_construction.rsi + - type: ContainerContainer + containers: + mech-assembly-container: !type:Container + - type: MechAssembly + finishedPrototype: GygaxChassis + requiredParts: + GygaxHead: false + GygaxLArm: false + GygaxRArm: false + GygaxLLeg: false + GygaxRLeg: false + - type: Sprite + state: gygax_harness+o + noRot: true + +- type: entity + parent: BaseGygaxPartItem + id: GygaxHead + name: gygax head + description: The head of the Gygax. It belongs on the chassis of the mech. + components: + - type: Sprite + state: gygax_head + - type: Tag + tags: + - GygaxHead + +- type: entity + parent: BaseGygaxPartItem + id: GygaxLArm + name: gygax left arm + description: The left arm of the Gygax. It belongs on the chassis of the mech. + components: + - type: Sprite + state: gygax_l_arm + - type: Tag + tags: + - GygaxLArm + +- type: entity + parent: BaseGygaxPartItem + id: GygaxLLeg + name: gygax left leg + description: The left leg of the Gygax. It belongs on the chassis of the mech. + components: + - type: Sprite + state: gygax_l_leg + - type: Tag + tags: + - GygaxLLeg + +- type: entity + parent: BaseGygaxPartItem + id: GygaxRLeg + name: gygax right leg + description: The right leg of the Gygax. It belongs on the chassis of the mech. + components: + - type: Sprite + state: gygax_r_leg + - type: Tag + tags: + - GygaxRLeg + +- type: entity + parent: BaseGygaxPartItem + id: GygaxRArm + name: gygax right arm + description: The right arm of the Gygax. It belongs on the chassis of the mech. + components: + - type: Sprite + state: gygax_r_arm + - type: Tag + tags: + - GygaxRArm + +- type: entity + id: GygaxChassis + parent: BaseGygaxPart + name: gygax chassis + description: An in-progress construction of the Gygax mech. + components: + - type: Appearance + - type: ContainerContainer + containers: + battery-container: !type:Container + - type: MechAssemblyVisuals + statePrefix: gygax + - type: Sprite + noRot: true + state: gygax0 + - type: Construction + graph: Gygax + node: start + defaultTarget: gygax diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mecha_equipment.yml new file mode 100644 index 00000000000..101c1036fb4 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mecha_equipment.yml @@ -0,0 +1,53 @@ +- type: entity + id: DebugMechEquipment + abstract: true + suffix: DEBUG + categories: [ HideSpawnMenu ] + components: + - type: Tag + tags: + - CombatMech + - IndustrialMech + - SpecialMech + - SmallMech + +- type: entity + id: CombatMechEquipment + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Tag + tags: + - CombatMech + - type: StaticPrice + price: 500 + +- type: entity + id: IndustrialMechEquipment + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Tag + tags: + - IndustrialMech + - type: StaticPrice + price: 250 + +- type: entity + id: SpecialMechEquipment + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Tag + tags: + - SpecialMech + +- type: entity + id: SmallMechEquipment + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Tag + tags: + - SmallMech +# TODO: Make medical mech with equipment. diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml new file mode 100644 index 00000000000..90af577ac30 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml @@ -0,0 +1,590 @@ +- type: entity + id: CombatMech + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Mech + equipmentWhitelist: + tags: + - CombatMech + +- type: entity + id: IndustrialMech + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Mech + equipmentWhitelist: + tags: + - IndustrialMech + +- type: entity + id: SpecialMech + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Mech + equipmentWhitelist: + tags: + - SpecialMech + +- type: entity + id: SmallMech + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: Mech + equipmentWhitelist: + tags: + - SmallMech + +# Ripley MK-II +- type: entity + id: MechRipley2 + parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] + name: Ripley APLU MK-II + description: The "MK-II" has a pressurized cabin for space operations, but the added weight has slowed it down. + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: ripleymkii + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: ripleymkii + openState: ripleymkii-open + brokenState: ripleymkii-broken + mechToPilotDamageMultiplier: 0.4 + airtight: true + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 20 + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 2 + - type: Damageable + damageModifierSet: MediumArmorNT + - type: StaticPrice + price: 1000 + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - RipleyMkII + +- type: entity + id: MechRipley2Battery + parent: MechRipley2 + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHigh + +# Clarke +- type: entity + id: MechClarke + parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] + name: Clarke + description: A fast-moving mech for space travel. It has built-in trusts. + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: clarke + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: clarke + openState: clarke-open + brokenState: clarke-broken + mechToPilotDamageMultiplier: 0.5 + airtight: true + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 26 + - type: MovementSpeedModifier + baseWalkSpeed: 2.5 + baseSprintSpeed: 4.5 + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: StaticPrice + price: 1500 + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - Clarke + +- type: entity + id: MechClarkeBattery + parent: MechClarke + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHigh + +- type: entity + parent: MechHonkerBattery + id: MechHonkerFilled + suffix: Battery, Filled + components: + - type: Mech + startingEquipment: + - WeaponMechSpecialBananaMortar + - WeaponMechSpecialMousetrapMortar + - MechEquipmentHorn + +# Combat-Station Mechs + +# Gygax +- type: entity + id: MechGygax + parent: [ BaseMech, CombatMech, BaseRestrictedContraband ] + name: Gygax + description: While lightly armored, the Gygax has incredible mobility thanks to its ability that lets it smash through walls at high speeds. + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: gygax + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: gygax + openState: gygax-open + brokenState: gygax-broken + mechToPilotDamageMultiplier: 0.3 + airtight: true + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 25 + Structural: 180 + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 2.6 + - type: StaticPrice + price: 3000 + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - Gygax + +- type: entity + id: MechGygaxBattery + parent: MechGygax + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHigh + +# Durand +- type: entity + id: MechDurand + parent: [ BaseMech, CombatMech, BaseRestrictedContraband ] + name: Durand + description: A slow but beefy combat exosuit that is extra scary in confined spaces due to its punches. Xenos hate it! + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: durand + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: durand + openState: durand-open + brokenState: durand-broken + mechToPilotDamageMultiplier: 0.25 + airtight: true + maxIntegrity: 400 + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 40 + Structural: 220 + - type: MovementSpeedModifier + baseWalkSpeed: 1.5 + baseSprintSpeed: 2 + - type: Damageable + damageModifierSet: MediumArmorNT + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: Repairable + fuelCost: 30 + doAfterDelay: 15 + - type: StaticPrice + price: 5000 + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - Durand + +- type: entity + id: MechDurandBattery + parent: MechDurand + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHigh + +# Nanotrasen Combat Mechs + +# Marauder +- type: entity + id: MechMarauder + parent: [ BaseMech, CombatMech, BaseCentcommContraband ] + name: Marauder + description: Looks like we're all saved. # ERT mech + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: marauder + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: marauder + openState: marauder-open + brokenState: marauder-broken + mechToPilotDamageMultiplier: 0.1 + airtight: true + maxIntegrity: 500 + maxEquipmentAmount: 4 + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 40 + Structural: 200 + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 1.5 + - type: Damageable + damageModifierSet: HeavyArmorNT + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: Repairable + fuelCost: 30 + doAfterDelay: 15 + - type: StaticPrice + price: 15000 # Some respect if you steal one of these. + +- type: entity + id: MechMarauderBattery + parent: MechMarauder + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHyper + +- type: entity + id: MechMarauderFilled + parent: MechMarauderBattery + suffix: Battery, Filled + components: + - type: Mech + startingEquipment: + - WeaponMechChainSword + - WeaponMechCombatPulseRifle + - WeaponMechCombatUltraRifle + - WeaponMechCombatMissileRack8 + +# Seraph +- type: entity + id: MechSeraph + parent: [ BaseMech, CombatMech, BaseCentcommContraband ] + name: Seraph + description: That's the last thing you'll see. # Death Squad mech + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: seraph + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: seraph + openState: seraph-open + brokenState: seraph-broken + mechToPilotDamageMultiplier: 0.05 + airtight: true + maxIntegrity: 550 + maxEquipmentAmount: 5 + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 60 + Structural: 400 + - type: MovementSpeedModifier + baseWalkSpeed: 2.2 + baseSprintSpeed: 3.7 + - type: Damageable + damageModifierSet: HeavyArmorNT + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: Repairable + fuelCost: 30 + doAfterDelay: 20 + - type: StaticPrice + price: 30000 # My respects if you manage to steal one of these. + +- type: entity + id: MechSeraphBattery + parent: MechSeraph + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellAntiqueProto + +- type: entity + id: MechSeraphFilled + parent: MechSeraphBattery + suffix: Battery, Filled + components: + - type: Mech + startingEquipment: + - WeaponMechChainSword + - WeaponMechCombatPulseRifle + - WeaponMechCombatShotgun + - WeaponMechCombatMissileRack6 + - WeaponMechCombatUltraRifle + +# Syndicate Combat Mech + +# Dark Gygax +- type: entity + id: MechGygaxSyndie + parent: [ BaseMech, CombatMech, BaseSyndicateContraband ] + name: Dark Gygax + description: A modified Gygax used for nefarious purposes. On the back of the armor plate there is an inscription "Cybersun Inc." + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: darkgygax + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: darkgygax + openState: darkgygax-open + brokenState: darkgygax-broken + mechToPilotDamageMultiplier: 0.15 + airtight: true + maxIntegrity: 300 + maxEquipmentAmount: 4 + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 30 + Structural: 200 + - type: MovementSpeedModifier + baseWalkSpeed: 2.2 + baseSprintSpeed: 3.7 + - type: Damageable + damageModifierSet: MediumArmorSyndi + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: Repairable + fuelCost: 40 + doAfterDelay: 20 + - type: StaticPrice + price: 15000 # Some respect if you steal one of these. + +- type: entity + id: MechGygaxSyndieBattery + parent: MechGygaxSyndie + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHyper + +- type: entity + id: MechGygaxSyndieFilled + parent: MechGygaxSyndieBattery + suffix: Battery, Filled + components: + - type: Mech + startingEquipment: + - WeaponMechChainSword + - WeaponMechCombatShotgun + - WeaponMechCombatMissileRack8 + - WeaponMechCombatTeslaCannon + +# Mauler +- type: entity + id: MechMaulerSyndie + parent: [ BaseMech, CombatMech, BaseSyndicateContraband ] + name: Mauler + description: A modified Marauder used by the Syndicate that's not as maneuverable as the Dark Gygax, but it makes up for that in armor and sheer firepower. On the back of the armor plate there is an inscription "Cybersun Inc." + components: + - type: Sprite + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: mauler + - map: ["enum.PaperLabelVisuals.Layer"] + sprite: Structures/Storage/Crates/labels.rsi + state: paper + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: mauler + openState: mauler-open + brokenState: mauler-broken + mechToPilotDamageMultiplier: 0.1 + airtight: true + maxIntegrity: 500 + maxEquipmentAmount: 5 + pilotWhitelist: + components: + - HumanoidAppearance + - type: MeleeWeapon + hidden: true + attackRate: 1 + damage: + types: + Blunt: 50 + Structural: 400 + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 1.5 + - type: Damageable + damageModifierSet: HeavyArmorSyndi + - type: CanMoveInAir + - type: MovementAlwaysTouching + - type: Repairable + fuelCost: 50 + doAfterDelay: 25 + - type: StaticPrice + price: 30000 # Some respect if you steal one of these. + +- type: entity + id: MechMaulerSyndieBattery + parent: MechMaulerSyndie + suffix: Battery + components: + - type: ContainerFill + containers: + mech-battery-slot: + - PowerCellHyper + +- type: entity + id: MechMaulerSyndieFilled + parent: MechMaulerSyndieBattery + suffix: Battery, Filled + components: + - type: Mech + startingEquipment: + - WeaponMechChainSword + - WeaponMechCombatUltraRifle + - WeaponMechCombatShotgun + - WeaponMechCombatMissileRack6 + - WeaponMechCombatTeslaCannon diff --git a/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/clarke_construction.yml b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/clarke_construction.yml new file mode 100644 index 00000000000..042395f6049 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/clarke_construction.yml @@ -0,0 +1,156 @@ +- type: constructionGraph + id: Clarke + start: start + graph: + - node: start + edges: + - to: clarke + steps: + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 1 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 2 + + - material: Cable + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 3 + + - tool: Cutting + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 4 + + - tag: ClarkeCentralControlModule + name: clarke central control module + icon: + sprite: "Objects/Misc/module.rsi" + state: "mainboard" + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 5 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 6 + + - tag: ClarkePeripheralsControlModule + name: clarke peripherals control module + icon: + sprite: "Objects/Misc/module.rsi" + state: id_mod + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 7 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 8 + + - tag: CapacitorStockPart + name: capacitor + icon: + sprite: Objects/Misc/stock_parts.rsi + state: capacitor + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 9 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 10 + + - component: PowerCell + name: power cell + store: battery-container + icon: + sprite: Objects/Power/power_cells.rsi + state: small + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 11 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 12 + + - material: Steel + amount: 5 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 14 + + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 15 + + - tool: Welding + doAfter: 1 + + - material: Gold + amount: 5 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 16 + + - tool: Anchoring + doAfter: 1 + + - tag: MechAirTank + name: exosuit air tank + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_air_tank + + - tool: Anchoring + doAfter: 1 + + - tag: MechThruster + name: exosuit thruster + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_bin + + - tool: Anchoring + doAfter: 1 + + - tool: Welding + doAfter: 1 + + - node: clarke + actions: + - !type:BuildMech + mechPrototype: MechClarke diff --git a/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/durand_construction.yml b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/durand_construction.yml new file mode 100644 index 00000000000..048ec4872b0 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/durand_construction.yml @@ -0,0 +1,180 @@ +- type: constructionGraph + id: Durand + start: start + graph: + - node: start + edges: + - to: durand + steps: + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 1 + + - tool: Screwing + doAfter: 1 + + - material: Cable + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 2 + + - tool: Cutting + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 3 + + - tag: DurandCentralControlModule + name: durand central control module + icon: + sprite: "Objects/Misc/module.rsi" + state: "mainboard" + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 4 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 5 + + - tag: DurandPeripheralsControlModule + name: durand peripherals control module + icon: + sprite: "Objects/Misc/module.rsi" + state: id_mod + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 6 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 7 + + - tag: DurandTargetingControlModule + name: durand weapon control and targeting module + icon: + sprite: "Objects/Misc/module.rsi" + state: mcontroller + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 8 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 9 + + - tag: CapacitorStockPart + name: capacitor + icon: + sprite: Objects/Misc/stock_parts.rsi + state: capacitor + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 10 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 11 + + - component: PowerCell + name: power cell + store: battery-container + icon: + sprite: Objects/Power/power_cells.rsi + state: small + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 12 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 13 + + - material: Steel + amount: 5 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 14 + + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 15 + + - tool: Welding + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 16 + + - tag: MechAirTank + name: exosuit air tank + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_air_tank + + - tool: Anchoring + doAfter: 1 + + - tag: MechThruster + name: exosuit thruster + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_bin + + - tool: Anchoring + doAfter: 1 + + - tag: DurandArmor + name: durand armor plates + icon: + sprite: "_Goobstation/Objects/Specific/Mech/durand_construction.rsi" + state: durand_armor + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 17 + + - tool: Anchoring + doAfter: 2 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 18 + + - tool: Welding + doAfter: 1 + + - node: durand + actions: + - !type:BuildMech + mechPrototype: MechDurand diff --git a/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/gygax_construction.yml b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/gygax_construction.yml new file mode 100644 index 00000000000..f86984de3fa --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/gygax_construction.yml @@ -0,0 +1,180 @@ +- type: constructionGraph + id: Gygax + start: start + graph: + - node: start + edges: + - to: gygax + steps: + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 1 + + - tool: Screwing + doAfter: 1 + + - material: Cable + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 2 + + - tool: Cutting + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 3 + + - tag: GygaxCentralControlModule + name: gygax central control module + icon: + sprite: "Objects/Misc/module.rsi" + state: "mainboard" + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 4 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 5 + + - tag: GygaxPeripheralsControlModule + name: gygax peripherals control module + icon: + sprite: "Objects/Misc/module.rsi" + state: id_mod + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 6 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 7 + + - tag: GygaxTargetingControlModule + name: gygax weapon control and targeting module + icon: + sprite: "Objects/Misc/module.rsi" + state: mcontroller + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 8 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 9 + + - tag: CapacitorStockPart + name: capacitor + icon: + sprite: Objects/Misc/stock_parts.rsi + state: capacitor + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 10 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 11 + + - component: PowerCell + name: power cell + store: battery-container + icon: + sprite: Objects/Power/power_cells.rsi + state: small + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 12 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 13 + + - material: Steel + amount: 5 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 16 + + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 17 + + - tool: Welding + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 18 + + - tag: MechAirTank + name: exosuit air tank + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_air_tank + + - tool: Anchoring + doAfter: 1 + + - tag: MechThruster + name: exosuit thruster + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_bin + + - tool: Anchoring + doAfter: 1 + + - tag: GygaxArmor + name: gygax armor plates + icon: + sprite: "_Goobstation/Objects/Specific/Mech/gygax_construction.rsi" + state: gygax_armor + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 19 + + - tool: Anchoring + doAfter: 2 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 20 + + - tool: Welding + doAfter: 1 + + - node: gygax + actions: + - !type:BuildMech + mechPrototype: MechGygax diff --git a/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/ripleymkii_construction.yml b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/ripleymkii_construction.yml new file mode 100644 index 00000000000..ffa6648ee32 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/mechs/ripleymkii_construction.yml @@ -0,0 +1,138 @@ +- type: constructionGraph + id: RipleyMKII + start: start + graph: + - node: start + edges: + - to: ripleymkii + steps: + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 1 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 2 + + - material: Cable + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 3 + + - tool: Cutting + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 4 + + - tag: RipleyCentralControlModule + name: ripley central control module + icon: + sprite: "Objects/Misc/module.rsi" + state: "mainboard" + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 5 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 6 + + - tag: RipleyPeripheralsControlModule + name: ripley peripherals control module + icon: + sprite: "Objects/Misc/module.rsi" + state: id_mod + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 7 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 8 + + - component: PowerCell + name: power cell + store: battery-container + icon: + sprite: Objects/Power/power_cells.rsi + state: small + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 9 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 12 + + - material: Steel + amount: 5 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 15 + + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 16 + + - tool: Welding + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 17 + + - tag: MechAirTank + name: exosuit air tank + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_air_tank + + - tool: Anchoring + doAfter: 1 + + - material: Plasteel + amount: 10 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 19 + + - tool: Anchoring + doAfter: 2 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 20 + + - tool: Welding + doAfter: 1 + + - node: ripleymkii + actions: + - !type:BuildMech + mechPrototype: MechRipley2 diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/categories.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/categories.yml new file mode 100644 index 00000000000..42e63aaf246 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/categories.yml @@ -0,0 +1,40 @@ +# Exosuit +- type: latheCategory + id: Vim + name: lathe-category-mechs-vim + +- type: latheCategory + id: Honker + name: lathe-category-mechs-honker + +- type: latheCategory + id: Hamptr + name: lathe-category-mechs-hamptr + +- type: latheCategory + id: Ripley + name: lathe-category-mechs-ripley + +- type: latheCategory + id: RipleyMKII + name: lathe-category-mechs-ripleymkii + +- type: latheCategory + id: Clarke + name: lathe-category-mechs-clarke + +- type: latheCategory + id: Gygax + name: lathe-category-mechs-gygax + +- type: latheCategory + id: Durand + name: lathe-category-mechs-durand + +- type: latheCategory + id: MechEquipment + name: lathe-category-mechs-equipment + +- type: latheCategory + id: MechWeapons + name: lathe-category-mechs-weapons diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/electronics.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/electronics.yml new file mode 100644 index 00000000000..7fdfc517935 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/electronics.yml @@ -0,0 +1,39 @@ +- type: latheRecipe + parent: BaseGoldCircuitboardRecipe + id: ClarkeCentralElectronics + result: ClarkeCentralElectronics + +- type: latheRecipe + parent: BaseGoldCircuitboardRecipe + id: ClarkePeripheralsElectronics + result: ClarkePeripheralsElectronics + +- type: latheRecipe + parent: BaseGoldCircuitboardRecipe + id: GygaxCentralElectronics + result: GygaxCentralElectronics + +- type: latheRecipe + parent: BaseGoldCircuitboardRecipe + id: GygaxPeripheralsElectronics + result: GygaxPeripheralsElectronics + +- type: latheRecipe + parent: BaseGoldCircuitboardRecipe + id: GygaxTargetingElectronics + result: GygaxTargetingElectronics + +- type: latheRecipe + parent: BaseSilverCircuitboardRecipe + id: DurandCentralElectronics + result: DurandCentralElectronics + +- type: latheRecipe + parent: BaseSilverCircuitboardRecipe + id: DurandPeripheralsElectronics + result: DurandPeripheralsElectronics + +- type: latheRecipe + parent: BaseSilverCircuitboardRecipe + id: DurandTargetingElectronics + result: DurandTargetingElectronics diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml new file mode 100644 index 00000000000..7a9f9878d40 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml @@ -0,0 +1,268 @@ +# Ripley MK-II +- type: latheRecipe + id: RipleyMKIIHarness + result: RipleyMKIIHarness + category: RipleyMKII + completetime: 10 + materials: + Steel: 1500 + Glass: 1200 + +- type: latheRecipe + id: RipleyUpgradeKit + result: RipleyUpgradeKit + category: RipleyMKII + completetime: 10 + materials: + Steel: 500 + +# Clarke +- type: latheRecipe + id: ClarkeHarness + result: ClarkeHarness + category: Clarke + completetime: 10 + materials: + Steel: 2000 + Glass: 1500 + +- type: latheRecipe + id: ClarkeHead + result: ClarkeHead + category: Clarke + completetime: 10 + materials: + Steel: 1550 + Glass: 950 + +- type: latheRecipe + id: ClarkeLArm + result: ClarkeLArm + category: Clarke + completetime: 10 + materials: + Steel: 900 + Glass: 800 + +- type: latheRecipe + id: ClarkeRArm + result: ClarkeRArm + category: Clarke + completetime: 10 + materials: + Steel: 900 + Glass: 800 + +- type: latheRecipe + id: ClarkeTreads + result: ClarkeTreads + category: Clarke + completetime: 10 + materials: + Steel: 950 + +# Durand +- type: latheRecipe + id: DurandHarness + result: DurandHarness + category: Durand + completetime: 10 + materials: + Steel: 2500 + Glass: 2000 + Silver: 1500 + +- type: latheRecipe + id: DurandArmor + result: DurandArmorPlate + category: Durand + completetime: 10 + materials: + Steel: 3000 + Silver: 900 + +- type: latheRecipe + id: DurandHead + result: DurandHead + category: Durand + completetime: 10 + materials: + Steel: 1500 + Glass: 800 + Silver: 250 + Diamond: 100 + +- type: latheRecipe + id: DurandLArm + result: DurandLArm + category: Durand + completetime: 10 + materials: + Steel: 1100 + Silver: 250 + +- type: latheRecipe + id: DurandLLeg + result: DurandLLeg + category: Durand + completetime: 10 + materials: + Steel: 1100 + Silver: 250 + +- type: latheRecipe + id: DurandRLeg + result: DurandRLeg + category: Durand + completetime: 10 + materials: + Steel: 1100 + Silver: 250 + +- type: latheRecipe + id: DurandRArm + result: DurandRArm + category: Durand + completetime: 10 + materials: + Steel: 1100 + Silver: 250 + +# Gygax +- type: latheRecipe + id: GygaxHarness + result: GygaxHarness + category: Gygax + completetime: 10 + materials: + Steel: 2500 + Glass: 2000 + +- type: latheRecipe + id: GygaxArmor + result: GygaxArmorPlate + category: Gygax + completetime: 10 + materials: + Steel: 3000 + +- type: latheRecipe + id: GygaxHead + result: GygaxHead + category: Gygax + completetime: 10 + materials: + Steel: 1500 + Glass: 250 + Diamond: 100 + +- type: latheRecipe + id: GygaxLArm + result: GygaxLArm + category: Gygax + completetime: 10 + materials: + Steel: 1100 + +- type: latheRecipe + id: GygaxLLeg + result: GygaxLLeg + category: Gygax + completetime: 10 + materials: + Steel: 1100 + +- type: latheRecipe + id: GygaxRLeg + result: GygaxRLeg + category: Gygax + completetime: 10 + materials: + Steel: 1100 + +- type: latheRecipe + id: GygaxRArm + result: GygaxRArm + category: Gygax + completetime: 10 + materials: + Steel: 1100 + +# Vim +- type: latheRecipe + id: VimHarness + result: VimHarness + category: Vim # Goobstation + completetime: 5 + materials: + Steel: 500 + Glass: 200 + + +# Equipment +- type: latheRecipe + id: MechEquipmentDrill + result: WeaponMechMelleDrill + category: MechEquipment + completetime: 10 + materials: + Steel: 1000 + Glass: 250 + +- type: latheRecipe + id: MechEquipmentDrillDiamond + result: WeaponMechMelleDrillDiamond + category: MechEquipment + completetime: 10 + materials: + Steel: 1000 + Plastic: 150 + Silver: 350 + Diamond: 150 + +- type: latheRecipe + id: MechEquipmentGrabber + result: MechEquipmentGrabber + category: MechEquipment + completetime: 10 + materials: + Steel: 500 + Plastic: 200 + + +- type: latheRecipe + id: MechEquipmentHonkerBananaMortar + result: WeaponMechSpecialBananaMortar + category: MechEquipment + completetime: 10 + materials: + Steel: 1150 + Bananium: 800 + +- type: latheRecipe + id: MechEquipmentHonkerMousetrapMortar + result: WeaponMechSpecialMousetrapMortar + category: MechEquipment + completetime: 10 + materials: + Steel: 1200 + Bananium: 300 + +# Misc +- type: latheRecipe + id: MechAirTank + result: MechAirTank + category: MechEquipment + completetime: 10 + materials: + Steel: 1000 + Glass: 150 + +- type: latheRecipe + id: MechThruster + result: MechThruster + category: MechEquipment + completetime: 10 + materials: + Steel: 1000 + Glass: 150 diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/security.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/security.yml index ef91b7281be..57f1b2011a2 100644 --- a/Resources/Prototypes/_Goobstation/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/security.yml @@ -20,3 +20,105 @@ result: MagazineMagnumLeverRifle materials: Steel: 185 + +# Mech Weapons +- type: latheRecipe + id: WeaponMechCombatImmolationGun + result: WeaponMechCombatImmolationGun + category: MechWeapons + completetime: 10 + materials: + Steel: 2800 + Plastic: 1000 + Plasma: 750 + Glass: 500 + +- type: latheRecipe + id: WeaponMechCombatSolarisLaser + result: WeaponMechCombatSolarisLaser + category: MechWeapons + completetime: 10 + materials: + Steel: 1650 + Plastic: 300 + Plasma: 250 + Glass: 200 + +- type: latheRecipe + id: WeaponMechCombatFiredartLaser + result: WeaponMechCombatFiredartLaser + category: MechWeapons + completetime: 10 + materials: + Steel: 1200 + Plastic: 200 + Plasma: 150 + Glass: 50 + +- type: latheRecipe + id: WeaponMechCombatUltraRifle + result: WeaponMechCombatUltraRifle + category: MechWeapons + completetime: 10 + materials: + Steel: 1000 + Plastic: 200 + +- type: latheRecipe + id: WeaponMechCombatShotgun + result: WeaponMechCombatShotgun + category: MechWeapons + completetime: 10 + materials: + Steel: 1600 + Plastic: 550 + +- type: latheRecipe + id: WeaponMechCombatShotgunIncendiary + result: WeaponMechCombatShotgunIncendiary + category: MechWeapons + completetime: 10 + materials: + Steel: 1500 + Plastic: 800 + Plasma: 300 + +- type: latheRecipe + id: WeaponMechCombatDisabler + result: WeaponMechCombatDisabler + category: MechWeapons + completetime: 10 + materials: + Steel: 750 + Glass: 250 + Plastic: 300 + +- type: latheRecipe + id: WeaponMechCombatFlashbangLauncher + result: WeaponMechCombatFlashbangLauncher + category: MechWeapons + completetime: 10 + materials: + Steel: 1200 + Glass: 300 + Plastic: 450 + +- type: latheRecipe + id: WeaponMechCombatMissileRack8 + result: WeaponMechCombatMissileRack8 + category: MechWeapons + completetime: 10 + materials: + Steel: 2500 + Glass: 1500 + Plastic: 750 + +- type: latheRecipe + id: MechEquipmentKineticAccelerator + result: WeaponMechIndustrialKineticAccelerator + category: MechEquipment + completetime: 10 + materials: + Steel: 1500 + Glass: 750 + Silver: 150 diff --git a/Resources/Prototypes/_Goobstation/Research/arsenal.yml b/Resources/Prototypes/_Goobstation/Research/arsenal.yml new file mode 100644 index 00000000000..5f276399895 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Research/arsenal.yml @@ -0,0 +1,66 @@ +# Tier 2 + +- type: technology + id: Gygax + name: research-technology-gygax + icon: + sprite: Objects/Specific/Mech/mecha.rsi + state: gygax + discipline: Arsenal + tier: 2 + cost: 12000 + recipeUnlocks: + - GygaxHarness + - GygaxArmor + - GygaxHead + - GygaxLArm + - GygaxLLeg + - GygaxRArm + - GygaxRLeg + - GygaxCentralElectronics + - GygaxPeripheralsElectronics + - GygaxTargetingElectronics + - WeaponMechCombatUltraRifle + technologyPrerequisites: + - Ripley2 + +# Tier 3 + +- type: technology + id: ExplosiveMechAmmunition + name: research-technology-explosive-mech-ammunition + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_missilerack + discipline: Arsenal + tier: 3 + cost: 15000 + recipeUnlocks: + - WeaponMechCombatMissileRack8 + technologyPrerequisites: + - ExplosiveTechnology + +- type: technology + id: Durand + name: research-technology-durand + icon: + sprite: Objects/Specific/Mech/mecha.rsi + state: durand + discipline: Arsenal + tier: 3 + cost: 16000 + recipeUnlocks: + - DurandHarness + - DurandArmor + - DurandHead + - DurandLArm + - DurandLLeg + - DurandRArm + - DurandRLeg + - DurandCentralElectronics + - DurandPeripheralsElectronics + - DurandTargetingElectronics + - WeaponMechCombatShotgun + - WeaponMechCombatShotgunIncendiary + technologyPrerequisites: + - Gygax \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Research/civilianservices.yml b/Resources/Prototypes/_Goobstation/Research/civilianservices.yml new file mode 100644 index 00000000000..2e832386d2c --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Research/civilianservices.yml @@ -0,0 +1,18 @@ +# Tier 1 + +# Tier 2 + +- type: technology + id: HONKWeapons + name: research-technology-honk-weapons + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_bananamrtr + discipline: CivilianServices + tier: 2 + cost: 6000 + recipeUnlocks: + - MechEquipmentHonkerBananaMortar + - MechEquipmentHonkerMousetrapMortar + +# Tier 3 diff --git a/Resources/Prototypes/_Goobstation/tags.yml b/Resources/Prototypes/_Goobstation/tags.yml index 4f28a4b5550..27c98e1ad88 100644 --- a/Resources/Prototypes/_Goobstation/tags.yml +++ b/Resources/Prototypes/_Goobstation/tags.yml @@ -1,2 +1,107 @@ - type: Tag - id: MagazineMagnumLeverRifle \ No newline at end of file + id: MagazineMagnumLeverRifle + +# Mechs + +- type: Tag + id: ClarkeCentralControlModule + +- type: Tag + id: ClarkePeripheralsControlModule + +- type: Tag + id: ClarkeHead + +- type: Tag + id: ClarkeLArm + +- type: Tag + id: ClarkeRArm + +- type: Tag + id: ClarkeTreads + +- type: Tag + id: DurandArmor + +- type: Tag + id: DurandCentralControlModule + +- type: Tag + id: DurandPeripheralsControlModule + +- type: Tag + id: DurandTargetingControlModule + +- type: Tag + id: DurandHead + +- type: Tag + id: DurandLArm + +- type: Tag + id: DurandLLeg + +- type: Tag + id: DurandRArm + +- type: Tag + id: DurandRLeg + +- type: Tag + id: GygaxArmor + +- type: Tag + id: GygaxCentralControlModule + +- type: Tag + id: GygaxPeripheralsControlModule + +- type: Tag + id: GygaxTargetingControlModule + +- type: Tag + id: GygaxHead + +- type: Tag + id: GygaxLArm + +- type: Tag + id: GygaxLLeg + +- type: Tag + id: GygaxRArm + +- type: Tag + id: GygaxRLeg + +- type: Tag + id: MechAirTank + +- type: Tag + id: MechThruster + +- type: Tag + id: RipleyMKIIUpgradeKit + +- type: Tag + id: IndustrialMech + +- type: Tag + id: CombatMech +# TODO: Make medical mech, I will. + +- type: Tag + id: SpecialMech + +- type: Tag + id: RipleyMkII + +- type: Tag + id: Clarke + +- type: Tag + id: Durand + +- type: Tag + id: Gygax \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_air_tank.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_air_tank.png new file mode 100644 index 0000000000000000000000000000000000000000..692cf7be000a7661834b47a880c80ddcda470cc2 GIT binary patch literal 612 zcmV-q0-ODbP)HwNJps29xKZx$@FJq*;13;F$``I#-t6ySp zITP}K&*3$A9YK-qKr9EzmsDZO5#tEF z4ge*z-%xg>B^THNbO5p(mmDZ}V9T;ZJAfVluLD4-T83c>0|PV)kOAxIB@Ch*3=FTj zau^ua&%==a`Fb1W4gdjg{svmI4M@L&=5to4I1Fs7>OqkMI~-UrfoO^x0E)l;ySDy! zbn|A2iH%@bvUmkt4k!+1&t1G2MUDaL2tx5s&;cMI9#qS)e_b=Ypg|V@aQG}Z#n)HW zVfdC^)C=f}Nra3iE)g0{hWPe3FpHrBa25q(bUBdYhykQ!Lk37LFhZ(i5Qb$lkOiRX*4TF8e~=h9IjT4S=7#to!$9A*ngSbDikbn0Te|IIgMP`u8;swv+0Dze7RaD z*2F!65}?~@Lrs!dOt4oJLK=YMouIG!ECARmN#Y(s;Q%-P3`1>P96()e#o^%)X5c{$ zA!?xMa1VUg+XrY!O_J#~xI`iD#W%_EjKp=~WAt%dbl01PLm$N;w@Ks8_oC^JxIfLs3ofI|fb5=FR&1pucRPQ4?F%<+AfZJTt7EZp~?Ku#{+%Ogpj~`+V8VKqN5OeOK2h?iljp>002ovPDHLkV1inF*4qF8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_chainsword.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_chainsword.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2878e9348b90b5b4ed0ae85fc74cdafbea566c GIT binary patch literal 3636 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_syringegun.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_syringegun.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf012b4fbe0e1417ef901bc067a7ee8eaca543d GIT binary patch literal 476 zcmV<20VDp2P)dJ9qW6ELxx#=8Cb0RWn+f7*amKTOtC@iz!PP>KF$QX)iCG2dhq56IeiF1V<3^IISmT(plI~cR&RwRZj66i94`3KgUiS7Kc!Y<^;r#s80vs2a?-X z+liD^09;&Nv6fOQ2PAbmZ{q*s^F3h3gGzTpWQ$DYwr2*c2OE3)yR0^6eoD8tH&HI+ zaa3)H4Yk@0n+rqACnG48!lw@a@C>XL%dDlFO=jG*o8(udGU+A(!0W`*N@_knvoB7x zM^)Fp0Vsfc)2V;mIHzCbTlVKz&FM7^VlDud12d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json index 5e07ad51faf..b8e924a5ba3 100644 --- a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json @@ -1,7 +1,7 @@ { - "copyright" : "Taken from https://github.com/tgstation/tgstation at at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a", - "license" : "CC-BY-SA-3.0", "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation at https://github.com/tgstation/tgstation/commit/da4d61210600269aaf56a2e309dd31c056252d84 || Mech ChainSword by NULL882 (GitHub)", "size": { "x": 32, "y": 32 @@ -150,6 +150,39 @@ }, { "name": "mecha_kineticgun" + }, + { + "name": "mecha_camera" + }, + { + "name": "mecha_bin" + }, + { + "name": "mecha_air_tank" + }, + { + "name": "mecha_radio" + }, + { + "name": "mecha_sleeper" + }, + { + "name": "mecha_syringegun" + }, + { + "name": "paddy_claw" + }, + { + "name": "paddyupgrade" + }, + { + "name": "mecha_chainsword", + "delays": [ + [ + 0.1, + 0.1 + ] + ] } ] } \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddy_claw.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddy_claw.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b69723bdd88b38e0a55849918b425b0155bb13 GIT binary patch literal 889 zcmV-<1BU#GP)Tk+t*sYd7snFy&5_T- zhl5@B(Vlkz9Tg=}AsC>yu}L)CZP&?YK^d^M-h{Eh#5e3uH;P@Gw!}=Oa^BNe$2LV@ zGdTi#sU<1|1CVoqcr-GB4}+cX`vUMg2VgI&1hOF?cH+?S^CHVs$Pam4Zn!3g@Z|A5 zZ6Sxlf!k*;usu*!jU7W%Y|r=w^3rt-Q8VciPS1ia0)TYwPA&|0max5f4)zKQ(#wmq zo2K4-0O?T4^~)xwO5I&uTIA%sY34afE345oIKZV)$}cYyug70#5Dc(yxm7q)n{}1> zIijPYl%3N;DuO*;FPC6udNeG3_4V};B?!Il?0$g$zK5_JJHgkj(mpEfRQ*~K7=WD9 znEE9J$OYy{-3Y9t;H^IhW10?EO~o>7@Z#ro@5QZmulV6vy^qJ7pkdVxg5f{O613ky zT>4`p3arS|r~Qz>6s;5;vW_YD_Iwju1}e>U*GnF0jzk-d<}c5O@0Yj$ zm|7ka>SUpjkZe26?2KwnH7BWS+VP>H`5YMF#6sc#3PRbmvsHw~v|=r~-_NsBUXfXB zE;x+7r?$9Sc+9sUcQ1JYsFA2NlT>30ZA#P^T5LT$zZ?{Tj$lHYFd784Qi7likW@1Y zZAyVa0KO$RkY&=IRUmZ!``7wFcq2*#f@;p`_bec^F{!3RC2)IPXgG2Or_P#VuA9&Y zNjxtk2_^3tg-?RC*j%`H$p*vLLLNzK+z>z_QXs2Z|49COpJYjZ{|?|M7kHLxA1!;; P00000NkvXXu0mjfC}5U> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddyupgrade.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/paddyupgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..ad60fd40c055fbf8b6a848c470292050ea59d19a GIT binary patch literal 1230 zcmV;<1Tp)GP)7eFA`WJf`m{X4Er7uG$|VLmb{3Rv=9Rp+Rz9}rB;lMHk+lJpG|hM zv*Z2F>>X$AB<@s1A3QMJzuEb|^WAgKy{po{Z2uGZO9G9pZDzS2`{k!=c;B@z%;%W^ zz@w2@$TUsz`Fxbm=Uv~!dZADdy-vq$X+N1vnrqN zq9`TnsZ@&IJawAhA52hl!-K9E2NK9+GTcsn_9=sFn#SAkhveb|s>;B+uJbsT%W+## zQNhn!XU@>G9Z%EF&W?8i=V!j6(Eaz>DX-p*#Wrk>FEPQxpzIxL;KjWRD^5_V%_Nlz%p?L!suzO&-t8%y?7a>XmQ!5k69H zZ!ZJEv%$eZUQZ+v++qy*hlhvxoxZ+49s>|@5)20UyeapQ>qESE#h8khnF+FR zG11)J+jJm-#@5H^yX!aUp(9Pg14T%w+F%y39FGSE2H5k7i3uBA643R$AYqW{Hz|E* z)4KuyhiRJ1GRj~>iU9;cHa0e9dn>`Ep-NFJJ;JkLbp@wkwE%dQ950_OoFE1q*s z#)Z73L?RKIo}Tum01l!0`g%%bc1W!{Oa=kR`iZ^)wB^THtvQMX;`C zvZB97is^nH9GHgq5Uy3R_$f+!@F5*(X<%=y!>OVe@m4_!1aLXY7t_vCWOa3wUVkG- z=gxgX%}sUQ2;fQ`3Wbs6ajrMb0zKHvH$*m!++X-2TJm9t3Xvd?IDZOHX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHzp+MQEpR8#2| zJ@?-9LQ9B%luK_?6$l_wLW_VDktQl32@pz%A)(n7QNa;KMFbnjpojyGj)066Q7jCK z3fKqaA)=0hqlk*i`{8?|Yu3E?=FR@K*FNX0^PRKL2fzpnmVZbyQ8j=JsX`tR;Dg7+ z#^K~HK!FM*Z~zbpvt%K2{UZSY_f59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx40Dt-a z004mL004C`008P>0026e000+nl3&F}000F%NklI>8Rm#<`ahyf~>_PuB!Zm?w&67oNCPZWK1NEKz4R^67cNotO1~MM>X9&UD9lr z{yUNcW`4^gx_i2)+)+(W@1+GXlL!E~-EIJ^Rx1E?E~fx^_Usv%4(V$$8-K-Vj~4)4 z*8$KpZGHt}9o%j=nx;`!R>siq;A;^mEm?=d;ZRr$mOv)9TCF%7j+CH_ArQN$GiT1A z>w0iFASB8`X5(8#tUP}5|?Owj~ol8nA zpCi#n%16eeOP=x=78I<&Vktz^G$q&Q*h3LZB&h!x2NH=sQvapT=-5LQuW6dF+shdr z4-yJZh_uJhVku;NJeb6Eb^+5>vM8*bI=+a*!#wtG>5~O&3{JR$4~I|=?u-D zZ`rtE6W4ECi;Ev04`Q(t5(-VERzR*k5apkPHDTe-4uI807XP7=Y%$uKiBGjS@! z;)X&KghCTZxJe3BRaNog#R~=oevh+Da7m!5awq3{E^^Lnq^fc!;czU0nIwW06%_~} zc<|tl`S*auQb>1qH-7+jd%2P;G95MCyFVlVuJ&EQzWzM|w{Nj!^Tz;m_gqvqc@kp# zfW=ZsUteDmt|E|~oh|J4asq*V_V3@%@bCiyfqv#}O0G|9c4M`!LThYLYRD0|eGB*T z6X^P1oWIaPBCg$D&dQZ<)7#stZ~=o-AQ0%s<#OTicmQxZoqu?}-Z;6!;V|bfbl^UI z0594A2fqrUhYw`Jf1Ol*Y*Dg9cJCjRbv)S-?JnHCpyA( zjw-{|zANJBkz;6$4VaAiJbwIGzL?M&8#sF87+-($Rh;}bn+>1Or*JzvJL7N_f!y5O zq>UqOvHgG9vVUbs=ig+^kDHVJPyd-oi<>b4*;4CVPL?lUu99!r{1E^@{d^ff%}IZU z!|~q`xO?}mvemhqoc4IBb2;gH_cB{c}1&t9j4jSGzS(Gv4rO4Sh8dZV`DldV?Kj}Bdl3dnAxQ? zc8rb&Ie&HP3)R!lp7ka9%y;V@8`IghuU6eFPoDg8@dRpWs^bD{YN}~%Ysu(JR#Q_Q zM>t(Re8RnNbN^+ggZB xM-B43Q10^f4xd6g~tn?#f^A!8EaTu}yrk3nr9A(pVd` zCHkO7wu;oXO$h1(ZuP+*OpT5B^PpXMP!p2kTD0u~+80u*o7!5bQUWYBA<=-l5|gGR zk}e>NfpDGg$Qke7F1togvYEMO&N<&V-^`uaTSR$Sc}1ClHh*<}zTn@CyID>Iq;R0= zF^cw`)X#3V9+NW>3xVR|Vn^YXl@%`1^yoeY-*bN>o&D+zm6zRYiA&A@&SQu{Y+wJW z4Qo0Gz&biQxb^vb+&&j-=K{;i%Vch0m6he(&dsIBEe1-xAMWCQGMVJIv$Hd^0_Fe^ zLBGDfp2p*2rhnppYH$HY9}38r#MV^bMXjx^x|W-{DuCG|(QNkF0em9`%#-Tw?q(IT zDuA_70fwCjRJi!v1=@aR4NY7bqblF+7GMy;4`YZyEM`A6G^BxLLgw{%RY1VORQAK_ z>MFNaejIlIo1e`wk|VRuv<$8U>U?Y8Tl-E=B? zf)0gVAg|X$oo~KD2X45Lj?T_fMMW8Pyz(k7Ev4yb_+5@Yf8m@ZA2m^15pY*PW2d1m zJ3&2a_UOa^4}r9UU_(O#8HPcVlRvpD0E0x)Xq5X{Gm#5ty4u~m55A6_rMew=)9~d> z)VTLS9*-&_;)CH$Fy8~H8;ivpbu|IVgaOFk)_>MU@%SY7*L_;9Cz|)Gv*9*ge^EmW z;MfPrnm6U?`tn(jsx18Db6n z+pEPKS$O68a_m%Fg6)tQmJ_w_|~sH3GG7+atjIyC_XVx_wL%QF0DCrRmTn4 zoLTPzJy29cV`CG%!4ioX+Pc-p{zIYX)p`Hkda;E5^9k_vF)A!9r0MA-=c2~8ZGTmi z5hv5Y)Kr3w9C?lVxYLgvi#TF3{p$tz!Gl5lzw+?m*YhXP+`P|{i02PK`hapV#F`0b z%XKAynW+Sp6tjQ=kXClO+sxs^(nyRwH3HkKg(+;_FeEpkK{}MvF2RV!X|Vh;i`ZnU_;3aP!OlwMz*-P zNMD@(oHrp1DqvGeO}n`gKp>dPcOeYV>Xgg)RV;>+P~Hf0F5W7)_`d-EN+rrTkEKKa O00001u`m diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness+o.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness+o.png index 9c2eb36cdae70645290f89cfdcf97642092dd563..3ecc6d4edc11e8a42925a6236823f7f534df9072 100644 GIT binary patch delta 3415 zcmV-d4XEf59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx40Dt-a z004mL004C`008P>0026e000+nl3&F}0007+NklA#mu$0i=3V#5^ z#fgtHV4^V)qYR>=eqftYEe&9%yK#T~fp#vqb5fB{P1nj*{ zxD3SOU{7f+AMI@k3%~80^Pcy8&VTPc_vVxcAvjKoqGXI!yG;OSaa}no{4b$NBW-N zlwSafDF7|5E6D`x@9&eVWNdKCU$_H~x_Tlj%ccO5d(As=RMKL{p4x)Q%73zO)YY@F zI8RNrgVnXji3w|}9V{%)%hMOu0;z+81AtU<)m9-YD=$-Ct^%;Tdw3ybjNDU@15$?Z z&(bH4pYq}3`>euptm!+c7`dll04=U78=LDQ9b{|!XJ(APlLfo6xqhnsd0oP$#+ zlXSa!C@r<%@w(}D^)MX%gMS(tVQ^rGy*-1G(U&we-sIc-*W$Gx{baFN42#7AKq8S~ zxWURu2%^y#hGAsH78$_E0BCb|@b=xCp0S>5R2A1JL5S(&g$DuSQ?f~?k51XmtrT`>_YPShZ)A{th7T7XX+%&-9V{=R7^6)eb taME*HK29l6C7iP^04@M70L~rY?*KMdU7P7c)oB0#002ovPDHLkV1fkVfF=L{ delta 675 zcmV;U0$ly>8qWogIDZ0xNklitVz<#AtfwiS|c1A=y zH>Y8#9742Qfv!!PG4*lMGWqYixD;le6_7ERTN~@W0#<8W9mSn0pkj_&z!h*MZ{JN| z;Fo6;`m8C zczA!2uzcn@kU4Tp%K$9l*Kc18E67aYyFJGgZiF?*DE%QRAHtnGc3~tvgfo3-(a{mW zm8+LUe<1${kz5LwF7{)7UPo&1rpSFg@k(i4WdOOdVt=uSKp-Ic<#HJV@eoouV0N}> z=IFLup8<3mKyUIe?%um2eC*S|0HFH|z`Zn2w>Sqc$H%ZGz7-$xIV5`ai+DOSRQJ*N zCa7LWu5QDlM~)#HT_g6N##KwBIL|?$@B@#ZJW`(16#xY}IfV$peU~PEdv0kE{E`%W3R25-Y`F}yyDM1H%7NuQhYy9TgAu)l3QhIlNC-21R6aZdmef*&iI zR>HG4G1D{SN!&AlgfN9&e+Byn(5kR60Df2-pd1a*2Kes)e*t(ohjb%(B+38)002ov JPDHLkV1ht|IR5|u diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness.png index de4a5f8a77dc9b5e54baacc1b700732883bbd2fc..81579c003665f72aaf5f37d7adbb83183e41bff8 100644 GIT binary patch delta 3418 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 w+VaDKnOwn2}k zej(~VpcN0*>Y)ce50dIp6cy37i5^3(7O^T3bLf}1qBb5Iu(%0yBLvrZ#!R}KO0v7z zQiQ$`X7+vGnddj}%w~2iR@hbn{x5*gx}d>U`&n4yChiJAO@B)3iXTNXHE8kGS|z6% zZv;~pfI{)ZN053x1hy3KI1t0gt6_wK>n*uj;fIVd$2>-~Mm>nS0365(*e{hzFt@bU z){t!H=QaE*hY(Fypl#cBOiYfOCjV6xSHkSG0xG6*D`VYPz-+avqj;kV*s+FNz!h*M z?>~%T>y|c5O@EJLV|bHAm>~Qy#vJCV$~CnG%F5-kY^Og@ED<(8n{(8dMrI2@*Z-FE z^r9xW*TRZ1w*HW8AHw!Mdoh$8!1?YA zXle1`+V!il-Y_Z?54J+VEfBLE6=ataZG`>ss+_V4R( zGNpY0mVZ=~-?-RwNeb~c0kE{^y3ZPS`tL%t7~GsjEW2CAl+Q`|9Rrvl*xxl8K{S#^=3~&6xGMk! z!H*S9E8xYui15t15_b)tAcU~vuVBvrnicj0z#9u&1z2%_KW2T0bk1d}8UO$Q07*qo IM6N<$f_v9T0ssI2 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke0.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke0.png new file mode 100644 index 0000000000000000000000000000000000000000..8a88cec708a1cb55fec269cf63469661a1d0c32c GIT binary patch literal 1302 zcmV+x1?l>UP))kG#BBW#dkOlY}`aMGc)`@lgUsvo7L;X!^4(-*iVG-_p^)24;{(G+z<`@Mal1ur*QoHV`yH*Cw^X_>%V#Hv-It;Pbrr2M}xI&_9HF@bUcA*C#+*A&oP9v^_gJf zXsRvEwUqemU9LOOwWp2Rc6Cv5@(+4pT{+7TeS=Cn*5D-e4l13;pL$L=DD0Sx>wAu+ zE9C~;(!AYD6^NusQC}dNis&OZ=timy$fJWFf)jojeb2F^NZovnY?PibyB(!yY;2@+ zqa)O+`T)@*+7*#%>h0~-5#yIfUrOO<2aL}zM>fB<>lvz#R`dK!dW6Tf_Z;LA#(`KY zrZXTi=tCDU^`V>NhT)Ld44WRUiQdbTrB$owbpLPa*P}hZG&V?;6=f<#Wi*h!=-v-T z29O!iKXl+&j$>B8`N4;nBd70JAEhvUZOrgA*NZ zzO420@oj&sjWeNp0OX4*s%Y=NuPue^SH|=l1_Zd6@KO3OxgVv{nAig@ftSzAsU3LY z`K>%k-2k`t<+GXxTmwkA_oGy9J!C+*1VNkw?H4TvLT|Kx$UP7*z2Nis&tLt|s(EXA zZ&36Au&~rU(($imIl-07q}2nArPa%LTwQ;UmYqH`PNj>NSq4BL4-X)71RxxOATG0% zrURkR4}Qa0xIFHEM4ahKJ;$D$6TTC4Y2-(j?A8(vZU6uP M07*qoM6N<$g6VB<00000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke1.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke1.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c9e427c143a1f7720383809d1de4d4eea09e96 GIT binary patch literal 1347 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke12.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke12.png new file mode 100644 index 0000000000000000000000000000000000000000..55fc94a22fbd802f366ed2a7611cc367eb2e8e7d GIT binary patch literal 1514 zcmVBAUja;U)ZUh+G_@!KS2|?qBsGCA`BfCJWZr^jh z`yS4BFSq)ye|omNbM86kectE1@B5u|%=91Qe*r!M5)%{M+z$#0qR`M#(GLg+pl>_Q z($CHr)87$>gx>9bI4hgx=jX+Lr_)I;mrKqM3=A0T&8i{V<{M7x_bi(jh| zM(O*?sJKMyYb_AJ+TQQQNm6c~7yn46vbl`j9#s|jlnYmOds zDz+{k?zPrz(T50`0(Oe_%B6lO0Qo~L0F}F@L|Onigb3~f5n++qnhA=J3zxPGm6Jut z6sW*LaL|T73u)^SGDIMR>gn8hhaqw*^rD+^LjZQK`4nS*&jD=`#VMn}gd4N0ej~7P zNglP>dgNN(HMsmi2a&oe}udk1`w=bguIdg_o{M!hyb8x(uG$S}i$42Bl zd|GHm7l7{`;6f?*=mycYWX<`AsOrYUfri{JU2;>4LJRHjL?QRY>lCKtUv&<_FFrp@ zl{r&zE;tY5=su7F_9+D5(AlJXdS|xXD-58#@$gEKe-N^Wq3>@JRanVdu@JRMC4yKB zo5sU>_`wBEB0U1AwK~nG6yOal{3a~|S`proyWt|7o1LSn=}Ga)slXWK0IWqFuwXa` zr&`zyzeOlSkl2A{Wc;+sN`k3o@1)OIY4z*J2JxNnS_m z(;uUTgH=94d=4V|2Y>)X5aEv1ZyJ~VG$(tz{3GMAsjjYO4wLGG?*W4V^#)|; z+z$(B61&kJE0mM_EVZ|OLJfA`-C)k;I)q1uu<_c66ruW(*D(ec@-rcvqtLduPl}>L z-htZPrBu43mb#~Zq36=0#Ta&~H|1^7L)DDF zenoSUBENvkZjql{pT1M+0PP*k+4R)Y`i_~OTc7KgLlhHDZeGYWp;kLmk&%%>mxczZ zNUH;*u2oJW9DRu?AcWZ$58M zDd5S%T+wpg06q873zki~1BBcAQOc(tBEVdX#W;J*M+^c?73Gbh25jM1d=%gQal&Uz zJvF^gP}Ber9Ik)Twl5br!R3jhp#}t2C9D?hx|I9m*oBLu6dtwO-~a?T?HJt02AG4f z7?+w#Re-7a_%|X7S4Vv>5%=7*>|>2bgwGc=J~*b6EejLv)ls{FL)|^_7ZRaTJBB`# QjsO4v07*qoM6N<$f=1KNGXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke13.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke13.png new file mode 100644 index 0000000000000000000000000000000000000000..4acdbaf25684ec3d747012cd788807b5cd6ef659 GIT binary patch literal 1510 zcmVrEWk`TM7$epGQnRbeQIE{jX?-g@1Gr!UGA3HT+4Pwp7Q2xvt(DtE(0I6E^-;}c`z$f>{><^Zfk9k5_H2d7%t zjDSTbM3C5lW@J2CMY}_(;{7qdvC{pzfd1=!P-5WkCv{sABW5kz=a=`W4jd7j$a+YRf|)6*#=WsB&qi&(m#^Mzm#;F|&z4M^U2 zy@0AdDidP~@rlCG(foW$Nlq4H&Ym9nr0up4hWsPruqiJuXAYCFseYzHQ%t0j9;^joa@&^h0sDi zMT-0aZfBxAa$WjPr31A0)MwGN&*?j6es2AqV-8VVEO~e#*MwT_NJU0Q23_mxrF^Xp zu=}phKA_c!Nz~ffDxY)w0@!mZJW>FjMjqtFd-gt0sg@+szv}80?ZE@5MGNOZb#=9j z0FS{Qwt#96TQ4^po7ksWRg`9VNOV>tSm{c~UF~;SDj(|aqE&HGT8N^k(>0*q4@v|O z8MgntuF=aeZ*PD63BlpD_ZU7(;r!eem7=p{TPCSEf0juyXD)I07{eSyl)d|! zv=79$_31(p30VUmkB&>As>9zH48}(KWgiY0xR~%!s(m1fk5Vp7tN|Cpm(Q0|3V0?j zTeO@vK+k>byk(v40O9uiDCJuZ5nwLHLY$q&0|o)6lHwXs1CGcWeu}4m9`+kkZ%yAD z6g2>ZM(Rh}@zp#hxV(`x)PTT>q?MvwoBE&}yK;4qB4bt>9Do3~9fSMW0CO-F;!;zo z3NY25{#Hcc)}a3*;+dV0eXQ|{@H;_6y*G8TB@v>%HRv>OsJjRL0tJLpHqj3!>i_@% M07*qoM6N<$g0rp9DF6Tf literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke14.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke14.png new file mode 100644 index 0000000000000000000000000000000000000000..248eb8b97161c883f85f5d66e478aa4c4d3d78fb GIT binary patch literal 1460 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke16.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke16.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc4912fd998a0b6ddda7e259ff9e68ab41a084b GIT binary patch literal 1565 zcmV+&2IBdNP)d2*%Y!!;+fPlqyXi6$Q5K+G4qAv9tv1+KZ-A zgV=SxGyj>L|KDxxNp@%E%*^+lb7s!@$4B#&11}dQTD$+D>e7Wg4iznP&G%lJe5LnD0$i$YrVo^W6~LtVt{y!4WS|p3IZYXl1pEV5RoyWB9Q>L*9c>P zAs+Vg_*Q&W{kx6u5_lsp8#(SpUQVuyM-1_a@|hRzQ00?PP}jLj^udQg7a)M_(6@J8 z=W`w%J7aVp+EKa2wZ|*;mNbzM891vAX;?KcxI;@6BNxj9wtLAbGFFY3&+{Q2yHEO#-AyU z3UvewSUW>qp?sdmELXqYY@%?S?7SE8EzhDO#otip?(;7Fwv(I5-?N?W{XXr|1A}pE zvnf+?bUFIW`?9IGV*&YEI?t=iusJ~;L8`5q;mKoa!t04dVSUyu3Jp|HWPr@QKm=aH zx~xg+C4Y+df>}$CxbVU4b2?O3Rz~lsQ@D8XqS^HL`qd^18qiPu(|L4ujtCGOfOd6D#)b-|sR)0AR#ZuN>t5?bs<-y?`LUWjVj22sQojXN;ix@au4?ybCdc^D@$>3@Yq*-dv?-7Gzs zC*)h4!=Vr57wU8yCeQx#JZu0$CrasWs#;4M*B5htQU3t97dn3A7UYoT=4KNC(SZzm zA@+V4=U{_4LwJ0)MaX%`%7PGeUz$+AZ;jbQ*Lt~?B7@eBfavg;jf6)XjO6}3d-fO% zU0o^pC#eTy*Ly0og(a8jhN50FfO5=%flBI{d2HKO0{4t~c3;Dv+s zcXGQVpdY#&?MX~v*rKBJQYZC(g z#J?DS5}xXVL42v0G=ztyF^V-tF_^G1#zaXBMiUjHSt~1GL%S{P)-9z4TcDsKS{Br8 z`{MO}=kA%#+`9|D`Qn#sW_D)I_nkTC%*^%Ee~kYf@HkLYQ)5ZLsHljFi;KBmP*6aJ zj~t>a>8rkL5#CySi*@gswKOv`!~fIiG-WawH9s^oWZ3(4Lw(}>g$b%Czk~a5LI_)0 zT6kSF8a0Syyf5DC5!bmyM>gV@!L2X8#tYtl>t#Y8tpG$431Bdlqy@LlHyp-TZ7^im z=y>$;Es8sc;^(+S8p=+|6AZ zTq~Qj{Q3fEPoErAh6o{QK~PpQk6Q@B3F*rm!mZm1bWU*s@Dw2y3W=UOLExSRRJgQ- z`#)#L=7yaAfg3Iw4hV-3T49wKM`#X6AVOH&+Qz0r-e(OH6k$e!-s~rZfA=#=etdg zh7_RTfPVD8+I%}3yc)V{6FE1cL<1N(agpf68Y;RhEuiN-uyIa6SV-)Bd_ zF2Y~cZlnmOr>5z*$xG@u3NVH_K*Ysih=bF8+vasZIYC@Nwvlgi+)+?kQ0H{eymhf>~=|@ntFSC)sFGYV=t+&lmpu5mnDl|+V%w11*^G#JT=Vi>pS;x3vnP4iKqz3 z80=vS==QM9azofBntt7*<-xnSv#=^m$NDeZzaHiJ+0g`5R+QNxDx-nam~%g95kO?b z{FtG+)0ym$VQ#tU+)9bmF zya7(`%V#b3Isyo{`=eBDJw!mb1i3f|+Q$qBeB0aK;~I#Tp7wbB=kF7qG5ywb-=L@g zU~Z{%q@!QYa)K)xNuvfB3#%7#yR7a`HFoUyIF-&{WC(yj9v(pY*nn^da&hUY)E)4B zy6;<#!ntwpBVtWYsy^0ao$#EXv%_Z`vKvddJvW{-IP~2E{{VZgF58uU99{qb002ov JPDHLkV1f&0dsYAd literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke3.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke3.png new file mode 100644 index 0000000000000000000000000000000000000000..4e877ed690df83763a1ffa268bf4aee63e07c621 GIT binary patch literal 1594 zcmV-A2F3Y_P)`6pHRCt`tR((vBRTzJ6+*ObkA?gxLED{t1O!=4^9}=5WYRhW1 za&ygatr@L5vyGX57;~jY6PY=Ql^eO5W?QAR-B4!clu#}PDn@{yHq#Wu_;BUh`91IZ z9L{_1#rm&)+ub?$yyy8nU%&Id$4mb){$ByK-5+OROuBZ#6TBY07L1y)vDWhbE4SVA zj{(3*N=k~=Mr19S6irc4Q4}2=P1Jabii?Y_?++iMzTWG%b#hZnE&_o z_R_$>fPUWE+Um0Rnuanz{O2&8ztBVRag(XG{UWWLGlR$>EGjDEeSW{+Mf6$DEUG!$ zWclc(c3!0dM=`0GxZ@4bt%96yqXSDcr={vI1uZhnipd}^*n2?kkkB^;b=X{Lz} zOt8!VuvVoUkad&)KYz4|mL^Xna8G%2CeTLVD!k*%TRh4?i0m{DXe}iNRcy(c>b%iHYVNvpLEA1Z41D;$ps`Pr*RNz&K@uNfKo{5u@P&gD3Sfr#7QdE zHu~Xk3+3GM^LlUvjvi@oRnCMhx*iJwq^0Jv)>s3wA)(@JN>F2cgf@UUIiMw|fHA4C#5tZl!ZGk5-rQ1EM)-Y13rT=LS-5`bE&HWgFn@}oFiag_a!CVemG~&5A$pv zXaRValOaO$=&e=wZu&=e1xxh)( zp?y^>BWD6@cm}{ZbRcbjb8wo%cC}#C zAc)1NjNJWPf8!RF(dCdepCe$L8X!ptS-}H6g#*4lIso*=d;yt|6M<2cjr)oh5{?uA zJKvzKcmSH}vz>+9b*UzvoSm|=y^7Hd)PF68h zZ(kP@hy*PdwFPnq;2;zcg0K?vXoY&#@Wn?VXFD@9lcLfW@qA9q*s#vS!4-hn0yr1Z zytcBGwp6X-b(DF<(=XHZtT;+nCj@9#O8>Os0u40pqq9n=0mr7iyqv$Z<{d(gVMqYx zF$BapGOgLXjr#hple(->_2QRk;Na&}-5i=tUcqxp{U77fK~t5D$z=v%`qH0cEROW2 zhn?g2SsPREWN)1UJ_7kfE-+FccFFRie20F}=53yZS(&DGD+ ztkmf|Z)!Qs1c!TX>>u|%dM|^tCh-Rlg#FHu0 zGU!C(HT659BR_XGK#B3OszkALyrqN7ZB_u45&JK99<(_MvWY&iISLm%&K!=t<+_x@ z`QEQK@nq2xbIHWMuO*1Nw6<)kb{<>-tl=4gShxOFZ9f{{;wM*eCA0=WK0baLZQ1&r z%i!|)vw98(0=$@TDP2hRrBsB8J>U`q^96J20G@iGfJf;&VD~<5#B!(Y0Obz8l*(HV z6%Z~#IL_l`9j*X8YszX^1O9RCArasBy(eVNd}{`O#GnCS%sBf<`@bFG1ea4umj)P9 zrYG?D=&Y%F?L<>2jhm3*asUFn?F2GM0>U8($7QzC48XHz*8#3VcW3BF#2UJ)=h))} s5psggo$j*9?vCNHyR+HFVP+5f4S;cQY6b9p#Q*>R07*qoM6N<$g1t2Wd;kCd literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke4.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke4.png new file mode 100644 index 0000000000000000000000000000000000000000..065c065e6f90a3dfac365516e541e31c36a6ff22 GIT binary patch literal 1489 zcmV;?1upuDP)<36HJfdfu684dh{Zp>m-r)SfFd@c^a^wVE#KbX zbKmE1-g~*#x4!h-?#{XAoagua&htFyyvIrZG5!}2As{m|(~y3Ad^{y2Byc}AHkQ6? zYNT6%amU{gK9F#~@z|C^nwgp5|A9b&g2AAg@9yrl**kSZw5P8JsOgUx^2FSxl;q`9 zclkQ)&Re4hOG`_6o!9HN5y^OKTZ>wIw7rLRE=!gUV=X+j# zi;djX`)H5H?3*nBG1!Gf0;GlW?@-c1OATE>XP2KEr|%`V^&d8{6%2XaAP=}LKQ-0+ z42W>*&O5src>!9%@ztq{5W6T`aECS(l+db2H&9&MeLOcc^*deqse=le>#1sT9vwH= zDqAc3I`_J)LheI^N`W{K!OEjiqBvC)gmCkgtf&##Y(}8o+pgBi zuE7-zETGk~km|I-oSYoP=kxKn+nBJW;@?I2 zIpj7CQ2A94C)sivW9~F=?TfYuO#L{!1rhAII!f-C2{>oY_liP3kOJ|^0#Mz>+R^)R z*D^MEGkct>GBY{+N2#F!^0 z)bGF4N0u!b2kI#rlmO&Kzbtgfi9p-;U^3?w7m}Q5*x>@=!n!%4)8o7q=tNl=Wt%4i@SBzX zQR@f`L;jI**i=?l3Wr1YA>RR;0R0On&ZVDPeVlGhjN`FFMO&YvZ_j;9wf@N6U@jQ^ z0FMr~3EPMgq5D#wV+_vbXPBMi__aC$d>bO~z~MvXRKE8xwcVJY7u?A_hTZ3zVaFUq zVy%a6bHU1k1b)CLJ|aHHQk8P$7MJYcP~mkwq11$4?Wl>38#mI$zFsOb>j1m=eey1?c4bgYON;uP;}^wVQeh|o zHP-VBgR=Owz0Xo^RtEPkboFxk_MubU!Z}b|TdN`D ze&(~o+}ZwA0qHpVxsVjl{)%JDd3XdchB=5haPVbiAB}Iv)8!lqRRbVjl9EnGj(u%2 z7`xW5`fwn?#e_%cHVQpTr7*DuT!L`Ea84!Qndi51D|rJ#xlf+8JQ;F;aECui<<>(4 zgiA0NXGg_=O@QO|iubt&yo)YJD4zUnIATn{HN$UE)BvzxQRql}znbL)mla7{4KP+@ ztmJlmZmJqPe_@aoEnR7I00P{00_kG|!XcQ8OHZXPz;XK2HynklgOMK*WBP{bV~r&u r;sjmk9SV`nPvrLMpx?%!?;iLIHd0HYGBo1L00000NkvXXu0mjf1qIRL literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke5.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke5.png new file mode 100644 index 0000000000000000000000000000000000000000..997a7b9414282a5725eb5b6f48ab35b54d45f84d GIT binary patch literal 1496 zcmV;}1tbfH(zTDC8wjt}k315@^KcwAylO zZPn%{+G<7H9qGoJAIP~fqJhqsthF|Cb2i&5UF}8^5sNqF5-)-#3SuJ)FE3p{%iI5V z?*BYI|9iRBx4!h-?w;qK=bYa;&pGFL{*RshWBeaLNC26cnSPl^M@LgkObpK>BO~d% zrbe3ZPTKyC@PU~7{g37s(A?Y{|Mz;mTWenXI8K$Z~7g4@FlANX=*@#`7m%jEk z8#$}@Q>n|C8zZp#r37kf_Nq*Pv|#ZaTD~H|uLsc8?V-lmd&z13$Ih`4!8O;L1(pA3@l4=Uv^6tbkF_)Vx9wViyHV?$Fk}B3k$GW{QfskJn~qey7Vnbx=WbJylIF zqFO^2s7+5MGSjbfZ^$a(If76n5T_WgTD zwgR0~f>0&U0Y%gdz=%H3k@m=PidtXH^Pf%GlI+0$w0lOCtw84jQqnhA*6pYRQX%Pq zB4pB(!CCmeshhUmb@Mzp13xr(TQa93&~(Fo1c2QeK3Nv_9xxWsoGJ@KxGg^`YzDR& z8K`%+D_z+&xWa)0Xtgb+6PnQBaQHhrJ6Z1ZPgzRwZ!;jy!I4Ij%sF`Ns#+I02O!5q z8fE84H;MK-$Y~g$^Q%@bx70Sm*lE=I7c3c=`Eh;=60mD%l$;S$aL%0X7Y2Nw1mcqe zKzDD~j^3AhSF*ud*^^Y2naTABp#;(2J4)31ZrHR!7d8ldqNj(sz)2Ly0D7&)@Tmd_ zhLL`okpZI#e^I-UCY+s_rC-O#_{iyi3~K;%(FYPRoP$$uY(dy2&cIHU z1B@pO`#t84gQn|q27A~7x;<=7ZaB7y zPrDw`=B$T!vL@9*7us(bzh)Kr^?^=GNs2d86i*%9R|EHhmH}i&>_0tu-sG6KFM8~8 z<}mI3mPaX^pZ%))to0lKWRtLc$%qHZk!#o&Bkcid!40W_%Xa zo4P=KP9~9+ew}-HUNO%RgerkJ#dz+_DHQ-U{Ne>hu zlctQ!!uKsfT6@dK^T-VR&>FO5PDi-uh71IN-J3pH7V{o37tx$53qrWAC@*FP)|nY- z^mQs-*)_OgfdgoF%%Ovt(Cu~`e!rjP9%IZ_ihr8{aSjd_jWXxJ`F^!7at=U_i!{oH z_bw4_ag)b1KQpNAA}M_@9E1#r{9Q~R_MY8fnV?LW-f3Ng)@L&t22G703u3|Gt0Cdp@5-^;DQ*UfR%qHX@h#SZ>vLCHodU$qUa{(%yYLSeCuS#f}bCR8YQo zLV$qT>F>7>b6}`HDh`{SJ9i3)L-!%y0b2n27f_tbJhQf*u8)o4u|g&5pQLY(e@G31 z=-pr~6nYnr4z`KdhzdgYr9Q_HPSb>mKU3Iz~@>(piSx z7no_s8iItbmu_&w%7X-cz$ZSUKF89Pa^;qmZQ@knek-*;(bA--FAxg2)RFUtcd8s< zJZRc)wstK1GDdxlB}EzOWQd~lgx>Awi8X81(3##IsxbQiyZ3+mCgr%6Qd?V_`kdnz z!(K{Zr~vA$=NE*c{L2u|s@1 z^@vvG-N%zf*={<~dCmN_s>m<&`6(-7u9>2_)D`Rx-w#>_kQuT6Wwi#Tx*r(=jAi%|hN9hI%KT4%Bp#v^KBwr+_3gGdl*7GQJ1H!dWpSC;{c7Sw8 zK1$`*Lk5IPFcW82b-yhD$II34a1Z!W&qYN%{@YNLOuscFZ&36Akdzue(!MXJIl*OR z($)ivMN1d+xN=3NlASm?K&feqZ4N+y+fE>JY(O{!GjZvq)B|uFIs6T0VQ?V&BVtTm xRdeWAK}4OP3q9w;o;#F85zm*(9lr&uJ$~Q zk4-rKj_}^dg}#S#^Jr#fhJTNZjgi;uRqGuc9X5NXZiw;Z$QafBF+=W2c-!-ai1v(dyuxgEM-HAFN z6_Oq(LMBb=pM~#h+iAlc56}HG@Izg@Eps}|rW^7h0PNoI$+DpLfU$_?R9O(hjk#$- zGqBOfK((hy>B_Fb6$~6egJS_5)r1)t8NQa57M8nwleSX)+YE?va3s?NbM{~9Q|lt< z0C4UBX_U<$ju36nAeUi)&ab$Cv8}ct#!kalKWEFp)Q_`UkbvETqvQ&igmdP6H{bMu z5{OR@0Nq`n9lfu%FJ*%_(kG}QHI?fRLJ6X$bCjs_?VxFeE^H9^ct;0wfs@G00D7&` z@Tmguhmn4VkpZI#e^I-UCY+v{reCjL<0Gd7GOPj6MIT7Oa1Ktru?0b!kb@v@Aj8Oh zwD#V-LuGU=K;{lH=e?JD$g;)YKtBb83IKJ{FAE)VA~5#c7sqwQg(PPhcDR7Jv2F}2 z-C%&Pn(9;b000pBUnC$aets7fItE+BKik_ z07MAFmypjgZ|iAlY;3gYWo2bic={Heua8D<|msj4+_H(2v}Kfp%^+xTrn1)=*=&oP9v^%-L4IDQR|F}@8^cc6Sa5%3&KSIU)JP`H&-h5N0*dZMLCQD4B@ znyijoi@8(f0OL`^ew(#p;g>PsIhGW~$B|DIr6=@mM^9vDXH$1i7Zn?QfZexz`VOs1 zPNDkxdi9*+FNnRA!lweLv_8Ke6y;ZUJVlvlDLlW}-o@iv`%dr(=Rj3emCAs~U=LeB zw}-984aW}g>C_`ym-YZpmM3M#{uzJ_YY1ZZ-WQd9Futu% zlyW9i4}g48d=ecvbjD_I?P{-@!+`)76Fy2ellf69jR_ra3H3@Tw2Y`rZ z^GJKXp5+9Wl}TF=8+5V1je#}F@r}FY?dU~4wdpsWUdcA7Bx3||~Z`Tbm9=+wE(|=5pE8;FCB`&7o z53W&XS%xB9zkWUIH8wU{h(zAj-l}x7tKD?GWFg(SIYc#o&ZazjBson#vJtyD-}c74 zY~-xnLEBu$+!%rQZ=-n^l8OBt7bt(uJxX{a-lqr9-Q%W~sRzhu{)Y{01y@~flMCFY zpS`s^dJMZpkVFiqWPd|%OgxE!X^gUXeTTIIz&!)L^ALO;k$=~VH&z+Qiwux#c zX464KH(=`x;a=&;=Q)B&@X4~U_kgj8=2Te_!gYC$ zuo+l4tC*S^JCv^M8eHMP0kqlXQN1S2%*^z4b#<}a=^M9{;@@UKoP#5k#+Y;P>J_yv zat;9J9*{=a@bN98t(oLB4AA*Ck0w}Z8!_v)k%cDOV`ib~*qan<)L(awfL+&blQUu* z&YAQ50>2NGKzwol=0EyhN)Y`QZWC2F$Wal<+OU>E=)wkp zkM{O57dVOh89=Y?HGHZ7f?=fJW@Nxz2{{Pj1~QDSM{C!_eJZ!?*)MZN_~!$c`pLA#U_(EJg9-q3(Ju=faw0JHKb**Q z#f2ni8g{sVxUufsRJ!2+U(HP?tN{QZ48BM}R{F|L>S+6lnwy)I1Ly_oVhza3Tt%y$ z&r;o?%8)=pE+YB|fB-}Y!k1jYGOzn2wYRrh^m1}?C@Nzk&sWFJo6-49umliX0yGUs zUVm*H?b~0;vXtei?C4NwDP0fJ;x9R>NCX7as1kB9=;7x zcc6NA8I^6XruLC>dfA!CGVDIbNITXLBy?SLmm7A=q8RQK_yM2z2zidBE9J^9EZ)Sa z!WCU;KGD*os4w7kr>Y~@<=?4tfU(}N-(v1q_+<=vjwMA&iR2SS=?T5t(GzRdtf7nj zeN<}n0e0W@`Fpe?HH}(ZTh()pUl@BSg-->r*Zll~P?X=={vu^L(s+Kpr;o=yyN~b) z=RjRuoyvg7U=LeBw}-9C4aYX|Y1bplc09(DB`KM7uH%mJJF6nUHqb@MNehe=EuhYx zEB^aI%K$PX_FpudGC2bF#ZN!O9Hza`@=*%sC%&xa$;Rh$Nyo|KLXt~6%MU2$!5M%I zYY3up*Q?4t9N(tr%QzFN2SC0sDTVeO_|9T5d}Bb(;Xr_k2_K~!$p29)jR_ra34-~8 zIaL5JloatObp!mhPYhT#_#GhK!5^h^>mdWeC76k`v;2xB09!@*hui~=ahF3Pp7?Dj zM5f=G!8a&+0EmwBAL+(#0-WG7Gim7o#*(z9Jg&-Grex>N4^mwGQi}r+;IW!&oO50?{m1y<0XGL?VqzTJ_wn%|e}8|`_xARtpPCx! z-t>&=?+E?;S2>l8>EfDhkO0f%$M78BISw0V@&?iD1ssml!Hfo%Igp!>9VFO#nu=Rbig4?N6 zUUtv{C(NpNS9haWfR=IQ%RotZK6^$J51}n7nY8|y1X{7;F)=qc_dDJErGwI%>!@^g zIi1kfF524NxHnqTL?2Gb6tF1Tfg4@Y0pt(00PL<=rKKfU^dSf*xDNyc1e0}cj3O0V zhRVrK$P}o+LgWlUi#kvd^=v3j!r$R5fF$WyL?lny@=J6iTCQ+O+3QV{) z)#5P%TbE^0U2VHu%ew}bCkO{xO}e=ie?1o z(D0y~=W*cx&ON||vg5PcM0?{j@j+4f`)x6X+g_xCrOx=IPg|Npa*4oOH7UDpB+$P$b^deQBEOK+i?INOo00=+?Cma#!V$5!isVC4^4q=2C1-j2N?Nm43Q)TsVgOBjd0sE-q#c zld8e*fWZOv1!QsVZyzkC;%V`*Lg^W=(vS6DP^Ha%H<+{APvN73)|H)b-H3ET)soLK z1{d=)Cd6_42KHSSx1pc@IY1>x@+tp73AIh#r`MCh#29v;sD&MKa1wQ6r3cjaco^+j z?JsHtI^bgsx96CvlCRutnLG7IL-h40nu`?q1?;vcdE`3vok{_;Rhs=C=Z=}5Tes(! zLlhoH4qnJLp;kL;A~`vkZuIq1u2u)wedkxlXhT#qwY0Rz=Nvx|_M8fbbfDb%`GrAV z{N90ADBcn+`q#R9MSJwfS> zzpMS4rRO94ofHusq=hJmI=Tn-`$35SBE$CQtLvQ{i}sn@Ul1Hldxznp6yle@E)kvV zmr_VY%|#|jp+g17rMPPZForoeQFQoCY43?|=gavb60!zB9vmJ?6~`|d3?^^&%RU4c zxR~%!x`XtOQZ7ua0T;uS&y`a;usbJ1w466U&wbdUWwkDVaJzn#@~wvmFc)Jf&W?gX zg9E0*f=@*a)CLZ?c|7~unA@0oYr5W`r~zPQpnjxlzgy%4mot)v8W30$y;iiF;@8Qs ztJj7oFl4Pk00g-07~IDOn1ittmzqk|0n@p&KZq!d4!J)fj`=Cs#~P;-ZYOA@cUUKT jG(fbYLpB44x_jU+a5qkT5!GB=00000NkvXXu0mjf6U^F( literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_chassis.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_chassis.png new file mode 100644 index 0000000000000000000000000000000000000000..8a88cec708a1cb55fec269cf63469661a1d0c32c GIT binary patch literal 1302 zcmV+x1?l>UP))kG#BBW#dkOlY}`aMGc)`@lgUsvo7L;X!^4(-*iVG-_p^)24;{(G+z<`@Mal1ur*QoHV`yH*Cw^X_>%V#Hv-It;Pbrr2M}xI&_9HF@bUcA*C#+*A&oP9v^_gJf zXsRvEwUqemU9LOOwWp2Rc6Cv5@(+4pT{+7TeS=Cn*5D-e4l13;pL$L=DD0Sx>wAu+ zE9C~;(!AYD6^NusQC}dNis&OZ=timy$fJWFf)jojeb2F^NZovnY?PibyB(!yY;2@+ zqa)O+`T)@*+7*#%>h0~-5#yIfUrOO<2aL}zM>fB<>lvz#R`dK!dW6Tf_Z;LA#(`KY zrZXTi=tCDU^`V>NhT)Ld44WRUiQdbTrB$owbpLPa*P}hZG&V?;6=f<#Wi*h!=-v-T z29O!iKXl+&j$>B8`N4;nBd70JAEhvUZOrgA*NZ zzO420@oj&sjWeNp0OX4*s%Y=NuPue^SH|=l1_Zd6@KO3OxgVv{nAig@ftSzAsU3LY z`K>%k-2k`t<+GXxTmwkA_oGy9J!C+*1VNkw?H4TvLT|Kx$UP7*z2Nis&tLt|s(EXA zZ&36Au&~rU(($imIl-07q}2nArPa%LTwQ;UmYqH`PNj>NSq4BL4-X)71RxxOATG0% zrURkR4}Qa0xIFHEM4ahKJ;$D$6TTC4Y2-(j?A8(vZU6uP M07*qoM6N<$g6VB<00000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness+o.png new file mode 100644 index 0000000000000000000000000000000000000000..c752b5066d54c5ea0ec1e72eb9b9ea7db3af03c5 GIT binary patch literal 741 zcmVza&qrI z-}&x2=iYaZ(m%$30RsYx#iGx4Hk+kfE+_3wCPSO=-qODN(~2WJnLFWMxqOwn-LCxa zx-NO1r{+7IPLF?N2EOlpqsjbfX+s1Pmdj-+uvV+}5b=1^X$%C{x%x36fE8jVJO(1p zM1R02z$c71Q9u%5n3%9NrbrZk6rvZx0-5-ZBp|MKrT|B30gSLLnE03=Qh+#aXhf9- zQ$jsB?;c!33jh!pBzh_0vZ0IQ;PBgbJE;U%g2d;*dM%T(p$iWDA}_Dl3?Oxr`M)<} zST@1}1DJ;ogvO;mQ2>)NVgFcIaDam+od6R7me_%~@p_3k8&PAQcedqku>06=htVz}k5F zP`wXUA1zr+%d5V#_ls^Xsi-gDwF~OVwSsj~ z508-r=$I*-qpj^vR1tlE-M3yomSc@ZV`#2a0uUUqZCho4$HpQ6s98Ay69AF2R` zo`JMTEdUqO#KbYWF6@JY-#7u|6|nR515KZqQ+8UU7Jv^>m_0TD!Fl&Jd%OZh4b1oh XTIPTIN4wW;00000NkvXXu0mjfWQj`X literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_harness.png new file mode 100644 index 0000000000000000000000000000000000000000..c752b5066d54c5ea0ec1e72eb9b9ea7db3af03c5 GIT binary patch literal 741 zcmVza&qrI z-}&x2=iYaZ(m%$30RsYx#iGx4Hk+kfE+_3wCPSO=-qODN(~2WJnLFWMxqOwn-LCxa zx-NO1r{+7IPLF?N2EOlpqsjbfX+s1Pmdj-+uvV+}5b=1^X$%C{x%x36fE8jVJO(1p zM1R02z$c71Q9u%5n3%9NrbrZk6rvZx0-5-ZBp|MKrT|B30gSLLnE03=Qh+#aXhf9- zQ$jsB?;c!33jh!pBzh_0vZ0IQ;PBgbJE;U%g2d;*dM%T(p$iWDA}_Dl3?Oxr`M)<} zST@1}1DJ;ogvO;mQ2>)NVgFcIaDam+od6R7me_%~@p_3k8&PAQcedqku>06=htVz}k5F zP`wXUA1zr+%d5V#_ls^Xsi-gDwF~OVwSsj~ z508-r=$I*-qpj^vR1tlE-M3yomSc@ZV`#2a0uUUqZCho4$HpQ6s98Ay69AF2R` zo`JMTEdUqO#KbYWF6@JY-#7u|6|nR515KZqQ+8UU7Jv^>m_0TD!Fl&Jd%OZh4b1oh XTIPTIN4wW;00000NkvXXu0mjfWQj`X literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_head+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_head+o.png new file mode 100644 index 0000000000000000000000000000000000000000..559fe1a35ac89e4c81944eaa7f9886998c92317c GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQ3N z#WAE}PI96|g2AhXK=uhw845i&{=ab~-md%U6bqpYE0g2oKCNRA?w9^T2!Rt+kjfnvL+SuihOr#<7ZjMlNm{0~~8ii5tkEv2bA25 z6n5(=Tz6V!*$|a*g>f;TMCpMQ%xTO8URCbAQdhu8Gh17$Wl$pPpH;D(B3BlP7t_ ze*gQcefaI}bV)y%+rQ_BxKDV)AgCBjMvPpESwKWNie+*d%t)s zGn);ILxbdtV86Q(Qv`n0RdQOoO?=)k`+A&_LCova1#Aj8886iQlbt8fG zCdf9r_M|wJ#X78O4Jl^WdSC^!n=IH%JUf^f1fPegua!020Q50~r>mdKI;Vst0A1C0 Axc~qF literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..163500ca49320a7d7f6371c1fd46a15fa7637e28 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0sos z#WAE}&f95-HV*_iHn~6WP_Secde@|)D3jRi@L<~41FWb1P0C!RqVT`t z+w6a5XI=kx-sktZ2v!CDhKCssHrmOrpZCqA;cAuiwZD0fx3aUaF4#9mnWJWF1RFmG z*MXN61(QFTFfy^YF#fnxF8r>}Z2hGAEm{H`3<=-wezcBa`=@E&aC>VXqX}cf5}mUQ zTRyQkuw9tr!*E9GqW)B)C5#Ugn>sZl7xX3TdfJ!DWSzopr0A$N-fB*mh literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8912ef2768ec60d4d2b046a465b8d6cc7210d8 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tb^ z#WAE}&f9B-e1{BpST86TGFxvjG*}?lsC@8*q{KtL9*+*?5FVbKrPc+F2l%~GZ|E%V z)B36Z@y8{L(qDSTJP8b92^LZnYtA2E?VfFVAZsu0>$>e9w@g!rX!ul=r?8^?sL>T6 z7VZKoxjQK~e;FASIk`XFO%**?XQm(1wIScpg`weYz1{xc*NtYEVh_BH>XHs%ad@=# z44cQqJmw3`KP*!jQ+^9B?Td9bW8fF`IdX$})#DjzW&2-QEK{`p_Nt*e*3|UaMy&_` i*M!P1%{{`vR>AxvKDHy#bXh*odkmhgelF{r5}E+7HEb~e literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..21fc39da63064c1202a8473d472196f3d3e2496d GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0s!w z#WAE}&f94V`3^Y)t$WZYZ!tr;I@3dU zvwGf{ymM!EpUK@mQ$m~Z2(y92H`!O8Kfc;p&BeeYetNC_jrU;-@2`3O|J(F6xpA@Q zn&hS~6={>d@8&9crrZ}OcXY0VCX3Hv1(ioaMft`XsPu$+5y zA7h4%W@h{WKL+llhCHt&7%G_KP5ZX>Y_XK(-zWCdV+I#P)ng@bclIA^9v3*sAHKh4 l=6@zRhn}enLJgJ&q_4kBxx~EuwhGXH44$rjF6*2UngH{3ZS(*D literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..38bb6cf779d69f263ddbfd1e9cb29c8bae517da4 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tn| z#WAE}&f95}2qJHcTQCl_bA<0OH;3km|Ito$(v52yQFeqd!i z(|7XEw0*DYXWx98bKi9uqXdI=f`wGYmFu7HW><+au;_*FJ|+L{^{ssK?rZn6crWmr zUoXzye@b*Wt4LSWoucykDZ3a{xSoHR&)T5y%Gys}=p568u>q!So)4B zWpm{nYX;wClE3*im=qMHoxfSJF}yqAzcf7BZOP}C5m!wlcMEJ}d~qc6(H^S<<+9h~ oYI*)w%YG6|VDvc6!1I8){BFu6rF_XrKrb?Qy85}Sb4q9e0N(*^UH||9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_treads+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/clarke_construction.rsi/clarke_treads+o.png new file mode 100644 index 0000000000000000000000000000000000000000..be12f067e7c2ed42ffeb2f95c9fad76b72274f8b GIT binary patch literal 601 zcmV-f0;c_mP)mzMQ(D?5A&`?R0n43khU*Lg-(ff}DfUu`;fQ5qHGMB!(ATfC5ZWy&F zJn(of5=ZQCZ_{-O4gnxSrzSuYwRd2WV2^7zSOW(8@u+xkGM06SunXW5lOu(&lZAtR z5uGM3g`b~WQHvRBOcOvc;;`evITcyLK8aNY@Qz>;TU$P0^(}285kEPWi?^vW*6gb` zFG4koC9Yk&2OdToDxNs7$HYq!B!F+OFNmOju*(A4+8~lHHXVtI;y3~nR1G<-p}@@S zn9P60H!w6VM92w%yvEnU7Nffsz(X!2W4F%jhCSdSv-8mzMQ(D?5A&`?R0n43khU*Lg-(ff}DfUu`;fQ5qHGMB!(ATfC5ZWy&F zJn(of5=ZQCZ_{-O4gnxSrzSuYwRd2WV2^7zSOW(8@u+xkGM06SunXW5lOu(&lZAtR z5uGM3g`b~WQHvRBOcOvc;;`evITcyLK8aNY@Qz>;TU$P0^(}285kEPWi?^vW*6gb` zFG4koC9Yk&2OdToDxNs7$HYq!B!F+OFNmOju*(A4+8~lHHXVtI;y3~nR1G<-p}@@S zn9P60H!w6VM92w%yvEnU7Nffsz(X!2W4F%jhCSdSv-8AZZJnvco0VF^BB2??vf{{BJy z_aL#G*yOM>B8x&)|oVPewGzJB$BgWsAil8LF+R+qR8 z$Zla_fesH3slUIUedWDWDp{Z0RFR@M#P^jY_L+bB++tVO*KEUjx8cc2(*glteD;x@ z!#D!LKw2xJ`{YXIDt%jiXUBor+na5R6+8!$CSsXlAXZ2>ma7;@$UNqf;8B8Q+$Pop zZ0#WpKpm#3-hh-SkIy`FcDo5CV(58RAfKP2YIW6S;*O!IFfIY`bbwNGc3qd!&wUm#IJ zt0Nd#bCj$H)`zn*8(dlYE|BKp?CQJv{>!F3d{v>LOOem zp%sV(Ksgw#il}gr1$?47Ax+MECDRjz)Zqkkd&A>z&6BO`Z!P#Wl(Sm0*S(>?6YiK# zA)o)H1oQ%TC-}hhm_DLI{+AK3((3a;)i(pZI?A}yQ6jeox+RdhBk0S@Mdn^q)Hd|?L5P5HFB?+Ni%5v% nS~2zRB@t9WH&7?d)b0Aeg!rNl(sx~a00000NkvXXu0mjfDL>)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand1.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand1.png new file mode 100644 index 0000000000000000000000000000000000000000..2f4c63b8c5a27f56e7a39975fd1e466ebe5c457a GIT binary patch literal 1022 zcmV0EqAV$z)R#6)h zqCX&9^e4EG{(uO|jnT?oAOniDD8!+05X4#(CMqpNaS*}9>wRb5Ih=RrULB@I2gY}~ z_uTJ%_dDnQu!H`ywM!rl^hf_nAOvg!#QFR%<#IW?akHO0fB)L1dc97yS|t{r7I2yf z#8XqxxY5$LFbSQYRE z5+$rUf`K`QhsTOFTlk~FjWzEADX!T9ug+dB-t!&4_FOnRI^=JnfXLK;*%GmF@IkevhR?zpP9yCJAWU7!x%bd9JYh)k4EZ zwxU%`2?%?e&m=h4hn;}!B!OzBACzCbt;A%jK`Ge*f?*Z2wU$YNCC2N?pQfY0=dH`}k_Pnk6Mu5Ornin;_MFqHwjV%JiFQD7|i z60)ne7*>Hu0E|OyRS^{~vVc#NEXb1cKFRDrOy+QcxwYZ(SM#ja^;ZkthH_TR>TPY< zd&2GWDdh9Nlz^S!?gSs0?XyR8$p10|Dy=;qOn#$~KYTp(0LthyoV5l~_x;@+_rNZ4{5kY2Er3S^xHRj4G81 zl}ZH{I(5Vl)dbvQ$BxS+kx0R7y@Mm;2(fOPCwj7=eNI+`IT4OsPEi( zVE=(nR$~F5ZGnV|z|_>V_j@{UfTgv4FY^yC~L8;qAeh9$uiaIV|h zcbVPWH@n4ndT*9ok6LNCU(&$daiMj@R?_23D`{qbg-+~VPA`7_F!^Vl)SfIko{4uu z{epMm;J#UB z%+;&oOKe5n1AY-Xp0{q!1L6qj!m=aAX~914v2nj89dF&Wi&zsdx#!R@D42?ItEV}X zoSrbT_xLO@fXOzLxG~=l<@~}zfn_pY6@Pj!b1o`ghXEcfpuirFx@Z~8CXEX#2BsV~ zHiEHO9HyR3hBB1&=0yS223QZEnA^rP-uWJHpRu3^8*rEjI7kB&ST4S6qI-uHOa!!{ zvuBcY^;$u6Sn}yY)gzx6WAK@|xdnrjPtO?RN|ts3iYuS)7Eql}$i(#-8JnKQ>D%Pb z!1?dr=VZJ*|K~ExrDsFah6n^iS9Z_Fq>M-bhm{FFD)}B?_$>SSk%IR*KLu5QS%Ynp zFa!`D?pL(af!-+z9k0VP^DwD!V$OR=A^%-0R?}2WS1&fSqP|HD0kGHA?irW*&Zl+J zwIo8v@f_0RLO;p$hKoB~M+LQ^-UzL4?h4!65Pc(&uOYwp0MMh}3)2saP?&yQ0{npi zu{%NUh3Tsfh}5q~!0|)o>iYrt_bwB)-e%RgL5CM1;^;Hw4 zZ@qkt5x^T^-3{g+3nkKKoFcmh8YK|;M$jKCwZ#5V@%6(9*CgO-FLYnmB7u(%6CL<00000NkvXXu0mjfZRZDW literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand11.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand11.png new file mode 100644 index 0000000000000000000000000000000000000000..0e1f59cc33b195e3bd4757d59694be879eb4fb43 GIT binary patch literal 1111 zcmV-d1gQIoP) zCKD}NNJ6w}D->?rMNuLcwa`_82};zW#HrB)(dY*i1rdLkK`4UPJ7?Z^JMa3Q#IdBp$CW>UhR4U%esk z(^FX{MJ+9@R8w<|^7*{1_x3(`HCI2(pQnF06*ppcu-&(W=uALRZ1`x7+KF&o%_ z=9AS}z-L<^VIr`&xa9p_3LIdmZD?kG0$5#ri00*M3ufP)YaaJ+DD$$#DHi!}A-r2%H+h)R^O4(m>jjT(%1K87X16mYKV8_t;B z#}B*3c(OT7u19ThbWqa3-f^KdmX*_sJLR-|zCi6~chlQnKTQ5vC()E9$1^c8GAMZM z*EqjEa?S+!orzcG8 zJw6KzV6qJ*Zkcb0GJav9z)~r%iobl4cP=VkhXHY`;Vn=}Si8JKd|*a)7v z+$i;=Qk0^&_ns3#ZGiOvig(+1$~)iV?K2kiU;_>_0S9S-0?X}*D(b(qVIrUnb>BNo z9i3UxVd+X{iyryJ7=zEOu5K8tuH>>Yu4HQ$pt!n{-2$rf3E|eGPNJ$;F`8fa892Yb zzADeVYk!7WCb<%tHbfvGy0UwY#N~+;a9Ek3@woG=?CVPk-e>$26aiKYwoSqiKzO)c z(M}h77bSGO4$sWRq{4}J-a`uc?_92!rd+Z(*wBi4k{SYFudCfNF7=@ga67@!Wco8D z29FwIXf=)$Ish2DMRlzOQh@w(6nrrw8i!HsqVE|`H!|rWG2Lp&xj%9RGpr5*1Q3BR zF*9DZUs0b7F?bd>_3SBX6L6R*HnhjK_ynDZy~r;r?Y+j(5pV#Y6kHt@L}5FL&~ZG6 zG`Y}EGQHtqhU=)HHq;%V_06oXy$#Vf5_uc)eGdTr)O%t2VG#<`-;n@+U_k6n(0gI} zsskeRcOu~UA#?S7Kz{j-kJ4uyyWd0fcO(!H^u3x7f2AKb`%5AKkD|V6qV%nsuQUR< zBdpnA{;^OZZN@3GYoJsDfo}x;v9g`mA1c0n7~yRRxY`Td*V~am$aTcjdnk#>2U{BQD0xDP}n){g)H002ovPDHLkV1jXQ1wa4* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand12.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand12.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5946d44ac46652be97fd8bf394559a68c996cb GIT binary patch literal 1122 zcmV-o1fBbdP)_pv(aL15n82XUFK;z7Mj${eCY!Zy5{R zKlRCKEa0;(kT4OLnws{0PX``gscksQ`~#$=aQoL!r#Z9Z%6AnP`4q>sH%%sFFj z+7w%1D{>C_MdWzix)~3MBcuzO-0`Z5ma%No7+4ix%3)(8 zSaZ1n>PV+4O$l$G6F_Z%^#F>!Z9MHg-{IXe7W7~P4l@AOJ(Wml?2_n+io!UnYp<|gVmOrF~*gw>;e>5TdG~cr1J^k)}vOUs#h_Z znEWMY2#Buij-3fvkpd1Y6J(DihppcN`PANL{1g-c zW(~GY!Vo}sxL?suCp)JkbbJoa%!^5d6MMcx3iL5S>5eO4A<5l|=^~n%}XJJ#%o}xAZhneC+du)qO(22N<{G!s{YYZI$2LMXJ z)loqdR+9)F$8$)N3;iV17cOSFjtXi+y(6@~nH9FTA^Jul--i6Y2Y_DnU6_7Ygu?Vo z65tOEh}{YLE=*r_K%{;t0*)UtSI-CJm*4SG`mAI3dx(BX0s%qatNE}d{jk|z76Et^ z^;Hw4Z@u}-BY<~=H5<%77D}YeI7N01luID+ji5hPRulU}#n%rbyea`#d!hS!H4+H9 oj+okql8B6eE}*p(Q@PLo0a~59(LO*%bpQYW07*qoM6N<$f>IL+TmS$7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand13.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand13.png new file mode 100644 index 0000000000000000000000000000000000000000..32e8f4169b19c77fcecab1d936b7af0c4c82a712 GIT binary patch literal 1112 zcmV-e1gHCnP)6TK1=ZPEbCdr_s@@ z51lQ<64eC!*4C@CC@(LkiHS*i^QK>n)zsF>e&*?Yd9v}DnJM{!R903Mbd2#!SFX!? zd@ReP=lxmUIfVtgYoO5Ca@-zHHBUAH|q_Vv6(09_n1m+B3+GUAyUX|1-PKm}O;& z4Yp$EKu|=U@z&26AdZkOEH`4D7M$}L8xLC2GyA?<#F~K3J%@%t!BmVpJ}MOtzuKF9{4$CMYZvSUPR0_}dp*b5Zd=4Dizd3Z3y&7cFDCq%p8cz?8$rM)1t# z2B|xprZiQWbxr`a0oDU3)~@lix!-Nh84G%_0f(7@hcrNe<<>|AJ-xVMBcKg+-91R{ z9a+&~=}cvVy)KKvcNP~{ELLY~-Wpf3u?tXKovAJflg=lETaP-3DqbgOdgga%Z+Ur9 z{=T!cKFl(yg~+ra0wK|r-F>K1o=5?Ql?k%PlEaSg>-jVuYVR{a3JL%V7TYCZ2_QV& zuV|<9J+l%z-iK%Q#iYWCHJ>4c{C6%_NK-CV7;I=oJxMJAu-DaYj7xp!3*1gHG}`i& zl6{9QF|-;-3LO9p-J-hILMcH0ISPT;5sk~JcF{M+TN;>jftYSJZKPzt_|3Zk%?#OQd& zAx$pwlT07@nBh7qs15aw(E4^(xZXzSTZw%e^7|eD`l-*N^rIparN1Qs{=k5^ouJR6 z^i>DM>TgBB3qt1W`GEZLJ3daIb=-cB(BG0kNYM9cK5R=rYW5dJ03OAC)x_yLZ@%IP z;2q)22K$eN5@|C|ky``B5(s@G=#Q1n#QjhS^rHxGO2F4%=)T^J1VXMOrq+=pVk4jn eXgkGJ?ESw4XSzq2_Vlp;0000SO`D> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand14.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand14.png new file mode 100644 index 0000000000000000000000000000000000000000..c1cf6d5485f432df1d3a4e05a7b897a0b5374ed7 GIT binary patch literal 1098 zcmV-Q1hxB#P)ZRC0x2ND)*nhy)S5BNr6{62ue%3D{^L zg%}9wOd%;!T3Q4fyAX)65ON1%V<{n6MY*sMMB*VijHU=tP7vG8zVE%^-`vif+T_8q zyEA|OfAi-5+1VTBKcgvu@$vBp_d=l%sOHFHZf!i{ni8mU96PA%>+8#zR4QdU(s$+k zSNVrIJ3BMm+r_BSxFn*QKr}WsR%f}ox@w+2ducu`zcW))Q)Y2-QGy>H9>_(sw|B~& zHXP&e8Ic4DL<1iQh6^alj{go+=ezA7meIP0E zr~;7B=gq{#gnfoev>~7#NWd3KxBvlLr(l*FcxagtNTg!1DAH;YNd(1DY>P1(NwY_6 zQ6S#6?8dG~Fqzz-juqg6}86!!^Qq()CCBXH^1-URF4lenj2e6!wPoO*Loj8Bp0SH+@W9jOJF3;pUi;7r1azPbBCQHlXatW<5Kl;xOFWY4jtGZJ?vQ}a z4fZ+qcCT<}n_zFz^i<5*H#&r9G*jrx1OT@Znn6{-wFv}O$s)Z!aD5Zb`qmycZoN19 zH@K7n?n&vg_DOsHwFq!VzEh3Q-ud!fnSd=xN~sde{#dy7w9y-u$KFq%zrSCcO-@dl zrKKgawY6pN<<3`bj_^ z&yN@b61}~>LZbS?sw3fD0u0#M*|E?3DOp=v^UnV0=*WOP#{lr5f6ZL{16sq9Q(12g Qd;kCd07*qoM6N<$f?gr=P5=M^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand15.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand15.png new file mode 100644 index 0000000000000000000000000000000000000000..da8af5a091b5ff35afb3278ac4faa779ccc7e1f9 GIT binary patch literal 1081 zcmV-91jhS`P)q$gGRCt`lS3O8vK@gq?spJYlND)*nSOgKgBZme862ue%30N6O zAqGM^Q%H)GmKGt6T?oWj2wovJmJ)(hlnWO@B!c8Hnj)Z_Ahs|2&Al1s_I5pEihS^R z@9oaceDkw^H|Rg(x&+cld-AUYVv3tEI9Q@wE=N82JN*B%_MOhp&uM3;a;5QPh*|>a z#Kc64E-te1qoYH91l`@e{1zD*6VaIp2_cX!EG+QH$;pWd z)@n6=Ly?b{<%jg@-dFy9^W`qB&h9t$%b3p2PRi%=+TPXGMPp-QG&3{9Bs2mW8ygfu z|L`d7ZGF;zgc}C$Q;z>vX`kCdW9s!fRjbvgZXu8$EOT>n>NS8+0#Jm|iYG4DQH79^ zGyq5;{%t?(ke>n+R@Tvkk&zJ&8A6Bjhz$NMZ0bs-5*tEPH#awxi~zQ>f=!xc!L#SH z{Jywogj4c}sQ3ok0b^hsKtTc>9gUP#wmz#|bR7s4olE?@UJ&=Gd zA>jiAbnb##Y50LM6`+tRl?sQ}k_ZuGJx&&5EJEJHHblJEkl17b_{a)F-)JiqiyR#&l6<0|KuFpx{C_u| zy%guH4QT@bOo!A80I$E@q~*tF{N3Aoo8O0rKiGI*UmyR=J46CwPEXHN*L>l(8aGH< ziVy;*gZTo7%x*3%(YOqbtd5;8P>LDmyqNy?)AVw|e@Wp*@{~LIMSeJ{KcyYvj4Y;jb2m zP=qoS?MkWyB>#92E(~zSxjyUwnNFy3nRYTQr4Nz9(+GbAnT2dhSmz9vRB^qrq zSl$S=KO1aqNY3Sq0G**aXd)mH2toFD%ib?W=?krTc4f6QL3cwil@9B%kIZ-y>5HC- ztoK%jjX)v_j6iCmB2l;u5t+m}WXT1OWVRzEvp4~MZ3N^M0dIYIMRYfmwOYKlwPE)T zzbzD@kbGMLc7Q(b${t4Fy zj^Nmw+{FWWR0l{nJ?*Cwg+w$3 z7_hs$tKV`dSzlj|dVhR;Odu~~0O+t+Gar8dMqP_x?d1b=00000NkvXXu0mjf8N=Pn literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand16.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand16.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b51220dd4197ab38e809c3fe43822884b1aed0 GIT binary patch literal 1152 zcmV-`1b_R9P)1RCt`lS4~J%Q4~HeT8RrqXc09UEMmkT}T^u5oj)ggu;!B2$PVYl*uWOD6kyUpg{cYnDRVo$w@S$)heNsd< zfv~TyuS#-tb(PLtxJpkRKcKs%*~9 z&4ofj2!xZ9ll-!?vttD}Ha7SP=V{!Xy-cHL-|_pz+cWfR8#YL+f=gF!@N<8^5)+7OkF2B}9t7yXIe;bx zYHFgA6_#IFIqyE;YCOpTFflPfqobqteQ0RN$_S7>kbo_$3Ku}Yu3a$8bzQVf1!$x~ zp}?utBwPg9j**3qhAVpb<_u)BdDE#;out9yv0!s^lL=xu2?+oZBXW7SK@=i=kTkk@ z4UDaD>f!waA@Rus@DewMePS$|&9ZYCij7q@6p(ISL4AEa{z3^(`;ajZz;Xz+0C4a9 zF?xJ`FE(|AA|hY8uFcKOPKWF3>$dSSnNzg8yJu~UxBs-x6@scJgaG||MDE-JxS?w2V2kqxn_eN~k}>MuJX#alGS zMET{5r~E|cXEM5G-84QpOV#c-Y+5@z1YwMEQyprsIwwj_#HelfeA>HbAFQPiICLh1f+YzA#dS` zHZ5=AJq=~AmgseF=(8g|=E{&u{y+j+A-xh@#`Kt40bcoo2-wu>{Xx|?@X15QvEIG+ zg+pCT5D}ny;860ez5lNWNJPG`8lQaX&s>||pD z0|PWOGeavYD};*+PCfm(?E*f@aX6Wa2kclIAYtqrybR&Ix3`xM8aUL>@tue3o4G?c zonubEAE5&ht*xz0B0jLHNO(&Cg|)Rc`!1J~`T2Qo^xNCp1oEN-z=pn>rSS`b2AT2) Smqi5t0000%{>`fP5&8%rrgAyfus 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 M07*qoM6N<$g1d4GBLDyZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand5.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand5.png new file mode 100644 index 0000000000000000000000000000000000000000..832d88cba3e906b27aa599b01d4599fc13e5057b GIT binary patch literal 1093 zcmV-L1iJf)P)}L*pcfMHFTVBK}|oF$`YsoO$2vyz6@^)1m`< zulJnyo$sDs?-`^2EcFs_BhHL4n=aB`VK<8nUPwym8#a><36 zNjaaLEe0+K0RhJg_rCnMUA|89Z{HYTc8;h-3EQyk!pxMx_~2t$5=;T-x}&q(XrDiQ zEY35%IdVN}<*9K=1K*Adtt-|*uOBwh+SMuzUO7(he*ZH0XPb0SjvUX$+~m064c@(P zu!}R(Qm~{`pk-&LYJeD^z5kZc@i~eyJ?a(b=qVc7EE*l;*ol+$apI*pXUxXN_e zbHFbm$GfeY_kcJ;y0Gksaay2f9Xt11((%q+yNERblY0&ggMz6zw|bgG$>|9bTgT4= z1DNbXi5v4BQQj{s6j(OvRq@wPvge}Wb2#AD0t)DO)kVu#Hfap37?^U{*a_BBX^Muk zS;|t<+m{4TJ77D2VsAUode0Agdd7kseBi=Nz(E>d!17@342|8`HWAQ{5HWN^%HQXG zVvNDhY;0^Btf9=Bajs;47ofO?GBrm!pSG}bZa*zsTN|=I+Wb4r@|pF}v>^fk(Um=X zJ}E0wz+pxBm|SY}r|9)d3b)VuDX0Og8*H0|A%O63zoMP4jjTxM_#8JgFD4aE>{*8t z^53OWQNmx!)CL<`QBP7s0PJZa8%BHq4f9#Lkz9PkwOOmL$|1|wLl7x ze~yALW<=v*RJ+)F&U0N%x<*X58glNBT)_;hg8%_UAWY1RSM67`CqoQ33!8fO6txLB z%oGZJV_STJPJ}MKW9SGt08j?5jtZi1kVM!x-i0)|&`&b0a52MmR8Sl09ii>b ztgvqzVs9k!ZOB6g0D9HBF#E6wh1nlUKu9$F literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand6.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand6.png new file mode 100644 index 0000000000000000000000000000000000000000..6891cecaa421db3791103cc4eb3ba27613dbb731 GIT binary patch literal 1103 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 FV1hSm^9=w1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_chassis.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_chassis.png new file mode 100644 index 0000000000000000000000000000000000000000..b94f935a073e052c627c6311a88917aac31a4529 GIT binary patch literal 1022 zcmVOj z_cIIFhDIltp8%R-k)k*jxpNhwJ2WCb=X5G#k_r1HzC)wqlH}Ivl8mpd#hCoQCLoPf938W>uV1~8;I}49WD;u8^1PIR zm6)BKrGtY5>gnkbU%Z#gW$|GJ^5Z3nk`UjP=EY~`>2r%6uddjJ^=`wHle!JY03%b6 z>>Q7CAT}ng714cirSmF%U3_Q98MCV^*Ay#w4x~*aG9^HwkZvqjF(!d|o=byADVA}Y zSQD_dXK5JJVVda;mXgckGtZpeZouRidR`PL6vnAqUACFHV|{)7GL8WJbbvB*{Ny#Y z+K$C?NdsR9@C(bvLGa|ULZM(9^Hl-V0oV_qcz1&*>m^GhqGMpJgVfOp2et>Do%H4K zw^hIw2uf&mfWd1H)Afw?;q1%?SJu1>&|H#TZAX7xyyrXn>T}`f=unmVjk-RbcaFpZJ=z1hO93E(uEj^6-AecDk{-Dbn#cGQ)=n0rfl2L5)V8W0Aj_ z`d}++#Vi4^*Y!+-OMmDEyqyqez4U|f^EWLqY&BL2I{+A3G2LsK5}^L9LTV<{6KN(m zRyla-E|YE$(_2k7sFaa0eSMH200n%8qgijihCgM>;QMs5xu>X0AY!JN&>6dy5{v?K z!JClIUSntlA^<1{qg8 z{he^fdY`#t#oLQDUcVBf1AXvyDq z_P0d<8HH{&A%Ew~*B$|UBb>9r-gJ~nr*nzi9%z?9=8m8*D;Jr2QBm8_+Xo>6#=UHy so)?jTn+a07*qoM6N<$f)ME4W&i*H literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness+o.png new file mode 100644 index 0000000000000000000000000000000000000000..09c1d9296edcdd3551a558c52b67a6e8daa74432 GIT binary patch literal 737 zcmV<70v`Q|P)Zj%l@8>=O})&E)4e$!6^{$L#IZ zJqh|-U^(Ru^lj??1KR)ciN`{2TCdj&03rsl&DxH}`08T#%+mtxFieeH9i_YTMN*Em z#?B_U!7OcI$1+NQsnoOh+4Gn5cJ)o@qL4Ys zI`RV*>r04Dg$#uNzxCQ~D7pNGZQ4NvSPqZ^ph6hy_GhX5sI^;ZGr&)$s^ImVn+!xeL? zh*%XcOFTAqT@y8mKPkI;OAEss43&y=0^$nb`(0Wf<%fa1ID^}=FHBl;VW*&6F4M-w zM@`hfs`~-bhNY#4ggCm0Q{Vzef}`hVyUtrcoQ%%=KjDA3p@5-)p@5-)OBe7L$ERF) T=t}Y;00000NkvXXu0mjfqBUIg literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_harness.png new file mode 100644 index 0000000000000000000000000000000000000000..75bc46691edb7bf3bb9aad1717b9be30c553b29f GIT binary patch literal 737 zcmV<70v`Q|P)Zj%l@8>=O})&E)4e$!6^{ z$L#IZJqh|-U^(Ru^lj??1KR)ciN`{2TCdj&03rsl&DxH}`08T#%+mtxFieeH9i_YT zMN*Em#?B_U!7OcI$1+NQsnoOh+4Gn5cJ)o@ zqL4YsI`RV*>r04Dg$#uNzxCQ~D7pNGZQ4NvSPqZ^ph6hy_GhX5sI^;ZGr&)$s^ImVn+ z!xeL?h*%XcOFTAqT@y8mKPkI;OAEss43&y=0^$nb`(0Wf<%fa1ID^}=FHBl;VW*&6 zF4M-wM@`hfs`~-bhNY#4ggCm0Q{Vzef}`hVyUtrcoQ%%=KjDA3p@5-)OBe7LUi4ge T+>*h^00000NkvXXu0mjfvN>Ce literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head+o.png new file mode 100644 index 0000000000000000000000000000000000000000..2e87f14fcf82522e6532587ceb00604279e3325a GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^+BK z#WAE}&fAL{xta|G*dD|eoKcS0*nO92Y4GkJI<e@4y!^`b)z9$`zw{sjrE5u+t*betruLysdILD=7i6^i!@A^ zUeP}AG465W@;lNof>HDNHuT)ya)39zlD*>OQl^yovH$;gGX|L6lG+d{;K0Dh0w;De Zr*Wkze|dlQPAAZ*44$rjF6*2UngBU2RdWCU literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_head.png new file mode 100644 index 0000000000000000000000000000000000000000..30a4aa31f931315644afb52b81e2d75f61b98894 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7e7W z#WAE}&f7~Hxta|G*dD|eoKcS0*nO92Y4GkJI<5-S6H)F@OxP+dA3#~kp-rO%ZxA1k`$M}{kChyOg zQYp2IHN1Q^|H@n3%eMJ2rM6ky>GfsCX@#@Jc0AO1&Y-_Dq~XoyYxeJh7(#ltvE_)d i2skh>vb^D&!MG?>`OBMkPXd5$W$<+Mb6Mw<&;$VUuvY;9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..0c168d0cdb1831c22d3317dccbaf9ac952c494e0 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQpd z#WAE}&fBSmT!$P4T-6gqZM->Ha*hUblr>c_@IPX7*&uAwdV{NR!e)gl|X@}JAqge4={5*X@PFYw(_*J&_2&83<4xuDSM9iymdl0nn5$`eIfr=I?) zu<`3x-il%`7RBG6>WU4QybOsb5V!5HfT_{z8iefv#a_t(8~;-u6{1-oD!M< D#NBn< literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3a803f54d05fcbb927cd3ef0ea6631223a351d GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQLT z#WAE}&fBSuT!$QZT!RZjZM-!_?sP2|xWoB~(WZl4;NaW`nn%_KXxMtc+-7z-WyOnS zCub-2G!6UT}I7Q`b==5xwWij=gOH?iaT4t}(CP z5$nI^{o*@}`RjxnPwcC)i{Z(%V()Y-S2!OY5L#Zo?)9g|--;Pb4taMx`|@m7F@r(6 zIP*;YS6U4DiwfTypJ3XQ)bLR6K^LpT&&PZZ&h6)D_;fsdxAg_JE6fTUJq)`Q1f?6S z6hzq-UiRMQ=X|={K~%xv!NKyxNwx>fdRYZr*%BDoJ}`Y(2tFBHIC%rm(+r-jelF{r G5}E*M+jdg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_leg+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_l_leg+o.png new file mode 100644 index 0000000000000000000000000000000000000000..3603c6df8bc2fab5684a5541876ad27733cf189f GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tV? z#WAE}&f6)DT!$QZT$L;41!?Slo@lG#(8sy*-e=x1O;r7=hd>_5p zLKOEgZOQeO&njRv5oLPtfH94s)$+xz>G%KN?p(lJ8RvBQ&hh=vwW_7Km`*Sz3E!() z$#5eo%K2R5i325yE^oiNuTo;p>S9WGeX;Q*4Xw$&)j>TUwuhr>gU%fX=69=g+T6OtfrZwrF6^U_2BN?#S#<;kE?(IDxN$k+C8^1SXj0+s>OqF?NKUQ)g4kB^ohL;eA^htGAy z86u^RPbfNIWDw60*#1mJ`*ed>7Q-ev*%`77YyFKGPVIN#5^(QLZ}=9~`H!*Y`?tSc zyqV`4iPbje$FtGn%%4$n)4s9wG1^So4)78&qol`;+0Dk*& AcmMzZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..0000a1a5c62fc83a044f0aa903355cfe710c2657 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQFR z#WAE}&f95*T!$P4T+=jC z+9}IUehNNw`p?XpXPz8SWMDIpWSD=Z?E%-?m=PRs3p7}!4SXUJbQ+dCqJn`s@;vkacDelF{r5}E+r0(1%h literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..4934a7a277251ae8088ae72bffb47b03d21a75d7 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQpd z#WAE}&fBTBT!$P4TGbOoZM->Ha*hUblr>c_@IPX7*&uAwdV{NR!seDO*=ePRHr+bY z*TeC7mQL`KTI+i2M)}hWJO>#5Ngb%|NR48+SF`tKZ{x4J=51?b#g#0XPhS=LwXfM` zev`{ehMP}o3OE#}uHbz6ZN@)`HAX7TQ=T&U9se7>CUf1I|0>KA0s}*C)ciYbD$aPo z_-x;q#XGnf4jcBoIzO#KIBfGy4kwldUysEdO9R*s2whMKFkZ#b-6Ea#qy;P}zKTDZ|NS_gMtM?vqpa?H!q3+BXa6Wd=`IKbLh*2~7YF CiG05R literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg+o.png new file mode 100644 index 0000000000000000000000000000000000000000..21887b6dec6760174dd6c15176f74478aa5b1c9d GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0s=! z#WAE}&fBSuT!$QZT$L;41!?RM^;g^>e1y3|fM21>`e1NJ^umCug&9qa8OI$JXXbq} zzdWh2^5@@~eu*ip4h$?XRKfHhdu|V7!|Strw|?{f+ILi@g`Gh!{PukFXl8{!n#JrZ zexLpsAoE~t@y~xt(%DLCC$Ji`zp7%4E%z>X;# z6j;J@lX21$1$A+Tw+@~Repam?jG31*L|iFVVvb**9L%tB&b2hNbb+sPS_*zkzhZcH a=m$eYNKjLim~AuAcMP7celF{r5}E*$@MjSK literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/durand_construction.rsi/durand_r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..2daa3d391941cfb7a6eaeb05d62b557e0974a0ad GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tt~ z#WAE}&f95@T!$QZT!TN@EDb2op667c-ogGsLC%4tylJ_>cBh43oECGkEjpK!X5<(6 z$^5cVM*P1&C030SQyJJ27}zFoAF#ci#lx^YDu3bb*hC2{aqfkz1>H~GzB2GOH1h;m zHr$=>|N9Yx{@l<17RyOa__{zx#qxql@r&Qx+pE{LYH>R3bMQIf{x+H+N7whj#|?{T z@5+;0^g?11v&K2cHCGreHBMrfQo{4Fn$3%G!iH>rwncWwPcr0Ku6tYJrtrv0Lg{p- w2D60pv59fd@qTKoLynRt#G)Pq2B_ZSe z&dxVIGdr``#*=L4{yN|HopbL!Gi{bRT3dUoXZzRwnrfO0&YT2*JbiaYQmK^oCnqPR ze7WS!MZ~NGFzRdTc8dIYTnd8&Iu0=yYdhOpo1cY{KtMF5Q6S9wB>GD|&{Y%SEOn!x zV-yD=QQsu&X1iePOE1g*1D{Bz1Gj1A{8|^axMCOeFXbd4-f4`SHP9dAgvT$ZnoAJhKkC$>mBotEDG`=Kb~$Sp@`3oyWm zt@R@0;q@CNm&?iS?>#9Ni|T_hSfx_YF{FR@{Y~2b_Vg)n|eX{D_ z)gckE?XSHqAAGo1ve~S>y$T~)iL0CI$G0d3{Vd*tH9OR``=tM>Exye{G`AaL{v!>x%L zNF0Xx1GBAlp>jY#CJZPa_)}B3JCJ%xe4!u=UKhW*0$e7DTmyp$mSl?!uGm|Ey@?|S5J2MI@r7S{+~0xFoD<=}pS~19?8IBZl8nQ1@ZcA< zF}DpiD!bN2o%jXB)EA2vYJwdmu%c^YKgpIYTN<>BLlc3sJ-tc9%nW^^SW#>EO*k_0 zs}Z!6{lt$?W{;#GgpU<*Qvm=k4xRTHffb`!z_@>a>IC>cBO^0eWIrzbu>vT*r&6|LGQ3 za(?%-68a~+VI8nH#rh|SXpRC{2e#=1@+1+KoO2)q4g=yk>-#S?J#btln`I9G0000< KMNUMnLSTY==u4#l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax1.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax1.png new file mode 100644 index 0000000000000000000000000000000000000000..064c5734875680d10577702f47e0209d61209151 GIT binary patch literal 1242 zcmV<01SR{4P)L{_ZqtWW~sC&nfcBP1%)g~eh*r)rpr!8${%kuDlBG(s|UT#)De z&b;sSyf^O+w(%s>cmK}!edpYJ&wFi^C0b`!%Cr5ee_d-?3eJ)QfIM?&R?_LT_UGp2 zq;j$BEk(ql1TgBW>vxL$c~XiK<2nv880$PcRG(jjkU&5*rBNWv`y~2HKhRef;w*i= zsACidAyMBX>{h#A+e69HtM5ay_s0T4@=Z-g|QmM$7C%@4C6OTVBnM_883h#%aj3c)kp)J4w zC$=?;kcT&HlzcufyT9|KR4S`cX9yNsUx zTAq7$tImO}f8!>d=UQ$nFn|S22p~u37SPtLxmzw=_*s@MOKHDQDCi>I0s=>$Fx;A` zfy7~`KQKE}%asEHLK&bPJNBtQAp*8?0<0n1~+7lB$ zXnVzqTXikS+^=4ku3ZT*$Mh2&FHQvtb+805XTkGOs+7~>ik zM6e`VY;eWi0_;s3Ie-8X_l__AI^h0}hvu9J5B~I}2x2GR0+wVPp5ft7>SJyjY*cow zi#qWOh^a4?&esK}>SrOkHujTj_3BkYyEJ(vaJHv6iI|z8PZTR^O}`1Jr++tsR z@yYCw6ol}xB5o)E;HAlP9wV?~Gz%E_4^V>u-)DMyA&czCr9V~xMOYFD!ZW|_UbGXV z0SVV2dJ-lHP847b6_L?!OPU$hK!o4+E?xSq=_h(q0oYSZo|HzKKj(1^@N+&*|6xfK z0CK!y`S!Ez8yQ~N5x+zcO)~%xR4-Wcll%Yjixq(A`9fI?u{G=GV|oAS7FcqA_p=iE zC%kDLus6l}Cy8i{0$2yO=>+m55tf{DAOsEr;yUa5FY%&k*`9auNdN!<07*qoM6N<$ Ef{heEga7~l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax10.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax10.png new file mode 100644 index 0000000000000000000000000000000000000000..98f3307ae3c16beb667e6d91cc33a2ea4dde1759 GIT binary patch literal 1386 zcmV-w1(o`VP)8{1;y3Jr?IDAn3T zebkuRqN(`Q?t?!sw2=5_kf&m!R*jLw#;A#{Ehe=#HUh0-v8LiK5hG|wiGV=Btr~%4H0DMEkx7|0Y-r1L!G;*X1PM0+80blr%YKUl3}Xh2 zlFGIZ?2k(-m6Fcaj%$DCqmM~lU7ftq)9qPh5V(!uNdXib*yAGs;0KzwOMQL496Ikv zB9TxV=pai=ORAgSc0dlr3bg(8*)xGFx4}IGo_}tiy!G}G*?iX)4+%*73olCVn};PD zjmj&Vp@~Y6MCFR4)1u(Cu~SRm#PSfJ;^GhA>${?&!Zn7Yty}6PnM_I~5^(|1hxm1v z3mXE{7kv}UC2+o=O!Kv^@jm%>;2UL%eA-b+o24x;FKc*9N=oFbGpD8fY_X2@HlLQ3 z?GNfW=Q6GE0blS50>l7jL>9btVAG~M<Gy2|P5Iw&0-ogS7?eZC}pyKYj4 z07oAy2l$TGM|94q{*$tIcSt6Br{w}7X6D+qc65R9@~baN+tl>cLIk;N6lTDA=IPz? z!H4f_j?T@Q0@P$yP&ng;thZT{pcU^_<;hH_P5Y>+eo|ug#KP6NwM}c}pe#yLQJLI7 zazWr5;Fq)D9s(4G3S|^;Dw01w;=sjT80f%ypex~kjIAtAiGMU4IKpFoR3tPlj6V!_5ppf46lel@r}jO zzRwhpBZt+XZ`WFVLs0clU{D=V*-#zPhVZM%G0wGp*uFs`Fa>qDM?7a1hNx(^*d+QJ z2BdYcaRoRkCLRc@q2Kok0$_*%d}#PlA^7O%s0(hd7~l=J^_zak)o~64Bv_Jd-@q~{ z@DjkzL~eq>;RsIb8xM=q;Lok*cfd1dNI0;kElJRK&Qkyocub6!3fJ%R!dHZ}>C;6MT>$$Ezy8Fp7-lhG(ZpWQ$!2xM)>$HfI@AMc>c>WWIp z2{uS#WLU#mzx8gkC6@q%bFg|wioV(cY_54NM@8gnn38;gIUtd3I};PX!(5Ps*pCeWE(MeJyEeY4+H~OxwTv^Ag}`fD=?N zi2ur+PlD|HyFV`h{FC7a<^KTNV%x!2JfN5b62Ms|IPd+egxMXQw+`4R#kSA-bn;e0 sRxv*~jR2mDgbmIy0KyL!#Cf*ue}%M-FE7>L1ONa407*qoM6N<$f-BLO0RR91 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax11.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax11.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c5be80890663ce999ffb9328af656a1f43b15d GIT binary patch literal 1384 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax17.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax17.png new file mode 100644 index 0000000000000000000000000000000000000000..7c33b55f170ca0c8d35b9de84c5e9870e8545dda GIT binary patch literal 1406 zcmV-^1%djBP)+2*V}AWGoiP=nA+~*c zpEGl=_kHJ`vGu@k-}l~op65B|-uK))8MI5w&dDjhCWK_@z)mJ$m=h=ApS!UsCd4%N z18%b~CPswleyOlk296!Qm+I^5$?x~m($X^b{T2#Z0Pa4VPGm-FrkkTb|6VTlpS?P( zGJ(tlZN%kemE0B;9Z(#jmww#N0IapOm0o(Whd%tMog$G4`FuV~Pmhs_$@42Oze>Si zkj}n4#P25_e26M5E9w0Y&L>1Ed!?zVi98;U;z$tC)6+|DM^2L0?^PKP01zVzM1V0n z(Z%nE%pY0iAbaq=al@c+I6{MiLp%nKp21$_s|2*Sw{eRU;kU7|L0|M-;J!y5ew5qN z(o!DV$#QaXsJ8YF`sUlO`Tgnk4(@{?3*dU=&DX60q(cm8mJ9$0(M?WHF))MxNH;9o z{QNx6fk_6CJ&-#sj}n00h)r`(Q!|}D{Wx`Zce8^4!1nIlLuF-UR9IL@(P)$jMFgJF zhcQ?v6yg@XzyQ{rwRP0l*-8EV1N4(`OnqIJI#5${h}*`-Bb1q$r6xig2oRl~1rUp^ ztgNW$)6-*R0KOuzAEP%_*PGSb2G!WR1esS^lv~zXVq5=Z^q$+Z%wP$|ciY?8#y6tLc z$97zT#pMM{D~1gOD=I4DZ~nwPRdjLx40W_+(JdYSP?t&0eQ(WhQCeDB;`u*MPN{CS_4CFE&OL6A1%jjx}GQN(TAmIM{ zj`L1NN%nfZys5fch9Ql|kG346OP5FKh_G z*CRgj{0rP-ciTnirjzS_U7viM6x$*|J|n1E!ZkMr}Ct0|P$d3#^5OWzMMmw&ZvvgClI;zDx#? z@0xE#HZr@fy0)1bt{2mr9@$jcy+ z3pw7Oedam(@~d7|O2trKpL(*5KKuMrOXLtCSWX#p%m60p1Q3K4HoPHoc zEq6*K`phw-_&|wy>eZO1Umlg0S0EcH|F9$#0CL;~aWt>4{=tzu)pFhRdXG%x=NIsO z(!A0o6_GLnxC>%U3kveo1v6DNQUf3Y#K;2nLn?C=01&DBI{~B;FBZo#{?}Kalgq(^ zXBg@MzKCR5fNy+`A{PH-A~Ng%x`RB66UdW^(8*;Cgus!2WS;K(AGz~xn+Yos?f?J) M07*qoM6N<$g2L&h)Bpeg literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax18.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax18.png new file mode 100644 index 0000000000000000000000000000000000000000..1411d88dca3c6da6e18ed32a604de4ab497a5f0c GIT binary patch literal 1428 zcmV;F1#9|=P)f+kbP-miVAYO-84Hp$8c^M!%DUDXw{Pf77cp??8N;gM;@w0T+ zJ9lH!%mgyyRpZ>;2ZFGH6c!ZoGbd-S>Ep`Pf%ObP>g((2tvB1~^Di37@As3-<)Zj_ z!x=}SNGvQY@%Wv$-zBftOXohl#P7$CJx#^M#njr`Zt99ityEW6Q(9V@=_8ClTU$GQ z>_0*M?tU`^0szMu8EG5=*6fb1U32kI*ST}Y&$jpO1!-x?Pdz=Ccnv<+R3l}bi z0l|4zRyuwELpSf^=;#=gl|9Hr0Hh1HZF+i|bs(r8t_daG-9JVp%LGCd8+^37hEAP& zky=_>=(o`k20#sf$gW*Gsi2^Mva_=(5D2hCA%QXGum+i$nqnK+3dTca<o z^s8&g{JJcCptSS=KdY(^Q(|J0si?q$aDeFaEWokI{QSHbeSEyp24IT@g}?+GPvBZI zAmZ`-ZjP6h7Ws+K2~QN_o;{gVQc_}O!QpVQjvoE^_&D9Zy>5#dFt85L*qF!S!$QEZ z(_tYZseh^GZ|XR4KhFdB?%n^mK&7ZeFelY7V%Qp6k)EDuW&yrbcEU3NrXJ6F^fNPm z#+@$@?`Ci^<8xAO-m;;mjivcO&X=!uLpyd@1{i40XL*V-3J8*ulS7w(xvIPgz^-W$mbBK`Ox zbb%vOcWb-qlI=#b!W;z7MIT#ucF+-Qt_?7zU`HfSRdtXn87;ZLzh4#AL29n;RVx8r zKT>;?t`1(I!|D*iIe>k|7$T>ltcfnRqgnN^CmwIGVP|7|tpuPT%=L)RzWxS3QQdYD zy6DbzyXLRHjEZd`AfFLf$~%<%`hMY}+qW-|Zn}r95f}7^-jmEZ5PZ0zk~%s%`D}=W z9Y&z5t1GUirY7h?sVe!oub11e-MN0wU!Q6SS-ULr&;^NGw|tBNEEKX}!&evq$k5PG zoSgroa_Dmjv1O+G!?3=fY4?ZIq` z0QU9d$rpHx(+>{N%OgdGIkgtd-J7RQy;61hWl&*Z5q{Bz?Hq;la7BVl+!Ve{JC z^E>Z*9-jMNknFeJ-RC~fbAIPM=Q-y*=UVhXke-od*Z6&upP9?%BCWo`}n6bbh)yK%3FKwo@?WC%FV~m27I)oz~2Ad zR=t>W=tzPP1myRs#*4JV_b8E43^Y$JqJWyqUu?0Axz|({et)mlp^UZC6ga(rZVPVg{C$AkDA=BprN_gxm{!mXpAO1T{X9xLo-Lu$o-n~6pfoT+8;eWa zwJf#wPc3W0tD|IX9$B#~A-M?-Bm|d<&B-xd$Gw-gc2jXS(dd#H+P3or>IgJBr^L9e zNv)00BwgXXfRADcr#5v!x79su(dqCgTZA}(H*jJTNB_P}FE72H>Pm}f_qS6t_NF>n zw1cd@TU??J6`dKhbDh{nr5r8hy}SfQ@IH!_may#taW?l z1mHv*hz{sP8e4B2Kg$uTf=+^uH{edssbGsIyG`|BH(-}$#u

t{*2RJvtTdcH#2s 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 UTogv;!~g&Q07*qoM6N<$f*D975dZ)H literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax3.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax3.png new file mode 100644 index 0000000000000000000000000000000000000000..cca6b2de54f7e26970716db1c508c173b4c1cc73 GIT binary patch literal 1363 zcmV-Z1+4msP)uAo{j*D?Yx?hNBI6S9m()&_ zz3~<&;Y<@mf029JibRY>X8Y7fa!J!hOzhI1RW@7{T2pRaeWdO>_4noHDuK%6OdBzb<#r*47{CMxw*nYQI^JON;D1<47ix z(HQt(`Fvh|DF5C>mA1b-aXfJ4Hn@kt3(xP6x86P^Ywud;Apz@t@g;fV&4Ut;$K}9eu1(G5nT_3K(Bo6Slr7IOj7hxvV&ix>hk z7jqNKC2*#yUiWK5+kJAn_j_fE{j{r4FiV@6nbGpr*4E0m$G_3Hq`mrjNtkxW<_C0~ zbGfa^fn3N50>l7jOs2d#ux8Dja_-zOvUF)!`>9k)UlqP3Ow1?1PyKsEBvce5zu}ad z92$?D4dG>q0Ro;1Fv;P=pQsZgU@KPK>T1KU*&(?j7MIb{G3`INrBf2e(i(?$fB%o_ zZ)#eua{*?48b3KT?&c(hVv+#F=H{m5&c1znWcTjZJuIL6A}>AL>NFw1k4<0I;G_Y6 zsB^2%Ihy|3-Ht6XrgQCBySl)5<+YckYjkW*h+r3u!wfi2KlO}!_|XTtN2e|s0ctlZ z2#vcXOW;qasCY-yUiA~lDBjfE7OZYxB70=o5UZDsgFgsz1N>qM+(UrIQb9(!|2ROf z=H_Mvo}QkMi$1dr_Nwf;X4MYc{&AK*lQ~-?94?*(|6C6NULaPj zTIu>SgX3O3Xn1REqXIG|;1S${X$QqBOvIaoa_#avwh zF$-SHp@>`!x1^F`4oH;R&V>uVSG=B=CE!1h+=5E~e3ZrK=8*O zdqO_@{8RPW?S-tPW0NN?VcP!FUy%Uc1|)%c!TeY5N){C7Km8R6;6E9DQ2r0FZFU@T zB?H7PkO1Cgg7e-_B`lrriaKDwDRz7*r&Cc0sbYR`1_8Vr2^*Ya07M=xi1X~&{{R9l VlVhAU3s?XE002ovPDHLkV1fiejLHB2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax4.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax4.png new file mode 100644 index 0000000000000000000000000000000000000000..cd98f134f5d241ea0da87e09763fded8b46c10ff GIT binary patch literal 1375 zcmV-l1)%zgP)Y-X-q@4g|^wc5S#0K zXZO3EdwX|_J<0aYoSAdJZ_dp9?zBu6X*IRgj@_TUJXNxoJc}X#@WxeP357!1pO~1C z^!b#t7!ub^;Df50oLK2qZBMS>A@bKzN%Z$=A7tRGIlWJ-vUhfgbWHz!O=MgG{*u~> zQa9e}M4f4Z=r43%OOA-K&}>3|Bo{Mn#Dp*XSz;5njnyi%!MDEfqI~#Kw=|pNC~NF| zN(c_S*Q{F1YE8Ly^`Xk^)St-ARRWbsn>Jz?%k4r8F@OmYZUr#Vm9CNP76}AK4Hzw* zZ|~S1lXN;QUmg8Y`;R~Ngfuob%D%3>o>c~c+ZdiLfP({DeIx+zcfnD!su+%DY* z;~Ix{fB%o_udlDuxd1aijh~zvcXJX$F-ZVob4z`lvuDpP*}3yA56fqcWTa+UWN4=Mf0JWMGl#aV4i{ejdPVtV#z3L~9QM{?SEm+mMM0UxvAyy?D27eIb2KdE1 zxQ76ZrGkud|8am|4Gj${KBbi#RC+;DNtrf$vzb#WN+Tm9>W`U2N6AHnncFtcw;=mZ zRt5}HJhA^QAzvRFfNYh_iPb4>1Dx}*6`d!`9pu0{U~bCryb6@xP%fR@jDQ^2uK_(< zmgy4))q}u59iePcN3>!5Dsqf-?HqP)kOA_KE@Ce0$vVt6d-Gz(9hMZ081+*#a*CoJ{OZ5I7Pc ziGAatI3<2-H-Gy)V}^u-c*c?ha~FIIkOYZwczSw1&H2nW*sHSVnpHb&`^Q=OWb$l| zaCPo1_~&{E@B*=NUuwvC>+sA>C8e^CN_8;}I*1@m9Ii&;>d|MV9n zfd6FpLHR$xw%KvW6$=ovKmvG|3C?>zl`wz8i|T;=rr7cMoK8_Cq>A~$83gb`By4bw h0T6k(AkMR6{{tW;l&CnBP3Zst002ovPDHLkV1gMljKlx{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax5.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax5.png new file mode 100644 index 0000000000000000000000000000000000000000..a078a264c85ed5490f3803d492266c1a34945cb1 GIT binary patch literal 1381 zcmV-r1)BPaP)0(l-%aT@~>%odh;HUzfVYCf3NmI2EMX$2em2(Zmg8nnSXAIj7z{@Qae$i z;tnV3%n(F>p$8k%M2v-Q^r?^JVy2Cl@YG*Q6^$IEWe~WH;n@N>IMCuF0pP7$wn<%Go$NdBNIV|b z82Dhbv$N_$`S(ThwEg|rGl46&!94_Cd3l$-_x@qoaNkA`30T{!ugN>_9+F5TB5!Vh zCn7->k*hL4FAB~Wduy4SSRMj&T=?Z@eU_J(yTM4bX=9xv5(x>1!!98DFuxCT5kp|+ zVs2u&1kUG`=zeW(cu3Cm{-8{;pLP}I&C=%P=Cr&;MMd)6nQx`-Y@xJlT_I7^Zrb*U zj&m-z6*-U#IYEFJzzj>us{`xT-zyg{{wl@ArP}Z8?9^9Xp-zy1tyy!Ys|~*;hUA`bM8?L(wg2e$X4(IC zx5lB}-~W^PtEwt>F2KxB~yz0*8I56In{kqMXRyk7TGT2I@gZ1s|$=b-g;eH$Ho_g2zJ>x%z*R!b1%rJ zpM9cx)H7uSsL`w-f5I(U6o1UBr>AP}3sZBdpF)ZR3#Y-)0K~3XI*()=KScyD5 z_@f{W`U2N6AHn zncFtcw_yI?c^NQF@x=bKgnWHy0J2pQZTMgS=X`91c~czZz&T)U%J8BJ6y91WZM%$s z96qE0T{~Cn69(0Tz(5_LY*0tEVf-p`jC1WAc5aXe+=AM>!=85*flxHtY!cn|z0%y* zum~KAi64w==+C`~02pEb9~ypC2tG742aY5O~Gw8CqNC`Q?28j<2 zXj$tv-H*0pGk|aoR?kW?S8G7blGk!5B3HvL$z_-W5}CGh>CzuLujg3__zxtvAlE-1 znK6f3fS-wR^zvaHyd?<`{OPBjk*|(^sXn{Clr=SN@x(<<+kg6V65!i_Bv3Dy|H_@q zg5vzAKPLhFC&LfQ{{gnmjzg|kfS3gmz`IOv-utP9nG>E<2kbY+j?d(Daw;KJ%n!~W nfM+9NgL4dk$ioG3o*nxiT1t~vehLdX00000NkvXXu0mjfqcM$2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax6.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax6.png new file mode 100644 index 0000000000000000000000000000000000000000..fad94386f0e28b838afd53c651f7d1baaf3942a3 GIT binary patch literal 1384 zcmV-u1(*7XP)IHXZIc)d_sXa2q+GA;psNNq=n zirbxfXNDm9gzs-m6EPCL-m5y2i4FV0fC&RYHMrdQ0GC?H|b(_@H)ye*gj>O|} zwSf*YJ3Fg7gnxg1p0>X`cQ$b4Hn@kt%P;MgciufJ8}8lcApvQ7ZE zXrdA%QCX1rc~NlM*r}y&VtEKqap~uu^j%(F?i$09xnT#*cIo{}S`-MsB# z9p_x86+Yk#K0$yOz>G-BTL;#!zeg@#{zXbkLfY@_?9`*eQ$ojlSAJb03vGoW$5MJ~ z{DNI>e5gHqmW5U;1_*c}aQ@!~k$jQk$3ImiNI=%Cxx=juza|Fd?nqQdN5{1P$o3XF z@K(3m?(6$e+f`MSIu~H(QTyrCxa*S`ib(<}Hn&w(IvpMRq`m!shvhS0&PvzLRq7Dn zXJ)RcaqLXDJlgV@&Nv6rd)vg8XqeWcBzl(VCvDk<%5Y(xEo(SjCWtV=7*1F$FbEg|bg(46#yq zaNq}lZ-8ITfO`l~7%G%eypca_AV_s}wHBWp9T7QEkx-IK%7Ck`J)uQuWMoA3F|+Ad zauH$rw#D-;nEz*9`VCXOk$;Ae$AB)S`V zq@}lU2{(57K%wY=f7#l|~AJ)cOmH@$@dh%)c{EN?2XSbJ==H{&)yL!|1@BW+wcpBgY)eGXk za_5pDJOA#_NdW(3_(AzUz_!?S@D&RvW`P87mI=;#KPzEohv%#V_DQkrGd`W1m5^1; q4^AV1XCq;Qa}0p+!v%4kZTla`1(j4#|836z0000Wpc)oyD((_777Zy16bQI&G}rmg z?sq%)a(Ahm=WLyINklKzC z6}LK3XHI6OYox4V1V9qHuR;5e(AJRZl$_DU%pBN+r~k;aiQB?x71-cAo_k*2|KL5T zH_j2(*hoSM4!JjagNRwJ3Ae7k>&;cF?-&?yBOy_dq-n#3woDgnhyhHHa3g?$?qr$l zvPi%%YQQMTOndjPm?V=)>3HL?_P0IynAFzR%D(O{&nkn!Z46Hepy0p`9|-_I*tA*d z>gr_gIY;90xY|GmnV+9m9rnTAXr8veIejW{6>Jl(*kGDC_Uu;2{BNd+B94 z@Ya5bL?ZIqdT1gNBoVnHsgx)q6TPyvm`{j7ZS@rRnDGt;I3HJTOVPr4zC;wL{{@s3v zBzo)nq@}-M5jZL)9tf+U-}fQ{V2A;HX!ubf`0((s3vRC%;PtonntrLP;~WS`uq4~Q zfn`$QC4ilY+ysHc5uDgJ9u}wmUs}v>pJ&XFa9~eclA!ObrvOgi7@Mc3=aaO~q`_X5 zJ=d(-VcS2>(8uHF(}YXYd%-`~Lx2~EwQJY7y7m6=r&|QH|Mxy}zu`koeG`hP7_vJ!nfd0SM<{^^6pKwFcNMc`Zjp@FaDbIdY+Yl ze?u|_x&C})#vG;qkFjy|@?mYfB?%DxiN~Lm&%gLgb#{9xX>M-v*hNj-zx#6%;Awyp zR4<7C%AHGs?EJewCjtDE;Roga0NY~Q!B;Gxm<1BRStdB|{j7wU9iFoe*eAud&-iq5 uRzg-WKRAs5o{fYJ&M^SO4;RFFw(WoVp^yaRc0<+x00006!v literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax8.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax8.png new file mode 100644 index 0000000000000000000000000000000000000000..c0295667e8293e634d2f7c154c7ef3e57b1d6e9f GIT binary patch literal 1394 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_armor.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_armor.png new file mode 100644 index 0000000000000000000000000000000000000000..70c43bd960ef90a93996bc292aa3aeb9c912196c GIT binary patch literal 1312 zcmV+*1>gFKP)`MrZIvLGSX=LrO~>G zwOS|?1VMD+!i7HzK}2w2bm789i&!WKg{p}zY;3_=qb*4-x{z@q5vyYdZ8f2t2Bwgq z*Ylk>=k?B=_ufqXV0icUJLjIid&kiKz?!u^_PPEn_4Rg3e_`n&?VYdCh4a zKFr;ZXy@>tjJ@^c3Hoh(kj4&|?5V$(V)rHSivq9Qowu(&vL%|# zz4vj;CRd?#`;P|$0|WNxo+;_q*4<1KJO<_B1nS=Mi%&%|SZO;kTMEnv+lDPn=;FZE zyJ**uABEuCt$7){_ejZt2qy&j%+Oj^q$tFTV|lx&(i5E?^Ugl$gVP6O8<_F<&%cTp z75C?EP$ihaU57!gIECsnU6O|2Wi{EZ-T|A zM})v^?575i^bs3}cHYPBdec5|?auWy$$(7azNswNL@S852hfa$5;BVLO@To>Jh$fdqK^m}y+k2Z7z=@9W zS8D^&N;Icjz6{7V?jkmCi`ic~F;DMq>6b5{1xPGY3r|y7UXd{e044Vd_9pqYcz9p90&pMQEFn3%1G6$skw>nd}rU(Mgq&8B{Bw-)noDcmr^ zeaPC>h>w<|s!KW%t|eCErQIHIqx`xM1&~@#R(j~`{T~JoJp3q=l>#?{eQ3!=$p)nM z^H|zd46g6HM(mn5LK%=5x!{Y7*HCeGx=~`QG|E@)`@V>v|!Ryap*Z-F?}DbB@z?p}f>oLqq|& zUOBDc+gGK=*QM6)&J`?7>-%=$l3uT&{%B*&2l(Ks&_X<)Sw&+%oFz^DCJV$N$+U_i$D}rfiz>i4lSV z^5CsEre02Ikjsbnf`c<8v7ohO)<-Lu3shpAHad9IO+h(ZpdkD zM_B-2s9-8wgO7#VxTlu_bCcAqe_VJZZ=nRZl2SS`3+_BP*D|h;(p)uH6 z6YEneY5WlzN*{>$pydUXKcMcDKcXo$jU+XVZQ@TJTH2VnAPIvQOLh&A!UHLZ6iA?x zJ~-a*?wskF*_lO%$E!mY0{wFbtjkbLS7}_V0fTkYD7I+$G@4 z6K!<$+7;UQPK`?hto^I6>C)wklt?7#o36b?3G%f>SAtCS59I74mzJ@a%O!w2#-2X0 z*EQle1E{tpNtsNB;_QW zI=#ik#q`_2uk`t6hxHi9nwvh<<2;v_6&Sz*CIm2tYZtKX*s-0SJ^PbNN^)OyDwWcc zco#6R_X)$U@ft`JhV}<$X?T<7fB;tp*lynZNk1XN3sl|u(wewo((LSy$~EOmFE&r=EO>lhAIR&KElnagxxZcgw0 zeJvm9u}J@YT9}@q&hm1)r34OjOyyNV&Mr94be%>}ZUKMK&V|%~^+oFu`r*cP@~dQv zOE0KbJ$n^7w%mj0{al7rJEE#1{b%Z*GvCI*b7XW_V}l%AzDwYjet_Wvf>l&h(A|4? zXn#*!6`_o-6R^Q(I@i~o(M4%yW=8j`kIq$+z1S`RATs|oNhu{f*#H0_=>#Ga8F?6? z4+e7HZjxMLa~aOd0KS9vHdR2b=mO$82T=7;U=THkQ5~HO*g|-W=gRXyV#@$s0%C8+ zU3(UesA$rpi2nLCwG1}ok)vYb2U9h|^25#(0EHO9LBod%laG&&JLEEAkk?oDtM{Iz%4TQn literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_harness+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_harness+o.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6ad43d37391c5eb9b64b7a2f2c1aee00d18613 GIT binary patch literal 587 zcmV-R0<`^!P)JOSBt45=dqEE<2ed-{I^cxA04JOr z{RQfTzd{|T_Mp`sXhqT^yW-r0Xpn4E2U+u8JDX}GcGhYm={t1ayf=N{&zqT@ZH7AA z{{m=hZ#D4w`ts(olm8U}7JnVygtp62$*&SI#Y=Mxs}Pm|c=7(H2tbz%+P(S(g6Acc z12#wFz!o5cwg83EHaE6F(=<4ZoRIMB%p6FP1fjiM5H-sHW21iXdcCl7Z9q1gHDhSH zu2T$`e`ml&{zWq33;-_W+UhzS9PWdnD6rjwQRUmY3cN$H2qa$q&yU;iBLEh_LVdkn zP*oLVSvGSxMyrnDTm*LX3=~;wg+hUr*X?#gJaG=oODmK^v4DS^@_epU6FP*vaP<={ zpU;CGvjl)kd8ghQ-Le9?+#|&%CxQ?@J~I7G=7xNarvunraP%JF5KP<%1V(9$;#0wC z@}sdcSeRcVKORs1%}q!UZ_j4e_{v3NA=3{Zhro`B0kF>SwQOn`p)1)pI7IO@^D*|J zr-Zr}2H=K5cTB?Ow@z{sz1T$hameE@7y*(B?xXuB~(oTek<$XoU${nOGa|yhf!^!9o|F# za{wFwO8}i+9vz>BkD^N?-xL5AFN}qu^EO)b>qHFk>KxrHged@CeE2O6&?kfTr2c~7 zd5PtK&Cxip2?$GDfWm0u?H$lG4bI}HB)l-c2$Cd0bbk-5nrVQEz$AFRUWnZ3kjv$a z7+R@Rq8PS6GU6it>iW_i0Bq&v#ugkN9e|=JuseWJ<SH(;fo(kl6}Gf;xlHYKyWNnwynwaUb;_YwaB_s*?o^M1-S^pa1s!<<~hWE#l(dHI0Wy6sCZKV%?jHBV23#X4uAvj Y4V&vA!W8>|HUIzs07*qoM6N<$f}_X(g#Z8m literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_head+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_head+o.png new file mode 100644 index 0000000000000000000000000000000000000000..2f84e0bf96073a8b8e42a648881284a990920f35 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7ehi z#WAE}&f80lT+IdotQRzIgdUu-)A=h$QvTJ+U(9SB#7*TKZJPwPTuAk_Zfv;S^XS!i zE#vN=`ihd8r{@&!fAjoh?S(gij4FF}OgVC9Vfnd0`;xe34>pe6dssqX|~$0 zKBMy~-l=Gbyg1MRAo$N6Fnx3Ex62mtix^dGyw@K&v(Efj!1e8Ayh;)Z4}&X}rR0{( z@14!*mbPjiyK)nwkb>hJalMeP`%#B9Pw`e9`Tk|v-Ryl2 ir#*;es1||Pz)-_bsJdYzkjqls?{{}#YXvC%5GTpUqxe6!# zu~7x907}{H40XHDlt?7`{FS-P7%DZJHyi;WB@Gatj8mm@NagYoR{~EV3h+93i|rrm zg{v!hy1Kp;*@6aul4SV}08GL7V@&PNJt2w%KVQ!Pj5=UwI)Gn*??1ZO#}A(v>EZyG<%tPN z4D%PvW3Vu{WO(=P9mB2LH~*942(m%|Wch?!{0s$1j!;uo2Ri~JPl`jxasbFunB|F> zjv&b_vK)|_lFl%D&P)b9U40ZsfB>n{K$ZhQmV>~h%NN14fPes)21m_=2_%_CvI9Uq z1SLc(OIwCx#}9);p?^XjN+{6O0WhGgt;KNl>NN%)9zHN1=yUpHLl{`KY7LkMIf4>E zmIF9AIT)In>KW?l8o?m}iVC_q;N|mIjOCSO|6`-$85S>HNOmbmwgX^*(%>iC0iay) zlu$zbZ2=058wejfCumZHvwd_ zX^FVs#ShK_U|udgsXPb*DTFWzaTNf6{kvL9vZR|%0I~K`r|+MsTL751Tb+}=BZM^B z3yA=_c@#x#ZoCmM0-T$NVMrgJLpQeo=9zSkg!oeHeY~|&`$Pb!SSqA-5e!w)`T!`HeP8w8L73NI{|=T*z5LH{yumk8%msn{P@^1P6W`+5h0$0f49Ki j9N?$-+?)+zZW`hMJ)5h|tQrIt00000NkvXXu0mjf9yyb* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_leg.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd0576f9e1bd76f27078418b0458583356bc3ad GIT binary patch literal 404 zcmV;F0c-w=P)D3nQew#m|oPzMr3;pOa%ZwhSNx$N-E13Xge? zF^-Z4>i`gceR&gp5Co(cMgZ9L@85=-#4yeP#(J&6{KcG8j)4pS@sIZB$r=TM1fYtC zVJO9!l?y literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..e76face7962374eb48ef690b00778f0ef7407664 GIT binary patch literal 393 zcmV;40e1e0P)HxYpfM0;`Kf2h*51$z6;sB84YO3lCLPA0e zCr%z`NK8m#n7?2iSRCXCnmGXGYjn#e+~Q{_fI0#MXc_|8e2#26O&tIV-dneCfr(V>Hp n(Igvnz^DU89Wd&ELG1tl=^2)HvIAPj00000NkvXXu0mjfY~_=A literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/gygax_construction.rsi/gygax_r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..98137c1e50262b70609a847ad8c37493940bbd8e GIT binary patch literal 396 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 N002ovPDHLkV1m~4>H+`& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii1.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii1.png new file mode 100644 index 0000000000000000000000000000000000000000..11927eabe5ec718fe096cb33782cb8dfb6556089 GIT binary patch literal 1371 zcmV-h1*H0kP)hmNHmSLL0h5^ zYGiAXy4r-GKHyd#{K3@Ph(8a?%7Yrw>RPnz0%}ZKn|urd3n zQCs*s=?J{EwB)fQ0BLDy;jy^5n8(J(Mh1c`E-qR|NKsKCk25m~R~zx|=;+`v9*^_b z+S=-5z`TG&po4)5-_3M3I%)#{#|SQgp@RWg6I<~`A%bZa2Lq@c4tB9uhv1nQuonj= zz=A6S=!sg;?1`WPRC4Y+ zaKnb{Xw#+=HWZo?mzHQ^@)ymVNG$%V1q6ZZ$toYq8G!ayS8t=KsTf_j@Vn;v8X`Ch zbX`Mb(P)$nx8Jsdjz^Bt{@_#O_2yFR%P+BhaA<`J2imCRx#wwNAxUka*V*>lQ{OO- z&*#&?lnTn&hymTgfK)#?c$z1nixB`&u~araJx#f}xvbC4&C$WCd}^>2>p>rgmv@^nf6@1>><4+YIpNK_`3fjRaf0YgF^#UyX$UVi*y|| z=5$-`zxvUX&M@%%`}-~UoB$Rv0s5PonpDrnS=Z;Zva&L+1RL$a`n~FWxSsnjY=|H@ z_CY-U8-4uA5n~UHjg1Kwj~h2$OWobw20k-@#b7W#-YYi1uD#jD|GOaSs`DAkT9g3XklpKk=O-E|l1eJ6T(lr^(`Cj2!eFfuY? z=m13kjK^;5rP`rwMoZoSE8(i-Kvt(yy)9C0q-e9rV6qS}1^Zfqclj^*GL%(QZ##bvvlm@%;8XZ_!!=w&sLa^L0%Cl_>|N6jgu$P%As#t#ZsM8%=ENzUkOn*FU5GLsm^d zdMKkDy{n1X*nQWPfE=ZuPiS0k0(M_uy0yWPfCPW+(Z{)WBKO{N-!+Ql^i7$Q^UX!)0`PPVlFibZhx$s1wz d#arcO|1YT_b5x=T?~woi002ovPDHLkV1oN!nl=Cc literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii10.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii10.png new file mode 100644 index 0000000000000000000000000000000000000000..6a17b5d6bd78a1cf13142ca92660829619b483b4 GIT binary patch literal 1558 zcmV+x2I={UP)MNTUNa`zY}DG>V(l!FFxSu8?~R@fmE4 zK5Esvul3jh_xJZZOaveW1qHmu$H()!V#Nvug7o(GnpOmFI~Pl|_6)_9j-vowvDt|4 zwr$&Z_51z278VxTD_}eT5$LEuQsTpOyt&B$ex29YST`Mv{fp`bBIu(jZVGf>(a*$I ze36J?TE$iYWDf_cShL%E?h-ATbT8|#wVtQ^FuRR4IaC5w2w8!xW89QusDKbb2FT=a z-65L!P!gRu*+ki%7%I)~qmIP^wm(yM2W6MUP>HvRZD1?eqyG|E5<{%z{g=%IQk-|1 z$}jT(85kJg_2kdTd7U^Rf~Y2f4t51gUR@JSG=WSu;scSa1zTd72-FQ+*GpyXS5Hr{ zq%V7x(P!RL`u%(#Jy_C93&y&5f6e+%`Xzge$wquaVM;6$ft=m|jUPXO;^HQ=A<6`% zFwSrN)kLJk+exH)PHONV=s$V;Og3kg&!&GPC?(p(7-;XDIdiG4%||&G&f5t<5F7@O zbt*eddUJEL0~gP{$L7=C^4+v5?+uEIiloB#-(!7k!yviqH&eko?^1Vn4{a{mNU;6> z(08=F>#`#;F;VO2P_uF&z}Sd!!Aby^5VAjd^e}Hi7b5`p{J-g$wYRrZWMm}kU0q$Y zHrYj+>xnL2Y*#itrYcBqU4t=M{T^4-%~$oo z+57!?va(Xg=L+C3 zFE5XZii#L4H#e7xi;G!bF693a9KJ2Hg7_YfhrC{| z(uuONvZ$=A>_!V_&z{Y}>=;c;8Kh;-OH`*GseD!bx88i41G!_y@eo3w zV-IH=KKvl~_^GS9PWcKxf(yP1uH!R-sHiBiitOcwspnhk3qJQsqNAgAo50XL00PD{ ztIy5wMv_54a=G;2X^Wm@ec%3SUggYae_IGNHa6-yKoJ1zp6S(;)-YEO zDgll5qasjMRi*a_0)5~9Z#8@mytLFqpYQbYzUUI@(b@z`PN=5(A7k{rQ1%MThOc7s zW9>8^Kz6w9(a^($nTcwWV;LYZA&D;#0mk#Ku4f7aI;rXh^`Mha--8W&9S#TUkI$R0 z9^(%68gJGxoVcEagkAxo@T*b{kkjd;rlu1-U_M_PO_>tU=d1Ga)qTHd=ws8Te+A=x zA!lJ>Vbt2{XJ24UojUmjwnc{hDn5JGN9)(GVIA-Dk`k}YX1Fh21kcX)=--yBSFal` zjGX|#tJUL^nYqN|i2py?`Z0}0U~42SzQ*r>VF{o|r^h~^B`XJ%6j`7GD6LF-sLZja zY&5a4`ZhRRG`;H&n_tKlNEL3Ugvx$c0;mFpN_r@(T)j6Fv9bEf^pA>w{PaTkq>Q&p z!0HRkP_45Okl?T6yvn^3dFJV7M@;~>MqglI2t$zwSpjjtKuHDw#LYI6T)ldgzWVx0 z9zqDJfT0vjtAr!~Loij2reC@0W*hcbu?TKIc_NIy3Nxhde>gppWd!UJfB*mh07*qo IM6N<$f;H0h0RR91 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii11.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii11.png new file mode 100644 index 0000000000000000000000000000000000000000..0f514a9223ae91e1b60b2b8a4b5a58da2a935e7b GIT binary patch literal 1561 zcmV+!2Il#RP)02{y&8bg6@cRjXWL zk#-g5pgs`NhyKtMEy_Nq$cJ*G*iG{fg0(dgk+n>v#ED?RW?}b=mXnmaTm=N=?fIR{ zd42y}1e<5Od(Qhj=lss^oaa2x`(7vAg~Z$+tzq>4+u`^>>!D;w0s;z2U;GM{9oT1@ zv&w*tzCIKgoxq3@BW$3NqatYW%S-4$`FHer@%-BL9rSDFNRy5Dgu;|qCIZ>rei}P=9L2>= zWJ8n*OktdN{x=hmQcnj_m{L^ZLGqw`dQ3Jg%4gH9aGDe4Vhn8W?Addvwbe`6moM1~ zKoA@Tkaa3Mbb3QWg98`Oyr&n?{<6KaI`?ggjEtbdk3V9)pst@{YBy8<`yWteXBTZQ z+DNed;pq3YGH}(An3$-wxBH1M`xzTCE?WuU5<>PTPafk*=wbu_ukQ~%v$nQ2iin6{ zJrD>`L6VC$*AiX1(xz;>OjVHJz!FS@uHiB=RUkb*o%;Lx>BNbj`8ng;8?@(n>4Pp4 zf%L_%()JzOf__TJ{A~ik5y646ab^%BIXRg$O{3=KbM`GjY0ApVSjS$0>4tfxY_NfGxiR)K6gqD-8Uani>;66Tl)SQ2wl}EVbv& ztPjj-)22=1OmNe^ma$CT4->Cx?oQi&;S% zspqS_} z+=LM5n8VtJPd^DBzYEGo`3gRQ3%&}j<1>NC$Vjq^%;klt^R4v+&%KhUs3_gWKX4C# zfN{<0b0_>E2|%_K1-Ij^+#GVbTzc@d)Mr^gR8`5NtQqa^34zn6PwP5B5dh=9sg;yg zH&+iT0gd*5@_6o~} zuVV7Cb{ZETJ6sQF*u#YBiK>%h86YuX245fojPtFoXY%_ysNzR;(8;UM!3Mq#hlBO` z^A@OM+^$~Z4H}vg*Rzn&D_|6URjLMZI-OKs-^dN-^|sQaN%6eCIyX<<_nQVjHof{+ zFy0rk78Vvp=g<4t7Z{T#PrQw7kwL$TTUxxde*Ie3@jfpt_1J6%`{G6L%uKibZMkO6 zy1~NO3GlmG9iNPhB_>Baf4=oI8jir$NLYN0-vNUXz#g3&{fL&N98gkZfeN6s(&?cx z$DFd!#K!7d=Wx-~z@Ik1kXs;CxR(+t`#}ky3TP_XLmB1jy_1NI)mOTISOny+7s@AP zyjucRUtosXIvW8A{zmqjymulmy|`%D1Ym3Q1s0kx6p4@(5C=4rWB@?iY(vTQ>(}Y) zZw_)3LQn-XrC?emBmo$Lsd6;^%T+hqp#O?RaQn%LF#0OYkiP!`wvLk8ae?Z)00000 LNkvXXu0mjfUoHdK literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii12.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii12.png new file mode 100644 index 0000000000000000000000000000000000000000..663d61978cab90bac94b60016fca4852c8473520 GIT binary patch literal 1553 zcmV+s2JZQZP)AoxAg0a_lw6wPR=CVz%Boc^ zu}Hg#b5I`$=|dJxkww`D1^G}e6}xHvL8!Jypt6>!lsNHf;by7#ik6d&xa$U6BspWR0wGF*eF``%3|7Ey@yu>pZ{zo?b}~Rfq$n`;>32gYh8AYoEwSH zU}N-AtJZb1J0x&lU!ToH08&&`#A{Mg60a*(tY9EWPfw3&Mex=OaYV&`QsTDp6rgJ% zHsZT^^JZTCem}3JrKO=2Fdl#ibW|YK^#q;pHXFci@fsKBq}D+{=z)%F`kB~@FA@<< ztAtbl*~7sq*6h3|BFL3`TWODy_r>$v0;`QRIaC5w2wQl;e#~& z@l-l_s+n@!u{8SBMcUaumhD$997DIRM^dGynQdSz*`xmwSQ105<$YJp1k&xJP34z) zfb{qG^LpyH6TBwGM-uIiqywG7lGpB!A&MuHjrc$$Yr&RSCIW~1Z|SA7_N%))SkgD$ z%jiqbHoADJmmaI^p?TvRyuYTTgMQB$W3mySaF`OyL?EvxKocg!Q)1#IHbj}g6vl<; z{xA`#^mGtKC`An(q!7BN*JN{6`E0lyN$D{T#z1>#&6-WEtv<@Td?}Ow1i@hdS*xrGo65@96KsDv_#-Xv zylQi~Tv~g3far37u@U34l>jawWPkMNA>M>8MgZ{n&+D1BwY5=HR21u-ot;#i=Ag1h zqAOS0lufs(3KASxf@#n-Tt=n}WMyU1z`y_!GW=UMi3(-BZD+eqtmC)gth>ssj8}C9lZk6bt!H7J+7vkuj&I0`)F3$ zlXSGHkun!N&u3M8cjy;R)~6S@CV4G{##9Qgeg=o1c%mfe+;0Oc~=(~vQ&C8h2|06hjTV@3D-EKE|JRYSJEm^XJ zcI?=3rv)=-&g9_ohEl;b>>WFHjHad!&@%f!bXYx7g{u6k-g}<|Ib+B35JI414`=H> z{UrGKT~I#CSMU*B@Ktafp9w@qN0U`#uP{PA-&$|*xmOYs6QkP%2JZn7FrHa`?uI`s z0m#PkU_0I^$R~%xp$E@g@Eq%P^|idpnbH2f5IBDPxUK^f0kH0#R!f;pv-O}7&}cs* z0yQ-?dVe6$>*{~d@ICOxQa63I-NXB$OQ5G3QYbB@mKuMF)%U{LE36QF6_X!pyYT?B z)$yQ)9;QrpsY#Aw09Q&XUmyaE=UZLR6bN)s&ClvVC!f9t8~EC6HrAh+Ggm#v?dmn| z)i9j6o`r;70i*D%QVo#ZZl~tvlRRKPUn@{%a`l&oPL@AJw^Pl(M>U%UvOljGLEEmyBzJ5-oZ0{pI4 zk56{?Vv{5O|9sPDG!lWWk+Aq0zXOIOfF7M0_lTCJ98gkZfeN6sGU?$m$DXp$#K!8| zWOLB8&c8zZ!nQ!Fa6ctn_Cpdt6);rNLs{kOy_<-Q)mNr}LAoxAg0a_lw6wPR=CVz%Boc^ zu}Hg#b5I`$=|dJxkww`D1^G}e6}xHvL8!Jypt6>!lsNHf;by7#ik6d&xa$U6BspWR0wGF*eF``%3|7Ey@yu>pZ{zo?b}~Rfq$n`;>32gYh8AYoEwSH zU}N-AtJZb1J0x&lU!ToH08&&`#A{Mg60a*(tY9EWPfw3&Mex=OaYV&`QsTDp6rgJ% zHsZT^^JZTCem}3JrKO=2Fdl#ibW|YK^#q;pHXFci@fsKBq}D+{=z)%F`kB~@FA@<< ztAtbl*~7sq*6h3|BFL3`TWODy_r>$v0;`QRIaC5w2wQl;e#~& z@l-l_s+n@!u{8SBMcUaumhD$997DIRM^dGynQdSz*`xmwSQ105<$YJp1k&xJP34z) zfb{qG^LpyH6TBwGM-uIiqywG7lGpB!A&MuHjrc$$Yr&RSCIW~1Z|SA7_N%))SkgD$ z%jiqbHoADJmmaI^p?TvRyuYTTgMQB$W3mySaF`OyL?EvxKocg!Q)1#IHbj}g6vl<; z{xA`#^mGtKC`An(q!7BN*JN{6`E0lyN$D{T#z1>#&6-WEtv<@Td?}Ow1i@hdS*xrGo65@96KsDv_#-Xv zylQi~Tv~g3far37u@U34l>jawWPkMNA>M>8MgZ{n&+D1BwY5=HR21u-ot;#i=Ag1h zqAOS0lufs(3KASxf@#n-Tt=n}WMyU1z`y_!GW=UMi3(-BZD+eqtmC)gth>ssj8}C9lZk6bt!H7J+7vkuj&I0`)F3$ zlXSGHkun!N&u3M8cjy;R)~6S@CV4G{##9Qgeg=o1c%mfe+;0Oc~=(~vQ&C8h2|06hjTV@3D-EKE|JRYSJEm^XJ zcI?=3rv)=-&g9_ohEl;b>>WFHjHad!&@%f!bXYx7g{u6k-g}<|Ib+B35JI414`=H> z{UrGKT~I#CSMU*B@Ktafp9w@qN0U`#uP{PA-&$|*xmOYs6QkP%2JZn7FrHa`?uI`s z0m#PkU_0I^$R~%xp$E@g@Eq%P^|idpnbH2f5IBDPxUK^f0kH0#R!f;pv-O}7&}cs* z0yQ-?dVe6$>*{~d@ICOxQa63I-NXB$OQ5G3QYbB@mKuMF)%U{LE36QF6_X!pyYT?B z)$yQ)9;QrpsY#Aw09Q&XUmyaE=UZLR6bN)s&ClvVC!f9t8~EC6HrAh+Ggm#v?dmn| z)i9j6o`r;70i*D%QVo#ZZl~tvlRRKPUn@{%a`l&oPL@AJw^Pl(M>U%UvOljGLEEmyBzJ5-oZ0{pI4 zk56{?Vv{5O|9sPDG!lWWk+Aq0zXOIOfF7M0_lTCJ98gkZfeN6sGU?$m$DXp$#K!8| zWOLB8&c8zZ!nQ!Fa6ctn_Cpdt6);rNLs{kOy_<-Q)mNr}LAoxAg0a_lw6wPR=CVz%Boc^ zu}Hg#b5I`$=|dJxkww`D1^G}e6}xHvL8!Jypt6>!lsNHf;by7#ik6d&xa$U6BspWR0wGF*eF``%3|7Ey@yu>pZ{zo?b}~Rfq$n`;>32gYh8AYoEwSH zU}N-AtJZb1J0x&lU!ToH08&&`#A{Mg60a*(tY9EWPfw3&Mex=OaYV&`QsTDp6rgJ% zHsZT^^JZTCem}3JrKO=2Fdl#ibW|YK^#q;pHXFci@fsKBq}D+{=z)%F`kB~@FA@<< ztAtbl*~7sq*6h3|BFL3`TWODy_r>$v0;`QRIaC5w2wQl;e#~& z@l-l_s+n@!u{8SBMcUaumhD$997DIRM^dGynQdSz*`xmwSQ105<$YJp1k&xJP34z) zfb{qG^LpyH6TBwGM-uIiqywG7lGpB!A&MuHjrc$$Yr&RSCIW~1Z|SA7_N%))SkgD$ z%jiqbHoADJmmaI^p?TvRyuYTTgMQB$W3mySaF`OyL?EvxKocg!Q)1#IHbj}g6vl<; z{xA`#^mGtKC`An(q!7BN*JN{6`E0lyN$D{T#z1>#&6-WEtv<@Td?}Ow1i@hdS*xrGo65@96KsDv_#-Xv zylQi~Tv~g3far37u@U34l>jawWPkMNA>M>8MgZ{n&+D1BwY5=HR21u-ot;#i=Ag1h zqAOS0lufs(3KASxf@#n-Tt=n}WMyU1z`y_!GW=UMi3(-BZD+eqtmC)gth>ssj8}C9lZk6bt!H7J+7vkuj&I0`)F3$ zlXSGHkun!N&u3M8cjy;R)~6S@CV4G{##9Qgeg=o1c%mfe+;0Oc~=(~vQ&C8h2|06hjTV@3D-EKE|JRYSJEm^XJ zcI?=3rv)=-&g9_ohEl;b>>WFHjHad!&@%f!bXYx7g{u6k-g}<|Ib+B35JI414`=H> z{UrGKT~I#CSMU*B@Ktafp9w@qN0U`#uP{PA-&$|*xmOYs6QkP%2JZn7FrHa`?uI`s z0m#PkU_0I^$R~%xp$E@g@Eq%P^|idpnbH2f5IBDPxUK^f0kH0#R!f;pv-O}7&}cs* z0yQ-?dVe6$>*{~d@ICOxQa63I-NXB$OQ5G3QYbB@mKuMF)%U{LE36QF6_X!pyYT?B z)$yQ)9;QrpsY#Aw09Q&XUmyaE=UZLR6bN)s&ClvVC!f9t8~EC6HrAh+Ggm#v?dmn| z)i9j6o`r;70i*D%QVo#ZZl~tvlRRKPUn@{%a`l&oPL@AJw^Pl(M>U%UvOljGLEEmyBzJ5-oZ0{pI4 zk56{?Vv{5O|9sPDG!lWWk+Aq0zXOIOfF7M0_lTCJ98gkZfeN6sGU?$m$DXp$#K!8| zWOLB8&c8zZ!nQ!Fa6ctn_Cpdt6);rNLs{kOy_<-Q)mNr}LP)#w$y5XqO=AUXOVk7# zX(Lcan~KE1E$SWR5X%{lj+z1M!7$GvX44P<3!YG~(X=UxA1-U&$^5K`dayG^wBtwz(B z6>%9gpUfHMKx%5Ljns2j8dW{JovvN`livph2I#SkW%T{fAZ2Cdm}KYXXLwFzfHiCG zrk<}(YD?E+Hp43`D=w1*Kx1Pgw|RMa+}73Afq@?{%H8t5YV4Q#>=pzH`eGhU}R=~IzMjsiNot>qLi3ueG-3t@r9EfmQ zVaos_fPxX_<>j^vz<9C@^!E0eft@0fwg%1ToP#1TXwN#T=g#t2EOvw2zGZ#Ky4*Cr9N)QyzR18hbioTQ0P6@gjBCu4fuW%xuALEj ztz0;GHa=QLCr_QAU4hrg<4L2Y_YQJ@|L9+oHQY*#Z|S7IA4sr z!?=x=0}wJsj~3CdU3(7}mllrvrXri3o~E?4H101fEYSXv3~C)Fx_Wh5mx-CO;Pd%3 ztd~$I#95FX63>E$!$@VoDf;SfuG8_SDNY(QIk2tjIr{XoPk0P{jNf!%wS{qT9Dax> zQ5KW~MMXunz200nt0lEM%T|D37DoaA*b8^3Oox3$|i0aR60X*l}} zAMmL(`U=;RrfG^8`&-{;G&eU-y+7(3ox*AiGSGFoT-?X?jBH%IG@;>c!0{|js0=v4 z?ba`t@r%5`!r|X3KR=JhcLf^s^S&kiu^Coh!PxgQmy(h~Q&SPv1xG=_I!b6K(Zu9r zm<}9xoBKE!j~ofwWD3k2^l1e*(xF9ln*W%>mR1 z>i`N!DWX6IkXl*kPLX3wm(fJVs%xzOEgks3;pl*Tgh&mgHJ*rxATm~6r|2CWF#dKS zeUe5Y-~IX?I`l!aW-SBsFeeUJbrbzJx~(K=Uw-Koen;&DIF6HLK;|K9)D=FgE7&kP zVatF~7z;`w0HNHBiLki1$SrP7EJ6TTz@h{%9_wzfIUoY?QdczndVdwD%Ed5O|eGfcX3^V2MY&J){KMDa*Zmx?nl>Gn#j7CD>qU9O7d~1c* znfko%9w*O#?(d6&S*nKbv9VE;EGhxna7LJ9=U01Pp;q5FDtP9-i7dywh-Rn@_7NSi z5%^IM+EQ0n7drtQLxBoZSy@T#?d?=jyn}u^cb0kK@GTy@mi12A>@>U_Ik|?p=pZ<3 zySuyD7YKzRhTaM-<}vK=@8{luu%SR59UV4YJlh{HqLZgi&>rub#NO@|4({lE0FEeabS|6Tc&0!;{5tHifz=Vg;p6ZlWV$1aD5wMglbm5W>xW!Z>bQ)JU*smAJAal6@(XET zFhHd{SM^VIoKU=oF24c#PxrBku6+gLy*J307JsuDFe5>oKsw!%0YrEZoyu3UPE=NNTu7Ni+G{ol_ zgc0z+{nk4i2-RT|f-naUvO}MIY_dVM@P**wUk|SQa{>;BgRCUH!oo*65a7evPEJl% zI?@_>nnea(*uWME#Ph#y0)X+^XP(n{^bD_4Qc_g#(w$H7{PY>WNd{e~)2UkUpAry< z*RK7=^EbS;^jT9gkKaA$r_#Y~%oiR=bYuC7nE+lp;|qoP=`%lS_#QBBCYej1$IiPb z-{q&kg;d289kfg4y00kzdQ3jncB4QDN63}yRxr9W*p01;bj@5Q8wC?Jk(f>hl z6ObOtC|7Sh5*@4U9VcM?+XeUpMsXhb*3+zz!VWS?z-qhJ|3zFrimk$Vpangbf9ar6@S=>h+#}33IU@sHk4EVhq&3|(c$HBg``%2k00000NkvXX Hu0mjf`k=I7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii17.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii17.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c545341cbc81c6dac73fc115f53aab19ce4027 GIT binary patch literal 1502 zcmV<41tI#0P)wJfu;oiHKg=*qSHZ%9k`J3;YGc#+a+o1S_I1OW9cFy*1)~#sW0HjgS;SZ{5|9h1N zo|%F&YJI(6Q~;5Yks(Htl9FiCrh6zkc?*AccXv~I+I=)Oeu?7a5)HC}xoKX5OzsXR z^DbY$LN{*wp-oOshB#hcUbYzm09962@|c>M%41bk6+7Fz*G1FQ)67dqNMIhw;fUvP zW+uSnwrvk6-NeL1Mk^uyZmO@ZXP)2h=drrFIurr@0s_Gt2yD-Mh<9ZsIG2tw2LiLR zvotg`q-3D$^ZBT}yjN1a?l0AIc&nVxgbLVkOcuy6b8|E0=k25) zyUsFiaq$+9?MtF#ZFai26zp8xT*@F|=yr5;uq_Za1|K4|nq?dI^z?AE_Kvs;NCnknQ>DJnLd(qocnn zyK;jD1kAg~==FMO^X4rmF3sovP3>%IYKo$wqIf<(KTij==$|3A+u;eAu}^m zL%ocQ3>(e}Jqii|{q7}|bpAyr3n^%H(GbA%&%H=re)R?OFb97%fRz!>VdLn-WH=-A zC~yF1J-{S;7`+bOk&Fq|E+eCZoaC-^XX%mb9O~=urGi~6@-3~W6fY>tcYyc_8=^~6 zQZ)S;A?;60OpqP$Cnu+goR6!>(7)h`meG&~oN}O-O7;jCQ#k(;4M}j0I`I1^sQKgx zzOZm#T)TFK!r5m8`uct$x7$rEEiEiiTwF|bb#*+4^OyIy=<5?6b_nBegdmW2Ns^cM zpftSqXntyL$KaIS$jFfhRV48jQb-+t>Ic7)xb z2tk;GhqWUge`L@>0m7EY<5Bj7b7h|ch>ngXGf7@f&ZF!IRgB(_iHT7%GBxsQmTQoO z4s;PfIQ#1c02rSsdRA2Q41dSQ#wzCpyPo3t=`&u#8e|;~hf2YJ3P2jXdUfRtf5ZJc zeOg<`<2Uzvsi6OH=1U$(%39g73;?&C{)WQ*^qC*D=)0l}#U$s_(PQT_C_BSTy%*vX zPs$)&axQFz*cU#zt?l{+Nob*r2Qw9nnHk$j(=-(b`di3QATUR5KZ`~upW;CVx;C4Q z=Xjn0!Qqi1P5(Z$ybJVXw~Gtr;xHGO&-Xi}rKK`|pSwbw_n!nGn?CglM$mFCA|isu z$Nj7e8|mp=X-z+CEsTx%=+L1mp5p*He%uoxv(}3j&dbVN>g+#o;QiYVprqslgCf3< zef}A3gdnRAIGnC!0N9yOU`VkG`J$1PZnbmp1pFFg@boGxD^ZwzT@)(1QbxXu#2C$ z8$tq*0*F#58vf;qlTDLXtrhk5Uf?5Gc7$FRU1g>74`8p2-}oX;Gynhq07*qoM6N<$ Ef>A}k@&Et; literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii18.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii18.png new file mode 100644 index 0000000000000000000000000000000000000000..9a99bfcc32ef19486043eabc16ed82a5c799afcd GIT binary patch literal 1508 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii7.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii7.png new file mode 100644 index 0000000000000000000000000000000000000000..3681585d8e77e58242116c0b596ff2dc9f2ccd44 GIT binary patch literal 1541 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 VHNA?#tCRo$002ovPDHLkV1kOc;dlT5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_harness+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_harness+o.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecc6d4edc11e8a42925a6236823f7f534df9072 GIT binary patch literal 3438 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 T=+izf00000NkvXXu0mjflf-G@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_l_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..a511f8f54289fc18fc29c5a1ebe2d6b9189a544e GIT binary patch literal 352 zcmV-m0iXVfP)kIyKI z)Y1?$fIQD95X440fa=G}NlFs{svWCVZy>UtK%1ledLEY62Y@!$^B@L*HQa2rwA<~) z25<%d!Tff+lB5_wSARYqIf?l3xGV8B48xFyVW6ftk(4F?w7;qbhdH~u9Xh!BWlvJ%*7c6N&SZ^oH*%T_iGpaK3Dz%UFxjrD!MQ3e1@l0=-2 zxZ*&0fQmi<<$#j} z&r^welQy0JeSp>3WSdH~9M-z*f7zX0=9_QUYj%#!5s21T0Iuu8uapYFt?zbva6BC#ai=2N@D>1*S1Sf+n#PhF)f!Mr zV-S%_b$}28=ko;$`4ag470P9ueV>?9SUL+~E~El@o)5M?WA`8kV80h%eI`J=-2%&+ zzr@?!Mh*bl8zrM?x325Vfyj3D9Pugsd-O}2EdaK`a{-t zu138n&jC!16OTj3t4A2zgi-)7IZk>s@$sJ!V_d_c0iLuDb>b3o3Z4J}002ovPDHLk FV1oaJj;8Z%TY9iU+zTz9KF7qUbSjKDSd;8nv?>B z5V%~fP{@}c2yRd=o9ui#nZe3k3aKCk;QIkM&YbPTFoeTF?)B0D?RE=nd-37#_FFXo zC~q8$qTHrwG6iDUSvz7YW?qE9HfaESeR7SWNDTm=0Vq9BfieIde9#}VymM>Ro9Yz6 z;8^ikbo})QgOgAR00zfOk1PKD6QYk}ICFqxi+#77%vUT7kcDXg4WI#DWz2qF1e?_8 P00000NkvXXu0mjf+}@I) literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm+o.png new file mode 100644 index 0000000000000000000000000000000000000000..0733c1cd5c4e4d9e500194ca43b94d716bf19ca5 GIT binary patch literal 367 zcmV-#0g(QQP)v`zr+9eAMe#R{J8!Dz_KiS*6O-$i2!ta9bC+p z+*eh__b7^*^{)e*PnT8@1Q>?lgRvNZE;5hfm{Sl8E}*1`&XF z<{|((Ze@>wHphHOmNt>+X(6L4J@5D_+;ZKH_+ zQ1nGna8K`o9)rj^K!)q}ij7C3K4e)2Hw{G+AamdMAxRR|19+YXX`1qy2!P`_Y_7MS zGDp(NvXlX^ZTqce07L-tJb(BCQm-@=0k}7QrT@oIsR1wm2EYJ(sw@6Qk!s?&@*n^J N002ovPDHLkV1g*&mz4kj literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..b3897f098573c59a834ef6230f7dbfd1c6b2bdcf GIT binary patch literal 380 zcmV-?0fYXDP)e*!Cs~~Y zNBswGoq~IyQzaC#wp|@=-hKEW>10ls=w2fA}v01NOx0UXES-&)(Y zlTiSsPmjD=Z*|`^jeaLdLTFtL@cs2OiK2+(IKIgk1~4V&X`1R3MomEGZ;VwET0`d# z0Z5r$4>1M^U?_74z{IW0d9`|_!{LLD$4?&ZH#{#fUo4ga0IvZbM6=n8HkPOBp%iXP z!1sM(X4>!H;Wc0YiN2~T-OIOtjsZFc#BjHJ)5i1pGZjTaop$vYpajG`3`5GYO!Y)T z5Kx}y$Wj=9=Xu)P>{gkxXmwqW1K_%DFUU7KS7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_leg+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_r_leg+o.png new file mode 100644 index 0000000000000000000000000000000000000000..0c75e70f8336280c9bf91b91129fb461a85035a1 GIT binary patch literal 382 zcmV-^0fGLBP)E4bzjH{f^D*o`3E0VNl@XvxOx9(-h>J7%ltDrpnsMI&;S}h184vZ zpaC?1bbwmj%J%c^`_8Bo0DAFWIrjQ@Kh`P%2*dE#wNe4l{&uTFlWD;D=b0@jvqE|Y zaQShgNrqwY`Sj$B;y9-D+bS!9kOqLSzwbZLv-d=%Y0_pBQO!D}<#J7qb5#1Ck{Q6| z-EN0$+va>Qc&rw{b+5?xgD?4LJX8w+fAjWdSV62G>_7*iC}LYG8^XUzIzW;n9EJZP zRt|vH3kx7@iPAOP2e>%DWZ#8uu5Wn=iy))}q-jd?#f*m#LKiTU0^+-r{0YTIh-b+2 c%d?{T4@|Bg{AU%gZxZ${HYV?{};J h&l)-a2k@r=J^(b`hJRp-b#4Fv002ovPDHLkV1jOtpE&>k literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit+o.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit+o.png new file mode 100644 index 0000000000000000000000000000000000000000..831e56c56578cef2eff33fd09e4734fad9cfcd2d GIT binary patch literal 2962 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 IM6N<$f=kzWt^fc4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit.png b/Resources/Textures/_Goobstation/Objects/Specific/Mech/ripleymkii_construction.rsi/ripleymkii_upgrade_kit.png new file mode 100644 index 0000000000000000000000000000000000000000..81fdea7e5b91b94cce01b8429b80bdb79398694b GIT binary patch literal 4020 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 Date: Sun, 19 Jan 2025 23:51:13 -0400 Subject: [PATCH 02/11] Fix build fail --- Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index d4593b50027..d391b138b3a 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Gravity; using Content.Shared.Hands; using Content.Shared.Hands.Components; +using Content.Shared.Item; using Content.Shared.Mech.Components; // Goobstation using Content.Shared.Popups; using Content.Shared.Projectiles; From 9910fcb9ac04c27952715a91b39cd7cc6b61f297 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:19:43 -0400 Subject: [PATCH 03/11] Load o' Fixes for IPCs and Mechs (#1235) --- Content.Server/Cloning/CloningSystem.cs | 11 +- Content.Server/Mech/Systems/MechSystem.cs | 2 - .../Components/PickRandomPersonComponent.cs | 2 + .../Systems/KillPersonConditionSystem.cs | 2 +- Content.Server/PowerCell/PowerCellSystem.cs | 4 +- .../Charge/Systems/SiliconChargeSystem.cs | 5 +- .../WeldingHealable/WeldingHealableSystem.cs | 25 +++- .../Equipment/EntitySystems/MechGunSystem.cs | 27 ++++- .../Temperature/KillOnOverheatComponent.cs | 16 +++ .../Temperature/KillOnOverheatSystem.cs | 33 ++++++ .../Mech/EntitySystems/SharedMechSystem.cs | 108 ++++++++++++++++-- Content.Shared/Mind/SharedMindSystem.cs | 24 ++-- .../Weapons/Melee/MeleeWeaponComponent.cs | 4 + .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 3 +- .../_Goobstation/CCVars/CCVars.Goob.cs | 17 +++ .../en-US/_Goobstation/power/silicons.ftl | 1 + .../Entities/Mobs/Player/silicon_base.yml | 26 ++++- .../Entities/Objects/Specific/Mech/mechs.yml | 1 + .../_EinsteinEngines/Damage/modifier_sets.yml | 7 ++ .../Specific/Mech/Weapons/Gun/industrial.yml | 2 +- .../Mech/Weapons/Melee/industrial.yml | 6 +- .../Recipes/Lathes/mech_parts.yml | 4 +- 22 files changed, 276 insertions(+), 54 deletions(-) create mode 100644 Content.Server/_Goobstation/Temperature/KillOnOverheatComponent.cs create mode 100644 Content.Server/_Goobstation/Temperature/KillOnOverheatSystem.cs create mode 100644 Content.Shared/_Goobstation/CCVars/CCVars.Goob.cs create mode 100644 Resources/Locale/en-US/_Goobstation/power/silicons.ftl create mode 100644 Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index c107bbab7d4..b5bd54e8d72 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -10,7 +10,7 @@ using Content.Server.Materials; using Content.Server.Popups; using Content.Server.Power.EntitySystems; -using Content.Server.Traits.Assorted; +using Content.Shared.Silicon.Components; // Goobstation using Content.Shared.Atmos; using Content.Shared.CCVar; using Content.Shared.Chemistry.Components; @@ -204,12 +204,9 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity(bodyToClone)) + return false; // Goobstation: Don't clone IPCs. // Yes, this can return true without making a body. If it returns true, we're making clone soup instead. if (CheckGeneticDamage(uid, bodyToClone, clonePod, out var geneticDamage, failChanceModifier)) diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs index b738d28b467..b7bbc4ad473 100644 --- a/Content.Server/Mech/Systems/MechSystem.cs +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -234,7 +234,6 @@ private void OnMechEntry(EntityUid uid, MechComponent component, MechEntryEvent TryInsert(uid, args.Args.User, component); _actionBlocker.UpdateCanMove(uid); - args.Handled = true; } @@ -244,7 +243,6 @@ private void OnMechExit(EntityUid uid, MechComponent component, MechExitEvent ar return; TryEject(uid, component); - args.Handled = true; } diff --git a/Content.Server/Objectives/Components/PickRandomPersonComponent.cs b/Content.Server/Objectives/Components/PickRandomPersonComponent.cs index 4188b1da3d2..7de6cb71468 100644 --- a/Content.Server/Objectives/Components/PickRandomPersonComponent.cs +++ b/Content.Server/Objectives/Components/PickRandomPersonComponent.cs @@ -8,4 +8,6 @@ namespace Content.Server.Objectives.Components; [RegisterComponent, Access(typeof(KillPersonConditionSystem))] public sealed partial class PickRandomPersonComponent : Component { + [DataField] + public bool NeedsOrganic; // Goobstation: Only pick non-silicon players. } diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index c1caa819e44..73ae7a94f83 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -54,7 +54,7 @@ private void OnPersonAssigned(EntityUid uid, PickRandomPersonComponent comp, ref return; // no other humans to kill - var allHumans = _mind.GetAliveHumansExcept(args.MindId); + var allHumans = _mind.GetAliveHumans(args.MindId, comp.NeedsOrganic); if (allHumans.Count == 0) { args.Cancelled = true; diff --git a/Content.Server/PowerCell/PowerCellSystem.cs b/Content.Server/PowerCell/PowerCellSystem.cs index f7b4cf02491..221a3909e26 100644 --- a/Content.Server/PowerCell/PowerCellSystem.cs +++ b/Content.Server/PowerCell/PowerCellSystem.cs @@ -228,8 +228,8 @@ private void OnCellEmpAttempt(EntityUid uid, PowerCellComponent component, EmpAt private void OnCellSlotExamined(EntityUid uid, PowerCellSlotComponent component, ExaminedEvent args) { - TryGetBatteryFromSlot(uid, out var battery); - OnBatteryExamined(uid, battery, args); + TryGetBatteryFromSlot(uid, out var batteryEnt, out var battery); // Goobstation + OnBatteryExamined(batteryEnt.GetValueOrDefault(uid), battery, args); // Goobstation } private void OnBatteryExamined(EntityUid uid, BatteryComponent? component, ExaminedEvent args) diff --git a/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs b/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs index 444b65530b2..b1fef0f1d3a 100644 --- a/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs +++ b/Content.Server/Silicon/Charge/Systems/SiliconChargeSystem.cs @@ -182,8 +182,9 @@ private float SiliconHeatEffects(EntityUid silicon, SiliconComponent siliconComp if (!_random.Prob(Math.Clamp(temperComp.CurrentTemperature / (upperThresh * 5), 0.001f, 0.9f))) return hotTempMulti; - _flammable.AdjustFireStacks(silicon, Math.Clamp(siliconComp.FireStackMultiplier, -10, 10), flamComp); - _flammable.Ignite(silicon, silicon, flamComp); + // Goobstation: Replaced by KillOnOverheatSystem + //_flammable.AdjustFireStacks(silicon, Math.Clamp(siliconComp.FireStackMultiplier, -10, 10), flamComp); + //_flammable.Ignite(silicon, silicon, flamComp); return hotTempMulti; } diff --git a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs index df7ac7ac0fd..5bbbf398310 100644 --- a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs +++ b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs @@ -6,7 +6,9 @@ using Content.Shared.Damage; using Content.Shared.Interaction; using Content.Shared.Popups; -using Content.Shared.Tools.Components; +using Content.Shared.Tools; +using Content.Shared._Shitmed.Targeting; +using Content.Shared.Body.Systems; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; namespace Content.Server.Silicon.WeldingHealable; @@ -17,7 +19,7 @@ public sealed class WeldingHealableSystem : SharedWeldingHealableSystem [Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - + [Dependency] private readonly SharedBodySystem _bodySystem = default!; public override void Initialize() { SubscribeLocalEvent(Repair); @@ -31,7 +33,7 @@ private void OnRepairFinished(EntityUid uid, WeldingHealableComponent healableCo || !TryComp(args.Used, out var component) || damageable.DamageContainerID is null || !component.DamageContainers.Contains(damageable.DamageContainerID) - || !HasDamage(damageable, component) + || !HasDamage((args.Target.Value, damageable), component, args.User) || !TryComp(args.Used, out var welder) || !TryComp(args.Used, out var solutionContainer)) return; @@ -70,7 +72,7 @@ private async void Repair(EntityUid uid, WeldingHealableComponent healableCompon || !EntityManager.TryGetComponent(args.Target, out DamageableComponent? damageable) || damageable.DamageContainerID is null || !component.DamageContainers.Contains(damageable.DamageContainerID) - || !HasDamage(damageable, component) + || !HasDamage((args.Target, damageable), component, args.User) || !_toolSystem.HasQuality(args.Used, component.QualityNeeded) || args.User == args.Target && !component.AllowSelfHeal) return; @@ -97,9 +99,20 @@ private bool HasDamage(DamageableComponent component, WeldingHealingComponent he return false; foreach (var type in healable.Damage.DamageDict) - if (component.Damage.DamageDict[type.Key].Value > 0) + if (damageable.Comp.Damage.DamageDict[type.Key].Value > 0) return true; + + // In case the healer is a humanoid entity with targeting, we run the check on the targeted parts. + if (!TryComp(user, out TargetingComponent? targeting)) + return false; + + var (targetType, targetSymmetry) = _bodySystem.ConvertTargetBodyPart(targeting.Target); + foreach (var part in _bodySystem.GetBodyChildrenOfType(damageable, targetType, symmetry: targetSymmetry)) + if (TryComp(part.Id, out var damageablePart)) + foreach (var type in healable.Damage.DamageDict) + if (damageablePart.Damage.DamageDict[type.Key].Value > 0) + return true; + return false; } } - diff --git a/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs b/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs index 5d23f2ebc5b..014204582c9 100644 --- a/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs +++ b/Content.Server/_Goobstation/Mech/Equipment/EntitySystems/MechGunSystem.cs @@ -2,26 +2,27 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Mech.Components; +using Content.Shared.Mech.EntitySystems; using Content.Shared.Mech.Equipment.Components; using Content.Shared.Throwing; -using Content.Shared.Weapons.Ranged.Systems; +using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Random; namespace Content.Server.Mech.Equipment.EntitySystems; public sealed class MechGunSystem : EntitySystem { - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly ThrowingSystem _throwing = default!; [Dependency] private readonly MechSystem _mech = default!; [Dependency] private readonly BatterySystem _battery = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(MechGunShot); + SubscribeLocalEvent(OnHandleMechEquipmentBattery); + SubscribeLocalEvent(OnCheckBattery); + SubscribeLocalEvent(OnCheckBattery); } - private void MechGunShot(EntityUid uid, MechEquipmentComponent component, ref GunShotEvent args) + private void OnHandleMechEquipmentBattery(EntityUid uid, MechEquipmentComponent component, HandleMechEquipmentBatteryEvent args) { if (!component.EquipmentOwner.HasValue) return; @@ -31,11 +32,22 @@ private void MechGunShot(EntityUid uid, MechEquipmentComponent component, ref Gu if (TryComp(uid, out var battery)) { + var ev = new CheckMechWeaponBatteryEvent(battery); + RaiseLocalEvent(uid, ref ev); + + if (ev.Cancelled) + return; + ChargeGunBattery(uid, battery); - return; } } + private void OnCheckBattery(EntityUid uid, BatteryAmmoProviderComponent component, CheckMechWeaponBatteryEvent args) + { + if (args.Battery.CurrentCharge > component.FireCost) + args.Cancelled = true; + } + private void ChargeGunBattery(EntityUid uid, BatteryComponent component) { if (!TryComp(uid, out var mechEquipment) || !mechEquipment.EquipmentOwner.HasValue) @@ -59,3 +71,6 @@ private void ChargeGunBattery(EntityUid uid, BatteryComponent component) _battery.SetCharge(uid, component.MaxCharge, component); } } + +[ByRefEvent] +public record struct CheckMechWeaponBatteryEvent(BatteryComponent Battery, bool Cancelled = false); \ No newline at end of file diff --git a/Content.Server/_Goobstation/Temperature/KillOnOverheatComponent.cs b/Content.Server/_Goobstation/Temperature/KillOnOverheatComponent.cs new file mode 100644 index 00000000000..fc4e6155395 --- /dev/null +++ b/Content.Server/_Goobstation/Temperature/KillOnOverheatComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Atmos; + +namespace Content.Server._Goobstation.Temperature; + +///

+/// Kills an entity when its temperature goes over a threshold. +/// +[RegisterComponent, Access(typeof(KillOnOverheatSystem))] +public sealed partial class KillOnOverheatComponent : Component +{ + [DataField] + public float OverheatThreshold = Atmospherics.T0C + 110f; + + [DataField] + public LocId OverheatPopup = "ipc-overheat-popup"; +} diff --git a/Content.Server/_Goobstation/Temperature/KillOnOverheatSystem.cs b/Content.Server/_Goobstation/Temperature/KillOnOverheatSystem.cs new file mode 100644 index 00000000000..9b32e344376 --- /dev/null +++ b/Content.Server/_Goobstation/Temperature/KillOnOverheatSystem.cs @@ -0,0 +1,33 @@ +using Content.Server.Temperature.Components; +using Content.Shared.IdentityManagement; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Popups; +using Content.Shared.Damage.Components; + +namespace Content.Server._Goobstation.Temperature; + +public sealed class KillOnOverheatSystem : EntitySystem +{ + [Dependency] private readonly MobStateSystem _mob = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var temp, out var mob)) + { + if (mob.CurrentState == MobState.Dead + || temp.CurrentTemperature < comp.OverheatThreshold + || HasComp(uid)) + continue; + + var msg = Loc.GetString(comp.OverheatPopup, ("name", Identity.Name(uid, EntityManager))); + _popup.PopupEntity(msg, uid, PopupType.LargeCaution); + _mob.ChangeMobState(uid, MobState.Dead, mob); + } + } +} diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index b1e0c00f6df..83acf1701d4 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -22,9 +22,15 @@ using Robust.Shared.Timing; // Goobstation Change -using Content.Shared.Emag.Components; +using Content.Shared.CCVar; +using Content.Shared._Goobstation.CCVar; using Content.Shared.Emag.Systems; using Content.Shared.Weapons.Ranged.Events; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Inventory.VirtualItem; +using Robust.Shared.Configuration; +using Content.Shared.Implants.Components; namespace Content.Shared.Mech.EntitySystems; @@ -44,7 +50,13 @@ public abstract class SharedMechSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; // Goobstation Change + [Dependency] private readonly SharedVirtualItemSystem _virtualItem = default!; // Goobstation Change + [Dependency] private readonly IConfigurationManager _config = default!; // Goobstation Change + // Goobstation: Local variable for checking if mech guns can be used out of them. + private bool _canUseMechGunOutside; + /// public override void Initialize() { @@ -61,6 +73,15 @@ public override void Initialize() SubscribeLocalEvent(OnGetMeleeWeapon); SubscribeLocalEvent(OnCanAttackFromContainer); SubscribeLocalEvent(OnAttackAttempt); + SubscribeLocalEvent(OnEntGotRemovedFromContainer); + SubscribeLocalEvent(OnShotAttempted); // Goobstation + Subs.CVar(_config, GoobCVars.MechGunOutsideMech, value => _canUseMechGunOutside = value, true); // Goobstation + } + + // GoobStation: Fixes scram implants or teleports locking the pilot out of being able to move. + private void OnEntGotRemovedFromContainer(EntityUid uid, MechPilotComponent component, EntGotRemovedFromContainerMessage args) + { + TryEject(component.Mech, pilot: uid); } private void OnToggleEquipmentAction(EntityUid uid, MechComponent component, MechToggleEquipmentEvent args) @@ -374,6 +395,7 @@ public bool TryInsert(EntityUid uid, EntityUid? toInsert, MechComponent? compone SetupUser(uid, toInsert.Value); _container.Insert(toInsert.Value, component.PilotSlot); UpdateAppearance(uid, component); + UpdateHands(toInsert.Value, uid, true); // Goobstation return true; } @@ -382,23 +404,71 @@ public bool TryInsert(EntityUid uid, EntityUid? toInsert, MechComponent? compone ///
/// /// + /// The pilot to eject /// Whether or not the pilot was ejected. - public bool TryEject(EntityUid uid, MechComponent? component = null) + public bool TryEject(EntityUid uid, MechComponent? component = null, EntityUid? pilot = null) { if (!Resolve(uid, ref component)) return false; - if (component.PilotSlot.ContainedEntity == null) - return false; + if (component.PilotSlot.ContainedEntity != null) + pilot = component.PilotSlot.ContainedEntity.Value; - var pilot = component.PilotSlot.ContainedEntity.Value; + if (pilot == null) + return false; - RemoveUser(uid, pilot); - _container.RemoveEntity(uid, pilot); + RemoveUser(uid, pilot.Value); + _container.RemoveEntity(uid, pilot.Value); UpdateAppearance(uid, component); + UpdateHands(pilot.Value, uid, false); // Goobstation return true; } + // Goobstation Change Start + private void UpdateHands(EntityUid uid, EntityUid mech, bool active) + { + if (!TryComp(uid, out var handsComponent)) + return; + + if (active) + BlockHands(uid, mech, handsComponent); + else + FreeHands(uid, mech); + } + + private void BlockHands(EntityUid uid, EntityUid mech, HandsComponent handsComponent) + { + var freeHands = 0; + foreach (var hand in _hands.EnumerateHands(uid, handsComponent)) + { + if (hand.HeldEntity == null) + { + freeHands++; + continue; + } + + // Is this entity removable? (they might have handcuffs on) + if (HasComp(hand.HeldEntity) && hand.HeldEntity != mech) + continue; + + _hands.DoDrop(uid, hand, true, handsComponent); + freeHands++; + if (freeHands == 2) + break; + } + if (_virtualItem.TrySpawnVirtualItemInHand(mech, uid, out var virtItem1)) + EnsureComp(virtItem1.Value); + + if (_virtualItem.TrySpawnVirtualItemInHand(mech, uid, out var virtItem2)) + EnsureComp(virtItem2.Value); + } + + private void FreeHands(EntityUid uid, EntityUid mech) + { + _virtualItem.DeleteInHandsMatching(uid, mech); + } + + // Goobstation Change End private void OnGetMeleeWeapon(EntityUid uid, MechPilotComponent component, GetMeleeWeaponEvent args) { if (args.Handled) @@ -423,6 +493,21 @@ private void OnAttackAttempt(EntityUid uid, MechPilotComponent component, Attack args.Cancel(); } + // Goobstation: Prevent guns being used out of mechs if CCVAR is set. + private void OnShotAttempted(EntityUid uid, MechEquipmentComponent component, ref ShotAttemptedEvent args) + { + if (!component.EquipmentOwner.HasValue + || !HasComp(component.EquipmentOwner.Value)) + { + if (!_canUseMechGunOutside) + args.Cancel(); + return; + } + + var ev = new HandleMechEquipmentBatteryEvent(); + RaiseLocalEvent(uid, ev); + } + private void UpdateAppearance(EntityUid uid, MechComponent? component = null, AppearanceComponent? appearance = null) { @@ -490,3 +575,12 @@ public sealed partial class MechExitEvent : SimpleDoAfterEvent public sealed partial class MechEntryEvent : SimpleDoAfterEvent { } + +/// +/// Event raised when an user attempts to fire a mech weapon to check if its battery is drained +/// + +[Serializable, NetSerializable] +public sealed partial class HandleMechEquipmentBatteryEvent : EntityEventArgs +{ +} diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index 994d230e8bd..9454443eb33 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared.Silicon.Components; // Goobstation using Content.Shared.Administration.Logs; using Content.Shared.Database; using Content.Shared.Examine; @@ -538,22 +539,23 @@ public string MindOwnerLoggingString(MindComponent mind) /// /// Returns a list of every living humanoid player's minds, except for a single one which is exluded. /// - public List GetAliveHumansExcept(EntityUid exclude) + public HashSet> GetAliveHumans(EntityUid? exclude = null, bool excludeSilicon = false) { - var mindQuery = EntityQuery(); - - var allHumans = new List(); + var allHumans = new HashSet>(); // HumanoidAppearanceComponent is used to prevent mice, pAIs, etc from being chosen - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var mc, out var mobState, out _)) + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var mobState, out _)) { - // the player needs to have a mind and not be the excluded one - if (mc.Mind == null || mc.Mind == exclude) + // the player needs to have a mind and not be the excluded one + + // the player has to be alive + if (!TryGetMind(uid, out var mind, out var mindComp) || mind == exclude || !_mobState.IsAlive(uid, mobState)) continue; - // the player has to be alive - if (_mobState.IsAlive(uid, mobState)) - allHumans.Add(mc.Mind.Value); + // Goobstation: Skip IPCs from selections + if (excludeSilicon && HasComp(uid)) + continue; + + allHumans.Add(new Entity(mind, mindComp)); } return allHumans; diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index e25328ada61..c393d2f6876 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -220,6 +220,10 @@ public sealed partial class MeleeWeaponComponent : Component ///
[DataField, AutoNetworkedField] public bool MustBeEquippedToUse = false; + + // Goobstation + [DataField, AutoNetworkedField] + public bool CanWideSwing = true; } /// diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 99db6a5f70c..ce2228ff66b 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -174,7 +174,8 @@ private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) return; if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) + weaponUid != GetEntity(msg.Weapon) || + !weapon.CanWideSwing) // Goobstation Change { return; } diff --git a/Content.Shared/_Goobstation/CCVars/CCVars.Goob.cs b/Content.Shared/_Goobstation/CCVars/CCVars.Goob.cs new file mode 100644 index 00000000000..16ef7e9da40 --- /dev/null +++ b/Content.Shared/_Goobstation/CCVars/CCVars.Goob.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared._Goobstation.CCVar; + +[CVarDefs] +public sealed partial class GoobCVars +{ + #region Mechs + + /// + /// Whether or not players can use mech guns outside of mechs. + /// + public static readonly CVarDef MechGunOutsideMech = + CVarDef.Create("mech.gun_outside_mech", true, CVar.SERVER | CVar.REPLICATED); + + #endregion +} diff --git a/Resources/Locale/en-US/_Goobstation/power/silicons.ftl b/Resources/Locale/en-US/_Goobstation/power/silicons.ftl new file mode 100644 index 00000000000..9d52b2210d1 --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/power/silicons.ftl @@ -0,0 +1 @@ +ipc-overheat-popup = {$name}'s circuits shut down from overheating! diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml index 9747f2436ce..212ad96c668 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml @@ -39,6 +39,18 @@ # safe: false # - type: EyeProtection # You'll want this if your robot can't wear glasses, like an IPC. # protectionTime: 12 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 185 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer - type: Silicon entityType: enum.SiliconType.Player batteryPowered: false # Needs to also have a battery! @@ -53,7 +65,7 @@ 0: 0.00 - type: Temperature - heatDamageThreshold: 325 + heatDamageThreshold: 1800 # GoobStation: Roughly the melting point of mild steels coldDamageThreshold: 260 currentTemperature: 310.15 specificHeat: 42 @@ -64,6 +76,7 @@ types: Heat: 3 #per second, scales with temperature & other constants atmosTemperatureTransferEfficiency: 0.05 + - type: KillOnOverheat # GoobStation - type: Deathgasp prototype: SiliconDeathgasp needsCritical: false @@ -165,7 +178,7 @@ canResistFire: true damage: types: - Heat: 0.75 #per second, scales with number of fire 'stacks' + Heat: 0 # GoobStation: Replaced fire damage with overheating shutdown # - type: Barotrauma # Not particularly modifiable. In the future, some response to pressure changes would be nice. # damage: # types: @@ -315,6 +328,12 @@ - type: LightningTarget priority: 1 lightningExplode: false + - type: ComplexInteraction + - type: FootPrints + - type: Carriable + - type: Targeting + - type: SurgeryTarget + - type: LayingDown - type: damageModifierSet @@ -323,5 +342,4 @@ Poison: 0 Cold: 0.2 Heat: 2 - Shock: 2.5 - + Shock: 2.5 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index c062fcf5bbb..098dceb8bc5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -42,6 +42,7 @@ enum.MechUiKey.Key: type: MechBoundUserInterface - type: MeleeWeapon + canWideSwing: false hidden: true attackRate: 1.3333 damage: diff --git a/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml b/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml new file mode 100644 index 00000000000..b8ef8204ebf --- /dev/null +++ b/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml @@ -0,0 +1,7 @@ +- type: damageModifierSet + id: IPC + coefficients: + Poison: 0 + Cold: 0.2 + Heat: 2 + Shock: 2.5 diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml index e1d37125727..070b2553835 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Gun/industrial.yml @@ -17,7 +17,7 @@ path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg - type: ProjectileBatteryAmmoProvider proto: BulletKineticShuttle - fireCost: 50 + fireCost: 0.1 - type: Appearance - type: AmmoCounter # TODO: Plasma Cutter diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml index 89cd78520e1..416af7e3ad3 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/Weapons/Melee/industrial.yml @@ -1,5 +1,5 @@ - type: entity - id: WeaponMechMelleDrill + id: WeaponMechMeleeDrill parent: BaseMechWeaponMelee name: exosuit drill suffix: Mech Weapon, Melee, Industrial @@ -12,6 +12,7 @@ - Pickaxe - IndustrialMech - type: MeleeWeapon + canWideSwing: false autoAttack: true angle: 0 wideAnimationRotation: -90 @@ -25,7 +26,7 @@ Structural: 40 # ~10 seconds for solid wall / ~21 secods for reinforced wall - type: entity - id: WeaponMechMelleDrillDiamond + id: WeaponMechMeleeDrillDiamond parent: BaseMechWeaponMelee name: diamond-tipped exosuit drill suffix: Mech Weapon, Melee, Industrial @@ -38,6 +39,7 @@ - Pickaxe - IndustrialMech - type: MeleeWeapon + canWideSwing: false autoAttack: true angle: 0 wideAnimationRotation: -90 diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml index 7a9f9878d40..be3aaff08f0 100644 --- a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml @@ -202,7 +202,7 @@ # Equipment - type: latheRecipe id: MechEquipmentDrill - result: WeaponMechMelleDrill + result: WeaponMechMeleeDrill category: MechEquipment completetime: 10 materials: @@ -211,7 +211,7 @@ - type: latheRecipe id: MechEquipmentDrillDiamond - result: WeaponMechMelleDrillDiamond + result: WeaponMechMeleeDrillDiamond category: MechEquipment completetime: 10 materials: From 3961397197be7881ead5d2781317288504887501 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 00:09:53 -0400 Subject: [PATCH 04/11] Re-add paradox code --- Content.Server/Cloning/CloningSystem.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index b5bd54e8d72..d545b10a4ee 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -205,6 +205,12 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity(bodyToClone)) return false; // Goobstation: Don't clone IPCs. From 99671a872b4ce820b211f4a349a4b0cfe1b4af73 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 00:15:07 -0400 Subject: [PATCH 05/11] Fix build fails --- .../Objectives/Systems/KillPersonConditionSystem.cs | 5 +++-- .../Silicon/WeldingHealable/WeldingHealableSystem.cs | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index 73ae7a94f83..7afc74af4d1 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Objectives.Components; using Content.Server.Shuttles.Systems; using Content.Shared.CCVar; @@ -78,7 +79,7 @@ private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref Obj return; // no other humans to kill - var allHumans = _mind.GetAliveHumansExcept(args.MindId); + var allHumans = _mind.GetAliveHumans(args.MindId); if (allHumans.Count == 0) { args.Cancelled = true; @@ -94,7 +95,7 @@ private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref Obj } if (allHeads.Count == 0) - allHeads = allHumans; // fallback to non-head target + allHeads = allHumans.Select(human => human.Owner).ToList(); // fallback to non-head target _target.SetTarget(uid, _random.Pick(allHeads), target); } diff --git a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs index 5bbbf398310..70f5c063f57 100644 --- a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs +++ b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Tools; using Content.Shared._Shitmed.Targeting; using Content.Shared.Body.Systems; +using Content.Shared.Tools.Components; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; namespace Content.Server.Silicon.WeldingHealable; @@ -81,8 +82,8 @@ private async void Repair(EntityUid uid, WeldingHealableComponent healableCompon ? component.DoAfterDelay * component.SelfHealPenalty : component.DoAfterDelay; - args.Handled = _toolSystem.UseTool - (args.Used, + args.Handled = _toolSystem.UseTool( + args.Used, args.User, args.Target, delay, @@ -93,7 +94,7 @@ private async void Repair(EntityUid uid, WeldingHealableComponent healableCompon }); } - private bool HasDamage(DamageableComponent component, WeldingHealingComponent healable) + private bool HasDamage(Entity damageable, WeldingHealingComponent healable, EntityUid user) { if (healable.Damage.DamageDict is null) return false; From 449cd4362a42aab5308401995d560b74c6a8bdc1 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 00:16:32 -0400 Subject: [PATCH 06/11] ! --- .../_Goobstation/Recipes/Lathes/mech_parts.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml index be3aaff08f0..39175276fed 100644 --- a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml @@ -220,16 +220,6 @@ Silver: 350 Diamond: 150 -- type: latheRecipe - id: MechEquipmentGrabber - result: MechEquipmentGrabber - category: MechEquipment - completetime: 10 - materials: - Steel: 500 - Plastic: 200 - - - type: latheRecipe id: MechEquipmentHonkerBananaMortar result: WeaponMechSpecialBananaMortar From a6ded09801cef2a758af8d81081ca5ce33713146 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 00:20:45 -0400 Subject: [PATCH 07/11] ! --- Resources/Prototypes/Recipes/Lathes/mech_parts.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml index 0c029622740..bf0abfa5a1f 100644 --- a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml @@ -174,13 +174,4 @@ id: VimHarness result: VimHarness category: Mech - completetime: 5 - -- type: latheRecipe - id: MechEquipmentHorn - result: MechEquipmentHorn - category: MechEquipment - completetime: 10 - materials: - Steel: 500 - Bananium: 200 \ No newline at end of file + completetime: 5 \ No newline at end of file From a82079aecfc4ce3aab34320e04b3b11c2812c24c Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 00:26:22 -0400 Subject: [PATCH 08/11] remove duplicate --- .../Prototypes/_EinsteinEngines/Damage/modifier_sets.yml | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml diff --git a/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml b/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml deleted file mode 100644 index b8ef8204ebf..00000000000 --- a/Resources/Prototypes/_EinsteinEngines/Damage/modifier_sets.yml +++ /dev/null @@ -1,7 +0,0 @@ -- type: damageModifierSet - id: IPC - coefficients: - Poison: 0 - Cold: 0.2 - Heat: 2 - Shock: 2.5 From 6328571b6aa5c433603affd4acf59ebd9e4a9cb6 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 01:00:08 -0400 Subject: [PATCH 09/11] Fix linter --- .../Entities/Mobs/Player/silicon_base.yml | 3 - .../Entities/Objects/Specific/Mech/mechs.yml | 4 +- .../Prototypes/Recipes/Lathes/electronics.yml | 61 +++++++++++++++++++ .../Entities/Objects/Specific/Mech/mechs.yml | 16 ++--- .../Recipes/Lathes/mech_parts.yml | 11 ---- 5 files changed, 71 insertions(+), 24 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml index 212ad96c668..5ec9b49a645 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml @@ -328,11 +328,8 @@ - type: LightningTarget priority: 1 lightningExplode: false - - type: ComplexInteraction - type: FootPrints - type: Carriable - - type: Targeting - - type: SurgeryTarget - type: LayingDown diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 098dceb8bc5..cb7b55ef288 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -136,7 +136,7 @@ - type: entity id: MechRipley - parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] # Goobstation + parent: [ BaseMech, IndustrialMech ] # Goobstation name: Ripley APLU description: Versatile and lightly armored, the Ripley is useful for almost any heavy work scenario. The "APLU" stands for Autonomous Power Loading Unit. components: @@ -179,7 +179,7 @@ - PowerCellHigh - type: entity - parent: [ BaseMech, SpecialMech, BaseCivilianContraband ] # Goobstation + parent: [ BaseMech, SpecialMech ] # Goobstation id: MechHonker name: H.O.N.K. description: "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!" diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 494f2aff774..321e67a5f82 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -1,3 +1,64 @@ +- type: latheRecipe + abstract: true + id: BaseElectronicsRecipe + category: Circuitry + completetime: 2 + materials: + Steel: 100 + Plastic: 300 + +- type: latheRecipe + abstract: true + parent: BaseElectronicsRecipe + id: BaseCheapElectronicsRecipe + materials: + Steel: 50 + Plastic: 50 + +- type: latheRecipe + abstract: true + parent: BaseElectronicsRecipe + id: BaseCheapCircuitboardRecipe + materials: + Steel: 50 + Glass: 250 + +- type: latheRecipe + abstract: true + parent: BaseElectronicsRecipe + id: BaseCircuitboardRecipe + completetime: 4 + materials: + Steel: 100 + Glass: 500 + +- type: latheRecipe + abstract: true + parent: BaseCircuitboardRecipe + id: BaseGoldCircuitboardRecipe + materials: + Steel: 100 + Glass: 500 + Gold: 100 + +- type: latheRecipe + abstract: true + parent: BaseCircuitboardRecipe + id: BaseSilverCircuitboardRecipe + materials: + Steel: 100 + Glass: 500 + Silver: 100 + +- type: latheRecipe + abstract: true + parent: BaseCircuitboardRecipe + id: BaseBananiumCircuitboardRecipe + materials: + Steel: 100 + Glass: 500 + Bananium: 100 + - type: latheRecipe id: FirelockElectronics result: FirelockElectronics diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml index 90af577ac30..fb4c6b5deda 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Mech/mechs.yml @@ -41,7 +41,7 @@ # Ripley MK-II - type: entity id: MechRipley2 - parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] + parent: [ BaseMech, IndustrialMech ] name: Ripley APLU MK-II description: The "MK-II" has a pressurized cabin for space operations, but the added weight has slowed it down. components: @@ -99,7 +99,7 @@ # Clarke - type: entity id: MechClarke - parent: [ BaseMech, IndustrialMech, BaseCargoContraband ] + parent: [ BaseMech, IndustrialMech ] name: Clarke description: A fast-moving mech for space travel. It has built-in trusts. components: @@ -170,7 +170,7 @@ # Gygax - type: entity id: MechGygax - parent: [ BaseMech, CombatMech, BaseRestrictedContraband ] + parent: [ BaseMech, CombatMech ] name: Gygax description: While lightly armored, the Gygax has incredible mobility thanks to its ability that lets it smash through walls at high speeds. components: @@ -229,7 +229,7 @@ # Durand - type: entity id: MechDurand - parent: [ BaseMech, CombatMech, BaseRestrictedContraband ] + parent: [ BaseMech, CombatMech ] name: Durand description: A slow but beefy combat exosuit that is extra scary in confined spaces due to its punches. Xenos hate it! components: @@ -296,7 +296,7 @@ # Marauder - type: entity id: MechMarauder - parent: [ BaseMech, CombatMech, BaseCentcommContraband ] + parent: [ BaseMech, CombatMech ] name: Marauder description: Looks like we're all saved. # ERT mech components: @@ -369,7 +369,7 @@ # Seraph - type: entity id: MechSeraph - parent: [ BaseMech, CombatMech, BaseCentcommContraband ] + parent: [ BaseMech, CombatMech ] name: Seraph description: That's the last thing you'll see. # Death Squad mech components: @@ -445,7 +445,7 @@ # Dark Gygax - type: entity id: MechGygaxSyndie - parent: [ BaseMech, CombatMech, BaseSyndicateContraband ] + parent: [ BaseMech, CombatMech ] name: Dark Gygax description: A modified Gygax used for nefarious purposes. On the back of the armor plate there is an inscription "Cybersun Inc." components: @@ -518,7 +518,7 @@ # Mauler - type: entity id: MechMaulerSyndie - parent: [ BaseMech, CombatMech, BaseSyndicateContraband ] + parent: [ BaseMech, CombatMech ] name: Mauler description: A modified Marauder used by the Syndicate that's not as maneuverable as the Dark Gygax, but it makes up for that in armor and sheer firepower. On the back of the armor plate there is an inscription "Cybersun Inc." components: diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml index 39175276fed..65d4890c419 100644 --- a/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/mech_parts.yml @@ -188,17 +188,6 @@ materials: Steel: 1100 -# Vim -- type: latheRecipe - id: VimHarness - result: VimHarness - category: Vim # Goobstation - completetime: 5 - materials: - Steel: 500 - Glass: 200 - - # Equipment - type: latheRecipe id: MechEquipmentDrill From 3962cb60c2e1a417a5c42562f2642989a094f467 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 20 Jan 2025 01:09:17 -0400 Subject: [PATCH 10/11] okay now fix linters --- Resources/Prototypes/Recipes/Lathes/mech_parts.yml | 2 +- Resources/Prototypes/Research/arsenal.yml | 14 +------------- Resources/Prototypes/Research/industrial.yml | 1 - 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml index bf0abfa5a1f..3f457ef8af9 100644 --- a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml @@ -173,5 +173,5 @@ - type: latheRecipe id: VimHarness result: VimHarness - category: Mech + category: MechEquipment completetime: 5 \ No newline at end of file diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index a672c51fdcf..3625f0cb4e7 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -15,6 +15,7 @@ - WeaponProtoKineticAccelerator - ShuttleGunKineticCircuitboard - WeaponLaserCarbine + - WeaponMechCombatFiredartLaser # Goobstation - WeaponEnergyGun - WeaponEnergyGunMini - WeaponLaserSvalinn @@ -51,19 +52,6 @@ - CartridgeSpecialIncendiary - MagazineBoxSpecialIncendiary -- type: technology - id: WeaponizedLaserManipulation - name: research-technology-weaponized-laser-manipulation - icon: - sprite: Objects/Weapons/Guns/Battery/laser_gun.rsi - state: icon - discipline: Arsenal - tier: 1 - cost: 7500 - recipeUnlocks: - - WeaponLaserCarbine - - WeaponMechCombatFiredartLaser # Goobstation - - type: technology id: NonlethalAmmunition name: research-technology-nonlethal-ammunition diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index c380ce9d5e1..42085d19aba 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -183,7 +183,6 @@ recipeUnlocks: - OreBagOfHolding - MiningDrillDiamond - - AdvancedMineralScannerEmpty - MechEquipmentDrillDiamond - type: technology From 3e7d85791d8f71045f48acdce1b3e77cb088945d Mon Sep 17 00:00:00 2001 From: ScyronX <166930367+ScyronX@users.noreply.github.com> Date: Fri, 13 Dec 2024 00:11:09 +0300 Subject: [PATCH 11/11] Mech Lights (#1131) --- Content.Shared/Mech/Components/MechComponent.cs | 3 +++ Content.Shared/Mech/EntitySystems/SharedMechSystem.cs | 1 + .../Prototypes/Entities/Objects/Specific/Mech/mechs.yml | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/Content.Shared/Mech/Components/MechComponent.cs b/Content.Shared/Mech/Components/MechComponent.cs index 4aa3615b206..6ebfde5f999 100644 --- a/Content.Shared/Mech/Components/MechComponent.cs +++ b/Content.Shared/Mech/Components/MechComponent.cs @@ -148,6 +148,8 @@ public sealed partial class MechComponent : Component [DataField] public EntProtoId MechCycleAction = "ActionMechCycleEquipment"; [DataField] + public EntProtoId ToggleAction = "ActionToggleLight"; //Goobstation Mech Lights toggle action + [DataField] public EntProtoId MechUiAction = "ActionMechOpenUI"; [DataField] public EntProtoId MechEjectAction = "ActionMechEject"; @@ -165,4 +167,5 @@ public sealed partial class MechComponent : Component [DataField] public EntityUid? MechCycleActionEntity; [DataField] public EntityUid? MechUiActionEntity; [DataField] public EntityUid? MechEjectActionEntity; + [DataField, AutoNetworkedField] public EntityUid? ToggleActionEntity; //Goobstation Mech Lights toggle action } diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index 83acf1701d4..f977a2eeb4e 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -159,6 +159,7 @@ private void SetupUser(EntityUid mech, EntityUid pilot, MechComponent? component _actions.AddAction(pilot, ref component.MechCycleActionEntity, component.MechCycleAction, mech); _actions.AddAction(pilot, ref component.MechUiActionEntity, component.MechUiAction, mech); _actions.AddAction(pilot, ref component.MechEjectActionEntity, component.MechEjectAction, mech); + _actions.AddAction(pilot, ref component.ToggleActionEntity, component.ToggleAction, mech); //Goobstation Mech Lights toggle action } private void RemoveUser(EntityUid mech, EntityUid pilot) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index cb7b55ef288..7a76bf3d0d9 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -108,6 +108,15 @@ - !type:DoActsBehavior acts: ["Destruction"] # Goobstation Change Start + - type: UnpoweredFlashlight # Goobstation mech lights for all mechs its unpowered to match hardsuits + - type: PointLight + enabled: false + softness: 5 + autoRot: true + mask: /Textures/Effects/LightMasks/cone.png + radius: 7 + energy: 3 + netsync: false - type: GenericVisualizer visuals: enum.PaperLabelVisuals.HasLabel: