From 913e1ee676b33855490b1478977181d9dd7ae491 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Sat, 10 Dec 2022 12:05:39 -0500 Subject: [PATCH] Exosuit: Ripley (#12668) * mechs * interaction relay * atmos handling * fuck around with interaction events SPAGHETTI CODE OH MY GOD * more sprites and whatever the hell * more mech shit * more shit for equipment * starting equipment (for nukie mechs and such) * equipment cycling * starting with some of the ui * a fat chunk of ui prototyping * done tinkering with ui * a bunch of ui stuff and what have yous * cleaning up grabber and state handling * make the ui actually functional + watch me port a million icons I swear i'll prune the sprites later blease * start on construction * construction yo mamma * remove some unused files * fix a silly * make the graph sane * make it actually constructible. * print the boards as well, bozo * rebalance part prices * eject action also i appease the russians by remembering to localize * Punch Shit * make mech integrity and repairs work * Make the UI more based STOMP STOMP STOMP STOMP * make equipment even more based * batteries and other such delights * make the ui look pimpin af * make the construction mega based * UI but so epic * equipment * some sweat tweaks * damage rebalancing * restructure tech * fix some shit * mechs inherit access * make icons actually use sprite specifiers * TRAILING COMMAA!!!!! * fix a mild indentation sin * undo this change because it isn't needed * actually fix this * secret webeditting shhhh * place this tech here * comments * foo --- .../CartridgeLoaderBoundUserInterface.cs | 2 +- .../CartridgeLoader/Cartridges/NetProbeUi.cs | 2 +- .../Cartridges/NotekeeperUi.cs | 2 +- .../Mech/MechAssemblyVisualizerSystem.cs | 24 + .../Mech/MechAssemblyVisualsComponent.cs | 15 + Content.Client/Mech/MechComponent.cs | 12 + Content.Client/Mech/MechSystem.cs | 43 ++ .../Mech/Ui/Equipment/MechGrabberUi.cs | 36 ++ .../Ui/Equipment/MechGrabberUiFragment.xaml | 15 + .../Equipment/MechGrabberUiFragment.xaml.cs | 35 ++ .../Mech/Ui/MechBoundUserInterface.cs | 84 ++++ .../Mech/Ui/MechEquipmentControl.xaml | 26 + .../Mech/Ui/MechEquipmentControl.xaml.cs | 28 ++ Content.Client/Mech/Ui/MechMenu.xaml | 71 +++ Content.Client/Mech/Ui/MechMenu.xaml.cs | 72 +++ .../UserInterface/Fragments/UIFragment.cs | 2 +- .../Construction/Completions/BuildMech.cs | 71 +++ .../Mech/Components/MechAssemblyComponent.cs | 50 ++ .../Mech/Components/MechComponent.cs | 118 +++++ .../Components/MechGrabberComponent.cs | 74 +++ .../EntitySystems/MechGrabberSystem.cs | 167 +++++++ .../Mech/Systems/MechAssemblySystem.cs | 64 +++ .../Mech/Systems/MechEquipmentSystem.cs | 73 +++ Content.Server/Mech/Systems/MechSystem.cs | 428 ++++++++++++++++ .../EntitySystems/RevenantSystem.Abilities.cs | 7 +- .../ActionBlocker/ActionBlockerSystem.cs | 7 +- .../Components/InteractionRelayComponent.cs | 34 ++ .../Interaction/Events/AttackAttemptEvent.cs | 16 + Content.Shared/Interaction/InteractHand.cs | 30 +- .../SharedInteractionSystem.Relay.cs | 35 ++ .../Interaction/SharedInteractionSystem.cs | 25 +- .../Mech/Components/MechPilotComponent.cs | 26 + .../Mech/Components/SharedMechComponent.cs | 132 +++++ .../Mech/EntitySystems/SharedMechSystem.cs | 463 +++++++++++++++++ .../Components/MechEquipmentComponent.cs | 45 ++ Content.Shared/Mech/MechUI.cs | 102 ++++ Content.Shared/Mech/SharedMech.cs | 62 +++ .../Movement/Systems/SharedMoverController.cs | 7 + .../Weapons/Melee/MeleeWeaponComponent.cs | 9 + .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 8 +- Resources/Audio/Mecha/attributions.yml | 12 + Resources/Audio/Mecha/license.txt | 1 - .../Audio/Mecha/sound_mecha_hydraulic.ogg | Bin 0 -> 27124 bytes .../Mecha/sound_mecha_powerloader_step.ogg | Bin 0 -> 8152 bytes .../Locale/en-US/actions/actions/mech.ftl | 8 + Resources/Locale/en-US/mech/mech.ftl | 16 + .../catalog/research/technologies.ftl | 7 +- Resources/Prototypes/Actions/mech.yml | 31 ++ Resources/Prototypes/Actions/types.yml | 2 +- .../Catalog/Research/technologies.yml | 20 + .../Objects/Devices/Electronics/mech.yml | 25 + .../Specific/Mech/mech_construction.yml | 150 ++++++ .../Objects/Specific/Mech/mecha_equipment.yml | 26 + .../Entities/Objects/Specific/Mech/mechs.yml | 100 ++++ .../Entities/Structures/Machines/lathe.yml | 8 + .../Graphs/mechs/ripley_construction.yml | 125 +++++ .../Prototypes/Recipes/Lathes/electronics.yml | 21 + .../Prototypes/Recipes/Lathes/mech_parts.yml | 65 +++ Resources/Prototypes/tags.yml | 20 +- .../mech_cycle_equip_off.png | Bin 0 -> 474 bytes .../actions_mecha.rsi/mech_cycle_equip_on.png | Bin 0 -> 572 bytes .../actions_mecha.rsi/mech_damtype_brute.png | Bin 0 -> 546 bytes .../actions_mecha.rsi/mech_damtype_burn.png | Bin 0 -> 591 bytes .../actions_mecha.rsi/mech_damtype_toxin.png | Bin 0 -> 543 bytes .../mech_defense_mode_off.png | Bin 0 -> 549 bytes .../mech_defense_mode_on.png | Bin 0 -> 547 bytes .../Actions/actions_mecha.rsi/mech_eject.png | Bin 0 -> 477 bytes .../actions_mecha.rsi/mech_internals_off.png | Bin 0 -> 635 bytes .../actions_mecha.rsi/mech_internals_on.png | Bin 0 -> 642 bytes .../Actions/actions_mecha.rsi/mech_ivanov.png | Bin 0 -> 676 bytes .../mech_ivanov_cooldown.png | Bin 0 -> 964 bytes .../actions_mecha.rsi/mech_lights_off.png | Bin 0 -> 553 bytes .../actions_mecha.rsi/mech_lights_on.png | Bin 0 -> 558 bytes .../actions_mecha.rsi/mech_overload_off.png | Bin 0 -> 503 bytes .../actions_mecha.rsi/mech_overload_on.png | Bin 0 -> 513 bytes .../actions_mecha.rsi/mech_phasing_off.png | Bin 0 -> 541 bytes .../actions_mecha.rsi/mech_phasing_on.png | Bin 0 -> 550 bytes .../actions_mecha.rsi/mech_savannah.png | Bin 0 -> 640 bytes .../mech_savannah_cooldown.png | Bin 0 -> 926 bytes .../actions_mecha.rsi/mech_seat_swap.png | Bin 0 -> 636 bytes .../Actions/actions_mecha.rsi/mech_smoke.png | Bin 0 -> 591 bytes .../actions_mecha.rsi/mech_thrusters_off.png | Bin 0 -> 605 bytes .../actions_mecha.rsi/mech_thrusters_on.png | Bin 0 -> 636 bytes .../actions_mecha.rsi/mech_view_stats.png | Bin 0 -> 509 bytes .../actions_mecha.rsi/mech_zoom_off.png | Bin 0 -> 611 bytes .../actions_mecha.rsi/mech_zoom_on.png | Bin 0 -> 617 bytes .../Actions/actions_mecha.rsi/meson.png | Bin 0 -> 650 bytes .../Actions/actions_mecha.rsi/meta.json | 112 +++++ .../Actions/actions_mecha.rsi/strafe.png | Bin 0 -> 488 bytes .../Specific/Mech/mecha.rsi/clarke-broken.png | Bin 0 -> 1406 bytes .../Specific/Mech/mecha.rsi/clarke-open.png | Bin 0 -> 1433 bytes .../Specific/Mech/mecha.rsi/clarke.png | Bin 0 -> 6151 bytes .../Mech/mecha.rsi/darkgygax-broken.png | Bin 0 -> 2211 bytes .../Mech/mecha.rsi/darkgygax-open.png | Bin 0 -> 2792 bytes .../Specific/Mech/mecha.rsi/darkgygax.png | Bin 0 -> 3821 bytes .../Mech/mecha.rsi/darkhonker-broken.png | Bin 0 -> 1808 bytes .../Mech/mecha.rsi/darkhonker-open.png | Bin 0 -> 1708 bytes .../Specific/Mech/mecha.rsi/darkhonker.png | Bin 0 -> 5039 bytes .../Mech/mecha.rsi/deathripley-broken.png | Bin 0 -> 1240 bytes .../Mech/mecha.rsi/deathripley-open.png | Bin 0 -> 1164 bytes .../Specific/Mech/mecha.rsi/deathripley.png | Bin 0 -> 3366 bytes .../Specific/Mech/mecha.rsi/durand-broken.png | Bin 0 -> 1680 bytes .../Specific/Mech/mecha.rsi/durand-open.png | Bin 0 -> 1895 bytes .../Specific/Mech/mecha.rsi/durand.png | Bin 0 -> 2627 bytes .../Mech/mecha.rsi/firefighter-broken.png | Bin 0 -> 1016 bytes .../Mech/mecha.rsi/firefighter-open.png | Bin 0 -> 1076 bytes .../Specific/Mech/mecha.rsi/firefighter.png | Bin 0 -> 3106 bytes .../Specific/Mech/mecha.rsi/gygax-broken.png | Bin 0 -> 2412 bytes .../Specific/Mech/mecha.rsi/gygax-open.png | Bin 0 -> 3044 bytes .../Objects/Specific/Mech/mecha.rsi/gygax.png | Bin 0 -> 4306 bytes .../Specific/Mech/mecha.rsi/hauler-broken.png | Bin 0 -> 1282 bytes .../Specific/Mech/mecha.rsi/hauler-empty.png | Bin 0 -> 3706 bytes .../Specific/Mech/mecha.rsi/hauler-open.png | Bin 0 -> 1396 bytes .../Specific/Mech/mecha.rsi/hauler.png | Bin 0 -> 3723 bytes .../Specific/Mech/mecha.rsi/honker-broken.png | Bin 0 -> 1856 bytes .../Specific/Mech/mecha.rsi/honker-open.png | Bin 0 -> 1696 bytes .../Specific/Mech/mecha.rsi/honker.png | Bin 0 -> 5059 bytes .../Mech/mecha.rsi/marauder-broken.png | Bin 0 -> 1236 bytes .../Specific/Mech/mecha.rsi/marauder-open.png | Bin 0 -> 1678 bytes .../Specific/Mech/mecha.rsi/marauder.png | Bin 0 -> 2936 bytes .../Specific/Mech/mecha.rsi/mauler-broken.png | Bin 0 -> 1150 bytes .../Specific/Mech/mecha.rsi/mauler-open.png | Bin 0 -> 1854 bytes .../Specific/Mech/mecha.rsi/mauler.png | Bin 0 -> 7304 bytes .../Objects/Specific/Mech/mecha.rsi/meta.json | 469 ++++++++++++++++++ .../Mech/mecha.rsi/odysseus-broken.png | Bin 0 -> 1441 bytes .../Specific/Mech/mecha.rsi/odysseus-open.png | Bin 0 -> 1357 bytes .../Specific/Mech/mecha.rsi/odysseus.png | Bin 0 -> 3251 bytes .../Specific/Mech/mecha.rsi/phazon-broken.png | Bin 0 -> 1258 bytes .../Specific/Mech/mecha.rsi/phazon-open.png | Bin 0 -> 1209 bytes .../Specific/Mech/mecha.rsi/phazon-phase.png | Bin 0 -> 32188 bytes .../Specific/Mech/mecha.rsi/phazon.png | Bin 0 -> 3364 bytes .../Mech/mecha.rsi/reticence-broken.png | Bin 0 -> 1209 bytes .../Mech/mecha.rsi/reticence-open.png | Bin 0 -> 1150 bytes .../Specific/Mech/mecha.rsi/reticence.png | Bin 0 -> 2899 bytes .../Mech/mecha.rsi/ripley-broken-old.png | Bin 0 -> 1130 bytes .../Specific/Mech/mecha.rsi/ripley-broken.png | Bin 0 -> 1130 bytes .../Specific/Mech/mecha.rsi/ripley-empty.png | Bin 0 -> 2877 bytes .../Mech/mecha.rsi/ripley-g-full-open.png | Bin 0 -> 956 bytes .../Specific/Mech/mecha.rsi/ripley-g-full.png | Bin 0 -> 2798 bytes .../Specific/Mech/mecha.rsi/ripley-g-open.png | Bin 0 -> 417 bytes .../Specific/Mech/mecha.rsi/ripley-g.png | Bin 0 -> 1019 bytes .../Specific/Mech/mecha.rsi/ripley-old.png | Bin 0 -> 2745 bytes .../Specific/Mech/mecha.rsi/ripley-open.png | Bin 0 -> 1138 bytes .../Specific/Mech/mecha.rsi/ripley.png | Bin 0 -> 2894 bytes .../Mech/mecha.rsi/ripleymkii-broken.png | Bin 0 -> 1130 bytes .../Mech/mecha.rsi/ripleymkii-open.png | Bin 0 -> 1147 bytes .../Specific/Mech/mecha.rsi/ripleymkii.png | Bin 0 -> 2976 bytes .../Specific/Mech/mecha.rsi/seraph-broken.png | Bin 0 -> 1354 bytes .../Specific/Mech/mecha.rsi/seraph-open.png | Bin 0 -> 1708 bytes .../Specific/Mech/mecha.rsi/seraph.png | Bin 0 -> 3295 bytes .../mecha_abooster_ccw.png | Bin 0 -> 1313 bytes .../mecha_abooster_proj.png | Bin 0 -> 1155 bytes .../mecha_equipment.rsi/mecha_analyzer.png | Bin 0 -> 530 bytes .../mecha_equipment.rsi/mecha_bananamrtr.png | Bin 0 -> 729 bytes .../mecha_equipment.rsi/mecha_carbine.png | Bin 0 -> 766 bytes .../Mech/mecha_equipment.rsi/mecha_clamp.png | Bin 0 -> 855 bytes .../mecha_diamond_drill.png | Bin 0 -> 599 bytes .../mecha_equipment.rsi/mecha_disabler.png | Bin 0 -> 799 bytes .../Mech/mecha_equipment.rsi/mecha_drill.png | Bin 0 -> 608 bytes .../Mech/mecha_equipment.rsi/mecha_exting.png | Bin 0 -> 691 bytes .../mecha_grenadelnchr.png | Bin 0 -> 698 bytes .../Mech/mecha_equipment.rsi/mecha_honker.png | Bin 0 -> 845 bytes .../Mech/mecha_equipment.rsi/mecha_ion.png | Bin 0 -> 713 bytes .../mecha_equipment.rsi/mecha_kineticgun.png | Bin 0 -> 783 bytes .../Mech/mecha_equipment.rsi/mecha_laser.png | Bin 0 -> 691 bytes .../mecha_equipment.rsi/mecha_medigun.png | Bin 0 -> 413 bytes .../Mech/mecha_equipment.rsi/mecha_mime.png | Bin 0 -> 757 bytes .../mecha_equipment.rsi/mecha_missilerack.png | Bin 0 -> 785 bytes .../mecha_missilerack_six.png | Bin 0 -> 739 bytes .../mecha_mousetrapmrtr.png | Bin 0 -> 794 bytes .../mecha_plasmacutter.png | Bin 0 -> 1124 bytes .../Mech/mecha_equipment.rsi/mecha_pulse.png | Bin 0 -> 700 bytes .../mecha_punching_glove.png | Bin 0 -> 680 bytes .../Mech/mecha_equipment.rsi/mecha_rcd.png | Bin 0 -> 693 bytes .../mecha_equipment.rsi/mecha_scatter.png | Bin 0 -> 729 bytes .../Mech/mecha_equipment.rsi/mecha_taser.png | Bin 0 -> 709 bytes .../mecha_equipment.rsi/mecha_teleport.png | Bin 0 -> 905 bytes .../Mech/mecha_equipment.rsi/mecha_uac2.png | Bin 0 -> 642 bytes .../mecha_equipment.rsi/mecha_weapon_bay.png | Bin 0 -> 483 bytes .../mecha_equipment.rsi/mecha_wholegen.png | Bin 0 -> 1028 bytes .../Mech/mecha_equipment.rsi/mecha_wire.png | Bin 0 -> 1061 bytes .../Mech/mecha_equipment.rsi/meta.json | 152 ++++++ .../Mech/mecha_equipment.rsi/repair_droid.png | Bin 0 -> 477 bytes .../mecha_equipment.rsi/repair_droid_a.png | Bin 0 -> 1699 bytes .../mecha_equipment.rsi/ripleyupgrade.png | Bin 0 -> 1271 bytes .../Mech/mecha_equipment.rsi/tesla.png | Bin 0 -> 713 bytes .../Mech/mecha_equipment.rsi/thrusters.png | Bin 0 -> 661 bytes .../Mech/ripley_construction.rsi/meta.json | 98 ++++ .../Mech/ripley_construction.rsi/ripley0.png | Bin 0 -> 1278 bytes .../Mech/ripley_construction.rsi/ripley1.png | Bin 0 -> 1343 bytes .../Mech/ripley_construction.rsi/ripley10.png | Bin 0 -> 1481 bytes .../Mech/ripley_construction.rsi/ripley11.png | Bin 0 -> 1481 bytes .../Mech/ripley_construction.rsi/ripley12.png | Bin 0 -> 1481 bytes .../Mech/ripley_construction.rsi/ripley13.png | Bin 0 -> 1481 bytes .../Mech/ripley_construction.rsi/ripley14.png | Bin 0 -> 1481 bytes .../Mech/ripley_construction.rsi/ripley15.png | Bin 0 -> 1391 bytes .../Mech/ripley_construction.rsi/ripley16.png | Bin 0 -> 1459 bytes .../Mech/ripley_construction.rsi/ripley17.png | Bin 0 -> 1090 bytes .../Mech/ripley_construction.rsi/ripley18.png | Bin 0 -> 1192 bytes .../Mech/ripley_construction.rsi/ripley2.png | Bin 0 -> 1347 bytes .../Mech/ripley_construction.rsi/ripley3.png | Bin 0 -> 1480 bytes .../Mech/ripley_construction.rsi/ripley4.png | Bin 0 -> 1463 bytes .../Mech/ripley_construction.rsi/ripley5.png | Bin 0 -> 1472 bytes .../Mech/ripley_construction.rsi/ripley6.png | Bin 0 -> 1475 bytes .../Mech/ripley_construction.rsi/ripley7.png | Bin 0 -> 1473 bytes .../Mech/ripley_construction.rsi/ripley8.png | Bin 0 -> 1472 bytes .../Mech/ripley_construction.rsi/ripley9.png | Bin 0 -> 1480 bytes .../ripley_chassis.png | Bin 0 -> 1292 bytes .../ripley_harness+o.png | Bin 0 -> 719 bytes .../ripley_harness.png | Bin 0 -> 718 bytes .../ripley_l_arm+o.png | Bin 0 -> 352 bytes .../ripley_construction.rsi/ripley_l_arm.png | Bin 0 -> 357 bytes .../ripley_l_leg+o.png | Bin 0 -> 359 bytes .../ripley_construction.rsi/ripley_l_leg.png | Bin 0 -> 369 bytes .../ripley_r_arm+o.png | Bin 0 -> 367 bytes .../ripley_construction.rsi/ripley_r_arm.png | Bin 0 -> 380 bytes .../ripley_r_leg+o.png | Bin 0 -> 382 bytes .../ripley_construction.rsi/ripley_r_leg.png | Bin 0 -> 387 bytes 218 files changed, 3956 insertions(+), 34 deletions(-) create mode 100644 Content.Client/Mech/MechAssemblyVisualizerSystem.cs create mode 100644 Content.Client/Mech/MechAssemblyVisualsComponent.cs create mode 100644 Content.Client/Mech/MechComponent.cs create mode 100644 Content.Client/Mech/MechSystem.cs create mode 100644 Content.Client/Mech/Ui/Equipment/MechGrabberUi.cs create mode 100644 Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml create mode 100644 Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml.cs create mode 100644 Content.Client/Mech/Ui/MechBoundUserInterface.cs create mode 100644 Content.Client/Mech/Ui/MechEquipmentControl.xaml create mode 100644 Content.Client/Mech/Ui/MechEquipmentControl.xaml.cs create mode 100644 Content.Client/Mech/Ui/MechMenu.xaml create mode 100644 Content.Client/Mech/Ui/MechMenu.xaml.cs create mode 100644 Content.Server/Construction/Completions/BuildMech.cs create mode 100644 Content.Server/Mech/Components/MechAssemblyComponent.cs create mode 100644 Content.Server/Mech/Components/MechComponent.cs create mode 100644 Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs create mode 100644 Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs create mode 100644 Content.Server/Mech/Systems/MechAssemblySystem.cs create mode 100644 Content.Server/Mech/Systems/MechEquipmentSystem.cs create mode 100644 Content.Server/Mech/Systems/MechSystem.cs create mode 100644 Content.Shared/Interaction/Components/InteractionRelayComponent.cs create mode 100644 Content.Shared/Interaction/SharedInteractionSystem.Relay.cs create mode 100644 Content.Shared/Mech/Components/MechPilotComponent.cs create mode 100644 Content.Shared/Mech/Components/SharedMechComponent.cs create mode 100644 Content.Shared/Mech/EntitySystems/SharedMechSystem.cs create mode 100644 Content.Shared/Mech/Equipment/Components/MechEquipmentComponent.cs create mode 100644 Content.Shared/Mech/MechUI.cs create mode 100644 Content.Shared/Mech/SharedMech.cs create mode 100644 Resources/Audio/Mecha/attributions.yml delete mode 100644 Resources/Audio/Mecha/license.txt create mode 100644 Resources/Audio/Mecha/sound_mecha_hydraulic.ogg create mode 100644 Resources/Audio/Mecha/sound_mecha_powerloader_step.ogg create mode 100644 Resources/Locale/en-US/actions/actions/mech.ftl create mode 100644 Resources/Locale/en-US/mech/mech.ftl create mode 100644 Resources/Prototypes/Actions/mech.yml create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml create mode 100644 Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml create mode 100644 Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml create mode 100644 Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/mechs/ripley_construction.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/mech_parts.yml create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_brute.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_burn.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_toxin.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_defense_mode_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_defense_mode_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_eject.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_internals_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_internals_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_ivanov.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_ivanov_cooldown.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_overload_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_overload_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_phasing_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_phasing_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_savannah.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_savannah_cooldown.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_seat_swap.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_smoke.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_view_stats.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_zoom_off.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_zoom_on.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/meson.png create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/meta.json create mode 100644 Resources/Textures/Interface/Actions/actions_mecha.rsi/strafe.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkhonker-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkhonker-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkhonker.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/deathripley-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/deathripley-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/deathripley.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/durand-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/durand-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/durand.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-empty.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/honker-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/honker-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/honker.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/odysseus-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/odysseus-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/odysseus.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-phase.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/reticence-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/reticence-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/reticence.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-broken-old.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-empty.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g-full-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g-full.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-old.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripleymkii-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripleymkii-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripleymkii.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/seraph-broken.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/seraph-open.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha.rsi/seraph.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_abooster_ccw.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_abooster_proj.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_analyzer.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_bananamrtr.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_carbine.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_diamond_drill.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_disabler.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_drill.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_exting.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_grenadelnchr.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_honker.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_ion.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_kineticgun.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_laser.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_medigun.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_mime.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack_six.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_mousetrapmrtr.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_plasmacutter.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_pulse.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_punching_glove.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_rcd.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_scatter.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_taser.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_teleport.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_uac2.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_weapon_bay.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_wholegen.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_wire.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid_a.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/ripleyupgrade.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/tesla.png create mode 100644 Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/thrusters.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley0.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley1.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley10.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley11.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley12.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley13.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley14.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley15.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley16.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley17.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley18.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley2.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley3.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley4.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley5.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley6.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley7.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley8.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley9.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_chassis.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness+o.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_harness.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_l_arm+o.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_l_arm.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_l_leg+o.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_l_leg.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_arm+o.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_arm.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_leg+o.png create mode 100644 Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_leg.png diff --git a/Content.Client/CartridgeLoader/CartridgeLoaderBoundUserInterface.cs b/Content.Client/CartridgeLoader/CartridgeLoaderBoundUserInterface.cs index aaa17b7976..b7c3b7e22d 100644 --- a/Content.Client/CartridgeLoader/CartridgeLoaderBoundUserInterface.cs +++ b/Content.Client/CartridgeLoader/CartridgeLoaderBoundUserInterface.cs @@ -131,7 +131,7 @@ public abstract class CartridgeLoaderBoundUserInterface : BoundUserInterface private UIFragment? RetrieveCartridgeUI(EntityUid? cartridgeUid) { var component = _entityManager?.GetComponentOrNull(cartridgeUid); - component?.Ui?.Setup(this); + component?.Ui?.Setup(this, cartridgeUid); return component?.Ui; } } diff --git a/Content.Client/CartridgeLoader/Cartridges/NetProbeUi.cs b/Content.Client/CartridgeLoader/Cartridges/NetProbeUi.cs index 7846b120f9..5112a61dc2 100644 --- a/Content.Client/CartridgeLoader/Cartridges/NetProbeUi.cs +++ b/Content.Client/CartridgeLoader/Cartridges/NetProbeUi.cs @@ -14,7 +14,7 @@ public sealed class NetProbeUi : UIFragment return _fragment!; } - public override void Setup(BoundUserInterface userInterface) + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) { _fragment = new NetProbeUiFragment(); } diff --git a/Content.Client/CartridgeLoader/Cartridges/NotekeeperUi.cs b/Content.Client/CartridgeLoader/Cartridges/NotekeeperUi.cs index 74ec1032b1..8f90cd45f7 100644 --- a/Content.Client/CartridgeLoader/Cartridges/NotekeeperUi.cs +++ b/Content.Client/CartridgeLoader/Cartridges/NotekeeperUi.cs @@ -15,7 +15,7 @@ public sealed class NotekeeperUi : UIFragment return _fragment!; } - public override void Setup(BoundUserInterface userInterface) + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) { _fragment = new NotekeeperUiFragment(); _fragment.OnNoteRemoved += note => SendNotekeeperMessage(NotekeeperUiAction.Remove, note, userInterface); diff --git a/Content.Client/Mech/MechAssemblyVisualizerSystem.cs b/Content.Client/Mech/MechAssemblyVisualizerSystem.cs new file mode 100644 index 0000000000..42a2b5f534 --- /dev/null +++ b/Content.Client/Mech/MechAssemblyVisualizerSystem.cs @@ -0,0 +1,24 @@ +using Content.Shared.Mech; +using Robust.Client.GameObjects; + +namespace Content.Client.Mech; + +/// +/// Handles the sprite state changes while +/// constructing mech assemblies. +/// +public sealed class MechAssemblyVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, MechAssemblyVisualsComponent component, + ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if (!args.Component.TryGetData(MechAssemblyVisuals.State, out int stage)) + return; + + var state = component.StatePrefix + stage; + + args.Sprite?.LayerSetState(0, state); + } +} diff --git a/Content.Client/Mech/MechAssemblyVisualsComponent.cs b/Content.Client/Mech/MechAssemblyVisualsComponent.cs new file mode 100644 index 0000000000..6d22db0cb5 --- /dev/null +++ b/Content.Client/Mech/MechAssemblyVisualsComponent.cs @@ -0,0 +1,15 @@ +namespace Content.Client.Mech; + +/// +/// This is used for visualizing mech constructions +/// +[RegisterComponent] +public sealed class MechAssemblyVisualsComponent : Component +{ + /// + /// The prefix that is followed by the number which + /// denotes the current state to use. + /// + [DataField("statePrefix", required: true)] + public string StatePrefix = string.Empty; +} diff --git a/Content.Client/Mech/MechComponent.cs b/Content.Client/Mech/MechComponent.cs new file mode 100644 index 0000000000..7f67f9b5a3 --- /dev/null +++ b/Content.Client/Mech/MechComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.Mech.Components; +using Robust.Shared.GameStates; + +namespace Content.Client.Mech; + +/// +[RegisterComponent, NetworkedComponent] +[ComponentReference(typeof(SharedMechComponent))] +public sealed class MechComponent : SharedMechComponent +{ + +} diff --git a/Content.Client/Mech/MechSystem.cs b/Content.Client/Mech/MechSystem.cs new file mode 100644 index 0000000000..77a23bc26d --- /dev/null +++ b/Content.Client/Mech/MechSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared.Mech; +using Content.Shared.Mech.EntitySystems; +using Robust.Client.GameObjects; +using DrawDepth = Content.Shared.DrawDepth.DrawDepth; + +namespace Content.Client.Mech; + +/// +public sealed class MechSystem : SharedMechSystem +{ + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAppearanceChanged); + } + + private void OnAppearanceChanged(EntityUid uid, MechComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if (!args.Sprite.TryGetLayer((int) MechVisualLayers.Base, out var layer)) + return; + + var state = component.BaseState; + var drawDepth = DrawDepth.Mobs; + if (component.BrokenState != null && args.Component.TryGetData(MechVisuals.Broken, out bool broken) && broken) + { + state = component.BrokenState; + drawDepth = DrawDepth.SmallMobs; + } + else if (component.OpenState != null && args.Component.TryGetData(MechVisuals.Open, out bool open) && open) + { + state = component.OpenState; + drawDepth = DrawDepth.SmallMobs; + } + + layer.SetState(state); + args.Sprite.DrawDepth = (int) drawDepth; + } +} diff --git a/Content.Client/Mech/Ui/Equipment/MechGrabberUi.cs b/Content.Client/Mech/Ui/Equipment/MechGrabberUi.cs new file mode 100644 index 0000000000..6cffba5163 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechGrabberUi.cs @@ -0,0 +1,36 @@ +using Content.Client.UserInterface.Fragments; +using Content.Shared.Mech; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; + +namespace Content.Client.Mech.Ui.Equipment; + +public sealed class MechGrabberUi : UIFragment +{ + private MechGrabberUiFragment? _fragment; + + public override Control GetUIFragmentRoot() + { + return _fragment!; + } + + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) + { + if (fragmentOwner == null) + return; + + _fragment = new MechGrabberUiFragment(); + _fragment.OnEjectAction += e => + { + userInterface.SendMessage(new MechGrabberEjectMessage(fragmentOwner.Value, e)); + }; + } + + public override void UpdateState(BoundUserInterfaceState state) + { + if (state is not MechGrabberUiState grabberState) + return; + + _fragment?.UpdateContents(grabberState); + } +} diff --git a/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml b/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml new file mode 100644 index 0000000000..569dec28c3 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml.cs b/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml.cs new file mode 100644 index 0000000000..8fc04d6460 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechGrabberUiFragment.xaml.cs @@ -0,0 +1,35 @@ +using Content.Shared.Mech; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.Mech.Ui.Equipment; + +[GenerateTypedNameReferences] +public sealed partial class MechGrabberUiFragment : BoxContainer +{ + [Dependency] private readonly IEntityManager _entity = default!; + + public event Action? OnEjectAction; + + public MechGrabberUiFragment() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + } + + public void UpdateContents(MechGrabberUiState state) + { + SpaceLabel.Text = $"{state.Contents.Count}/{state.MaxContents}"; + for (var i = 0; i < state.Contents.Count; i++) + { + var ent = state.Contents[i]; + + if (!_entity.TryGetComponent(ent, out var meta)) + continue; + + ItemList.AddItem(meta.EntityName); + ItemList[i].OnSelected += _ => OnEjectAction?.Invoke(ent); + } + } +} diff --git a/Content.Client/Mech/Ui/MechBoundUserInterface.cs b/Content.Client/Mech/Ui/MechBoundUserInterface.cs new file mode 100644 index 0000000000..a6331554a5 --- /dev/null +++ b/Content.Client/Mech/Ui/MechBoundUserInterface.cs @@ -0,0 +1,84 @@ +using Content.Client.UserInterface.Fragments; +using Content.Shared.Mech; +using JetBrains.Annotations; +using Robust.Client.GameObjects; + +namespace Content.Client.Mech.Ui; + +[UsedImplicitly] +public sealed class MechBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IEntityManager _ent = default!; + + private readonly EntityUid _mech; + + private MechMenu? _menu; + + public MechBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + _mech = owner.Owner; + } + + protected override void Open() + { + base.Open(); + + _menu = new(_mech); + + _menu.OnClose += Close; + _menu.OpenCenteredLeft(); + + _menu.OnRemoveButtonPressed += uid => + { + SendMessage(new MechEquipmentRemoveMessage(uid)); + }; + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is not MechBoundUiState msg) + return; + UpdateEquipmentControls(msg); + _menu?.UpdateMechStats(); + _menu?.UpdateEquipmentView(); + } + + public void UpdateEquipmentControls(MechBoundUiState state) + { + if (!_ent.TryGetComponent(_mech, out var mechComp)) + return; + + foreach (var ent in mechComp.EquipmentContainer.ContainedEntities) + { + var ui = GetEquipmentUi(ent); + if (ui == null) + continue; + foreach (var (attached, estate) in state.EquipmentStates) + { + if (ent == attached) + ui.UpdateState(estate); + } + } + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) + return; + + _menu?.Close(); + } + + public UIFragment? GetEquipmentUi(EntityUid? uid) + { + var component = _ent.GetComponentOrNull(uid); + component?.Ui?.Setup(this, uid); + return component?.Ui; + } +} + diff --git a/Content.Client/Mech/Ui/MechEquipmentControl.xaml b/Content.Client/Mech/Ui/MechEquipmentControl.xaml new file mode 100644 index 0000000000..19263dd3c9 --- /dev/null +++ b/Content.Client/Mech/Ui/MechEquipmentControl.xaml @@ -0,0 +1,26 @@ + + + diff --git a/Content.Client/Mech/Ui/MechEquipmentControl.xaml.cs b/Content.Client/Mech/Ui/MechEquipmentControl.xaml.cs new file mode 100644 index 0000000000..1253890473 --- /dev/null +++ b/Content.Client/Mech/Ui/MechEquipmentControl.xaml.cs @@ -0,0 +1,28 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.Mech.Ui; + +[GenerateTypedNameReferences] +public sealed partial class MechEquipmentControl : Control +{ + public event Action? OnRemoveButtonPressed; + + public MechEquipmentControl(string itemName, SpriteComponent? sprite, Control? fragment) + { + RobustXamlLoader.Load(this); + EquipmentName.SetMessage(itemName); + EquipmentView.Sprite = sprite; + RemoveButton.TexturePath = "/Textures/Interface/Nano/cross.svg.png"; + + if (fragment != null) + { + Separator.Visible = true; + CustomControlContainer.AddChild(fragment); + } + + RemoveButton.OnPressed += _ => OnRemoveButtonPressed?.Invoke(); + } +} diff --git a/Content.Client/Mech/Ui/MechMenu.xaml b/Content.Client/Mech/Ui/MechMenu.xaml new file mode 100644 index 0000000000..2ed82eba15 --- /dev/null +++ b/Content.Client/Mech/Ui/MechMenu.xaml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/Mech/Ui/MechMenu.xaml.cs b/Content.Client/Mech/Ui/MechMenu.xaml.cs new file mode 100644 index 0000000000..7c757c57f3 --- /dev/null +++ b/Content.Client/Mech/Ui/MechMenu.xaml.cs @@ -0,0 +1,72 @@ +using Content.Client.UserInterface.Controls; +using Content.Client.UserInterface.Fragments; +using Content.Shared.Mech.Components; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.Mech.Ui; + +[GenerateTypedNameReferences] +public sealed partial class MechMenu : FancyWindow +{ + [Dependency] private readonly IEntityManager _ent = default!; + + private readonly EntityUid _mech; + + public event Action? OnRemoveButtonPressed; + + public MechMenu(EntityUid mech) + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + + _mech = mech; + + if (!_ent.TryGetComponent(mech, out var sprite)) + return; + + MechView.Sprite = sprite; + } + + public void UpdateMechStats() + { + if (!_ent.TryGetComponent(_mech, out var mechComp)) + return; + + var integrityPercent = mechComp.Integrity / mechComp.MaxIntegrity; + IntegrityDisplayBar.Value = integrityPercent.Float(); + IntegrityDisplay.Text = Loc.GetString("mech-integrity-display", ("amount", (integrityPercent*100).Int())); + + var energyPercent = mechComp.Energy / mechComp.MaxEnergy; + EnergyDisplayBar.Value = energyPercent.Float(); + EnergyDisplay.Text = Loc.GetString("mech-energy-display", ("amount", (energyPercent*100).Int())); + + SlotDisplay.Text = Loc.GetString("mech-slot-display", + ("amount", mechComp.MaxEquipmentAmount - mechComp.EquipmentContainer.ContainedEntities.Count)); + } + + public void UpdateEquipmentView() + { + if (!_ent.TryGetComponent(_mech, out var mechComp)) + return; + + EquipmentControlContainer.Children.Clear(); + foreach (var ent in mechComp.EquipmentContainer.ContainedEntities) + { + if (!_ent.TryGetComponent(ent, out var sprite) || + !_ent.TryGetComponent(ent, out var metaData)) + continue; + + var uicomp = _ent.GetComponentOrNull(ent); + var ui = uicomp?.Ui?.GetUIFragmentRoot(); + + var control = new MechEquipmentControl(metaData.EntityName, sprite, ui); + + control.OnRemoveButtonPressed += () => OnRemoveButtonPressed?.Invoke(ent); + + EquipmentControlContainer.AddChild(control); + } + } +} + diff --git a/Content.Client/UserInterface/Fragments/UIFragment.cs b/Content.Client/UserInterface/Fragments/UIFragment.cs index 5d09754826..afdb105783 100644 --- a/Content.Client/UserInterface/Fragments/UIFragment.cs +++ b/Content.Client/UserInterface/Fragments/UIFragment.cs @@ -18,7 +18,7 @@ public abstract class UIFragment { public abstract Control GetUIFragmentRoot(); - public abstract void Setup(BoundUserInterface userInterface); + public abstract void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner); public abstract void UpdateState(BoundUserInterfaceState state); diff --git a/Content.Server/Construction/Completions/BuildMech.cs b/Content.Server/Construction/Completions/BuildMech.cs new file mode 100644 index 0000000000..ff100538aa --- /dev/null +++ b/Content.Server/Construction/Completions/BuildMech.cs @@ -0,0 +1,71 @@ +using Content.Server.Mech.Components; +using Content.Server.Mech.Systems; +using Content.Server.Power.Components; +using Content.Shared.Construction; +using JetBrains.Annotations; +using Robust.Server.Containers; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Construction.Completions; + +/// +/// Creates the mech entity while transferring all relevant parts inside of it, +/// for right now, the cell that was used in construction. +/// +[UsedImplicitly, DataDefinition] +public sealed class BuildMech : IGraphAction +{ + [DataField("mechPrototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MechPrototype = string.Empty; + + [DataField("container")] + public string Container = "battery-container"; + + public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager) + { + if (!entityManager.TryGetComponent(uid, out ContainerManagerComponent? containerManager)) + { + Logger.Warning($"Mech construct entity {uid} did not have a container manager! Aborting build mech action."); + return; + } + + var containerSystem = entityManager.EntitySysManager.GetEntitySystem(); + var mechSys = entityManager.System(); + + if (!containerSystem.TryGetContainer(uid, Container, out var container, containerManager)) + { + Logger.Warning($"Mech construct entity {uid} did not have the specified '{Container}' container! Aborting build mech action."); + return; + } + + if (container.ContainedEntities.Count != 1) + { + Logger.Warning($"Mech construct entity {uid} did not have exactly one item in the specified '{Container}' container! Aborting build mech action."); + } + + var cell = container.ContainedEntities[0]; + + if (!entityManager.TryGetComponent(cell, out var batteryComponent)) + { + Logger.Warning($"Mech construct entity {uid} had an invalid entity in container \"{Container}\"! Aborting build mech action."); + return; + } + + container.Remove(cell); + + var transform = entityManager.GetComponent(uid); + var mech = entityManager.SpawnEntity(MechPrototype, transform.Coordinates); + + if (entityManager.TryGetComponent(mech, out var mechComp) && mechComp.BatterySlot.ContainedEntity == null) + { + mechSys.InsertBattery(mech, cell, mechComp, batteryComponent); + mechComp.BatterySlot.Insert(cell); + } + + // Delete the original entity. + entityManager.DeleteEntity(uid); + } +} + diff --git a/Content.Server/Mech/Components/MechAssemblyComponent.cs b/Content.Server/Mech/Components/MechAssemblyComponent.cs new file mode 100644 index 0000000000..2d99957a31 --- /dev/null +++ b/Content.Server/Mech/Components/MechAssemblyComponent.cs @@ -0,0 +1,50 @@ +using Content.Shared.Storage.Components; +using Content.Shared.Tag; +using Content.Shared.Tools; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; + +namespace Content.Server.Mech.Components; + +/// +/// A component used to create a mech chassis +/// after the correct parts have been placed inside +/// of it. +/// +/// +/// The actual visualization of the parts being inserted is +/// done via +/// +[RegisterComponent] +public sealed class MechAssemblyComponent : Component +{ + /// + /// The parts needed to be placed within the assembly, + /// stored as a tag and a bool tracking whether or not + /// they're present. + /// + [DataField("requiredParts", required: true, customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + public Dictionary RequiredParts = new(); + + /// + /// The prototype spawned when the assembly is finished + /// + [DataField("finishedPrototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string FinishedPrototype = default!; + + /// + /// The container that stores all of the parts when + /// they're being assembled. + /// + [ViewVariables] + public Container PartsContainer = default!; + + /// + /// The quality of tool needed to remove all the parts + /// from the parts container. + /// + [DataField("qualityNeeded", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string QualityNeeded = "Prying"; +} diff --git a/Content.Server/Mech/Components/MechComponent.cs b/Content.Server/Mech/Components/MechComponent.cs new file mode 100644 index 0000000000..8a9f1c7c2c --- /dev/null +++ b/Content.Server/Mech/Components/MechComponent.cs @@ -0,0 +1,118 @@ +using System.Threading; +using Content.Server.Atmos; +using Content.Shared.Mech.Components; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; + +namespace Content.Server.Mech.Components; + +/// +[RegisterComponent, NetworkedComponent] +[ComponentReference(typeof(SharedMechComponent))] +public sealed class MechComponent : SharedMechComponent +{ + /// + /// How long it takes to enter the mech. + /// + [DataField("entryDelay")] + public float EntryDelay = 3; + + /// + /// How long it takes to pull *another person* + /// outside of the mech. You can exit instantly yourself. + /// + [DataField("exitDelay")] + public float ExitDelay = 3; + + /// + /// How long it takes to pull out the battery. + /// + [DataField("batteryRemovalDelay")] + public float BatteryRemovalDelay = 2; + + public CancellationTokenSource? EntryTokenSource; + + /// + /// Whether or not the mech is airtight. + /// + /// + /// This needs to be redone + /// when mech internals are added + /// + [DataField("airtight"), ViewVariables(VVAccess.ReadWrite)] + public bool Airtight; + + /// + /// The equipment that the mech initially has when it spawns. + /// Good for things like nukie mechs that start with guns. + /// + [DataField("startingEquipment", customTypeSerializer: typeof(PrototypeIdListSerializer))] + public List StartingEquipment = new(); + + /// + /// The battery the mech initially has when it spawns + /// Good for admemes and nukie mechs. + /// + [DataField("startingBattery", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? StartingBattery; + + //TODO: this doesn't support a tank implant for mechs or anything like that + [ViewVariables(VVAccess.ReadWrite)] + public GasMixture Air = new (GasMixVolume); + public const float GasMixVolume = 70f; +} + +/// +/// Event raised when a person successfully enters a mech +/// +public sealed class MechEntryFinishedEvent : EntityEventArgs +{ + public EntityUid User; + + public MechEntryFinishedEvent(EntityUid user) + { + User = user; + } +} + +/// +/// Event raised when a person fails to enter a mech +/// +public sealed class MechEntryCanclledEvent : EntityEventArgs +{ + +} + +/// +/// Event raised when a person successfully removes someone from a mech +/// +public sealed class MechExitFinishedEvent : EntityEventArgs +{ + +} + +/// +/// Event raised when a person fails to remove someone from a mech +/// +public sealed class MechExitCanclledEvent : EntityEventArgs +{ + +} + +/// +/// Event raised when the battery is successfully removed from the mech +/// +public sealed class MechRemoveBatteryFinishedEvent : EntityEventArgs +{ + +} + +/// +/// Event raised when the battery fails to be removed from the mech +/// +public sealed class MechRemoveBatteryCancelledEvent : EntityEventArgs +{ + +} diff --git a/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs new file mode 100644 index 0000000000..77881de7cb --- /dev/null +++ b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs @@ -0,0 +1,74 @@ +using System.Threading; +using Robust.Shared.Audio; +using Robust.Shared.Containers; + +namespace Content.Server.Mech.Equipment.Components; + +/// +/// A piece of mech equipment that grabs entities and stores them +/// inside of a container so large objects can be moved. +/// +[RegisterComponent] +public sealed class MechGrabberComponent : Component +{ + /// + /// The change in energy after each grab. + /// + [DataField("grabEnergyDelta")] + public float GrabEnergyDelta = -30; + + /// + /// How long does it take to grab something? + /// + [DataField("grabDelay")] + public float GrabDelay = 2.5f; + + /// + /// The offset from the mech when an item is dropped. + /// This is here for things like lockers and vendors + /// + [DataField("depositOffset")] + public Vector2 DepositOffset = new(0, -1); + + /// + /// The maximum amount of items that can be fit in this grabber + /// + [DataField("maxContents")] + public int MaxContents = 10; + + /// + /// The sound played when a mech is grabbing something + /// + [DataField("grabSound")] + public SoundSpecifier GrabSound = new SoundPathSpecifier("/Audio/Mecha/sound_mecha_hydraulic.ogg"); + + public IPlayingAudioStream? AudioStream; + + [ViewVariables(VVAccess.ReadWrite)] + public Container ItemContainer = default!; + public CancellationTokenSource? Token; +} + +/// +/// Event raised on the user when the grab is complete. +/// +public sealed class MechGrabberGrabFinishedEvent : EntityEventArgs +{ + /// + /// The thing that was grabbed. + /// + public EntityUid Grabbed; + + public MechGrabberGrabFinishedEvent(EntityUid grabbed) + { + Grabbed = grabbed; + } +} + +/// +/// Event raised on the user when the grab fails +/// +public sealed class MechGrabberGrabCancelledEvent : EntityEventArgs +{ + +} diff --git a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs new file mode 100644 index 0000000000..2cffe2c41f --- /dev/null +++ b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs @@ -0,0 +1,167 @@ +using System.Linq; +using Content.Server.DoAfter; +using Content.Server.Interaction; +using Content.Server.Mech.Components; +using Content.Server.Mech.Equipment.Components; +using Content.Server.Mech.Systems; +using Content.Shared.Interaction; +using Content.Shared.Mech; +using Content.Shared.Mech.Equipment.Components; +using Content.Shared.Wall; +using Robust.Shared.Containers; +using Robust.Shared.Map; + +namespace Content.Server.Mech.Equipment.EntitySystems; + +/// +/// Handles and all related UI logic +/// +public sealed class MechGrabberSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly MechSystem _mech = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly InteractionSystem _interaction = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnGrabberMessage); + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnUiStateReady); + SubscribeLocalEvent(OnEquipmentRemoved); + SubscribeLocalEvent(OnAttemptRemove); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnGrabFinished); + SubscribeLocalEvent(OnGrabCancelled); + } + + private void OnGrabberMessage(EntityUid uid, MechGrabberComponent component, MechEquipmentUiMessageRelayEvent args) + { + if (args.Message is not MechGrabberEjectMessage msg) + return; + + if (!TryComp(uid, out var equipmentComponent) || + equipmentComponent.EquipmentOwner == null) + return; + var mech = equipmentComponent.EquipmentOwner.Value; + + var targetCoords = new EntityCoordinates(mech, component.DepositOffset); + if (!_interaction.InRangeUnobstructed(mech, targetCoords)) + return; + + if (!component.ItemContainer.Contains(msg.Item)) + return; + + RemoveItem(uid, mech, msg.Item, component); + } + + /// + /// Removes an item from the grabber's container + /// + /// The mech grabber + /// The mech it belongs to + /// The item being removed + /// + public void RemoveItem(EntityUid uid, EntityUid mech, EntityUid toRemove, MechGrabberComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.ItemContainer.Remove(toRemove); + var mechxform = Transform(mech); + var xform = Transform(toRemove); + xform.AttachToGridOrMap(); + xform.WorldPosition = mechxform.WorldPosition + mechxform.WorldRotation.RotateVec(component.DepositOffset); + xform.WorldRotation = Angle.Zero; + _mech.UpdateUserInterface(mech); + } + + private void OnEquipmentRemoved(EntityUid uid, MechGrabberComponent component, ref MechEquipmentRemovedEvent args) + { + if (!TryComp(uid, out var equipmentComponent) || + equipmentComponent.EquipmentOwner == null) + return; + var mech = equipmentComponent.EquipmentOwner.Value; + + var allItems = new List(component.ItemContainer.ContainedEntities); + foreach (var item in allItems) + { + RemoveItem(uid, mech, item, component); + } + } + + private void OnAttemptRemove(EntityUid uid, MechGrabberComponent component, ref AttemptRemoveMechEquipmentEvent args) + { + args.Cancelled = component.ItemContainer.ContainedEntities.Any(); + } + + private void OnStartup(EntityUid uid, MechGrabberComponent component, ComponentStartup args) + { + component.ItemContainer = _container.EnsureContainer(uid, "item-container"); + } + + private void OnUiStateReady(EntityUid uid, MechGrabberComponent component, MechEquipmentUiStateReadyEvent args) + { + var state = new MechGrabberUiState + { + Contents = component.ItemContainer.ContainedEntities.ToList(), + MaxContents = component.MaxContents + }; + args.States.Add(uid, state); + } + + private void OnInteract(EntityUid uid, MechGrabberComponent component, InteractNoHandEvent args) + { + if (args.Handled || args.Target == null) + return; + + var xform = Transform(args.Target.Value); + if (xform.Anchored || HasComp(args.Target.Value)) + return; + + if (component.ItemContainer.ContainedEntities.Count >= component.MaxContents) + return; + + if (!TryComp(args.User, out var mech)) + return; + + if (mech.Energy + component.GrabEnergyDelta < 0) + return; + + if (component.Token != null) + return; + + args.Handled = true; + component.Token = new(); + component.AudioStream = _audio.PlayPvs(component.GrabSound, uid); + _doAfter.DoAfter(new DoAfterEventArgs(args.User, component.GrabDelay, component.Token.Token, args.Target, uid) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + UsedFinishedEvent = new MechGrabberGrabFinishedEvent(args.Target.Value), + UserCancelledEvent = new MechGrabberGrabCancelledEvent() + }); + } + + private void OnGrabFinished(EntityUid uid, MechGrabberComponent component, MechGrabberGrabFinishedEvent args) + { + component.Token = null; + + if (!TryComp(uid, out var equipmentComponent) || equipmentComponent.EquipmentOwner == null) + return; + if (!_mech.TryChangeEnergy(equipmentComponent.EquipmentOwner.Value, component.GrabEnergyDelta)) + return; + + component.ItemContainer.Insert(args.Grabbed); + _mech.UpdateUserInterface(equipmentComponent.EquipmentOwner.Value); + } + + private void OnGrabCancelled(EntityUid uid, MechGrabberComponent component, MechGrabberGrabCancelledEvent args) + { + component.AudioStream?.Stop(); + component.Token = null; + } +} diff --git a/Content.Server/Mech/Systems/MechAssemblySystem.cs b/Content.Server/Mech/Systems/MechAssemblySystem.cs new file mode 100644 index 0000000000..d237324102 --- /dev/null +++ b/Content.Server/Mech/Systems/MechAssemblySystem.cs @@ -0,0 +1,64 @@ +using Content.Server.Mech.Components; +using Content.Shared.Interaction; +using Content.Shared.Tag; +using Content.Shared.Tools.Components; +using Robust.Server.Containers; +using Robust.Shared.Containers; + +namespace Content.Server.Mech.Systems; + +/// +/// Handles and the insertion +/// and removal of parts from the assembly. +/// +public sealed class MechAssemblySystem : EntitySystem +{ + [Dependency] private readonly ContainerSystem _container = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInteractUsing); + } + + private void OnInit(EntityUid uid, MechAssemblyComponent component, ComponentInit args) + { + component.PartsContainer = _container.EnsureContainer(uid, "mech-assembly-container"); + } + + private void OnInteractUsing(EntityUid uid, MechAssemblyComponent component, InteractUsingEvent args) + { + if (TryComp(args.Used, out var toolComp) && toolComp.Qualities.Contains(component.QualityNeeded)) + { + foreach (var tag in component.RequiredParts.Keys) + { + component.RequiredParts[tag] = false; + } + _container.EmptyContainer(component.PartsContainer); + return; + } + + if (!TryComp(args.Used, out var tagComp)) + return; + + foreach (var (tag, val) in component.RequiredParts) + { + if (!val && tagComp.Tags.Contains(tag)) + { + component.RequiredParts[tag] = true; + component.PartsContainer.Insert(args.Used); + break; + } + } + + //check to see if we have all the parts + foreach (var val in component.RequiredParts.Values) + { + if (!val) + return; + } + Spawn(component.FinishedPrototype, Transform(uid).Coordinates); + EntityManager.DeleteEntity(uid); + } +} diff --git a/Content.Server/Mech/Systems/MechEquipmentSystem.cs b/Content.Server/Mech/Systems/MechEquipmentSystem.cs new file mode 100644 index 0000000000..a30b740544 --- /dev/null +++ b/Content.Server/Mech/Systems/MechEquipmentSystem.cs @@ -0,0 +1,73 @@ +using Content.Server.DoAfter; +using Content.Server.Mech.Components; +using Content.Server.Popups; +using Content.Shared.Interaction; +using Content.Shared.Mech.Equipment.Components; +using Robust.Shared.Player; + +namespace Content.Server.Mech.Systems; + +/// +/// Handles the insertion of mech equipment into mechs. +/// +public sealed class MechEquipmentSystem : EntitySystem +{ + [Dependency] private readonly MechSystem _mech = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnUsed); + SubscribeLocalEvent(OnFinished); + SubscribeLocalEvent(OnCancelled); + } + + private void OnUsed(EntityUid uid, MechEquipmentComponent component, AfterInteractEvent args) + { + if (component.TokenSource != null) + return; + + if (args.Handled || !args.CanReach || args.Target == null) + return; + + var mech = args.Target.Value; + if (!TryComp(mech, out var mechComp)) + return; + + if (args.User == mechComp.PilotSlot.ContainedEntity) + return; + + if (mechComp.EquipmentContainer.ContainedEntities.Count >= mechComp.MaxEquipmentAmount) + return; + + if (mechComp.EquipmentWhitelist != null && !mechComp.EquipmentWhitelist.IsValid(uid)) + return; + + _popup.PopupEntity(Loc.GetString("mech-equipment-begin-install", ("item", uid)), mech, Filter.Pvs(mech)); + + component.TokenSource = new(); + _doAfter.DoAfter(new DoAfterEventArgs(args.User, component.InstallDuration, component.TokenSource.Token, mech, uid) + { + BreakOnStun = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + UsedFinishedEvent = new MechEquipmentInstallFinished(mech), + UsedCancelledEvent = new MechEquipmentInstallCancelled() + }); + } + + private void OnFinished(EntityUid uid, MechEquipmentComponent component, MechEquipmentInstallFinished args) + { + component.TokenSource = null; + _popup.PopupEntity(Loc.GetString("mech-equipment-finish-install", ("item", uid)), args.Mech, Filter.Pvs(args.Mech)); + + _mech.InsertEquipment(args.Mech, uid); + } + + private void OnCancelled(EntityUid uid, MechEquipmentComponent component, MechEquipmentInstallCancelled args) + { + component.TokenSource = null; + } +} diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs new file mode 100644 index 0000000000..b122e05b90 --- /dev/null +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -0,0 +1,428 @@ +using System.Linq; +using System.Threading; +using Content.Server.Atmos.EntitySystems; +using Content.Server.DoAfter; +using Content.Server.Mech.Components; +using Content.Server.Power.Components; +using Content.Server.Wires; +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Mech; +using Content.Shared.Mech.Components; +using Content.Shared.Mech.EntitySystems; +using Content.Shared.Tools.Components; +using Content.Shared.Verbs; +using Robust.Server.Containers; +using Robust.Server.GameObjects; +using Robust.Shared.Map; + +namespace Content.Server.Mech.Systems; + +/// +public sealed class MechSystem : SharedMechSystem +{ + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly IMapManager _map = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + private ISawmill _sawmill = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + _sawmill = Logger.GetSawmill("mech"); + + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent>(OnAlternativeVerb); + SubscribeLocalEvent(OnOpenUi); + SubscribeLocalEvent(OnEntryFinished); + SubscribeLocalEvent(OnEntryExitCancelled); + SubscribeLocalEvent(OnExitFinished); + SubscribeLocalEvent(OnEntryExitCancelled); + SubscribeLocalEvent(OnRemoveBatteryFinished); + SubscribeLocalEvent(OnRemoveBatteryCancelled); + + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnRemoveEquipmentMessage); + + SubscribeLocalEvent(OnInhale); + SubscribeLocalEvent(OnExhale); + SubscribeLocalEvent(OnExpose); + + #region Equipment UI message relays + SubscribeLocalEvent(RecieveEquipmentUiMesssages); + #endregion + } + + private void OnInteractUsing(EntityUid uid, MechComponent component, InteractUsingEvent args) + { + if (TryComp(uid, out var wires) && !wires.IsPanelOpen) + return; + + if (component.BatterySlot.ContainedEntity == null && TryComp(args.Used, out var battery)) + { + InsertBattery(uid, args.Used, component, battery); + return; + } + + if (component.EntryTokenSource == null && + TryComp(args.Used, out var tool) && + tool.Qualities.Contains("Prying") && + component.BatterySlot.ContainedEntity != null) + { + component.EntryTokenSource = new(); + _doAfter.DoAfter(new DoAfterEventArgs(args.User, component.BatteryRemovalDelay, component.EntryTokenSource.Token, uid, args.Target) + { + BreakOnTargetMove = true, + BreakOnUserMove = true, + TargetFinishedEvent = new MechRemoveBatteryFinishedEvent(), + TargetCancelledEvent = new MechRemoveBatteryCancelledEvent() + }); + } + } + + private void OnRemoveBatteryFinished(EntityUid uid, MechComponent component, MechRemoveBatteryFinishedEvent args) + { + component.EntryTokenSource = null; + + RemoveBattery(uid, component); + } + + private void OnRemoveBatteryCancelled(EntityUid uid, MechComponent component, MechRemoveBatteryCancelledEvent args) + { + component.EntryTokenSource = null; + } + + private void OnMapInit(EntityUid uid, MechComponent component, MapInitEvent args) + { + var xform = Transform(uid); + foreach (var ent in component.StartingEquipment.Select(equipment => Spawn(equipment, xform.Coordinates))) + { + InsertEquipment(uid, ent, component); + } + + component.Integrity = component.MaxIntegrity; + component.Energy = component.MaxEnergy; + + if (component.StartingBattery != null) + { + var battery = Spawn(component.StartingBattery, Transform(uid).Coordinates); + InsertBattery(uid, battery, component); + } + + Dirty(component); + } + + private void OnRemoveEquipmentMessage(EntityUid uid, SharedMechComponent component, MechEquipmentRemoveMessage args) + { + if (!Exists(args.Equipment) || Deleted(args.Equipment)) + return; + + if (!component.EquipmentContainer.ContainedEntities.Contains(args.Equipment)) + return; + + RemoveEquipment(uid, args.Equipment, component); + } + + private void OnOpenUi(EntityUid uid, MechComponent component, MechOpenUiEvent args) + { + args.Handled = true; + ToggleMechUi(uid, component); + } + + private void OnAlternativeVerb(EntityUid uid, MechComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || component.Broken) + return; + + if (CanInsert(uid, args.User, component)) + { + var enterVerb = new AlternativeVerb + { + Text = Loc.GetString("mech-verb-enter"), + Act = () => + { + if (component.EntryTokenSource != null) + return; + component.EntryTokenSource = new CancellationTokenSource(); + _doAfter.DoAfter(new DoAfterEventArgs(args.User, component.EntryDelay, component.EntryTokenSource.Token, uid) + { + BreakOnUserMove = true, + BreakOnStun = true, + TargetFinishedEvent = new MechEntryFinishedEvent(args.User), + TargetCancelledEvent = new MechEntryCanclledEvent() + }); + } + }; + var openUiVerb = new AlternativeVerb //can't hijack someone else's mech + { + Act = () => ToggleMechUi(uid, component, args.User), + Text = Loc.GetString("mech-ui-open-verb") + }; + args.Verbs.Add(enterVerb); + args.Verbs.Add(openUiVerb); + } + else if (!IsEmpty(component)) + { + var ejectVerb = new AlternativeVerb + { + Text = Loc.GetString("mech-verb-exit"), + Priority = 1, // Promote to top to make ejecting the ALT-click action + Act = () => + { + if (component.EntryTokenSource != null) + return; + if (args.User == component.PilotSlot.ContainedEntity) + { + TryEject(uid, component); + return; + } + + component.EntryTokenSource = new CancellationTokenSource(); + _doAfter.DoAfter(new DoAfterEventArgs(args.User, component.ExitDelay, component.EntryTokenSource.Token, uid) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + BreakOnStun = true, + TargetFinishedEvent = new MechExitFinishedEvent(), + TargetCancelledEvent = new MechExitCanclledEvent() + }); + } + }; + args.Verbs.Add(ejectVerb); + } + } + + private void OnEntryFinished(EntityUid uid, MechComponent component, MechEntryFinishedEvent args) + { + component.EntryTokenSource = null; + TryInsert(uid, args.User, component); + } + + private void OnExitFinished(EntityUid uid, MechComponent component, MechExitFinishedEvent args) + { + component.EntryTokenSource = null; + TryEject(uid, component); + } + + private void OnEntryExitCancelled(EntityUid uid, MechComponent component, EntityEventArgs args) + { + component.EntryTokenSource = null; + } + + private void OnDamageChanged(EntityUid uid, SharedMechComponent component, DamageChangedEvent args) + { + var integrity = component.MaxIntegrity - args.Damageable.TotalDamage; + SetIntegrity(uid, integrity, component); + + if (args.DamageIncreased && + args.DamageDelta != null && + component.PilotSlot.ContainedEntity != null) + { + var damage = args.DamageDelta * component.MechToPilotDamageMultiplier; + _damageable.TryChangeDamage(component.PilotSlot.ContainedEntity, damage); + } + } + + private void ToggleMechUi(EntityUid uid, MechComponent? component = null, EntityUid? user = null) + { + if (!Resolve(uid, ref component)) + return; + user ??= component.PilotSlot.ContainedEntity; + if (user == null) + return; + + if (!TryComp(user, out var actor)) + return; + + _ui.TryToggleUi(uid, MechUiKey.Key, actor.PlayerSession); + UpdateUserInterface(uid, component); + } + + private void RecieveEquipmentUiMesssages(EntityUid uid, MechComponent component, T args) where T : MechEquipmentUiMessage + { + var ev = new MechEquipmentUiMessageRelayEvent(args); + var allEquipment = new List(component.EquipmentContainer.ContainedEntities); + foreach (var equipment in allEquipment) + { + if (args.Equipment == equipment) + RaiseLocalEvent(equipment, ev); + } + } + + public override void UpdateUserInterface(EntityUid uid, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + base.UpdateUserInterface(uid, component); + + var ev = new MechEquipmentUiStateReadyEvent(); + foreach (var ent in component.EquipmentContainer.ContainedEntities) + { + RaiseLocalEvent(ent, ev); + } + + var state = new MechBoundUiState + { + EquipmentStates = ev.States + }; + var ui = _ui.GetUi(uid, MechUiKey.Key); + _ui.SetUiState(ui, state); + } + + public override bool TryInsert(EntityUid uid, EntityUid? toInsert, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (!base.TryInsert(uid, toInsert, component)) + return false; + + var mech = (MechComponent) component; + + if (mech.Airtight) + { + var coordinates = Transform(uid).MapPosition; + if (_map.TryFindGridAt(coordinates, out var grid)) + { + var tile = grid.GetTileRef(coordinates); + + if (_atmosphere.GetTileMixture(tile.GridUid, null, tile.GridIndices, true) is {} environment) + { + _atmosphere.Merge(mech.Air, environment.RemoveVolume(MechComponent.GasMixVolume)); + } + } + } + return true; + } + + public override bool TryEject(EntityUid uid, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (!base.TryEject(uid, component)) + return false; + + var mech = (MechComponent) component; + + if (mech.Airtight) + { + var coordinates = Transform(uid).MapPosition; + if (_map.TryFindGridAt(coordinates, out var grid)) + { + var tile = grid.GetTileRef(coordinates); + + if (_atmosphere.GetTileMixture(tile.GridUid, null, tile.GridIndices, true) is {} environment) + { + _atmosphere.Merge(environment, mech.Air); + mech.Air.Clear(); + } + } + } + + return true; + } + + public override void BreakMech(EntityUid uid, SharedMechComponent? component = null) + { + base.BreakMech(uid, component); + + _ui.TryCloseAll(uid, MechUiKey.Key); + } + + public override bool TryChangeEnergy(EntityUid uid, FixedPoint2 delta, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (!base.TryChangeEnergy(uid, delta, component)) + return false; + + var battery = component.BatterySlot.ContainedEntity; + if (battery == null) + return false; + + if (!TryComp(battery, out var batteryComp)) + return false; + + batteryComp.CurrentCharge = batteryComp.CurrentCharge + delta.Float(); + if (batteryComp.CurrentCharge != component.Energy) //if there's a discrepency, we have to resync them + { + _sawmill.Debug($"Battery charge was not equal to mech charge. Battery {batteryComp.CurrentCharge}. Mech {component.Energy}"); + component.Energy = batteryComp.CurrentCharge; + Dirty(component); + } + return true; + } + + public void InsertBattery(EntityUid uid, EntityUid toInsert, MechComponent? component = null, BatteryComponent? battery = null) + { + if (!Resolve(uid, ref component, false)) + return; + + if (!Resolve(toInsert, ref battery, false)) + return; + + component.BatterySlot.Insert(toInsert); + component.Energy = battery.CurrentCharge; + component.MaxEnergy = battery.MaxCharge; + + Dirty(component); + UpdateUserInterface(uid, component); + } + + public void RemoveBattery(EntityUid uid, MechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + _container.EmptyContainer(component.BatterySlot); + component.Energy = 0; + component.MaxEnergy = 0; + + Dirty(component); + UpdateUserInterface(uid, component); + } + + #region Atmos Handling + private void OnInhale(EntityUid uid, MechPilotComponent component, InhaleLocationEvent args) + { + if (!TryComp(component.Mech, out var mech)) + return; + + if (mech.Airtight) + args.Gas = mech.Air; + } + + private void OnExhale(EntityUid uid, MechPilotComponent component, ExhaleLocationEvent args) + { + if (!TryComp(component.Mech, out var mech)) + return; + + if (mech.Airtight) + args.Gas = mech.Air; + } + + private void OnExpose(EntityUid uid, MechPilotComponent component, ref AtmosExposedGetAirEvent args) + { + if (args.Handled) + return; + + if (!TryComp(component.Mech, out var mech)) + return; + + args.Gas = mech.Airtight ? mech.Air : _atmosphere.GetContainingMixture(component.Mech); + + args.Handled = true; + } + #endregion +} diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs index 65244663cb..92b2e17a57 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs @@ -59,9 +59,9 @@ public sealed partial class RevenantSystem private void OnInteract(EntityUid uid, RevenantComponent component, InteractNoHandEvent args) { - var target = args.Target; - if (target == args.User) + if (args.Target == args.User || args.Target == null) return; + var target = args.Target.Value; if (HasComp(target)) { @@ -72,9 +72,6 @@ public sealed partial class RevenantSystem if (!HasComp(target) || !HasComp(target) || HasComp(target)) return; - if (!_interact.InRangeUnobstructed(uid, target)) - return; - args.Handled = true; if (!TryComp(target, out var essence) || !essence.SearchComplete) { diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index de6eb0e5b2..352135be22 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.Emoting; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Item; -using Content.Shared.Movement; using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; using Content.Shared.Speech; @@ -148,7 +147,11 @@ namespace Content.Shared.ActionBlocker public bool CanAttack(EntityUid uid, EntityUid? target = null) { if (_container.IsEntityInContainer(uid)) - return false; + { + var containerEv = new CanAttackFromContainerEvent(uid, target); + RaiseLocalEvent(uid, containerEv); + return containerEv.CanAttack; + } var ev = new AttackAttemptEvent(uid, target); RaiseLocalEvent(uid, ev); diff --git a/Content.Shared/Interaction/Components/InteractionRelayComponent.cs b/Content.Shared/Interaction/Components/InteractionRelayComponent.cs new file mode 100644 index 0000000000..bd8bdf3b88 --- /dev/null +++ b/Content.Shared/Interaction/Components/InteractionRelayComponent.cs @@ -0,0 +1,34 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Interaction.Components; + +/// +/// Relays an entities interactions to another entity. +/// This doesn't raise the same events, but just relays +/// the clicks of the mouse. +/// +[RegisterComponent, NetworkedComponent] +[Access(typeof(SharedInteractionSystem))] +public sealed class InteractionRelayComponent : Component +{ + /// + /// The entity the interactions are being relayed to. + /// + [ViewVariables] + public EntityUid? RelayEntity; +} + +/// +/// Contains network state for +/// +[Serializable, NetSerializable] +public sealed class InteractionRelayComponentState : ComponentState +{ + public EntityUid? RelayEntity; + + public InteractionRelayComponentState(EntityUid? relayEntity) + { + RelayEntity = relayEntity; + } +} diff --git a/Content.Shared/Interaction/Events/AttackAttemptEvent.cs b/Content.Shared/Interaction/Events/AttackAttemptEvent.cs index 014d66d58a..8fd2f75d89 100644 --- a/Content.Shared/Interaction/Events/AttackAttemptEvent.cs +++ b/Content.Shared/Interaction/Events/AttackAttemptEvent.cs @@ -18,4 +18,20 @@ namespace Content.Shared.Interaction.Events Target = target; } } + + /// + /// Raised directed at an entity to check if they can attack while inside of a container. + /// + public sealed class CanAttackFromContainerEvent : EntityEventArgs + { + public EntityUid Uid; + public EntityUid? Target; + public bool CanAttack = false; + + public CanAttackFromContainerEvent(EntityUid uid, EntityUid? target = null) + { + Uid = uid; + Target = target; + } + } } diff --git a/Content.Shared/Interaction/InteractHand.cs b/Content.Shared/Interaction/InteractHand.cs index 00a16e2398..32e250b0f1 100644 --- a/Content.Shared/Interaction/InteractHand.cs +++ b/Content.Shared/Interaction/InteractHand.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using Robust.Shared.Map; namespace Content.Shared.Interaction { @@ -37,44 +38,57 @@ namespace Content.Shared.Interaction } } - public sealed class InteractNoHandEvent : HandledEntityEventArgs, ITargetedInteractEventArgs + /// + /// Low-level interaction event used for entities without hands. + /// + /// + /// SHIT IS CURSED. + /// + //TODO: KILLLLLLL + public sealed class InteractNoHandEvent : HandledEntityEventArgs { /// /// Entity that triggered the interaction. /// - public EntityUid User { get; } + public EntityUid User; /// /// Entity that was interacted on. /// - public EntityUid Target { get; } + public EntityUid? Target; - public InteractNoHandEvent(EntityUid user, EntityUid target) + public EntityCoordinates ClickLocation; + + public InteractNoHandEvent(EntityUid user, EntityUid? target, EntityCoordinates clickLocation) { User = user; Target = target; + ClickLocation = clickLocation; } } /// /// Reverse of the InteractNoHandEvent - raised on what was interacted on, rather than the other way around. /// - public sealed class InteractedNoHandEvent : HandledEntityEventArgs, ITargetedInteractEventArgs + public sealed class InteractedNoHandEvent : HandledEntityEventArgs { /// /// Entity that was interacted on /// - public EntityUid Target { get; } + public EntityUid Target; /// /// Entity that triggered this interaction /// - public EntityUid User { get; } + public EntityUid User; - public InteractedNoHandEvent(EntityUid target, EntityUid user) + public EntityCoordinates ClickLocation; + + public InteractedNoHandEvent(EntityUid target, EntityUid user, EntityCoordinates clickLocation) { Target = target; User = user; + ClickLocation = clickLocation; } } } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.Relay.cs b/Content.Shared/Interaction/SharedInteractionSystem.Relay.cs new file mode 100644 index 0000000000..b8cf4c7b2f --- /dev/null +++ b/Content.Shared/Interaction/SharedInteractionSystem.Relay.cs @@ -0,0 +1,35 @@ +using Content.Shared.Interaction.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared.Interaction; + +public abstract partial class SharedInteractionSystem +{ + public void InitializeRelay() + { + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(EntityUid uid, InteractionRelayComponent component, ref ComponentGetState args) + { + args.State = new InteractionRelayComponentState(component.RelayEntity); + } + + private void OnHandleState(EntityUid uid, InteractionRelayComponent component, ref ComponentHandleState args) + { + if (args.Current is not InteractionRelayComponentState state) + return; + + component.RelayEntity = state.RelayEntity; + } + + public void SetRelay(EntityUid uid, EntityUid? relayEntity, InteractionRelayComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.RelayEntity = relayEntity; + Dirty(component); + } +} diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 568fd6af47..764caaad53 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -40,7 +40,7 @@ namespace Content.Shared.Interaction /// Governs interactions during clicking on entities /// [UsedImplicitly] - public abstract class SharedInteractionSystem : EntitySystem + public abstract partial class SharedInteractionSystem : EntitySystem { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IMapManager _mapManager = default!; @@ -81,6 +81,8 @@ namespace Content.Shared.Interaction .Bind(ContentKeyFunctions.TryPullObject, new PointerInputCmdHandler(HandleTryPullObject)) .Register(); + + InitializeRelay(); } public override void Shutdown() @@ -224,6 +226,11 @@ namespace Content.Shared.Interaction bool checkAccess = true, bool checkCanUse = true) { + if (TryComp(user, out var relay) && relay.RelayEntity is not null) + { + UserInteraction(relay.RelayEntity.Value, coordinates, target, altInteract, checkCanInteract, checkAccess, checkCanUse); + } + if (target != null && Deleted(target.Value)) return; @@ -255,25 +262,25 @@ namespace Content.Shared.Interaction && !CanAccessViaStorage(user, target.Value)) return; + var inRangeUnobstructed = target == null + ? !checkAccess || InRangeUnobstructed(user, coordinates) + : !checkAccess || InRangeUnobstructed(user, target.Value); // permits interactions with wall mounted entities + // Does the user have hands? if (!TryComp(user, out SharedHandsComponent? hands) || hands.ActiveHand == null) { + var ev = new InteractNoHandEvent(user, target, coordinates); + RaiseLocalEvent(user, ev); + if (target != null) { - var ev = new InteractNoHandEvent(user, target.Value); - RaiseLocalEvent(user, ev); - - var interactedEv = new InteractedNoHandEvent(target.Value, user); + var interactedEv = new InteractedNoHandEvent(target.Value, user, coordinates); RaiseLocalEvent(target.Value, interactedEv); DoContactInteraction(user, target.Value, ev); } return; } - var inRangeUnobstructed = target == null - ? !checkAccess || InRangeUnobstructed(user, coordinates) - : !checkAccess || InRangeUnobstructed(user, target.Value); // permits interactions with wall mounted entities - // empty-hand interactions if (hands.ActiveHandEntity is not { } held) { diff --git a/Content.Shared/Mech/Components/MechPilotComponent.cs b/Content.Shared/Mech/Components/MechPilotComponent.cs new file mode 100644 index 0000000000..6095b53f5f --- /dev/null +++ b/Content.Shared/Mech/Components/MechPilotComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Mech.Components; + +/// +/// Attached to entities piloting a +/// +/// +/// Get in the robot, Shinji +/// +[RegisterComponent, NetworkedComponent] +public sealed class MechPilotComponent : Component +{ + /// + /// The mech being piloted + /// + [ViewVariables(VVAccess.ReadWrite)] + public EntityUid Mech; +} + +[Serializable, NetSerializable] +public sealed class MechPilotComponentState : ComponentState +{ + public EntityUid Mech; +} diff --git a/Content.Shared/Mech/Components/SharedMechComponent.cs b/Content.Shared/Mech/Components/SharedMechComponent.cs new file mode 100644 index 0000000000..09196a1ff3 --- /dev/null +++ b/Content.Shared/Mech/Components/SharedMechComponent.cs @@ -0,0 +1,132 @@ +using Content.Shared.Actions.ActionTypes; +using Content.Shared.FixedPoint; +using Content.Shared.Whitelist; +using Robust.Shared.Containers; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Mech.Components; + +/// +/// A large, pilotable machine that has equipment that is +/// powered via an internal battery. +/// +public abstract class SharedMechComponent : Component +{ + /// + /// How much "health" the mech has left. + /// + [ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 Integrity; + + /// + /// The maximum amount of damage the mech can take. + /// + [DataField("maxIntegrity")] + public FixedPoint2 MaxIntegrity = 250; + + /// + /// How much energy the mech has. + /// Derived from the currently inserted battery. + /// + [ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 Energy = 0; + + /// + /// The maximum amount of energy the mech can have. + /// Derived from the currently inserted battery. + /// + [DataField("maxEnergy")] + public FixedPoint2 MaxEnergy = 0; + + /// + /// The slot the battery is stored in. + /// + [ViewVariables] + public ContainerSlot BatterySlot = default!; + + [ViewVariables] + public readonly string BatterySlotId = "mech-battery-slot"; + + /// + /// A multiplier used to calculate how much of the damage done to a mech + /// is transfered to the pilot + /// + [DataField("mechToPilotDamageMultiplier")] + public float MechToPilotDamageMultiplier; + + /// + /// Whether the mech has been destroyed and is no longer pilotable. + /// + [ViewVariables(VVAccess.ReadWrite)] + public bool Broken = false; + + /// + /// The slot the pilot is stored in. + /// + [ViewVariables(VVAccess.ReadWrite)] + public ContainerSlot PilotSlot = default!; + + [ViewVariables] + public readonly string PilotSlotId = "mech-pilot-slot"; + + /// + /// The current selected equipment of the mech. + /// If null, the mech is using just its fists. + /// + [ViewVariables] + public EntityUid? CurrentSelectedEquipment; + + /// + /// The maximum amount of equipment items that can be installed in the mech + /// + [DataField("maxEquipmentAmount")] + public int MaxEquipmentAmount = 3; + + /// + /// A whitelist for inserting equipment items. + /// + [DataField("equipmentWhitelist")] + public EntityWhitelist? EquipmentWhitelist; + + /// + /// A container for storing the equipment entities. + /// + [ViewVariables(VVAccess.ReadWrite)] + public Container EquipmentContainer = default!; + + [ViewVariables] + public readonly string EquipmentContainerId = "mech-equipment-container"; + + #region Action Prototypes + [DataField("mechCycleAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MechCycleAction = "MechCycleEquipment"; + [DataField("mechUiAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MechUiAction = "MechOpenUI"; + [DataField("mechEjectAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string MechEjectAction = "MechEject"; + #endregion + + #region Visualizer States + [DataField("baseState")] + public string? BaseState; + [DataField("openState")] + public string? OpenState; + [DataField("brokenState")] + public string? BrokenState; + #endregion +} + +/// +/// Contains network state for . +/// +[Serializable, NetSerializable] +public sealed class MechComponentState : ComponentState +{ + public FixedPoint2 Integrity; + public FixedPoint2 MaxIntegrity; + public FixedPoint2 Energy; + public FixedPoint2 MaxEnergy; + public EntityUid? CurrentSelectedEquipment; + public bool Broken; +} diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs new file mode 100644 index 0000000000..0420e15b18 --- /dev/null +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -0,0 +1,463 @@ +using System.Linq; +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.ActionBlocker; +using Content.Shared.Actions; +using Content.Shared.Actions.ActionTypes; +using Content.Shared.Body.Components; +using Content.Shared.Destructible; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Components; +using Content.Shared.Interaction.Events; +using Content.Shared.Mech.Components; +using Content.Shared.Mech.Equipment.Components; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.Popups; +using Content.Shared.Weapons.Melee; +using Robust.Shared.Containers; +using Robust.Shared.GameStates; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Shared.Mech.EntitySystems; + +/// +/// Handles all of the interactions, UI handling, and items shennanigans for +/// +public abstract class SharedMechSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + [Dependency] private readonly AccessReaderSystem _access = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] private readonly SharedMoverController _mover = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + SubscribeLocalEvent(OnPilotGetState); + SubscribeLocalEvent(OnPilotHandleState); + + SubscribeLocalEvent(OnToggleEquipmentAction); + SubscribeLocalEvent(OnEjectPilotEvent); + SubscribeLocalEvent(RelayInteractionEvent); + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnDestruction); + SubscribeLocalEvent(OnGetAdditionalAccess); + + SubscribeLocalEvent(OnGetMeleeWeapon); + SubscribeLocalEvent(OnCanAttackFromContainer); + } + + #region State Handling + private void OnGetState(EntityUid uid, SharedMechComponent component, ref ComponentGetState args) + { + args.State = new MechComponentState + { + Integrity = component.Integrity, + MaxIntegrity = component.MaxIntegrity, + Energy = component.Energy, + MaxEnergy = component.MaxEnergy, + CurrentSelectedEquipment = component.CurrentSelectedEquipment, + Broken = component.Broken + }; + } + + private void OnHandleState(EntityUid uid, SharedMechComponent component, ref ComponentHandleState args) + { + if (args.Current is not MechComponentState state) + return; + + component.Integrity = state.Integrity; + component.MaxIntegrity = state.MaxIntegrity; + component.Energy = state.Energy; + component.MaxEnergy = state.MaxEnergy; + component.CurrentSelectedEquipment = state.CurrentSelectedEquipment; + component.Broken = state.Broken; + } + + private void OnPilotGetState(EntityUid uid, MechPilotComponent component, ref ComponentGetState args) + { + args.State = new MechPilotComponentState + { + Mech = component.Mech + }; + } + + private void OnPilotHandleState(EntityUid uid, MechPilotComponent component, ref ComponentHandleState args) + { + if (args.Current is not MechPilotComponentState state) + return; + + component.Mech = state.Mech; + } + #endregion + + private void OnToggleEquipmentAction(EntityUid uid, SharedMechComponent component, MechToggleEquipmentEvent args) + { + if (args.Handled) + return; + args.Handled = true; + CycleEquipment(uid); + } + + private void OnEjectPilotEvent(EntityUid uid, SharedMechComponent component, MechEjectPilotEvent args) + { + if (args.Handled) + return; + args.Handled = true; + TryEject(uid, component); + } + + private void RelayInteractionEvent(EntityUid uid, SharedMechComponent component, InteractNoHandEvent args) + { + var pilot = component.PilotSlot.ContainedEntity; + if (pilot == null) + return; + + if (!_timing.IsFirstTimePredicted) + return; + + if (component.CurrentSelectedEquipment != null) + { + RaiseLocalEvent(component.CurrentSelectedEquipment.Value, args); + } + } + + private void OnStartup(EntityUid uid, SharedMechComponent component, ComponentStartup args) + { + component.PilotSlot = _container.EnsureContainer(uid, component.PilotSlotId); + component.EquipmentContainer = _container.EnsureContainer(uid, component.EquipmentContainerId); + component.BatterySlot = _container.EnsureContainer(uid, component.BatterySlotId); + UpdateAppearance(uid, component); + } + + private void OnDestruction(EntityUid uid, SharedMechComponent component, DestructionEventArgs args) + { + BreakMech(uid, component); + } + + private void OnGetAdditionalAccess(EntityUid uid, SharedMechComponent component, ref GetAdditionalAccessEvent args) + { + var pilot = component.PilotSlot.ContainedEntity; + if (pilot == null) + return; + + args.Entities.Add(pilot.Value); + _access.FindAccessItemsInventory(pilot.Value, out var items); + args.Entities = args.Entities.Union(items).ToHashSet(); + } + + private void SetupUser(EntityUid mech, EntityUid pilot, SharedMechComponent? component = null) + { + if (!Resolve(mech, ref component)) + return; + + var rider = EnsureComp(pilot); + var relay = EnsureComp(pilot); + var irelay = EnsureComp(pilot); + + _mover.SetRelay(pilot, mech, relay); + _interaction.SetRelay(pilot, mech, irelay); + rider.Mech = mech; + Dirty(rider); + + _actions.AddAction(pilot, new InstantAction(_prototype.Index(component.MechCycleAction)), mech); + _actions.AddAction(pilot, new InstantAction(_prototype.Index(component.MechUiAction)), mech); + _actions.AddAction(pilot, new InstantAction(_prototype.Index(component.MechEjectAction)), mech); + } + + private void RemoveUser(EntityUid mech, EntityUid pilot) + { + if (!RemComp(pilot)) + return; + RemComp(pilot); + RemComp(pilot); + + _actions.RemoveProvidedActions(pilot, mech); + } + + /// + /// Destroys the mech, removing the user and ejecting all installed equipment. + /// + /// + /// + public virtual void BreakMech(EntityUid uid, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + TryEject(uid, component); + var equipment = new List(component.EquipmentContainer.ContainedEntities); + foreach (var ent in equipment) + { + RemoveEquipment(uid, ent, component, forced: true); + } + + component.Broken = true; + UpdateAppearance(uid, component); + } + + /// + /// Cycles through the currently selected equipment. + /// + /// + /// + public void CycleEquipment(EntityUid uid, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + var allEquipment = component.EquipmentContainer.ContainedEntities.ToList(); + + var equipmentIndex = -1; + if (component.CurrentSelectedEquipment != null) + { + bool StartIndex(EntityUid u) => u == component.CurrentSelectedEquipment; + equipmentIndex = allEquipment.FindIndex(StartIndex); + } + + equipmentIndex++; + component.CurrentSelectedEquipment = equipmentIndex >= allEquipment.Count + ? null + : allEquipment[equipmentIndex]; + + var popupString = component.CurrentSelectedEquipment != null + ? Loc.GetString("mech-equipment-select-popup", ("item", component.CurrentSelectedEquipment)) + : Loc.GetString("mech-equipment-select-none-popup"); + + if (_timing.IsFirstTimePredicted) + _popup.PopupEntity(popupString, uid, Filter.Pvs(uid)); + Dirty(component); + } + + /// + /// Inserts an equipment item into the mech. + /// + /// + /// + /// + /// + public void InsertEquipment(EntityUid uid, EntityUid toInsert, SharedMechComponent? component = null, MechEquipmentComponent? equipmentComponent = null) + { + if (!Resolve(uid, ref component)) + return; + + if (!Resolve(toInsert, ref equipmentComponent)) + return; + + if (component.EquipmentContainer.ContainedEntities.Count >= component.MaxEquipmentAmount) + return; + + if (component.EquipmentWhitelist != null && !component.EquipmentWhitelist.IsValid(uid)) + return; + + equipmentComponent.EquipmentOwner = uid; + component.EquipmentContainer.Insert(toInsert, EntityManager); + var ev = new MechEquipmentInsertedEvent(uid); + RaiseLocalEvent(toInsert, ref ev); + UpdateUserInterface(uid, component); + } + + /// + /// Removes an equipment item from a mech. + /// + /// + /// + /// + /// + /// Whether or not the removal can be cancelled + public void RemoveEquipment(EntityUid uid, EntityUid toRemove, SharedMechComponent? component = null, MechEquipmentComponent? equipmentComponent = null, bool forced = false) + { + if (!Resolve(uid, ref component)) + return; + + if (!Resolve(toRemove, ref equipmentComponent)) + return; + + if (!forced) + { + var attemptev = new AttemptRemoveMechEquipmentEvent(); + RaiseLocalEvent(toRemove, ref attemptev); + if (attemptev.Cancelled) + return; + } + + equipmentComponent.EquipmentOwner = null; + component.EquipmentContainer.Remove(toRemove, EntityManager); + var ev = new MechEquipmentRemovedEvent(uid); + RaiseLocalEvent(toRemove, ref ev); + + if (component.CurrentSelectedEquipment == toRemove) + CycleEquipment(uid, component); + + UpdateUserInterface(uid, component); + } + + /// + /// Attempts to change the amount of energy in the mech. + /// + /// The mech itself + /// The change in energy + /// + /// If the energy was successfully changed. + public virtual bool TryChangeEnergy(EntityUid uid, FixedPoint2 delta, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (component.Energy + delta < 0) + return false; + + component.Energy = FixedPoint2.Clamp(component.Energy + delta, 0, component.MaxEnergy); + Dirty(component); + UpdateUserInterface(uid, component); + return true; + } + + /// + /// Sets the integrity of the mech. + /// + /// The mech itself + /// The value the integrity will be set at + /// + public void SetIntegrity(EntityUid uid, FixedPoint2 value, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.Integrity = FixedPoint2.Clamp(value, 0, component.MaxIntegrity); + + if (component.Integrity <= 0) + { + BreakMech(uid, component); + } + else if (component.Broken) + { + component.Broken = false; + UpdateAppearance(uid, component); + } + + Dirty(component); + UpdateUserInterface(uid, component); + } + + /// + /// Checks if the pilot is present + /// + /// + /// Whether or not the pilot is present + public bool IsEmpty(SharedMechComponent component) + { + return component.PilotSlot.ContainedEntity == null; + } + + /// + /// Checks if an entity can be inserted into the mech. + /// + /// + /// + /// + /// + public bool CanInsert(EntityUid uid, EntityUid toInsert, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + return IsEmpty(component) && _actionBlocker.CanMove(toInsert) && HasComp(toInsert); + } + + /// + /// Updates the user interface + /// + /// + /// This is defined here so that UI updates can be accessed from shared. + /// + public virtual void UpdateUserInterface(EntityUid uid, SharedMechComponent? component = null) + { + + } + + /// + /// Attempts to insert a pilot into the mech. + /// + /// + /// + /// + /// Whether or not the entity was inserted + public virtual bool TryInsert(EntityUid uid, EntityUid? toInsert, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (toInsert == null || component.PilotSlot.ContainedEntity == toInsert) + return false; + + if (!CanInsert(uid, toInsert.Value, component)) + return false; + + SetupUser(uid, toInsert.Value); + component.PilotSlot.Insert(toInsert.Value, EntityManager); + UpdateAppearance(uid, component); + return true; + } + + /// + /// Attempts to eject the current pilot from the mech + /// + /// + /// + /// Whether or not the pilot was ejected. + public virtual bool TryEject(EntityUid uid, SharedMechComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (component.PilotSlot.ContainedEntity == null) + return false; + + var pilot = component.PilotSlot.ContainedEntity.Value; + + RemoveUser(uid, pilot); + _container.RemoveEntity(uid, pilot); + UpdateAppearance(uid, component); + return true; + } + + private void OnGetMeleeWeapon(EntityUid uid, MechPilotComponent component, GetMeleeWeaponEvent args) + { + if (args.Handled) + return; + + if (!TryComp(component.Mech, out var mech)) + return; + + var weapon = mech.CurrentSelectedEquipment ?? component.Mech; + args.Weapon = weapon; + args.Handled = true; + } + + private void OnCanAttackFromContainer(EntityUid uid, MechPilotComponent component, CanAttackFromContainerEvent args) + { + args.CanAttack = true; + } + + private void UpdateAppearance(EntityUid uid, SharedMechComponent ? component = null, AppearanceComponent? appearance = null) + { + if (!Resolve(uid, ref component, ref appearance, false)) + return; + + _appearance.SetData(uid, MechVisuals.Open, IsEmpty(component), appearance); + _appearance.SetData(uid, MechVisuals.Broken, component.Broken, appearance); + } +} diff --git a/Content.Shared/Mech/Equipment/Components/MechEquipmentComponent.cs b/Content.Shared/Mech/Equipment/Components/MechEquipmentComponent.cs new file mode 100644 index 0000000000..a83f617e5e --- /dev/null +++ b/Content.Shared/Mech/Equipment/Components/MechEquipmentComponent.cs @@ -0,0 +1,45 @@ +using System.Threading; +using Content.Shared.Mech.Components; + +namespace Content.Shared.Mech.Equipment.Components; + +/// +/// A piece of equipment that can be installed into +/// +[RegisterComponent] +public sealed class MechEquipmentComponent : Component +{ + /// + /// How long does it take to install this piece of equipment + /// + [DataField("installDuration")] + public float InstallDuration = 5; + + /// + /// The mech that the equipment is inside of. + /// + [ViewVariables] + public EntityUid? EquipmentOwner; + + public CancellationTokenSource? TokenSource = null; +} + +/// +/// Raised on the equipment when the installation is finished successfully +/// +public sealed class MechEquipmentInstallFinished : EntityEventArgs +{ + public EntityUid Mech; + + public MechEquipmentInstallFinished(EntityUid mech) + { + Mech = mech; + } +} + +/// +/// Raised on the equipment when the installation fails. +/// +public sealed class MechEquipmentInstallCancelled : EntityEventArgs +{ +} diff --git a/Content.Shared/Mech/MechUI.cs b/Content.Shared/Mech/MechUI.cs new file mode 100644 index 0000000000..381760166b --- /dev/null +++ b/Content.Shared/Mech/MechUI.cs @@ -0,0 +1,102 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Mech; + +[Serializable, NetSerializable] +public enum MechUiKey : byte +{ + Key +} + +/// +/// Event raised to collect BUI states for each of the mech's equipment items +/// +public sealed class MechEquipmentUiStateReadyEvent : EntityEventArgs +{ + public Dictionary States = new(); +} + +/// +/// Event raised to relay an equipment ui message +/// +public sealed class MechEquipmentUiMessageRelayEvent : EntityEventArgs +{ + public MechEquipmentUiMessage Message; + + public MechEquipmentUiMessageRelayEvent(MechEquipmentUiMessage message) + { + Message = message; + } +} + +/// +/// UI event raised to remove a piece of equipment from a mech +/// +[Serializable, NetSerializable] +public sealed class MechEquipmentRemoveMessage : BoundUserInterfaceMessage +{ + public EntityUid Equipment; + + public MechEquipmentRemoveMessage(EntityUid equipment) + { + Equipment = equipment; + } +} + +/// +/// base for all mech ui messages +/// +[Serializable, NetSerializable] +public abstract class MechEquipmentUiMessage : BoundUserInterfaceMessage +{ + public EntityUid Equipment; +} + +/// +/// event raised for the grabber equipment to eject an item from it's storage +/// +[Serializable, NetSerializable] +public sealed class MechGrabberEjectMessage : MechEquipmentUiMessage +{ + public EntityUid Item; + + public MechGrabberEjectMessage(EntityUid equipment, EntityUid uid) + { + Equipment = equipment; + Item = uid; + } +} + +/// +/// BUI state for mechs that also contains all equipment ui states. +/// +/// +/// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⢐⠤⢃⢰⠐⡄⣀⠀⠀ +/// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⣨⠀⢁⠁⠐⡐⠠⠜⠐⠀ +/// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠔⠐⢀⡁⣀⠔⡌⠡⢀⢐⠁⠀ +/// ⠀⠀⠀⠀⢀⠔⠀⡂⡄⠠⢀⡀⠀⣄⡀⠠⠤⠴⡋⠑⡠⠀⠔⠐⢂⠕⢀⡂⠀⠀ +/// ⠀⠀⠀⡔⠁⠠⡐⠁⠀⠀⠀⢘⠀⠀⠀⠀⠠⠀⠈⠪⠀⠑⠡⣃⠈⠤⡈⠀⠀⠀ +/// ⠀⠀⠨⠀⠄⡒⠀⡂⢈⠀⣀⢌⠀⠀⠁⡈⠀⢆⢀⠀⡀⠉⠒⢆⠑⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⡁⠐⠠⠐⡀⠀⢀⣀⠣⡀⠢⡀⠀⢀⡃⠰⠀⠈⠠⢁⠎⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⠅⠒⣈⢣⠠⠈⠕⠁⠱⠄⢤⠈⠪⠡⠎⢘⠈⡁⢙⠈⠀⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⠃⠀⢡⠀⠧⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢕⡈⠌⠀⠀⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⠀⠀⠀⠈⡀⡀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⠀⠀⠀⠀⢈⢂⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⡃⠀⠀⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⠀⠀⠀⠀⠀⠎⠐⢅⠀⠀⠀⠀⠀⠀⠀⠀⠀⢐⠅⠚⠄⠀⠀⠀⠀⠀⠀⠀ +/// ⠀⠀⢈⠩⠈⠀⠐⠁⠀⢀⠀⠄⡂⠒⠐⠀⠆⠁⠰⠠⠀⢅⠈⠐⠄⢁⢡⠀⠀⠀ +/// ⠀⠀⢈⡀⠰⡁⠀⠁⠴⠁⠔⠀⠀⠄⠄⡁⠀⠂⠀⠢⠠⠁⠀⠠⠈⠂⠬⠀⠀⠀ +/// ⠀⠀⠠⡂⢄⠤⠒⣁⠐⢕⢀⡈⡐⡠⠄⢐⠀⠈⠠⠈⡀⠂⢀⣀⠰⠁⠠⠀⠀ +/// trojan horse bui state⠀ +/// +[Serializable, NetSerializable] +public sealed class MechBoundUiState : BoundUserInterfaceState +{ + public Dictionary EquipmentStates = new(); +} + +[Serializable, NetSerializable] +public sealed class MechGrabberUiState : BoundUserInterfaceState +{ + public List Contents = new(); + public int MaxContents; +} diff --git a/Content.Shared/Mech/SharedMech.cs b/Content.Shared/Mech/SharedMech.cs new file mode 100644 index 0000000000..19a0aa9313 --- /dev/null +++ b/Content.Shared/Mech/SharedMech.cs @@ -0,0 +1,62 @@ +using Content.Shared.Actions; +using Robust.Shared.Serialization; + +namespace Content.Shared.Mech; + +[Serializable, NetSerializable] +public enum MechVisuals : byte +{ + Open, //whether or not it's open and has a rider + Broken //if it broke and no longer works. +} + +[Serializable, NetSerializable] +public enum MechAssemblyVisuals : byte +{ + State +} + +[Serializable, NetSerializable] +public enum MechVisualLayers : byte +{ + Base +} + +/// +/// Event raised on equipment when it is inserted into a mech +/// +[ByRefEvent] +public readonly record struct MechEquipmentInsertedEvent(EntityUid Mech) +{ + public readonly EntityUid Mech = Mech; +} + +/// +/// Event raised on equipment when it is removed from a mech +/// +[ByRefEvent] +public readonly record struct MechEquipmentRemovedEvent(EntityUid Mech) +{ + public readonly EntityUid Mech = Mech; +} + +/// +/// Raised on the mech equipment before it is going to be removed. +/// +[ByRefEvent] +public record struct AttemptRemoveMechEquipmentEvent() +{ + public bool Cancelled = false; +} + +public sealed class MechToggleEquipmentEvent : InstantActionEvent +{ +} + +public sealed class MechOpenUiEvent : InstantActionEvent +{ +} + +public sealed class MechEjectPilotEvent : InstantActionEvent +{ +} diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 6c965a8f27..328b2b5e0d 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -17,6 +17,7 @@ using Robust.Shared.Physics.Controllers; using Robust.Shared.Timing; using Robust.Shared.Utility; using System.Diagnostics.CodeAnalysis; +using Content.Shared.Mech.Components; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; @@ -414,6 +415,12 @@ namespace Content.Shared.Movement.Systems mobMover.StepSoundDistance -= distanceNeeded; + if (TryComp(mover.Owner, out var moverModifier)) + { + sound = moverModifier.Sound; + return true; + } + if (_inventory.TryGetSlotEntity(mover.Owner, "shoes", out var shoes) && EntityManager.TryGetComponent(shoes, out var modifier)) { diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 82bcd1f77e..ffaa3246f3 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -130,6 +130,15 @@ public sealed class MeleeWeaponComponent : Component public SoundSpecifier NoDamageSound { get; set; } = new SoundPathSpecifier("/Audio/Weapons/tap.ogg"); } +/// +/// Event raised on entity in GetWeapon function to allow systems to manually +/// specify what the weapon should be. +/// +public sealed class GetMeleeWeaponEvent : HandledEntityEventArgs +{ + public EntityUid? Weapon; +} + [Serializable, NetSerializable] public sealed class MeleeWeaponComponentState : ComponentState { diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index b9ae509a1d..1e01b2a141 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -19,7 +19,6 @@ using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Physics; using Robust.Shared.Physics.Systems; -using Robust.Shared.Player; using Robust.Shared.Players; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -227,6 +226,13 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem { MeleeWeaponComponent? melee; + var ev = new GetMeleeWeaponEvent(); + RaiseLocalEvent(entity, ev); + if (ev.Handled) + { + return EntityManager.GetComponentOrNull(ev.Weapon); + } + // Use inhands entity if we got one. if (EntityManager.TryGetComponent(entity, out SharedHandsComponent? hands) && hands.ActiveHandEntity is { } held) diff --git a/Resources/Audio/Mecha/attributions.yml b/Resources/Audio/Mecha/attributions.yml new file mode 100644 index 0000000000..2330e20ad9 --- /dev/null +++ b/Resources/Audio/Mecha/attributions.yml @@ -0,0 +1,12 @@ +- files: ["mechmove03.ogg"] + license: "CC-BY-NC-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0" +- files: ["sound_mecha_hydraulic.ogg"] + license: "CC-BY-NC-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/commit/45123dd06cb6dc7c56e8004c528230682ea559b2" +- files: ["sound_mecha_powerloader_step.ogg"] + license: "CC-BY-NC-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/commit/45123dd06cb6dc7c56e8004c528230682ea559b2" \ No newline at end of file diff --git a/Resources/Audio/Mecha/license.txt b/Resources/Audio/Mecha/license.txt deleted file mode 100644 index 85e55229b4..0000000000 --- a/Resources/Audio/Mecha/license.txt +++ /dev/null @@ -1 +0,0 @@ -mechmove03.ogg taken from TG station at commit https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0 \ No newline at end of file diff --git a/Resources/Audio/Mecha/sound_mecha_hydraulic.ogg b/Resources/Audio/Mecha/sound_mecha_hydraulic.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3281ed2dc0f04f79fe314f8ff9ee7b82ccd8ebfd GIT binary patch literal 27124 zcmagF1z29cvM;<|+@ZLY;ts{F#ogWAU5XY8lmewV6e#ZQ?(XgsFAl|}c!9#V=zs5X z_IK`m&RtJPvob4_Wac-MNt##D(oz+G0{->nQ~gt*NKb}?kU-oWolUG=o~s~YrT_ZG z1M;`f2vK})`Crd-%V)}*g()7!o2UQZGX(t)BLYG-Yt@s~ZRG$|Vk zD;oH)le4*txq~a+Gj9m&KTYXGL^U7)0$9T;N80B%8LbWg7yw{INrx6| zAx)PTmqqKD7$@~y>SGB>j0@?*Hw|a)|93{pVTJ<$Fn}K|Vr0%wX`69gOMIG0=S*H} z1)c&@_)z6_Uc~MzYEy^&+I(AwaXKmlRBc!Ql#7rQ*=KB(=gcISEC?UWz7RVPk`<&n zBheRT`XjLok_O1J?dQfS@a-4oMDiWb)=r8bGu2MZ$g$39n3lJ}>3h43^X{hpD?|J{ z4^nU}B5(v|7$OMI?1Sm@6P-a;|4fS%@B^m_NPfkZuEHLvA|9KfR6J)?#^Rh}7gtr2 zR|g+AeNA`sd3U#YcOUJ<&$^91+Kr!e7e4FXd^W}p`d7O3S-W{of2U3g0Wv9g{Z(_g%R6Cq2p zh_~@WV2?KbD;7VHEq)e)D9S%Qfgc2CZIdQXCSQ#4q9yNS7GbB%bcLv;&@>e#ru@~Q z-8jJ(s7t!xq`u6g$z+#tX_Vx=e@dR1Dez@Q(_kIJZYo+ofid`<^>i|P(V`aER(mq} zXJHdISPF?tp{Z+9`-k7ZU{Pd{I^M;*0k#NPO0jK1)CWty%~DUs5TEP*CwzoJy%{gy z_ow-j`b5H+V3XyO#ge#2p~Ysh4$|e4L_|u+6a^@$5YXhg`v09dDF6gw{6+D!+!^J>i&)R&1Azsk`1lE694geZW;9r}JGYMxMNDWXBLHtL-|F)cW*aKgQ zhrUwER#VDPGmf2eC|+<(VTmhq$gAS$PvN-D;F_y)>CbSQ�Tvx|=W7o9j0CXxIPC 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 Y0Px@1z?|Gxl7|7W5k}1^heBJZ0d-haEC2ui literal 0 HcmV?d00001 diff --git a/Resources/Audio/Mecha/sound_mecha_powerloader_step.ogg b/Resources/Audio/Mecha/sound_mecha_powerloader_step.ogg new file mode 100644 index 0000000000000000000000000000000000000000..538ba1efed312708b1796212b049aa16c6fb6de8 GIT binary patch literal 8152 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 Ju0RsZ{}1lnGYS9z literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/actions/actions/mech.ftl b/Resources/Locale/en-US/actions/actions/mech.ftl new file mode 100644 index 0000000000..7acef18358 --- /dev/null +++ b/Resources/Locale/en-US/actions/actions/mech.ftl @@ -0,0 +1,8 @@ +action-name-mech-cycle = Cycle +action-description-mech-cycle = Cycles currently selected equipment + +action-name-mech-control-panel = Control Panel +action-description-mech-control-panel = Opens the control panel for the mech + +action-name-mech-eject = Eject +action-description-mech-eject = Ejects the pilot from the mech \ No newline at end of file diff --git a/Resources/Locale/en-US/mech/mech.ftl b/Resources/Locale/en-US/mech/mech.ftl new file mode 100644 index 0000000000..faf3ef3661 --- /dev/null +++ b/Resources/Locale/en-US/mech/mech.ftl @@ -0,0 +1,16 @@ +mech-verb-enter = Enter +mech-verb-exit = Exit + +mech-equipment-begin-install = Installing the {THE($item)}... +mech-equipment-finish-install = Finished installing the {THE($item)} + +mech-equipment-select-popup = {$item} selected +mech-equipment-select-none-popup = Nothing selected + +mech-ui-open-verb = Open control panel + +mech-menu-title = mech control panel + +mech-integrity-display = Integrity: {$amount}% +mech-energy-display = Energy: {$amount}% +mech-slot-display = Open Slots: {$amount} \ No newline at end of file diff --git a/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl b/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl index 172003b480..aca0ea08ad 100644 --- a/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl +++ b/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl @@ -76,5 +76,8 @@ technologies-robotics-technology-description = Parts needed for constructing mec technologies-archaeology = Archeological equipment technologies-archaeology-description = Advanced equipment for uncovering the secrets of artifacts. -technologies-adv-parts-technology = Advanced parts technology -technologies-adv-parts-technology-description = Like the previous ones, but better! \ No newline at end of file +technologies-ripley-technology = Exosuit: Ripley +technologies-ripley-technology-description = The latest and greatest in mechanized cargo construction. + +technologies-adv-parts-technology-description = Like the previous ones, but better! +technologies-adv-parts-technology = Advanced parts technology \ No newline at end of file diff --git a/Resources/Prototypes/Actions/mech.yml b/Resources/Prototypes/Actions/mech.yml new file mode 100644 index 0000000000..f070f006d6 --- /dev/null +++ b/Resources/Prototypes/Actions/mech.yml @@ -0,0 +1,31 @@ +- type: instantAction + id: MechCycleEquipment + name: action-name-mech-cycle + description: action-description-mech-cycle + itemIconStyle: NoItem + icon: + sprite: Interface/Actions/actions_mecha.rsi + state: mech_cycle_equip_on + event: !type:MechToggleEquipmentEvent + useDelay: 0.5 + +- type: instantAction + id: MechOpenUI + name: action-name-mech-control-panel + description: action-description-mech-control-panel + itemIconStyle: NoItem + icon: + sprite: Interface/Actions/actions_mecha.rsi + state: mech_view_stats + event: !type:MechOpenUiEvent + useDelay: 1 + +- type: instantAction + id: MechEject + name: action-name-mech-eject + description: action-description-mech-eject + itemIconStyle: NoItem + icon: + sprite: Interface/Actions/actions_mecha.rsi + state: mech_eject + event: !type:MechEjectPilotEvent \ No newline at end of file diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index 6c37a9f899..244e5fb0af 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -125,4 +125,4 @@ description: action-desc-wake icon: { sprite: Objects/Consumable/Food/egg.rsi, state: icon } checkCanInteract: false - event: !type:WakeActionEvent + event: !type:WakeActionEvent \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Research/technologies.yml b/Resources/Prototypes/Catalog/Research/technologies.yml index 9c79bb6ef9..50453e5111 100644 --- a/Resources/Prototypes/Catalog/Research/technologies.yml +++ b/Resources/Prototypes/Catalog/Research/technologies.yml @@ -259,6 +259,26 @@ #TODO- Gyroscope #TODO- Thruster +- type: technology + name: technologies-ripley-technology + id: RipleyTechnology + description: technologies-ripley-technology-description + icon: + sprite: Objects/Specific/Mech/mecha.rsi + state: ripley + requiredPoints: 30000 + requiredTechnologies: + - SalvageEquipment + unlockedRecipes: + - RipleyCentralElectronics + - RipleyPeripheralsElectronics + - MechEquipmentGrabber + - RipleyHarness + - RipleyLArm + - RipleyRArm + - RipleyLLeg + - RipleyRLeg + # Industrial Engineering Technology Tree - type: technology diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml new file mode 100644 index 0000000000..0ea4629adb --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml @@ -0,0 +1,25 @@ +- type: entity + id: RipleyCentralElectronics + parent: BaseElectronics + name: ripley central control module + description: The electrical control center for the ripley mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mainboard + - type: Tag + tags: + - RipleyCentralControlModule + +- type: entity + id: RipleyPeripheralsElectronics + parent: BaseElectronics + name: ripley peripherals control module + description: The electrical peripherals control for the ripley mech. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: id_mod + - type: Tag + tags: + - RipleyPeripheralsControlModule \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml new file mode 100644 index 0000000000..27024cc3ae --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml @@ -0,0 +1,150 @@ +- type: entity + id: BaseMechPart + abstract: true + components: + - type: Clickable + - type: InteractionOutline + - type: CollisionWake + - type: TileFrictionModifier + modifier: 0.5 + - type: Physics + bodyType: Dynamic + fixedRotation: false + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 100 + mask: + - ItemMask + restitution: 0.3 # fite me + friction: 0.2 + - type: Pullable + - type: Sprite + drawdepth: Items + noRot: false + netsync: false + sprite: Objects/Specific/Mech/ripley_construction.rsi + +- type: entity + id: BaseMechPartItem + parent: BaseMechPart + abstract: true + components: + - type: Item + size: 50 + +- type: entity + id: BaseMechConstruct + parent: BaseMechPart + abstract: true + components: + - type: Appearance + - type: ContainerContainer + containers: + battery-container: !type:Container + - type: MechAssemblyVisuals + statePrefix: ripley + +- type: entity + parent: BaseMechPart + id: RipleyHarness + name: ripley harness + description: The core of the ripley mech + components: + - type: Appearance + - type: ItemMapper + mapLayers: + ripley_l_arm+o: + whitelist: + tags: + - RipleyLArm + ripley_r_arm+o: + whitelist: + tags: + - RipleyRArm + ripley_l_leg+o: + whitelist: + tags: + - RipleyLLeg + ripley_r_leg+o: + whitelist: + tags: + - RipleyRLeg + sprite: Objects/Specific/Mech/ripley_construction.rsi + - type: ContainerContainer + containers: + mech-assembly-container: !type:Container + - type: MechAssembly + finishedPrototype: RipleyChassis + requiredParts: + RipleyLArm: false + RipleyRArm: false + RipleyLLeg: false + RipleyRLeg: false + - type: Sprite + state: ripley_harness+o + noRot: true + +- type: entity + parent: BaseMechPartItem + id: RipleyLArm + name: ripley left arm + description: Ripley mech left arm + components: + - type: Sprite + state: ripley_l_arm + - type: Tag + tags: + - RipleyLArm + +- type: entity + parent: BaseMechPartItem + id: RipleyLLeg + name: ripley left leg + description: Ripley mech left leg + components: + - type: Sprite + state: ripley_l_leg + - type: Tag + tags: + - RipleyLLeg + +- type: entity + parent: BaseMechPartItem + id: RipleyRLeg + name: ripley right leg + description: Ripley mech right leg + components: + - type: Sprite + state: ripley_r_leg + - type: Tag + tags: + - RipleyRLeg + +- type: entity + parent: BaseMechPartItem + id: RipleyRArm + name: ripley right arm + description: Ripley mech right arm + components: + - type: Sprite + state: ripley_r_arm + - type: Tag + tags: + - RipleyRArm + +- type: entity + id: RipleyChassis + parent: BaseMechConstruct + name: ripley chassis + description: An in-progress construction of a ripley mech. + components: + - type: Sprite + noRot: true + state: ripley0 + - type: Construction + graph: Ripley + node: start + defaultTarget: ripley \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml new file mode 100644 index 0000000000..fbbc13ddfb --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml @@ -0,0 +1,26 @@ +- type: entity + parent: BaseItem + id: BaseMechEquipment + abstract: true + components: + - type: Sprite + sprite: Objects/Specific/Mech/mecha_equipment.rsi + - type: Item + sprite: Objects/Specific/Mech/mecha_equipment.rsi + size: 50 + - type: MechEquipment + +- type: entity + id: MechEquipmentGrabber + parent: BaseMechEquipment + name: hydraulic clamp + description: Gives the mech the ability to grab things and drag them around. + components: + - type: Sprite + state: mecha_clamp + - type: MechGrabber + - type: UIFragment + ui: !type:MechGrabberUi + - type: ContainerContainer + containers: + item-container: !type:Container \ 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 new file mode 100644 index 0000000000..370216e66d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -0,0 +1,100 @@ +- type: entity + id: BaseMech + save: false + abstract: true + components: + - type: Sprite + netsync: false + drawdepth: Mobs + noRot: true + sprite: Objects/Specific/Mech/mecha.rsi + layers: + - map: [ "enum.MechVisualLayers.Base" ] + state: ripley + - type: MobMover + - type: Mech + baseState: ripley + openState: ripley-open + brokenState: ripley-broken + - type: DoAfter + - type: Repairable + fuelCost: 25 + doAfterDelay: 10 + - type: UserInterface + interfaces: + - key: enum.MechUiKey.Key + type: MechBoundUserInterface + - type: MeleeWeapon + hidden: true + attackRate: 0.75 + damage: + types: + Blunt: 25 #thwack + Structural: 20 + - type: Puller + needsHands: false + - type: InputMover + - type: InteractionOutline + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 2 + - type: Tag + tags: + - DoorBumpOpener + - FootstepSound + - type: Pullable + - type: Physics + bodyType: KinematicController + - type: Clickable + - type: Wires #we just want the panel + BoardName: Mech + LayoutId: Mech + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeCircle + radius: 0.45 + density: 1000 + mask: + - MobMask + layer: + - MobLayer + - type: Appearance + - type: ContainerContainer + containers: + mech-pilot-slot: !type:ContainerSlot + mech-equipment-container: !type:Container + mech-battery-slot: !type:ContainerSlot + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/mechmove03.ogg + +- type: entity + id: MechRipley + parent: BaseMech + name: ripley + description: Cargo's favorite robotic box hauling friend. + components: + - type: FootstepModifier + footstepSoundCollection: + path: /Audio/Mecha/sound_mecha_powerloader_step.ogg + - type: Mech + baseState: ripley + openState: ripley-open + brokenState: ripley-broken + mechToPilotDamageMultiplier: 0.5 + +- type: entity + id: MechRipleyBattery + parent: MechRipley + suffix: Battery + components: + - type: Mech + baseState: ripley + openState: ripley-open + brokenState: ripley-broken + startingBattery: PowerCellHigh + mechToPilotDamageMultiplier: 0.5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 89921de674..885bd03f33 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -290,6 +290,8 @@ - CloningConsoleComputerCircuitboard - StasisBedMachineCircuitboard - OreProcessorMachineCircuitboard + - RipleyCentralElectronics + - RipleyPeripheralsElectronics - GeneratorPlasmaMachineCircuitboard - GeneratorUraniumMachineCircuitboard - WallmountGeneratorElectronics @@ -334,6 +336,12 @@ - ProximitySensor - LeftArmBorg - RightArmBorg + - RipleyHarness + - RipleyLArm + - RipleyRArm + - RipleyLLeg + - RipleyRLeg + - MechEquipmentGrabber - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/mechs/ripley_construction.yml b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/ripley_construction.yml new file mode 100644 index 0000000000..659a0360ca --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/ripley_construction.yml @@ -0,0 +1,125 @@ +- type: constructionGraph + id: Ripley + start: start + graph: + - node: start + edges: + - to: ripley + 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: 12 + +#i omitted the steps involving inserting machine parts because +#currently mechs don't support upgrading. add them back in once that's squared away. + + - 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: 13 + + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 14 + + - 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 + + - material: MetalRod + amount: 10 + completed: + - !type:VisualizerDataInt + key: "enum.MechAssemblyVisuals.State" + data: 18 + + - tool: Welding + doAfter: 1 + + - node: ripley + actions: + - !type:BuildMech + mechPrototype: MechRipley \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index d0520bffb9..2cef6729fe 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -280,6 +280,27 @@ Steel: 100 Glass: 900 Gold: 100 + +- type: latheRecipe + id: RipleyCentralElectronics + icon: Objects/Misc/module.rsi/mainboard.png + result: RipleyCentralElectronics + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 + +- type: latheRecipe + id: RipleyPeripheralsElectronics + icon: Objects/Misc/module.rsi/id_mod.png + result: RipleyPeripheralsElectronics + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 + # Power - type: latheRecipe id: APCElectronics diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml new file mode 100644 index 0000000000..47a238f885 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml @@ -0,0 +1,65 @@ +- type: latheRecipe + id: RipleyHarness + icon: + sprite: Objects/Specific/Mech/ripley_construction.rsi + state: ripley_harness + result: RipleyHarness + completetime: 10 + materials: + Steel: 3000 + Glass: 1200 + +- type: latheRecipe + id: RipleyLArm + icon: + sprite: Objects/Specific/Mech/ripley_construction.rsi + state: ripley_l_arm + result: RipleyLArm + completetime: 10 + materials: + Steel: 3000 + Glass: 1200 + +- type: latheRecipe + id: RipleyLLeg + icon: + sprite: Objects/Specific/Mech/ripley_construction.rsi + state: ripley_l_leg + result: RipleyLLeg + completetime: 10 + materials: + Steel: 3000 + Glass: 1200 + +- type: latheRecipe + id: RipleyRLeg + icon: + sprite: Objects/Specific/Mech/ripley_construction.rsi + state: ripley_r_leg + result: RipleyRLeg + completetime: 10 + materials: + Steel: 3000 + Glass: 1200 + +- type: latheRecipe + id: RipleyRArm + icon: + sprite: Objects/Specific/Mech/ripley_construction.rsi + state: ripley_r_arm + result: RipleyRArm + completetime: 10 + materials: + Steel: 3000 + Glass: 1200 + +- type: latheRecipe + id: MechEquipmentGrabber + icon: + sprite: Objects/Specific/Mech/mecha_equipment.rsi + state: mecha_clamp + result: MechEquipmentGrabber + completetime: 10 + materials: + Steel: 500 + Plastic: 200 \ No newline at end of file diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index d07c878fca..5fda8238c0 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -458,12 +458,30 @@ - type: Tag id: RawMaterial +- type: Tag + id: RCDDeconstructWhitelist + # Give this to something that doesn't need any special recycler behavior and just needs deleting. - type: Tag id: Recyclable - type: Tag - id: RCDDeconstructWhitelist + id: RipleyCentralControlModule + +- type: Tag + id: RipleyPeripheralsControlModule + +- type: Tag + id: RipleyLArm + +- type: Tag + id: RipleyLLeg + +- type: Tag + id: RipleyRLeg + +- type: Tag + id: RipleyRArm - type: Tag id: RodMetal1 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_off.png new file mode 100644 index 0000000000000000000000000000000000000000..352479e87bb62fd5a2cc17875a35ddc778477e55 GIT binary patch literal 474 zcmV<00VV#4P)NlK}=_<^+659#1ayTJ5}y`Nq%ml6%%p=eF}@Ez`6Xw&X3J-Al3 zA?=j>m>V53YEol(pbzQq>ecy{=7;ZCQrjSe#E>+gb7=DY}}vwi#c%p+t<@nik3fh+TSWc}blO|d+8W8@6G$t zGR$|l=x9v0;>d0d+$DI-&m! Qr~m)}07*qoM6N<$g8oU+9smFU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_on.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_cycle_equip_on.png new file mode 100644 index 0000000000000000000000000000000000000000..c042bf0a9faa8eb1f70f9669e7f9ecd7ff559b8b GIT binary patch literal 572 zcmV-C0>k}@P)sV zJ3pZKsQSD2aOXl*{mz*MS5kMRgOWd&&dfE^rbMva@ZczU8FfVa^d_ZQ`k^zcQN!oY zb8~6;vlIK@{p}1$Z9)qdp$R*}i&G(vr(+PlcwLCq=c=0z&CIyQYv7=KnkSh6u?9Fe zfLx8A#?_HxqMiahG2EO30G<|LoMtbx)+UhIh(HW}*c?Q$D-0O4{o1BQz$YIZVavCr z^}n+LD?>T*!9gi-WD)~*2EwNg!BUELxVqv+eF#WBUp6+0000< KMNUMnLSTaGApPF} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_brute.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_brute.png new file mode 100644 index 0000000000000000000000000000000000000000..de57f3e5d1642225cbad30814d312a0e9d862e33 GIT binary patch literal 546 zcmV+-0^R+IP)#>|#qrpFZ|&Kc9Vv1srB-4O0Dz9P2tqqjv=0mrUq2^Y?~|@A^G88XazXQCp>v?Uh3n21tmQ@S* zPdbhz$73gayuaDLlaB4+yxGD8@4M)9PzahE0j5-f?fGMOusU=tfJ!A}NL8F_0azmI k3K{q!zG(}^=|)iJ4_o~LZap^MbN~PV07*qoM6N<$f=7tt^Z)<= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_burn.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_burn.png new file mode 100644 index 0000000000000000000000000000000000000000..6d6b43c4125e677ae0cfedf2e8689e272736e73b GIT binary patch literal 591 zcmV-V0!Myr!Y@U2Y{%bk$MN+7P!dAS;2$KVtOX7( zq-#)h-m-c?UjnZD1H!HDzxa%=3{v--1sS*$rXwAc+@zg7b)-$gukDV9m*NG~k#0MH zQYE{FWhNcaMhoBB?YO$pZ~$MUxG)3A&?b!RCUnbg;gd-MlVn^dJY&Q#17Bm=a4Nrn zir~(GUJkQ!Iq&>f?7Q-ld|`ntb7=)Q@XlTcgJA-(y7DT3971^5Zt8NRe*bJBb3#=l z%OnN_tRp-7$gBVg@3Ee<4=gj?gz9WxeSEIgcDM=C={$~cOjsss575~o996H^AZl&o zGJ#@mLJGH{Cb%1tZGgf*QV7dx7caLy! zcBIR_e#|}*)6Y=-lUe68#KGeO-FMA)ZBncl@>dcB9e!u25hQi8mdZ8wE;|#b%reILv+v* dlGC}N+7I9X4>Bw4O~wEK002ovPDHLkV1l8{35Ngx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_toxin.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_damtype_toxin.png new file mode 100644 index 0000000000000000000000000000000000000000..5b51d05d40144fd01a33a4b5ca2c799cc0caf2c6 GIT binary patch literal 543 zcmV+)0^t3LP)RCt`lm%mQKFc8MCk_i;00tp5(F@nVCfsNPT4S1-&0dIlW zI(S5aktqxyff7+@hmv!1?j?2p+9{tD#fhE#KL3d?Cm@rQas~e&rPN3mxKyShyJszD z59mX}o&AL{)$PmA*vg=EyOk)wmCPIRm$Hj>W6M2Or=Ygp@bJiZf;&P@K*EqpU=5~D z3tma^v*^U!OOtO%)44YT$Vk`-(IPa%PVmKI35(yQS2!0jg{^XEIG5ePj^M_C9*%ro ze9w86h`BWauJDWV8+dtrY~5afXCb_c32mUTL-h~`VmUg!G-j$qOlF|}21LC+4kH*J z96|j4+&B`%Tra|GZ?E1yn?)czlOcY#iI~o7fcKJ{Xe%cJ``79P|T ze5f)Q)xl>^_uyNt4ETbF;dm?BwhBhR;Nj%Z7$^jzp@r~Zf6rPsxB-F(L5%^|a9jt+ zVJE%CAEsOg$0Yn;_nDaBe3utpQu^FC2J%!X0k^-SR+6Q}#H31j#jcW5Z2(hbogpj! h5P#_a$?3+>=ns*W8j;&F$l3q^002ovPDHLkV1lQj^{M~> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_defense_mode_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_defense_mode_off.png new file mode 100644 index 0000000000000000000000000000000000000000..498e07931f2f71f73e4cfcbf0cf0831e18e434b6 GIT binary patch literal 549 zcmV+=0^0qFP)Sa}cNS8M`Lu2nx6bxfNihqujZ^HGf$yZTn-f zXzVc7mpE%P5E}W@bZYLes}+2%*A)UHB_9O&v_U`u9tHz=9FOg@OFYu|uiXxQ4u|MI zjeyj%KVpQJf;gD~2{GvP`*1oQgSIpQWhBJd9uA*>BMN~yllDLtxC^)oD2}22lW97J z81XRZJkMsW9byo|DA*RViL;iD+dBW&iAoHIUOU=iQAx)<8HGTzKyXDMIfmhw(R0qE zJ>ZJqNFnD)-h?Cq$tVfA*)fDH%WB#7qGaTz;h0e)`D8M&0xHSqQp8R-k`DtLxAQna zbV1#$f0r^dL1HFDk?I3 z6NuN=ij^$elEI|m&3J5U<$X``de_PZ)Bkj3FEIUS|*FhlF>(L-@$& zyU+NpLFMxDJj8AYyg;7GMPz5n9T3AL+KA+9Z&}O@Z z@7?Zx0+54kF$JL+Bl6?v1c&UnE4ihk;1oV%*W?^t0goa#0`l$9k?VWsuZxAb{#>nU z9fr;&&e9H4tvu1O@wQyTZoRe$h%{lrOLLkaAObJLA&jO|bMF$T+4->9!0+)G>@yc& zWvBq8jIb?;lL-h*K)rq+F6VQlElz;WgqYi_)8}nORUpo&80Z2|0Z#$NXPEuT)P07S z@i6I3=JQ5}n1nD3Hl=LhES2LX=Rf;Bi1FBKM_VYYa?FcS6=)X-t_UQ@G#s*e&KVU0 zt_Y48a*pUABoRnPMaZp=RhT46soJ(GMs67nSv8VR)6@vCicwpHZa0#T1_Q6H^E^Q0 z!#V*m0KH5bR)_$;miQu z-iC@m3P+K-Z-x3yMm~okfS45pL0}|gPf^-W1OVoR`V8cg5!jef6ha8qq!4WU*UN^Y zUdfhaDG2N*A)f8p@%gnjw?FGD#<5?@dwmY_*-gT7Vo%QdM51LwCBXMj8mJ9v4k*-e z8!;Mnf?tY&=1f~%XeGo|0<@3hi0^Alt`h_OGdx3YwIk8!<vsWa zqnvy;%kj)2B+4-_Mzf2MATV+c%!~qJxEemiS%lPLG_wd1L^0}N`i)4#ef{Q}kK+BQ)KY#!mVF5V^i=Z4jWz2|e4Hi%_(V=GWZ;vy(Fu>!gOL3LYLa0)+jEP)&BZ@RDHTa$o+{H(v^npK z2lSPSH}?z0yB=>p8nq3F7lMF&Y{h@S^@51ZUA&Rs?7Dx z`QmdS&WE$uyl(z%OrDJh_{>L>k-ndQ%$*Pz!?k`{Uj>mOKx7_0L?TXN9R=4I^pWzP zT(@0=&;TK8ALc$lZcgI?-3CFP3?LPudYnAAP6OBJaB@bAdzML9?CtH_XH)dGE{JTO z)lAzU$ulSi5JEf5u3RAVE~_L6fJ4|?el5lE`)FXgF415Bg0RhHEXDX~ELP7eaf>}43T2N(eSlJPA=`eKO8Z2`tkQXd3)Hp;Qf zyv>w^#3M-GIIdbb=EcYs%&7+WL=c?-LiPb#epCxc2)S>LQ42!UX(O`RTml$iu?^c} zk|b$V+u&jplF>XDT;|j1)Bx0qQJ-?{gfNd|cW(3!&}Qxh=vt1um?P|@?RIPKYvq_! zuFd`qCYWzK>G+udx&Ty1C40aiV&~8jfR0L4$Gr}x8UROReL`0JA^y?<4yPBO=odNB VPa;{!odW;>002ovPDHLkV1o6}ASwU= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_internals_on.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_internals_on.png new file mode 100644 index 0000000000000000000000000000000000000000..64c0346d39e7aad6807ae7f108a813f6996c294f GIT binary patch literal 642 zcmV-|0)737P))wIHZH&| zJap*90lL6|Qk5o^2zjob`{LNH6Vmca6~T7$f3ct6i#e;5rfJFkK|+X#Yx7j-j;hUi zUELsmDSNU%kUh)s<~_D+Cgix1*UUw#2GWO;e-48!ZKO{yZ@>0~U**Rs5gl_j3FW0; zn%6p&`Sf)HLx3ISuNRwhrrwiNX>CPK)WE&lK_Ngpg4)0%RrT9xplUv=OGBI-0n`FP2tvovYYuM?ZRR!%$pIPwzGQsc5Z@St=B5C~3{oEi zdN#_j&D>>*g1|#a-#DsTIi|(P6qsWT@ChMW0fgiM+Y_kc# z02b1)Ic9P_X;jY^$y@Nj|Z_EplvyBV-C}f zT7Rzfb*&s9Tl?jJ^=^FP8R2#WP)DT}p9S4T&Y=eYJSwS~sAx`;S+)IH8F{Ua1A9rZ5|2mb>9 z1UnW4L2&9?6lZT01eZ=CIy9&>OR0G;dDoZZlBP{lzYy}{F8O}$-Mc)_f#_+^N-Ir(TCkc!2Yl{gs$&fV{OY z%~@!^*E}o*z@7rYO?9HM3w?ZlgEtHHicVE# zF)~5Ovk62-2|;93=0#-TWtjIrU^reuXf7cf$4OP&xy5K%ID|l;x8GlF-e@#5K&%*5 zA)E%zA2he4nvzsy02l$x4K~jO$STLnikI(MzfWOj4TnR09V^GIaBY^)2bl}Wq?3CB z)C?fnDkVEqBC!t*0eGtvHLPoMN&vV;rX8}9FUgNqusNLpZTtZYfOr)*3{Hmt0000< KMNUMnLSTZ5o+Wqy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_ivanov_cooldown.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_ivanov_cooldown.png new file mode 100644 index 0000000000000000000000000000000000000000..70704d56da10e46f1924424e1c411cb4ade7c6db GIT binary patch literal 964 zcmV;#13UbQP)2y-(^O-E{qwY4v-{xtw0YWQCZs8UR+q=id$zaUnin%a3d=eFug}l*-w&N8IOnNjCMUn?1nY0> z@bfVi`R|8A{r8}j3NtzRWFG)c%0~O!Zs)fUX`7Gtt?*MwJr+|*elGyHaOx>QK0Xhp z@o}oml$$TfPZ|Ym^uq$j0Aa-EbW|ny(E#A+LlXp1<84@prQZal_`Lw&3!5I7u2f9a zury_;D$Q?(L1m|rx>E?ipb~g%^YAt-n7YaE7-n+vd(&Z%9d1%0-V96a(}DDuV$N<+UxC!gP>fI2XAXZ>3rG=;zJ;$= zD^*gd{A>Y$=mWfT08;sb)8VD?A1^Pi*@2G7qu)=N4wv9}T0k>4F8|Laeiy?|C$=WQ z#cu;}T`C%?;LW5BeT;$M1OS$bbo*iA&&{|v+1Y2}S9XcmtIQX>2ToD$~`D6LoF z56CGI{s2yi@CR^8gg<~&BK-j+CC(pETCc(%kW*s)0i`6)A5dB%`~jR2;Sb={Y=1zw zK2NRJr}_gpCEg#9TeJNE;rcvI=k^EOQnUR5W9cdW08YJGe?Y3BvF= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_off.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2c8709bc015533bf15035fe9d8faca07c37309 GIT binary patch literal 553 zcmV+^0@nSBP)Wp>qzExkIL)2dNI> z8#q7*BTH(^rozb7$FZF}z<_L0e9t6pLJAsat*`I`7-JU7k!#}&%`AtKm~zQBUOzu-QSb?xhts68UDcanGu% zg7f)2nE+ctRw8Obmv$nr>)KvZl5-HJl8keca|8uEgWL(Q>F7Fl>Y9f@oV^Sn`Tlng zhmS)v0Qzv`_)9)w3DA)Uq)k$=5J4=C6Ci#2w80M?A|lZ_zMPW@(4u2*KuJW*mpI!d zZ2s-x-{(9a&R!4r&4mcPNvgg%u~f<-1fJ?xU!f-7b-*%99ij z3*d{81aVtTNc$NA8ucLMxd;g%&fYlAC6;<1*PnCthEXoI-&-i&3cJ4iUEuU}8niz+ zjBn)~cU1BnW&t~gwgTv=)ES<2 rIJE-sh-^>DhHv6QXE>bR1TFpn%w|KP99>Sz00000NkvXXu0mjfCj<89 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_on.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_lights_on.png new file mode 100644 index 0000000000000000000000000000000000000000..90659a8dec8518f0984a5c41f4fc58e89ef511e5 GIT binary patch literal 558 zcmV+}0@3}6P)1YVBL0GU5K`f3H;G9rE1Qs|%WJKrqLQWt6KY?-sVj`lx znzKtnakht#&v{@ty&M=Omqh4GQtO)&i>4exfKwgIixen%0C0_A@RX2I0*2F!WjjWm zTArkUSb(7jOc1oigml|b{K=SYn5#S&At8p-E62ISSPta+Lr$+46Q9mF-k#B`Tk>X+d1UbYh?vE#pqcaKaW{{ zl6?FQ%Xvu!)&xbK}-hg@&(|8kISy#RexTI9C?+(SD7 w=BlI(OI=Qt0C`1LH)IY6!Jso-PJ2PCKOv<|!nuDY)c^nh07*qoM6N<$g4B8K$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_overload_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_overload_off.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ff8066e52a5573b934a88a086950e0356b6996 GIT binary patch literal 503 zcmV~-kk+7{dGFN(a|w3!FUam@ z{C1A-o=G$A!B^x`%meYF=+89R^9Trax1{NV~*U^dmaLCIvyzX<^WC^ ze{Ub=_qBN;7kT@-JM-SZfA$Lq<^JA9w$OrOB7hSK5G;n6N3bViB7k!WLUp!>kIw~1 zJwk~9PBI33057Bvp>bG1EFh1HI4s~SLc)s)*rw`f0ilI3{yx_qEYzGS4VfO0HVtFs z!0D7@3P;nBdh=B|#>EKZ>`@#e$DCvgoIQ&7#0j8S7HHIU?NnQ`7^Nm}n#KxP6{8a5 zRaJRy*#!VODPV6oK0~hE4(Phh-ml6rV9L#O@u2s68+5oQ&{zb_t63-#y`K-jQ15oau>pQ}m~w>={EgPNH_hCojQAu_82OHgMq54^6QV$ggg% z&DhuelYGDLs|jErLIZ-(xE;uU4+nAmR3*2BXin-g&P|RH5YUF)2vF|OZ>IJ;4*@tw z9%%LC02(ts-ruR;o6C#nCfjE_@8!Cu-OF?V)(M3$brTm-a7qMlA_3_mDCH6CiIfQ7 z?1NC8?cw8dK(0q(B7id*13rKkYKV}?7LW?aToKs7<+Q79OGhyQF;`o$T4R$21<|ODRBa5mIV^0>(!{*MvGBx z^0U>s5nvUg7UawB#A};f0FW=cE-YYbIW8fWZU=n4zL|Tg9Gk()GUWSqgU*e%L4aIs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_phasing_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_phasing_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce5a540bd5570b9c3df48038dc51d00d023ab9d GIT binary patch literal 541 zcmV+&0^A#jTX_L4Pzg!+=sowIfC6S{ZH+_^8Q z9^t$oK?>B!(ps{q&^BdRs+}HSz!7EMiKN6xz-F_O+wB?t0qSsA3rjAQHApGhccqkh zBd| z$@4t7W5?qWPN&mk0!#`?iUg{{g(G=cmgbp~oB}xoXPldy!YSYu_xywzI*)~wC`UYf`kYN1SNQUeurhUf=l@YA8$_(10x`G?{iV$#)hJSoJ4?xvCxij z^~<|8T)xl2Q9#bR2&=Q*b$t4Au94iQy}7oO2&Ed6s2XK&u(e4NaaT32U2O0Fn<12yMq90@?kEP)^M(1xAQ#@ z068lP#K`6Stk$j`=B)w|&=Qp3`t}a8;TZDIH9S8(LJDjE-U-zJoC@bxH0j&b$bXaf0W)mjDQ+$Nzu+e61^Y|jmbM<@1|su0Tsm&>* z!l^(JQY7gu*oy*9_MW1wK-2Re7(kta&J{3UGEHB@lpNp|gPfIe90NN0>p9?+V_J;Z z$&q|W+5ccM;t+D!SuIFGS(PSxKRzB+s%=s+;+)4|$S30?7l2oc`i3Dt%nn#v?*Slr zRu@3qa@>a8$c}hm4>GX1^<+cuPOub^#QvQh7ozkfp}NwMvCyU(Klv oKo1UVhpgyB)M*dR=`NtbFJ@{U?$sJBp#T5?07*qoM6N<$g7ro5lmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_savannah.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_savannah.png new file mode 100644 index 0000000000000000000000000000000000000000..ce105cc8ab80c5357b36aa29ac462a6999ed6d66 GIT binary patch literal 640 zcmV-`0)PF9P)1RCt`lSG`WdFc7{n-UMyaK%Ds^%+B`ab4A;Zd=RQUNh1u?kih#Cr0Ev-AC*t2-yyrM5fO0!0)$7h)p!eP0RKOGZtYMoanLyd?1RypZLqILhjuU>e_8k-KjFdTA7ZkBtL#0=tLi0_dt#82;*VDh1#bS>BKZ@5Bc^!R53R aH24MjfKjGqvF$qm0000PxsY|vVrPG^woKBf~lx|t7 z>75`qNYEvnUQIic8AY-s*&!M90}MElr5{b}Z^Xv5veteW0XgSBN%I>Ix6Ws@Y0>+( zKzCX57O&78y63|(v3uj}{fi6nn>)C(w+CsZ{-^4O&;0T7_xkjYK$xk{U1%Lb9kHCj72M^zU+jSSD0er3#IQc^txQ(1SeGWii z$otQC4=xpDO7b6CKu)tmIQ>lx1JxSF&2LPF(DP^n1>rp%n3mR({LTTjb1(EWxab$i zRdR*K%qI@8CP(OX+5}_ZslkXcCHegz*siV9%g5)4G9~%ZF(4dN=%@>#15B*>VOnaS zni41f!2t+N2?rngTxe)meyUDMe%362-lIlL0YZ=03{)KaEC*6@v`o#5 zbMPM=KnvCw9V=f_CpW*J1`QMUFxPbL%Dp~zpEXPS_hP9?%rQoqYl930xZjW-~7GnC@jI6uZ8Z2@2Ht)I25zx&>R&&OSxzB9jE{uBl9)oNu* z#lcTHz{76>aG0NC1j0)lz{O8)hoSP&h%i3~4$TgAI-UIe)OMJQf7b%~xpC-^2%(0Q zG(G5V;h>W`6OiH$4!9i^#SHvI=IF5($d+~SGy#6^06Z$P!@?v6T>5bG?p}!Bz!7nG zO6zDLTImxGCkKOu<8dMW?3LgWLPtnQJU&43guh!1$C z)WrvIOGSKuq*TNQNUAzMAUvNh?eA(gL;ss*#RrtCG(Lbs)$svgzn^OMWAOo!QXL<_ zA+_-VTv8DqASqSx0TR*^A0Q+h@d1KT5g#C_e+%=grY77QUjP6A07*qoM6N<$f>pPn AUH||9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_seat_swap.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_seat_swap.png new file mode 100644 index 0000000000000000000000000000000000000000..859eed3a506b4dfdc429cf70f833ba80c685d49f GIT binary patch literal 636 zcmV-?0)zdDP)B=R+oB7i$&55vpbgN7)+KMjZvLIb$wKE~V@hD9>x5D3Vxew#J1<;44HX*tr(vJDWafI$Jv-Ym7mq@yIe*68 z1<~4$`DWyjYZ!RgL!MgzzI6Z!%>~MVb(X0^nhwi>PzcDiwv!pm0U;@l2>chcAI=JP4czh<==Kt^Ir5Cx&0c7iXLi}d=b6>f@{tf;VQxG9H$-N3a0 zIUOo;>t1u0h?$##s_@$(hr5x0%d0bZdVKM2$6yN~423|1U*8PibGisJAq`kNQ~*4V z+i=)zYa(V z&liw0fPXTs&k#GtS;!jLcI3p&rDK-~6n<(hc<9KjbZjQ0G83o$c&m|H2154%S`O1t z=*Y7QPDa@z69VrX#JOx+IT?it;hj!b8?chmF5pqLS6J4#0fI+S+if5;9f!bi+DVhQ zSAB1#V-o(a*Lg6(_09%ek_opz1L~-hG#`)FIdpA+j!LRvSBFz+0FTJ>ge=TPW~U7t dPX7$GegO&qSCNw!xn=+W002ovPDHLkV1gVV1+D-9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_off.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_off.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73a0f23c2fb6aa5e0494919ac42773c039200c GIT binary patch literal 605 zcmV-j0;2tiP)JoLtxWB~9XTB&%-hV zry9a*x%Kb{SzJ2Je;^HH|MWe1b@F7tiAb1xZro9SsP-r7oO4ZU^Qg34`JseuO90|ZQNywQ2IN>-FZ2o+6Qhy5Y zB~!Evi-bAnu)}D_WcFH5da^R;)Z!0 rP9*@2$nu2j={M;QHE=kc0(E`?0MRN3%7wcG00000NkvXXu0mjf1uGS0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_on.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/mech_thrusters_on.png new file mode 100644 index 0000000000000000000000000000000000000000..814bb8b34c2bc12706a6b8eeb0a64e817724bb32 GIT binary patch literal 636 zcmV-?0)zdDP) z^G+ZnKP?7ud;04$9ilNaDc8rr$>rD( z?CDcR*&y1t4|IIdmc{_cqs#zl5D+qf#d>sh?G}K|?z+7g1Tw)e&H*szNIPc&Fvv{a zCu1xC%rh1o=A1LZ#(UfA`KJJ1GHH*YDPC+iFy}}+0ASu+T%rA)Dn0h!GJ&w?&~}^! z0y0g|hWX*Ch<<}i*@$h&=4O;v7&*)<^#;vS_s9OJn^9h2#27iu0g-i06b8T$kOYYy z(WEA8(?j1GBR8Ypf+WqSYIO||+l*Wb=A}}_8gmZ7=B08u9bnXU{9ALRoz=a+)9u)H ztWS1|Ele=q$wg<@1kg8tDwUEQoXDs{zW}&YQh~oJP9*?JWLY5#^CI)64vN!nAny|> W(LGc1<734D0000e?VqXW2sps-`&vz_2Cqt3EJb@BG;9O+qsw|nad z91I$Ar|hLM7RHzkR8b%B+-31JXT)u)2_P1Jw2qVre)>9vq1(?*-GA@P5im#sg_1CY zoxq>3r+T~|%Yt(rh^ZxIZE!9kfwjN`0Ur)rn8nvTBZS$Bz*=8UqDxA1wk$6Y-AQuq z(!G~Jv_lm{a@q%w^#yDnXkMo6KtsMVPXKp9x3^2%=a4X_(HI(j!Yt-MXA-VCcTQtd zm!g+IX}u*-8XHPzR0L{BZyAzEWk)vYa+K^x5lAPd$(1JDlrn9~(EiEf%5ZLy<>nJ+ zryWN|LTGaUl9c90?U*;Cq0Tu-&aOy2*NjrzF;QQ@f)Kw=y;JfWEPhd_v?gMvWC%JxK!*kS*+tFotxb^P*;w9K*ICerppA_N$dl^4xuvRsUF*o%Ou+}cLCpXr2)NNw9p5Pv%_VR-2 z;Kqk@q_VPZ+)cO0t!W1GMOo!OSZHH?R`vFKK6+|C%@uW2&Hxu3;%Z)6^G=X&HXGk| zKA%-pRg(#DTgbKuCiGzk`Q>tP&y?gG;M7v*+~gcl0V(pY?biLiEtl%|dUfT`(`lRl z7mmicsXhPR?HnPj^7Cg4*|_pDI72h*gfc_I@8Jt+Z)(NebjTwGH{8EOTuvl(9OkD(f8|Jvm>(6|pA0L4(VFbiyk^{yLw# zvY*{f{qFaj2}mKr0w#3R4)XKqq|V1?_`K1PHQP&lC?$X7ypzrIccIGKR(5d@P-9+1d58hfA$w5?#U%tkp(GmOX$n6XGm<#!9fp7*~9(_UAO z1FN+FAT+J?cl}A4b;4Fn>34Ho}0|MNL z$X6{xAsq8y6e|KG5?PD~g25<81a^jR%qGzgXe0n4Kn5UPXSk>7v=nWlf{}!#KOaQ? zJexTIg<#Y-hyV0QoSmC8NUeJ>)d)z}I%`(uHvB3OklT>+PG)ciT;Xy(%@g zV+*i*=v4r&O19#^E~iESU6IWVS@TYO&>k+QH$j6xiYK4-d(ZK>00000NkvXXu0mjf Dv6u=? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_mecha.rsi/meson.png b/Resources/Textures/Interface/Actions/actions_mecha.rsi/meson.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2088bf14c6ffbfc235172c763c97e01e66e396 GIT binary patch literal 650 zcmV;50(Jd~P)j8WP_>ey#uGl|4Ca(>}eve*)Tm`YCJ*oAua?a_q zYzn1z!$+6q^K3;Kl@)+@hq&TJd$v)?o6V-_o6qN1EEZc6z(;5ukp!XHb|GIbmwauL z+=g&^dB&>AZ4?S{L2d-_cEpjp?K3ZeaAtPE)yf4PUKlK(>UTd6!f6Qz;1a^Q3PSyD zFaCT2pU%%Qoz0#dAN6`2-EOzkM>sdeKp2MjadU&`qS0uu&`zhbQ3Rn>0Fn24JxnGO zTppff>=*OzeE;mf=liedAEwhO9{%3*bMWp6>gVnM3lMxe{8C8%)&Gds*vB2l*zf68nWEQ_2Wt_8cDtPkED|`5+hiXOha3k)Y{ut6 zI5X+EP(;CGc3;^_(@3OaI~ln`VKQ>G-v~$~BNybgS}oUBxd0(A z6;M?=mTeb|MkCWsq+`MA-P~S0(0QkW&aMdvYXNboly;~DRvo$$Af-}la8;bL04kBW kLRR)5d(sMu)3uP)45 z2AEf66-@%~L89qMu|g^J75@OO^-EfErLAF|W5??P^CNah)s*6-SWY+@=2;FP+0)xc7SU?w4_EP@B7})P17XidCn%lgph;?lh9r} zk}u0*o}Ay9FfEwghfVqx6b92W$2ILHGpw`I|Qar%>b9{(~pW*KUO27LY zkdp{dDSzkGvH3f14f3XGSX*%cNS+jMr5ryc zhigZS<7mfDIYw;nX1;uYc>765djh~AU~iRthaw<-=q3PLrQJ}gIW+>HMK&F>riHIEzX@-P>VDFQJBOR|}qkV;1;B>_^t)*)J>_Q^w!@p!9m zw;_@5%~RGdfQad_o>zpJOe&qL2nYbRWQi@Lq_OT^2DQZ|AtGb)ig+TGVTOPJM`m() z9F5JX{{?m@S*B&drCf-t2TpNOkeBbm5h5O$eCVkgsC#e^20shq)z^HynGR|aut)$G z1}}3PEQuMb+KQCnNRli6M(50=AytakFcW&E?JtYOGc)X40 zjvjfKN!Vh$KQokrOocHh<6CkN>CJ#gS)_uY)`)6UMO&l;l)#U@-ifm( zTM$;iUw>KTIbg=x>lV@(!aXkigzZUmP+eV(m(?u{4Goz?Re{2kUby|vECweJkdPN> zyq5LD`sdMDJ{PMAPTbP7ExLiv7FaiGkQ>eJzTuYTP^4Kec`kYWKZ z-?hsq>bwZG_7lGY_7%~WQji~~+LR0ULV;DKEdKC& zotBHrBT{gvf_8V!VS7;!BjL|oXRl60q$(N`YZf9&9TmwAS$}PD$wV~80Rc(WlTw8!wcp@_mRWsfbA(Ay2d&KWz@YdHUm3 zN@BB9rk|F;3hT{Pk)@#q_2q)($7fI9m)s{0JbHM)OOM0?$tcG|0fvuHuTLPI^t?NY z<|isl-j45!Ckj}IIr8LQo%lhsyj6d`{di@}?00^jcUe#J7jkpqS!TclkN^Mx M07*qoM6N<$f|q!aIsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke-open.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cd664ee13733ab1ff8b26fefd5cd1e90826397 GIT binary patch literal 1433 zcmV;K1!nq*P)DMwnRf4Y10y$ zXiU_am|3wPL0u>dG+mHbqjn`p7pRdmDVk`R1f@VQ1#7S=FvB3Eg`!}2L~#ULgT+?E zc)xS!-1+~125jQOjVEF5`+VO$ultii|FQf};Eo9#e=#r85&V;?OH+C5&Cjr{hsLjS zD|;GGPq_Xy0f1V;I)Y*DZ*gbE?LAbHMGK2zv#0IEo`{fIk4!=W0JZ|9dvF&m zm-!oWqugSxy7W5b79WU?^}N!>WD*gHBOtfN0dKxm3IG9ff=gdWh{zaL5lcX~lY}8) zfM+-Hcs{(Ke(fZj08R_61&+AL&e~$b5h5uvdGNWLRPop@>i>F(-g(!T988(51Tz!aFP1g<_rdrwnmB-9D=r^C%0{B+{k(V~Nc8hWF42a+%wccNlKRyqY&?CD+XF>8 zR8*MF{jtmQbbf4>i5=a)S6OD&SVaUF7xMh{cxiO}vBG#%xd1-*`c|pmo5Ksqd(>Yj zlc?2x3y_fb0QmOJ>9i|f6Zrj?Wi>}k!YWqtC;KufSz+|c_^wO}DeI=R_g+-Nus1?I z9`aSK@}ihsr`%$kIROqC8lQK}X#&pMi%uUsXwwhulxT;_%ggC4<%Pk)L0&8?dWhDN zd+$%DZGwa_dXaH}iU z5<|dQP9bl$#upR_3Y3oYR5K@_)^pC=C&DoV-u^_VTeKYDa9kiFl1UXBq9xn2EM*s# zLPo78P8=p+JIDYrLE0cQDl03gudh$rluyt z6dTnSjWV%*-F#Ky==VVe9}@859XrgKGXtd7e&Tn)>LPq8d6kQvZn(tz95^l$19f$E zh8YCq(wj4BOa~J~aeMCsm8pz)f5dHb)#}P3eWilVo5MHO*RDI;ztHeMoTV zSM~ReVSepuh+Di72&^)7<1fC~PxP{~2vQDfs2Bd$1=^bHwVhuJ$GD)Q{Uo;^e54=D zvu9uB_T1;9WFH-GIK@DS0{}@x0~m7{qu+R<)_@*)av!%YS6f0HCgAt`X=ZYSvOKxe z)z!rdhYvS$8=kvrlvxW4KGD)W&vGBdMe-YaKvbmZ)R(3YoRyUo)+xF`fV1GKWBYlc zuJ)ukFwDNsj@htP1K_5zE%9Kz1*g`b-C;5j_HK1=PjmCSKFuO*$Ok$zs21+^2d_tV^5TX{F4!pFQ{u* ne$dM9*1113Jz~>gy*=b_LH*?D(>mTu00000NkvXXu0mjf=24<@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/clarke.png new file mode 100644 index 0000000000000000000000000000000000000000..f5fd8b1a2265615f8a98a4ee963c0c6d4473cc3c GIT binary patch literal 6151 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 Z{{afbk^%27Co%v4002ovPDHLkV1nO;{lfqN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..9b39c48b3b3ff5c5e68efb08e9656fa85a5cb51c GIT binary patch literal 2211 zcmb`J`#%$o8ppR7BQ_-!nM?I0*UH^jm}TTTgpzx1IT9vhmaRp|G@_8ptdK6!aD>J5 zZ7sQUql5O%STbbItTS61j$W_xADr{U`?-Ez&+B=9dy4#g-Bp#flmP&Ms>cb}fGr>O z8?eHb6b^+2FmWOOE zQae)}=~MQVv+cBe-cVw-r>fj04{u&#r+I1=TSW^=UrA$ybeKHOfklqzfQUWI9yVNr5w75QgBS`06Jz@f71R<0{P*19uER zqspevq0#Lx6E-dx5}P#e9tuZdgOgW$J_3IpbGzbgchdkKLVRe=h2cwF`yINbVc%0w zk|eExK8E}bjCtJlK_)O!Z;yU#E0&mbH}p2(R$$$Sqvvw$;)?RL@iUGyjmfknOI$J} z%KA9vd%A9o_l1;VwUlVd>s$MEm#5m-eMGjaDwFI0WxZ(&ANrDcCrNvT`%T_Hax#7rbbKJ5Pv>Nqr=; z(ojjKxO|R4L?cyzkuz(NRR^crh3uqSkwfx35w~mKo>7*9%eP-rsgV*{l2xZzNJb2T zekjixE(2_Js?8h#Y{ie)mb>~VG(%dhx|dSh+{OHquDa8NxJzc?9xV?@vJ7Z!*s7-c zsB!Qp9_xg$tbjh$M*fijPn4y~mZ|Az0 z{=;hFSY<04#>xQe*_51P*=!59p-&A$%cdO9_Nj3H<-a>N4Ws3|YqgF(TXt}e8n`oK z=c&hlVPiqv;0JBI|N9uwz#;sotCRSQUT03lgi8Mke*ur6s8I@LMt5^}VwAg7=h~f^ z?LL{fSfS3M_iMJE-FRv~Z~wUP#rUpd>d=d`IvplT?e(r~N!CTc@?K+fALiqun#@+( z<=&1cNHYjw9-0}V+TfD#n0Newczm=c5$61yB%^t&-45nV+>Y@51&8OA!)hyg=T;p> zHBVbzVKp^1ou|Z1`aQY#mO`O$hZ|7u079n4`C2;Vm_2FA9yvj!H$kilzc=SE8!fd> zKQSS04YUGi`d0Gqj2tSoHa8|5p7Y7k`lNz*PDuCPDF4%s?B8dK937G}BeOK}h-i?U z2442bHrEDnzmfD3e`OJg1@@igt)+-FdN!m z{=r6#9Z{-$c)a;WynMk@Tt`R;g!y?7e{@JPL|(>&Y5mBD_BDAjAfIz%Ks0rA!Tjw@ z7MQs6WVM5qtA@Wqe=0cIK;OK$H=!1tF$2SetIHGir;veS3!TY}VY7p1&m&FX=Gn_jXPg)a(Z>;Kk#`Sne3%b{ziKaF>`D?`prWHz#*Bw6TEt>b4XYq2E=Ws={Ah$a^x!h2T|w1W;X_M z84GvdbCbSS6QSq0>)7ODV*((rn~WM-adLw1Lj_^+%-_`@0Z?mA=%M*83=5}i>0e64 pfaI+$k~v2;XgmSMHm18 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkgygax-open.png new file mode 100644 index 0000000000000000000000000000000000000000..eadf7ffd93b58bc5a3059166a29cafeb7ade2b07 GIT binary patch literal 2792 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkhonker-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/darkhonker-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..eef046a3c64763d4142093046dabe556adb8bef9 GIT binary patch literal 1808 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 FV1ikj`FQ{U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/deathripley-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/deathripley-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..879ceef9c4552e734af5aa65274151e086565c36 GIT binary patch literal 1240 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/durand-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/durand-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..e65af10f1d4715049a2bbf821bbb17c8a28b6346 GIT binary patch literal 1680 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 lk0IVqVC|3mxnGTr;Xk`f8Uin literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..c10bbc9657d6050147b5d47fb9d52b3e9c778580 GIT binary patch literal 1016 zcmV-+lL4 zv}xnFd3WwT_nhzi-l>!Sj7p+DrSvHkUS9*TO)}W0WgMfA7C7SXQjr&l39MML>UiP9B0z8GoePAtuQDeR7>CU8y_}STwHjZUGelgp zPd<@s&n=a42^j*&Nnl)~K;wCjNALjqDicN_y|qD7yX)oA*S1<(LRoeVNJ>DWbUv@= ziA4wx?~Xo|6CEAiA_P!mD8}YJtzLqzJ`^G3K%(rCi4Xwe3s+CqLLKJT#-ZZ}rN8T% zu1g=DnP@Dm{?xm}lR3#%OA&n}>CTcE0Tdw>(tCJ|%4Zv)x)Gh1)6+%{KyLMJ;AJ-4 z;~hpT)7EW>C$=HmYj|6elzS)ivKh~46!XgRe_F~2pMk*5LS4GmO;UA>ZziIYRn^s9`f>I z$?QRfL_E{ut}E%=w@Bjk-11gJqKRADH@h;+b{}fNgI@R z>w&r<55u-@Ljc1EK#PDGShL>|0kk7piK7~dI|ri=j{5-N4hNf0H#pqO3l2fg->Isx$56ax(;u|)$ZgdB}EuUXUBS3~W@SC|qhj8!tcp3g_y682+ijHac zwNtwK+D*mNOIP>&&{2_rxhR2+Kt*UD*Hq?6nKl58z9Uw+4#A zV+5qHJT!X@$c*%Qwto1Zn~`q1ED$l(IvT3Dd!c28P`K`@!Ct mo&^MLBYa!%Xys&o%-P?t%x>;@xn2SQ0000CyV5wnZGCS@yl%BH{7bjFm!j& zT)ot5wr;EsDZ6sLM{jUb_#*cl~v|Z*^mucTP%v~r}u9o_05gXhdn@cVo;r?bfSvPhlM56 zSyL@zoi}o>t~_U|QUQH-I0_c|$TCE^33*OLZAR0=!PgqO@=n%1>Xa3KWdvS!T8*%^YV?8mxy@TJu_wEKu>Ahy4N4j zi=M&U@Co4bEv-3!6I(4dv&kTihuhmtbNR$JCcX2F^xu>?1I!_mt?rJxji+390Fdr5 zX5jHP*=&~*VvU5e=X3?o5Rx$6aXF-$$(Z8l5qq$NFbtEWT{a`5qv8c*djL4Sx2A!; zxV$FDx}Cbk1Nd{N?}7XPD=3FY$okC1ZgFL$znhRD7qAD37pEJ)g#b&0O$cLKUzf}? zlWUu@p$f5^i>uja-AGWa+xGw&YT!3-Jf0Ztn|k&c=L^IZ^GLSUi<`}^Lz_&xuX4g9 z-OIX;sR%|19g@;_CM0hIWeI5nuVZ}u0_B$aj2DaqoX1VLzhStSgh}h7xqPCYL<0X4Ap(^LXvMuHcb8z_bQ)aK zkJ#YLIQ&Wu5a7R8a3x+r1RfVj#x+=~whmY5Dt*BFcMBup3_+JMHX`kjxOJBf+L<0N zRGws*2@9710000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/firefighter.png new file mode 100644 index 0000000000000000000000000000000000000000..2e45633ee28a615c1b18bbed0a75c441ab5471e0 GIT binary patch literal 3106 zcmV+-4BhjIP)2~2?zwYk?#%Z``+K=}?>BSioHJ+6Idf*VPet(6+XkAW2e#?=g_#xo z{Pz&Z~vRIs5nC>3h_U zZNpV#tL2r3eTOALc`nV9N6$1}C2)Kwnt&3|ot;se28Q&wn+6(5Nnm zi~vmQzrU-gFZJJE`2N<-kJK$czo%=aq=0fJF|IV_7>_A50jmJ439JozaDZNaRE&%D zb?0+sQ{2)b{^4T21kfLj(52~ff*k+c@QnRNum5*d*UywCpxghYZu@66l}pp>1ht?o zr)B@n1eZ<_fOhF<-0v=2dIodqwNw5zitq)eC22w!c=eU~4b=`zB)FmO-hEerS2)#= z|GHuSE-1jv_?&oe3DU9vdSm^&qZlh_-pyKo{@uwXe8B90LB8k0sEz;{7aO(gt)|>u zf(VAexsmgF1}>hi*|i4~wir-hevM4`eklaK%AsCwep zCxVU;z6Nd3meB}`$HYmxnM~DTP&zFTc=)G>?R(jzi#U7fsoZynwGWyx4-Uja7zF49 zA-Y-t%$8u*G;L|B-`>8X^=-M}5Pd*D+1{*)T0t2cle56_vEHQvli-Zvi5c}lwvqgR zhr!{xcYJFB%)&TJEmPI+?_6EhPge*Z(8dU!LoO{?!sy7NrA^2zQ#;h%N-sZv4v@}p zMTH%r&tZZ#AnB8~RRCsQdU9$}G6o@@eDRQ81~4hEbD9@uJa+IItvoqUh_(b~UVfKC zKq$^SglDer0)5bK)9xWni+cw~5{76=yU(`=AWjb)FQmUNV(S%sp}^^V$4bA^8RFfy z$3Wh1Jh(CAz0*Thkgy+`({11cpf~IPfB8Y3$w~X3V~#Lz%m|a2(^Os+-^f9K7b{~b( z`pY&n_f1afH9Ni2%-WOcP$}_o1@!@a;18;3-#0U5Fn%g z{KfRd>=&-M(i7}vX%3_@$x3ltZI=NS8XYIEO&(7<2xwhde zV0P<&>r?w49?NFk%n)WgM%xD_M94p2%E0@pZ>w)^{f^o-F{Fi&If-7vnbI-4Z(O== z+XAqJXJ2@l2~cUQr0p;T!2pC@66U>DYVQIwviZCIP>Lmk*^>^D<}ds2nlL;R_blUf z$*?_VpE(I=?wvNFRYoMM0A2FRG^y8L_LMUO3uskxEWr@C&S2(LL=|l!R7jEIaaIYN zUJDC@#lQlpAjj%MHk6r~t()l`px(ro^cTW+Qv5(4^p)1&(q<-@eY4}oN?z_J%>Auj zh5OS|WpTGpGQyOUYrYE7jC@;RLek<)xf>yOd|C)*T+XI`U+oKy4lUo$NLJ!m_9OPH#i6L#)#!eA(8SToWHIE7N=0Z7QbnVX z3HlH^ijEyow{tHbrL8+&Z2VN(m3aU!N5Cvut*rufb6j`K?|X4U0#9y#vHs~Vs=%`W z@KMD>PyzC02Mrk>f)z+}KULk`Tz)jB}Uvlt2`7>6^Ug_n%A1N6bg z2+#m6fHi%LRmBTvyD|!(BQiKx0vX_8$I|Q>d#w#K0cAibZn2^h2Ppfxv7Q3II(w`z z0p^?G4NBn5cfA{g@K|q4vqt+z4j-`&2{Xa0i$`HhRKP^ab@eLfzKv`-?#^c)3g%HA z#@6AvQRIzn!MmIKwxs|9ri2O#9FaM#F;0$xf~k`#4}%yOzjeD6rV?;4i>)$ni-;mjE3i;479g0|YZDUG1MT;V?z}DWDZ%ee)t01?Sjwl9IRBKX(vG z7Qh{%xvNvovd9Pus3?LmQ=@SZJ??ww#NWa&J$ z8k_=N)#VtyM8^tX?04T8BAGj+tiviuI?@V5 z&I;ab9#9-VPpy69Bm3j{JoxB33dq|V*aIk)c3q|yIeX?gnM7GswU_| wk^*E=gLMHs4SJXHRY7KhK9Hx-zsH5}Kb92Q>cR{M<^TWy07*qoM6N<$f>g5eH~;_u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4f2ae3167c477f39cf4d5b90087a7666b80a46 GIT binary patch literal 2412 zcmb_e`#%#38{Z|}S`lT@;FJ|fc79*nh! zSS-Ri7K4Ar|52U&9K6@#sr#gMt}y|OJbhvYc29KkX%5uD)>-^mNA9-+$-O>j9PenV zbM+1HYu`iFf(jAT-QwL+rY{EDXqImiPq>h$GZ?b5EZ4toRQahlcXv7^IeLZ6@h$WzL{KKbcprm{ z)}G+WF)p>27$Tl8nT<(6G!3Oy zLQ06i>++l4m4iKI@A3u*!Exo@pRisupdkupdGEnA)Z{Ke!Uq2p&$N zAa@PcX7*f;sA~yGmH$WsxZrYixY5O>LF6zdtFxxI%}iIh3uP-Z#chP^DwS?k$xJVV zPp=`Abe6m8L4FZKchGV91EoTLy-a0fY<=#7QTmZ!(T5$^hJ48t)8k>}wjJh>0uC-? z#ae~f$`2{IDUw_d*X3F$hMI0`*V5vks=hDHVhR{aym4`oPBsy?efBo)C`TIJDU zRA&Ft>Tg=1>*`vURmL^Ch^wX}M@fzucM-gP1nc^6=CXJM7#`}l&e(8ey49OEKJ9k> zy{TY=p~l8_X(`h9v+1E3C5-(f$n1Pgu1Y5n^Qo{L)A^@dQ2YSl-l>w&P?B{2;ft}7 z!H|Xyx&{h`I-R6@fe_xP#r_0`+kUJgJu~doqTYp<7JzPi0mdlPxUaT<5lo07`=Ed( zn~>GAB*Xca=PWVRi@?M$3(q|%zfLSK4G*UUrNjlkK&Te^tzAXWW({j7SIqd)$>(pT-Cyn!C9d-&Ua@t1@C*H>!38La^UW^Sv)W2 zjSlZe=6hw_=*;J$`MB_~OUC|J{jdAk^!9VBzj(J@t9YQ@BbLkwh*eoI_`*e~g0*9@ z{_Q6&Vs+00-D4`O|HAu+QLz%)<22ur=CJiSgfW}!*vbWYOi>x^kMuqUJ?kZx;ZWvdl=f16$EK#v95I+m?zFRx9XLkz40%y zs^6@=|7lFPxd*wvO(P_8Ja8c+c=}@)B~3<^NnmG>)8w9<3oz>&J=_ttu(QF)x^fI2$*Yr}|u0lf-NJ2+f9 z4(JQujypQo)8bylSY0Q$Hww?bxil{u)q%>k=FAR1Yr)b`dU4@Sa0$|d@w`0|`%+;f zV}R0^H04fX+&ijkedJ;V%sbUoyQBLc!AO*6B#y`r;yG`;P>9^ zDsr{6!62G^uX7zf{zq-*hso&ee7h&xuJ}r1Sk!d26=EdU@wRh0NY_n!yly9?pww8Q znU|wU#nm^&IFi|{^C!R;cnr0>_P4+H_2G7%x&c`Z{Wx=8cX8~U2<;5YJS)B;|Kp-0 zX^fDm~SUw9_XpSL@POq$rDc9P)zYdIBNS1ht1k39D7deRCt_(i| zaYah#KfH%+WL4@k^O5n^?UZx2|`$< zc6-gJd^ibfOQm#+_yMBR7^5sV$@)9>g<1(KpG)7_60?MxWjX$msjD=T&SCjODXCN9 zQ_#S5VB%LuN@_5fen6XkV5o>YF9ZIEaD7i)2WD+$V{u5SLjNzzZNTqRO?lz}GSmeY zF`LZh{smmKe)K}K$sMZ7{<`%HSt}*19=T-ww|JqsYnYOnCGD*3j>zl(rz2Pgu3@E` s34x4fkJOeFvbIOkq)sya&tP=U27iMuqq5DU?-Rhu{;XZyi9qVV0eN$t`~Uy| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/gygax-open.png new file mode 100644 index 0000000000000000000000000000000000000000..044eaa62df6596ec32ffbbe8c045ecf5b30c8611 GIT binary patch literal 3044 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..2496061ab46795cc3e86d0211b2a73c1ccf8ad63 GIT binary patch literal 1282 zcmV+d1^xPoP)oLP8R13I(y$5|t!YBP~NDai&janqtE9 ze&@b(=e{>@8g-+Kp2fU(@4NS$?|kRy-f5=)SZ)Bg0pR}!pf%$KcwQ;{seh_W_CD6; z^LT2>TUSp602Dax2D-I9M?YV@6kxL`wI!}JzUKHFM4LM{QD(;~kGmeYC#Y6d_}y{S zbpD&~%>D>~P_bE@WW14d-{tXhde&#-!8Knou}TYDv~j;&p_OY_m2+*48L&Z=kGd4B z_*59KFqL8i2I8J${_fl={jgk9mwm?JQ2e^MOdB`4Y&_kv!R!+j6LSE@ujlFXEV1EZ zJ6n0KSo)JXvNtOLny`mnyi@(o@%!bzKPZ1HXFNv;5*ZM0-gfS#%-{^qmHO)ez*7o6 zhGCJ3`GDu9)%*O9b5x#arrpmfCWe~S%q6p~)V~(a#Q@Yk&d^xqVS2KBmevz^EezNK zG06^T7R0z-?9smw$pL_v+_R5Jff(z1opsw)6kz}x zM)tdG7;IE473w`n#uH9JMgNY@l=3=i5OWjrS{=%-bL%#mQlYrq=hJN;Xb_VLKqCNP zs4$H3f%l&A9$->wPvu4>tOAd>O47-@T_In;`;!7fY+RfZ8;Jmrgn|}TP+2b03}GAzSm=I*Df{>d zpOs_=YauH2yC#uf+)h}4C=A2P1g;%LYqkDEvv`juN|2QyX-Inykp`j_ubGgXcylwa zm!>5Y+v}&s1^fj{62pL$AW8<_OE@6tV#0tT(`-grVLeSBGIKifqeh@hLI5U$-!9Tk zuf+hM_i^_9i<6oSs zq0~y(B1XUhvfCEDUR6-(6IFwIDHu)h+TN2s>&E(?e23932NDAq{nR1)vX#973&`}I zyfXas7218kS5y**LCOw_NAuAG3trg*`q57s>6Y@+Dxnwnp59b=!LJ^ z)%#UWR8R^5tti>EzqiwSk1o>4b{#UwnYiw~hrXpF;kUnaDHTOJN3`tR?nd9o>(|GH z%lQ^cK8{nHwy56=rkm-p7HKp%AJQ$?2MZ?bvm;5jeb;QpATzKKo+>)yImQDE#yGdp z7>(0Y%w$ro>rojs(fuDWw%fIB5QkQ&|4ic>kq9ps(udK5&z+&Mj~-DpY7lbJz);;E sjtm9(27uWiOla!mY{8)wyTh>j1<|dI33QEE9smFU07*qoM6N<$f|ajb761SM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-empty.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..0562436f8bde9dfbea5650fab02c961ec60bdf29 GIT binary patch literal 3706 zcmV-=4u$cFP)QEo)-5>Gpo-&bf2$%$=FtwfPX9*_k`%bco)4vy!f0C};dj^1z@BDoyO-)tk zOIP2|0v&nx812|ew5q#{I@Z;w5$N`!yrx?O@YD(ot+CICs6w~wE$4pw%(WGFKepG> z5PGXFI4{-S89r`>c=wUEDV3)%PF+#b;cW|(H@yD@*y1K^(0L%9FP zO_N3d`>yjktNc|Lm+6b^@1#GEKE~I|{$Ek~ip}o&i(fwM+CzZjcYH|wqvv{bTSfc1 z-84J%Yy0CTclj@W5I={KjlwfP+ylTzhLF93E3dxrB0BufaaOwhoyXmkl=3hN@P#`+ zYyOTqx^I1L#@*LXO;YFZ8Pqb~x{c`4r;H_+hu_hXrpUFWo@m0#l7D^dU&au`%8JrS zx+gntip625-uz8AL`~xOBU84lCN@f5*?_wvEsPoB=QJ|g)-b;tnO%u=FJ($nZY-R9FPR56FY&)rM-Q8bS(38S1%S&gRrgs!XZxV}MBygSSq&Y75oX$aC{V^YgU!*_!D=>y}caL~LBj;b=Ty z$Syg~=}6PzbT_<|a-sNF9$D!{av2U;`~~_O*yG4$lbQU3K~Ps)sICNXUr{u*s?$Mr zyc^@G#9S_&BFJ~>J^Y8jrn5mF|IjzRT_0rfPaD7#BnJ=GsJG8XJKV48H}|KSSZqX5 z)73)<_f30r2BcpH1G9&r@d#L z!)ZeaA8$zvLWL$c$mK8Zdz&jQxDgcBdv76#aUe7Vz5c385=&t=Et(l+U5ubNKxMH- zW^PjP>GcOYQS#*g-`RdY<%$eK3vjbsN~{Qp!VZb`J1AbXF{#^%qK(i7wBp>Hinpy1M{XzBA`_n&1gW2yCmqz9NMMv>->5G#Lo%An!_jmW}3 z(Sg`Z-M=B&JZJ#B$7UhH4_7RZh60dXpge=V_04-z0^|DNU{^yCJBbi2Tszqa*|Mx% z9?LB8B5U6;XaHa8e4cq&@abx8HGh4RN8)jaCaSEm7it*g&8AE~nrtHzeoJEvRd4Q5d_B9|o z-~Xt=A%Gx-C^?fD0s>4du&bgYnRPq8p;2~c3gpNO4oWmz8A5rxid=QHkSo8MX;|V{j7Te17k8D75gUc8I5g38B?uV?pR7d7^xbY_#tp0ORStr(jv?D)vW+LDFm{4k znhS^!m`unb2!;UG`8&1~uM={~9Q6cFeb`~*)5tp&Rs_HmoM|S%UFtDnj89umRELaJ^VMHgAKG>;yxw((hN8 zaW~<%uagsxRv;5J+5QHPnO9EmNmSu&hk(D3YwL~$4grB2HiTlSDvPWU=62W2#KZ3E zAHO5si(lw;7*|mqwBh#P1!T#Bw)&7|9tsTr_Y&ppakKOZG2R8<9vyZfN*Q6H@RW~E zo`p7W@m|gV;L0ajGtMOo3WMO#8XJX+mZ2m&Xd|?m|C4A$c@4e9ZidIggJ7e8OCm5@ zEROPk4YIb(4!Qk8(7FNi*lV5Na z(5E+W!V3%<6`mFW$*rzJ?nP1-zR@QwEUZG0A;*eJJshP+lPC2lR0n zEd%(AjE$lp1IYLj!hQ8|KJX~VRdorP+<#vz=opYZAi>$8K1uHz4-gp}tw0+x02s(g zZmhG99+G=MC+mZY_$P3Sxi=_l3_@Q6hq+Pu;)pJaB{>mZR0RS}4FM3=`|NyHuU(bK z(F%>#dhrS&rm0q-#HvyqYI(9woMxdR1F)+f@Cy>Zz^Nv#i;wX6g=qhu$jQ{mKhM+n YKcq9c)-++|2><{907*qoM6N<$f<{LY#sB~S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/hauler-open.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b08e5607d708634b8adba7ba30eac581160926 GIT binary patch literal 1396 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/honker-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/honker-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..689f53123a6aca8bc094f80b7e115785ff01aa57 GIT binary patch literal 1856 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 Z{{UR3v>giPRM`Lk002ovPDHLkV1mWF2n7HD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..b926a6b2dadac4670cc7d7dbc3373754147f0b7f GIT binary patch literal 1236 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 Y1JDQ>Q(a9qcmMzZ07*qoM6N<$f|h9@tpET3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/marauder.png new file mode 100644 index 0000000000000000000000000000000000000000..8f51c76b20c0ffcbfdfde4a05c428f376e6688ee GIT binary patch literal 2936 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 Q=Kufz07*qoM6N<$g19&lfdBvi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler-open.png new file mode 100644 index 0000000000000000000000000000000000000000..70252e39ba09d9c337ffd4f5ab36dcd800cb9ca0 GIT binary patch literal 1854 zcmV-E2f_G>P)0*j)QptZ5Oab+}J8WUYL z?%O}f$gT^^$|jAv&<5hljXqw&6(xpWs)T% zE)q^nO_{;L!M3pD<72bFzFu1KtRn7Sa1<-2lE2sk%*@OT3rk5%%i@{wH{X26Jo$RT zg@5wdJ@eZyKe@P-m6f*ie7Ukpmq8nULnb&pJTyZ?LoOknft{Tl(`+{L0zrQJ-S^E4 zOAcZH_qVf3089^zj*hx3%4{?mjss=m1chNbxY0sE)^mXF*!Nu62VF&gS8L`uvJ_Hrib-W244`Z z3%`wxjl5-O=Z66jbO(%EBt`*Dz)HZ1vW0X5EG#D_zMzDduvGKAAt)P@+Gcy+GY(cn z!7h{SUS+EQc2ik#*=1$lmt|QxjY-`0(GizeP{} zk1YQ}kNGiMPkZvOS^lOczcT>GICd>0WJXl%^N&9@KRe1*O`PT4#xgRMw*`|RbD>^^w@rxo}YY}&h?{Eb3D8{lZH{rTKH{{FkOA!vBS zy#3ZK^X&KM?kd4BT;H(7$OE@~`sS_NV=Uv)&hJ)19RG@mkP*ZvsI|Oo?%1*InSH+d z!H2F@NFWR?0ONlv%QI;6Jh49saG`>$XA@J(Fs=Nq2Y{Sopx6sRRMLW{oGq_V@D0-) zt?Y`KKD&1tQF1MP-L|a5KYq4$G! zEAYi-=FgX*beH*@A)lNui@VLLD@}9l>T7PSlfVjK(8kf5WWH?EDd#{XK;9C0HS_1o z&`xePJw7aIy!RQ zk8U>ZLBuWzpvy5VcQEXDihJqIaF1juBgfdw^ji6I1Ndw-(L=-)yLtpFg09E7GN5vF zLXaMnme9)Y95Fk-rL+zb6eke5$pjR~OonyKQ-*AZP&L2n0r+NV$y2cnn}5UH-Q9IR zc2RaISezdnNQO9qElPeJDuN%aHS0IkbiJo$Z;!~n)P#IY3>x*$GqC$?hw@s18hHq`NVGC&IJqKnDN zsiffiqqa;Vzy9DE6|FFse((!b%HvV%x z09~y(X3_cZ0n_4I^aAC&xf8VUmkmKlF`+ykFL(TmSpPDvK-lSgd^f1#kNSX``J+Cd zX8x!TsF^?N15DHhsOFFQfT$19%^&pvHS>Gx1L{7XU$;J?U;N(sfG-|BG}FfKeEgU8 zd7#JV^G_}Rq9;H8Snt)SPXKzZ4`^06AK$ESK0dpz?R>s3f4}qz-ueJH1bLp1zh{Z( zdwf3MNrXK4_bq?YWBz`*kO8fT$0M`hYg;bi-vlpIH})#kNSX``J+CdX8x!Ts2NcoP&0qj2h_|T^#L{WM}0ue{81lJGk<9M zfTUAJFF?*ycDSl)IsYerNcsSk2u>fM4WZ}*)FK3ZfNCQIp%2iE5cC165rRHIHG+yDRo07*qoM6N<$g4$VwYybcN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/mauler.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3c934016b5a8f85f45488ccc3b028458758c8f GIT binary patch literal 7304 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 vEdYry=NOS|QH9VgsV2S;u7f zL$CKa^xV8{?`6g5liZx%_n!AT&pGe8?|pk8S-@_$Yi8rCtE)EHBKy9S=WDCK*|M3J z4od;R$jAuWva&K`%-!JP0LPm4jH|xqza{M+x|f2%pfR?*yv(+(t<5rqrGVn%V)7h* zjv})^sKMEWf?*muKhbhE^d%j1KTEKo;8}j&(9mFrfbi;?C&^J(jtcBfKuPHVwjh8A z5Cfl&d_glaGvxQb#rKhGvurVjXD_xLHAF~oa7|B7?@qv1V;5}CcwXRggYaNOBV7#! zD3M6eOT9gMwui`hfA|wTU;NY6gRwI{zGYv`k>KF6ijyHgZ6X8&&_Mcc&FAxR@an1> z+PW2|$gT38ZO=H5i3r$aQ)(+KD=D1m&6pwpjm$h=Wf!0VDsuMhWecBB@CwhtT(8&5T*8YO zYD1<7*x1-$XF$)IEh^I8-E9O#py=W?ll)`ka8?<@{C+Wcjg4tY1YDBPjy(WWRaLS5_@h(ga=AE@ zUsu+6thu?_cU(~SrdaP{~1Q&UqDFN+Z4s;H>Q2n@{6&$ERufVnDPI2_JS0N`{w*(RGtL*@t` z2n09~G86$NB_&)TJZo%hq>H0IipS$T7t1PKX2=jA&4PE>;c)OCjxLT}|A{k4a0J?a zpvHLj?ZuB7!QqpWlf!fLEtomLrE*&eKy#o;=H}+8wY8O^(P)Y@h!Fspw;t}G)9-H+ zpZf4qdj9AUUJCfA00%^%{FRlJq&A>w1q6kKg@yq6Fky##^_ADi-+OxRgMQu()ejK3tdJofH#e6pzVpE3Dj3c#xeT>ko;QGw|45?{{8YdAwxAsvxOgrAi@`UG7VIb)3LOG@kO>(qI? z#o*pi0D$#J*^oiOL;2cMCx)rLoT%e?JMAwm=Rm;1!oqeCeQ9vniyooHA7^Rkvtb%u zBKq##b}exuVbi%ZaGD`Q0GdS4TvHn`KR;h5yvf8OVs-5o&RT%rKVM%mf@6+a1>w%B z0_l$LJnf*@zlpMlvC)fsR!rQuY11pgA1)j|wr+1}cy{{x1P8~Qaj!Yw9R-*{M5vIX zxC#lLEwUEyf8mY-P-^{jtEtEHY=9Fn=H9gc08Ix%U_5yriA-nspf}jZYwq)}1+1;D zP~)K%J|Ptq6@xeJizOou_P`eCQE@-xFfFn`s;<8H%H P00000NkvXXu0mjf&a;Wr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/odysseus.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/odysseus.png new file mode 100644 index 0000000000000000000000000000000000000000..0daa691044fd6b545c8593184923f933746a996f GIT binary patch literal 3251 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..cde4774f088710b6d90a37c8a3b1b501f05547ff GIT binary patch literal 1258 zcmVC9n@6tb(lQMHUqVArKZ3 z6%T@_7<2QY1agQ-yyPOfVC2C&1d;F#3j;Z+Z`AQx@QaJCFNhm`%m6G`ips$!a5f~>O8S99liA*bywFZd3YraY)(h6 z&S5SD+|E~b49K68o!d0Ayi!28#b4Zb^MIxnV=)fFyDE>PnTt7ZFn_o@M3X$ezi$}I z3-hiR;{~9W0W}VpKGh)N@#e9+^rG7n79fqYGqk6=mp*nsSOs_Hp3%gW~Xh+pTsJVsKfaU@*l`ODn; z3j?ub=S=SrEqMBJ0I)z3(4ddDwS)oWgXRH@jgF1cr#G+Yu*m_)?)?WT>U3lc)@tRb z4lpvm(x3}$BPj!*qMJ4Ax2}DWF~X8Dko5oX!n82}${pkKMB-sTjNf4gq7VbgwM!`!A+zhtD;7CuMHb^Zwb&K| zH5!*qr}^ED=WPK1EoJqpR- zt|9tHSrr-M1qOWDtRQyt4hw!;hTt8H>l%r7KsiD%tEF55z?Bq==UK4}LNi=DpEfUL zMb>gTH_o;I)V~wR0XAv6=+6M;HfHf{$ylpG&w4Uhui?R3bibd8vRDehsRHZ0PrKX) zj3+ASp70)fA{xrgt*^YM=waJd0HhRv8vmD#)&+6P9y$=vKAA1CS&l@budzI*p0v4| zR;3_ORrgGOz;hf_CTx{5075?!21Z7>=0WkABw$OKa4V#Ol9PO4@827y^ztFk<+g-v zjaeA{9R@VPK(kyb%t;AP9m!RUR)L?;D`gh^NVRBSezl6bgeAQ8K({p+;HfEad56oNh2tC!nszQ|GmKpoyR zo2B#zJQ44G??62co$lqiQtyKRxODV1lsiDx`@#twL=g9ka7&O(>HW|1^I3$JB{b)aZP-lXv5vTR#y(op znLGEM`M&R*d+xb+)>G70Dc&+`tpBgStdkb7y655$WjEJEJj*|pX?C!iftrq8u8Mu` z)g$&_123ZmM92?i8|ZC$p2x=75gTC2o$5~|FFw2J{PElD%_k8|<}h3$!esypa1xVo zA&iR2+m9UJ@7wmaM2NqBoUx<+h=@2$qIsINBPRfrtF{ue0O8kiwO7w^bBu6l(bZ8Z?mWiZ;4o|; zn#<1sj0;hsM#Oo}R44$XATNI^QBS^!2IwWv_vC+>Y?Q39dTN;pLG#NwgO%ef!uF^F z^aVJ@qYW2W2&=dA0O*@E#oF9R_g~zmP7`TgpDjGI1(<^X%+39sad@3IMb09KJLVtL zsK*x(00$^;HYWmATG(`gGk_o0E`6tk_rsK>6}oZ!E|X&K#V`kPn9J=yPk-vRa1erl zQONQ>!O)c-mx0wb z(=d8X#olQplcs&Lj(y_71RzAD$hb+5qggpYjw&)xN3J<9V2e>3~2;k~J-O|X70^{Y<2kGaI zTsk3A3L<1fn}`!%`x(KgX$&%ZuHz()m@&3Cwg#k$_y%$j;iZ{P){-#)#LUMEh%+Bt zUtacxb8FS!n$-y4)S-9^)DZNAga}~}2%o~H25S5Hobur|qzk|qCu*!pu`00GHQhPW zEa0>Ppj>V+fYf?5fM$Y-xT$=ryd|skMR6AfAGs@D1aOr~w@WG_bjUgiMe4_fezf?$ zVoOGhoFwUzr27EK;UpK5zLLCivIfg(CmuO&nV;9d&5rEkh7vTYR^ z04Vou`yCgLTr$!P5sBU=`3(qk$HZ^tA*y{+1vsVVyatcdd3Oy9SXu^x0(-u!r4qlu(tK;Hi0|AfH&-y{kkd!{ka%|;?hy78m{k)^iwb|*kT?J4Hi zCY=IT-R=*I0mitN(hWWkDq|0?!qz&5kv}X6B4zAuJ+JX3l2;=j6p>8s=3F;T_lwv+ XKvt(Twaoy!00000NkvXXu0mjfWHL7p literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-phase.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon-phase.png new file mode 100644 index 0000000000000000000000000000000000000000..17c15ae1af1514de9a2617d7251aa4a1d663c2e1 GIT binary patch literal 32188 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 P00000NkvXXu0mjfmv5GE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/phazon.png new file mode 100644 index 0000000000000000000000000000000000000000..558d23c2241997dcb80544d6478e4f3dbf7573c6 GIT binary patch literal 3364 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 Qt^fc407*qoM6N<$g5S;?O#lD@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/reticence.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/reticence.png new file mode 100644 index 0000000000000000000000000000000000000000..d5fa5a8707ddd8c20340fe64e0caeb3d49e85abe GIT binary patch literal 2899 zcmV-Z3#{~sP)d5pb^QcT2z6p`{MGGagxks@Vau>bqBI^W&zENkt(_POV{ga5Z~XPi#B7m{2N)d#+ozE?c;8 zVd)Kb?%XNcYB~&j`GS>c5qh5@KS;pEix=~a8#k8jM~{mHK=1Q+_3Bmkebc5**{W5m z+KiW%Kols(WWH_Nwj>gej|&SLZW#Ic^=tP$Yu2pNSpR(!`9T5>9z2*WUc5M4zI=IU zqy&u|IWpU`XOC-q!GZWur$K+QAK^c!*qtK&AkFvFE*SgO&Yt}d~06g2@@E+<=|Lxnie;JSpE1zfPd-X8S zcK)~TRR;p<R!HlS(f7&gZYgzA_JiX8F^?JrNEa@VnbyA`SWM6{J_9~ z(}CEKD*rD6rc9ZVGhT3GMOL5&Po6xP!|LzfzuS6*pd)Dd0T6=nL}3Ea`}glFJ)urM zWUODm-n~;0eE061`$QjfYa+jm0Hz-boj!d!(=^08O&T?U~D0z_6#Rk$FeSjE7pQ>XfHX`XRwm7}gzB1JxB=gys*BY(w;6)wQh0bjm+ zaV}0h2x=<7p8`reXhgy?4@G6Nv%aFT8wMKlu&$YcAoSwJi$0a*oiV@(l?-G`xu){< zjyN=a{CM|_VV%hDhZ(-$a|$d0mCJ~oCR=a+bcd`6IOX<+)J=6!&Jy0?WC^!hFg9~ z01;Tznh!;3Mf@1}jdH3JQi7?89`t*Axa2zm^g_(~Ab2SInmv1VR)q@}F1XL@*RKbE zCvqc8xrCL^I4-8H%63!b$I2~Ty3`F5$#(?!LCN1iVY7n<2`;SfL+LERi)rQFy?btE zU^k~|Big22q0#f!BW~Tgm9JjCx-3i7C+kE0jT<-I{2r3OZ{NOr*REYozQ1s?ZQ=#Y z93=sEd}V=MRHdAZQ`Yx|!nv;m!pR6V1yRQmpgdlN*a%Hq)F*56jrZjvgR)KK(9kzwdW|d$(-avdq@8P^9;b_eqd3*1&Gar%m7ZHUdOK zRsrT|1d(m|zqQ`EUI@JZ-kN|rbp-Ksu=k#Ub#EGRRfX$mXm)=v1zae>p zZOek5|McmTTcp(yq6-!w1PRb)Llp_?ZLJbT1lYNAXX$B!IEEefxIzj0@SG*U5{vmIZoC2M^li z1&qJC^S}_OQ`B`apmnyFX{CoOcCV}sY^m$y3dj=}hS*XJonR~q5hwwbtXukN0#ffDB}5*H^(Aopf+39R=klAp{A)h)@Ow zi+BcqELEA0El{eLB+xc8AOOgCbn$hx;Cn11jm7{P(%dT-V^hKk&|xD{AEQxFigud> zwTQ6w5Z_V!G5N3o^6T*?iUuXpN!se`G8DwW%>fh7JRD zyV12VKrW=jW9!zfZu%ozWNm-~mV~Uw2pKP3(CyNtOPS3T>QGC7=3HEhmD$v(Q{76f z5SU9aP~xNu3cUbrliu1SO*)`cp_@CNXZ?V;rcA>@0_@mk+`+8=e?UuHKFO{5ot{uK z65D(024ome@7whPIu$xP5~fX?hNtGz*V<$eB!Gfc&?N>=R0)8v?Jp=0013}GB3A0TuQgAOB= z*9@W4A|KHmA!~e{Q6wUELDEZ*>>N6DsIrXFH`jV5_K#CR0`$KDtOe@!^%an`W{8co zZh*EWha4Z-Rr+CYL72NQKxZcH2XMN}MI>D!suQB$P>xUX1Kk1cWG^rTwMX092TVC| zQRlE;z^2gMqQ3|*1zcbw&o3Bsk-jRsQ?EmWk|bq?*$^P(0mi3z7iqX=B~s?t%`y-T xf~uh8hU6k;iQ8@Ww*(f?wdJL+)+KfN{s(-*);MZ4?&$yk002ovPDHLkV1fw*gK_`> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-broken-old.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-broken-old.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0357f677384b5c37b97cebc5a920d2ac9ab3eb GIT binary patch literal 1130 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 b=Slnr7z2=O_sOHS00000NkvXXu0mjfEO2JS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g-full-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g-full-open.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0c66b44e11492cb74cdbac38b8e1a48dbe9b54 GIT binary patch literal 956 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 LNkvXXu0mjfOu4Wo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-g.png new file mode 100644 index 0000000000000000000000000000000000000000..a01defab94ae0adef399f0568d46df5dfbd3421e GIT binary patch literal 1019 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley-open.png new file mode 100644 index 0000000000000000000000000000000000000000..530553d41335ea702d7134826f0b67ee77f31131 GIT binary patch literal 1138 zcmV-&1daQNP)iQiA33kks6v(DpC+e5EK%K+D7%16+R__ zL=QrLAX13Jl1N|{_-If*`Lr*UB_cvB1ra1t5NePq*+P+R5z*i6eslNC&di;A*P;(} z=FUCyoo~*ZId?XfvS59rz-g$<6a9(AchP=YPUQsIqE+pKY#EvWCNOcPaVs^QsHMpE zkx)CEz0Fn?B?Z9n(dZspQ?OGSeoakNSMQYO{QS8K)YH?Gd4qwtYZ2L%aNL!F|{0xZ&08gE)NxuqW7?hPo;FlCyp) z(I(o9ox_sEBx1mMf8R;budN%R2_Z=5v?d`>M$#}kQc1cxxI{Mwz176;zNd;`&*|ld zT&gMjNhKRri}9t8Kjc{a{(IU|8kc+>?IpCXpeWVAH*V5krb4*SostF;0j}G>m$V)Uc zR7|*%El{0v1RLtEX!h`lD98w)3U01GELEmMWlo~}P2Xtk?jovE#<`#GCM|4Cs9TFj zyq&p+YM6-tAWClilAJU?nUul+E~gL1#%TZE60N)fd@TF>qVhTBws3^VHr0>$xP<^S z`4|VIUKAiqJ(_<5%njp4GKvWB-Z#}3xi6z)m8=rE5Yr|{MM3IlPimy#-~z<(@+g>F zL;(MIBEp91g|NdI;OeKsbmWcsBcN7A8#kVX06rpJ=^})-zi+1)7sbR zR)iYhe)ohEtOn0)gs)-xCL_XZCMLk&5wv`>!X5)*+`0T2Ch}Cr(qt8t-O@S274-QH z0_I?@C&JDxD-wu_F7ZG?LVBqNC+yXeWH*Z}QeGWgeIodKy z>YWc`6Ny=Q5^OxSf@T$fNhr4_*g2BPyzjeX4vUCo;mIn%M9?YuAMgpt9HETU&e)Lb zWA#DccOHkINAFt%AgoA4gtD}vT8=Nip2_N5h4-6)d>po|lLC$&*(go`_8EpYXSiMg z<~7a#el}1r`*AP0nJXCvZ66q%<&oP%B9RbQIA$k7U~woq4<9d4OKV#|4h=gHp>2Ws z1HzmH$3ZJMVG|j|Ed(I!TsG}c6Eau?zw=t|cZZ7o10)x%cK`GZ!vFvP07*qoM6N<$ Ef&q^WaR2}S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripley.png new file mode 100644 index 0000000000000000000000000000000000000000..221b21c44f7b3de6ed51ee2d7f03a3d4231b17d8 GIT binary patch literal 2894 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripleymkii-broken.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/ripleymkii-broken.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0357f677384b5c37b97cebc5a920d2ac9ab3eb GIT binary patch literal 1130 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 M07*qoM6N<$f&c-A>Hq)$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha.rsi/seraph-open.png b/Resources/Textures/Objects/Specific/Mech/mecha.rsi/seraph-open.png new file mode 100644 index 0000000000000000000000000000000000000000..b5abfd86cb58a3fba5a2baaa883da84b818b7aee GIT binary patch literal 1708 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_abooster_ccw.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_abooster_ccw.png new file mode 100644 index 0000000000000000000000000000000000000000..ce3f0984ff80239d5d88d505573493da2fad8df0 GIT binary patch literal 1313 zcmV++1>X9JP)5u#E`HWq}12c6N8h z^PSnV&ZYy-));;8mrTxW=KQ|%{cdM`_?P8>0DlRfB2;6#-R##p*ZICjdKQc;rLzdc9fe zOG`_5{qz~U^X_?6mOtRA!x2Dn=^=T%wY4=l9{OZZDh~t#(hPr6E;jJ_q+(symzpO|q6U}a$rue^8!+RYifcDzxVfO6%VDNIh?M1Fn%G=C~(z$2__h=Iij z;P-k!UO4vo1h`}hbH7X{d544HMIC0`Qy1Kg1+uMuk>T1l+&Z4`!Tb`b5 z&_U_6cE54O06_pA2_ha(hzGAoZHs+! z0Ki1_7;fCUjfV~%kQ?z)Nr-JvPY*^$Mo?T_gm5@4`(!||#rJfb-=$!RvqV+GM~zhb`a7JOy{b;V=a(btD#x~pfXjG396{52+?R%zRNjA2o%DrBnu&u>L zLYO5U*9F)D#Nt~pl7>vxsT9HJAZe3Rx7`7Vu5Th#wI5%9bs6W*y(!Z%Pj&U%A8>2t z7vw4niAL> z!o4tb>w3lbCQCeVAiyZumRTOUW}EiGH+m?veT@%tHm$#mFRjLgr^qqFN2E?oE+l?O_50U$4>2nK@^KsbB`jn6+L zPtB9D#ImI_Ry+#VcyZ+#0V$T=db>wl$?7wC!ZiTlv08usb+f&_9YcWu-9n!(ne-O71@5$i(?T z2qCdR>c8lws=DZ+JH!fA3N4~iRjHtKQMD)w6xvn7iUtQlH)%jgsv^W!oM1cSkJmYO ze8*!vj!h*BNE~V8=l9;cd)~eG-1o*$Zy4_htV-a(fr!dxv!s+FkB7+X^^xE2r$V7X z=+Ec#JeEv8=HF1LiQijVdQ!H|!oow(D-(!B4yvJ{L2i3Y>oDL3^j8}bT)H%@s*!Ld z(A^zXeSOEdy_7Q8fLCRC_qkloHV98h`(+~GaG0JiXSjXh#3{OV?PpgKt_0v(Ael^3 z^yo3Va`h+rVB6-3Iq(b~Cxpb};v&W4{dD=e@2P1+h^nE2KJd}dyF*(*+O2+o~5PkTGtDV^5+4|5m#lk9~#Z+y7rQK zuE;P9nwE2gUpXckI?n& zW7ON*Lz?ENRO*GRmt0kVg^_g5j4i5}SLW&4rT!>)~esx{Po3t8Mt%R)q;=)cZ z$e3l&ayyL5?g6P6GT-ml>LUOdW?wQUa4S6WNbNuy^FYe-fV`WlO`uYSTc{SIAGa2z zx28gdk$tD_c0Bf3{W8QP!5fjGz7{f!nwguTr)k7r++MJyh_=V$rN3q$PJ`Tq$Hk_Xv*^CaX%8$XVm% zzpE0cl;I|-2h~nPC*rZs-ys>2wvGk{;(Qi7dQ_~4d4q?LRHbtPmy|3k0)2siZiXk% z$rlI&D3$S&dYY$#senWxK~qzA>XYI2?ORksLj%WrpchxN5!$qIgPokH>sC#$6rt-@ z;^6=@?J|(SLxXX;YF_6yHigYA+A~)#)%-5FaN%p}{HV>Y_rYMWSnK^|_d&zRazbL~ z@Eqn34}U{#ds=KM*G&MoS6rpfoH@&PI(xFYL+q>?U|5cDkZazxgN=`l{z`Lmf7gF4 z7ZM{QKPp+wx@?rrd(n6(6y`AyGmI6}OF8}zZ%Nghpa198KTL!Ky=J`K--iDO{ssI= V*@Ns)Q62yQ002ovPDHLkV1jfVGpzss literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_analyzer.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_analyzer.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6a2194a1b578269636fe5b56cb60b5f57dcf73 GIT binary patch literal 530 zcmV+t0`2{YP)&C4*f}2fNvb)}b9ld>jU|Y?&CEFPr7y(6@25h8?;aCEap597!%Kz?$zbsEr0)BEPf34nXFGGh6fyVq; zi0_eK2?UdS38SEKBJug*@;Ffvy%o^rLUz?|#$uLKrb@QE@81MU)+MWOt?3G5UzFkhGg7r;X~ zIgXMO38*O(;0nxl3@tfMssih-gX_~lDnN%y50BqO_JcG9yosZ@{|?(y6yODgijm>? zB%*&#b{-NH@JQ%zxPAH69)Dyta%Hn^k3-@f@L+W6K#7X;22c;Qq+LiJT)aQ3#!YCdpyvLEwNFCc$aW4)l!f(ZI1z*{lve7x~=0X3q@8FpS9Liq&<)S5Wh zTJUY_>7Bo|5P)SYyK5|ownkinuTEv|n8B`U&AM*HIovAJb)-RySH*>;^S zw-HoA_xp10`NREw&i8ljxq0}5U$ zH~`^KKx9mSn3wP0i1y2^7>szJFVP5d*XVy35m@AWrR)x zFvm^_@04~%+$~4~EvK8YcDWhq=r`0J+=i<+dSRJd33kmUEK_LVbiITg7GN=;D*!dG zUbmaR>t^2_7_=n1Q@FW6X#m8WK$O~U;Zm>zd^7}n>_x*#E1gd@CkYY5#@Zto z2?S}WobNjk;m0twS_E zFlpCQGjGvFv0s4Z`)4F5B4WP81G;OU&xe`~RY0Pj6~MAJCcJ&6WXdWGg54H3_qs>u zT*%K$>y(=xVSB|iUOd381W4@%p7hc4K=iodDKaSyfS9ND-EaID^GwBGcDqNcw-Jr) zP3Z1gipj7-94(~glE?uRMIv`N99h4btQQd<6|iNWiKajf;gzGEI9%O;hbMqo*R1~cqa{eF-!qugoiQ&!V0fIl zcI+Ab?p2z635b;7tn(bYkI$4~mU*HCxhi7`2t=Zl#zylZ!t{5ZsjLj4{*Z|Rw!OXw zc2y}jS3LGycb^sDS0d)g=kpib(zAHM;CHmJ|AsPv3?Kvi7XUv25Sa=UG5o8_00000 LNkvXXu0mjfg_cNA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_carbine.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_carbine.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff2c4c103e9f137efe3a2ead8c32ee42dc907ff GIT binary patch literal 766 zcmVA@4JFp z8`{Ml*v@&*Iq!Ks&+|R!?7%i#9v}~p2gn2be*g}LL&$xv*DI;#s%>>b?YB>jq65&Z z$qImi7w>CEVW|nr;UFA@7s8K`fo zZxU03Z!?D2bD%{mj(a2pfPxdmi;;0G`kjb{;`kB*?w&ZsAKZHH2W6})GAQ!Izpb*r zG(RV5Yfocr>?Pzj-HIzJHU854i~_Gn(BZ0r!Sx*#54^Z$zW_^ldFqP{H=_-5iG`(giVQl?q{FRiW-@)!e9 zaPWc zD%@yngmW^W%%x{bX3&+O_4pyUT&_PJ$VBEEUjq<{M!5~HuXAv@{A7IaLQ(iaLn)ZD zRfLm3r1iht3Jt(aBqH7E>*I2j6ci{xB*EmsYv_yxtbeK1!iSNrqAD{fJ-dtnWQb&& z8cg|I}!19-_ZBlAy5OlsHu;<;ra-z-m0AJVGQz+!httRv{w*(s`u6 wThOT|+j0qHh%hogY&iqSwdDcw0NW1m6S-+UJ7-p^Gynhq07*qoM6N<$f=O*+1ONa4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_clamp.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4fdc2f08a1f9ff065a96494450744b4da464b6 GIT binary patch literal 855 zcmV-d1E~CoP)a1*Re2~ZnAO8X`z_$WXR^sFXfeNgA9!BF8@Kg{<86f8kXDiXw)sMyb(M)~I$j6s~ zit`^Za2@bJKuQP+(0}0)Z|HsO5Yd7%;A_2)eaAdB+GHj7-BpJ5?I1 zVWtDx2PCwcNsoV0WuVgB=u{)UBcTmP?=SnENJo-NK-AR9tdWpBY-G|I)tYKfqVJ7% zyA66zS7a*y8ba%|vvq`R1r$A#(XGv4wzYK3_~CPS`P!FO3*Yo>D7%+90dzcdnn`qH zvNk2^3%7mGkcp)AIVK2dr369sCDF~u+LRKB1eO*i#M$+rvH2eNcQj?T3Dbd~nyd7O zYz;*>B`U#0JchzBB*c2QtY8`akf@IdOF2ii*$|clNKU*^W+W$9jqAxD`yVQ!Pj5=V{0fWy078Vx&VeAtpPB7Bd0U*l- zH5?fDMZ_6CzIn-D!NBmJ){ejk0g&ZkZpIALrmbT5{P7|KtpV5pt723Chb^AX2=pxj zC&dbU0^^X>Y<_EXWQXD#92Y@UGIb!|k%M33bOk?=|`ZvR) z*9;72=6`2k{Kvqc5wFFdY3+)l@%M)>AnHG*j(|r&!yI`Ao;jZwq-LF9*gltmfmPBR zN!cHis1Z?7W?%sF?_533plW6NKibWiVd<{DaMk$ux8n~n7#lM%oIQ)=0Ii=b|F5yv zFgiN${a-O1V)^gqC&3CH+yIfr;6w?x90)*s5MXW3+e!n{U@-7_m@vHeEZD6@aPT$L&0pI04F4If_#l^ISBX#6flTL zh%glA7o$YQgb5QEu<~a?lz}Wqi2`H*vRvBAoIyVQ!Pj5>hc004Gl%UgdE62|}l002ovPDHLkV1o6}0FeLy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_disabler.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_disabler.png new file mode 100644 index 0000000000000000000000000000000000000000..a2667dbcd785f0fbd60382d7a0dd140d488bc1fb GIT binary patch literal 799 zcmV+)1K|9LP)RCt{2l;2BJVHn51BiG1T>CA~vbndj~*`0}O{UnhLg6bj? z3AzaCrvD(Y2-GgT=pt$tWk?nxBPi&`euxm3CuSHJ&N;U1$I#6-m&)dt@pj(V&fKPF zgg>&2ec|vt=RMCk&*%BRFDD0EtSmqlAPbNM`2PT`Rx6QmK@b%G6o57_s5*w-dy4V% zhaXmeY&OIS2Wa!gh8oyxb_B-9!Sg(c`TbbT%VW>AS}lf#hBgd}0oX5GCXJ8oE5vC* z9k|(g8%2h_tl*;22%XuC*3nVuO!e@->4rh0A*$kHcK`a>opr%50NR{FJavp0D5$)oPTNmy;Zo3SPJSuN-KoKfw<7%f1&W^$frqYb62G1LQ8oan7>T+%q}J3ViW6 zi?n$>Jdf~q0TpexU}-plUPBdXs%zPYKMXq*neqdNtr#2-R(D`j)y$~$Wo7K85uXne z3k!)N({?9fSlWU>AOKB!8|K;p&Y*{;umC3Bgm8G47>%54?sB@|@lMEZL9(KR;1tI( z7pMatBQ@ZYp3`Zl=ttdd54-a7cgf}s$1sajO^r>Y$KI3Jh7^EMB*LOU7E7$@l*$!= zv@xp>&d>=_TU*Vh&7{X&J+OCo;cD}Bc?Z0qkm6c@KWV9}!*h=Z=Gu)!YnXI}27sszHYX!B9vZAQ^(@8WBKp1%;Iucyc#U zr!6W){8tppZ95nUg;=y6M6|aT%2gu1eL-jELv|=L0!R>l;__k|`P{rK<({iF5pH}; z{88u;6yBjQDMDPQ9;G*z1z4*jd!?VQ!Pj5=V{0fWy078Vx&VeAtpPB7Bd0U*l- zH5?fDMZ_6CzIn-D!NBmJ){ejk0g&ZkZpIALrmbT5{P7|KtpV5pt723Chb^AX2=pxj zC&dbU0^^X>Y<_EXWQXD#92Y@UGIb!|k%M33bOk?=|`ZvR) z*9;72=6`2k{Kvqc5wFFdY3+)l@%M)>AnHG*j(|r&!yI`Ao;jZwq-LF9*gltmfmPBR zN!cHis1Z?7W?%sF?_533plW6NKibWiVd<{DaMk$u`hpi3@~jLPCLOzgaDdj&mjBn- zYZx6J`2Me$4zc|A^OIl&4{m@+V{oE`TMh&uJ_xYAKf^F(!4rm<0Dp!h8#aQ)rYu;9 zlYjs7SBAnzM;Yopv>6(AT!lCQWI2fDfBy-r;r->44BtL8Fg&`$z)&z7D8LCxoFHE# zTMhz#0R;>q5+V%6`Nb$vF=4_425kH{FnyOVp+*5R09h_=WzHa`c#>g>ECYi_J4757 z1*`%*ur$CBkyysCVty9`xd6ohPu@akkk3JuLxLXyK)#0M4w&U20J7ZF(UXCpy`6Fg zoO!~)Xq?OmE(yiLDWVAs4! zcHM2-R1el3_Pe~d^Jd=sX5QP~UHH$^0dxQzKnK{F08Xb1VCIWbwYbWBBrU4%Jm_d5|>(0s%aIG6c8Vt&}htjh2N` z0BCc95XRqPF6GDSVh$e{0dLO(@D7J&Q8t@})oR5_*HtXdCh_w5V^}N}1cN~qk3=F! zr_&I_VchEOmdZhBN^o+*4{G+;E6*1^?abDjfaC(u zdCiUUE*Bf4TcH~%LQql-i~?Z$;gu$LcX210_ew%c(roxh5SW#dl15((ICI>k_-b7- z73QkJ2ZshFU#|~Mjg8X7kr4$#0ieyv8kbj;M3g|bGDISgVAj~yhK{orS+7)@_n?C3 zkrPE08=pvOfR?`*(CTT0-EPPG>1j=D%MTHqfNDUorpthZrz6_Ipvo zQDt2s9+yYCd>J+`fvlNN1xpP?QYTUSF@pj9sW*zhUh>>^uVqOymH>ojz#XwwvJNzv zE3h!1D@JUr`D8uI= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_grenadelnchr.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_grenadelnchr.png new file mode 100644 index 0000000000000000000000000000000000000000..6148f6b1ad3b211bdcd96f6e7446a1a77a29efb4 GIT binary patch literal 698 zcmV;r0!96aP)Ch91OX_^pit@&WY=ew`WbWGc1 zP|$*N$S`l-e4O7q_s(QJ{;_NT8^8vz0oFEvBuPvkD~jUys{mwP-?|T*J=-yt%RmCy zN)Q3Jo4w2D9hGB`znSIK_cfubCP3!hUG0cQ`|x#cLKswD^J8l>0vwL^^I9G)tr4bW z3#jutQQzoe@n<6j#7a=h0Q%0HW8L@eIQVKo30&*B0dF9LVrCOAbabFMK7eoE!w5z8 zpl*u`i8nF88^Jn$uPY0X`HsB@#k0nrJ`|=L1fM@82?!jZdIDrl5dGtmm{FrBW;J}| z55BtpkT`EPr-Zav0msi@M0zGIN;MrDfc9kpeoqMrZg{Gz6F2Yn;@E*s3{SnbR)Q;X z6I}8<8gDB&8$N+xL&MU^mnuA=pfID2)PL)`0YxHnHMdc$I+;wOt?e*BhB&SX5H9zy zsSTGLyL>)&a`&S7+jLr-OKI9K*NXVL%n4BK2Zvu^f%gOH(clwQ(=q@uHy=-?Qcz1J zF@7*M2JmLn)wFFV64_B`0rG{#m1N3gVO|+OHJYA)bo8{C)4@n;{JEtM*Qx;YLAg9MB;I?s(`f)v z38>S}(v1m9FM(B6ErI@3A*_mjD0& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_honker.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_honker.png new file mode 100644 index 0000000000000000000000000000000000000000..ed489a07be7afbcb8df7127642cd0a8be4bcc0ec GIT binary patch literal 845 zcmV-T1G4;yP)0691}!W~38Duf zBBFZf!Kb1Z^R3VqAI(3Y9|RE*K`GcBGE3=eESok2@_cNB&IE`nDf5)rs5i2lIuK8Y z(C6z^T(SVi#yx4OphqCpf;uqJ+mGtK4wSCNap6WQTjL)52IqlhR>g?t9mZ$E1P!Cz zc9>ZkjYnCvTQU0;RSSRxBj383Uu#G$K?a6kA0;@UDW_X)S|y4d{i9nUuT z^blVAzA~JX(@>Jv*EF!P|9Ky*W(#8RRTvY6h#p^Q>8x{gV_Ey~01#xT)n2#_rj&tIP>2a0aN*7cP)E?WAegrGvB6gpy zOp^P&3v6!LFRFetJTQ<r|Te1qW z&pdp2dE3<~@SU)X0(iv2B1$TCE{RUjGz(x=GG)+6nv)pby6mmRGZTfOZk-0MHK5bbyPXxyfw6%2JHsi*pg? zg4;7HukEgM$hi{dBI1cSA=R^k*rZXtrT{KtYfQn({f%7&`v!E>wy|@dbqi(`@F#+Q zY+g;ikvl8>JMdQp@SuBbEvu5~7SS$J?tfMUa1lV2lun*C0ox+f@&EiM%n8T|$P_;T X(ll8O)%6^=00000NkvXXu0mjf@-~8E literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_ion.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_ion.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f4bd05d6e798a476bf25b501c0f170408cb6f7 GIT binary patch literal 713 zcmV;)0yh1LP)TlfwajGzydL2$HWJ!=l#{rP0X#Pd&TyTQCfOnp23UZ)fo(6+n5R z3Vs0?bsuAcsCnPeDHdA}oM`y?(XFoH30Emh%%eagx_~m~mch8=F5&N^_~XxCR4oRQx1odkEE16=#O( z=85@vHYiiAvX+`xg>Mi(hvD&f5DJBWvo~4p;$aJ}8_u_l;hkjj8b#M&08yovonv25 z4|@b>GZ~~77o~x=O)*qZKZ0B?2R@a8t#&uy-Ou{Q=x*5W>MH^ zaKdV3RiG7kUmAqHA)l>5Q0cT2w-s6?Hn&1dz<89)a3?*P67nS1JU=VA{3n>B7!;yg&~L$X_thyGLs-Y$WlbDn(nI9ZXfQ#EIOGw6)xpu9;SI_oLRRW z*&T`MFn^eR-miI{-}}tF@B3!pAIk!;04x9tAPJzXtW46%y}iB6Qk+)pfa0Tb7%AUR z0HEN@rowu?+?gX`37Y(-fe4ZYq51MfgajzVPf+oG3J-^X?89qNSM9{cwVC)h88c4OYhzIW3QjibYfPbz{;-2(S#TVeFu1Cs6rJ8aJ+*@`pMzPS zm*g~CenxxRQ_fxoFcJliJm9fnL#a~VvS&<(xY*FDlvy?}338!K1B}Vp8y7g-JHcaD zWxRcEyifk!q%0;9fsvetRG{DWtiKDvw<05FOW#MDKFy{E7#IUnRPaSQ>2bhcDeA$w zck*BIG7mPNSIPt3z_kvw?ObCA>QBqr$e;JoO#lw1%=5gy>G0`ffJEd)1rBLvts|lR zW{oHZ14e#2u+65zX?54t_&DmLCy4Z9xCRJ9E7QKN&9HtmAdHHj48_NYiSNRkQl5s& zUfu}Fb0eN+(*CMCDQBw_LO6nOum@d_+Ykzc;BvW49bjo4#{^MxN`(+c)iw&c&{FW3 znHiW>+V=qsg1)($em}Sozuqs;97~a@3yFHPiujZI|87JUfCcck^$YRoRk?1*mx2HQ N002ovPDHLkV1i!NY4-pC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_laser.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_laser.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fd7271b9c966210198cf12beec5c751c140977 GIT binary patch literal 691 zcmV;k0!;mhP)(^_p>(j?ML1w%l5IYbbY zK(RLuV!iko6a<4Gz(WpN@E|A@!FZD9U@1aLqZg@7kfxHfBsC<&wt=Q;4&(eM-R)+x z>B~VaxDPC|^Pk;$e)G(}9Kk=90bl?a00zL}1@L;kOg@iBqtagmAoGsFD>!k=inT%x zUV!~6h^7gU`KW&wq0j_MYhMpEsmtYJi9}*wz;yrJ2d-jK^{I zV+2F3wd;pWwYKXhU~82yY#PKRpAYBVZgjM_viS zqZo6Kz+toP403?fH9xlOcG3N!x-Xl_06c+TtE-|fxBU(W%z*$aZ)`vhqz=Gc39@+0 zL+L_yH@khYX1=(xBE~Y+D((&p;N`-C617&ea;=yoDIk-3B|zrt{v2ObYI9TR&u2gI zi0|o|r#TeGPLfxzRe&c!?dxyvVM#Kn0YIxVW4Ou5DFsSEHXH<{q;y@gPM@AXze)XbLJRJ6ZNr&GXqJRVFJ zJXkL!m3y<*N4(DmZyg_xkPkooQ?IP1sF){)`BOA3Fv0xjw{!ba?-U27m!z0Q@%q ZzX6M&^SD^WP)q;-002ovPDHLkV1o2(H@5%) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_medigun.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_medigun.png new file mode 100644 index 0000000000000000000000000000000000000000..42c03f13ca5dfccacee66994a1d0fd71ec49fccd GIT binary patch literal 413 zcmV;O0b>4%P)kSX9Q}^Ha_zRR4ies%H23$t?|1*YMZYWo5C8!X009sH z3-EA!YL4!1I`u){_YF#|b%*P28|5YgH;!YM0ALP?NBu&tJM(f-DMdjLP#A_LNs_Xk z+bG+tl4FPW&mgFbl}B(f*{AKvCn?jnrdgIznx^(c0<`1zDMfqTN&<#lCCTDUnn_il{d;Y!6s*jafQv}0+&5fm_em{e~zrQ#AwCAUNh6Dh)T#gEb0@M0Kp%C@^eZKzq_(+4n00MU5*Czmn zClU#oOeV6=>2y*mm7?Wx$=8ATd``PUB_JFQ%Te}vJvo&izP-IwefawNN*^B|U;Ksz zfZXTvk=$Tu~>|%)hdn0W9~y!p~*m6tJV1U z^z>A9$gYj262K&wBuLQ`GLX;b$>nnK#pB~+xg>~KbUVg}hle{61%pBM_V%XCFiodZ z(*ejKA`*#Ex7($~V!=B(lgaQ+^?IEUvDs{vKStwWE*;3?@i>h}BMJlpTdg3p+wBY% zf+QE?B`B3jiGFyWMV;dO_Z5wLnVJAry^93FOUYlg|YS<^bl{E3C+Z(()2q zU0tzkHf!>Fz3lAljFXG{&t@}jMdT+ZC;SJ9Gy;MELJ-|&w4}761WND{fL!T(dU~Sw z_jf*SG#YetbRtyVEjknR4f+dH$eONoS&bw zhld9~7Majf2HpP$P=d?LOF08tfLuwqtsxBwK-9_%XrZ_13=06ZWxyzO3qXVy7Z;3v n89QabXqtab!2iHrz+S*V6Rxyh+bE2T00000NkvXXu0mjf!pl{J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack.png new file mode 100644 index 0000000000000000000000000000000000000000..d01da19be343a4b5823eb5247183204abfdbded9 GIT binary patch literal 785 zcmV+s1Md8ZP)22!=6ZG-u1k(j29#+Jkoblo?}gx$^T zZW03l>4Pvk-|oEcw{ISs*$HiqZGis|VB+LOJ~ZdowGF_!8HG>-&$k?4VQU8&`-jK* z#ODRgN+<%@OeVf5f{l22EgeM>%VukUm;ku&zSGIfKOKvK%Vuke?QS5z%OPq2>NWpb zDpmF1>M9v0`}!2MUcDYLuN*=Gz%r*sm_V%I{Pu?gc#iZFs6mSbqN$Xkc4MShl0&fq za&y)qYX0cnP4N5u;1V=yq@}3>9J5-PAoNY-5e|o&)|deAlF7Oo49omH7zC$KjcH-O zah;Y1!tYP#06;d&252-ccXW_Zyx(dXEB*<9He53r699W)DW8XYu}J081ZICq7N9x3uEU&}qalEH#5TZRv{1ZJ`g*-o P00000NkvXXu0mjf^cZ7J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack_six.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_missilerack_six.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f92bcaea7a67eea46c819f9e7d1454038b10a0 GIT binary patch literal 739 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_rcd.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_rcd.png new file mode 100644 index 0000000000000000000000000000000000000000..b4709b7ed963584cec014b2bca00263e2f31ba3d GIT binary patch literal 693 zcmV;m0!safP)L@qh(*U_QI;UKV-u~ADg|YiZs4DTC`C`g zR{!3Nr+Lte7hx5K;K7SX5glHfh!s>ADDzM+9xB^qgtdYQ?XcA?87xMLBVx?=h1C8@ z=30t+$Wy|XeBYb*`F-!(BUe6i@dHkZqJLc0Q_&xz*ngL{m%TaXG|AG-y9 zN4R3-#8n%zU0oO$9Bjz-Rny2|dO^4X5OV_YY+AzSLJGQUU|t4>5?7EMokZev7`;8c zc=2)(Cr^dJck|#l4wK1I;DVK)-#%unLli|sqft)?&lV)d`><*J3xapEIG9LQ<}Y17 zfU@-?63_1gzG>8)Xkg@`9VFR@c;`Dxr4j@|Kqm9l)yEZJ_sW==+i;cH6X`JbTIPzP zAP@+^Fbuj*cC70uWH&9fTQK5 zawXy0l^*j%-MTer_1It_ldJMt)3)|CEIhx-Shb*U#Mw8$=UU0t^5?i!!?ppmOFn=P b-~;>ug$4AgV=1c(00000NkvXXu0mjfy*5Gm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_scatter.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..be45932fc3e814ce590e2ac58c37f7fa858b39b4 GIT binary patch literal 729 zcmV;~0w(>5P)U58wwi8PWNM0Kmd+fUe2yOHtBy@K zs*Cpva?W|5*Z2E*p68si0{>VtfD9l5$N>K@fYE4VVs5wF6}hp-76Z#&ce}>W14!Ok z5&)T3Z`g~~HMNL@0x$whK#;ld@Cp8$;vx4G^eKRHHE#vzBt8X!EBg-c_{G;AP{tKiD!xvB{|Nz6 z)7ZpXTMxqFcnC4(tGZsp$8TSzi&ucuV`+fO@&onP?KrJJ25nv4TrdSd=F}ciBm*J# z1c}T)eoeRReD^8z-Mob(ogEmk+7OMd#B4NeE~+L0&?kD?_^L~a?HUa`z9Vfu<@52F zH<{$4*qH9g5j3pZnl&RZQ4yiLk8C{a;qmu;y;-|4_5SZv1wQj%K?TS>ckT3g;hCA? z^LwMCz?!CX$y4Trwk{5$tJ;-b>$+fla$f=Y&GNF=zqC_jm^P6lJJ58jddhmI!6I{Xr)s3^d6 zIIOrlG{ldYy0S70L@k&YdCaFr&t8DfpWYt?LnndcagCL9C(PRdg2;?>4>NPR1Kz!H z@VRJ1sm2QeEF^In#GO#C$^zio4uVP6e-mJ-rpp4bT#^A~02$y9;L0N8RbvAE00000 LNkvXXu0mjf?i5$f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_taser.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_taser.png new file mode 100644 index 0000000000000000000000000000000000000000..374e5aa03fd91f48e946da160203a8110a3ee7e2 GIT binary patch literal 709 zcmV;$0y_PPP)cW0q zL>mMJgSx3dAc%rOsV*hTi(1_TyBI-17ZF*DQ6OX>jCp87H>AVTE!(1W=Hl&~*ZhUT zl-26uyl{A*bKWoS^EuD^Jx76mJY)bFKn9Qj{yzYh%SDPh6bdmL3Lu&9u;mg3Yl9 zdcz`A+qBSXG(>M`ZCGztsYoOeVX6S4>}C3(v!jE4f|G)Pxs{a?rEN2h912H}N~J^q zU})$JzI^|IE$k*781OW#f9A4KC={gF$aQ~2Swe8sYNaVi2}Ck|;40Qlt?gj9vgqxx zi#-!vQ@;-dOS;RX!>sUG+{I5JssPfN44sp?T-mIpr3SFq>4aXZ!*WV!NFVkbDQU@k z^no9B6NsnN%$4zR;&r?6G!}zHsiX;<=S&E^eF1LoLG(C};fD7bhA&)1jE`XA)$^wG z>)}9z?EfTRfo!{Bcyu04* zUbj^U{ouNL&!6x2`@Zj-?;P#)kFk0LIBPr%zf)?|CfnQ#*O{{Rip^|X!2)3P+SL~7 zAMB@2HJU;G?DSc7{6S}$%zI!Dxm+%~6(nXwgyjf4?o;T);Ar~0^xk_q>8j5l2f}@$ z6q|QgHJe?)u_I;dXKaqfet2l>_Pw+?^If#d5If#f(@cFeIe#rO{alRQw$F=KwrgFK z>{Vsd9hx(Y#xeox%PW{;(`I@aw38YcrdGu#+Gi7SVYGZ>rFfUWMr{Dz>l=Oa=zP-7 z$b^S|{qmW<%}(303IKW4mYr1FaFkBnCTevL)9c=ch7kfWJe?dL$`(X|_o|!QQ9Ahe zI8R|%L`5qiEkH}2nEXgXbCpF4ob2=pkToM^; z0AYX0Jtt0%2|UJ(izrA3YzT+=Gv0JTaA=VhfSe3Gzb|&cO-|a9nplVkEqQN^hbtH& z{Z7b;06JuDAmUESK)#T3Vav&Fp`K{Nzf6E0=L!tJem=sF2umkT1r!@7PI~#B-K953JM)cyHv4p#Ts=^@)oe^rYP{^JtTIgr0Xxgo9Zj2a1u?-Fl^AV%1YE+JM02od-rg@np0=-~bZq6(r2k4$BIQcxUG z;)HenWdF!S@)A?bOQ|q~651U?$iqzB`BLf8h8g`t*0*h5l`!R5y2zM?x#$8kA_~Up f`Pb~ffIo%bW+J=@{p`p+00000NkvXXu0mjfVcMOg literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_uac2.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_uac2.png new file mode 100644 index 0000000000000000000000000000000000000000..033126f12bbf7b116c18ff7a3dcfe81910165d98 GIT binary patch literal 642 zcmV-|0)737P)<{&<9n-E(8%O zW}|`&1^)*X1}y#oF0#}^LK?B52 z5W(KC4S6jdgAUXT>PUdhBg0`tqht7TR=!~kPgZ-~gFhe~m` zpakxX-bZV94{|9Vx|@8$*OtT2U#h*xoOsORvHr7&xY)f7K;{H7{(1qQtSE9D1$@{5 z?w&r!f4Vhqv035k57af(^E;}Srk|rF*d@}|J4M%Z@#NV{45>$87)I6S-o8O$1CVs1 z6ZOV7bUZL|UA>4j40b*+A+XJWjTj)KyN&%D}IPwaRR<%GcbP>55wIWU0eQqrCa_lWtz3s6n+5|XmwG4~hIpUSP7YkRb8xpTcI+wGQ(wOUO$m&x-ywnlXnc?Z9Ue{e+|d*nPL#&8)9hE7CMA zH%}C|Z98FqDFCi!vzaN7UX#TEkk_J60`4LFcz;jv-> zC=Q6%w?(2b7aXY9>qiwTbO3rBU(@B-r>n(R@gNA;h}|CpAnk#h;3`D Z-~%cHzX)+Agwy~4002ovPDHLkV1i5_&)Wb1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_wholegen.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/mecha_wholegen.png new file mode 100644 index 0000000000000000000000000000000000000000..2e68b9759c430e7667c64f833f67ef57ef8054dc GIT binary patch literal 1028 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|WCm zPZ!6KiaBp*MSF+@GPM0~G}*SNZPwirQLOr|2c_11ozUpo@0Ph2s7Sv{bT5bP7lm~J z0&Ws37bfs`>(2~Q0ty`M(%Yf4t5N(6OTP3yv*}TpR_V(k%VNv#p0;p4^V9L%xtXWS z|D3;RT%7h__QH-CjL5hs-az~K0dA8zM5nf#f+CeiB__bX>(gp=7kEB%9K{ontV{oQq7v&YSb6H8d^S1^jq zn-$&kWXs-&vU3ML^frYmuP{5b@*R`l_dP*>CMY)?($aN|bf)zsPd_chtbzOVnn zu_IFZlwZU9EsoO`u4A!3(9rjK`_Ha#X?;6*Z!wo{JwLI|B>F~pg}@%`!1npCf1c>v zzG&Ypp1m<2_nchc@Y%ZX_8R5rJQwYyKN;BqEOL+BX0%RImwp)cA))JxV)NR(g8GI# z(mzjF7t5_%niNttQFzyp&->2aHu$x)zx(O@@aFw5!ygo$PE^^lCZT>ZtL^&69ks4@ z)z@1WX09_?xMdqx=FO^n=B%u&ipeKMK7ZhEx0kACUHLiJ@G~>diT|Oe``^?YnXB#j z=&Zi$j`U^mH{9DL69nwcCoKAX-?C)VBB@yq1Ea!D&OhaSq#;@K>0EuKc?^f2M!%Qv zVBd1|48K9cq0E_kb|~fO-}=3A8<$TnZ|8Zp-D1$G>j5 z+TH8&hU?gLD}}JS0On=&9jc}C4jp}{-nHwTufU0UKKgUK=CnMy820B7`_oMynxzaZ zc+VAh@422<({=dIoa4LCfBdQJ_fBd1!r6@573bY+YmLs6?zzHyQ>JZ7vKHlyH)B4sb(^T(FQ-E* z|8P&t__=An;3TO<)0CcWE^k6kz{u>P_z6#$BkUUBghJKE8iyHw9)$_-(hprZo&Uq% z(um%ghWG0auX@6~q@gM5C&NnSkkjlx)LgEd0Ffal*|*Hsb>}+GzM-aJKC)3jL;vX; fGA}3u;lHfAl)ZL+$&n5RW@`pdS3j3^P6VG)W!`_WH+NxOz%~)W*FST+@~3A_MtD@ z1(7JiWW?BDh-(|-2ce6!sgn(+RHlR$7r|~8A^9cxS9UfdCz;!^Zfq3=WN2ijMoBQ3wU`1yt~^WRQS-W!KVfce4i|e)iM2!|2`DKku|pXQ2GfR+ z@_I;$Ak;pYj#N=diU7$g%RFdr@5AE!C^iDibNxK<+kGG>&p_3uG7@qf zv2?5(fxe@kh{~RGn)DWoK$GuBY<121hP|>oGIAP6`@3 z-$6#_0^U9w#Gnl2=I!s>o9;xHWiJh5N{%8=rAUkb$!~pYAj4@slY{keoIvvY-|tVLOeU00000NkvXXu0mjfj0^R% 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 new file mode 100644 index 0000000000..ecdce169b6 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/meta.json @@ -0,0 +1,152 @@ +{ + "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, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "mecha_mousetrapmrtr" + }, + { + "name": "mecha_bananamrtr" + }, + { + "name": "mecha_honker" + }, + { + "name": "mecha_mime" + }, + { + "name": "mecha_scatter" + }, + { + "name": "mecha_carbine" + }, + { + "name": "mecha_disabler" + }, + { + "name": "mecha_grenadelnchr" + }, + { + "name": "mecha_uac2" + }, + { + "name": "mecha_taser" + }, + { + "name": "mecha_pulse" + }, + { + "name": "mecha_laser" + }, + { + "name": "mecha_missilerack" + }, + { + "name": "mecha_teleport" + }, + { + "name": "mecha_exting" + }, + { + "name": "mecha_drill" + }, + { + "name": "mecha_diamond_drill" + }, + { + "name": "mecha_plasmacutter" + }, + { + "name": "mecha_clamp" + }, + { + "name": "mecha_wire" + }, + { + "name": "mecha_wholegen", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "mecha_rcd" + }, + { + "name": "repair_droid_a", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "repair_droid" + }, + { + "name": "mecha_abooster_ccw" + }, + { + "name": "mecha_abooster_proj" + }, + { + "name": "tesla" + }, + { + "name": "mecha_ion" + }, + { + "name": "mecha_analyzer" + }, + { + "name": "mecha_medigun" + }, + { + "name": "mecha_punching_glove" + }, + { + "name": "mecha_weapon_bay" + }, + { + "name": "ripleyupgrade" + }, + { + "name": "mecha_missilerack_six" + }, + { + "name": "thrusters" + }, + { + "name": "mecha_kineticgun" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid.png new file mode 100644 index 0000000000000000000000000000000000000000..da2cf5f1fbe6eba19431cb299aa44b03f51583ea GIT binary patch literal 477 zcmV<30V4j1P)@b^sx6XU79; z_~ZNptdYh@MbdZDH0k5K05>j|D;|kNAc`WI&89z_%^t|IoFebeNI#7PTm%AvxFkui z+wIt0-_R$ETQ5i?60uAsqmto?Q2@bYGD)FO2#TWUlMkgL$Q*iF58-eag+d|TYPFL1 zK9*kx1RV~CzWH!C)Sot+4Lr~53&!IyJRT1SV22EoMgRm&(@?M1k-yJk|0oKp)v5z5 z77J3BSMc5j=~@8>gaXR#b{m~e2fpnsG!`1*I1XmBSx4+e50QJz(Y1M_0Lo}Ix~|n~ zr*5|!Rk;lBW)OqH0Iww(PH~0e=$G(p6oBTOoUx#)YHZoJipk;x{eB<(k`tAW3f(*f zgE9kXq{rQE_lcBVM1ImL>D_d5)o8#h>1pSdfA=q700v+H24DaNU;qYSfVt-j{%(fS Tg82A200000NkvXXu0mjfOeM$$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid_a.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/repair_droid_a.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ee463b59c91e73bfd39898dc28dacbc8113cfb GIT binary patch literal 1699 zcma)-2T+qq6oCIA2!x^{9TaII0R=$;1q4Du4X7y~o)nR4qlqMhga{}jO4CCGB@~sC zpr9n+g{CMSu|y6rB$3V`ND(2S<$`nLjWahl&b+tpef!?-&b--ud-aIBqYPLT3;=+P zvl9#{v<2%bu~9f)dmX%6Xe7g(yrKX=_T{>QvJ7O^0AM4=8D@vZ-koB*g>1tpx6FDv zeYMl6HAF_-EJsQ!s=_qSPdIG;y}V!4pWW;R)9kdhYjjK2@Q`QKh71fYxuM2pi6WSEFm^F zHUfw1b8vK=y18f*vNp%*;hqZ&3>;XPVkPs_ebqJ}+w!bXN@+bI3_udLK#+DZi z1$ow%xS*)0sOpA>hNpCTG}8ysX=@Azf?HZzatACeEJD@}n3(t{CMLexq^_aC8Xmqs z0$Q;U%oc+{`wc#|w_mj;u6+2iMhnU(;9gxxPQC+DS5~g7ta;0Jvl@-6p;qNBTbbZb&crx+ZSC?IqCAS5wSv8^Q8NkW$!cG39y)#3 z_0o+zg4~VOm|fW4Qls=YUn&WHPWBig8;RASM|KR&$lDrGXEj^RN9)lee*d6K$#*Oe z;F^ zPSQ7}s?62?)h5wOj=$NHm>wep(0Pvo)eh3e_pZ;XPwd|3Z~i2PZFHg)C`RKxUS+p& zq8r26BDar^gj%MxrA~S;N+p8}7!&fya;vGA=L4o0z7{Yb%;JNIVNVA$tthjeN*wUn zfMvJeI$7pH_FUfq(->|9Qjer%p6bXd*@n@^2aSy@ebFVErkO<|{+O$C4;l@^XA1r* z6Cv~Z+A=#(N9#qynSBmvXfk+0mn0Lcb^wWkl=fmOYbdC;>m4YS`i&WsL~>HB+zl0s zxOXY5$`395ONIEUUT782eC5$C5UmS<^;vWhSW?B-NKK&-3Ke_P=>SIv6t+T0+sz>U zOX=F<&fCjHQp~^mJm>8YQb%gaduBX@Nz~WFl>!iR2-00Z3AMR6?rPa?|0n^YrchQK z-$SdAAcX4S+5n0f1c?wP_$n;DbDuLICj}_R+|z2FueiOC)ysI0Hyn*qRL3uQB9=SO zu!R{6QR9Vqqnw528ivb(_Rn(9ZgmYJ1Sz4u^?EVF6WJolsL4=nC%HdI%&J||Z&98~ zOvgtqCIJh3s<70xk5lb#09C&#cT#9I;r}hOCU1TCdZY$@RdP|o++ko9IZuSekK_Xv zcV5&L`cCW73Z+`PvRE6PiWN_NQp#sdxGwVBdZfYyQ0TR%xZIyu&8VA;=K#gX%iteK z7T%uAxq|9aIeolMQR5sp6hKj-Vu4Dzltt|&13{jsaWe#c#6v53+A%28hd-@DD)T5z zU`Xw*%AF_Dm`BABG_b<^tkQ*pl717I(hRRx2AM8;p!?v$eR+=(%AmX8CF>wRCVZzV z7zq$&#LM_}3IP3onK%oe_zPhc5eG?>Fo8qUaS)pBtrYY>019hQrm$DZ==mmH7o`hZOZ2i<0NUPwMDvCYPTtJu3aN#`tfa2|+7tZg=KWam ZzA>#=ypvY27$W?20B5*6>=D#2;csRY1jqmY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/ripleyupgrade.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/ripleyupgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..7707402d7840136f037512273e57bb2cb97fd069 GIT binary patch literal 1271 zcmVrLES5qgttZH~aa=OIUB%SH)r) z0F3*6Eu<(4Su7UHWHN^9FrUli)Lyf0w6GtEL=+0GqF^tIQZ@8&0KCtS6I6 zZc9o^`0F`-oE~d@gtoW0%>y_!^9gxwzfI~-A8KG$gupO#e2IkS9>InH^ytG65wL!B z@rpSB6?eGl`DdEh1(44^U!;Y_Z^`9y65OB7=E$mgGp8yVBSa3HmB0&hyIlpB$&IU|@iHdV07&I5-j7w9snc| zI3oK)Lqik}hZ#g)U!NQo#>d9SxK@A_oE~f-KoPY1xG@C)l1!%MiC|nWFxK7OO(P>C zG9b0zXs!^23o((%?^85@s=E8>o6A?}?)}x|cDrSi!zeZuo5Ka6P)IU>H3D2Jg>_j{ ztO`YMY?x;N#&16H%@U6%X>@dyL7>&k-o1O|Z@iTrx?mQ-_dhJt!TJN#-``KArKNIw zczBrojMKZ_B|IjK3;#pF8U%52?boQGja>o2_~z!O)IqPPghIy&1A%~CgOr6HkH=Y` zot@?OmKYHEE=~kv@Uz}HWNK=P+S}VX*Aa|J$BvE;nwy(ro#Q|;zSVaGz*Vd9J_Z0| z;z|anva&K-Uti~S7(<4D8KfQ7WipyE=#W%OJ%Gh#XlF+N)z!5$b^09bDcdLSgC|r# z5E!@F?5b}yHd`xefa751!`=#SI$&alyi#!Me%`~ z;2M2gh`V58;}-7%HF;=a;uHf327@Z?o9cVO&IaKEeN7NWNk1k6S3FXDJ|9g_Pn%<) zv$K;bD=TR=woP{TKFX!E=N0lBZo!G2PGm`ftDe(|V9m)J62ZC_i>v)K*%agZVAnLn zMtD{o4TdP(|2FNf^~y5raA?;tPKrX~aNsV;UeQ2KhoN8h{$HmPq81;`jUM z&{I$H7*Y%GLQ&<6M7$#*s1Xeh*0b^aTcG%7x!6NZzk(7b{&48qBE|e4le|HT!B|22 hcjUkS-|(N7-vMtOhI1*ewx0k1002ovPDHLkV1ms}TowQT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/tesla.png b/Resources/Textures/Objects/Specific/Mech/mecha_equipment.rsi/tesla.png new file mode 100644 index 0000000000000000000000000000000000000000..6fab61a534c9db725a229d1dbab766f55bd3ec32 GIT binary patch literal 713 zcmV;)0yh1LP)b;&*jMJ^^|pajpHv{TQf%{0K^!tEH3(MKlb*- zc)nbwd_J%2|5UHjjin{;?Z!r^h)4oJE)xTeWg;E9)35l?vImEyyt+3fZl`*c+cfW zS=oD70Pp#_Zb$4Fk=}&s4bvyWn+{|k2N};X%5#VSF^=KqMuT>CcccFq=}pM~;lZ34 zSAvfq#L062~GU@Z_Ov_YN)C~E}~Atfig?zQ2}XhY$? z13MRsD0qHyAgyo-#N~PfX9dC6w0G$Bda)p3eQc!Ucpryzz56zX?(G=!UhbzE;0L2-3)+HRKb-A(4>PFXp(1eX$2%G5i;$WJ#z~nxX1@6i9#_iO+tzQ z5B!Q*Ju6rnL=MO$K+7#1lL7;AwLm0D0y80oa#(*N0rsORr^4ato9D#5k{Qs~NA+N< zmIpEtE(sw4zm!I-fU6Jtz@TpjeYW^8rFcn~lm$5Te70X}z+>O`2G|E5SabkkCDj&C zkX`?5=n`+2IgZW7Fw-iLzLwet=)n}vgnot;UPurSfoUJx)K@b$$*7PBk5`HUdLmv$ vQr!*XQmm{MRw6*}1WEHM`chv^AS3w!Q86zL%f|l200000NkvXXu0mjf&kPNL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/meta.json new file mode 100644 index 0000000000..ec77ada562 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/meta.json @@ -0,0 +1,98 @@ +{ + "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, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "ripley_harness" + }, + { + "name": "ripley_harness+o" + }, + { + "name": "ripley_r_arm" + }, + { + "name": "ripley_r_arm+o" + }, + { + "name": "ripley_l_arm" + }, + { + "name": "ripley_l_arm+o" + }, + { + "name": "ripley_r_leg" + }, + { + "name": "ripley_r_leg+o" + }, + { + "name": "ripley_l_leg" + }, + { + "name": "ripley_l_leg+o" + }, + { + "name": "ripley0" + }, + { + "name": "ripley1" + }, + { + "name": "ripley2" + }, + { + "name": "ripley3" + }, + { + "name": "ripley4" + }, + { + "name": "ripley5" + }, + { + "name": "ripley6" + }, + { + "name": "ripley7" + }, + { + "name": "ripley8" + }, + { + "name": "ripley9" + }, + { + "name": "ripley10" + }, + { + "name": "ripley11" + }, + { + "name": "ripley12" + }, + { + "name": "ripley13" + }, + { + "name": "ripley14" + }, + { + "name": "ripley15" + }, + { + "name": "ripley16" + }, + { + "name": "ripley17" + }, + { + "name": "ripley18" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley0.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley0.png new file mode 100644 index 0000000000000000000000000000000000000000..01601a288d1d9e4bfb0a8dca60ca22576b097ab8 GIT binary patch literal 1278 zcmVRPnz0@@dBjT>XFMS(zRO-MB0uEeA%iKGk2 zl0dkgZ`irqd(Yj!CQhsn;)fE z|4Ez9DH$7cJs%m9Kxt{I2I{}TN6nAyr~ZLcJR*25P!NNS)klrS^1o@#c6D{tV5pP@y8W;@jKX%VRQ`zHQrfCR$Zh$^Yl)Q#_^?{xNOD2O?R!wLv4`W|&TI zl=R8aQ}lWCGcBK0UX0ETW&#iY$#<)U0bE;nLi9Gkwo%O8wdhB$toY) zaYcI@8g|p{Y=W*_`P*fSWN8V-IAJ6@uVE`L36ajk$B>Rz(^Q^?&%F>$I+}s@bd_JBpE-uoM`f} zgQli_w^smy(!^pho}*XRGNG4hck@2@KK>mw)Za-Xqr=p+?*U$q^`9_x5S#?(bq)M@ zJg(t;Q64Bz{`U5Enw*^Cc}8bz!{aRn)ctTP_g|_Zg5cN($>d-3_iL<0=X~~;m6dIh%A9`?u&!Bsa24mm&r1OEeq^H^&xJdvyu92D-n8$2o}W28 z#G|ZP?epOmL|}Y;+?)dx0WhAtZHSsicbh>apw+%00)vBtwkH(kXU=|W;C&z`;Np*2sJE>9ZP&FT6qu!`5~rHP44yulKQS=zCqn)Qdm z&#U|Xy$o2wd<#bK%o>%Hl+esfl6`@(bLV!-8YkPr^mKxb9(|4Hc%C0S7S(LBy__QW z!Gj_5-SY6^*NZ36(z4&?i2omc^Z^wju(cA-R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley1.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley1.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7ab1d7622e83eac073c4af16807b8961b561e5 GIT binary patch literal 1343 zcmV-F1;F}=P)t${=X?n*SZB$6&5 zkV3egZ}!gZy}Nh+Oq^tM=AJY2%{MdWoO{aPKba?K{S!!{MM%@6n7EXl&R`nx+{(YSb40SxT{8Sy^#d2teA~ z+j%T6FXyqPrG~Z?=|J-#U={>NB~S(13ZN%yK}#lr43NpGA5P{>0Jf4n z`Y(YcG3mdBfQXbz_5);fb(P00*H_WGpU=>S4I7zgSy?I1&(6kqjL-dT*oY5AvbJkO z3IRLArKLnk0c;moos0C z0)oIIVxxR4#})0Zt=&q~(@{Eq{twOe7$P_fbX`Mckw}CMx81y*f%o~JAh+8^9WTDX z`hnp!Djn>k_Gg}@#ljGs?}Kj!zNXrm8);~Gkm`5r#wH1zCHt= zD}Y76-%o)+fWg|@+Ni6mi}i|$38KxLnE(O;9DzUreHW3rTkCG)X9S1uxQ_4h`6w6+ zDxIjgxtV%;dM>x1y1JT!%h6E5HO!5Sj3n9+iI84??Wrf9=0K$-SMer_^wBs>< z8x%ZJYRtg~zW98De#^G)>KM<`*>e%i{BE#)7nsHAbkf+^ zS>9mL=rmPSl=J*P|KsYue@%bUM2)Xtke0QAf&!YFim@*+Hf`ESY2&0@n4FB#!Gq7S zj`#VYL%|fAbRVY(zIU(B__o}?|M~n0G&SwAIO6%ux89&!1h!_vnS5;tAT#B_B}Epf z07@%6-7a&?DH}~}l6})vE3bb>|A%BGAU%{(uHH-{Hp#wu5s<4C<&!ezOCZ@7n09SQ zAt1pYdH7N8oygsH-IFr`*qVKTg-vKj!nOk9fDI)X01!7@Hd$C$pie&im^UE=Rluec z%w(}807EcUj+TG9>SoLMuNZ>cPfmo{7pKb3{$CCuMQwS4nrQ$4002ovPDHLkV1i}^ BhqeF! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley10.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley10.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffb27b9b16d88e1781c6cfcaf26576fd56f7f64 GIT binary patch literal 1481 zcmV;)1vdJLP)3@O^70r6GC4U(3l*^y-|FgW9tQ^pc`Pq4*KNHB$O4E!M+K6s_t3eX?&~5T zzDPtceZ{W=$Q};CKo>*6C+VjX3qPHkGdOHu zE7@cJC9ouhSi7c1ya}Y4Z_)3Ss|*VrGrjrc$$ zYr&RSUIbdF|JF<8yI&I%o{~Oe+d&`MKcwjBNP2GIGG#_tc)s+io8F0A$ppkkd;(!g zEH45DlP+4ZVkNR;LzD?jVO%`$vlkJ^;4f4hq7)Sn!n&F>+Vm@*ga0m}v~UY!V0%+j zH_*_Kg9?T(`xBTgEgL|}RCdU;r>Dn+^Sx2%VXSmKP!%HQ|&fYN2nXp7*$cx$}}BO@b&G)<$vzKi}_fYQ{~*0PSh z0@DMDPW{SN-RDbb}zMew2|xTTH5wxydv@?rKVu+wAk`>t$qr_Q(@pYH#d9X zGXX4O0_D%o&sTfi$NKD?mXMIZnV`d;%Gs{&hr6i!_1D-r{edWQk|%2rDtYBqb>uG5 zC&!NRQAH2+_Vx-EkE>SQPIYy4IzCqbi$z66R9RWcV1{Q`eyrY)MUGZ382IP zM<9^6a>c2aQsy!<9^z*Nhi~tC55CQ2BfH(MbfVncT&k(5`F{(Nlao2PyrEQZ4Rf8H zowPP>hIW{Lr&e{OidFevdhulr6d7?FHz5Q%=CF3)%{M&9?~?LSzJib7g0F(>_)H)y zER1|b=88kqZKtVUh-W@LJY2VN&E5kbU|jR{nG1hj0+6>WJ=^hoQ6X6@7Crcu%@4EQ z*wnzItQqZZ2!XDyE?oyG0$@B5-#}YBHt0bmpwWIo1nTSS_5FcBZ*2NX!}q|`+impm zQ9I9zE`jcAPNbB?25S2uLZ1s{udw{^RZKqCX5#|n1IscEdziS+syaEE0j!Bhe1Qls z&bPXr$>kcO`tQ|2Cx<=<8~B<`Cf4uYl&+5PD4oC1qoFx*JqroF0!HCirD`Cv*-YKt z=efZgjvMa5K6d2sf-(4l_?<9#7(At50&Ffhozz*vK;lgR5eEE4pqxWC^) z`}dc!j`#VIBX&QVU>~OlzH_Hd|F+z_w=7r~e**ljR>vnNXRDVZo(~;BI9J4_aecmL|=7jO%t3O7;$WgnCP zs(_}FJ(N+d-nm3Eow^#x|2t@9%w!FLxt%X=sC*rSgxm;h{z zzQ95g1|ku#0^)#%k_-Tdn{7TBA0MaBKL3=P5P~Y8DFxG40uq2Bm?}rFf4S;r3;M5E j1h=1@2&1pU4CwnGI}u)=;0)kN00000NkvXXu0mjfOMJv$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley11.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley11.png new file mode 100644 index 0000000000000000000000000000000000000000..883295d9ffe69cbab54f93e455be90af01b3a1ff GIT binary patch literal 1481 zcmV;)1vdJLP)4@@c5)%wGNnAj?@x`KUBP!oetB}Obofk0^uBvo)Jsgfd6m!*P& zT+cVVbG`fG(R7l{nS0L6H{Z;ebM9R;EkYu04%aX`{~R}6%X%Q0mwROqaZjcfhq*7z~N;PRA8up5J3jW}nhA)F_yod~ zSY8AQrku2LWi+y5LzD?jVO%`$lNS-k;4f4hq7)Sn!n&F>+Vm@*ga0n2v@i=}V0%+j zH`36Mg9?T(`4jMzmJJ|fDm!G_)6-+Z`QE%KolevqqunjbXvJ4yRAw8cJw?yczK&Un zXe+1ElI1jV{{$V{bc|s8ZOb>b%Qb3BOia|q#+*dMPR2%zVP68cgphrE`)QtpE=B-A z#**3ids(z1wvlz0%SHQAEL7e``WjKSZY#loC71?X!)4@Ef$Z#Tnw_1cGiQF_=bSID z($R;c58Sue$jAt-i6zds%=W&!2b3;rMq302##)!pvSZ$3ri<9AbgM;ke>tR>g0MA5dNDK!Oir^J@8YxPqY?g|6Hxw+X3 zp9x?Q6DWUve!klCKGr>RT6}ywXMzrYGH1KGAMPOA>#wnM`hAh~u!kTBmAw3lI&v53 zlcUvqRMA7dy}g3P!{s#j5--zVH$UiU_}jn-BsWb67j@<{R$gcTxE$U%^Lk!B@d`d?pYY z8cMz*bHyR*w$s!v#62Gt7N*-cJ@)_z7}tD#=E9$s0Oaio_jWv2R7e(!MGwAp%Y&>p zHZ|}lYexI)LZGXwOVLv`u;$mH#U8#;d|hz?N<7@ z+RpQ$OQ3t26DTF2f!e+g*XIJ+D=a^J6_by(*|-4tz_MJ!9ww|$RGl2f0Er1ne1Qls z&bPXr$>|)Y`tQ_1Cx<=<8~B<`Cf4uWoUV@X7@a%cqoFx*JqroF0!HCirD`Cv*-YKt z=eWTfjvMa5KJanSQ!=+M7{@xG9?kdP1>7#L(Eow^#x|2t@9%w!FLxt!+R(4=p&CUm;h{z zzQ95g1|ku#0^)#%k_-Tdn{7Usn3$l?KL3=P5P~Y8DFxG40uq2Bm?}rFf4S;r3;M5E j1h=1@2&1pU4CwnGR!CiX(urCB00000NkvXXu0mjf5r4k$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley12.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley12.png new file mode 100644 index 0000000000000000000000000000000000000000..76ff6767f4d2893f65f4528bf0d11957ade6b8ec GIT binary patch literal 1481 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley16.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley16.png new file mode 100644 index 0000000000000000000000000000000000000000..76f6cfd264f2c188cd7214e5d73959a547118804 GIT binary patch literal 1459 zcmV;k1x)&hP)U=#g3P5ypbePeUloZ;u=}t;b-NMhky}gvTJ)gR|x=f9hl$2;v26XAtWx9U- zPi<;yDol2HdD&tB0II2};Wa%yo!8phS{k3YNV|7CXl7=Hc|M;nVl;_~iApy)IhnJS zm~aO*H8mM@>+0&lGoU{J5bTkGZT1H^@{Q2k+#C%L536VBdc9t%s;W{pLn$l+hyV(b z0)Yi8EiJvJ479Yk48b82&^OHhY9bCaL>&sGv$KgrtrbLG}~>_w0L8gpXI)PB0xh!LrM<1GHb92 z+o25^20%6(6!f6D866eW;%Zh7v4Zq_F$pY_nQ@N-AOk{Ks;jHb0bmSesz7;pdDPa{ zMui1C=*OPZ%v)Nz!Rxu-W+@U$832Z^7+JOjLSXPAN~@WUVP9V#*A9dk26c3FSa9)d ze>|VQX+J@GoNtiL7DII(9OV7}fqy8$Q%^PT?4`xUC8}>YOpxvS=`8Cau(7dUmEF)L zwwgtc)$MlE=FM9uDJeno`hHiDO;1l#OiT>#1AzeT&xxaY57D)2(?Vv+kOjNluFcN+ zX>@diwr;&oO^7}VDg*lHC6#yoO~;F6YL^TEo_qEM`r^yanTI|2s{n#4oWsW9hm3cG zJ_`&0qlYvV7eB?!?(XlIcPML8jmzlR5MR|jXHL_@Il0t7;Gv?OLHYKM6N<{?ybAQS%9f4D$<~7#R&^@XrS?p%=?{i8Q8h{be>J!8!WC z=bNOqd3R#rxhjg7pA^Otrx=&NHcb_nBe z1Q4jZB*`myVh2A<9cka;a8OTA4?pMU=TmEI>uL$Iv$Lt8p+VhH!np?C;NT$7GYBiv z|JIvtvm-=@CIn#*9?lMZ^r1lq4G3EOfc zSsDNU$ur182f6^Tmi=`BAdOF#JR>?fc=^P|#VO}SJD=qJ$y08_8Dx`^l2i%)698%O z%9Y?9{<`xu`lO+e*RSt&Q_;X<%$Gcnlr^(u3IK0A{TmAVlc#>rY`4c4nn~`ZqestV zQBIbdJm=#TPs*TNaxZL!*%v-}tgZS3Nf@E5`|T=?_N;BBX_^9p`4%$d_s>)3&tlNY zt9X!suEk>EJzmeq;K=B(rvE-PeHZA-YPHgZ3nScMUhf~2k&({)J0o@^O9u|r@*Wq+(W9;~nMhx}a9&yIP)=(o@UwQde ze%61O;=2yU3kwTq{K!SqXmAD@$m(^aJv1VG=s|>KKrf7jk`bVhaI>vN3kwUp;{O2} z7=$dKabXv~&}j$*AO(O@C>s9diknT7uUa$mc+T?`EGI&*i>Wfx`4{6PYFK5n0#yJ2 N002ovPDHLkV1iKix#9o- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley17.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley17.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bc876d84af34a38a950cf9f97f653ab36fe258 GIT binary patch literal 1090 zcmV-I1ikx-P)PA7b z(v66Vt`tg9ib${&p*xoq)KypA_`x7Wkg8A=gW!j@LW{*Vpco^#P%*wU$(hW&H}53{ z4>a>;-ko#L+_`h#G$wVhCf-u+Ni?hHiOFB8{a!3Jh1sGt?Za#dO8^P{xNvxjq)vB9 zeAif{oy*>3Yl_kWVEFuDx2$T}qYZzS-pJrkUXc}>cLpZA03O;S64}dL0nUTHQ)Tkh z-2!5B=T%t_V9%|HLPG)&%FeCZWcK4sL(cb~cqNS@ARxY>Lq8*2#LIj8JRywtUQ&P0(7<)1sv+O4(XS~08Z)9HlwIm<_$0s+oNm|=es$W=mEU(}Gm4WOh z)n^Von=X017I`?eWD)gtw^!eZWj{RFA$xbPuz1s%`RHSaq$w=a`cTh=Vy!R}3n(sq z;u*K>O-|VO5##F7V!uW120}G5d`7jG1}g91$e+!oSlV|bMs);x64xy|_(T+R1hBG= z+mC6L)lgZEnIoxWtGMv^NkQ4ro-nr-k@!6QKt)PN08k}2xoDA57{GG+D3_B%2imOi z%BTP%!)e{mdMz9wvZ-V)z^w%MlaDx(u0#RC%%iy+U~UvQl2Ju~dymi_NvG8+sS+X0 zT9eZ%#Ql8*ixeE(d!mv@;oK?$_~Ar^4T*!W!x-@Ir)h7G1tVZ4q>CGUC4fg{uv&!B zjtp0hT39)ygQ&ir8^y`w))AmW6X?^3iKtP{3nn7(4a^m888bbKTM2L#2y>i70U;rv zJ%A%eppEJl2=Z!8uV$DpFC$(Ie%gTtPyBgEwRTy6nBiDVUddJY?X{R zAUH?3!YW@FFb8uhBHY}%67s{ql8lM<@S}vI^u~C0!{p*3Lhl0vjvmV`&g`w*SJX4Z zk8Dn7a66jUbNKl+?}2_ES3z?Mz$BDgKj<9Ely~@;?v|P&-03 zrvuqh{Ty{O=DP|@y5q z&Tzc~c*zKVKNBjLe#Y;Asa?r1==#9mERWq8Rf&YK!ZDqMf#Ohfp1xR=%-M4xIdr!S z5!M!%_dNe3I1XF6A1;w$+)4n#&a&x-nULWk_^#6OIr@Lfe-DL+0KBzr%K!iX07*qo IM6N<$g8p;-h5!Hn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley18.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley18.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ca3bddcd16fd7f9bd1bc33ed34371a16c9941e GIT binary patch literal 1192 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 RtEK<|002ovPDHLkV1jSBx-S3# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley5.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley5.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd89c377b1f9de66aa63f1176f7a98ef13819a5 GIT binary patch literal 1472 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley7.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley7.png new file mode 100644 index 0000000000000000000000000000000000000000..ff13a670af2f3d6bc4e1357ae0eba1e1e18e5317 GIT binary patch literal 1473 zcmV;y1wQ(TP)1{0tTWDHXC%2QA{H0axo}~x94{* z=kAO1MccK4k3dCvKr-#O2Dp7*_0T7pF09HC)!|21y8mi0igAOQh|WM@52)u&II z=6q$&Mqgiuj7}glG}I3??4}zj>#^;0y5%y69Gs` zNePe9(a}8S<>fIDWNK=P7As;azLk}gJPr&D@aS+jbXyYvSpX5}s6b-EU39Ly>zW9N zFA@<k;fDRj^DjTA+m`X@9{)qP5g&+T zE!YyvM4)-*AH7t*`!zY~E$LJCopj9kAw@++(zE?Tl)l2o^QC`!=uSzu)2Dn6{kM!#!)=U#?M+G9 zLW6@YDi|K}Coor9Hh`3=?2u`9cee%Sd+WX1=v4J5w5Mq~t@=8g${eG#x9EA=-#$x` zt>si&vXWX#hS&zS-!*+pyFH_pgoFfbY|KqG>}G7l81^NAO9SGOQ3DT#y28%hP&FxS!1L3gCi(oXB| z)U1wFu`2(IFTBKoA|r0$CWJu89M%rL@w)f;T~a>ESMU*B@Ktafp9zG8g^{nwTycoH z?KJfZ@y>^bhwC=(xqAQvjBCC=^WiT@0PN-FX0OQGxb(Gn@MGqiFd3Y&SXL`Q0P$&|(C(M#AE2{0<080DE+C z#cf)$azIIu1uB5jN~Z_P9COM>6B}ROc8iTRdVclu3%CVRh3hGSvJXlCRX|h89?B?J z?|dRQzP{4^iy|O@y-+?W<5CIu`T{f1*7*^T;Cl+5;k^@iNd^GK&9;zCOia*cpMT0t2tgIll!ECi0SUkmOqHYQU#_~@g8nNO!R;p}!sx3o b1N#0CAckEQ+eE&S00000NkvXXu0mjfW%kDh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley8.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley8.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbd188439fc316732bc534ef4dca3c7c4025587 GIT binary patch literal 1472 zcmV;x1wZDDPSPlV6#CNnZ+ccE*FD>czb^5 za$eu}e(>Qu+ud{C=Q-zhe&;;rdEWP0X%P~6YlMc;{nwb~de#HUyaWUklAZMw)towE zn)8)e8-0B~GCG0K&`>|nuv>1XtS7h9soIk~BKTaOAO;(wj~cbVuTJ>cPEAc&Oave$ zB_%vYM@RFRmzT#tkjcqOTBwMv_*Pa{@;ERsz@x+A&}~fwWC28=qXLNu_tLrUuInNo zzDPtceZ{W=$Q};CKo>*6C+eaV3qPHkGdOHu zE7@cJC9ouhSUaai%mh-cH|fE_Q2GHfJw45%1Yffzh8y-9&%gYfZd<~md+ZP0MtmTW zwO~su6M>fLfAmuM?$^YGx1`V7x6@JQM-&wmNzeCRru1bto-h5=L+{3}Vgh0#K7lYL zmWe>Yq?=Z*T!rk|5M=^W7#H{dY$D_tuK8Qq=^3#kBqV5~qi&)hH)A8lkS_sTLdd?Y?F>&s7b5^5 zW65mn{VZA$)4;mNS3 zbnH>-1Mh7%JUmQmV~8^@b9~_K0j0~D(H6mh@%9EUMp{}LX_`j8y%+tr0Hvv^sbL*^ z1*ZGshxIF0b+@uG5C&#MzsG^5@ zdU^zl$JMKEr`plx19sL_506F@+KBM?YjxpIww z%%!J2#Loy0-<}O#e7oIFPN!4pM7g=SR9#(tZ3~i;k~p}$p;T}Ua~&NWba(0uZMXhT zE$T=WtMb46(kmP&GU7IFLI`xsVQv3gZ+eg4CFP@h1s}l$Uj^6knLt=r82O6K6^E$X zPE)@S?|gW8xNhT~y$3+RxaR9K7yi5iAn#Oox8sGPLbBOxdhpDQhgolEtmjeIjP^H# zKxb#Ct^*VSFrHXfPnqo-^`H{aXulu=b#-<6{y?BNG=8Pwd*GREcKW!=$@8L1p!=KR zDLKBLT7QVp=K|R)EI)h|laIC4xB&Ukwp_y=#;;FMogBpg3Gs=1fe0|px4NFm?H;4L z@6|ykmp%s@_*yI$)*slsMIGZ&I)9;CLv!MK77}^|jKZ%<)j(FOmAbmlbA!2DgA^MZ z&Fj01imANf!0dOSOaBVS`$E=2LPDs&e}H{~u@+Y+k?A!o67;LMug^vM_LZ`Z_xX_{ zPCuJqAEyYuV~1V;w%oI)ELa$S0{pI4$0sLetH}}1hYr6-3lZ2F35&1sJ0K_l?9s(# zcWTMX0VPEir~pbUogOH2%qbg9YAN!k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley9.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley9.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfe4e1fc940a4710503cb2858444c4993c07302 GIT binary patch literal 1480 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 BJ!Jp@ literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..de4a5f8a77dc9b5e54baacc1b700732883bbd2fc GIT binary patch literal 718 zcmV;<0x|uGP)PiXTNXHE8kGS|z6%Zv;~p zfI{)ZN053x1hy3KI1t0gt6_wK>n*uj;fIVd$2>-~Mm>nS0365(*e{hzFt@bU){t!H z=QaE*hY(Fypl#cBOiYfOCjV6xSHkSG0xG6*D`VYPz-+avqj;kV*s+FNz!h*M?>~%T z>y|c5O^;(^c#}n#Ap9}L9OkOZHMIrG%H^_br$0|D5jH=YbJUndW(z>q|CaRhsWW)= z_~8;^^~`gia@3fn0a(H>UuO(6$ZYPLHAe{7!iq7r{*Y`R!uCCTF_av@`R)s7Y4PFO z^{cYqm;H@UCV|VnSFo_4Bhi0b=Dr%fZPxgz&BKo2MBr?Fz=)4vFydket56sKFBgV&=Y*b&`{PuUD&orh#RnHs42XnYgw zUPz8^!xP6(A{^cz_n*d9E2B8iK`!?lPoF)pJ*Oi83UYD^5rX@!O!@Zj>u@rqeE^nJ zl;616b4d#EHsm3su}>dkH*ekW_Ise#{C@u;ROS6wSF<^`Yyg2kpei2gJSh9aFVmLT zvH`HP=eo}tclz%_v>4o+Ml8Eq#+1)V`5gn8A=uwF8bLIYM&@JCmAESa1;LLMO)KEV zyNK}2x)OH{pdf^>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/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_arm+o.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_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/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_arm.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_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/Objects/Specific/Mech/ripley_construction.rsi/ripley_r_leg+o.png b/Resources/Textures/Objects/Specific/Mech/ripley_construction.rsi/ripley_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