From aef5158e09a03d59fc7e0ef1f4bafd1639e52dc3 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Sun, 24 Nov 2024 21:02:23 -0400 Subject: [PATCH 1/7] Shitmed Update 2 - bottom text (#956) * full fucking send * ope forgot to remove the EE scripts * fix test * fix shitcode fail * DELTA THAT VALUE IS NULLABLE * whoopsie daysie * fixed??? * chat is this real --- .../Backmen/Targeting/TargetingSystem.cs | 16 +- Content.Client/Input/ContentContexts.cs | 4 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 9 + .../Backmen/Surgery/SurgerySystem.cs | 5 +- .../Body/Components/BrainComponent.cs | 5 + Content.Server/Body/Systems/BodySystem.cs | 10 + Content.Server/Body/Systems/BrainSystem.cs | 53 +++- .../Thresholds/Behaviors/BurnBodyBehavior.cs | 15 +- .../_Shitmed/Body/Systems/DebrainedSystem.cs | 62 ++++ .../_Shitmed/Body/Systems/EyesSystem.cs | 87 ++++++ .../_Shitmed/Cybernetics/CyberneticsSystem.cs | 55 ++++ .../Surgery/Body/CyberneticsComponent.cs | 16 ++ .../Surgery/Body/Events/BodyPartEvents.cs | 30 ++ .../Body/Organs/BodyPartEffectComponent.cs | 26 ++ .../Body/Organs/BodyPartEffectSystem.cs | 96 +++++++ .../Body/Organs/OrganEffectComponent.cs | 27 ++ .../Surgery/Body/Organs/OrganEffectSystem.cs | 110 +++++++ .../Surgery/Body/Organs/OrganEvents.cs | 13 + .../Body/SharedBodySystem.Targeting.cs | 5 +- .../Subsystems/GenerateChildPartComponent.cs | 18 ++ .../Subsystems/GenerateChildPartSystem.cs | 69 +++++ .../SurgeryComponentConditionComponent.cs | 17 ++ .../Surgery/SharedSurgerySystem.Steps.cs | 71 ++++- .../Backmen/Surgery/SharedSurgerySystem.cs | 18 +- .../Surgery/Steps/SurgeryStepComponent.cs | 6 + .../Surgery/Tools/BoneSetterComponent.cs | 10 +- .../Backmen/Surgery/Tools/DrillComponent.cs | 13 + .../Surgery/Tools/SurgeryToolExamineSystem.cs | 65 +++++ .../Surgery/Tools/SurgicalDrillComponent.cs | 10 - Content.Shared/Body/Organ/OrganComponent.cs | 33 ++- Content.Shared/Body/Part/BodyPartComponent.cs | 125 +++++--- .../Body/Systems/SharedBodySystem.Body.cs | 22 +- .../Body/Systems/SharedBodySystem.Organs.cs | 81 ++++++ .../Body/Systems/SharedBodySystem.Parts.cs | 217 +++++++++++++- .../Body/Systems/SharedBodySystem.cs | 2 + Content.Shared/Content.Shared.csproj | 4 + .../Damage/Systems/DamageableSystem.cs | 43 ++- .../Damage/Systems/SharedGodmodeSystem.cs | 9 + .../Eye/Blinding/Systems/BlindableSystem.cs | 13 + Content.Shared/Input/ContentKeyFunctions.cs | 4 + .../Overlays/ShowHealthBarsComponent.cs | 6 +- .../Overlays/ShowHealthIconsComponent.cs | 7 +- .../Prying/Components/PryingComponent.cs | 6 +- .../Locale/en-US/research/technologies.ftl | 5 + .../Locale/en-US/surgery/surgery-popup.ftl | 1 + .../Corvax/Body/Prototypes/vulpkanin.yml | 38 +-- .../DeltaV/Body/Parts/vulpkanin.yml | 270 ++++++++++++++++++ .../DeltaV/Body/Prototypes/harpy.yml | 51 ++++ .../Entities/Mobs/Cyborgs/borg_chassis.yml | 1 + .../Prototypes/Entities/Objects/Misc/pen.yml | 7 + .../Objects/Specific/Medical/surgery.yml | 195 +++++++++++-- .../Specific/Robotics/borg_modules.yml | 41 +++ .../Entities/Structures/Machines/lathe.yml | 21 ++ .../Prototypes/Recipes/Lathes/medical.yml | 52 ++++ .../Prototypes/Recipes/Lathes/robotics.yml | 83 ++++++ .../Prototypes/Recipes/Lathes/security.yml | 14 + .../Prototypes/Research/civilianservices.yml | 32 ++- .../Prototypes/_Backmen/Body/Organs/harpy.yml | 2 + .../_Backmen/Body/Prototypes/cybernetic.yml | 169 +++++++++++ .../_Backmen/Body/Prototypes/felinid.yml | 35 +-- .../_Backmen/Body/Prototypes/generic.yml | 79 +++++ .../_Backmen/Entities/Surgery/surgeries.yml | 36 ++- .../Entities/Surgery/surgery_steps.yml | 114 ++++++-- .../_Goobstation/Body/Organs/Animal/space.yml | 12 +- .../_Shitmed/Body/Organs/cybernetic.yml | 51 ++++ .../_Shitmed/Body/Organs/generic.yml | 23 ++ .../_Shitmed/Species/cybernetics.yml | 47 +++ .../actions_borg.rsi/adv-surgery-module.png | Bin 0 -> 509 bytes .../Actions/actions_borg.rsi/meta.json | 6 + .../actions_borg.rsi/surgery-module.png | Bin 0 -> 475 bytes .../Surgery/bonesetter.rsi/bonesetter.png | Bin 581 -> 287 bytes .../Surgery/bonesetter.rsi/inhand-left.png | Bin 0 -> 486 bytes .../Surgery/bonesetter.rsi/inhand-right.png | Bin 0 -> 474 bytes .../Medical/Surgery/bonesetter.rsi/meta.json | 35 ++- .../borgmodule.rsi/icon-advanced-surgery.png | Bin 0 -> 254 bytes .../Robotics/borgmodule.rsi/icon-surgery.png | Bin 0 -> 258 bytes .../Robotics/borgmodule.rsi/meta.json | 6 + .../bishop/bishop_alt1.rsi/head.png | Bin 0 -> 1059 bytes .../bishop/bishop_alt1.rsi/meta.json | 15 + .../bishop/bishop_main.rsi/head.png | Bin 0 -> 645 bytes .../bishop/bishop_main.rsi/l_arm-combined.png | Bin 0 -> 388 bytes .../bishop/bishop_main.rsi/l_arm-primary.png | Bin 0 -> 456 bytes .../bishop_main.rsi/l_arm-secondary.png | Bin 0 -> 348 bytes .../bishop/bishop_main.rsi/l_arm-tertiary.png | Bin 0 -> 217 bytes .../bishop/bishop_main.rsi/l_foot.png | Bin 0 -> 325 bytes .../bishop/bishop_main.rsi/l_hand.png | Bin 0 -> 385 bytes .../bishop/bishop_main.rsi/l_leg-combined.png | Bin 0 -> 523 bytes .../bishop/bishop_main.rsi/l_leg-primary.png | Bin 0 -> 620 bytes .../bishop_main.rsi/l_leg-secondary.png | Bin 0 -> 478 bytes .../bishop/bishop_main.rsi/meta.json | 95 ++++++ .../bishop/bishop_main.rsi/r_arm-combined.png | Bin 0 -> 401 bytes .../bishop/bishop_main.rsi/r_arm-primary.png | Bin 0 -> 473 bytes .../bishop_main.rsi/r_arm-secondary.png | Bin 0 -> 353 bytes .../bishop/bishop_main.rsi/r_arm-tertiary.png | Bin 0 -> 219 bytes .../bishop/bishop_main.rsi/r_foot.png | Bin 0 -> 328 bytes .../bishop/bishop_main.rsi/r_hand.png | Bin 0 -> 380 bytes .../bishop/bishop_main.rsi/r_leg-combined.png | Bin 0 -> 525 bytes .../bishop/bishop_main.rsi/r_leg-primary.png | Bin 0 -> 611 bytes .../bishop_main.rsi/r_leg-secondary.png | Bin 0 -> 319 bytes .../bishop/bishop_main.rsi/torso-primary.png | Bin 0 -> 1281 bytes .../bishop_main.rsi/torso-secondary.png | Bin 0 -> 481 bytes .../bishop/bishop_monitor.rsi/head-2.png | Bin 0 -> 371 bytes .../bishop/bishop_monitor.rsi/head.png | Bin 0 -> 630 bytes .../bishop/bishop_monitor.rsi/meta.json | 19 ++ .../hesphiastos_alt1.rsi/head-1.png | Bin 0 -> 6948 bytes .../hesphiastos_alt1.rsi/head-2.png | Bin 0 -> 6871 bytes .../hesphiastos_alt1.rsi/head-3.png | Bin 0 -> 6916 bytes .../hesphiastos_alt1.rsi/meta.json | 23 ++ .../hesphiastos_main.rsi/l_arm-1.png | Bin 0 -> 487 bytes .../hesphiastos_main.rsi/l_arm-2.png | Bin 0 -> 258 bytes .../hesphiastos_main.rsi/l_foot-1.png | Bin 0 -> 390 bytes .../hesphiastos_main.rsi/l_foot-2.png | Bin 0 -> 392 bytes .../hesphiastos_main.rsi/l_hand-1.png | Bin 0 -> 379 bytes .../hesphiastos_main.rsi/l_hand-2.png | Bin 0 -> 380 bytes .../hesphiastos_main.rsi/l_leg-1.png | Bin 0 -> 535 bytes .../hesphiastos_main.rsi/l_leg-2.png | Bin 0 -> 538 bytes .../hesphiastos_main.rsi/meta.json | 83 ++++++ .../hesphiastos_main.rsi/r_arm-1.png | Bin 0 -> 491 bytes .../hesphiastos_main.rsi/r_arm-2.png | Bin 0 -> 248 bytes .../hesphiastos_main.rsi/r_foot-1.png | Bin 0 -> 390 bytes .../hesphiastos_main.rsi/r_foot-2.png | Bin 0 -> 391 bytes .../hesphiastos_main.rsi/r_hand-1.png | Bin 0 -> 382 bytes .../hesphiastos_main.rsi/r_hand-2.png | Bin 0 -> 381 bytes .../hesphiastos_main.rsi/r_leg-1.png | Bin 0 -> 536 bytes .../hesphiastos_main.rsi/r_leg-2.png | Bin 0 -> 538 bytes .../hesphiastos_main.rsi/torso-1.png | Bin 0 -> 813 bytes .../hesphiastos_main.rsi/torso-2.png | Bin 0 -> 807 bytes .../hesphiastos_monitor.rsi/head-1.png | Bin 0 -> 330 bytes .../hesphiastos_monitor.rsi/head-2.png | Bin 0 -> 565 bytes .../hesphiastos_monitor.rsi/meta.json | 19 ++ .../morpheus/morpheus_alt1.rsi/head.png | Bin 0 -> 871 bytes .../morpheus/morpheus_alt1.rsi/meta.json | 15 + .../morpheus/morpheus_main.rsi/head.png | Bin 0 -> 679 bytes .../morpheus/morpheus_main.rsi/l_arm.png | Bin 0 -> 594 bytes .../morpheus/morpheus_main.rsi/l_foot.png | Bin 0 -> 383 bytes .../morpheus/morpheus_main.rsi/l_hand.png | Bin 0 -> 444 bytes .../morpheus/morpheus_main.rsi/l_leg.png | Bin 0 -> 612 bytes .../morpheus/morpheus_main.rsi/meta.json | 51 ++++ .../morpheus/morpheus_main.rsi/r_arm.png | Bin 0 -> 557 bytes .../morpheus/morpheus_main.rsi/r_foot.png | Bin 0 -> 387 bytes .../morpheus/morpheus_main.rsi/r_hand.png | Bin 0 -> 444 bytes .../morpheus/morpheus_main.rsi/r_leg.png | Bin 0 -> 611 bytes .../morpheus/morpheus_main.rsi/torso.png | Bin 0 -> 758 bytes .../shellguard/shellguard_alt1.rsi/head-1.png | Bin 0 -> 6405 bytes .../shellguard/shellguard_alt1.rsi/head-2.png | Bin 0 -> 6791 bytes .../shellguard/shellguard_alt1.rsi/meta.json | 19 ++ .../shellguard_main.rsi/l_arm-1.png | Bin 0 -> 453 bytes .../shellguard_main.rsi/l_arm-2.png | Bin 0 -> 455 bytes .../shellguard_main.rsi/l_foot-1.png | Bin 0 -> 359 bytes .../shellguard_main.rsi/l_foot-2.png | Bin 0 -> 359 bytes .../shellguard_main.rsi/l_hand-1.png | Bin 0 -> 365 bytes .../shellguard_main.rsi/l_hand-2.png | Bin 0 -> 363 bytes .../shellguard_main.rsi/l_leg-1.png | Bin 0 -> 475 bytes .../shellguard_main.rsi/l_leg-2.png | Bin 0 -> 459 bytes .../shellguard/shellguard_main.rsi/meta.json | 83 ++++++ .../shellguard_main.rsi/r_arm-1.png | Bin 0 -> 455 bytes .../shellguard_main.rsi/r_arm-2.png | Bin 0 -> 452 bytes .../shellguard_main.rsi/r_foot-1.png | Bin 0 -> 359 bytes .../shellguard_main.rsi/r_foot-2.png | Bin 0 -> 359 bytes .../shellguard_main.rsi/r_hand-1.png | Bin 0 -> 367 bytes .../shellguard_main.rsi/r_hand-2.png | Bin 0 -> 368 bytes .../shellguard_main.rsi/r_leg-1.png | Bin 0 -> 461 bytes .../shellguard_main.rsi/r_leg-2.png | Bin 0 -> 449 bytes .../shellguard_main.rsi/torso-1.png | Bin 0 -> 707 bytes .../shellguard_main.rsi/torso-2.png | Bin 0 -> 708 bytes .../shellguard_monitor.rsi/head-1.png | Bin 0 -> 466 bytes .../shellguard_monitor.rsi/head-2.png | Bin 0 -> 500 bytes .../shellguard_monitor.rsi/meta.json | 19 ++ .../wardtakahashi_alt1.rsi/head.png | Bin 0 -> 6829 bytes .../wardtakahashi_alt1.rsi/meta.json | 15 + .../wardtakahashi_main.rsi/head.png | Bin 0 -> 6426 bytes .../wardtakahashi_main.rsi/l_arm.png | Bin 0 -> 505 bytes .../wardtakahashi_main.rsi/l_foot.png | Bin 0 -> 340 bytes .../wardtakahashi_main.rsi/l_hand.png | Bin 0 -> 372 bytes .../wardtakahashi_main.rsi/l_leg.png | Bin 0 -> 572 bytes .../wardtakahashi_main.rsi/meta.json | 51 ++++ .../wardtakahashi_main.rsi/r_arm.png | Bin 0 -> 507 bytes .../wardtakahashi_main.rsi/r_foot.png | Bin 0 -> 337 bytes .../wardtakahashi_main.rsi/r_hand.png | Bin 0 -> 378 bytes .../wardtakahashi_main.rsi/r_leg.png | Bin 0 -> 553 bytes .../wardtakahashi_main.rsi/torso.png | Bin 0 -> 961 bytes .../wardtakahashi_monitor.rsi/head.png | Bin 0 -> 773 bytes .../wardtakahashi_monitor.rsi/meta.json | 15 + .../Cybernetics/xion/xion_alt1.rsi/head-1.png | Bin 0 -> 6832 bytes .../Cybernetics/xion/xion_alt1.rsi/head-2.png | Bin 0 -> 6889 bytes .../Cybernetics/xion/xion_alt1.rsi/meta.json | 19 ++ .../xion/xion_main.rsi/l_arm-1.png | Bin 0 -> 474 bytes .../xion/xion_main.rsi/l_arm-2.png | Bin 0 -> 467 bytes .../xion/xion_main.rsi/l_foot-1.png | Bin 0 -> 370 bytes .../xion/xion_main.rsi/l_foot-2.png | Bin 0 -> 370 bytes .../xion/xion_main.rsi/l_hand-1.png | Bin 0 -> 391 bytes .../xion/xion_main.rsi/l_hand-2.png | Bin 0 -> 388 bytes .../xion/xion_main.rsi/l_leg-1.png | Bin 0 -> 537 bytes .../xion/xion_main.rsi/l_leg-2.png | Bin 0 -> 535 bytes .../Cybernetics/xion/xion_main.rsi/meta.json | 82 ++++++ .../xion/xion_main.rsi/r_arm-1.png | Bin 0 -> 466 bytes .../xion/xion_main.rsi/r_arm-2.png | Bin 0 -> 460 bytes .../xion/xion_main.rsi/r_foot-1.png | Bin 0 -> 368 bytes .../xion/xion_main.rsi/r_foot-2.png | Bin 0 -> 367 bytes .../xion/xion_main.rsi/r_hand-1.png | Bin 0 -> 388 bytes .../xion/xion_main.rsi/r_hand-2.png | Bin 0 -> 387 bytes .../xion/xion_main.rsi/r_leg-1.png | Bin 0 -> 536 bytes .../xion/xion_main.rsi/r_leg-2.png | Bin 0 -> 533 bytes .../xion/xion_main.rsi/torso-1.png | Bin 0 -> 843 bytes .../xion/xion_main.rsi/torso-2.png | Bin 0 -> 841 bytes .../xion/xion_monitor.rsi/head-1.png | Bin 0 -> 6857 bytes .../xion/xion_monitor.rsi/head-2.png | Bin 0 -> 6466 bytes .../xion/xion_monitor.rsi/meta.json | 19 ++ .../zenghu/zenghu_main.rsi/groin.png | Bin 0 -> 5522 bytes .../zenghu/zenghu_main.rsi/head-1.png | Bin 0 -> 6588 bytes .../zenghu/zenghu_main.rsi/head-2.png | Bin 0 -> 6535 bytes .../zenghu/zenghu_main.rsi/l_arm-1.png | Bin 0 -> 5779 bytes .../zenghu/zenghu_main.rsi/l_arm-2.png | Bin 0 -> 5670 bytes .../zenghu/zenghu_main.rsi/l_foot-1.png | Bin 0 -> 5646 bytes .../zenghu/zenghu_main.rsi/l_foot-2.png | Bin 0 -> 5256 bytes .../zenghu/zenghu_main.rsi/l_hand-1.png | Bin 0 -> 5434 bytes .../zenghu/zenghu_main.rsi/l_hand-2.png | Bin 0 -> 5337 bytes .../zenghu/zenghu_main.rsi/l_leg-1.png | Bin 0 -> 5949 bytes .../zenghu/zenghu_main.rsi/l_leg-2.png | Bin 0 -> 5845 bytes .../zenghu/zenghu_main.rsi/meta.json | 95 ++++++ .../zenghu/zenghu_main.rsi/r_arm-1.png | Bin 0 -> 5824 bytes .../zenghu/zenghu_main.rsi/r_arm-2.png | Bin 0 -> 5666 bytes .../zenghu/zenghu_main.rsi/r_foot-1.png | Bin 0 -> 5688 bytes .../zenghu/zenghu_main.rsi/r_foot-2.png | Bin 0 -> 5256 bytes .../zenghu/zenghu_main.rsi/r_hand-1.png | Bin 0 -> 5597 bytes .../zenghu/zenghu_main.rsi/r_hand-2.png | Bin 0 -> 5349 bytes .../zenghu/zenghu_main.rsi/r_leg-1.png | Bin 0 -> 5899 bytes .../zenghu/zenghu_main.rsi/r_leg-2.png | Bin 0 -> 5805 bytes .../zenghu/zenghu_main.rsi/torso-1.png | Bin 0 -> 7778 bytes .../zenghu/zenghu_main.rsi/torso-2.png | Bin 0 -> 7157 bytes .../Mobs/Species/IPC/organs.rsi/ears.png | Bin 0 -> 418 bytes .../Mobs/Species/IPC/organs.rsi/eyeball-l.png | Bin 0 -> 4215 bytes .../Mobs/Species/IPC/organs.rsi/eyeball-r.png | Bin 0 -> 4202 bytes .../Mobs/Species/IPC/organs.rsi/eyes.png | Bin 0 -> 1047 bytes .../Mobs/Species/IPC/organs.rsi/heart-off.png | Bin 0 -> 260 bytes .../Mobs/Species/IPC/organs.rsi/heart-on.png | Bin 0 -> 491 bytes .../Mobs/Species/IPC/organs.rsi/meta.json | 50 ++++ .../Mobs/Species/IPC/organs.rsi/microcell.png | Bin 0 -> 334 bytes .../Mobs/Species/IPC/organs.rsi/tongue.png | Bin 0 -> 516 bytes .../Mobs/Species/IPC/parts.rsi/full.png | Bin 0 -> 2437 bytes .../Mobs/Species/IPC/parts.rsi/head_f.png | Bin 0 -> 885 bytes .../Mobs/Species/IPC/parts.rsi/head_m.png | Bin 0 -> 885 bytes .../Mobs/Species/IPC/parts.rsi/l_arm.png | Bin 0 -> 657 bytes .../Mobs/Species/IPC/parts.rsi/l_foot.png | Bin 0 -> 572 bytes .../Mobs/Species/IPC/parts.rsi/l_hand.png | Bin 0 -> 679 bytes .../Mobs/Species/IPC/parts.rsi/l_leg.png | Bin 0 -> 628 bytes .../Mobs/Species/IPC/parts.rsi/meta.json | 62 ++++ .../Mobs/Species/IPC/parts.rsi/r_arm.png | Bin 0 -> 737 bytes .../Mobs/Species/IPC/parts.rsi/r_foot.png | Bin 0 -> 562 bytes .../Mobs/Species/IPC/parts.rsi/r_hand.png | Bin 0 -> 780 bytes .../Mobs/Species/IPC/parts.rsi/r_leg.png | Bin 0 -> 636 bytes .../Mobs/Species/IPC/parts.rsi/torso_f.png | Bin 0 -> 1306 bytes .../Mobs/Species/IPC/parts.rsi/torso_m.png | Bin 0 -> 1232 bytes .../adv-retractor.rsi/adv-retractor-on.png | Bin 0 -> 220 bytes .../adv-retractor.rsi/adv-retractor.png | Bin 0 -> 254 bytes .../adv-retractor.rsi/inhand-left-on.png | Bin 0 -> 397 bytes .../Surgery/adv-retractor.rsi/inhand-left.png | Bin 0 -> 400 bytes .../adv-retractor.rsi/inhand-right-on.png | Bin 0 -> 421 bytes .../adv-retractor.rsi/inhand-right.png | Bin 0 -> 405 bytes .../Surgery/adv-retractor.rsi/meta.json | 33 +++ .../Medical/Surgery/bone-gel.rsi/bone-gel.png | Bin 0 -> 258 bytes .../Surgery/bone-gel.rsi/inhand-left.png | Bin 0 -> 418 bytes .../Surgery/bone-gel.rsi/inhand-right.png | Bin 0 -> 431 bytes .../Medical/Surgery/bone-gel.rsi/meta.json | 22 ++ .../Medical/Surgery/cautery.rsi/cautery.png | Bin 0 -> 238 bytes .../Surgery/cautery.rsi/inhand-left.png | Bin 0 -> 420 bytes .../Surgery/cautery.rsi/inhand-right.png | Bin 0 -> 430 bytes .../Medical/Surgery/cautery.rsi/meta.json | 22 ++ .../Surgery/circular-saw.rsi/circular-saw.png | Bin 0 -> 273 bytes .../Surgery/circular-saw.rsi/inhand-left.png | Bin 0 -> 666 bytes .../Surgery/circular-saw.rsi/inhand-right.png | Bin 0 -> 668 bytes .../Surgery/circular-saw.rsi/meta.json | 22 ++ .../Medical/Surgery/drapes.rsi/drapes.png | Bin 0 -> 228 bytes .../Surgery/drapes.rsi/inhand-left.png | Bin 0 -> 460 bytes .../Surgery/drapes.rsi/inhand-right.png | Bin 0 -> 462 bytes .../Medical/Surgery/drapes.rsi/meta.json | 22 ++ .../Medical/Surgery/drill.rsi/drill.png | Bin 0 -> 702 bytes .../Medical/Surgery/drill.rsi/inhand-left.png | Bin 0 -> 685 bytes .../Surgery/drill.rsi/inhand-right.png | Bin 0 -> 689 bytes .../Medical/Surgery/drill.rsi/meta.json | 22 ++ .../Surgery/e-cautery.rsi/e-cautery-on.png | Bin 0 -> 234 bytes .../Surgery/e-cautery.rsi/e-cautery.png | Bin 0 -> 244 bytes .../Surgery/e-cautery.rsi/inhand-left-on.png | Bin 0 -> 481 bytes .../Surgery/e-cautery.rsi/inhand-left.png | Bin 0 -> 462 bytes .../Surgery/e-cautery.rsi/inhand-right-on.png | Bin 0 -> 496 bytes .../Surgery/e-cautery.rsi/inhand-right.png | Bin 0 -> 475 bytes .../Medical/Surgery/e-cautery.rsi/meta.json | 33 +++ .../Surgery/e-scalpel.rsi/e-scalpel-on.png | Bin 0 -> 537 bytes .../Surgery/e-scalpel.rsi/e-scalpel.png | Bin 0 -> 218 bytes .../Surgery/e-scalpel.rsi/inhand-left-on.png | Bin 0 -> 503 bytes .../Surgery/e-scalpel.rsi/inhand-left.png | Bin 0 -> 487 bytes .../Surgery/e-scalpel.rsi/inhand-right-on.png | Bin 0 -> 505 bytes .../Surgery/e-scalpel.rsi/inhand-right.png | Bin 0 -> 480 bytes .../Medical/Surgery/e-scalpel.rsi/meta.json | 39 +++ .../Medical/Surgery/hemostat.rsi/hemostat.png | Bin 0 -> 261 bytes .../Surgery/hemostat.rsi/inhand-left.png | Bin 0 -> 374 bytes .../Surgery/hemostat.rsi/inhand-right.png | Bin 0 -> 385 bytes .../Medical/Surgery/hemostat.rsi/meta.json | 22 ++ .../Surgery/omnimed.rsi/inhand-left.png | Bin 0 -> 593 bytes .../Surgery/omnimed.rsi/inhand-right.png | Bin 0 -> 585 bytes .../Medical/Surgery/omnimed.rsi/meta.json | 22 ++ .../Medical/Surgery/omnimed.rsi/omnimed.png | Bin 0 -> 271 bytes .../Surgery/retractor.rsi/inhand-left.png | Bin 0 -> 480 bytes .../Surgery/retractor.rsi/inhand-right.png | Bin 0 -> 486 bytes .../Medical/Surgery/retractor.rsi/meta.json | 22 ++ .../Surgery/retractor.rsi/retractor.png | Bin 0 -> 304 bytes .../Surgery/scalpel.rsi/inhand-left.png | Bin 0 -> 424 bytes .../Surgery/scalpel.rsi/inhand-right.png | Bin 0 -> 433 bytes .../Medical/Surgery/scalpel.rsi/meta.json | 22 ++ .../Medical/Surgery/scalpel.rsi/scalpel.png | Bin 0 -> 194 bytes Resources/keybinds.yml | 7 +- 311 files changed, 3872 insertions(+), 226 deletions(-) create mode 100644 Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs create mode 100644 Content.Server/_Shitmed/Body/Systems/EyesSystem.cs create mode 100644 Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs create mode 100644 Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Tools/DrillComponent.cs create mode 100644 Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs delete mode 100644 Content.Shared/Backmen/Surgery/Tools/SurgicalDrillComponent.cs create mode 100644 Resources/Prototypes/DeltaV/Body/Parts/vulpkanin.yml create mode 100644 Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml create mode 100644 Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml create mode 100644 Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/cybernetic.yml create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/generic.yml create mode 100644 Resources/Prototypes/_Shitmed/Species/cybernetics.yml create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/adv-surgery-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/surgery-module.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-advanced-surgery.png create mode 100644 Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-surgery.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_alt1.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-combined.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-primary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-secondary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-tertiary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-combined.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-primary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-secondary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-combined.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-primary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-secondary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-tertiary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-combined.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-primary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-secondary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/torso-primary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/torso-secondary.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-3.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/torso-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/torso-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_monitor.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_monitor.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_monitor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_alt1.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/torso.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/torso-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/torso-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_monitor.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_monitor.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_monitor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_alt1.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/torso.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_monitor.rsi/head.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_monitor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/torso-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/torso-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/groin.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/head-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/head-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_hand-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_hand-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-1.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-2.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/ears.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/eyeball-l.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/eyeball-r.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/eyes.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/heart-off.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/heart-on.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/microcell.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/tongue.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/full.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_f.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_m.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_foot.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_hand.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_leg.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/torso_f.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/torso_m.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/adv-retractor-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/adv-retractor.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/bone-gel.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/circular-saw.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/drapes.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/drill.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/e-cautery-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/e-cautery.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-left-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/e-scalpel-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/e-scalpel.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/hemostat.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/omnimed.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/retractor.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/inhand-left.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/inhand-right.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png diff --git a/Content.Client/Backmen/Targeting/TargetingSystem.cs b/Content.Client/Backmen/Targeting/TargetingSystem.cs index b2791143e25..f6f82e95960 100644 --- a/Content.Client/Backmen/Targeting/TargetingSystem.cs +++ b/Content.Client/Backmen/Targeting/TargetingSystem.cs @@ -31,20 +31,20 @@ public override void Initialize() InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.Torso))) .Bind(ContentKeyFunctions.TargetLeftArm, InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftArm))) -/* .Bind(ContentKeyFunctions.TargetLeftHand, - InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftHand))) SOON :TM: */ + .Bind(ContentKeyFunctions.TargetLeftHand, + InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftHand))) .Bind(ContentKeyFunctions.TargetRightArm, InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightArm))) -/* .Bind(ContentKeyFunctions.TargetRightHand, - InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightHand)))*/ + .Bind(ContentKeyFunctions.TargetRightHand, + InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightHand))) .Bind(ContentKeyFunctions.TargetLeftLeg, InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftLeg))) -/* .Bind(ContentKeyFunctions.TargetLeftFoot, - InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftFoot)))*/ + .Bind(ContentKeyFunctions.TargetLeftFoot, + InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.LeftFoot))) .Bind(ContentKeyFunctions.TargetRightLeg, InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightLeg))) -/* .Bind(ContentKeyFunctions.TargetRightFoot, - InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightFoot)))*/ + .Bind(ContentKeyFunctions.TargetRightFoot, + InputCmdHandler.FromDelegate((session) => HandleTargetChange(session, TargetBodyPart.RightFoot))) .Register(); } diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 808dc21daa8..a113125d925 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -93,9 +93,13 @@ public static void SetupContexts(IInputContextContainer contexts) human.AddFunction(ContentKeyFunctions.TargetHead); human.AddFunction(ContentKeyFunctions.TargetTorso); human.AddFunction(ContentKeyFunctions.TargetLeftArm); + human.AddFunction(ContentKeyFunctions.TargetLeftHand); human.AddFunction(ContentKeyFunctions.TargetRightArm); + human.AddFunction(ContentKeyFunctions.TargetRightHand); human.AddFunction(ContentKeyFunctions.TargetLeftLeg); + human.AddFunction(ContentKeyFunctions.TargetLeftFoot); human.AddFunction(ContentKeyFunctions.TargetRightLeg); + human.AddFunction(ContentKeyFunctions.TargetRightFoot); // actions should be common (for ghosts, mobs, etc) common.AddFunction(ContentKeyFunctions.OpenActionsMenu); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index faa934295fd..ed6072dbcdf 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -261,9 +261,13 @@ void HandleToggleAutoGetUp(BaseButton.ButtonToggledEventArgs args) // BACKMEN ED AddButton(ContentKeyFunctions.TargetHead); AddButton(ContentKeyFunctions.TargetTorso); AddButton(ContentKeyFunctions.TargetLeftArm); + AddButton(ContentKeyFunctions.TargetLeftHand); AddButton(ContentKeyFunctions.TargetRightArm); + AddButton(ContentKeyFunctions.TargetRightHand); AddButton(ContentKeyFunctions.TargetLeftLeg); + AddButton(ContentKeyFunctions.TargetLeftFoot); AddButton(ContentKeyFunctions.TargetRightLeg); + AddButton(ContentKeyFunctions.TargetRightFoot); AddHeader("ui-options-header-misc"); AddButton(ContentKeyFunctions.TakeScreenshot); @@ -276,6 +280,11 @@ void HandleToggleAutoGetUp(BaseButton.ButtonToggledEventArgs args) // BACKMEN ED AddButton(boundKey); } + foreach (var boundKey in ContentKeyFunctions.GetLoadoutBoundKeys()) + { + AddButton(boundKey); + } + AddHeader("ui-options-header-shuttle"); AddButton(ContentKeyFunctions.ShuttleStrafeUp); AddButton(ContentKeyFunctions.ShuttleStrafeRight); diff --git a/Content.Server/Backmen/Surgery/SurgerySystem.cs b/Content.Server/Backmen/Surgery/SurgerySystem.cs index f03072b286a..417971307b9 100644 --- a/Content.Server/Backmen/Surgery/SurgerySystem.cs +++ b/Content.Server/Backmen/Surgery/SurgerySystem.cs @@ -132,12 +132,13 @@ private void OnSurgeryStepDamage(Entity ent, ref Surgery private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) { + // Im killing this shit soon too, inshallah. if (ent.Comp.DamageType == "Rot") _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) - else if (ent.Comp.DamageType == "Eye" + /*else if (ent.Comp.DamageType == "Eye" && TryComp(ent, out BlindableComponent? blindComp) && blindComp.EyeDamage > 0) - _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage); + _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage);*/ } private void OnSurgeryDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) diff --git a/Content.Server/Body/Components/BrainComponent.cs b/Content.Server/Body/Components/BrainComponent.cs index 004ff24eaff..441bcd31549 100644 --- a/Content.Server/Body/Components/BrainComponent.cs +++ b/Content.Server/Body/Components/BrainComponent.cs @@ -5,5 +5,10 @@ namespace Content.Server.Body.Components [RegisterComponent, Access(typeof(BrainSystem))] public sealed partial class BrainComponent : Component { + /// + /// Shitmed Change: Is this brain currently controlling the entity? + /// + [DataField] + public bool Active = true; } } diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index d0e1814e737..8757f3a7cfa 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -177,6 +177,16 @@ public override HashSet GibPart( return gibs; } + public override bool BurnPart(EntityUid partId, BodyPartComponent? part = null) + { + if (!Resolve(partId, ref part, logMissing: false) + || TerminatingOrDeleted(partId) + || EntityManager.IsQueuedForDeletion(partId)) + return false; + + return base.BurnPart(partId, part); + } + protected override void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component) { return; diff --git a/Content.Server/Body/Systems/BrainSystem.cs b/Content.Server/Body/Systems/BrainSystem.cs index 4cc7c753c62..3cf362afc6d 100644 --- a/Content.Server/Body/Systems/BrainSystem.cs +++ b/Content.Server/Body/Systems/BrainSystem.cs @@ -27,29 +27,34 @@ public override void Initialize() SubscribeLocalEvent(OnPointAttempt); } - private void HandleRemoval(EntityUid uid, BrainComponent _, ref OrganRemovedFromBodyEvent args) + private void HandleRemoval(EntityUid uid, BrainComponent brain, ref OrganRemovedFromBodyEvent args) { if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.OldBody)) return; - // Prevents revival, should kill the user within a given timespan too. - EnsureComp(args.OldBody); - EnsureComp(args.OldBody); - HandleMind(uid, args.OldBody); + brain.Active = false; + if (!CheckOtherBrains(args.OldBody)) + { + // Prevents revival, should kill the user within a given timespan too. + EnsureComp(args.OldBody); + HandleMind(uid, args.OldBody); + } } - private void HandleAddition(EntityUid uid, BrainComponent _, ref OrganAddedToBodyEvent args) + private void HandleAddition(EntityUid uid, BrainComponent brain, ref OrganAddedToBodyEvent args) { if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Body)) return; - RemComp(args.Body); - if (_bodySystem.TryGetBodyOrganEntityComps(args.Body, out var _)) - RemComp(args.Body); - HandleMind(args.Body, uid); + if (!CheckOtherBrains(args.Body)) + { + RemComp(args.Body); + HandleMind(args.Body, uid, brain); + } } - private void HandleMind(EntityUid newEntity, EntityUid oldEntity) + + private void HandleMind(EntityUid newEntity, EntityUid oldEntity, BrainComponent? brain = null) { if (TerminatingOrDeleted(newEntity) || TerminatingOrDeleted(oldEntity)) return; @@ -65,8 +70,34 @@ private void HandleMind(EntityUid newEntity, EntityUid oldEntity) return; _mindSystem.TransferTo(mindId, newEntity, mind: mind); + if (brain != null) + brain.Active = true; + } + + private bool CheckOtherBrains(EntityUid entity) + { + var hasOtherBrains = false; + if (TryComp(entity, out var body)) + { + if (TryComp(entity, out var bodyBrain)) + hasOtherBrains = true; + else + { + foreach (var (organ, _) in _bodySystem.GetBodyOrgans(entity, body)) + { + if (TryComp(organ, out var brain) && brain.Active) + { + hasOtherBrains = true; + break; + } + } + } + } + + return hasOtherBrains; } + // Shitmed Change End private void OnPointAttempt(Entity ent, ref PointAttemptEvent args) { args.Cancel(); diff --git a/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs index f0499dc6a2d..4a2a3d1f730 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs @@ -1,4 +1,5 @@ using Content.Shared.Body.Components; +using Content.Shared.Body.Part; // Shitmed Change using Content.Shared.Inventory; using Content.Shared.Popups; using JetBrains.Annotations; @@ -25,8 +26,16 @@ public void Execute(EntityUid bodyId, DestructibleSystem system, EntityUid? caus } } - sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyId)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution); - - system.EntityManager.QueueDeleteEntity(bodyId); + if (system.EntityManager.TryGetComponent(bodyId, out var bodyPart)) + { + if (bodyPart.CanSever + && system.BodySystem.BurnPart(bodyId, bodyPart)) + sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyId)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution); + } + else + { + sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyId)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution); + system.EntityManager.QueueDeleteEntity(bodyId); + } } } diff --git a/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs b/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs new file mode 100644 index 00000000000..8b3ccba079f --- /dev/null +++ b/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs @@ -0,0 +1,62 @@ +using Content.Server._Shitmed.DelayedDeath; +using Content.Shared._Shitmed.Body.Organ; +using Content.Shared.Body.Systems; +using Content.Shared.Mind; +using Content.Server.Popups; +using Content.Shared.Speech; +using Content.Shared.Standing; +using Content.Shared.Stunnable; + +namespace Content.Server._Shitmed.Body.Systems; + +/// +/// This system handles behavior on entities when they lose their head or their brains are removed. +/// MindComponent fuckery should still be mainly handled on BrainSystem as usual. +/// +public sealed class DebrainedSystem : EntitySystem +{ + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly StandingStateSystem _standingSystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnComponentRemove); + SubscribeLocalEvent(OnSpeakAttempt); + SubscribeLocalEvent(OnStandAttempt); + } + + private void OnComponentInit(EntityUid uid, DebrainedComponent _, ComponentInit args) + { + if (TerminatingOrDeleted(uid)) + return; + + EnsureComp(uid); + EnsureComp(uid); + _standingSystem.Down(uid); + } + + private void OnComponentRemove(EntityUid uid, DebrainedComponent _, ComponentRemove args) + { + if (TerminatingOrDeleted(uid)) + return; + + RemComp(uid); + RemComp(uid); + if (_bodySystem.TryGetBodyOrganEntityComps(uid, out var _)) + RemComp(uid); + } + + private void OnSpeakAttempt(EntityUid uid, DebrainedComponent _, SpeakAttemptEvent args) + { + _popupSystem.PopupEntity(Loc.GetString("speech-muted"), uid, uid); + args.Cancel(); + } + + private void OnStandAttempt(EntityUid uid, DebrainedComponent _, StandAttemptEvent args) + { + args.Cancel(); + } +} diff --git a/Content.Server/_Shitmed/Body/Systems/EyesSystem.cs b/Content.Server/_Shitmed/Body/Systems/EyesSystem.cs new file mode 100644 index 00000000000..9a10e875b7b --- /dev/null +++ b/Content.Server/_Shitmed/Body/Systems/EyesSystem.cs @@ -0,0 +1,87 @@ +using Content.Server.Body.Components; +using Content.Shared.Body.Components; +using Content.Shared.Body.Events; +using Content.Shared._Shitmed.Body.Organ; +using Content.Shared.Eye.Blinding.Components; +using Content.Shared.Eye.Blinding.Systems; + +namespace Content.Server.Body.Systems +{ + public sealed class EyesSystem : EntitySystem + { + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly BlindableSystem _blindableSystem = default!; + [Dependency] private readonly BodySystem _bodySystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnOrganEnabled); + SubscribeLocalEvent(OnOrganDisabled); + } + + private void HandleSight(EntityUid newEntity, EntityUid oldEntity) + { + if (TerminatingOrDeleted(newEntity) || TerminatingOrDeleted(oldEntity)) + return; + + BlindableComponent? newSight; + BlindableComponent? oldSight; + //transfer existing component to organ + if (!TryComp(newEntity, out newSight)) + newSight = EnsureComp(newEntity); + + if (!TryComp(oldEntity, out oldSight)) + oldSight = EnsureComp(oldEntity); + + //give new sight all values of old sight + _blindableSystem.TransferBlindness(newSight, oldSight, newEntity); + + var hasOtherEyes = false; + //check for other eye components on owning body and owning body organs (if old entity has a body) + if (TryComp(oldEntity, out var body)) + { + if (TryComp(oldEntity, out var bodyEyes)) //some bodies see through their skin!!! (slimes) + hasOtherEyes = true; + else + { + foreach (var (organ, _) in _bodySystem.GetBodyOrgans(oldEntity, body)) + { + if (TryComp(organ, out var eyes)) + { + hasOtherEyes = true; + break; + } + } + //TODO (MS14): Should we do this for body parts too? might be a little overpowered but could be funny/interesting + } + } + + //if there are no existing eye components for the old entity - set old sight to be blind otherwise leave it as is + if (!hasOtherEyes && !TryComp(oldEntity, out var self)) + _blindableSystem.AdjustEyeDamage((oldEntity, oldSight), oldSight.MaxDamage); + + } + + private void OnOrganEnabled(EntityUid uid, EyesComponent component, OrganEnabledEvent args) + { + if (TerminatingOrDeleted(uid) + || args.Organ.Comp.Body is not { Valid: true } body) + return; + + RemComp(body); + HandleSight(uid, body); + } + + private void OnOrganDisabled(EntityUid uid, EyesComponent component, OrganDisabledEvent args) + { + if (TerminatingOrDeleted(uid) + || args.Organ.Comp.Body is not { Valid: true } body) + return; + + EnsureComp(body); + HandleSight(body, uid); + } + } +} diff --git a/Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs b/Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs new file mode 100644 index 00000000000..386bfc9de8c --- /dev/null +++ b/Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs @@ -0,0 +1,55 @@ +using Content.Server.Emp; +using Content.Shared.Body.Part; +using Content.Shared.Body.Organ; +using Content.Shared._Shitmed.Body.Organ; +using Content.Shared._Shitmed.Body.Events; +using Content.Shared._Shitmed.Cybernetics; + +namespace Content.Server._Shitmed.Cybernetics; + +internal sealed class CyberneticsSystem : EntitySystem +{ + public override void Initialize() + { + SubscribeLocalEvent(OnEmpPulse); + SubscribeLocalEvent(OnEmpDisabledRemoved); + } + private void OnEmpPulse(Entity cyberEnt, ref EmpPulseEvent ev) + { + if (!cyberEnt.Comp.Disabled) + { + ev.Affected = true; + ev.Disabled = true; + cyberEnt.Comp.Disabled = true; + + if (HasComp(cyberEnt)) + { + var disableEvent = new OrganEnableChangedEvent(false); + RaiseLocalEvent(cyberEnt, ref disableEvent); + } + else if (HasComp(cyberEnt)) + { + var disableEvent = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(cyberEnt, ref disableEvent); + } + } + } + + private void OnEmpDisabledRemoved(Entity cyberEnt, ref EmpDisabledRemoved ev) + { + if (cyberEnt.Comp.Disabled) + { + cyberEnt.Comp.Disabled = false; + if (HasComp(cyberEnt)) + { + var enableEvent = new OrganEnableChangedEvent(true); + RaiseLocalEvent(cyberEnt, ref enableEvent); + } + else if (HasComp(cyberEnt)) + { + var enableEvent = new BodyPartEnableChangedEvent(true); + RaiseLocalEvent(cyberEnt, ref enableEvent); + } + } + } +} diff --git a/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs b/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs new file mode 100644 index 00000000000..43c1588c2a6 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.Cybernetics; + +/// +/// Component for cybernetic implants that can be installed in entities +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class CyberneticsComponent : Component +{ + /// + /// Is the cybernetic implant disabled by EMPs, etc? + /// + [DataField, AutoNetworkedField] + public bool Disabled = false; +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs b/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs new file mode 100644 index 00000000000..3f65fc37b19 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs @@ -0,0 +1,30 @@ +using Content.Shared.Humanoid; +using Content.Shared.Body.Part; + +namespace Content.Shared._Shitmed.Body.Events; + +/// +/// Raised on an entity when attempting to remove a body part. +/// +[ByRefEvent] +public readonly record struct AmputateAttemptEvent(EntityUid Part); + +// Kind of a clone of BodyPartAddedEvent for surgical reattachment specifically. +[ByRefEvent] +public readonly record struct BodyPartAttachedEvent(Entity Part); + +// Kind of a clone of BodyPartRemovedEvent for any instances where we call DropPart(), reasoning being that RemovedEvent fires off +// a lot more often than what I'd like due to PVS. +[ByRefEvent] +public readonly record struct BodyPartDroppedEvent(Entity Part); + +[ByRefEvent] +public readonly record struct BodyPartEnableChangedEvent(bool Enabled); + +[ByRefEvent] +public readonly record struct BodyPartEnabledEvent(Entity Part); + +[ByRefEvent] +public readonly record struct BodyPartDisabledEvent(Entity Part); + +public readonly record struct BodyPartComponentsModifyEvent(EntityUid Body, bool Add); diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs new file mode 100644 index 00000000000..be6ab40a2d2 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared._Shitmed.BodyEffects; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentPause] +public sealed partial class BodyPartEffectComponent : Component +{ + /// + /// The components that are active on the part and will be refreshed every 5s + /// + [DataField] + public ComponentRegistry Active = new(); + + /// + /// How long to wait between each refresh. + /// Effects can only last at most this long once the organ is removed. + /// + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(5); + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate = TimeSpan.Zero; +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs new file mode 100644 index 00000000000..96cdae1d78f --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs @@ -0,0 +1,96 @@ +using Content.Shared._Shitmed.Body.Events; +using Content.Shared.Body.Part; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Timing; +using System.Linq; + +namespace Content.Shared._Shitmed.BodyEffects; +public partial class BodyPartEffectSystem : EntitySystem +{ + [Dependency] private readonly IComponentFactory _compFactory = default!; + [Dependency] private readonly ISerializationManager _serManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPartComponentsModify); + } + + // While I would love to kill this function, problem is that if we happen to have two parts that add the same + // effect, removing one will remove both of them, since we cant tell what the source of a Component is. + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + var now = _gameTiming.CurTime; + while (query.MoveNext(out var uid, out var comp, out var part)) + { + if (now < comp.NextUpdate || !comp.Active.Any() || part.Body is not { } body) + continue; + + comp.NextUpdate = now + comp.Delay; + AddComponents(body, uid, comp.Active); + } + } + + private void OnPartComponentsModify(Entity partEnt, + ref BodyPartComponentsModifyEvent ev) + { + if (partEnt.Comp.OnAdd != null) + { + if (ev.Add) + AddComponents(ev.Body, partEnt, partEnt.Comp.OnAdd); + else + RemoveComponents(ev.Body, partEnt, partEnt.Comp.OnAdd); + } + + if (partEnt.Comp.OnRemove != null) + { + if (ev.Add) + AddComponents(ev.Body, partEnt, partEnt.Comp.OnRemove); + else + RemoveComponents(ev.Body, partEnt, partEnt.Comp.OnRemove); + } + + Dirty(partEnt, partEnt.Comp); + } + + private void AddComponents(EntityUid body, + EntityUid part, + ComponentRegistry reg, + BodyPartEffectComponent? effectComp = null) + { + if (!Resolve(part, ref effectComp, logMissing: false)) + return; + + foreach (var (key, comp) in reg) + { + var compType = comp.Component.GetType(); + if (HasComp(body, compType)) + continue; + + var newComp = (Component) _serManager.CreateCopy(comp.Component, notNullableOverride: true); + EntityManager.AddComponent(body, newComp, true); + + effectComp.Active[key] = comp; + } + } + + private void RemoveComponents(EntityUid body, + EntityUid part, + ComponentRegistry reg, + BodyPartEffectComponent? effectComp = null) + { + if (!Resolve(part, ref effectComp, logMissing: false)) + return; + + foreach (var (key, comp) in reg) + { + RemComp(body, comp.Component.GetType()); + effectComp.Active.Remove(key); + } + } +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs new file mode 100644 index 00000000000..c0c627b8f0b --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs @@ -0,0 +1,27 @@ +// We keep this clone of the other component since I don't know yet if I'll need organ specific functions in the future. +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared._Shitmed.BodyEffects; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentPause] +public sealed partial class OrganEffectComponent : Component +{ + /// + /// The components that are active on the part and will be refreshed every 5s + /// + [DataField] + public ComponentRegistry Active = new(); + + /// + /// How long to wait between each refresh. + /// Effects can only last at most this long once the organ is removed. + /// + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(5); + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate = TimeSpan.Zero; +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs new file mode 100644 index 00000000000..6b290f1955b --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs @@ -0,0 +1,110 @@ +// We keep this clone of the other system since I don't know yet if I'll need organ specific functions in the future. +// will delete or refactor as time goes on. +using Content.Shared._Shitmed.Body.Organ; +using Content.Shared.Body.Organ; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Timing; +using System.Linq; +using Robust.Shared.Network; + + +namespace Content.Shared._Shitmed.BodyEffects; +public partial class OrganEffectSystem : EntitySystem +{ + [Dependency] private readonly IComponentFactory _compFactory = default!; + [Dependency] private readonly ISerializationManager _serManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly INetManager _net = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnOrganComponentsModify); + } + + // While I would love to kill this function, problem is that if we happen to have two parts that add the same + // effect, removing one will remove both of them, since we cant tell what the source of a Component is. + public override void Update(float frameTime) + { + base.Update(frameTime); + + if (!_net.IsServer) // TODO: Kill this once I figure out whats breaking the Diagnostic Cybernetics. + return; + + var query = EntityQueryEnumerator(); + var now = _gameTiming.CurTime; + while (query.MoveNext(out var uid, out var comp, out var part)) + { + if (now < comp.NextUpdate || !comp.Active.Any() || part.Body is not { } body) + continue; + + comp.NextUpdate = now + comp.Delay; + AddComponents(body, uid, comp.Active); + } + } + + private void OnOrganComponentsModify(Entity organEnt, + ref OrganComponentsModifyEvent ev) + { + if (!_net.IsServer) // TODO: Kill this once I figure out whats breaking the Diagnostic Cybernetics. + return; + + if (organEnt.Comp.OnAdd != null) + { + if (ev.Add) + AddComponents(ev.Body, organEnt, organEnt.Comp.OnAdd); + else + RemoveComponents(ev.Body, organEnt, organEnt.Comp.OnAdd); + } + + if (organEnt.Comp.OnRemove != null) + { + if (ev.Add) + AddComponents(ev.Body, organEnt, organEnt.Comp.OnRemove); + else + RemoveComponents(ev.Body, organEnt, organEnt.Comp.OnRemove); + } + } + + private void AddComponents(EntityUid body, + EntityUid part, + ComponentRegistry reg, + OrganEffectComponent? effectComp = null) + { + if (!Resolve(part, ref effectComp, logMissing: false)) + return; + + foreach (var (key, comp) in reg) + { + var compType = comp.Component.GetType(); + if (HasComp(body, compType)) + continue; + + var newComp = (Component) _serManager.CreateCopy(comp.Component, notNullableOverride: true); + newComp.Owner = body; + EntityManager.AddComponent(body, newComp, true); + effectComp.Active[key] = comp; + if (newComp.NetSyncEnabled) + { + Dirty(body, newComp); + Dirty(part, effectComp); + } + } + } + + private void RemoveComponents(EntityUid body, + EntityUid part, + ComponentRegistry reg, + OrganEffectComponent? effectComp = null) + { + if (!Resolve(part, ref effectComp, logMissing: false)) + return; + + foreach (var (key, comp) in reg) + { + RemComp(body, comp.Component.GetType()); + effectComp.Active.Remove(key); + } + } +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs new file mode 100644 index 00000000000..4126b4d13a4 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs @@ -0,0 +1,13 @@ +using Content.Shared.Body.Organ; +namespace Content.Shared._Shitmed.Body.Organ; + +public readonly record struct OrganComponentsModifyEvent(EntityUid Body, bool Add); + +[ByRefEvent] +public readonly record struct OrganEnableChangedEvent(bool Enabled); + +[ByRefEvent] +public readonly record struct OrganEnabledEvent(Entity Organ); + +[ByRefEvent] +public readonly record struct OrganDisabledEvent(Entity Organ); diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs index 511aa5b5017..444f1be9466 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs @@ -62,7 +62,7 @@ public IntegrityJob(SharedBodySystem self, Entity ent, double private void InitializeBkm() { _queryTargeting = GetEntityQuery(); - SubscribeLocalEvent(OnBeforeDamageChanged); + SubscribeLocalEvent(OnTryChangePartDamage); SubscribeLocalEvent(OnBodyDamageModify); SubscribeLocalEvent(OnPartDamageModify); SubscribeLocalEvent(OnDamageChanged); @@ -123,7 +123,7 @@ public override void Update(float frameTime) } } - private void OnBeforeDamageChanged(Entity ent, ref BeforeDamageChangedEvent args) + private void OnTryChangePartDamage(Entity ent, ref TryChangePartDamageEvent args) { // If our target has a TargetingComponent, that means they will take limb damage // And if their attacker also has one, then we use that part. @@ -238,6 +238,7 @@ private void OnDamageChanged(Entity partEnt, ref DamageChange var delta = args.DamageDelta; if (args.CanSever + && partEnt.Comp.CanSever && partIdSlot is not null && delta != null && !HasComp(partEnt) diff --git a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs new file mode 100644 index 00000000000..e581867fc30 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.BodyEffects.Subsystems; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class GenerateChildPartComponent : Component +{ + + [DataField(required: true)] + public EntProtoId Id = ""; + + [DataField, AutoNetworkedField] + public EntityUid? ChildPart; + + [DataField] + public bool Active = false; +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs new file mode 100644 index 00000000000..00215048e73 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs @@ -0,0 +1,69 @@ +using Content.Shared.Body.Part; +using Content.Shared.Body.Systems; +using Content.Shared._Shitmed.Body.Events; +using Robust.Shared.Map; +using Robust.Shared.Timing; +using Robust.Shared.Network; +using System.Numerics; + +namespace Content.Shared._Shitmed.BodyEffects.Subsystems; + +public sealed class GenerateChildPartSystem : EntitySystem +{ + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly INetManager _net = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPartComponentsModify); + } + + private void OnPartComponentsModify(EntityUid uid, GenerateChildPartComponent component, ref BodyPartComponentsModifyEvent args) + { + if (args.Add) + CreatePart(uid, component); + //else + //DeletePart(uid, component); + } + + private void CreatePart(EntityUid uid, GenerateChildPartComponent component) + { + if (!TryComp(uid, out BodyPartComponent? partComp) + || partComp.Body is null + || component.Active) + return; + + // I pinky swear to also move this to the server side properly next update :) + if (_net.IsServer) + { + var childPart = Spawn(component.Id, new EntityCoordinates(partComp.Body.Value, Vector2.Zero)); + + if (!TryComp(childPart, out BodyPartComponent? childPartComp)) + return; + + var slotName = _bodySystem.GetSlotFromBodyPart(childPartComp); + _bodySystem.TryCreatePartSlot(uid, slotName, childPartComp.PartType, out var _); + _bodySystem.AttachPart(uid, slotName, childPart, partComp, childPartComp); + component.ChildPart = childPart; + component.Active = true; + Dirty(childPart, childPartComp); + } + + _bodySystem.ChangeSlotState((uid, partComp), false); + } + + // Still unusued, gotta figure out what I want to do with this function outside of fuckery with mantis blades. + private void DeletePart(EntityUid uid, GenerateChildPartComponent component) + { + if (!TryComp(uid, out BodyPartComponent? partComp)) + return; + + _bodySystem.ChangeSlotState((uid, partComp), true); + var ev = new BodyPartDroppedEvent((uid, partComp)); + RaiseLocalEvent(uid, ref ev); + QueueDel(uid); + } +} + diff --git a/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs b/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs new file mode 100644 index 00000000000..af03fbf912c --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; + +// Quite the redundant name eh? +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryComponentConditionComponent : Component +{ + [DataField] + public ComponentRegistry Component; + + [DataField] + public bool Inverse; + +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs index 32bcd0c2899..61c21c76da1 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs @@ -103,6 +103,17 @@ private void OnToolStep(Entity ent, ref SurgeryStepEvent a } } + if (ent.Comp.BodyAdd != null) + { + foreach (var reg in ent.Comp.BodyAdd.Values) + { + var compType = reg.Component.GetType(); + if (HasComp(args.Body, compType)) + continue; + AddComp(args.Body, _compFactory.GetComponent(compType)); + } + } + if (ent.Comp.BodyRemove != null) { foreach (var reg in ent.Comp.BodyRemove.Values) @@ -150,6 +161,18 @@ private void OnToolCheck(Entity ent, ref SurgeryStepComple } } + if (ent.Comp.BodyAdd != null) + { + foreach (var reg in ent.Comp.BodyAdd.Values) + { + if (!HasComp(args.Body, reg.Component.GetType())) + { + args.Cancelled = true; + return; + } + } + } + if (ent.Comp.BodyRemove != null) { foreach (var reg in ent.Comp.BodyRemove.Values) @@ -252,12 +275,9 @@ private void OnTendWoundsStep(Entity ent, ref bonus *= 0.2; var adjustedDamage = new DamageSpecifier(ent.Comp.Damage); - var bonusPerType = bonus / group.Length; foreach (var type in group) - { - adjustedDamage.DamageDict[type] -= bonusPerType; - } + adjustedDamage.DamageDict[type] -= bonus; var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 0.5f); RaiseLocalEvent(args.Body, ref ev); @@ -583,7 +603,7 @@ private void OnRemoveMarkingCheck(Entity ent, private void OnSurgeryTargetStepChosen(Entity ent, ref SurgeryStepChosenBuiMsg args) { - var user = args.Actor; + var user = args.Actor; if (GetEntity(args.Entity) is not { Valid: true } body || GetEntity(args.Part) is not { Valid: true } targetPart || !IsSurgeryValid(body, targetPart, args.Surgery, args.Step, user, out var surgery, out var part, out var step)) @@ -598,14 +618,29 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref S if (!CanPerformStep(user, body, part, step, true, out _, out _, out var validTools)) return; - if (_net.IsServer && validTools?.Count > 0) + var speed = 1f; + var usedEv = new SurgeryToolUsedEvent(user, body); + // We need to check for nullability because of surgeries that dont require a tool, like Cavity Implants + if (validTools?.Count > 0) { - foreach (var tool in validTools) + foreach (var (tool, toolSpeed) in validTools) { - if (TryComp(tool, out SurgeryToolComponent? toolComp) && - toolComp.EndSound != null) + RaiseLocalEvent(tool, ref usedEv); + if (usedEv.Cancelled) + return; + + speed *= toolSpeed; + } + + if (_net.IsServer) + { + foreach (var tool in validTools.Keys) { - _audio.PlayEntity(toolComp.StartSound, user, tool); + if (TryComp(tool, out SurgeryToolComponent? toolComp) && + toolComp.EndSound != null) + { + _audio.PlayEntity(toolComp.StartSound, user, tool); + } } } } @@ -614,8 +649,8 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref S _rotateToFace.TryFaceCoordinates(user, _transform.GetMapCoordinates(body, xform).Position); var ev = new SurgeryDoAfterEvent(args.Surgery, args.Step); - // TODO: Make this serialized on a per surgery step basis, and also add penalties based on ghetto tools. - var duration = 2f; + // TODO: Move 2 seconds to a field of SurgeryStepComponent + var duration = 2f / speed; if (TryComp(user, out SurgerySpeedModifierComponent? surgerySpeedMod) && surgerySpeedMod is not null) duration = duration / surgerySpeedMod.SpeedModifier; @@ -646,6 +681,18 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref S } } + private float GetSurgeryDuration(EntityUid surgeryStep, EntityUid user, EntityUid target, float toolSpeed) + { + if (!TryComp(surgeryStep, out SurgeryStepComponent? stepComp)) + return 2f; // Shouldnt really happen but just a failsafe. + + var speed = toolSpeed; + + if (TryComp(user, out SurgerySpeedModifierComponent? surgerySpeedMod)) + speed *= surgerySpeedMod.SpeedModifier; + + return stepComp.Duration / speed; + } private (Entity Surgery, int Step)? GetNextStep(EntityUid body, EntityUid part, Entity surgery, List requirements) { if (!Resolve(surgery, ref surgery.Comp)) diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs index 81a74330bca..89398c92e6f 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs @@ -56,6 +56,7 @@ public override void Initialize() SubscribeLocalEvent(OnTargetDoAfter); SubscribeLocalEvent(OnCloseIncisionValid); //SubscribeLocalEvent(OnLarvaValid); + SubscribeLocalEvent(OnComponentConditionValid); SubscribeLocalEvent(OnPartConditionValid); SubscribeLocalEvent(OnOrganConditionValid); SubscribeLocalEvent(OnWoundedValid); @@ -125,6 +126,21 @@ private void OnWoundedValid(Entity ent, ref Su if (infected != null && infected.SpawnedLarva != null) args.Cancelled = true; }*/ + + private void OnComponentConditionValid(Entity ent, ref SurgeryValidEvent args) + { + var present = true; + foreach (var reg in ent.Comp.Component.Values) + { + var compType = reg.Component.GetType(); + if (!HasComp(args.Part, compType)) + present = false; + } + + if (ent.Comp.Inverse ? present : !present) + args.Cancelled = true; + } + private void OnPartConditionValid(Entity ent, ref SurgeryValidEvent args) { if (!TryComp(args.Part, out var part)) @@ -175,7 +191,7 @@ private void OnPartRemovedConditionValid(Entity "a bone setter"; + public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; +} \ No newline at end of file diff --git a/Content.Shared/Backmen/Surgery/Tools/DrillComponent.cs b/Content.Shared/Backmen/Surgery/Tools/DrillComponent.cs new file mode 100644 index 00000000000..eb934839810 --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Tools/DrillComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Backmen.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class DrillComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a drill"; + public bool? Used { get; set; } = null; + + [DataField] + public float Speed { get; set; } = 1f; +} diff --git a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs new file mode 100644 index 00000000000..5d4b7a9fdfa --- /dev/null +++ b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs @@ -0,0 +1,65 @@ +using Content.Shared.Body.Organ; +using Content.Shared.Body.Part; +using Content.Shared.Examine; +using Content.Shared.Verbs; +using Robust.Shared.Utility; + +namespace Content.Shared._Shitmed.Medical.Surgery.Tools; + +/// +/// Examining a surgical or ghetto tool shows everything it can be used for. +/// +public sealed class SurgeryToolExamineSystem : EntitySystem +{ + [Dependency] private readonly ExamineSystemShared _examine = default!; + + public override void Initialize() + { + SubscribeLocalEvent>(OnGetVerbs); + + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnExamined); + } + + private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var msg = FormattedMessage.FromMarkupOrThrow(Loc.GetString("surgery-tool-header")); + msg.PushNewline(); + var ev = new SurgeryToolExaminedEvent(msg); + RaiseLocalEvent(ent, ref ev); + + _examine.AddDetailedExamineVerb(args, ent.Comp, ev.Message, + Loc.GetString("surgery-tool-examinable-verb-text"), "/Textures/Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png", + Loc.GetString("surgery-tool-examinable-verb-message")); + } + + private void OnExamined(EntityUid uid, ISurgeryToolComponent comp, ref SurgeryToolExaminedEvent args) + { + var msg = args.Message; + var color = comp.Speed switch + { + < 1f => "red", + > 1f => "green", + _ => "white" + }; + var key = "surgery-tool-" + (comp.Used == true ? "used" : "unlimited"); + var speed = comp.Speed.ToString("N2"); // 2 decimal places to not get trolled by float + msg.PushMarkup(Loc.GetString(key, ("tool", comp.ToolName), ("speed", speed), ("color", color))); + } +} + +[ByRefEvent] +public record struct SurgeryToolExaminedEvent(FormattedMessage Message); diff --git a/Content.Shared/Backmen/Surgery/Tools/SurgicalDrillComponent.cs b/Content.Shared/Backmen/Surgery/Tools/SurgicalDrillComponent.cs deleted file mode 100644 index 75feb380326..00000000000 --- a/Content.Shared/Backmen/Surgery/Tools/SurgicalDrillComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Robust.Shared.GameStates; - -namespace Content.Shared.Backmen.Surgery.Tools; - -[RegisterComponent, NetworkedComponent] -public sealed partial class SurgicalDrillComponent : Component, ISurgeryToolComponent -{ - public string ToolName => "a surgical drill"; - public bool? Used { get; set; } = null; -} diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index 8b457ba1126..c4bfda9fa30 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Body.Systems; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared._Shitmed.Medical.Surgery.Tools; namespace Content.Shared.Body.Organ; @@ -26,15 +28,42 @@ public sealed partial class OrganComponent : Component, ISurgeryToolComponent /// without referencing the prototype or hardcoding. /// - [DataField] + [DataField, AlwaysPushInheritance] public string SlotId = ""; - [DataField] + [DataField, AlwaysPushInheritance] public string ToolName { get; set; } = "An organ"; + [DataField, AlwaysPushInheritance] + public float Speed { get; set; } = 1f; + /// /// If true, the organ will not heal an entity when transplanted into them. /// [DataField, AutoNetworkedField] public bool? Used { get; set; } + + /// + /// When attached, the organ will ensure these components on the entity, and delete them on removal. + /// + [DataField] + public ComponentRegistry? OnAdd; + + /// + /// When removed, the organ will ensure these components on the entity, and add them on removal. + /// + [DataField] + public ComponentRegistry? OnRemove; + + /// + /// Is this organ working or not? + /// + [DataField, AutoNetworkedField] + public bool Enabled = true; + + /// + /// Can this organ be enabled or disabled? Used mostly for prop, damaged or useless organs. + /// + [DataField] + public bool CanEnable = true; } diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index 06934c90ea6..179e0e6449e 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -7,6 +7,7 @@ using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Serialization; +using Robust.Shared.Prototypes; namespace Content.Shared.Body.Part; @@ -27,96 +28,103 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField, AutoNetworkedField] public BodyPartSlot? ParentSlot; - [DataField, AutoNetworkedField] - public BodyPartType PartType = BodyPartType.Other; - - // TODO BODY Replace with a simulation of organs - /// - /// Whether or not the owning will die if all - /// s of this type are removed from it. - /// - [DataField("vital"), AutoNetworkedField] - public bool IsVital; - /// - /// Amount of damage to deal when the part gets removed. - /// Only works if IsVital is true. + /// Shitmed Change: Amount of damage to deal when the part gets removed. + /// Only works if IsVital is true. /// [DataField, AutoNetworkedField] public FixedPoint2 VitalDamage = 100; - [DataField, AutoNetworkedField] - public BodyPartSymmetry Symmetry = BodyPartSymmetry.None; - - [DataField] + [DataField, AlwaysPushInheritance] public string ToolName { get; set; } = "A body part"; [DataField, AutoNetworkedField] public bool? Used { get; set; } = null; + [DataField, AlwaysPushInheritance] + public float Speed { get; set; } = 1f; + /// - /// Child body parts attached to this body part. + /// Shitmed Change: What's the max health this body part can have? + /// + [DataField] + public float MinIntegrity; + + /// + /// Whether this body part can be severed or not /// [DataField, AutoNetworkedField] - public Dictionary Children = new(); + public bool CanSever = true; /// - /// Organs attached to this body part. + /// Shitmed Change: Whether this body part is enabled or not. /// [DataField, AutoNetworkedField] - public Dictionary Organs = new(); + public bool Enabled = true; /// - /// What's the max health this body part can have? + /// Shitmed Change: Whether this body part can be enabled or not. Used for non-functional prosthetics. /// [DataField] - public float MinIntegrity; + public bool CanEnable = true; /// - /// Whether this body part is enabled or not. + /// Whether this body part can attach children or not. /// - [DataField, AutoNetworkedField] - public bool Enabled = true; + [DataField] + public bool CanAttachChildren = true; /// - /// How long it takes to run another self heal tick on the body part. + /// Shitmed Change: How long it takes to run another self heal tick on the body part. /// [DataField] public float HealingTime = 30; /// - /// How long it has been since the last self heal tick on the body part. + /// Shitmed Change: How long it has been since the last self heal tick on the body part. /// public float HealingTimer; /// - /// How much health to heal on the body part per tick. + /// Shitmed Change: How much health to heal on the body part per tick. /// [DataField] public float SelfHealingAmount = 5; + /// + /// Shitmed Change: The name of the container for this body part. Used in insertion surgeries. + /// [DataField] public string ContainerName { get; set; } = "part_slot"; + /// + /// Shitmed Change: The slot for item insertion. + /// [DataField, AutoNetworkedField] public ItemSlot ItemInsertionSlot = new(); /// - /// Current species. Dictates things like body part sprites. + /// Shitmed Change: Current species. Dictates things like body part sprites. /// [DataField, AutoNetworkedField] public string Species { get; set; } = ""; /// - /// The total damage that has to be dealt to a body part - /// to make possible severing it. + /// Shitmed Change: The total damage that has to be dealt to a body part + /// to make possible severing it. /// [DataField, AutoNetworkedField] - public float SeverIntegrity = 80; + public float SeverIntegrity = 90; + + /// + /// Shitmed Change: The ID of the base layer for this body part. + /// + [DataField, AutoNetworkedField, AlwaysPushInheritance] + public string? BaseLayerId; /// - /// On what TargetIntegrity we should re-enable the part. + /// Shitmed Change: On what TargetIntegrity we should re-enable the part. /// [DataField, AutoNetworkedField] public TargetIntegrity EnableIntegrity = TargetIntegrity.ModeratelyWounded; @@ -124,14 +132,55 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField, AutoNetworkedField] public Dictionary IntegrityThresholds = new() { - { TargetIntegrity.CriticallyWounded, 70 }, + { TargetIntegrity.CriticallyWounded, 75 }, { TargetIntegrity.HeavilyWounded, 60 }, - { TargetIntegrity.ModeratelyWounded, 45 }, - { TargetIntegrity.SomewhatWounded, 30}, - { TargetIntegrity.LightlyWounded, 15 }, + { TargetIntegrity.ModeratelyWounded, 50 }, + { TargetIntegrity.SomewhatWounded, 35 }, + { TargetIntegrity.LightlyWounded, 20 }, { TargetIntegrity.Healthy, 10 }, }; + [DataField, AutoNetworkedField, AlwaysPushInheritance] + public BodyPartType PartType = BodyPartType.Other; + + + // TODO BODY Replace with a simulation of organs + /// + /// Whether or not the owning will die if all + /// s of this type are removed from it. + /// + [DataField("vital"), AutoNetworkedField] + public bool IsVital; + + [DataField, AutoNetworkedField] + public BodyPartSymmetry Symmetry = BodyPartSymmetry.None; + + /// + /// When attached, the part will ensure these components on the entity, and delete them on removal. + /// + [DataField, AlwaysPushInheritance] + public ComponentRegistry? OnAdd; + + /// + /// When removed, the part will ensure these components on the entity, and add them on removal. + /// + [DataField, AlwaysPushInheritance] + public ComponentRegistry? OnRemove; + + // Shitmed Change End + + /// + /// Child body parts attached to this body part. + /// + [DataField, AutoNetworkedField] + public Dictionary Children = new(); + + /// + /// Organs attached to this body part. + /// + [DataField, AutoNetworkedField] + public Dictionary Organs = new(); + /// /// These are only for VV/Debug do not use these for gameplay/systems /// diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index eb2cfb9ff90..819666d0b0d 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -391,7 +391,7 @@ public virtual HashSet GibPart( if (part.Body is { } bodyEnt) { - if (IsPartRoot(bodyEnt, partId, part: part)) + if (IsPartRoot(bodyEnt, partId, part: part) || !part.CanSever) return gibs; RemovePartChildren((partId, part), bodyEnt); @@ -422,6 +422,26 @@ public virtual HashSet GibPart( return gibs; } + public virtual bool BurnPart(EntityUid partId, + BodyPartComponent? part = null) + { + if (!Resolve(partId, ref part, logMissing: false)) + return false; + + if (part.Body is { } bodyEnt) + { + if (IsPartRoot(bodyEnt, partId, part: part)) + return false; + + ChangeSlotState((partId, part), true); + RemovePartChildren((partId, part), bodyEnt); + QueueDel(partId); + return true; + } + + return false; + } + private void OnProfileLoadFinished(EntityUid uid, BodyComponent component, ProfileLoadFinishedEvent args) { if (!HasComp(uid) diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index 0ead4cbd612..88c102530ff 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -6,10 +6,33 @@ using Content.Shared.Damage; using Robust.Shared.Containers; +// Shitmed Change + +using Content.Shared.Damage; +using Content.Shared._Shitmed.BodyEffects; +using Content.Shared._Shitmed.Body.Events; +using Content.Shared._Shitmed.Body.Organ; + namespace Content.Shared.Body.Systems; public partial class SharedBodySystem { + // Shitmed Change Start + + private void InitializeOrgans() + { + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnOrganEnableChanged); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + if (ent.Comp.OnAdd is not null || ent.Comp.OnRemove is not null) + EnsureComp(ent); + } + + // Shitmed Change End + private void AddOrgan( Entity organEnt, EntityUid bodyUid, @@ -24,8 +47,15 @@ private void AddOrgan( organEnt.Comp.OriginalBody = organEnt.Comp.Body; var addedInBodyEv = new OrganAddedToBodyEvent(bodyUid, parentPartUid); RaiseLocalEvent(organEnt, ref addedInBodyEv); + var organEnabledEv = new OrganEnableChangedEvent(true); + RaiseLocalEvent(organEnt, ref organEnabledEv); } + if (TryComp(parentPartUid, out DamageableComponent? damageable) + && damageable.TotalDamage > 200) + TrySetOrganUsed(organEnt, true, organEnt.Comp); + // Shitmed Change End + Dirty(organEnt, organEnt.Comp); } @@ -36,6 +66,11 @@ private void RemoveOrgan(Entity organEnt, EntityUid parentPartUi if (organEnt.Comp.Body is { Valid: true } bodyUid) { + // Shitmed Change Start + organEnt.Comp.OriginalBody = organEnt.Comp.Body; + var organDisabledEv = new OrganEnableChangedEvent(false); + RaiseLocalEvent(organEnt, ref organDisabledEv); + // Shitmed Change End var removedInBodyEv = new OrganRemovedFromBodyEvent(bodyUid, parentPartUid); RaiseLocalEvent(organEnt, ref removedInBodyEv); } @@ -226,4 +261,50 @@ public bool TrySetOrganUsed(EntityUid organId, bool used, OrganComponent? organ Dirty(organId, organ); return true; } + + private void OnOrganEnableChanged(Entity organEnt, ref OrganEnableChangedEvent args) + { + if (!organEnt.Comp.CanEnable && args.Enabled) + return; + + organEnt.Comp.Enabled = args.Enabled; + + if (args.Enabled) + EnableOrgan(organEnt); + else + DisableOrgan(organEnt); + + if (organEnt.Comp.Body is { Valid: true } bodyEnt) + RaiseLocalEvent(organEnt, new OrganComponentsModifyEvent(bodyEnt, args.Enabled)); + + Dirty(organEnt, organEnt.Comp); + } + + private void EnableOrgan(Entity organEnt) + { + if (!TryComp(organEnt.Comp.Body, out BodyComponent? body)) + return; + + // I hate having to hardcode these checks so much. + if (HasComp(organEnt)) + { + var ev = new OrganEnabledEvent(organEnt); + RaiseLocalEvent(organEnt, ref ev); + } + } + + private void DisableOrgan(Entity organEnt) + { + if (!TryComp(organEnt.Comp.Body, out BodyComponent? body)) + return; + + // I hate having to hardcode these checks so much. + if (HasComp(organEnt)) + { + var ev = new OrganDisabledEvent(organEnt); + RaiseLocalEvent(organEnt, ref ev); + } + } + + // Shitmed Change End } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index f4f24542220..ac18276e69f 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -16,6 +16,15 @@ using System.Linq; using Content.Shared.Backmen.Mood; +// Shitmed Change Start +using Content.Shared._Shitmed.Body.Events; +using Content.Shared._Shitmed.Body.Part; +using Content.Shared._Shitmed.BodyEffects; +using Content.Shared._Shitmed.Targeting.Events; +using Content.Shared.Humanoid; +using Content.Shared.Inventory; +using Content.Shared.Random; + namespace Content.Shared.Body.Systems; public partial class SharedBodySystem @@ -45,6 +54,14 @@ private void OnMapInit(Entity ent, ref MapInitEvent args) _slots.AddItemSlot(ent, ent.Comp.ContainerName, ent.Comp.ItemInsertionSlot); Dirty(ent, ent.Comp); } + + if (ent.Comp.OnAdd is not null || ent.Comp.OnRemove is not null) + EnsureComp(ent); + + foreach (var connection in ent.Comp.Children.Keys) + { + Containers.EnsureContainer(ent, GetPartSlotContainerId(connection)); + } } private void OnBodyPartRemove(Entity ent, ref ComponentRemove args) @@ -52,7 +69,159 @@ private void OnBodyPartRemove(Entity ent, ref ComponentRemove if (ent.Comp.PartType == BodyPartType.Torso) _slots.RemoveItemSlot(ent, ent.Comp.ItemInsertionSlot); } - + + private void OnPartEnableChanged(Entity partEnt, ref BodyPartEnableChangedEvent args) + { + if (!partEnt.Comp.CanEnable && args.Enabled) + return; + + partEnt.Comp.Enabled = args.Enabled; + + if (args.Enabled) + { + EnablePart(partEnt); + if (partEnt.Comp.Body is { Valid: true } bodyEnt) + RaiseLocalEvent(partEnt, new BodyPartComponentsModifyEvent(bodyEnt, true)); + } + else + { + DisablePart(partEnt); + if (partEnt.Comp.Body is { Valid: true } bodyEnt) + RaiseLocalEvent(partEnt, new BodyPartComponentsModifyEvent(bodyEnt, false)); + } + + Dirty(partEnt, partEnt.Comp); + } + + private void EnablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + // I hate having to hardcode these checks so much. + if (partEnt.Comp.PartType == BodyPartType.Leg) + AddLeg(partEnt, (partEnt.Comp.Body.Value, body)); + + if (partEnt.Comp.PartType == BodyPartType.Arm) + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); + if (hand != default) + { + var ev = new BodyPartEnabledEvent(hand); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + if (partEnt.Comp.PartType == BodyPartType.Hand) + { + var ev = new BodyPartEnabledEvent(partEnt); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + /// + /// This function handles disabling or enabling equipment slots when an entity is + /// missing all of a given part type, or they get one added to them. + /// It is called right before dropping a part, or right after adding one. + /// + public void ChangeSlotState(Entity partEnt, bool disable) + { + if (partEnt.Comp.Body is not null + && TryComp(partEnt.Comp.Body, out var inventory) // Prevent error for non-humanoids + && GetBodyPartCount(partEnt.Comp.Body.Value, partEnt.Comp.PartType) == 1 + && TryGetPartSlotContainerName(partEnt.Comp.PartType, out var containerNames)) + { + foreach (var containerName in containerNames) + { + _inventorySystem.SetSlotStatus(partEnt.Comp.Body.Value, containerName, disable, inventory); + var ev = new RefreshInventorySlotsEvent(containerName); + RaiseLocalEvent(partEnt.Comp.Body.Value, ev); + } + } + + } + + private void DisablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + if (partEnt.Comp.PartType == BodyPartType.Leg) + RemoveLeg(partEnt, (partEnt.Comp.Body.Value, body)); + + if (partEnt.Comp.PartType == BodyPartType.Arm) + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); + if (hand != default) + { + var ev = new BodyPartDisabledEvent(hand); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + if (partEnt.Comp.PartType == BodyPartType.Hand) + { + var ev = new BodyPartDisabledEvent(partEnt); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + // TODO: Refactor this crap. I hate it so much. + private void RemovePartEffect(Entity partEnt, Entity bodyEnt) + { + if (TerminatingOrDeleted(bodyEnt) + || !Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) + return; + + RemovePartChildren(partEnt, bodyEnt, bodyEnt.Comp); + } + + protected void RemovePartChildren(Entity partEnt, EntityUid bodyEnt, BodyComponent? body = null) + { + if (!Resolve(bodyEnt, ref body, logMissing: false)) + return; + + if (partEnt.Comp.Children.Any()) + { + foreach (var slotId in partEnt.Comp.Children.Keys) + { + if (Containers.TryGetContainer(partEnt, GetPartSlotContainerId(slotId), out var container) && + container is ContainerSlot slot && + slot.ContainedEntity is { } childEntity && + TryComp(childEntity, out BodyPartComponent? childPart)) + { + var ev = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(childEntity, ref ev); + DropPart((childEntity, childPart)); + } + } + + Dirty(bodyEnt, body); + } + } + + protected virtual void DropPart(Entity partEnt) + { + ChangeSlotState(partEnt, true); + // I don't know if this can cause issues, since any part that's being detached HAS to have a Body. + // though I really just want the compiler to shut the fuck up. + var body = partEnt.Comp.Body.GetValueOrDefault(); + if (TryComp(partEnt, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + var enableEvent = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(partEnt, ref enableEvent); + var droppedEvent = new BodyPartDroppedEvent(partEnt); + RaiseLocalEvent(body, ref droppedEvent); + SharedTransform.AttachToGridOrMap(partEnt, transform); + _randomHelper.RandomOffset(partEnt, 0.5f); + } + + } + + private void OnAmputateAttempt(Entity partEnt, ref AmputateAttemptEvent args) => + DropPart(partEnt); + + // Shitmed Change End private void OnBodyPartInserted(Entity ent, ref EntInsertedIntoContainerMessage args) { // Body part inserted into another body part. @@ -146,6 +315,9 @@ protected virtual void AddPart( Dirty(partEnt, partEnt.Comp); partEnt.Comp.Body = bodyEnt; + if (partEnt.Comp.Enabled && partEnt.Comp.Body is { Valid: true } body) // Shitmed Change + RaiseLocalEvent(partEnt, new BodyPartComponentsModifyEvent(body, true)); + var ev = new BodyPartAddedEvent(slotId, partEnt); RaiseLocalEvent(bodyEnt, ref ev); @@ -160,8 +332,13 @@ protected virtual void RemovePart( Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false); Dirty(partEnt, partEnt.Comp); - partEnt.Comp.ParentSlot = null; + // Shitmed Change Start partEnt.Comp.OriginalBody = partEnt.Comp.Body; + if (partEnt.Comp.Body is { Valid: true } body) + RaiseLocalEvent(partEnt, new BodyPartComponentsModifyEvent(body, false)); + partEnt.Comp.ParentSlot = null; + // Shitmed Change End + var ev = new BodyPartRemovedEvent(slotId, partEnt); RaiseLocalEvent(bodyEnt, ref ev); RemoveLeg(partEnt, bodyEnt); @@ -956,6 +1133,42 @@ public bool TryGetBodyPartOrgans( return false; } + private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet containerNames) + { + containerNames = partType switch + { + BodyPartType.Hand => new() { "gloves" }, + BodyPartType.Foot => new() { "shoes" }, + BodyPartType.Head => new() { "eyes", "ears", "head", "mask" }, + _ => new() + }; + return containerNames.Count > 0; + } + + public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) + { + if (!Resolve(bodyId, ref body, logMissing: false)) + return 0; + + int count = 0; + foreach (var part in GetBodyChildren(bodyId, body)) + { + if (part.Component.PartType == partType) + count++; + } + return count; + } + + public string GetSlotFromBodyPart(BodyPartComponent part) + { + if (part.Symmetry != BodyPartSymmetry.None) + return $"{part.Symmetry.ToString().ToLower()} {part.PartType.ToString().ToLower()}"; + else + return part.PartType.ToString().ToLower(); + } + + // Shitmed Change End + /// /// Gets the parent body part and all immediate child body parts for the partId. /// diff --git a/Content.Shared/Body/Systems/SharedBodySystem.cs b/Content.Shared/Body/Systems/SharedBodySystem.cs index 5d95a42c308..3a5a7940561 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Body.Part; // Shitmed Change using Content.Shared.Damage; using Content.Shared.Movement.Systems; using Content.Shared.Standing; @@ -43,6 +44,7 @@ public override void Initialize() InitializeBody(); InitializeParts(); InitializeBkm(); // backmen + InitializeOrgans(); // To try and mitigate the server load due to integrity checks, we set up a Job Queue. InitializePartAppearances(); } diff --git a/Content.Shared/Content.Shared.csproj b/Content.Shared/Content.Shared.csproj index e8e15d8d1be..ef3790da9b3 100644 --- a/Content.Shared/Content.Shared.csproj +++ b/Content.Shared/Content.Shared.csproj @@ -25,6 +25,10 @@ + + + + diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index a8a698d9750..94415603746 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -22,6 +22,8 @@ public sealed class DamageableSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly INetManager _netMan = default!; + [Dependency] private readonly SharedBodySystem _body = default!; // Shitmed Change + [Dependency] private readonly IRobustRandom _random = default!; // Shitmed Change [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; [Dependency] private readonly SharedBodySystem _body = default!; @@ -144,12 +146,21 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp return damage; } - var before = new BeforeDamageChangedEvent(damage, origin, targetPart, canSever ?? true, canEvade ?? false, partMultiplier ?? 1.00f); + var before = new BeforeDamageChangedEvent(damage, origin, targetPart); // Shitmed Change RaiseLocalEvent(uid.Value, ref before); - if (before.Cancelled || before.Evaded) + if (before.Cancelled) return null; + // Shitmed Change Start + var partDamage = new TryChangePartDamageEvent(damage, origin, targetPart, canSever ?? true, canEvade ?? false, partMultiplier ?? 1.00f); + RaiseLocalEvent(uid.Value, ref partDamage); + + if (partDamage.Evaded || partDamage.Cancelled) + return null; + + // Shitmed Change End + // Apply resistances if (!ignoreResistances) { @@ -220,6 +231,19 @@ public void SetAllDamage(EntityUid uid, DamageableComponent component, FixedPoin // Setting damage does not count as 'dealing' damage, even if it is set to a larger value, so we pass an // empty damage delta. DamageChanged(uid, component, new DamageSpecifier()); + + // Shitmed Change Start + if (HasComp(uid)) + { + foreach (var (part, _) in _body.GetBodyChildren(uid)) + { + if (!TryComp(part, out DamageableComponent? damageComp)) + continue; + + SetAllDamage(part, damageComp, newValue); + } + } + // Shitmed Change End } public void SetDamageModifierSetId(EntityUid uid, string damageModifierSetId, DamageableComponent? comp = null) @@ -263,11 +287,6 @@ private void OnRejuvenate(EntityUid uid, DamageableComponent component, Rejuvena TryComp(uid, out var thresholds); _mobThreshold.SetAllowRevives(uid, true, thresholds); // do this so that the state changes when we set the damage SetAllDamage(uid, component, 0); - // Shitmed Start - if (HasComp(uid)) - foreach (var part in _body.GetBodyChildren(uid)) - RaiseLocalEvent(part.Id, new RejuvenateEvent()); - // Shitmed End _mobThreshold.SetAllowRevives(uid, false, thresholds); } @@ -299,6 +318,16 @@ private void DamageableHandleState(EntityUid uid, DamageableComponent component, /// [ByRefEvent] public record struct BeforeDamageChangedEvent( + DamageSpecifier Damage, + EntityUid? Origin = null, + TargetBodyPart? TargetPart = null, // Shitmed Change + bool Cancelled = false); + + /// + /// Shitmed Change: Raised on parts before damage is done so we can cancel the damage if they evade. + /// + [ByRefEvent] + public record struct TryChangePartDamageEvent( DamageSpecifier Damage, EntityUid? Origin = null, TargetBodyPart? TargetPart = null, diff --git a/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs b/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs index 20e29ef4341..e5ce90eca2f 100644 --- a/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs +++ b/Content.Shared/Damage/Systems/SharedGodmodeSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Rejuvenate; using Content.Shared.Slippery; using Content.Shared.StatusEffect; +using Content.Shared.Body.Systems; // Shitmed Change namespace Content.Shared.Damage.Systems; @@ -9,6 +10,8 @@ public abstract class SharedGodmodeSystem : EntitySystem { [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedBodySystem _bodySystem = default!; // Shitmed Change + public override void Initialize() { base.Initialize(); @@ -50,6 +53,9 @@ public virtual void EnableGodmode(EntityUid uid, GodmodeComponent? godmode = nul // Rejuv to cover other stuff RaiseLocalEvent(uid, new RejuvenateEvent()); + + foreach (var (id, _) in _bodySystem.GetBodyChildren(uid)) // Shitmed Change + EnableGodmode(id); } public virtual void DisableGodmode(EntityUid uid, GodmodeComponent? godmode = null) @@ -63,6 +69,9 @@ public virtual void DisableGodmode(EntityUid uid, GodmodeComponent? godmode = nu } RemComp(uid); + + foreach (var (id, _) in _bodySystem.GetBodyChildren(uid)) // Shitmed Change + DisableGodmode(id); } /// diff --git a/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs b/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs index 24eed3adcf5..e6bd075cffb 100644 --- a/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs +++ b/Content.Shared/Eye/Blinding/Systems/BlindableSystem.cs @@ -87,6 +87,19 @@ public void SetMinDamage(Entity blindable, int amount) blindable.Comp.MinDamage = amount; UpdateEyeDamage(blindable, false); } + + // Shitmed Change Start + public void TransferBlindness(BlindableComponent newSight, BlindableComponent oldSight, EntityUid newEntity) + { + newSight.IsBlind = oldSight.IsBlind; + newSight.EyeDamage = oldSight.EyeDamage; + newSight.LightSetup = oldSight.LightSetup; + newSight.GraceFrame = oldSight.GraceFrame; + newSight.MinDamage = oldSight.MinDamage; + newSight.MaxDamage = oldSight.MaxDamage; + UpdateEyeDamage((newEntity, newSight), true); + } + // Shitmed Change End } /// diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index b211193e67c..a1eae91fef0 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -66,9 +66,13 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction TargetHead = "TargetHead"; public static readonly BoundKeyFunction TargetTorso = "TargetTorso"; public static readonly BoundKeyFunction TargetLeftArm = "TargetLeftArm"; + public static readonly BoundKeyFunction TargetLeftHand = "TargetLeftHand"; public static readonly BoundKeyFunction TargetRightArm = "TargetRightArm"; + public static readonly BoundKeyFunction TargetRightHand = "TargetRightHand"; public static readonly BoundKeyFunction TargetLeftLeg = "TargetLeftLeg"; + public static readonly BoundKeyFunction TargetLeftFoot = "TargetLeftFoot"; public static readonly BoundKeyFunction TargetRightLeg = "TargetRightLeg"; + public static readonly BoundKeyFunction TargetRightFoot = "TargetRightFoot"; public static readonly BoundKeyFunction ArcadeUp = "ArcadeUp"; public static readonly BoundKeyFunction ArcadeDown = "ArcadeDown"; diff --git a/Content.Shared/Overlays/ShowHealthBarsComponent.cs b/Content.Shared/Overlays/ShowHealthBarsComponent.cs index 3f27885db18..8d847b72d7a 100644 --- a/Content.Shared/Overlays/ShowHealthBarsComponent.cs +++ b/Content.Shared/Overlays/ShowHealthBarsComponent.cs @@ -8,15 +8,13 @@ namespace Content.Shared.Overlays; /// /// This component allows you to see health bars above damageable mobs. /// -[RegisterComponent, NetworkedComponent] -[AutoGenerateComponentState(true)] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ShowHealthBarsComponent : Component { /// /// Displays health bars of the damage containers. /// - [DataField] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public List> DamageContainers = new() { "Biological" diff --git a/Content.Shared/Overlays/ShowHealthIconsComponent.cs b/Content.Shared/Overlays/ShowHealthIconsComponent.cs index bc8b5419d2a..08f86e6ccf9 100644 --- a/Content.Shared/Overlays/ShowHealthIconsComponent.cs +++ b/Content.Shared/Overlays/ShowHealthIconsComponent.cs @@ -7,15 +7,14 @@ namespace Content.Shared.Overlays; /// /// This component allows you to see health status icons above damageable mobs. /// -[RegisterComponent, NetworkedComponent] -[AutoGenerateComponentState(true)] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + public sealed partial class ShowHealthIconsComponent : Component { /// /// Displays health status icons of the damage containers. /// - [DataField] - [AutoNetworkedField] + [DataField, AutoNetworkedField] public List> DamageContainers = new() { "Biological" diff --git a/Content.Shared/Prying/Components/PryingComponent.cs b/Content.Shared/Prying/Components/PryingComponent.cs index 01e01ebd351..e82c5942b8b 100644 --- a/Content.Shared/Prying/Components/PryingComponent.cs +++ b/Content.Shared/Prying/Components/PryingComponent.cs @@ -3,13 +3,13 @@ namespace Content.Shared.Prying.Components; -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] // Shitmed Change public sealed partial class PryingComponent : Component { /// /// Whether the entity can pry open powered doors /// - [DataField] + [DataField, AutoNetworkedField] // Shitmed Change public bool PryPowered; /// @@ -22,7 +22,7 @@ public sealed partial class PryingComponent : Component /// Modifier on the prying time. /// Lower values result in more time. /// - [DataField] + [DataField, AutoNetworkedField] // Shitmed Change public float SpeedModifier = 1.0f; /// diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 0b0970ec08f..451ab0d0ff4 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -71,3 +71,8 @@ research-technology-advanced-spray = Advanced Spray research-technology-bluespace-cargo-transport = Bluespace Cargo Transport research-technology-quantum-fiber-weaving = Quantum Fiber Weaving research-technology-bluespace-chemistry = Bluespace Chemistry + +## Shitmed Change +research-technology-advanced-treatment = Advanced Treatment +research-technology-high-end-surgery = High End Surgical Tools +research-technology-cybernetic-enhancements = Cybernetic Enhancements \ No newline at end of file diff --git a/Resources/Locale/en-US/surgery/surgery-popup.ftl b/Resources/Locale/en-US/surgery/surgery-popup.ftl index 8ded2fcaec9..dd49176148b 100644 --- a/Resources/Locale/en-US/surgery/surgery-popup.ftl +++ b/Resources/Locale/en-US/surgery/surgery-popup.ftl @@ -50,3 +50,4 @@ surgery-popup-step-SurgeryStepInsertHeart = {$user} is inserting a heart into {$ surgery-popup-step-SurgeryStepInsertStomach = {$user} is inserting a stomach into {$target}'s {$part}! surgery-popup-step-SurgeryStepSealOrganWound = {$user} is sealing the wounds on {$target}'s {$part}. +surgery-popup-step-SurgeryStepLobotomize = {$user} is drilling a hole into {$target}'s {$part}. \ No newline at end of file diff --git a/Resources/Prototypes/Corvax/Body/Prototypes/vulpkanin.yml b/Resources/Prototypes/Corvax/Body/Prototypes/vulpkanin.yml index df3f5d708d4..cb7a0bc562e 100644 --- a/Resources/Prototypes/Corvax/Body/Prototypes/vulpkanin.yml +++ b/Resources/Prototypes/Corvax/Body/Prototypes/vulpkanin.yml @@ -12,6 +12,12 @@ eyes: OrganHumanEyes torso: part: TorsoVulpkanin + connections: # Goobstation - fix some species having their hands the wrong way around + - right arm + - left arm + - right leg + - left leg + - head # Shitmed Change organs: heart: OrganAnimalHeart lungs: OrganHumanLungs @@ -19,31 +25,31 @@ liver: OrganAnimalLiver kidneys: OrganHumanKidneys connections: - - right_arm - - left_arm - - right_leg - - left_leg - right_arm: + - right arm + - left arm + - right leg + - left leg + right arm: part: RightArmVulpkanin connections: - - right_hand - left_arm: + - right hand + left arm: part: LeftArmVulpkanin connections: - - left_hand - right_hand: + - left hand + right hand: part: RightHandVulpkanin - left_hand: + left hand: part: LeftHandVulpkanin - right_leg: + right leg: part: RightLegVulpkanin connections: - - right_foot - left_leg: + - right foot + left leg: part: LeftLegVulpkanin connections: - - left_foot - right_foot: + - left foot + right foot: part: RightFootVulpkanin - left_foot: + left foot: part: LeftFootVulpkanin diff --git a/Resources/Prototypes/DeltaV/Body/Parts/vulpkanin.yml b/Resources/Prototypes/DeltaV/Body/Parts/vulpkanin.yml new file mode 100644 index 00000000000..e0413ce9b0e --- /dev/null +++ b/Resources/Prototypes/DeltaV/Body/Parts/vulpkanin.yml @@ -0,0 +1,270 @@ +# TODO: Add descriptions (many) +# TODO BODY: Part damage +- type: entity + id: PartVulpkanin + parent: BaseItem + name: "vulpkanin body part" + abstract: true + components: + - type: Damageable + damageContainer: OrganicPart # Shitmed Change + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + - type: StaticPrice #DynamicPrice + price: 100 + - type: Tag + tags: + - Trash + # Shitmed Change Start + - type: Gibbable + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/organ1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/organ2.ogg + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 110 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Slash + damage: 150 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 200 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + # Shitmed Change End + +- type: entity + id: TorsoVulpkanin + name: "vulpkanin torso" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "torso_m" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "torso_m" + # Shitmed Change Start + - type: BodyPart + partType: Torso + toolName: "a torso" + containerName: "torso_slot" + - type: ContainerContainer + containers: + torso_slot: !type:ContainerSlot {} + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 400 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Slash + damage: 400 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 400 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + # Shitmed Change End + +- type: entity + id: HeadVulpkanin + name: "vulpkanin head" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "head_m" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "head_m" + - type: BodyPart + partType: Head + vital: true + toolName: "a head" # Shitmed Change + - type: Input + context: "ghost" + - type: InputMover + - type: GhostOnMove + - type: Tag + tags: + - Head + +- type: entity + id: LeftArmVulpkanin + name: "left vulpkanin arm" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_arm" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + toolName: "a left arm" # Shitmed Change + +- type: entity + id: RightArmVulpkanin + name: "right vulpkanin arm" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_arm" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + toolName: "a right arm" # Shitmed Change + +- type: entity + id: LeftHandVulpkanin + name: "left vulpkanin hand" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_hand" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + toolName: "a left hand" # Shitmed Change + +- type: entity + id: RightHandVulpkanin + name: "right vulpkanin hand" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_hand" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + toolName: "a right hand" # Shitmed Change + +- type: entity + id: LeftLegVulpkanin + name: "left vulpkanin leg" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_leg" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + toolName: "a left leg" # Shitmed Change + - type: MovementBodyPart + +- type: entity + id: RightLegVulpkanin + name: "right vulpkanin leg" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_leg" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + toolName: "a right leg" # Shitmed Change + - type: MovementBodyPart + +- type: entity + id: LeftFootVulpkanin + name: "left vulpkanin foot" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_foot" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + toolName: "a left foot" # Shitmed Change + +- type: entity + id: RightFootVulpkanin + name: "right vulpkanin foot" + parent: PartVulpkanin + components: + - type: Sprite + netsync: false + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_foot" + - type: Icon + sprite: DeltaV/Mobs/Species/Vulpkanin/parts.rsi + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right + toolName: "a right foot" # Shitmed Change diff --git a/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml b/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml new file mode 100644 index 00000000000..06112e8cfb2 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml @@ -0,0 +1,51 @@ +- type: body + id: Harpy + name: "harpy" + root: torso + slots: + head: + part: HeadHarpy + connections: + - torso + organs: + brain: OrganHumanBrain + eyes: OrganHumanEyes + torso: + part: TorsoHarpy + connections: # Goobstation - fix some species having their hands the wrong way around + - right arm + - left arm + - right leg + - left leg + - head # Shitmed Change + organs: + heart: OrganHumanHeart + lungs: OrganHarpyLungs + stomach: OrganAnimalStomach + liver: OrganAnimalLiver + kidneys: OrganAnimalKidneys + right arm: + part: RightArmHarpy + connections: + - right hand + left arm: + part: LeftArmHarpy + connections: + - left hand + right hand: + part: RightHandHarpy + left hand: + part: LeftHandHarpy + right leg: + part: RightLegHarpy + connections: + - right foot + left leg: + part: LeftLegHarpy + connections: + - left foot + right foot: + part: RightFootHarpy + left foot: + part: LeftFootHarpy + diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index bfe12f6b504..8f8a116a4e3 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -72,6 +72,7 @@ components: - type: BorgSwitchableType selectedBorgType: medical + - type: SurgeryTarget - type: TTS # Corvax-TTS voice: TrainingRobot diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index 55117e63602..6e02f4be241 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -42,6 +42,13 @@ damage: types: Piercing: 3 +# - type: Tending # Shitmed TODO: Uncomment this when surgeries arent tied to interaction events, but verbs. +# speed: 0.55 +# - type: SurgeryTool # Shitmed +# startSound: +# path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg +# endSound: +# path: /Audio/_Shitmed/Medical/Surgery/hemostat1.ogg #TODO: I want the luxury pen to write a cool font like Merriweather in the future. diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 64ff84d34cf..f49654cf0b6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -1,3 +1,5 @@ +# Im not even gonna bother marking this file with Shitmed Change(s), I'm fucking with almost everything. + # Base - type: entity @@ -8,10 +10,10 @@ - type: Sprite - type: StaticPrice price: 20 -# - type: Tag -# tags: -# - SurgeryTool - - type: SurgeryTool # backmen: surgery + - type: Tag + tags: + - SurgeryTool + - type: SurgeryTool # Cautery @@ -22,10 +24,10 @@ description: A surgical tool used to cauterize open wounds. components: - type: Sprite - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi state: cautery - type: Item - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi storedRotation: 90 - type: MeleeWeapon damage: @@ -51,10 +53,10 @@ description: A surgical drill for making holes into hard material. components: - type: Sprite - sprite: Objects/Specific/Medical/Surgery/drill.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi state: drill - type: Item - sprite: Objects/Specific/Medical/Surgery/drill.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi shape: - 0,0,1,0 - 1,1,1,1 @@ -69,9 +71,8 @@ # start-backmen: surgery - type: SurgeryTool startSound: - path: /Audio/Medical/Surgery/saw.ogg - - type: SurgicalDrill - # end-backmen: surgery + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg + - type: Drill # Scalpel @@ -91,10 +92,10 @@ types: - Knife - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi state: scalpel - type: Item - sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi storedRotation: 90 - type: MeleeWeapon wideAnimationRotation: 90 @@ -122,8 +123,11 @@ description: A pointy piece of glass, abraded to an edge and wrapped in tape for a handle. # Could become a decent tool or weapon with right tool mods. components: - type: Sprite + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi state: shiv - type: Item + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + storedRotation: 90 heldPrefix: shiv - type: entity @@ -133,8 +137,11 @@ description: Made of more expensive materials, sharper and generally more reliable. components: - type: Sprite + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi state: advanced - type: Item + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + storedRotation: 90 heldPrefix: advanced - type: MeleeWeapon damage: @@ -148,11 +155,14 @@ description: A scalpel which uses a directed laser to slice instead of a blade, for more precise surgery while also cauterizing as it cuts. components: - type: Sprite + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi state: laser - type: Item + sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + storedRotation: 90 heldPrefix: laser -# Scissors +# Retractor - type: entity name: retractor @@ -161,10 +171,10 @@ description: A surgical tool used to hold open incisions. components: - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi state: retractor - type: Item - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi storedRotation: 90 # start-backmen: surgery - type: SurgeryTool @@ -175,6 +185,8 @@ - type: Retractor # end-backmen: surgery +# Hemostat + - type: entity name: hemostat id: Hemostat @@ -182,11 +194,11 @@ description: A surgical tool used to compress blood vessels to prevent bleeding. components: - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi # Shitmed Change state: hemostat - type: Item heldPrefix: hemostat - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi # Shitmed Change storedRotation: 90 # start-backmen: surgery - type: SurgeryTool @@ -219,7 +231,7 @@ description: A container for bone gel that often needs to be refilled from a specialized machine. components: - type: Sprite - sprite: Objects/Specific/Medical/Surgery/bone_gel.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi state: bone-gel - type: BoneGel @@ -292,9 +304,11 @@ description: For heavy duty cutting. components: - type: Sprite - state: electric + sprite: _Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi + state: circular-saw - type: Item - heldPrefix: electric + size: Normal + sprite: _Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi - type: MeleeWeapon damage: groups: @@ -319,8 +333,12 @@ description: You think you can cut anything with it. components: - type: Sprite + sprite: Objects/Specific/Medical/Surgery/saw.rsi state: advanced - type: Item + size: Normal + sprite: Objects/Specific/Medical/Surgery/saw.rsi + storedRotation: 90 heldPrefix: advanced - type: MeleeWeapon attackRate: 1.5 @@ -329,5 +347,138 @@ qualities: - Sawing speedModifier: 2.0 + - type: BoneSaw # Shitmed + speed: 2 + +# Shitmed Tools + +- type: entity + name: searing tool + id: EnergyCautery + parent: Cautery + description: A cautery with an energy tip, also serves as a drill in its powered state. + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi + state: e-cautery-on + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi + inhandVisuals: + left: + - state: inhand-left-on + right: + - state: inhand-right-on + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/cautery1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/cautery2.ogg + - type: MeleeWeapon + damage: + types: + Piercing: 10 + Heat: 1 + - type: Cautery + speed: 1.5 + - type: Drill + speed: 1.5 + +- type: entity + name: energy scalpel + id: EnergyScalpel + parent: Scalpel + description: A scalpel which uses an energy blade, also serves as a saw in its powered state. + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + state: e-scalpel-on + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + inhandVisuals: + left: + - state: inhand-left-on + right: + - state: inhand-right-on + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel2.ogg + - type: MeleeWeapon + damage: + types: + Slash: 10 + Heat: 1 + - type: Scalpel + speed: 1.5 - type: BoneSaw - # end-backmen: surgery + speed: 1.5 + +- type: entity + name: mechanical pinches + id: AdvancedRetractor + parent: Retractor + description: A retractor with mechanical pinches, also serves as a hemostat in its powered state. + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi + state: adv-retractor-on + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi + inhandVisuals: + left: + - state: inhand-left-on + right: + - state: inhand-right-on + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor2.ogg + - type: MeleeWeapon + damage: + types: + Slash: 6.5 + Heat: 1 + - type: Hemostat + speed: 1.5 + - type: Retractor + speed: 1.5 + - type: Tweezers + speed: 1.5 + - type: Tending + speed: 1.5 + +- type: entity + name: medical multitool + id: OmnimedTool + parent: BaseToolSurgery + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi + state: omnimed + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg + - type: Hemostat + speed: 2 + - type: Scalpel + speed: 2 + - type: Drill + speed: 2 + - type: BoneSetter + speed: 2 + - type: Retractor + speed: 2 + - type: Cautery + speed: 2 + - type: BoneGel + speed: 2 + - type: BoneSaw + speed: 2 + - type: Tweezers + speed: 2 + - type: Tending + speed: 2 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index fb8765db132..edfbd1e49c5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -708,3 +708,44 @@ # Corvax-HiddenDesc-End - type: BorgModuleIcon icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-martyr-module } + +# Shitmed Modules + +- type: entity + id: BorgModuleSurgery + parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ] + name: surgery cyborg module + components: + - type: Sprite + layers: + - state: medical + - state: icon-surgery + - type: ItemBorgModule + items: + - Scalpel + - Drill + - Hemostat + - Retractor + - Cautery + - SawElectric + - BoneGel + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: surgery-module } + +- type: entity + id: BorgModuleAdvancedSurgery + parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ] + name: advanced surgery cyborg module + components: + - type: Sprite + layers: + - state: medical + - state: icon-advanced-surgery + - type: ItemBorgModule + items: + - EnergyScalpel + - EnergyCautery + - AdvancedRetractor + - BoneGel + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-surgery-module } \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c82e3521b77..1669467c14a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -388,6 +388,11 @@ - ShadokinStandardTranslatorImplanter - ValyrianStandardTranslatorImplanter # end-backmen: languages + - WeaponPlasmaCutter # Goobstation + - WeaponPlasmaRifle # Goobstation + - EnergyScalpel # Shitmed Change + - EnergyCautery # Shitmed Change + - AdvancedRetractor # Shitmed Change - type: EmagLatheRecipes emagDynamicRecipes: - BoxBeanbag @@ -633,6 +638,7 @@ - BorgModuleHarvesting - BorgModuleDefibrillator - BorgModuleAdvancedTreatment + - BorgModuleSurgery # Shitmed Change - RipleyHarness - RipleyLArm - RipleyRArm @@ -652,6 +658,13 @@ - HamtrLLeg - HamtrRLeg - VimHarness + # Shitmed Change + - BorgModuleAdvancedSurgery + - JawsOfLifeLeftArm + - JawsOfLifeRightArm + - SpeedLeftLeg + - SpeedRightLeg + - BasicCyberneticEyes - type: MaterialStorage whitelist: tags: @@ -830,6 +843,8 @@ - ClothingHeadHelmetInsulated - ShellSoulbreaker - WeaponXrayCannon + - SecurityCyberneticEyes # Shitmed Change + - MedicalCyberneticEyes # Shitmed Change - type: MaterialStorage whitelist: tags: @@ -956,6 +971,12 @@ - SyringeBluespace - SyringeCryostasis - BluespacePillCanister # backmen + # Shitmed Change + - EnergyScalpel + - EnergyCautery + - AdvancedRetractor + - OmnimedTool + - MedicalCyberneticEyes - type: Machine board: MedicalTechFabCircuitboard - type: StealTarget diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index 08250290ec7..a7f444001f6 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -215,3 +215,55 @@ materials: Steel: 100 Plastic: 100 + +# Shitmed Recipes + +- type: latheRecipe + id: MedicalCyberneticEyes + result: MedicalCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: EnergyScalpel + result: EnergyScalpel + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Gold: 150 + +- type: latheRecipe + id: AdvancedRetractor + result: AdvancedRetractor + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Silver: 150 + +- type: latheRecipe + id: EnergyCautery + result: EnergyCautery + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Plasma: 150 + +- type: latheRecipe + id: OmnimedTool + result: OmnimedTool + completetime: 2 + materials: + Steel: 600 + Glass: 150 + Gold: 150 + Silver: 150 + Plasma: 150 diff --git a/Resources/Prototypes/Recipes/Lathes/robotics.yml b/Resources/Prototypes/Recipes/Lathes/robotics.yml index a4413e01ebe..12e6087f7d3 100644 --- a/Resources/Prototypes/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/Recipes/Lathes/robotics.yml @@ -195,3 +195,86 @@ parent: BaseBorgModuleRecipe id: BorgModuleHarvesting result: BorgModuleHarvesting + +# Shitmed Recipes + +- type: latheRecipe + id: BorgModuleSurgery + result: BorgModuleSurgery + category: Robotics + completetime: 3 + materials: + Steel: 250 + Glass: 250 + Plastic: 250 + +- type: latheRecipe + id: BorgModuleAdvancedSurgery + result: BorgModuleAdvancedSurgery + category: Robotics + completetime: 3 + materials: + Steel: 500 + Glass: 500 + Plastic: 250 + Gold: 50 + +- type: latheRecipe + id: JawsOfLifeLeftArm + result: JawsOfLifeLeftArm + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: JawsOfLifeRightArm + result: JawsOfLifeRightArm + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: SpeedLeftLeg + result: SpeedLeftLeg + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: SpeedRightLeg + result: SpeedRightLeg + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 + +- type: latheRecipe + id: BasicCyberneticEyes + result: BasicCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index bc6f9218401..43ba8f8be51 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -689,3 +689,17 @@ Plastic: 1000 Plasma: 500 Glass: 500 + +# Shitmed Recipes + +- type: latheRecipe + id: SecurityCyberneticEyes + result: SecurityCyberneticEyes + category: Robotics + completetime: 5 + materials: + Steel: 1000 + Glass: 500 + Plastic: 500 + Gold: 300 + Silver: 300 diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 30d999e3ce1..63026e17b4b 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -130,18 +130,42 @@ - CryostasisBeaker - SyringeCryostasis +# Shitmed Change Start - type: technology - id: MechanizedTreatment - name: research-technology-mechanized-treatment + id: AdvancedTreatment + name: research-technology-advanced-treatment icon: - sprite: Mobs/Silicon/chassis.rsi - state: medical + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + state: e-scalpel-on discipline: CivilianServices tier: 2 cost: 5000 recipeUnlocks: - BorgModuleAdvancedTreatment - BorgModuleDefibrillator + - EnergyScalpel + - EnergyCautery + - AdvancedRetractor + - BorgModuleAdvancedSurgery + +- type: technology + id: CyberneticEnhancements + name: research-technology-cybernetic-enhancements + icon: + sprite: _Shitmed/Mobs/Species/IPC/organs.rsi + state: eyes + discipline: CivilianServices + tier: 2 + cost: 15000 + recipeUnlocks: + - JawsOfLifeLeftArm + - JawsOfLifeRightArm + - SpeedLeftLeg + - SpeedRightLeg + - BasicCyberneticEyes + - SecurityCyberneticEyes + - MedicalCyberneticEyes +# Shitmed Change End - type: technology id: AdvancedCleaning diff --git a/Resources/Prototypes/_Backmen/Body/Organs/harpy.yml b/Resources/Prototypes/_Backmen/Body/Organs/harpy.yml index adc626bc114..d573ce0dfba 100644 --- a/Resources/Prototypes/_Backmen/Body/Organs/harpy.yml +++ b/Resources/Prototypes/_Backmen/Body/Organs/harpy.yml @@ -9,6 +9,8 @@ - state: lung-l - state: lung-r - type: Lung + - type: Organ + slotId: lungs - type: Metabolizer updateInterval: 2.0 removeEmpty: true diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml new file mode 100644 index 00000000000..6e85a42b87c --- /dev/null +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/cybernetic.yml @@ -0,0 +1,169 @@ +- type: entity + id: LeftArmCybernetic + parent: LeftArmHuman + abstract: true + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopLArm + - type: GenerateChildPart + id: LeftHandCybernetic + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_arm-combined" + +- type: entity + id: RightArmCybernetic + parent: RightArmHuman + abstract: true + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopRArm + - type: GenerateChildPart + id: RightHandCybernetic + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_arm-combined" + +- type: entity + id: LeftLegCybernetic + parent: LeftLegHuman + abstract: true + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopLLeg + - type: GenerateChildPart + id: LeftFootCybernetic + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_leg-combined" + +- type: entity + id: RightLegCybernetic + parent: RightLegHuman + abstract: true + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopRLeg + - type: GenerateChildPart + id: RightFootCybernetic + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_leg-combined" + +- type: entity + id: LeftHandCybernetic + parent: LeftHandHuman + name: cybernetic left hand + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopLHand + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_hand" + +- type: entity + id: RightHandCybernetic + parent: RightHandHuman + name: cybernetic right hand + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopRHand + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_hand" + +- type: entity + id: LeftFootCybernetic + parent: LeftFootHuman + name: cybernetic left foot + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopLFoot + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_foot" + +- type: entity + id: RightFootCybernetic + parent: RightFootHuman + name: cybernetic right foot + components: + - type: Damageable + damageContainer: Silicon + - type: BodyPart + baseLayerId: MobCyberneticBishopRFoot + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_foot" + +- type: entity + parent: LeftArmCybernetic + id: JawsOfLifeLeftArm + name: J.W.L left arm + description: A cybernetic left arm with the ability to pry doors open. + components: + - type: BodyPart + onAdd: + - type: Prying + speedModifier: 1.5 + pryPowered: true + +- type: entity + parent: RightArmCybernetic + id: JawsOfLifeRightArm + name: J.W.L right arm + description: A cybernetic right arm with the ability to pry doors open. + components: + - type: BodyPart + onAdd: + - type: Prying + speedModifier: 1.5 + pryPowered: true + +- type: entity + parent: LeftLegCybernetic + id: SpeedLeftLeg + name: S.P.E.E.D left leg + description: A cybernetic left leg that allows its wearer to run faster. + components: + - type: MovementBodyPart + walkSpeed: 3.125 + sprintSpeed: 5.625 + - type: BodyPart + onAdd: + - type: NoSlip + +- type: entity + parent: RightLegCybernetic + id: SpeedRightLeg + name: S.P.E.E.D right leg + description: A cybernetic left leg that allows its wearer to run faster. + components: + - type: MovementBodyPart + walkSpeed: 3.125 + sprintSpeed: 5.625 + - type: BodyPart + onAdd: + - type: NoSlip \ No newline at end of file diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/felinid.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/felinid.yml index fe2435187b0..b3e1040c3d2 100644 --- a/Resources/Prototypes/_Backmen/Body/Prototypes/felinid.yml +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/felinid.yml @@ -12,38 +12,39 @@ eyes: OrganHumanEyes torso: part: TorsoHuman + connections: # Goobstation - fix some species having their hands the wrong way around + - right arm + - left arm + - right leg + - left leg + - head # Shitmed Change organs: heart: OrganAnimalHeart lungs: OrganHumanLungs stomach: OrganFelinidStomach liver: OrganAnimalLiver kidneys: OrganHumanKidneys - connections: - - right_arm - - left_arm - - right_leg - - left_leg - right_arm: + right arm: part: RightArmHuman connections: - - right_hand - left_arm: + - right hand + left arm: part: LeftArmHuman connections: - - left_hand - right_hand: + - left hand + right hand: part: RightHandHuman - left_hand: + left hand: part: LeftHandHuman - right_leg: + right leg: part: RightLegHuman connections: - - right_foot - left_leg: + - right foot + left leg: part: LeftLegHuman connections: - - left_foot - right_foot: + - left foot + right foot: part: RightFootHuman - left_foot: + left foot: part: LeftFootHuman diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml new file mode 100644 index 00000000000..d01c105fd61 --- /dev/null +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/generic.yml @@ -0,0 +1,79 @@ +- type: entity + parent: LeftArmHuman + id: BioSynthLeftArm + name: bio-synthetic left arm + description: This left arm can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: RightArmHuman + id: BioSynthRightArm + name: bio-synthetic right arm + description: This right arm can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: LeftHandHuman + id: BioSynthLeftHand + name: bio-synthetic left hand + description: This left hand can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: RightHandHuman + id: BioSynthRightHand + name: bio-synthetic right hand + description: This right hand can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: LeftLegHuman + id: BioSynthLeftLeg + name: bio-synthetic left leg + description: This left leg can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: RightLegHuman + id: BioSynthRightLeg + name: bio-synthetic right leg + description: This right leg can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: LeftFootHuman + id: BioSynthLeftFoot + name: bio-synthetic left foot + description: This left foot can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: RightFootHuman + id: BioSynthRightFoot + name: bio-synthetic right foot + description: This right foot can be transplanted into any living organism and it will adapt to its recipient. + +# JOKE ITEMS + +- type: entity + parent: LeftArmHuman + id: PizzaLeftArm + name: pizza left arm + description: For when you want to turn someone into a Space John's. + components: + - type: BodyPart + partType: Arm + symmetry: Left + toolName: "a left arm" + baseLayerId: MobPizzaLArm + - type: Sprite + sprite: _Shitmed/Mobs/Species/Misc/Pizza/parts.rsi + state: "l_arm" + +- type: entity + parent: RightArmHuman + id: PizzaRightArm + name: pizza right arm + description: For when you want to turn someone into a Space John's. + components: + - type: BodyPart + partType: Arm + symmetry: Right + toolName: "a right arm" + baseLayerId: MobPizzaRArm + - type: Sprite + sprite: _Shitmed/Mobs/Species/Misc/Pizza/parts.rsi + state: "r_arm" diff --git a/Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml b/Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml index 2c48f1a09e7..b9efc875106 100644 --- a/Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml +++ b/Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml @@ -399,7 +399,6 @@ inverse: true reattaching: true - - type: entity parent: SurgeryBase id: SurgeryRemoveHeart @@ -590,6 +589,41 @@ inverse: true reattaching: true +- type: entity + parent: SurgeryBase + id: SurgeryLobotomize + name: Lobotomize + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenIncision + steps: + - SurgeryStepLobotomize + - SurgeryStepCloseIncision + - type: SurgeryComponentCondition + component: + - type: OhioAccent + inverse: true + - type: SurgeryPartCondition + part: Head + +- type: entity + parent: SurgeryBase + id: SurgeryMendBrainTissue + name: Mend brain tissue + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenIncision + steps: + - SurgeryStepMendBrainTissue + - SurgeryStepCloseIncision + - type: SurgeryComponentCondition + component: + - type: OhioAccent + - type: SurgeryPartCondition + part: Head + # Fluff/Joke Surgeries #- type: entity diff --git a/Resources/Prototypes/_Backmen/Entities/Surgery/surgery_steps.yml b/Resources/Prototypes/_Backmen/Entities/Surgery/surgery_steps.yml index b157e6425d5..26166bf371a 100644 --- a/Resources/Prototypes/_Backmen/Entities/Surgery/surgery_steps.yml +++ b/Resources/Prototypes/_Backmen/Entities/Surgery/surgery_steps.yml @@ -15,8 +15,9 @@ - type: Scalpel add: - type: IncisionOpen + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi state: scalpel - type: SurgeryDamageChangeEffect damage: @@ -36,8 +37,9 @@ - type: Hemostat add: - type: BleedersClamped + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi state: hemostat - type: SurgeryDamageChangeEffect damage: @@ -56,8 +58,9 @@ - type: Retractor add: - type: SkinRetracted + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi state: retractor - type: entity @@ -71,9 +74,10 @@ - type: BoneSaw add: - type: RibcageSawed + duration: 4 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/saw.rsi - state: saw + sprite: _Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi + state: circular-saw - type: SurgeryStepEmoteEffect - type: entity @@ -87,8 +91,9 @@ - type: Retractor add: - type: RibcageOpen + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi state: retractor #- type: entity @@ -137,8 +142,9 @@ - type: Retractor remove: - type: RibcageOpen + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi state: retractor - type: entity @@ -152,6 +158,7 @@ - type: BoneGel remove: - type: RibcageSawed + duration: 2 - type: Sprite sprite: Objects/Specific/Medical/Surgery/bone_gel.rsi state: bone-gel @@ -173,8 +180,9 @@ - type: IncisionOpen - type: BodyPartReattached - type: InternalBleedersClamped + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi state: cautery - type: SurgeryDamageChangeEffect damage: @@ -194,6 +202,7 @@ - type: SurgeryStep tool: - type: BodyPart + duration: 6 - type: Sprite sprite: Objects/Specific/Medical/Surgery/manipulation.rsi state: insertion @@ -213,9 +222,10 @@ - type: BleedersClamped - type: IncisionOpen - type: InternalBleedersClamped + duration: 2 - type: SurgeryAffixPartStep - type: Sprite - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi state: cautery - type: SurgeryStepEmoteEffect - type: SurgeryDamageChangeEffect @@ -237,9 +247,10 @@ - type: BoneSaw add: - type: BodyPartSawed + duration: 4 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/saw.rsi - state: saw + sprite: _Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi + state: circular-saw - type: SurgeryStepEmoteEffect - type: entity @@ -253,8 +264,9 @@ - type: Hemostat add: - type: InternalBleedersClamped + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi state: hemostat - type: SurgeryDamageChangeEffect damage: @@ -277,9 +289,10 @@ - type: BleedersClamped - type: InternalBleedersClamped - type: IncisionOpen + duration: 8 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/saw.rsi - state: saw + sprite: _Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi + state: circular-saw - type: SurgeryRemovePartStep - type: SurgeryStepEmoteEffect @@ -296,8 +309,9 @@ - type: Scalpel add: - type: IncisionOpen + duration: 3 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scalpel.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi state: scalpel - type: SurgeryStepEmoteEffect @@ -309,9 +323,10 @@ components: - type: SurgeryStep tool: - - type: Hemostat + - type: Tending + duration: 1 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi state: hemostat - type: SurgeryTendWoundsEffect damage: @@ -327,9 +342,10 @@ components: - type: SurgeryStep tool: - - type: Hemostat + - type: Tending + duration: 1 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi state: hemostat - type: SurgeryTendWoundsEffect mainGroup: Burn @@ -349,8 +365,9 @@ - type: Cautery remove: - type: IncisionOpen + duration: 2 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi state: cautery - type: SurgeryDamageChangeEffect damage: @@ -368,6 +385,7 @@ categories: [ HideSpawnMenu ] components: - type: SurgeryStep + duration: 4 - type: Sprite sprite: Objects/Specific/Medical/Surgery/manipulation.rsi state: insertion @@ -382,6 +400,7 @@ categories: [ HideSpawnMenu ] components: - type: SurgeryStep + duration: 4 - type: Sprite sprite: Objects/Specific/Medical/Surgery/manipulation.rsi state: insertion @@ -399,9 +418,10 @@ components: - type: SurgeryStep tool: - - type: Hemostat + - type: Tweezers + duration: 8 - type: Sprite - sprite: Objects/Specific/Medical/Surgery/scissors.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi state: hemostat - type: SurgeryRemoveOrganStep - type: SurgeryStepEmoteEffect @@ -415,6 +435,7 @@ - type: SurgeryStep tool: - type: Organ + duration: 6 - type: Sprite sprite: Objects/Specific/Medical/Surgery/manipulation.rsi state: insertion @@ -452,10 +473,6 @@ id: SurgeryStepInsertEyes name: Add eyes categories: [ HideSpawnMenu ] - components: - - type: SurgerySpecialDamageChangeEffect - damageType: Eye - isConsumable: true - type: entity parent: SurgeryStepInsertOrgan @@ -483,9 +500,10 @@ - type: SurgeryStep tool: - type: Cautery + duration: 2 - type: SurgeryAffixOrganStep - type: Sprite - sprite: Objects/Specific/Medical/Surgery/cautery.rsi + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi state: cautery - type: SurgeryStepEmoteEffect - type: SurgeryDamageChangeEffect @@ -494,6 +512,48 @@ Heat: -5 sleepModifier: 2 +- type: entity + parent: SurgeryStepBase + id: SurgeryStepLobotomize + name: Lobotomize patient + categories: [ HideSpawnMenu ] + components: + - type: SurgeryStep + tool: + - type: Drill + bodyAdd: + - type: OhioAccent + - type: RatvarianLanguage + - type: SlurredAccent + duration: 5 + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi + state: drill + - type: SurgeryStepEmoteEffect + - type: SurgeryDamageChangeEffect + damage: + types: + Piercing: 10 + +- type: entity + parent: SurgeryStepBase + id: SurgeryStepMendBrainTissue + name: Mend brain tissue + categories: [ HideSpawnMenu ] + components: + - type: SurgeryStep + tool: + - type: Hemostat + duration: 5 + bodyRemove: + - type: OhioAccent + - type: RatvarianLanguage + - type: SlurredAccent + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi + state: drill + - type: SurgeryStepEmoteEffect + # The lengths I go to just for a joke... I HATE HARDCODING AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # Maybe I should modify species prototypes to include tails and ears properly... diff --git a/Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml b/Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml index 540d374c1f8..128ed3c6c1c 100644 --- a/Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml +++ b/Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml @@ -3,15 +3,15 @@ id: OrganSpaceAnimalLungs name: space animal lungs components: - - type: StatusEffectOrgan - refresh: - BreathingImmunity: RespiratorImmunity + - type: Organ + onAdd: + - type: BreathingImmunity - type: entity parent: OrganAnimalHeart id: OrganSpaceAnimalHeart name: space animal heart components: - - type: StatusEffectOrgan - refresh: - PressureImmunity: PressureImmunity + - type: Organ + onAdd: + - type: PressureImmunity diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/cybernetic.yml b/Resources/Prototypes/_Shitmed/Body/Organs/cybernetic.yml new file mode 100644 index 00000000000..514920257c1 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/cybernetic.yml @@ -0,0 +1,51 @@ +- type: entity + parent: OrganHumanEyes + abstract: true + id: BaseCyberneticEyes + components: + - type: Cybernetics + - type: Sprite + sprite: _Shitmed/Mobs/Species/IPC/organs.rsi + state: "eyes" + +- type: entity + parent: BaseCyberneticEyes + id: BasicCyberneticEyes + name: cybernetic eyes + description: A pair of cybernetic eyes that enhance your vision, and protect you from eye damage. + components: + - type: Organ + onAdd: + - type: FlashImmunity + - type: EyeProtection + +- type: entity + parent: BaseCyberneticEyes + id: SecurityCyberneticEyes + name: cybernetic security eyes + description: A pair of cybernetic eyes that enhance your vision, featuring an integrated SecHUD. + components: + - type: Organ + onAdd: + - type: FlashImmunity + - type: EyeProtection + - type: ShowJobIcons + - type: ShowMindShieldIcons + - type: ShowCriminalRecordIcons + +- type: entity + parent: BaseCyberneticEyes + id: MedicalCyberneticEyes + name: cybernetic diagnostic eyes + description: A pair of cybernetic eyes that enhance your vision, featuring an integrated MedHUD. + components: + - type: Organ + onAdd: + - type: FlashImmunity + - type: EyeProtection + - type: ShowHealthBars + damageContainers: + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/generic.yml b/Resources/Prototypes/_Shitmed/Body/Organs/generic.yml new file mode 100644 index 00000000000..68dc80b3ab3 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/generic.yml @@ -0,0 +1,23 @@ +- type: entity + parent: OrganHumanHeart + id: BioSynthHeart + name: bio-synthetic heart + description: This heart can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: OrganHumanLiver + id: BioSynthLiver + name: bio-synthetic liver + description: This liver can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: OrganHumanLungs + id: BioSynthLungs + name: bio-synthetic lungs + description: These lungs can be transplanted into any living organism and it will adapt to its recipient. + +- type: entity + parent: OrganHumanEyes + id: BioSynthEyes + name: bio-synthetic eyes + description: These eyes can be transplanted into any living organism and it will adapt to its recipient. \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Species/cybernetics.yml b/Resources/Prototypes/_Shitmed/Species/cybernetics.yml new file mode 100644 index 00000000000..4b945e40895 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Species/cybernetics.yml @@ -0,0 +1,47 @@ +- type: humanoidBaseSprite + id: MobCyberneticBishopLArm + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_arm-combined" + +- type: humanoidBaseSprite + id: MobCyberneticBishopRArm + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_arm-combined" + +- type: humanoidBaseSprite + id: MobCyberneticBishopLLeg + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_leg-combined" + +- type: humanoidBaseSprite + id: MobCyberneticBishopRLeg + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_leg-combined" + +- type: humanoidBaseSprite + id: MobCyberneticBishopLHand + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_hand" + +- type: humanoidBaseSprite + id: MobCyberneticBishopRHand + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_hand" + +- type: humanoidBaseSprite + id: MobCyberneticBishopLFoot + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "l_foot" + +- type: humanoidBaseSprite + id: MobCyberneticBishopRFoot + baseSprite: + sprite: _Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi + state: "r_foot" \ No newline at end of file diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-surgery-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-surgery-module.png new file mode 100644 index 0000000000000000000000000000000000000000..df4b715569b0841f37f1362d89e47718ebaa4cc1 GIT binary patch literal 509 zcmVQBw!-qe#^ql&cOfgH?y-d@ZS-iE753F(gtF&n5asi99%WhN>rSRBn&DugWd?O zq!^=|L{$PM!h^IF+p4HmCy;uiodgB~1A&3RVPGgSj?e^BzOUU zlBb6lhCx9+GfYF3P0WrCQc0UWT`<~jvL8>fd$``5f%L@@V~fkUS{I3(P5i{Idd&jT zm-xO%{^}9^If0wYLMVjeILM5$AU=Muo+=B^}jz&el7y|Kpd>^!{_Q=~7g zqF4N!jkULmWv#43uniTiW>Qq00000NkvXXu0mjf&qm!x literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json index 2ebb6eddcf5..0170e11812f 100644 --- a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json +++ b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json @@ -61,6 +61,12 @@ { "name":"treatment-module" }, + { + "name":"surgery-module" + }, + { + "name":"adv-surgery-module" + }, { "name":"adv-diagnosis-module" }, diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/surgery-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/surgery-module.png new file mode 100644 index 0000000000000000000000000000000000000000..4b333eba52a1a9436835e2df5a05841588a47ff3 GIT binary patch literal 475 zcmV<10VMv3P)?gjz+k1u1B4T63@e zqy!BiYQe-s=Rg+2|7Xt0$0U;hCSC07K-07#Qc$&8Wsv}ZITewl$R`v+K{y#OHHRd{ zJ%SLC0KQ5yNK|j_&@dW6?;uSH0)l`bAPB?~D3=%MT0llsVc9kmS;orJ2Bv4rFii); zq38GUy6w176bUl*IJOH(VlXWWgT4-%?yX&)q1Lz<&Hq~h+dI2hUEe~nki|<^hb+lx z+%{nvCJe(sux;9wfn2@>#$@U(fbVbIoKe5)@{k5R$BHEzOW^2uA8I}aZEcfG2lP}5 z@`WPqn|FA4x`OAqqX`rheZ5Da-XRfzY$i*_j$gAV2v@iF{JFNqSp$a$dpMo1V7a0} zVhr{ACEAZS_)Gox7PMYFXq}(L*2k9k4hRB*fFST40sg<9*1;suzaPznJ^<`Osq>c9 RpDh3Y002ovPDHLkV1l-*#X|r9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/bonesetter.png b/Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/bonesetter.png index b876de0d28e6baea4285b05530130e38b4bb8bff..08b79677c864c53191b9ecc89b1fcf9641820d88 100644 GIT binary patch delta 272 zcmV+r0q_3B1fK$s7=Hu<0001iRAa)4g ziS zU?2wwF)E<&8BIh{1;iYS7%&7xPy`YS8QL6>1SC=u8Jdv=7=K$`1e1{k7$gG4Qc(mL zTTC-h1Q^7eBT!w!lwyh|Al4j$>NdrUFcDM{u{LK^V;M72jL?-hp_?MP0L>!rQ>aQ9 zQ+6t$nc|p?>N>`BF$XjyMd+p|+(EU7fq{3TBbvxP3jtICIdL=rkw!EvjA#nL008}4 W8z(3rkdgoZ00{s|MNUMnLSTZFmS7P8 delta 568 zcmV-80>}NI0>uQ77=H)`0001UdV2H#000SaNLh0L01m_e01m_fl`9S#0005^NklY2rexd)R<7sf<(~RSWad` zgoF@AIY2syVzG_<_@uARqC-+MguzI5mV;VRJwMA0RXz)cBmb z&bj^+0Kr#QmuPmzN6C{j3K40lAuIt(rB^CE7R5QTx#kFjA;4C6T`Rwo$ur@ht8`Yp zpwz{&a)<_iNw-_`Py56@>PL#tC06&f(=R<=O^iPQ? z$Q7Pkl+NlCp??aZ0YF&(6X@u0mtZ?GAL#GXE^qG}Ahu(1YDb0+$Pfs^djI&;0s+6? zlnhC+c*`!Bj-eR@`eI>mPC#H%xL;b88 zvLU-Av2__S1Tu&HSWu$&2)rDooxLcHjtq*1xnCOdN z0VELIEoPh3u_vPXp20Q+2qs8YTL3&ARvF4;%=<$b01Me!ZA7_ot7o+Uc3iNMvL0yl zSwRVaTrp>cuzO7_bD$o=u9S|Ud}nk7K!<2T-T&9jX?+8-P)~H#OfyaZ0000 zPZ!6KiaBp*ZS-Px6lnX;tk~)=;Gr3_m}S0#m|XH{l!Yus{_{QhlX%iOzG za`TR*30+|=`90ln-QhPc&U62pr<`%-tMn?SCBd0d#}f(`nWe|=>DVf;P)$L<&Z_qK z-@9vHIiz&nO>WwRSYkiMD)8i^=##cs$}`9tl)auZ-<3-gDQ|WIsL$My&tEz4+yNa vY1+jQdB)(d(*=v9snxv49zksX!t{*uLH~gTe~DWM4fCWgh% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9942e76d245ad340f50e5c2d91df9b3a912eb0 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4^ zr;B4q#hkaZ_IfcpinN|@ns7*6Ac!lo<$-X9ppuxKtCZkTr|p8?TRlWrqz{^J5L)vm zvxbQ?YR6KE4~ExbQl%41(@baIw0)kvO|s4M{vAoSZ|53hI2kO37>ZOFo_H{vn8+|e znNh)=$)S&>VNML=*=J5xQnv0Z45lSk=QmU&o0_}lYCrguHbc$7+`_i2US_)Xf>XQm zA4adWymQZe|FeQs4Qqd>Y<+(-VYyJywXj&J92F8;!M`9-&1E-|xYQsaKN zE7Ff?ou2-pxctwX*R0v&H2uM5x98pl+N&Qom$sa_{%&`Fxmd!(=}8(w>=_`S9@oTb`ZU=Sq8+^>>Ew8XVaFOK4|QAOpAM ztQnj64M2cnzV(?8VQHqWd7M>@|HL%MAD$YuvIl_R!@E$q!ykV(h7_`# zyH0xwbDkR`&{@n3v6EGA*53V_4)gmdKI;Vst0H|4Ah5!Hn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-surgery.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-surgery.png new file mode 100644 index 0000000000000000000000000000000000000000..8147a74b761d6cfc353859aab5531fd960172694 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}dpunnLn2z= zURua?C_v=c$Nh^=rfuwSZ22uxeo*6D>+EZ59!anH#iq3>%am)A=-Sevo%)yzj}TBYUz8wS&uGd zbSRw3_Mm9zkw=e|PMtm-7#Nt?Jl*wQaB%R7_3OW%xG&PMcCD_UoLt|WIWji(_Q}P? z!B3t)ujXa?>FVN=P*O7Gujafxdu)RLU1CsES3mmkqv5%8=N>$M+*PetuzH-M{Pq|Nfo(I4dJ#!nf&61~xW2mo8ua_~S>%jvW?XzJE_HC=gh_ zeEEqJCm#HqH&5=gg2i0FiIXNBk}k85;o#$Y#`EIs+f<3on>QcI+wT3-oAJiYn~oV7 z8jl`7{%Jo``qu5+k1MseZrapz-fG%1h8G0ns?;Omo1w0FO3^~?zGS6 z;N)~nPgiGSV=E{xPyhLB|F7Npi+1mxZSGgt)7v}qoB3C<1tI6po_+f9@87*oSN_+Z zsK508)2B<_U(aAlNMY>VzJ2@NvhQGBTegUtK7Cs5=j?w1Mt;9rTUr0KWL$nX|M=?{ z{)rlTybN95%ngq&F)Y|&!hnlw#JXVFGPi)tI|8C^dt#-3tdm&6IAP=6yyr}sp{aIu zb^!qa4#9__1vJ{OT?@0Zu{m)4y7w4fTX*c}QP%$+AuG?GI`v74 zrK@qziRq_4IdRCy%6^nNswUkm((vX@&a$^9R{y`Tm6VhyXlQWEoH;WiFV8J8abZS& z{&tq8!w&^~eSIUMqm$1sS)%ez$S~>U>(`GZQnlPJ^)r|%m6Vo#+_7{itE#GMM0|Yv z{Q2_bT{~j*B2=SxuU*@_7Z@uye?NWN`dmY;%Qq~Dp{%@IP*jxlmC!)P;Ns%q zX?6TN_@kuvvaVXS>IbhwI%DeH{x9qk_N{jNKY8A-U?GM<@W#p literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_alt1.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_alt1.rsi/meta.json new file mode 100644 index 00000000000..9f87381cd87 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_alt1.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/head.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/head.png new file mode 100644 index 0000000000000000000000000000000000000000..a89de820f47b7fe179103b15e1ac71035fec8be0 GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S$} zr;B4q#hkaZ_Ioiq3LLXPsKu4Z${l}z-9uPcWYP5uxIdq4^6XE=oWo~Ne*U>&ySeE}OY;9Gp6}``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIZ00!$B+ufx3?7YS{($Aee?{D?mt$*z{CEK zCp4zbdP0>9=R5_E4NI7M8Q80CudJGOJST42zxuj;6B3z|>;-`)GKihpRPv~CeN6FX zlbwq+eB{GEn}j=E*tS->?O+b)ti_eHwB`16Z``#`wM%K^6_Z|_(@J)GI@x2dznndJ z^>T;jrtY7c7V)oJwQAQEhPmO_?oV-#^Emz~;g~2LoBA?5c8$zQxtcWD1c$Pjx=m z9awF1+k3}Z&Kb`mKiN#*oVU5bqEFRR=;Wq1SMKDBCEWDn==<&C+a2j>^immQ+z<0Q Y29E!;8{FnRx&z{Sy85}Sb4q9e0AszG+yDRo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-primary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-primary.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6b133523baaee7428621568d8281fd76caa594 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_s6| zPZ!6KinzD8Hu|+V2ps#kv%7QZ->W8JYHE9$`WyNei0V5(GLG<8XkP`zVi+}@^;BHj$bnBjTUvgj3+3K~gt9l;a z5OMr$a(z#vd}HOj{?y1>iZ7m-`WM%JsZNxgwQS{^GV9AXbWShHjlO)w`NlQ(tUwW? zxpVCNmM{A{YjI`z)-4}r|K0MvU3~k#)qo%2hk1Hs5<-SQ&f$qyf+IJ-;5ye*W2TR8~UtPq|*AX}rT_6Cu}& zN$0LIusAAwzy12`<>z-7&3y2h&c7bNSOdGZB+D74ul|1cjbd>_d85Ak%Jzu- Tua+NyQN!Tr>gTe~DWM4fe1XGS literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-secondary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..de40773897f6704157d83b8086179c8cbe353e66 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_nkx zPZ!6KinzD44hl9Ih_Eh>b;!QrD0;=wScFNmz^#Z~{q+ff{ilCU{Ik9Oc=wVg%8Z;I z4opH58dy{mpv(jN1uJ4gD{jv(lnK87UH-ly&*5vOv01mp=5EySE?k>lD8zQXv^8Jm z`2Ny!Hw`*;GOw8McJ4oW?(-a74ZHPR%%3h?HWB5o6*=?%@~1C{<{LCjTXl%R>Pzg; z({(KGwOrndGN_8_u4lYx=Jh*+Y-U(--GAlM)AvOtNIFXveBI8%vL+JUCo5(i;AUet Vn8)VO1`I6*22WQ%mvv4FO#qHZe9r&? literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-tertiary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_arm-tertiary.png new file mode 100644 index 0000000000000000000000000000000000000000..7b83ecf161b3b2c235fb638276713a2982e673c1 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anMpkTMB zi(^Pd+}m3lc@HS?xH^_4E%%u{m&a?W+SGc-CB^3_mu`_eETG`fz`)4F!hv99a9=T9 zEnCTYY44M~`D=HXA6g@Kr0#zS52`9meF`5=|8D%U-SwT|CGVGl2>F6F2bfL@i3hAZ SbF>HOECx?kKbLh*2~7Y(8$VV6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..534085a97c31ddaa896b6e69d1efdcdeac7bfa07 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1H8_ zi(^Q|oVT|&@-{mNuwLAl63DSu;37Ath?5JWiIaASgNIAf;nrz$e|+=!S1%-_vPNQV z$G1)kc85943g;LFo-=e5GaRvGcqGG6$k%`=yotFa_PdpSTcXGL(pY2P%gqVb=aj}? z{%g^9y=Q`@qI$yp@?ZO&TlAI8jhiUAu0MZP+qT@5tF+E`3kfC6OZSSNw)8~xX67jt z@5;}8@E5>p1%}PPtq;UjGwx4wf6J9Jx8YJX<9(O+Tq&$S?r`7O)_ZB4?V9cuxQT literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..771cd025a865b938f010cfe3539816c6bbad58e4 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TS6 zr;B4q#hkad6xTI7h_pVu9N=%Trjd04$LRwbxUL;y+aMvNqwTPffrXRX;ep|v51*ng zZdr8ZjPRV#KkrSm-|l$kj-wx=0}hnKf97+I|0I?`5k(HBBZW2A*4YwmwXxwnk306g z54`^MW#oK|n+>_Q=h@$KxnBCA_J8?2Z9k?npL=vp8~9GXI43o7!ZOWS%Nn(>G0S8} zi5$JRP50C$lc<~f&%dAd+%oci^JHFw+Jf-S_bx^=JP{!V9r$+Oab3ge<}?2HzwhV| z2)%l}eZ}+}4aaL+jMuPp92WS0_K987SB7={o8xERbKh|!{(#CaRi+sM3=@K3=r^O~ XwOIMn{ZWO$FlF#`^>bP0l+XkKAAy`p literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-combined.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-combined.png new file mode 100644 index 0000000000000000000000000000000000000000..915b2af4d37aa4cd5b55f573c7c67326925572d6 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxdomsjv*C{Z*OhvV+@pFeXx0UZ&*oIzT;w1 z{sjRqUv60>(C@JRl6Hs7(uE%xw4!8LSzC8onqTxWn|-(b-JQFSYC3(M|1o}-agM(O z4o%EV z?KDC7K>X9P-HL3_Y~=V`CjGK+*mYM=s+TS4#@n(LVXH0V`Z*L&a6ZsBkl<;OJ^lW} zv+J)-U66p$@i4LfQ&P=>O^+=o+ua+Z*Y32i;bh9A*B|57Pv5ofU+2Su7ZDRTtJ=*! zzfW7H|M&(2-ZSh0D?@7h&r3fqHIZ`N`BOZvd(WoIRNMTU;s(pP_n zhy5n~V9@b-s^NX%`De*eeTB}MXP)uQIU03l*6oMC|H_r>KhOpXochCMVDc=^;Zlj! zSNVNR(@(R8JrjN~r+b(9gd;v_#cb!4l+@;*jNIkA&+6A6VB9fyy85}Sb4q9e07Eb1 A^Z)<= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-primary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-primary.png new file mode 100644 index 0000000000000000000000000000000000000000..05f568654e6829574e3315245bdc121ee767f18c GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_mZM zPZ!6KinzD4Y`d5o1zJz18j2bx=P&GB`9k%~)e|8+N0c+(iSmdXJmKPKbHGK|->j2u z)|YqE+YU~>`tn_7`t+xwCQ4V%zh0lcNJ~(Pa{>cy)L`4Fz!9?kdhoZ2&je5OTRjte zIWPaE-b=aJXWi!dEiZBBms`TVj~)%8yHfJOj>8k1THpy1#q<{r9IcOeQ@onz_eq;e?-o z^X{z;TYa)_|MaY_uUZ?Y^Bq|IB=z~{$aU9OZ!fyW@Zr#Qb}zQ(#x1vVTOa%0Y<4;R zI8ds$ZM)GmhPqWf{s}g6)!C=hw;z7G{q|aO1|JtD6$b){pEE)0clgI08Jp$$9(~fd z^0sVggpSwFm}x(2=JgzJKm0ITeR2E~^~s%wI%I+$S@cbge3)ZaTqUl4kRf3G^~sjD zdVTj_mb{vB+Vg9=z&6*C+&@V+?>Ff`xWXuKH^)r)?F{aJZHeNH?8crF3{R47@H6~9 z{BXeq&L8#Fak`K8$(cBCo7{b`HzT8P9$&nk_{n1Z2NzQpFh<3km1?-h;CS)&UWUEK z544V$_+7vFo8!U)#vM7!BbYBZUCgU|$9jkPP#4d>`iz3i+TaIYlpE{)9x%7Rxx!n> SU|9xCJ`A3&elF{r5}E)b{|Q|H literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-secondary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/l_leg-secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..a96f9eb3854571d6e9017bc38ff670b71213b2b3 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_s6n zo-U3d6>)E88RoSZ2)MRu#4sM@&B(~KU}rtP;DO8?#?G#623B2O^975RFrDlS@7xll z8TFn=@x)J$kk{{L{(n|2?cBo7;=n)v{o`bGf3-O`TB@z_lTCPOY;d5+Bis5{D>J3M zCbdiny7Jw2X{Og_n{J&womb+M?tjmWy{^2?=vMOm^2McU-S>ROY@;WqN={AvnLT;` z`u(}mJJ)?M^1LVk7Wc1*Zao+J&$#BCzLM1w zj+i6dt9cm`5;uFautb>nOcPaUXg#YWD3ox~ATn$MgP2*ji${a&;gm>6ridFlLW+!H zypvN|Ingyt{E_4mA5s?Uo+uF{;<|i+``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIW+1k!xm2i?Yhd;vd#PNc@vppO@QyWwhCHj&M z?0>@3l(1&iDHmpw<@O;qNr}16=_I4fdCR?w%Ukc=>EKQ)=X_+2a4w zE?4~7z3=_f*H$~b?(%NfqP^khtCAn;_rEV)m%XzqmiL2=f6R5!zopr0FLCVg8%>k literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-primary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-primary.png new file mode 100644 index 0000000000000000000000000000000000000000..c8087d3fc19c55b867a9f3b6c28020a6279977f5 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_s7% zPZ!6KinzD8HhLWn5IOeovXaHl^mmU`IBHqt7uq?^{ba;C|KLp@wntAUXihRMc`-*d z<>jN2vw~cUX3SfbIZOLL_uQ&?C(G-7mlwN6a40k|FhPk6Y8#@~&f#}bKPlO^P`m38 zH^bSLmDRsDZi$?hs^>ZB->h%b-jyo@#ny6&Ptz%s@s6A}?b7D!E`chJ0yBzzZfk{Z z{OK`k*|WA}jVpU*-To!^XKv+B9rNt#&WjTxzdV=~J?qc!u-DQHW}h~nxN6n6uaZ~4 z&k8S&4*MPd;M3K;clPaGzWVEtOF25GK+$&Je~*pM&fSqy7t?S2_TQ+utErRc?Bn~X!%_R1I z@8yT{eZ{(4bIhc@^Yyd%m@5A4n0?28z53>xXSxqZI?1st;H}-GpU`M<{f(aQPImj_ m&z?00b-;rP&t;ucLK6UM!Ovp= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-secondary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_arm-secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf2346bd8402df7b3ab688de95085780abd5250 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_nl9 zPZ!6KinzBoH}W<+2)JC_yqm!>^@3ooL#o1x28rJ~ik1%L&B_w>L1s59t(6p6ALfnjS_SvNM_)EssB`+s9np)=D(|%=a^&7tE3bbxE&jTxdC|%5ukLxyU8G_6 z@ZPMAtkZd_wp{tX@AM{>?|w`@k0n;E+7C_w( z+=^!g^S;=X*Zu$QTn9hKBM)BHm#eF6QfOdc;y@5PIQKB@Hq+NHzT0XJ3^N8#S3j3^ HP6anMpkS}3 zi(^Pd+}m3lc@HS?xH^_4E%%u{cMgZ9C@b&8AD0Xde%@)awvvTIK*6DbfsqNpP;1;( zrMmIW>$jn$>Ae4Svr6{=_3Xavg{lZc+i}h}yAR5n-%`@}ao#~{YaEh+|AZ?TTm;1f UB*It>fevHvboFyt=akR{0JRA`w*UYD literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fbe8635ea509fb178f489345fd83302fa00872 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1F+h zi(^Q|oVT|Oxta|a+#ZH&$Q@a2Q7JBN+cBB_gHqg4VGFCB5sxD@mUM18^uJ!wxUGU+O!vKl=;dwhGw=-dq!^)#_VUztdKE-!RAcXH59La1Xu@b!z){xc3V^+x2SS aA#M|$=*+@9%C^8zVDNPHb6Mw<&;$VKczSFA literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..db11be34056caa261ef3119fdf034b840280accd GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TR; zr;B4q#hkad7VE z{r7)!G|OxDHa&Q!u$%!GTE~C9@XqwqgC@QbZH&3M?|pdQwdlrX9cP*29ESxmXIVXe z!xM1b^i9g`Z3orO;(uSfR%&Z=O;VvtNyW2i-RlRFE9XsoZux7UJy38#rc|_DwE#<; zPJQy{HLJ3=ch{f0|MG*{k8_^?&d#)at;tZtMGPwV#{KQzUY*n4-*|4^xG(p9v1o$$ z``hyx!~NKI6rFGA{hPa-Ic8`21M&5*?0<3p*pdD~)Rxu3j}eOc><%z*F$miebYuTK QU~n>cy85}Sb4q9e0O5I)y8r+H literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-combined.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-combined.png new file mode 100644 index 0000000000000000000000000000000000000000..a035dd862652e2af236f707e6e8aad17567c2b84 GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxka8Xjv*C{Z*MK^JLDk2@?hs_R_}t0drUmj zJ}_{I$jMAo;OJ+NYjt<<2#_$aVc_azW^C$umui;TWU;w^N7>OD&)}Oc=jWcaZ|H!7 zKe+}HJ3jw>BcS*!$&Tfh+k)ed8}H_cUlo|qzEh`8AY=F4M^$?l-Oby5Htln3li~5K ztxj8`T3s)2?ugN|kl}mrwW@>j^OV!65iGn5Zof_18<%V&w>WIIBHNil8@a&s*AoT* z@K@N)f0p@wx{7CwUiShPv$@&T-th-Zm{wfP`dJ-V?NlaOQ5fzi)8P7{ zYR(Q7-^*9_+x%vF!~5jz-qianM1_mZk zPZ!6KinzD4_GU2!3bY;<$T{lg@!WdJg=1mYrf=|Ce0STX)*lR-TQ+{;Wa-vvnyR_w zBjcJJrvz)>jD@Y{^H?1_T8$&?yNnfX-bT&*Z@Y8nA`hGM#fcKjw*2&*-`;mHL1Aai zxsWJR#_pp|YLh!dR)+>}&Q^8wSDS1&HJp(n{$5c0d-;_L94hnA&z4e~%OZREWe8Vm z)5Va&s233hSg@To%{wtS@yn%hYrE_$M8Jn56cI(wU5)oYCUYeYB_KNeS5&=f%t;9-HJ*tx3dCM4TGnvpUXO@ GgeCyqUi{|( literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-secondary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/r_leg-secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..7a406c931877e43e809f8b57ded0ca46a6918e63 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anMpx{SO z7srr_xVN`9@*XzeaS2q7_E?>%vVP&sC7dDJ1v5)n8b34sTzOXJZ^g?XE_oIK2L?tQ z!~=hpxQX9olIPs3&RpC2OiA)$`t_)b6W2e#fAQts@{%LJeqK<`UR$QGoZm3lp=jX; ze}$Rp=6nrzJ&$l-WH8(jE5p0Ny0b!2N`Y;A_hQB}bwPa><|7Zv3QZ2YQ+d>y(I9b0 zuaE7pJvq?ljRCr$PnoVe&MHt7QH?b*1F^A9)Fev21Ui4VZCH0^XOu-bP zXdp)wmjnZW-U=a*TOgPch#z;?B1j@6OQ0v?A<|<#1UCuPMpzPZh-jc_eBIyBXFFK} z`#!VX6?F!dcjuj%=l_5H^ZCw4zO};LRu(7dG!2$F}%jM+ohgB(FEL!k0=LH|UGV-|rMB&U@0yXCaU^FLvA7+MJW;1>Tcx#W$0k zoSaOT9=(|?zVg5gMzn;fA766fSi!S8@8<)*wYAlC!TfXYCS$+dN$G;8r>AD;v75OC z_#|+i+TY#Xb*+GSh%@z+!D)5A9y_KMfcgUi1J3DdD}N-HUKCVoM>wk@G z1>l!TrHa2pLqoE;xmk&KcXyldgIa(hG7bF`0mtX&=G=75lXz$_3qYUm>+5rPItml_ zXN6EQS<0Q9oVZ$7Jf6gP9}>(0=oCc1zxDg=RQrGR+#EtCOBryebplIZ0`X9MvjBk3 z&dydA9Lxm7l}r{V>dEu8@iQ-klr#g~`1rV6juL2s6B83sC=}}P%T#t|X66h&tH5S; z!3xolkr6lb>C@yvotgRY(vLF#f1PGy@u)ylASw_Qhzdjnq5@HYs6bR8Di9Tj3Pc5> z0{;&MOy>ef^6RHpTHgEi(y1@c`ue)r&eM>$dN=B;w+~yN|LERd7TaOOKUk5GUp{w7 zW9-dyM$fKnKA#V>XJK5<%Ql!|vPsH*AjjnL#dV`45%Z>~l%0R|=BNx89ynkrzD`FMFwk`hH`S%OAQ@x_Xlf%)6pR6U#*dPT1EHHfzaH3+UAWJZ} z08WFn*;g(jY~4xo^OBU_SxcnB!@<2W#$ov=o`X?6i=Y+2sr2l}7T;Z7TMKw>o+hZx z&quuS&9#P~5?5nr*Hcbb1xx}k@NpWfHLv#r0Bz;h5nhO&#jgnO*aWJ z|MJgg22CH3Gy2dI+N@;B2ZnzipxWtbjT>>cJ(b17`XQ+I4$F+*jUf*f>AP5FnV1f+? zLZ}F)E>IqUF8~gx0#h407h69>thGgc#n8nM@01VR;ApXH{&+d>YY@O@e-WOy><;-F rw1^e+Mg^h*QGuvHR3Iww-%{XjDa=i7S5~3G00000NkvXXu0mjfnxA9f literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/torso-secondary.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_main.rsi/torso-secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..4e61c144a95ad7eedfc9f805a421bce36392ee5e GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_s8- zo-U3d6>)E8IrcRh@VH*S_{M_qjiu=G2O@KtZNDe-t0$a&;q96wsbNv*aktJav~%PB z`ExfIocpN6D5L;GKm3@?J#SUc^FFiq_P1L5>8U^U+Y4pmG{h8M0d-+V{G|NA2 z9>R8-r@L`>*+^b#3>SkZB=Kp_tTj}@G z&eKn}DKP}>cBlyHI~70o&mv`$buYIci2EJ$N$kMO?rZ$Et-%KnWt2Rf& zG0izr3g;WHh-yRabRCcE{4qOT@fHZw!Cd{}wUn$Nk$w9}fQan-6%55>MpW_)T?VA`M( zFLLy<4deIk$DSE(a$8fn>B19cM;qCDv)JDDo=sNypC$6%c%@M3fk3C|`>$nem1D2> zDa!RO{OXkc>C%$(xAbqRJpQn+l&9JB!F?o;OXk;vd$@? F2>{%v%)9^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3cb6e9e36d48f65477bec2129e69b4c19b861b GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_nk| zPZ!6KinzD84)Qe_@H9M3+9NQp;d}e>2gi07JYl--yZT_yQSZot!+*Se=Db|+`eskE@XZFv)`#T0TmH>U zUh;+g&RS0X!wRLb-j_|HCSElvy>@ENJSVTx8+Q~8eSWbkzLb6Mw<&;$UMYm{LC literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/head.png new file mode 100644 index 0000000000000000000000000000000000000000..a175f4dfcec5179babaf11fdfc901aa32596ec42 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5he4R}c>anM1_mY# zPZ!6KinzD4^j9-EiX1(De6`!`t4lm*U-eJeberYic_j|B-6#DMt|;ALIjCkfS>no; z{PTxmul=7l(e>fn#?=_{0wtdkLN<@7-yeUq0==+HSUG zl3|4XR|$n(F?!86bHtu}{`td6{_*w$8#wJ|@&E5Ws?=mZ*Kcw9or}je_y5xueo(i+ ze8;P=yKd*0ZPfg=_@YMD^t9&xck{$OW%$}RTOX_aQh%etfB9wK$<>e7{7?U^`%$Ik z^z(GPN$*$cCv1({8MLxQoZ;T`yVqWCmF_?8xHhc&yUZ8Ecb7F7)C^?!Vi#ZR_LFLzgxDuG;!^O zPrqM17r3U}9HaLHK5Ws^5b7}d{By^hF@52`10PO0_pQ+}NZ9a3h_%hZjKFw? zy5y@_Ur*V;`n*HpVfnLrmz{Io*f}sdTv&6!x^vSuyN#9kVc+e(Z#mCV<25~&=d3s$ fZ#J%1`M{p*A$^ClQ8f~nkQh8&{an^LB{Ts5mMjqA literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/meta.json new file mode 100644 index 00000000000..ea5456fea10 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/bishop/bishop_monitor.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "copyright": "Sprites originally from Paradise Station (https://github.com/ParadiseSS13/Paradise). Monochromatic version made by: DayOS (https://github.com/Day-OS)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-1.png new file mode 100644 index 0000000000000000000000000000000000000000..51a3c40058f8894b6c959dbecc8626d926e679a1 GIT binary patch literal 6948 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-3.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/head-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e59e1c1d38299df73afea368dde37d6c84aaf76e GIT binary patch literal 6916 zcmeHMc{G&m`?qB&OV&zc8kM9mi^0s;!dN3~vX8b;bDEJUDuw~wHRq+hMxJBzOp|sY^hg7aQV3ztuRdQ zfz1BkUGstosZA26Lo%tLdU`!N}W-?QBS{}|8U>Ej?NsJ2&cBsmnJ{Yv8c)S7GKXXBiyeeOE_U-d_{s>BPy11QjQD9xPTV2f>C>&~gOU95 zv3eqIMK}DhUw25-U*8?Y5V=Lr5{O%8&3SIcBW7i9is)+8r_)>Z9xk~5_Bh^XZ<1y9 zc6s0M*mR;i*z$%^;hmgR_nVgP)Y9@caCV9V<%OI3ZNKh`=l%Wq}9Hs*TYW z20Md9G?kjwo8s-rX+fdl+rHjuj6HhHA!x;P|76LWqJ!@M)o*Vn5@VWLn(Nw?vno)^ z)15gubf{S?H#8((AYQfe-hof4Pj+4**6>&5f_K%{fk0P7aK1+~En#o?i}R~#ojW6+ zhxL34+s>OascW_}!k08pzke26V_&TEl8&A2}DIpgRZhC1;@*B8Zt! zyL8`PwqNM*zL#+B;HzU@7R0D5wRjZ1eP15#i5`R2^&-Gh=4D$Kvo*_mx~|+}1fPd; zBBwPTujl9gn0$jm*)BS6oA(BemqljFis*j`xjynn!p9@ZyX9F`MgPHe+CZw}kWHf| zDZi{TD1KMA%a!U6(G_<+XOjE&RoV~dH`;>l@N*X^dc=XNjvr7Sj%-{K(XUc-kJpGj zjCrAC@RKI zq(!C=7K1Lk@1#@*F3c_1=gMl$C4IElOS+WnQ$*~MkeH~lz1?&$ujVtQd%8_Rmfb!@ z*vUeAi0U9JH+cwII=AYU0pYt7U4g)0A0g}e4?Z0=F$%mXR;HjN^rEGQpzN*be@g(; zobGZ=yin9!LNQ=eEj<>~Gwdf`w!J)^%?SIXr4Hh3yQP+BiVwwW#s~5Cw6%aMT-C`= z$)}*tB9&|JEWFZe@x4NU24Yk9r2mC`mOgP@FE@S9GJ9M3bN)VKUSC~E#5f->zbvcv z(Z>;~{HO+oOG1Ob`j?(yzPAR314+rd46ENCHb44etIzRQU~Wp~=kR{fzEKv*dqlN* zi>OWYOkYJ3dsUUqM4Yzt)qeh1vxXD*==7R>x#v8NZ;6Ony4)|8aPL{CegxOyR^R6- z4QWLIZ+5?&0kPM36ngF6(Zsi{HSz0a*_4pcW^VC5ql|!>?V2`c_;#bofkoq}fTypx z+r|6tt(~pYl*%$MR3sei7iI6Kz2{HTO(e;T%f2diiPRQH#2rq>tA&n7Ov0wsM0J=? z3%L3bH8!fYMG7Z#nw$!s*;hI?Ix>eRm|!H;jW{=kKT-RlAnH!E2orM<@8{HJM9_Jc zHB+@OU(!3wgqqq~5mC##Rj;F@Cx#Z#&5O8A7s?fzRCBYF>m~LJIh!%6mW`vi@91P@^~ko5 zl-PaCYv)y9MdpZAb7wbX9oT$aY-I7>!S1PiN0?3d!(ov?!G*i=5-44q)VxJ@nKQZ8 zb?Tfjuh977m&Hp{4~4#_yl=&>Wrid7R)lr9HPU>nB`mLB=?w!p^u-?7LCV&Jq}luK zpTHcwM@-fyG;8L=rB`4huT1hKKHy1qb`Ydl4CmChC-M~0eP}#vplhdq+%$1|vs6Wg|n+myL zwrX$`<#^o&_vmJ}=DUbo&iqg2TyuZ%)yo($+!VX!CrHyn`T~kp5yX0R_(-_HAW>mJ z1t)`)U^`^if(WIbd*8d$6!*pdo!hwX)f_?6p2mL7#K_TiPNrv)(n?Iv>Y zPj2ecGEw2NBEbeVA`aUXypl&7lwCQCg>w{23tRcB=|#{&<3H%JUa?Y@L%BImwWpaM ztaYI7V3mQUau1DKOGd0>-AxF@6u%F}M{;slrg;v0J@)O5 z9upUYbb{MylS3~A4(0i02%cZ!BgtN_b~VVEVQ*IJpvH)MrRK|WEutR7gmRa;g_19O z3fan-7=SN5AO_!BOne^K^p%()HvSi)3CFCo5)Wm$qg!P=55qI%0%~#3EjX?eEymCz z^-FkiZVCo?*xosHZmwjiV?^)VzPI%%3J;D2=xotF^g8bYWWhXsMms?4M%@Q#0WrqK z7Z*@yjY|vMZr9pM4T1|CgkEKgs%VWM&xP=bb#@^8&+A!bhbwo5;Pd7m-nDp3G-T|T zE{;x&-L=u=mg8hD+X_ zb==X_PUi_9X^c^y^xb(T^3nbnbCs^acE}lIiI-_dY^e`j!!H^8KzW8s*i-q=bZs$y z-zK*xQDfVu!{-;>^3R^2j@Mr_8)cnM`(``@9Syc6&-)w3JMS5YGBhJr>&;vlZ01^h zg|TL&R-L8n$*4407Fx-ACn-mfplj6y-kcR8JX}yCI+um~x~sQ!fck~}+$i(dL^v|Rao4R2m*s(43&m|{cB zw^3|#X^e!kx4@WEjL>ZmMpe5e)p#U!_h)NALiN`7KicLRFKqCFhwI_$(k$;+kIFA^69lX@ZqAJKVNCiu zE^U%`3qWXesKm#C|5i7}CSbtb+?=PRCE z-o=mS#)YSxR4+{q8((^G{(PaIaK_u8|@WT|2aRk$NhUgeQ?Ho*Llkhm~Lug{T2Orfdo`_0lD|QVdVhNmeJ1SQAdV6VODkmgZ)476t&I zl9)IUi|XOYz_2vH8@L$Yd0h+zgEmx{?iyfQQ*)3mjZOj~6_JWCh#rgLivVkG2C37D zE*ML!{tpP?O#|%8WO`wsP(MFEML#7)8l4P#BT z7+4a6K&N;yDKt;eIwlTJ^I>X$!N54^@A#-*rlvpPJsCe(0Qi8ia9&WjA`D8ULVvYj zF!g)^kRJj4M+=5EaPWazk{C1}I)S9;OY&sO{t7`P{IvJ-p?hqkLnJ^+9waKD$^g8= ze{*SIWNQA?Vx0mqh3d6o1(5xlCX?dw4_Uv(wm!0v&aZ(0=096X!`FtwRCeiWC3`hg3!&V9F{G5*`MJAkoS&2uc->fDo0C1T@+O=7Lgo`31s^ zP64VC=kaS)>rg}h$_0j0f}`*xz&#oVK@wEp5HyOY3V|b)RAEX=N<^aS_h^U&j6RJ{ z#R1bvq2kCSsFx>s!^b+|7;SSS4KP9x_K(Ee1IKg$41hI2@g&mx82=1eQ>Y{>CT^Wi zxGDmHMj=#?N+=~19EJWz$%aH{0JXS|3Wq5weGg)NVlY5D0JXUFN(BHmEP!kzQNlLUam5J(IRg@LJ9!%-NxDh8nhfdP_V^l3zj zi~s+ny}o=v>fa~bkir1``)`Q8uPG~%_xHE&uO5_*#RLLvEDH>d@I3_v&X+{oh!ep2 zK16WEd6G#$|M*d`f6FQVp%~yuRTLgU0E&SGlmL zV-u`hzu6NM1a|^L9;T709?yGTZVBOSu)gmj%Q*sB0S5gd1C~GCG_!gnPPfZi7x8ChB!`abxAjU0Uj9i zWlwM*XYA?ehQ-Ox%(<~y-YCBcZYim0j6j?HVGFU`aY;7w#J#;`o7hleZ9dYsO50Ok z&sB=3X+^@X#fz-X`?Z8aP2~4JP0n50Y!$ecI=2$AdpRx|{N-_diHOKpI@9UAdaHNk z(DgO0NO)|HJlpeSc4w*jt6z;=g@cA#Uy=nfF8p%6$Bqj$)RnSD=jC0aMjyE|*4!Rt z-{M{+6LQ(^+^sY(H_npoYo!_GSucy%@`_}47PS=Ls(V>3_j*d&=|()!u53BQ_Pp4j zfai8@q-n9j;*_qXU1Brm{Is4$m3^AWl|fV^=H=Z)KT%Pte&S*1yPoReIqApP!q||X dL3}Gbu_{w1^K~Sw6X2fBNbd-?K*#y){{RmKKOg`A literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/meta.json new file mode 100644 index 00000000000..5e35e7226fd --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_alt1.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise). Edited by Timemaster99", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + }, + { + "name": "head-3", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..54ecbe2832103864ec199ae58cdd5506734c9210 GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op+}xBjv*QM-rm^Qd&ohc_2K;vzM4=A zrz0UuCo^5&bQr}jF>>ZQu&+DvB&B~s#@k4h=<-LkFZ|n!U&l-EUUm#1baTRx|Cqt^stPXSExJffXpmup$N{sG|9=rQ> z?z5gRclA-voG%+G?y=zcxruh0qYRGM&2!+7F)sef#Cc#^c3JL3=0Bezl4i?PW|$jq z-v5?$VWIom4_6IqfWB2Nag8WRNi0dVN-jzTQVd20MkcxjX1a#PA%><_CPr4qCfWuD zRt5&T&cRhE8glbfGSez?YlxA1eGI5U18ze}W^QV6Nn&mRLXSy^p{13vk(D9T685l} QnLs@Zp00i_>zopr0DEVu6aWAK literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_arm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a529d9ebb60d80e91cb18c0ed73aaa3086c603 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAP;iT< zi(^Pd+}oRuTrCDXtQQ_l-E;ZQ7VG>guE)5VcC7Z3)YezH;p+UU?&-G-^;;peROa89>-v9iUUC7j+S?YFrG4H>#&8X@)mYx^4=eSJ$TglU12KWD` zZ@240=!F}C#87Y4p7>|AK(z8ty^lXuySPWB^MBZ*OcAY&H;Zx%mE!?gb{l zkQH6Z2SZo17e7i=Xf!r*{uIAv@6Nz7?nx@1lT_}$Dg2^P!PweaUiHEwk?Gmvk24c{ z7YG?H6BeAhV50Av{|CYss|iotw&dT&Mv!_>@!OUU&YLht&$T_cOS0l$O$PtPyTWT` zHyU$4scPcic+*`qMQrw0pkq`^Tq8nXaL6h@q*KiIJ7D ziMD}(m4Sh-b8r=khTQy=%(P0}8e-&L9|LO8fZI@#nVVW%l9*e7&|?x}XlZ3^WMv4o UggtC#CQuK9r>mdKI;Vst07Qy^6951J literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6be2024018bd9bac40ed11789decda14a2c67b6f GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op=M7P$B>MBZ*OemZ8i{bz34t&bQ4pi z#FfJrTQv6^_7zsi=xJ2yD(R2juYdY(eW!}&Bo$A4Gnv?i@JX7*(+=-mJyElGQhD1u zpX3Nuu9PL_j$8pReYeyiPajJf~v>~E8A+aBB| zx#LsAzIhLrqt^z@2LGG%0_Yso64!{5l*E!$tK_0oAjM#0U}U0eV5Vzm9Aao{WnyGy zY@%&oU}a#S>l|E#q9HdwB{QuOw}u$G*T;YwG~hOrWag$8mn7yEAoQ4o7+P8x8(A4b VEnyFvnF-Xx;OXk;vd$@?2>|UKe>4C9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-1.png new file mode 100644 index 0000000000000000000000000000000000000000..87466284b3b0e5d79be803608eff7b55ea7f64bd GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op)yYw$B>MBZ*LsrZBP(!xp=W?1FN%T z&}7?7ha(y}SbTc^&sE>eJtu;bf#HGmp$9R=zjaRQEzi+5@7-|CeQ}Vhmgc!#jn3aL z-)wr5d{6m`$U1LEps5W1QZK}B+fr3#<2pS0pyXF5jM7H$OUuhhf1RriHxX z&L2LqfE=Y-;u=wsl30>zm0Xkxq!^40j7)S5%ybQnLkvx=OpL6IO|%URtPBivor9}T zH00)|WTsW()(|82`WR4y2Hb{{%-q!ClEmBsgdUR+LrW`TBP&CwCG24{Gl6;-JYD@< J);T3K0RTI?cYFW< literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b871a17933379e4aa2af10587051df8f69f64522 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op>j_b$B>MBZ*N@WZBXE8dHBj=M^mB9 zjFYlAAKqbzYLa^V-!|UsviUh428IXLlb$_0bUxg3?@gnXTAL2N>X!?XS($WPmwm$$ zoznBORZcJDZVCIq^KB{6Tn2{!MlaV}SS`D*&GM@;@NL|~M%FUx>2J^KTlX?DY>EAK zL0jL0+2j~dp=yb1L`h0wNvc(HQ7VvPFfuSQ(KRsBH8c(}G_^7@vNAT&HZZUk0qV`&?3Gy&$!I?Y*q|QWwcv8k3Xw#^VH4t2dB;Qi2ha^rDS^hP_Pmh)R%lu zKVUff{>}3>cWl?3^l@usRK9ss^5BjMXC(F{S3SSO`)A*wT<;61S(`Q|J~#&hEO|a*?TL5nHM<*6exG*WF5~^Yghjds zy?-!esQVpFUF%l?3^3Ia*NBpo#FA92AvZrIGp!Q0h8Vfm$AB6%;5L+G=B5^xB<2<%^q7PgT3Q(!Ss6ktVGo;` Q3Dm>j>FVdQ&MBb@00)}KG5`Po literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_leg-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/l_leg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..90b10eb4be5ca5fe2ca3551817781542555569e8 GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS@v42+_lE{-7?_uk$xEIQ=C!+K%AWLicM zpLq1!fafZH&JPzpQL$q(J-*-pOWrrJWyi1jJ2p*bstjM4_-ucaP*ks`ih~OfJP~zy z7cqTfvd)SsDiV*UrO6g`=`b!vyU`?m8L4~|SLF>%;t zW1G%&(XuhZr15Id0k-!y6a+)%AE~p~EI3$bSoAS|gKKlkx*{f7A*meg%^*8mT>ib- ze|=TNeu;Y@_sM_f&z6`S_{77gox4VNg7_1MzIm%lgr@SAhHwqt&XLHXepW3}tG zPt@8w(^ZU*sFDdCZ&VYd2Oi?Yn)z zC%kF;2Ub1*in&iuSkDKBnQDn^L`h0wNvc(HQ7VvPFfuSQ(KRsBH8c(}G_^7@vNAT& zHZZUBQ;SOya|;l9OhODTt&EMV455~= Tht13c>S6G7^>bP0l+XkKhFZZt literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/meta.json new file mode 100644 index 00000000000..9f4ca1ee51f --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/meta.json @@ -0,0 +1,83 @@ +{ + "version": 1, + "copyright": "Sprites originally from Paradise Station (https://github.com/ParadiseSS13/Paradise). Monochromatic version made by: DayOS (https://github.com/Day-OS)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "l_foot-1", + "directions": 4 + }, + { + "name": "l_foot-2", + "directions": 4 + }, + { + "name": "r_foot-1", + "directions": 4 + }, + { + "name": "r_foot-2", + "directions": 4 + }, + { + "name": "l_leg-1", + "directions": 4 + }, + { + "name": "l_leg-2", + "directions": 4 + }, + { + "name": "r_leg-1", + "directions": 4 + }, + { + "name": "r_leg-2", + "directions": 4 + }, + { + "name": "torso-1", + "directions": 4 + }, + { + "name": "torso-2", + "directions": 4 + }, + { + "name": "l_arm-1", + "directions": 4 + }, + { + "name": "l_arm-2", + "directions": 4 + }, + { + "name": "r_arm-1", + "directions": 4 + }, + { + "name": "r_arm-2", + "directions": 4 + }, + { + "name": "l_hand-1", + "directions": 4 + }, + { + "name": "l_hand-2", + "directions": 4 + }, + { + "name": "r_hand-1", + "directions": 4 + }, + { + "name": "r_hand-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5e770056ed95b2be02fcbb0d7613006849cc9abc GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op=X{hjv*QM-d^9hu_-{H^`ZPRz71ST z$BRq~-$_VEvZ+eUxY4$r`LK8d^Ru+$A*?kv?XJzAQ+3Lx-QBCgotE~k*Q?efePy-- zWBAtT6YSZw&fehpUu$+|#V?bv*DGddTdc}EXOmtU~I|)5%V+OjnqP zOq#WF{wqQ8gC?(MevZ#_yeQ%DSp81$5uS#ozxUfGH9g~R@R<1W>=_`)Nk~1>b;~4^ zf4bKk$Nh@lQT$WIx}t;MKYja9IJ?fG_d?e3j-x>a>C$zqmDjtOKMVe<4?NI%RfDx8 z=)wMplMU VOW4C^W&-svc)I$ztaD0e0syVctYug4O8oM+kA+`2PDW_93>(~krd92yuHnOHak zpo}_}V-iz&imd<7F_u~|x&Cd;4!dZPBgK{5SKZn?Z9iYtGrLdad^v3>df=KNjK=!L z+oi=;8O!thZf^|jU#|N#>)z@zzqM!MkAAd7wkwEb->pM>-Q`-hB7v@E@O1TaS?83{ F1OQqJQR4sr literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8994994011cfefe211374497fa902ea729f1135b GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op+-*^$B>MBZ*OemJ!Bx_dhxVGB$jClkZcu{rMWZkA0Gg=OmTCH*?=_Fxbq{|M#`?A=w#`72oVM zRi<9h5dX8`0>{)P)lo|)ZvV(?H(Bay(|Zq)jxWsdTn)k}>ykI5N2vdPSr9Pa=#KH4 z$$w|E{;FydZ;NwxH$Kk#8R!_*64!{5l*E!$tK_0oAjM#0U}U0eV5Vzm9Aao{WnyGy zY@%&oU}a#S>l|E#q9HdwB{QuOw}u$G*T;YwG~hOrWag$8mn7yEAoQ4o7+P8x8(A4b VEnyFvnF-Xx;OXk;vd$@?2>`20frkJ9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca884025fd3c36feb1979700a5936c746cf279f GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op(alk$B>MBZ*OemJ!HV(a`Cf7f?}09~V6;u=wsl30>zm0Xkxq!^40j7)S5%ybQnLkvx=OpL6I zO|%URtPBivor9}TH00)|WTsW()(|82`WR4y2Hb{{%-q!ClEmBsgdUR+LrW`TBP&Cw VCG24{Gl6;-JYD@<);T3K0RWh)f^Pr- literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-1.png new file mode 100644 index 0000000000000000000000000000000000000000..13a46c2e09224bbaf474425dc80ec05ae3bd87a6 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op-N8|$B>MBZ*LsrZBXE8eYm_(D(0X; z-$&yv*fY=NQH3Mt7E4?cvRM!1&vSp{I~p zdZGB~ZH29lK&7fBt`Q|Ei6yC4$wjF^iowXh$VAt`OxMsj#L(2r#K_9nMBBi?%D_O^ zIk*Z%LvDUbW?Cg~4KZ@Bj{!Akz-=hW%uOvWNz5%k=rIW~w6rodvND8P!X7p=6R3y5 M)78&qol`;+0O1UHCjbBd literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d203e571fca443a39a9168e1ff8fdccc6294f559 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^Op$bnI$B>MBZ*LsrZBXE8edslZE!?1o z*?4FF;|+&DuRAzlMpOHL>q`M%mZHWC3=RJ~XUzy#3$2_Y5UOe`-2U5Xo>zOmq#*bPbI|3{9;}jI4}Jv<(cb3=DLg zgR4+9|rxAfqED` MUHx3vIVCg!0F;z@p8x;= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb762db0c49173c4d6e14939e3a4a896dde6ceec GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS@v42;5_E{-7?_uk$x%xg9fIrh^*Nle8*WvS``a4U;=S;E(m) zKP7ACua$q3zVBUA_Nfog`xp=3wl!=jJU-iSN#D=dS2_P*bKKv~6Pw~Id3(XLV<9Sc z^3Uw?J=$xvOHFFQ(=&EI|1eaa<8ID0InX*UGq|C1o_EPny|9>BZ>QVjNlvofP`d4W z`Dq3JFRW*t`yI`WxRVYHG1U^+h?11Vl2ohYqEsNoU}RuqqHAELYiJx|Xli9*WMyok zZD3$!V4&+9T!o?`H$NpatrE9}7`fNSfEqO5Hk4%MrWThZ<`y9In1mQwS{WNz8A2^# T51W|@)WhKE>gTe~DWM4fT3*sB literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/r_leg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..16f0ee16471f110c804c23e9fd2a66de7521f018 GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS@v42+_lE{-7?_uk&HUDxCw!ur7Y*pXwU z0Y0W1>$D%5inUytx`8Eodg4Q_j5P5Z&ZRnkI$L=j8mZ}5KG*)aQzmc04siiNAow{u ztLoY6XOaD3(Y5 z!t&y!ap?hd>ka>EeoWV`3wW@_;s9Ut8-b3A{Dn{SR|o_o?BBz9W3hw7)P<8eK;Vz{ z+2mQD+77o>|%>D8VHrA6a#wK<<#0kpYj6D9Q?bywKZ$;llx2XjtPSp}9IGAuV z-^RuKL(_ykYLW{MF-pI_%*Y@uqsDeQr9nB0r<;i!C8<`)MX5lF!N|bKMAyJf*U&h`(A3Jr$jaD6 z+rYrez(ChIxC%u>ZhlH;S|x4`F>9ZF$poWv@$lbGK5;f T9yT)*sE5JR)z4*}Q$iB}rB=o3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/torso-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/hesphiastos/hesphiastos_main.rsi/torso-1.png new file mode 100644 index 0000000000000000000000000000000000000000..45fb93052e45ded9eb7fd6f376db6c0cd0306672 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVFf-@hNS^OO&Xpqjv*QM-p<%N@wS0LtNonVmTU&$ zU5p}+I+~gE0tNk69N;a8;GUB`BS6&R^`Cw z0tA0T|J3kDUfz6RaraMd?$fgSye1}o>rL7}zxC8XqXTu~A5HI7*MC&lbMoiC_;;HB zF5j*<&kE&hKKLLabg{s~z=TNAHK&f1Ph{j{wvgd7u$WnQOL}T=)@0@TCJ%Z#)ok3q zx@~DoS6dgl&F7FUONI&e{fG;$g$p8+M4mo=psD`EGH&S$iI?wseoonR|5Nk(n#4m3 ze;k!x_hkyT{NBv+ z{z+D{oo%4L5ZbqZOZN_}Z7JBKH$mV;ZO-K>GX!Kf zgo^x9yf!bE%CKaNJ;-xtm7Cudo&|h%rdpW}i=A?BOnb5KP|INh4{H^J-vP7yR|8a6itk?VZBpSK*pm{6GG`fG;Fbc2Mt)HYG+g!q;7 zgdYdxS~(@&yqJ2MyRxUGBrqt8Z?mnE_+NeF#Mk^!t92xq^^P<)NBn)bN`I2Eq9CjB z*|Sooj3+u7Z^}JXB4hi(ROi23+@e+h@(VvElE#zvu5SG+MQT<)0UKwbR9ii~l_0d152+;re~4no0R7Q>SqE za-9EEIdi|wQ}O8siUc+sa9nfkul9ZO&*k<3a~b2$z6W_02!5z*-23)4>h8+!Rn|{_ zU#QgJ)V#+joOmcPC39DpZqkvrrb*5GKh0LZ<=rz~;rj1F;mV0umSq|$T24^8GH1n< zH1>}^GL1Vk*~~a)W`0n}KWeHWW#F}nce&WzatpzY6}5>)azU9@znH#G+*}7#@-JZT@gTzoZeRASEPi?WfxO2r;Z_X`{>5i@%U_su znw_U{59jH^FO8Qs{I%J$G`?1%yrkrh{SVe((^b}-oms37OhBq7t`Q|Ei6yC4$wjF^ ziowXh$VAt`OxMsj#L(2r#K_9nMBBi?%D_O^Ik*Z%LvDUbW?Cg~4KZ@Bj{!Akz-=hW o%uOvWNz5%k=rIW~w6rodvND8P!X7p=6R3y5)78&qol`;+00Lb~!TanMpx_@* z7srr_xVN`1@-{07G$h^MeTi-LSyuI4nHC@8Z8VM^m$=Pz^eJ2$Uip*tZN7!C}cu6{1-oD!ManM1_s9G zo-U3d6>)E8oi1!K;A!(!V}BRG>KeeIUezFE;l#}o8pwLZLFf3V3A`-cH?KcTKek)q z^slA;$6bxs*f|;)I5;?TPH(#C_}`{NuVArR?aI3Q-xYtF_?pYfh^$?0+*YK&e@kO*ShbxI9tT^p^HZ0YgL|EmrJ9rSMR@f(!4?Fo;@dzOEI(Ey43n8pUWjX zp1#?2<^R;byVf0i^5)N}<8`q-2{Ol>|EFJ9J$U4XP{!;Z(^4Z3H9xy0t-$8sSQeZ9 zCRv{C?EJzlxvx_sm{j-q&%3U=QAH?u)8E&&^Pfk)@n7|Rzis;Mc?;KbNJcv_un<5G zcsW*RX}YIotUG)2)09)`I^63Ru9yDJ_MZ2g|7w|PX1o-)X_cPuZtiU<@BSx$7QFe^ zbk2nL!at^&>1}KO#xdc5uK*txKi8q}d>umFrqA}Z%zh{0KKG$_wTNBv(VKbUll^OE zM!kA;|JyblxtfBNa~R(IW=(Q+VOa4idYWo^V@uwIM2V!Y?~;yJ`Ci^&FW%jI)`nrju%d_Wa;+AT63T{(iV8V$$Y-8ES;5)ylwP(?e3&3>1 N;OXk;vd$@?2>{PwZlD7;jG)a^6vaJ{uBC-t2~c|RXj+;Lwid= z;FYEwSu5p#G*%YBd+kvf{@!PD;lw#tQ<9zA=OciQyng(W3RCg`vv|0`tpGb2Ag|M8P2EIH~N2UpaqFj!k#uezAAAZ+!+ zhYuOgrU^ScJHPl^HDmT{=Zz5|$B!Ssrf}m!KZ`^8IfVlXEB^kim64G-vC(Y$YqQkD z_Mb#Dw%?vHZ{9SXIrHbAw%k@}$2s#`KTkvIah(8haq*z0;NakEoAXcGYcZVD|N8A) z+t;t9XU?2?@bRPI{Q2|$UeERV^YZ%p^A(SN9seoHaqir?E7z_~Gud=g$IstCdFJtu z1%G>f9>FedY|F= zQ^o_>xM~b7_5SLA*;fkQZ)C{H%UgB*dU#DujfX?bwx(KvtlV5*J~uZv12eN_T2s9? zy=I!}dH(ss(`J19{k!_(f^@yeZ?>Czl6lO4=9;dWCbAs3iowF&5d&;pp!gDS2(?@vB#-GIXwr zV31(gY-jW5ds$jD<3}6ji^YP=To=d~9BdbLFl0OC^nPFJr~hFo4EKwD_OXBa_N}12 z{QGCw2~%E(R_W>JJoxazV9%5j{~F|#b9Jn@J!zRYzxL+#kJhw5aL;NH7m%!`Olb?Z!|VqZPe5#uhk>#ke&*hv0p zh~>5y`?Gi!{D@osoUgq(dj0jIR}LmTxb@boPhU)Up`45S#|wwq;~1Ft>HN}S`2E*T z-1XxRJ?7&L0e0e1Q`G#veB6FB=UK4-^5Avc@nV0)dl`>3?a03}_xiK{T5_!K%XTlS zs5xkOF1qa%mq6ltffx6G-%UDa{=C9w*T;%C&puavH0~?BXB5KV!Z5wMl>bKFcCp&4 zG7RrZtSUEZM74?JM>3pV7yCP2!8qmQ@}>!_%dhGGiBp@*dFGDs5?w!GdDr;8oYQ1a z`K>9GHQZ)6`|N~wg5j}i--fJ~pZHkc_v^oDZ?09#B^fHzWb;?ZiIg}osW{+30v-px z_}u;8*HDtS`P&rD^ab(P-+%w?{_$?!_q491rt7OTx(+2W=&LM{kN?Nhet3_i)m*>& zHQ^0+E;NLN%Flc7_8zy4-HBDtG{PdeT#e%0%eF?f>MgVKD+(`-UK=)#``)zEOSRT> zHLQQ}`R5v;9>JJvI@_P?=oX1K^#A_-OsL+3<>KmZYUZuQ!}SS@?9-Am(_aQJITIYQ%zDE{KAC;a0Ub*O znHpJGIh#~oq&?qZt)j5PJaFgC^-Y#`UqJEO30ZMV1Y=8N%Z5iBYvL$pLgR)=Oq`EiESEWUUk#mI5} z_3p0yJ7aE6U;joZV)=m#lP;A4=lpqH^UtPzsFhEYXj)v+RLi?SMe||U>eOb16LV5z z)VsU`J|2neV`wkrjGAtuk;$iV&TY?@2S*=GR<)bmu=>#CzY*6p9Uo6ho%~_@kKVe7 z1YrlysoeeBYW_Avt!>NOep+aH*ZUGH2_CkxUse4}e&pM1K9W9{>2m4qDGzV%s93i> z<=N-TKb$$s4Lw47i5Yj5Y6eXldnXS$SJvdd9uzW=);j!Zkwzu4^blg07wjz_sg%_-r0 zLIr+Dg-_mXG00h7-chD%9;{%gX?Kd_gfPN>MD+Y&x@v#B^y@lxV_+g-@O1TaS?83{ F1OPHk_Sygd literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..468d4f38989f23dee11211ac4e86d1baf6529a0d GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TR> zr;B4q#hkaZ4sx~_2)ORw#O^KNy@5x1Lzwgi9&dqzN@>EL4&S!THmv^fzwyPL57pTQi!2Qh2e<@1BOH#la39qmf`u$x~CsaI`7=j`?w?b zc9!Rcb+6ZLcek4^df|JmNJHkVoY?EfRhIm)IDc7pS$o4X3qJ0nielfVwAlQZq5fp| zr>Y~Rk&KDok`1qic^us-{P@`q&H3DU%Nx=IO&`COV8LxYs=HYKNBxs%WBk1@JbS{4 zC(@6lXm#Pz41hx~;DcCpSf_@Q$!Yi&#QdWVw_l=FCna&OyRlm2jW fZ#YA1uTVb2zJdsb`BuQdV_@)f^>bP0l+XkKvgVHW literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..05df57f392f65c0bc4a3ee49cfc12139662f24dc GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R58 zr;B4q#hkaZ47*w#c-sEA>aJn6&OUfaxPIow$~jyoH;7u;R+*q(>^-7}rq|8v=bmN&#Y2(Wlu7RkN6NknH- zz_g{ycL;6Zw&>HWUixg(PhtNZY_5ikcwC1p6~^cq_+#DcBfBhwHgGLC8f+Y#G~pp{ z`sXjNY?!LKjuh&co%tXg8mh>1*!wfb8>U4XhvJ>P_gnRU=y>&eSN})ScsLr@q_c8T+9?Mu9%AhJp}=mc>j8GNKF*S1@q6vpQI4F(9OZ zWj05x-4M4v+N0-ea*o`tl#@pl59mzy7MbkD_jF;+?YGw&9GTi1#C(^nU|6zj%JXck z1Amo{KNgIfHuLq@Sw+$_f><}OqzF1pKKWVZ_g}e{kvd{8O004|-nhqf{<*Mk!T$Rf z-$tc0EuTEoM@>(E-xI}-y8ZmthFbocZ@-=7sqyIX$BGR{ zQ!2S{Y%{a~<;T%rxm#>MmThnN`!&-jPg`Via{HrSKV0p^ZpbywnVe;`@1HmU zFSZD49|(CjS-wBKI6d-Np3`}iWR@8>bK0)IZaw|f>ASDqz30Y@FP@k$$|ifpEwmy2 zPl3f3A*rMDg)U2YO=q(_I-czx0-p+ z)t2ciMjS{ma9DpmdyW1BdyW4kR;7zYgMR-$$dtEz_HTi(wvE?&!x`sFh}Uu+bO~kP z{P0-)!||t2H|iZ^dNE^{(m|2rPhJ||xk9SgvV?UW{H@!4tfOrA+eyDSa-Q1Dw9%G% Z|F00XiyyiDIDyHA!PC{xWt~$(69BkT1;zjX literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/meta.json new file mode 100644 index 00000000000..118c3f613c0 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "head", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..27ba8e0d26357c9cd54b49afee0af39e0b6bd72d GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VoI zPZ!6KiaBp*ZOl7lAkbF7c*`R}iG-C}Y}@uQCcQay;@ZUJFK#SPcynyVQfWc|g8~az z1zqRrYJ%^9LI|G&QcQsi!)c+d8p z-P^dbSf_N0D%-qUYvwU&$qja`kJlarF{Yoq{NwINV-7+8xi8G8)%5*-EWTW=|9WIo zFzcD;#cQr-|K3pRsBv<#O=9re;1iGE^6p5~7vo-T8e`@-SwHQw`oWv5&PzJdTDH$K{0O}|=HYUj4; z4Z-sd)a^gMU}^ItwaM!DL=QaSZ)d)>=;V{m?F?%3RXCSB&KKVGNVUON$mibkKei=% zST?Y>uGM(6hhwFGLyS~E&;WVAt%iysdcDWDGj(-OnJe+1saCKF(>ae=YnTh=_FPHv ST=p3l{|uh4elF{r5}E*Bx9Y|K literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b3dd55b59026035583a8bfd48f79ac1ea367ef GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TR} zr;B4q#hkaZF0O1b5OHy@l%J+BEkV*OVXaw$L57pTQi!2Qg#le+P7tG5AKO%e^P6=~2TfV-($M?3 zBlmXJ#Dv)EM+I3c^EhWLJ9(|t_5OD~hOGtj(q)48MGNV1pE%ksc)ajO2=D6mCW`%) z>!!S))^eI@PsaUUc5PSJFa6e3O5SdG87$0w+qn0){Gsr>mdKI;Vst0C~`p2><{9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..716f604b4f387a9b358ce1ac595529e3a544b54f GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R58 zr;B4q#hkaZ4A;3jh_wBmzQ;-T;!07jPT3A#jkjm{RHURg@U*(FD19fhb5eNh;n~L@ z+s7*{o*{Gm`3%ixHO(@j3`HRfCjuE2+*uotIS*!@dG>45%pVqvfg)!kr!8EirOheN z>R}++o;aaea_yS9&L^{$y_~c@@!qM*%}hs@u}pof=W}_B$BNfg#qX9i6v|BBsN=o5 zA$;>Q$>STZ{^@7B_teWH|?R?qKPlpzAO_!%62~}Zf3pnzWm6s#~%-TtxBCM zt+GI)>&U({DMpUdQZL?NS;>@RQ}X9-JY#fP+o?78-~Z-Z{Ge?2&W%0qt-mwOx2e5; zs;E2hYv++;$$xAWLJr+#(#X`Rm3sT?_@q6HdyfD3;ZzarkmGs%;j!iaS#fv_?&l4x z0rMvuTcq*FeSb|xR@VEQ#hY0IK4s3@H7!K*!FB(hyU8CuR=oMubo}weyGxV88C3mc zA8oTbI;Cdb^Sm6U=m!6PHFk@6b3S$Y-kZ>(wt;oa%st1$9fUb^7^l?i3}3Ld?_!SG z;ky0#CA`xb9u{=Ot-t;&j&WAK)!bbli*{~UcTgzcZs);F&-$i=2?>77gCD=%z!DO5 zaZRq~{D!bQUKNs-8(0Fkcc~rx{(OHN=ax@jpX|Jy%rUK@%6{JE>Cc@$msri6{_$tc crlbFv%PuooIrTjj1g07WPgg&ebxsLQ0P@TVYXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/torso.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/morpheus/morpheus_main.rsi/torso.png new file mode 100644 index 0000000000000000000000000000000000000000..49afe13d65a365fe22ea3cf4c557e16fb93ced6f GIT binary patch literal 758 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V0v zPZ!6KinzD4e6x%k1=>zOI5bybN3re;rw?q8SnqJ$JK$W&e6Uyi1J^r|lGlC$M|yYv ze6}{f>V=PxN4UBzXQi~$ZKJQ>LrVLXM71=tcr?J!gM6WkKi4+={#*B~#(u8fGmBY* z3|{O-vT5u+-!@;&2P$ zqj~93v(7H_SsrXT|NJgD*CkSVAJ%UW=UT8aZvEz?Ns2$$eB*C#u6X@GXbTG?!&Tjc zi^9sx92(z?`U2A?oSk-h>8^wOiC>v?cUA)l`R*pFWA+!MwwZm zU-I=7=9%(*?OF21*G{@k%&dR^^7#}|gV|@}ZmwT5dE<)90bd_|_6A=0F6Rp=_e(gM>eeJq-u|9r zr%S}`&&wuXj-7Z=o8xe`@{BK%2`}FBPOpr)?pf!{F0kebFJryNr{F(7PR&@+4NFQ5 eERzI&uwOXuwqf-uCP!dGX7F_Nb6Mw<&;$UDQd#N% literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/head-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/head-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d89df4071be0d30eeea7a57f83e7371d4d68c478 GIT binary patch literal 6405 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 GV*UqI>d~A4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/meta.json new file mode 100644 index 00000000000..576edfc9c56 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_alt1.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise). Edited by Timemaster99.", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5694178c58933a862b04536be83366913290b86 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKrvi*LB%Ip#z>Sjv*QM-d^9x+iW1fdf~ms)O(Lk z)G;Xf&*hffw%(zwmF?NOfDJK;=UmqLPvl}SSh{v5?~96=>Yv{UarRrMhKWmD(BHHE zxqyzqr6d+55Gd;Sy>tI7bE(~8zc)?anCw`d*4Wha=kb?Y`wmQzn|e8H_MhYCGrDC8 zuZN#M^~d@3ScwaHO8U0s$uV~sf;=yqe@mKi|5sFt`!l%yn~>+L*o!bQ!5iAD`OLF0|P4q16}9fDijU5`6-!cmAEy;$h|%W)Sv;kp(HamwYVfP jw*aBXB*f6t%Gkonz!+kQWTp8ApdJQKS3j3^P6v%V8m z_cU~$nOGRJtf*{5wf;obD~7GJO(vF1VpU{_*Jg5$yecUmIPw36Lo%6%Z*6v3{Ben* z!CW4b3GLwq5^B#xXJo8nKfO+1#<~sZHjn-1aWQNNP1iDb%voe~bXv2~{d4m^^cWWI zpICgD|H6Mx7Z6x-MY*Uf)Bazdcpk&Oz3=iR1T4Nt?brX-c)7p#<*j`O+R~p~`B=Z; zne-diU7c&+toynrq-t%xkM{14jw3Y;-WkrF$_u9%0DYrc;u=wsl30>zm0Xkxq!^40 zj7)S5%ybQnLkvx=OpL6IO|%URtPBivor9}TH00)|WTsW()(|82`WR4y2Hb{{%-q!C llEmBsgdUR+LrW`T3o8StC3o&|+5z=2c)I$ztaD0e0svMBpm_iQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee57febec2d28c0e8f13b90d9bbc3537c230e8e GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLP?%3jv*QM-ri8;JD|YBdLgd)xAeP1 ztp#&$up}`VZSvhSU7=q1)h}hB(g**&rqyVdE>2B5EoJ*FWs!S-)zfW%_CNjkDrFJh zOkHcBk_La<{h#E0Bi^&QNmn&}%}X%3E-bVEtb1i&=XndDylRPSL`h0wNvc(HQ7VvP zFfuSQ(KRsBH8c(}G_^7@vNAT&HZZUB nQ;SOya|;l9OhODTt&AgTe~DWM4fwZd?_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdf5bf6504450677c875fc392fc0fe47a0e3dac GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLP?%3jv*QM-rm^AdBA|jC2;M-ztV3P zwO)zsVtJ(0+T*+7p?yK+A+6FhpjrloH|ryR>wZ=A;VNDlwADrH>8@h$Z~f0JKQgZ~ zX9me1`1x%8pOu`C?>gi=`WxKi{gP#SkX1~?xL4gZpbaRmTH+c}l9E`GYL#4+3Zxi} z42(>44a{^6jYAAgtxSxpj7_u+46FPv9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-1.png new file mode 100644 index 0000000000000000000000000000000000000000..381573480ff6d90351ae0af543bddb3e9fce2159 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLK&Vejv*QM-riU!c))jzs4e5DN?Po4sDLDOO!(2OYkJ}dm73XaG{Nc;&Oicye z@M+QBj6hWkA672C8~gB;ocy$R_Ww_B-R-2U$HuVXJ3~R5A$OnR5l u8Z_WGlw{_n7MCRE79jMPgcw>{8CzHxKrOj*kJApQhr!d;&t;ucLK6UTb#hMt literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c502e77a18f8d3cbdda261fb671b01f55e2a062d GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLTR2Zjv*QM-ri6YI-nrnd~wTmhwFt! z?>31aTDnN?nvUuJmuGSu+?arNMP2{!#mdG$vz)X#+BNi zckUDcn#RE3?z_IMb@#8D$zNjZ_t|gPo|0t9(6Cj!ZJM%FrasGipbFIz*NBpo#FA92 zAvZrIGp!Q0h8Vfm$AB6% s;5L+G=B5^xB<2<%^q7PgT3Q)fSQ$VqxpR-x4ycF0)78&qol`;+05H#TLI3~& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/l_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a4bee8acb480870cfb33dffe1e0a276e229de035 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLf1T9978hhy`AC6b=ZK1<*A+f|Ci-W z^MzmdPnz?4+LJA|Q=FJGQ#>_IHWYt6s=c;VUt7?LL$O7`X&u7{>$7L~1sQf(>1w#G zWW2q5smSIpdfZ)cX@M2F^_tIe_irmW#UoJFx#+F9$)85e44YNAD?Lk?ba%CJ>MYg% zXMbVp(k*vP^lPK+XPQWTlB+4u#rnI|pt=&%b6IImA0u zAFpM7P#196<9K??A5Xc99a49BE3zbnJKnHud%M=w(Q?}U^A)F_&pYspb;8qv=}v`a z*MUA%Epd$~Nl7e8wMs5Z1yT$~21X{j24=d3#vz8LRwhPP#wOYZ237_Jy3WB>C>nC} zQ!>*kachW?dwmS3K?80>NoHtS|DP}`=-#~3Jpa%=2hVj6*!X;om>c{I{F3r* zR@~zEQ@IT^K?Vx`^nJLya+!38={FW1^9j$StDClc{K#eU?z~0p!P+N}vy0CrMcm%@ zzK}UQJ>?hUGHH+F&#RgqTKzln|LJP=6V(h8qx}7>8q$9QeWY6A8c~vxSdwa$T$Bo= z7>o>zOmq#*bPbI|3{9;}jI4}Jv<(cb3=DLggR4+9AvZrIGp!Q0h8Vfm$AB6%;5L+G=B5^x kB<2<%^q7PgT3Q)fSQ$VqxpR-x4ycF0)78&qol`;+0KkVsn>+iN=5ER_0bU0?`BcAM=|3X@Pm?QtQ zc{nfAc33obr-690;zdCPW5dm5zf}(f?T&eWDw*K}AIF1rzUQs~o(TOddcA&o+5W#W zmaJ?u4C?kbKl4{m0)f@;r=PVkwpH(DU^Z%h<@}4Y(=x+H|8Aezybh_$+jsqadg4Dz z-o)l#tL$%e$XmdKI;Vst0H{ct4FCWD literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..da79cffbc9ba45c8d060d1bc1ce9cde58b8df52e GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLP?%3jv*QM-rg|eI$*%#92l$oJ-$Xf z{={sn7N_F@?aL0=Pq?Tgr^^Xc%FwW1O3rRdh*s;Rvb-OM&Tvl6DpfI=GcW)6zw)pz zK#PFjN6dcZ4Anh5-pHG6;n{n-Zfoie2KEs5%A<_CPr4qCfWuDRt5&T&cRhE8glbfGSez?YlxA1eGI5U18ze}W^QV6 lNn&mRLXSy^p{13vg_Qx+k~{Y}?SOh1JYD@<);T3K0RVN%Z65#t literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..90b5deb87c4f8e2843cc28b6ee6204d88595d703 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLP?%3jv*QM-rm^AdqhEizv z_i8miP)P&-&G#JJgyM3(@v}#@?LAw!HT4Ih=K|y2O?O$Y0_9apTq8nXaL6h@q*KiIJ7DiMD}(m4Sh-b8r=khTQy=%(P0}8e-&L9|LO8fZI@# onVVW%l9*e7&|?x}XlZ3^VPycdn|8N9+vRX0k5zQm+Yg%@ZuBi;DldDq z=+(RhT9QCD3?G7nJ5Bc={8(2KwMycZXQ@4F=9@}}AIDfDxD2@yytjfJqFUk_QIe8a zl4_M)lnSI6j0}uSbPddO4UIz#O|49ftc*>x4GgRd40N4?t57uL=BH$)RpQnVBlr3k vP=f~ChLX(O)Z&uF+yaCilMq8oD`N{Q1E?i;?s3`y^)Pt4`njxgN@xNAZ##1j literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cc6b71a6792ccfb7e68aa9b429132e47a62c4a GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLfM`!jv*QM-ri6YYB1n&x!4*V^0?~L zJyr2l(JWjCO_~&D{Le|BG&d|)6{z@*5C8W?H)9W9KFy%GTXaqSCTAeSIz;%vthqZ@ z>{4GbiwCHP;m69CF0<! zC8<`)MX5lF!N|bKMAyJf*U&h`(A3Jr$jaD6+rYrez(ChIxC%u>ZhlH;S|x4`F>9ZF$poWv@*7^GJslg=N_jWP!EHrtDnm{r-UW|!~b$? literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1bc5a60daabe0bfa7b3e84e9e99e45e4e6efad GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLMJ?3978hhy`8a<_pkvEi)Qa(Mc&@W zk#DZdJi5-VRq%kT%T1MuOMYatc>H+Y9N^p~;KZTWBJgQF!~Kt|=C2oBy=4gp@9Gz} z`bTwUYvi4>itF-C%Wvsn==;=e@LK%9o0PZqwneY1YehVMF|Xs(Shi{U9KJWHT7Nm_ zD&-$EmQgz22{ll9k#beQ{S7V0jE^=suslzxzr? z;)Xzv?HRrslmAZr^jOz<w7FGsOOYYp`v;*p4@O1TaS?83{1OV-er8xiq literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_main.rsi/r_leg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b85c3213d4cba71eed8143258bd0d9d531c8a2 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVKtWK{?{jfLVG-2978hhy`5pm*J8lK;yZ7$`y!k6 z?Fw1}jvZqKrTt3_rp{+N)9{m$Dock5t{?8~^3PpRllx zr;1)IIwz>aR&XT#(2Dp4X*H|tbA!(?_|3mF!{(Iw)s)Ti47n!+rzN+Xs@m6No4_3C z2QrJnpv@@k{f;;FFLEU3O#kb9|EAHGqxanlF4xO%k8Vq`bu(d+l@sK3ynXmiL+wrb z&iw5>lU4VBi2qi??Eiz|w}9VjIe%?epgF1~t`Q|Ei6yC4$wjF^iowXh$VAt`OxMsj z#L(2r#K_9nMBBi?%D_O^Ik*Z%LvDUbW?Cg~4KZ@Bj{!Akz-=hW%uOvWNz5%k=rIW~ cw6rp|urh#Ja_1hW9Z(O0r>mdKI;Vst0N#FOrqfn|5uv{(tw5I?Kh&3|XtW zq=F~2ipm=${65R3dV$F_Kqgmuh6DGLEnBucnfzy>dGggyg}b(gxn=Mln8x(tt;Btw zof^Cc+*sP)|71S&Gs2R0f5NZ3e~$iGD|4T@vf_*Thr5LpD%#?KjWcWPckgScn^r%q z|Eiy;tgNi)?hck`AJ50QT-vzm!=EnAe@`UL(pDbRS$w?UoP@dx6g()uGlTi3>Ku{X zGyeSg{CnxCQ>(f^U3hp?FHir&k$*Yz(;Mz{Een>2J-_|Qo1Z2O+7C=E_JoT)@U^V& znz;C927g8Ak;Q$h9BPkVzAO6T`)|i(75qH$vTvi}=5faP>V5yMHR0^byYAXN-!)?V zzZ!(gS2VOI?(gU1mlfS^dnd!G;nJF>_6zD8Y`A4EwoH2RWXTErMA!54Uo~EQf8Zd` zt2EiE2cC(Pc%{zK@tI$~W{<)2`4c95u>ZjNczgXq?WdW?fsw0P;u=wsl30>zm0Xkx zq!^40j7)S5%ybQnLkumfOpUFK4YdsntPBjqq*uhEXvob^$xN%nts&h_;2}_h2Hb{{ q%-q!ClEmBsgdUR+LrW`T3o8Q?h$VOKaoPd(FnGH9xvXSy!*yulGG4sLOu2 zDCGRD6xN2Vjen2MdU`Hb|?yCT;7UYgl&foZQc z?zwdG^y$@?vm2RDe=!zrEz+6Ww9otAqLW58S;>93M5aHSWV9|s3+Vcwl?Q&r?G|z0 zwK*;}_vQEb_9mfX-TJR`|5!+KgmG=R-+OzyrNFMHE!-Es)%Y)Nt`t9@Trl5q(TB$^ zjB-AUn=_TyKf5Tyae1OcyikLu>GqOR7QerLD}6rBk!;Mf*|xmUX7b%xHSgZVjp)`RBWH8Q^Q)h&D{nT8)mNLniMcehEFuksrthySQw$|anM1_s6! zPZ!6KinzD89P^qD1RMgFuM#=O6#Z`c0ndm@Yj&`EtCZboo_jiER@aik(>(!~yzWmD zm9#PbX8h_HZ(|z+lUQTrJm*!>pDLbvz1{czaTTxCw`X@`mb>2G#v3`!^{vsh^4XIu z)v|hbY%x7h^~Phjt&7>J+3|}Ol{H={zrFcpx>m_6?g`(oeM{r5`1)tvYp2L*=BFoY zwE1o#>=1js=+((@x2w-H$sZMQ6>LlFIR4o1)cT&iXIU1w&RS-vGk@T6|;Crm3sLqA4J@4FtERe!kd*wsBRr_AWVWpBfQ`@%mM ZLe@V!_)Bk(1u&8rJYD@<);T3K0RU%m%I5$8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_monitor.rsi/head-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/shellguard/shellguard_monitor.rsi/head-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5ffd6c10e8c2025bcab45baf913d4a4d4be840 GIT binary patch literal 500 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 E0WeuTx&QzG literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5f646e36e93793a6792a6fef2f4ece375e2a3b GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vn~ zPZ!6KiaBp*ZCu;zz|&U0WV=&X2g}VS){F@&A{qpZ7^DpxwM3-c5}33cl2|t#w(Zfl zWP7)8TE&fcX5MQ*4&X)n;n)ld+^(6X3GK}M9};R*(h`nqEurTst~D zbCy8c!r}?*YtK)zIjGdow`P+L|MAS*VxE&O=$;nz*zlLbR*t{wce|MH`SqbGWt=)2 zI2LR#UGinWrPfFNFX0l00vR!V;m+z{p~ZlZ(ql3Wc#(D6eMc9Avu@=pw}~9moZ*5E z*I&2VoL~D~Xq}Qm#_h7(Oxq@__%Y2|X1F@@+Pt~Uvst9hY*@*p&S>(d!0nO6v-?a} ze!u@Mm)?9WRD^Zas!dX-3RW?!OKe@d-D^wV%d!2BEiQCEwm6slzb0o=u&#pLzo^Lj?LE7ecHAkR_uN|f+P?Q6 z*I6w-DZfGI^xj7ax3^uKb;r24>BOmBZCQ-h726gqV^4K^trOqWk<3UG3RZm(U(D#A za@%It@%d6K?guD8I5Vwc{musUQ2ceJ+57?Zau}t%H43KlqRqT1v;#&W|CvSbuy?rcO&*;P_p)WCS zcCCvvtGl?L;e;kJsNwkr0VkQ`hNmt6&AsxQV;$qPRL96^H_v^t_uSk6Kdh(*I3k3$k>7rvQVI!PC{xWt~$( F697Rp}uaMJo=P_%3{39k;6Ef`C9$(91_Pc8gUm**$jUWaJVuVKL}D@FXed=&AV| zYQqjV-#NR&r}6U3mctJNQh66-9J}n~dcfwqr^8y!0~Jv#I3CQo^ZvVr<*z51Tq_oA z;`r3PIJk;y!{<#8^a}qURXQ=zGc=%zYr^TLi*C(36}#Z|u9Ez|{eN0!EU6OR5Gz@G z>|)o#AV!}y&P7bK=Bj7)A5wMO>-PI!ItNytAUt_ajnVh=67z%GZ~OkueH*W{{{Bqn zX)>FV(zz3!w&7xzu3Y3%Y-?8HB))miB) su&b%e->G=dQ~xthZ+UjyT#$1XFgY-Iy85}Sb4q9e0Q9H#)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/meta.json new file mode 100644 index 00000000000..f30906990a5 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise). Edited by Timemaster99", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "head", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..24e15d419add82acb47ad75991fcaa480bb302a6 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vn) zPZ!6KiaBp*9qc`1AmD0$X`2K0#7Rag7+v%=6?zN09yl?3gdEUxIb~`7;^6E3QQp-z zN^Ra8O?wvmh>TtB^Y3 zPQq5bvo#0$4uKu)!!RY8X@QI|1EycVQcGkHxq5bfXWg$TBrr+7tx@L7X;1lK=`(hMoDWuW+f8$5JNf%miJe(tj1r?y-R7GQigqfP_Z@%i z{dYHd=ZnkUv*vBT?d|__Nq54w_pCE2DkKygYxqu7{;yxE^;U%g%`H`o^WR>c Wf9zw^$#1~eWbkzLb6Mw<&;$VP)YIVr literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..f04c2fd7a6452ea43d42a3d9ec057485521fcc10 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|O(o zr;B4q#hkadE^;;-h`2oreqm(Qrft#oc}HKih2Jf0UY7ZjZnPixUmu{e?@1L){3P>7 zG7N=$4HoPUbC?y*F$z3q=qP45V#$ChoXu4*FTLw^p-j&0Z%H!OWA6W)v211Lx>XE6 z4_+_rWlz8V{l`*Ar6rZ~*6&Q(XOo@Vv5Mj2F=w4g%sonJn$J&dzP5_1p#Jj48ycr> zRz3UVEQGMo&SLJUPJ3{N~5PE2H&pv(xAxE9BEIN{em_i3pdO$?7M z>?zZ+5)ib#{)q_5(fc|4*j3>c0@dVlj3XRofTbG){Q` z@ARfE8~wX?MmL_tfiVFY$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_leg.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..653101e63afc2dba2c588d7a13c3c68741ed8d73 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vo2 zPZ!6KiaBp*8TK_B2)No`l53XglxbEHe;^?;r?shhiSI$frX#5l`%;ysaPhO~oZXZ3 zQS8kbn;iAiKlo1>G6wW; z6R$4*BIj`W{dZ~2gEjNcKY#zd!Qg1zdhwv9p8*F{y&I}6bRF8;I(OO2Pv%D-n*Nx?T*LS1h7zOBzTD{RTI&Dy z97x^pqfqAVjI*=Wy-r)nGLb>-|Iw@K&s?8ok!W`*Z)yeShnL>FHl_srD@l22Q7rzL8a89xytY%_^&H1~gIZfq)%j`ctTs{$K4BOh*w_@L0S#7sn zUGP)RVaMxDvbEQZEMBi^@@V+~=y6lA%(Ck220-~Rp8 V{3{I=8-Q`o;OXk;vd$@?2>>Xg?}`8b literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/torso.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_main.rsi/torso.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1bd42ca6cf6a01b57ef981fb9b2d359ff22b4d GIT binary patch literal 961 zcmV;y13vtTP)n>3aA3A zfGY5xD)38UcP5i@a=Dy|#bV}kI+^8iX*QdUXslQ8sqZWJEYdK%)9ILOHfze|@`d|k zGBK;w%Cy_1S#QeSkF;?c9sjYfk#9@hg1KdhewU%UsvXgat?ywd)bkrLy-vin9JRKYKlX1gSm(bX7IK(Y{u4aQjGVtDg3XarjHQNkPDmOaB9+FL(Vsph} z(Sjus2{RgvOr*&P0kbGkqFSw9LglmB%(mi&$V386r&9~o?RGCB;72lfsn_eyVzIdDE_oD-_5dVF`b&_A)F@6rU%3N zU-f$SdFP)A<)5;xzFzZx`&)kJgdW-B&u@JT+r8ladv-le>FdY-U$1GHwtD~O345;R z+?VdZ7-G%P@^%{c6i(^>hngjvWwK=l?*5kk`Q`7e`R#Vc%F9zjVnrFmw}h?sTzv6^ z>4kb;2EPlAH{QDY{`hJ0HQ0Fm`F6VuwaJ}U^R89g`n4}!;^5@}6BKicX8pX7Yc_l3 zOKzT!)mOjpL_}pCynmZ@*6w3FIfZ_F3%z1rB{appH^9>&;J<)X@0FKLEFKLwkb+uc z#MC((j7+lH_r~dmomug(`{<&RX`34__t)7Su%45^yFejv^4GZU;m7XW{$;byP;R-K zylLf;vRfBgwta3athoGY^*_;LvUyvh_T8U1}1VMC4ZH4}aHP ze;xPY^YY#O*)x9J-P5V@^Hb)9qRwRT1Kd)3GUq#LF$fegy}nwe{-EK|*XeH?TcLo$`cfc@K0wH@nPR_D!zGB>PKdmi+JRb3arHPO(g~ rm@%QGZutw%mok$5SVBff=>vychiBo!m>X|_>6*dQ)z4*}Q$iB}Lg8x6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_monitor.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_monitor.rsi/meta.json new file mode 100644 index 00000000000..9f87381cd87 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/wardtakahashi/wardtakahashi_monitor.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3943fac0db8fd59bada58d5a5832f077a5b269 GIT binary patch literal 6832 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 GBmW0Xxc`Iz literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/head-2.png new file mode 100644 index 0000000000000000000000000000000000000000..baf6e438f8192b2d45e70f9f22580e33be77c1ec GIT binary patch literal 6889 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 F_#Y#eCxie1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/meta.json new file mode 100644 index 00000000000..576edfc9c56 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_alt1.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise). Edited by Timemaster99.", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..48cf08df0799c71f1214d1c90ad4b07416d46be2 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRf@0=Wb4*&{aMBZ*OemZFb;cy-*+6wWc6@ zNgA)%f&@ORt{$iPoGYB>Pis2G-SiS+xT@(wO8|5zo1t2c`Iz37?$ z*22|iL26oV#=^9;*E1R-pEce4@Ngb?(Gf1KGZDd=Y^K*u78l99$A{GB8wK-apl$`nP=o>+gwwC$OE`Xg5P?cSpyYpA1tvyf!$7J@^Ck zplXS0L`h0wNvc(HQ7VvPFfuSQ(KRsBH8c(}G_^7@vNAT&HZZUBQ;SOya|;l9OhODTt&AR$B>MBZ*MFVY<3W6eK_C8C2EJ+ zqReJCfh OGIo$7icJmISTLSPEZp5HX~ARX65{Qjj8$mHV!T>|6F_Qwx$WM-MA_B z(+mga1x8mwS)}^en7rTcl*)SZaGu{A!R?)PZHIYtm+84FoV+n>TW!BTI=Lg*)TwZ> ze}+P5>h9RQ1G7_i2j@3bvNN!~n)`nB;|CTEf7}(6K)`)#W&D2D-#wLy+~4LaMF*K! zr*VJl&tYb;y1ZZ1{pROK+fURT;)_VyyZH@Bhy7btM<_CPr4qCfWuDRt5&T&cRhE8glbfGSez?YlxA1eGI5U s18ze}W^QV6Nn&mRLXSy^p{13vrIjhvlIlM>peSJQboFyt=akR{09yQ;Gynhq literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..38b28406ac520501b1c3712c4707cce715612492 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRf@0=Wb4*P_CzoV@Srmw>LKOHYkX+JnW7(kTBk$ zA?h7qaN=fG5>rQD_y5(E;-7Yv3jtL#F#H#n`E%_`YC!NDKJLCeshPKa`LEhEsmt~U z=WYwl)pnb}iWv57t9z=idgnFUInKTF7F^~(Q^xF`YoqBUCI zZ#;h&8tM9WCNEgkhmBvg>op(7nHTs;d}V2_OV}oD(e;(Z`b&lE&ckJU?*SF5mbgZg zq$HN4S|t~y0x1R~10xe%12bJi;}AnrD-$CtV-sxy11kdqUFYB`6b-rgDVb@NxHZJc yy*>uipaHj`Br`X)xFj*R0HMbu#L&{p*wV_>6k^HU?(_>Fr+d2kxvX~=c< literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-1.png new file mode 100644 index 0000000000000000000000000000000000000000..72a1d92d83f62f96c802c53ff862a40f432eb554 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LQS47jv*QM-rm?K*r34E`tX5Rk^=?1-dG!hJs+FnQy&)5GvZQV_ zRx?a=?b~9uF7B;|cLjH&tj$y=plXIc-h1^6{`VcvYX5!jfbD^MKeyb{+Zv~Mf&a^= zFI?*v88S5N5}v$Hh3`dJK_gJPYKdz^NlIc#s#S7PDv)9@GB7gHH89gPG!8K|wK6fX zGB(jRFt9Q(&~*;3LeY?$pOTqYiCaUA-0NdN4H|G8N-}d(i%Sx73lMrtLJTdfj4iE9 XO(B-t?M}Y{)WhKE>gTe~DWM4fZ%%_o literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d61d58b478abf8b0d8400a4873add0d512ed9bfe GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LiL_5jv*QM-rm^F+hD-c@{l{af;BCH z-|f^4O^JqSdOQsVl@pjg*5~?dda9?+$iPr@{7=!klhc0RTfgkmf|DXs<$^o|)ucBz zY~>+L*o!bQ!5iAD`OLF z0|P4q16}9fDijU5`6-!cmAEy;$h|%W)Sv;kp(HamwYVfPw*aBXB*f6t%GlD%)D&XL T-R|@YKs^keu6{1-oD!MB&B{Au*P1vvJ8|DRcq${)JuxxS+5giE&pi!JM+NJm6<@vCaNcF||JC>RoH=(+ z%($Tg2u{>H{EIu&`u}8;^pXUwPHCM@Nm2jSzx&WO@2Jp=o6Pek?kIU|q!n=cz_x>2 zIhGr&v@^Fe9k9-SIRD9wO9wJ_o>W(s-;BA_d1Tf_v7RHTUmQ}CyZ1M34E6nbpk=Oc z+(BjjjRJxo@N;unEAzDN>IG_x1+TvlUov68`j4RbxoY=B=G6Bou9i=CS(;&zt*B;N&Yt#WLH6p+ z!WZTp_|ACgb}HK$p>?XjAX6=IjVMV;EJ?LWE=mPb3`Pb?4J45&c^ZbM0CZfbE!Vr~IKk4cE3rIoRzm8mJj VlDpmM7l3*gJYD@<);T3K0RZ?Y%`5-_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_leg-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/l_leg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..89106d6420b51af0765861f1f4035871a3081924 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-Lj7#M{-T^vI)?!CRSFptSmfbBuOM{Tpx zcNX7wmhS{3+H-yRFSFc!XT5;KLuL_E>xi4S{F}9EKOEOhn8H#t_oNUbcX8_RduuK==1uBj zH#54h>Y~3vKEscxh0Xew+Za-&NCa!gS-x}02yD_UA}^B2io^3Sl?EbGT(4%U!E-I zjbf(7=66nt#P_k>DQ>zXTqAJ1UF=88au&vFzl19e{`0SX=UQXg7|8to($UF_xh&K- zyk!(v?;3^aix%nxXX_dG&#K^rq2GpPdx1l66H?_DVF}DDr$0Wqi(#qJ<%G4BM$=&Ys Q3qU;#p00i_>zopr0ABRJX#fBK literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/meta.json new file mode 100644 index 00000000000..35c1cad74bd --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/meta.json @@ -0,0 +1,82 @@ +{ + "version": 1, + "copyright": "Sprites originally from Paradise Station (https://github.com/ParadiseSS13/Paradise). Monochromatic version made by: DayOS (https://github.com/Day-OS)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "l_foot-1", + "directions": 4 + },{ + "name": "l_foot-2", + "directions": 4 + }, + { + "name": "r_foot-1", + "directions": 4 + }, + { + "name": "r_foot-2", + "directions": 4 + }, + { + "name": "l_leg-1", + "directions": 4 + }, + { + "name": "l_leg-2", + "directions": 4 + }, + { + "name": "r_leg-1", + "directions": 4 + }, + { + "name": "r_leg-2", + "directions": 4 + }, + { + "name": "torso-1", + "directions": 4 + }, + { + "name": "torso-2", + "directions": 4 + }, + { + "name": "l_arm-1", + "directions": 4 + }, + { + "name": "l_arm-2", + "directions": 4 + }, + { + "name": "r_arm-1", + "directions": 4 + }, + { + "name": "r_arm-2", + "directions": 4 + }, + { + "name": "l_hand-1", + "directions": 4 + }, + { + "name": "l_hand-2", + "directions": 4 + }, + { + "name": "r_hand-1", + "directions": 4 + }, + { + "name": "r_hand-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0409bb02fe10e39a0aa15711986a2ec0eee3c974 GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LT5c)978hhy}iCrwAn#`<$`6LOVkdt zMVXJK90J(+CI)>7Y2dOGa}?gu$tMsoaj(mna+y7;`S0gSIJmg{6P&p|ZDVYfg;h?L zOY-foq?ES?jk6}64BGy*=fwqwCp~4$-@W1xnr^W0&%ghHNr!~C8SmI*&&RO-#i8%g zFAnwk^E{WYy3?@u*6ip9h0J|f>!nuQur|A}*lK?MJ7obuAehK}%;IhHm#&v?{8dN4 zY)z{F$+vz+-n1M4tUR8279D*aKF{&)g@*h9^S~Kmf)j1xc3<||V9B9S0`!<_iEBhj zN@7W>RdP`(kYX@0Ff!3KFw-?O4ly*fGBL6;HqkaPure^vbq=mV(U6;;l9^VCTSJW8 y>tjF-8gLs*GILXlOA>Pn5PD2P3@xpUEv-yVA(q_jPQL)u!{F)a=d#Wzp$P!}wWVkP literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_arm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..061988dbcd42c494755607ae168b8f38b53a7e1f GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LdQK_978hhy}iDXx7k31<-%dFiK2Vl zvaTgCay=_>pBVUJX2U7wB})@Hcg+`SosiJt*EgkF_SmnQ+dC{ATwLlVMqZo6IB~;@ zjtOQPo7|l<7Bsp~HQIPIW!{B`<0)^C?TB7qzfDkeVWW_8TJ`4oU50>RnrA?0dGY{r#31 z^VT?3?>k|6bFz%_3jI6F#qTVbrvg%aVtxfv^i%V#jb2_8fnHKAag8WRNi0dVN-jzT zQVd20MkcxjX1a#PA%><_CPr4qCfWuDRt5&T&cRhE8glbfGSez?YlxA1eGI5U18ze} qW^QV6Nn&mRLXSy^p{13vrIo2E#FD$+=@)={7(8A5T-G@yGywoH4X7~y literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8b2b141aac76424ec9435115ceb6125ca20be5 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LfM`!jv*QM-rhLKc|bwH<>EoTZ3fvJ z0{t@&HMjb3ajaONV)>^$L}J?Bw;n*%3=DrlE&e11S?qp&gyZ2l8wo|*`EO3UhQ2++ zbR{ITF*LO@F|sl?(Kax!GBD6}4z5Dckei>9nO2EgLyX+( xV?YfWa2rZ8b5n~;5_1a>dQ3tLEv<|#txQcJmfY=5zW~(3;OXk;vd$@?2>@94a>@Vz literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..74d17c3c7344fc756198dfaaa2b12d86523f883f GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LRp?Jjv*QM-rhLK$)L#Na`B*E&~5ElOQ!uU3^o9^dI$_ZJ^?)(s3$_G@UTH+c}l9E`G zYL#4+3Zxi}42(>44a{^6jYAAgtxSxpj7_u+46Fe2^izS~{XWBt6gTv}t&)>D^jx2^L(@F~ck zvsRAbULix8r3#-szY@@y45}rr5hW>!C8<`)MX5lF!N|bKMAyJf*U&h`(A3Jr$jaD6 z+rYrez(ChIxC%u>ZhlH;S|x4`F>9ZF$poWv@*7|GBt%* Ua<@DE0#FZwr>mdKI;Vst0ByB;-2eap literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4e6c3e1674f9c6d2b59c2ae1c7e55ae35c3caa GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$LUo=ljv*QM-rm^A+n^xO`j9<(LzD3a zc4b4gR^}U*5?2ceEwbGDV?UoqU-{FyK-)gppPpWNJ?(Z({Qdd;u91!hAG}_$V9lkw z@k}b=(I&6#R&9H-Y|^a_t9gKCGi*rSs%i0QaeMmgrk^hkGq^_Hep^{qEq9uipaHj`Br`X)xFj*R0HMbu#L&{p*wV_>6k^HU S?(_>lJq(_%elF{r5}E*5c7D46 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/r_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef9033cc0f5c4d42fda7abc5c1240c5d5f000b4 GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-Lj7#M{;T^vI)?!CQXnC0Xs!1h40Qrtsz zp2G*3_Z&CRT|0Gy^}m=xd+8`kPd_FPz11R8xyhk5701)no1%k(K+iMg8Z5Kr{bmEPN8# z;jw?hmnYl)`OY#;tDI*?3@xsg}4#l%yn~>+L*o!bQ!5iAD`OLF z0|P4q16}9fDijU5`6-!cmAEy;$h|%W)Sv;kp(HamwYVfPw*aBXB*f6t%GlD%)D&XL T-R|@YKs^keu6{1-oD!MtS57qP zHi_D#qsH+>Xt%QpIhN%w_5SXMZuS)mhni>0Dh;`S$R( z|F5OLOL`~gNSaCjgG;ru)Tkvdue;C`~+T;#>Q8V&P|AsUC_LN{buQH@tYGH_MN_5zk&C*y=S13E0-1! z)QKEFYp?S6Ls@{5_>*!y@c z7u)?mao~WC@@3}f`N}7Ho4dDUaXK7W_bHt9xW>P^FZUkho}07Mze-`%cdoeYlRdc_ zU$iR8EEkZf*sVPOuGIgAz{Szp8S@ua3veIcT)#{~koA!W%K??;ik7VP3@=hE^$xB- zYd?w2=EPz)H>Uny0UN|EJ__Go9sTfqu>8C$o#FfjPruki%=qD_v+qo!+etr1?l{v= z@!hH+Q1C}sWwq&3gHWT?<;;S`wx!diOh^fo;+$(?*t+(l;9|d|=qQ7>ovZuj*4=#Z ze&Po2iPe(JpA{{cUL*W&>I9wB$*%W3-+b^g5ZVxtS^93{CY}t@IU+K;e^j3@-oK;s ziPD>;!t3Mxt-P+dYt|M?tPW;q%&52O39>ltc<^M6$HcddH?Bt~X~=E*TQI}vLfxck zi3cLZjHPt+s#PsEn#>QG|M}ME=BDrs5q>*&*%us2>YNm0cV{irk%lkkL8gLs*GILXlOA>Pn5PD2P3@xpU aEv-yVA(q_jPQL)u!{F)a=d#Wzp$PyB@m2-^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/torso-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_main.rsi/torso-2.png new file mode 100644 index 0000000000000000000000000000000000000000..70271b0c3a2c5679cfb028d25a26a8aa94f9f7be GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;rX+877l!}s{b%+Ad7K3vk;M!Q ze1}1p@p%4<6rdn`iKnkC`wKQcVRds=m)-M$np`|x978hhy`6D3_pyP1+kFW=m0hP& z4IH!**sBA?&y_7?y~C(2AP_f2>d9)}B@=EkYyMYQmLhZ_ZW{jv6^}n{&V21^oKwA) zep>vdbZyHL`>heC6?0^|wemM|t$CrU+7@U1u;_g8BGxrlK>E`5o?lBJT4j0f_}5eS z`$wtzUcO&y49)Xih&fHYbX%f+_lo;Ab$7GX)!E*fhTLDzx9t6|>he!tw)EUGdKGur zR-IvU-TK9SR<}>QX;l8Md*W=f@>~g<2Zr6hj^1d~`8QYcf42UYU17DG*qy%m9XRs@-6uGJB&0(+8IS%ik2*Y!u#LB_EXX-QmV{X(z3BCsM_OFWiYZ zU68P=aPh%}&F)R1&c(rBr)W$sNMN^MY<@W5?ys55Y{I%re-&&_S#Z5=*^e1VlQS|R z&MjtTugbOHu9&kY{rREY79S5pPK)*EV^mj4|9OGAZPLydhQp2gw%r|*GZ)@*{-Tz( z^nd&Hm*)1p+EY*cKOFC4p|s@evz?s4B&J&88c~vxSdwa$T$Bo=7>o>zOmq#*bPbI| z3@xloO{@&fwG9lc3=FOsH728I$jwj5OsmALVM)H_eV_&nxD6$lxv9k^iMa&`JtiTB dmR81=R;H#9OYU~3UjXW1@O1TaS?83{1OTF{Uqt`_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e48ad79298c6e13b4296e34a13b53acbae2d7c59 GIT binary patch literal 6857 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/head-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bf1903f4bcc911f1c41ae013d3a156f7e752136e GIT binary patch literal 6466 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 KVN+t|6ZJn^tZj4v literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/meta.json new file mode 100644 index 00000000000..9d2654d15cb --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/xion/xion_monitor.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "copyright": "Sprites originally from Paradise Station (https://github.com/ParadiseSS13/Paradise). Monochromatic version made by: DayOS (https://github.com/Day-OS)", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/groin.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/groin.png new file mode 100644 index 0000000000000000000000000000000000000000..29ae064b0d64cb554d41e5663ab8f75afcf5002f GIT binary patch literal 5522 zcmeHLX;c&05)L4NK@A`eL_mo_QGu)^AqhdYuxgNfSLt**p@A$UAw+bP$KtNIATEQ0 zBQPL{h=2-iAcFgX3yy;@DlQ|U2&gy;`Z@s>&zp1J@timR>^`0DTes@FRo|^!w>xVB z1AHbLSQwyCsEK~QoM7bcroQyi$Zr{(+=)Wzx~7FjDuRJjtW+iuz)28Ru|x`CAr&k@ zp;W&=kBpHy%$hJPG>y`pq~9o0?Xz<}*DvP`&hM#`6!*mZk>QMjYT5jc%8xgXwe+?p)+-mTCbkV0+$mGG ztq*$@8`mu(c30(wG#%A4Ce))#!}mUzm3~d`bl3D)8qa<|qpQJXpK&IkaQ-^hl;HzcEvnw5a>&2)Y`g?UR1ZwNVZP*g{OX(&5ah~BuH-BMaj0{O`xZ`_fJjn_vioN3n zuDw3x!s&QS{3=HslP&(i(#&e~A(>f^^<~qgrSrBp;JiZ1s845Zi!I9C+q|21yNFpD zA9SmXyOc|d*jJoTQG2WN=u8F|E{4l1YCES_>(qhDv+13BIn@45qzl)Ad@O(Dy}!hU z^7d6G-&c2`Hv5h@?&SN~>S;$iN;R(|;06rIc^ zChJ-=k2Op#ymD94XGT5Mwc*soSZVjkb9a3@=Ypao=DSu^J^NRE5P15jqj0p)o zg>B*Q0nky^9hzX@Qz*|eT6p=j zTkKDTk^a$dEDk3J-^V58Bzbpq2e(h__hGX@w`!buFDo%Iu+Bkm;!FEAEv?SIy*uEW z^#g~lZ8B+F)E|{7Gxbf4^&Y4)(BIFk${1&|v2g9evIeUKE*^hW;4^g(+HS|PQCgl? z=vG$D4V6k8&bydSaHg{|CAz3d*V;1chx7HzPDJnsCZ9a7f{ zhlegN239q0uB|iH+89_cS~pyT902w zvxz$1F^o6sJ~n9a^OVWk*Gp@x+)|vP@a67H`72T4_uAf=mFJ(KKR{MLOztm9o^hR1 zpWpnk-De8}&(HpRz@ zUwLl(iMCr^JqhQ03>8fD#?>}@7JYh)PS)t0Xt?H%R=gyJzr4NKW;{5p`*lWJU-}|U z#mUeam-UY+GIfsDGsj2$pp(ZbJsRrz_8$Cj7Q4JB*(1nms%?+nna8Hx|0YJVuQfS{ z^TJE3~stY%E+I`dGquzVjx$ zy4nMU(#nQCJp=tbJwKIFq=4rCxY@zi4ZE&4v#d__N3-<(7Kko(G z#rddC;XVJv_x34qZ??XQju}5yYq-6kIVEQ6VEVM~rUDjxA?qvO)IFMT#yWzSf5!bv z`%~;1Wkie1WpN~6irPItjtfpbK8r5_VLnUq$fHwf01x2dK`M!ir&8!ncz`Kz#5+YlCKF)N z0fy5Uhy^kj$x0w;tXFC%J_1FfJ2Gh$8i)rO3?2eS72p{VkB%pisC)*A#NgBE6b%#~ zWO++uA^@3ASOf?mqEsx@bf^huxd-~W;3x#r7fE0epb#Ji$Qppfd`YVOOIIi?f2lkN-4k@1&kL?de|1WF!hjWm;B&0@l0HOqnpfFmKu0VTxO_=#YRbb;}J zSO_8YV>Dqu$>G0A1_s@cN+*M4Jdebr;i)7V1J4AICY9>MVA5%1h#>&JMwd$jic~-b zxeE~<5w4H~)o_KKJvvo$zSd8Tht%_cP=+Tl@M9>$5l4e1sw>8)XxYU7;)AVG7*k>p zyAc^ux{yjp{9Fo0`BE31fAAQchktMc1p50R-^A~Cy1vu(O$>aK^7riePS-av@J-6! zv+Msxm%*2hDM*aG0i`0JO5)`<#>i(Dnm5mfgYws$<6;aE$q!QBC^-s+IitR`w%KDW z5uu*KkL#uPr#^ZzifXAVn1qNL{W$KS$RCiulQB)$32s59_1P|-n1(CESMTlC;m0{S z?zZwuaNbl?6a3*P2OK{s*I^?9t2qvw85A3Bre7Vnkv6BfICtoX;qe2B)sbNf^?{{_ z9pqXkWI80g+y-0 zlN0vtl8dKji9%fxJnV6zUADqHaQ&)*&Kxsw)o^i8;?y*G_|ONo&_WA^k}?gS3d7J& S6MR>zA^f}oI0ro9GX4YG*1?d8U7c7V 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 W*3v=I13XwL#NOJ4RAsq6?tcI=B#w&! literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/head-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/head-2.png new file mode 100644 index 0000000000000000000000000000000000000000..14e7e83c2fdbcc9c65205c02ae586db287e21ed7 GIT binary patch literal 6535 zcmeHKdo+~m_a7;Q$T?Cj)ik=G=02DiM7b2X--T)}?=Xy+X=a#lDY-^2Nv95?DA%Y+ z2`MFYR3bvI3Ax`Q6-j>Ys8gNw`>yp{XRY7&zh=EN^FI68`}6Gm*?T|hd7`Z?_pFjs zl7v7Yt4#MA*@FKD!mq?~@E3BZ%mD(C=nb%U=Gl_?P&S7}qcZ>~&z}uI0Rf!`fe6~i z|8({1B+3{s5>9Lgon1~)xm)O1pMJbs`46|E^@FcQXGSVZ6BEsPMeh+HGF@NlE1MT$ zD%Z95+n(LOUwv(GUX}t;`+fQ1r@0SK#O^_)-nH3UuJYxHn=7qAxr3d5=^b9l&*^UpkLNnmN$4C_53ft3DNFNPbe!z<}@s? zRYn?@Z&W+FVMgT4%e2K$W%IF)lJyC*>NWko3)5xq=Dh7Khq~Y8?Bw_KajiGrGQMz; zwdml~+=o3dV=v+BpBljJ??lHNC;GUr&pxwn_JYgqx}2%J!hqcozHRYg^8=#nJgcK~ z6U~#{w4-FQWXFo0t>KEj{?3=e6==B6iAO5LL>{lWzNt<$@I(&~qu){DU0&=84E8H3 z>BjhH2hI20)!Ef-dw)LvE;+(|lXD^ZK|(PrG9>Edw%obpv*YjP>e+G7B>0oFu(*5i zfzhWHPMWQjeSRt=c{DBTKua-X6L~Ziy)zV&JC}51>d$cKtKVxR4c5OfO-C8r8&pv+ ziIjf~TdCRFVlEdP8L1)|6Ih}}qgD3F7jAk9*`6gGyx9TY#I02ybi4j0#dTuKS$mGU z@rgAL5jKgZcNiO8#tmz>*mL0yURSPsP}ra8IpCObqkaEqnx4*fK8-Inv$HBnHEzsA z5i{a>$!ZAuqPEyP*|((4$@#F2zN5?a5wCn!Wk#c=&g6CAWtX2*ZgvB`vB20kUuzuM zw81&}Q;?|UV!DEit(NtH+$sAvJ}X)Mo0Vx01-EG^LQEuFCbG@ph}r!FZ0%KrniDE0 zj56)1G8vjwBI~lC?1$)#QsONB&a`Y4@2r}H4N8}@U>~u}gBc|StDc3mrbQ?;ZBIO+ zv|sj2@XX~4*REcBWkUW#zWIEK5n!A0;aS!2wD0N-?xy~wgDoig7DVW|@`W7@PGjuG z+wZH#?7mFgOns&n?V?Fgu=6&b-0^m?I<#J_G`O&MX6qk4#UyvKL(4?;%8vMKr#Ni6 z=Ee9bS13d2;zVa1%5>~<6GK)r@sPPEvEt4sEdTL&?^fhidG{T-_-m@h*I+60Rbjp# z##T&@jt7}I?66g^I((~WRLPsc4jl}?_wZSLfh$G*T~cs}+qt)!46_` z&Yo)3S*%_ZBPP}MyzoXr@#;C{g+kQF3QD7Q+Z)ANF#|KhJ*Yn>B(8TLfNPr6XSbq@ z)s!%M=yGi+-0A_iw%HM>V`EPY&Qj_r=OAlu8s_&DtqfSF(|^WV5M*WgTpr#KQ@m81FR~UKY=(FID%~F+c6^owPno_Zl zz#D~QnL~=5RkE$5@Fyk>oKU^fQ#08+SJ3-DZpL>d;$0)AVnrt+4vu1itR5$;UNcTt z1vaot_mluIeCX6FAYq}GrH^^9`*G-SOM93G5Q(RH0HKi{_lN7a<*nA z54YKT*j%#O_Cw7L28Jwdo;A>?;No=deu!?M!0@t5lgqXMuWFT#%-zW>ZTG|e_)h0D z54ozMPaRu5gF-eRt%(`}ksZu(Py zGi~&&crMzRDT9ldg^N`le@%YX8hc+6=hPF!4 zb?EKutkxF#Gi{K*CmpI-NvaS2q;ZV0N0n@pLcWm3BU)6n=L;Ni4`KN;;;VuJ+8 + /// How long it takes to kill the entity. + /// + [DataField] + public float DeathTime = 60; + + /// + /// How long it has been since the delayed death timer started. + /// + public float DeathTimer; +} diff --git a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs new file mode 100644 index 00000000000..33517bc0480 --- /dev/null +++ b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Mobs.Systems; +using Robust.Shared.Prototypes; +namespace Content.Server._Shitmed.DelayedDeath; + +public partial class DelayedDeathSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + public override void Update(float frameTime) + { + base.Update(frameTime); + + using var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out var component)) + { + component.DeathTimer += frameTime; + + if (component.DeathTimer >= component.DeathTime && !_mobState.IsDead(ent)) + { + var damage = new DamageSpecifier(_prototypes.Index("Bloodloss"), 150); + _damageable.TryChangeDamage(ent, damage, partMultiplier: 0f); + } + } + } +} diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs index 9ec90434327..d20cdb5a6b8 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs @@ -21,8 +21,8 @@ private void InitializePartAppearances() SubscribeLocalEvent(OnPartAppearanceStartup); SubscribeLocalEvent(HandleState); - SubscribeLocalEvent(OnPartAttachedToBody); - SubscribeLocalEvent(OnPartDroppedFromBody); + SubscribeLocalEvent(OnPartAttachedToBody); + SubscribeLocalEvent(OnPartDroppedFromBody); } private void OnPartAppearanceStartup(EntityUid uid, BodyPartAppearanceComponent component, ComponentStartup args) @@ -131,7 +131,7 @@ public void ModifyMarkings(EntityUid uid, private void HandleState(EntityUid uid, BodyPartAppearanceComponent component, ref AfterAutoHandleStateEvent args) => ApplyPartMarkings(uid, component); - private void OnPartAttachedToBody(EntityUid uid, BodyComponent component, ref BodyPartAttachedEvent args) + private void OnPartAttachedToBody(EntityUid uid, BodyComponent component, ref BodyPartAddedEvent args) { if (!TryComp(args.Part, out BodyPartAppearanceComponent? partAppearance) || !TryComp(uid, out HumanoidAppearanceComponent? bodyAppearance)) @@ -143,7 +143,7 @@ private void OnPartAttachedToBody(EntityUid uid, BodyComponent component, ref Bo UpdateAppearance(uid, partAppearance); } - private void OnPartDroppedFromBody(EntityUid uid, BodyComponent component, ref BodyPartDroppedEvent args) + private void OnPartDroppedFromBody(EntityUid uid, BodyComponent component, ref BodyPartRemovedEvent args) { if (TerminatingOrDeleted(uid) || !TryComp(args.Part, out BodyPartAppearanceComponent? appearance)) @@ -159,7 +159,10 @@ protected void UpdateAppearance(EntityUid target, return; if (component.EyeColor != null) + { bodyAppearance.EyeColor = component.EyeColor.Value; + _humanoid.SetLayerVisibility(target, HumanoidVisualLayers.Eyes, true, true, bodyAppearance); + } if (component.Color != null) _humanoid.SetBaseLayerColor(target, component.Type, component.Color, true, bodyAppearance); @@ -170,7 +173,9 @@ protected void UpdateAppearance(EntityUid target, { _humanoid.SetLayerVisibility(target, visualLayer, true, true, bodyAppearance); foreach (var marking in markingList) - _humanoid.AddMarking(target, marking.MarkingId, marking.MarkingColors, false, true, bodyAppearance); + { + _humanoid.AddMarking(target, marking.MarkingId, marking.MarkingColors, true, true, bodyAppearance); + } } Dirty(target, bodyAppearance); diff --git a/Content.Shared/Backmen/Surgery/SurgeryStepDamageChangeEvent.cs b/Content.Shared/Backmen/Surgery/SurgeryStepDamageChangeEvent.cs index e8f0a34cde3..bed056c762a 100644 --- a/Content.Shared/Backmen/Surgery/SurgeryStepDamageChangeEvent.cs +++ b/Content.Shared/Backmen/Surgery/SurgeryStepDamageChangeEvent.cs @@ -1,6 +1,6 @@ using Content.Shared.Damage; -namespace Content.Shared.Medical.Surgery; +namespace Content.Shared.Backmen.Surgery; /// /// Raised on the target entity. diff --git a/Content.Shared/Backmen/Surgery/Tools/BoneGelComponent.cs b/Content.Shared/Backmen/Surgery/Tools/BoneGelComponent.cs index 0348852ad15..16143efef97 100644 --- a/Content.Shared/Backmen/Surgery/Tools/BoneGelComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/BoneGelComponent.cs @@ -8,4 +8,7 @@ public sealed partial class BoneGelComponent : Component, ISurgeryToolComponent public string ToolName => "bone gel"; public bool? Used { get; set; } = null; + + [DataField] + public float Speed { get; set; } = 1f; } diff --git a/Content.Shared/Backmen/Surgery/Tools/ISurgeryToolComponent.cs b/Content.Shared/Backmen/Surgery/Tools/ISurgeryToolComponent.cs index c61236dd303..eb25b80901d 100644 --- a/Content.Shared/Backmen/Surgery/Tools/ISurgeryToolComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/ISurgeryToolComponent.cs @@ -8,4 +8,11 @@ public interface ISurgeryToolComponent // Mostly intended for discardable or non-reusable tools. [DataField] public bool? Used { get; set; } + + /// + /// Multiply the step's doafter by this value. + /// This is per-type so you can have something that's a good scalpel but a bad retractor. + /// + [DataField] + public float Speed { get; set; } } diff --git a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolComponent.cs b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolComponent.cs index 3a4f65de1dc..198f62477e4 100644 --- a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolComponent.cs @@ -14,3 +14,10 @@ public sealed partial class SurgeryToolComponent : Component [DataField, AutoNetworkedField] public SoundSpecifier? EndSound; } + +/// +/// Raised on a tool to see if it can be used in a surgery step. +/// If this is cancelled the step can't be completed. +/// +[ByRefEvent] +public record struct SurgeryToolUsedEvent(EntityUid User, EntityUid Target, bool Cancelled = false); diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index c4bfda9fa30..e946f854623 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -27,7 +27,6 @@ public sealed partial class OrganComponent : Component, ISurgeryToolComponent /// Shitcodey solution to not being able to know what name corresponds to each organ's slot ID /// without referencing the prototype or hardcoding. /// - [DataField, AlwaysPushInheritance] public string SlotId = ""; diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 819666d0b0d..a6b54ed9dda 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -394,6 +394,7 @@ public virtual HashSet GibPart( if (IsPartRoot(bodyEnt, partId, part: part) || !part.CanSever) return gibs; + ChangeSlotState((partId, part), true); RemovePartChildren((partId, part), bodyEnt); // We have to iterate though every organ to drop it when part is being destroyed diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index e495ca3f745..94022f6b84f 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -44,12 +44,14 @@ private void AddOrgan( if (organEnt.Comp.Body is not null) { + organEnt.Comp.OriginalBody = organEnt.Comp.Body; // Shitmed Change var addedInBodyEv = new OrganAddedToBodyEvent(bodyUid, parentPartUid); RaiseLocalEvent(organEnt, ref addedInBodyEv); var organEnabledEv = new OrganEnableChangedEvent(true); RaiseLocalEvent(organEnt, ref organEnabledEv); } + // Shitmed Change Start if (TryComp(parentPartUid, out DamageableComponent? damageable) && damageable.TotalDamage > 200) TrySetOrganUsed(organEnt, true, organEnt.Comp); @@ -250,6 +252,8 @@ public bool TryGetBodyOrganEntityComps( return false; } + // Shitmed Change Start + public bool TrySetOrganUsed(EntityUid organId, bool used, OrganComponent? organ = null) { if (!Resolve(organId, ref organ) diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index 84e0342ea66..4ba07b2531a 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -727,6 +727,18 @@ public bool CanAttachPart( && Containers.CanInsert(partId, container); } + /// + /// Shitmed Change: Returns true if this parentId supports attaching a new part to the specified slot. + /// + public bool CanAttachToSlot( + EntityUid parentId, + string slotId, + BodyPartComponent? parentPart = null) + { + return Resolve(parentId, ref parentPart, logMissing: false) + && parentPart.Children.ContainsKey(slotId); + } + public bool AttachPartToRoot( EntityUid bodyId, EntityUid partId, diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index 666fe3f4514..810d947dc46 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -340,4 +340,34 @@ public bool NextItem(out EntityUid item, [NotNullWhen(true)] out SlotDefinition? return false; } } + + // Shitmed Change Start + public void SetSlotStatus(EntityUid uid, string slotName, bool isDisabled, InventoryComponent? inventory = null) + { + if (!Resolve(uid, ref inventory)) + return; + + foreach (var slot in inventory.Slots) + { + if (slot.Name != slotName) + continue; + + if (isDisabled) + { + if (!TryGetSlotContainer(uid, slotName, out var container, out _, inventory)) + break; + + if (container.ContainedEntity is { } entityUid && TryComp(entityUid, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + _transform.AttachToGridOrMap(entityUid, transform); + _randomHelper.RandomOffset(entityUid, 0.5f); + } + } + slot.Disabled = isDisabled; + break; + } + + Dirty(uid, inventory); + } + // Shitmed Change End } diff --git a/Content.Shared/Smoking/Components/MatchstickComponent.cs b/Content.Shared/Smoking/Components/MatchstickComponent.cs new file mode 100644 index 00000000000..0d8c91bab5e --- /dev/null +++ b/Content.Shared/Smoking/Components/MatchstickComponent.cs @@ -0,0 +1,32 @@ +// Shitmed Change Start + +using Content.Shared.Smoking.Systems; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Smoking.Components; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedMatchstickSystem))] +[AutoGenerateComponentState] +public sealed partial class MatchstickComponent : Component +{ + /// + /// Current state to matchstick. Can be Unlit, Lit or Burnt. + /// + [DataField("state"), AutoNetworkedField] + public SmokableState CurrentState = SmokableState.Unlit; + + /// + /// How long will matchstick last in seconds. + /// + [DataField] + public int Duration = 10; + + /// + /// Sound played when you ignite the matchstick. + /// + [DataField(required: true)] + public SoundSpecifier IgniteSound = default!; +} + +// Shitmed Change End \ No newline at end of file diff --git a/Content.Shared/Smoking/Systems/SharedMatchstickSystem.cs b/Content.Shared/Smoking/Systems/SharedMatchstickSystem.cs new file mode 100644 index 00000000000..684a9647066 --- /dev/null +++ b/Content.Shared/Smoking/Systems/SharedMatchstickSystem.cs @@ -0,0 +1,18 @@ +// Shitmed Change Start +using Content.Shared.Smoking.Components; + +namespace Content.Shared.Smoking.Systems; + +public abstract class SharedMatchstickSystem : EntitySystem +{ + public virtual bool SetState(Entity ent, SmokableState state) + { + if (ent.Comp.CurrentState == state) + return false; + + ent.Comp.CurrentState = state; + Dirty(ent); + return true; + } +} +// Shitmed Change End diff --git a/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs b/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs new file mode 100644 index 00000000000..0c2ff64722c --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs @@ -0,0 +1,57 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Popups; +using Content.Shared.Smoking; +using Content.Shared.Smoking.Components; +using Content.Shared.Weapons.Ranged; +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Events; + +namespace Content.Shared._Shitmed.Medical.Surgery.Tools; + +/// +/// Prevents using esword or welder when off, laser when no charges. +/// +public sealed class SurgeryToolConditionsSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnToggleUsed); + SubscribeLocalEvent(OnGunUsed); + SubscribeLocalEvent(OnMatchUsed); + } + + private void OnToggleUsed(Entity ent, ref SurgeryToolUsedEvent args) + { + if (ent.Comp.Activated) + return; + + _popup.PopupEntity(Loc.GetString("surgery-tool-turn-on"), ent, args.User); + args.Cancelled = true; + } + + private void OnGunUsed(Entity ent, ref SurgeryToolUsedEvent args) + { + var coords = Transform(args.User).Coordinates; + var ev = new TakeAmmoEvent(1, new List<(EntityUid? Entity, IShootable Shootable)>(), coords, args.User); + if (ev.Ammo.Count > 0) + return; + + _popup.PopupEntity(Loc.GetString("surgery-tool-reload"), ent, args.User); + args.Cancelled = true; + } + + private void OnMatchUsed(Entity ent, ref SurgeryToolUsedEvent args) + { + var state = ent.Comp.CurrentState; + if (state == SmokableState.Lit) + return; + + var key = "surgery-tool-match-" + (state == SmokableState.Burnt ? "replace" : "light"); + _popup.PopupEntity(Loc.GetString(key), ent, args.User); + args.Cancelled = true; + } +} diff --git a/Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs b/Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs new file mode 100644 index 00000000000..1d4d9325a63 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.Medical.Surgery.Tools; + +/// +/// Like Hemostat but lets ghetto tools be used differently for clamping and tending wounds. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class TendingComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a wound tender"; + public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; +} diff --git a/Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs b/Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs new file mode 100644 index 00000000000..0b5f6f65e07 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.Medical.Surgery.Tools; + +/// +/// Like Hemostat but lets ghetto tools be used differently for clamping and removing organs. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class TweezersComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "tweezers"; + public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; +} diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 8748e9eda0a..6979c72bd80 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -126,6 +126,12 @@ groups: - id: Alcohol rateModifier: 0.1 + - type: Liver # Shitmed + - type: Tag # goob edit + tags: + - Meat + - Organ + - Liver - type: Item size: Small heldPrefix: liver @@ -139,8 +145,7 @@ - type: Sprite state: heart-on - type: Organ - slotId: heart - - type: Heart + slotId: heart # Shitmed - type: Metabolizer maxReagents: 2 metabolizerTypes: [ Animal ] @@ -148,6 +153,12 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Heart # Shitmed + - type: Tag # goob edit + tags: + - Meat + - Organ + - Heart - type: Item size: Small heldPrefix: heart @@ -163,7 +174,7 @@ - state: kidney-l - state: kidney-r - type: Organ - slotId: kidneys + slotId: kidneys # Shitmed - type: Metabolizer maxReagents: 5 metabolizerTypes: [ Animal ] diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 18e5e925c45..6fa0f878e5f 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -34,6 +34,8 @@ - type: Sprite sprite: Mobs/Species/Arachnid/organs.rsi state: stomach + - type: Organ # Shitmed + slotId: stomach - type: Item size: Small heldPrefix: stomach @@ -63,6 +65,8 @@ layers: - state: lung-l - state: lung-r + - type: Organ # Shitmed + slotId: lungs - type: Lung - type: Organ slotId: lungs @@ -109,6 +113,14 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Organ # Shitmed + slotId: heart + - type: Heart # Shitmed: Lets you transplant spider hearts into other species + - type: Tag # goob edit + tags: + - Meat + - Organ + - Heart - type: entity id: OrganArachnidLiver @@ -132,6 +144,14 @@ groups: - id: Alcohol rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink + - type: Organ # Shitmed + slotId: liver + - type: Liver # Shitmed + - type: Tag # goob edit + tags: + - Meat + - Organ + - Liver - type: entity id: OrganArachnidKidneys @@ -164,9 +184,17 @@ layers: - state: eyeball-l - state: eyeball-r - - type: Eyes - - type: Organ + - type: Organ # Shitmed slotId: eyes + - type: Eyes # Shitmed + - type: Tag # goob edit + tags: + - Meat + - Organ + - Eyes + - type: Item + size: Small + heldPrefix: eyeballs - type: entity id: OrganArachnidTongue diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index 04b0dae1223..2cd602659fd 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -36,9 +36,9 @@ heldPrefix: brain - type: Sprite state: brain - - type: Brain - - type: Organ - slotId: brain + - type: Organ # Shitmed + slotId: Brain + - type: Brain # Shitmed - type: SolutionContainerManager solutions: organ: @@ -65,8 +65,13 @@ layers: - state: eyeball-l - state: eyeball-r - - type: Eyes - + - type: Organ # Shitmed + slotId: eyes + - type: Tag # goob edit + tags: + - Meat + - Organ + - Eyes - type: entity id: OrganDionaStomach @@ -87,6 +92,8 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Organ # Shitmed + slotId: stomach - type: Stomach - type: Metabolizer maxReagents: 6 @@ -111,10 +118,12 @@ description: "A spongy mess of slimy, leaf-like structures. Capable of breathing both carbon dioxide and oxygen." components: - type: Sprite - sprite: Mobs/Species/Human/organs.rsi - layers: - - state: lung-l - - state: lung-r + state: lungs + - type: Organ # Shitmed + slotId: lungs + - type: Item + size: Small + heldPrefix: lungs - type: Lung - type: Organ slotId: lungs diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml index 2316a65eb35..c93429889cf 100644 --- a/Resources/Prototypes/Body/Organs/moth.yml +++ b/Resources/Prototypes/Body/Organs/moth.yml @@ -3,6 +3,7 @@ name: moth stomach parent: [OrganAnimalStomach, OrganHumanStomach] categories: [ HideSpawnMenu ] + name: moth stomach # Shitmed components: - type: Stomach specialDigestible: diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml index f07b734b39c..5b3a5d66f27 100644 --- a/Resources/Prototypes/Body/Organs/slime.yml +++ b/Resources/Prototypes/Body/Organs/slime.yml @@ -39,7 +39,7 @@ size: Small heldPrefix: brain - + - type: entity id: OrganSlimeLungs parent: BaseHumanOrgan diff --git a/Resources/Prototypes/Body/Organs/vox.yml b/Resources/Prototypes/Body/Organs/vox.yml index 0e071571e10..68aff09ae06 100644 --- a/Resources/Prototypes/Body/Organs/vox.yml +++ b/Resources/Prototypes/Body/Organs/vox.yml @@ -4,6 +4,7 @@ parent: OrganHumanLungs description: "The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in." suffix: "vox" + name: vox lungs # Shitmed components: - type: Sprite sprite: Mobs/Species/Vox/organs.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml new file mode 100644 index 00000000000..84b2add85a5 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml @@ -0,0 +1,222 @@ +- type: entity + save: false + name: Urist McHarpy + parent: BaseMobHuman + id: MobHarpyBase + abstract: true + components: + - type: HarpySinger + - type: Instrument + allowPercussion: false + program: 52 + - type: SwappableInstrument + instrumentList: + "Voice": {52: 0} + "Trumpet": {56: 0} + "Electric": {27: 0} + "Bass": {33: 0} + "Rock": {29: 0} + "Acoustic": {24: 0} + "Flute": {73: 0} + "Sax": {66: 0} + - type: UserInterface + interfaces: + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface + enum.HumanoidMarkingModifierKey.Key: + type: HumanoidMarkingModifierBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + # Goobstation - changelings + enum.StoreUiKey.Key: + type: StoreBoundUserInterface + enum.HereticLivingHeartKey.Key: # goob edit - heretics + type: LivingHeartMenuBoundUserInterface + enum.SurgeryUIKey.Key: # Shitmed + type: SurgeryBui + - type: Sprite + scale: 0.9, 0.9 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "underpants" ] + - map: [ "undershirt" ] + - map: [ "socks" ] + - map: [ "jumpsuit" ] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false +# Yes, RArm has to be down here + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "singingLayer" ] + sprite: DeltaV/Effects/harpysinger.rsi + state: singing_music_notes + visible: false + - type: HumanoidAppearance + species: Harpy + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.32 + density: 90 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Body + prototype: Harpy + - type: Damageable + damageModifierSet: Harpy + - type: MeleeWeapon + soundHit: + collection: AlienClaw + animation: WeaponArcClaw + damage: + types: + Piercing: 5 + - type: Speech + speechSounds: Harpy + speechVerb: Harpy + - type: Vocal + sounds: + Male: SoundsHarpy + Female: SoundsHarpy + Unsexed: SoundsHarpy + - type: GenericVisualizer + visuals: + enum.HarpyVisualLayers.Singing: + singingLayer: + False: {visible: false} + True: {visible: true} + - type: MovementSpeedModifier + baseWalkSpeed: 2.5 + baseSprintSpeed: 5.0 + - type: Inventory + speciesId: harpy + templateId: digitigrade + - type: HarpyVisuals + - type: Tag + tags: + - CanPilot + - FootstepSound + - DoorBumpOpener + - HarpyEmotes + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" + +- type: entity + save: false + name: Urist McHands + parent: MobHumanDummy + id: MobHarpyDummy + categories: [ HideSpawnMenu ] + description: A dummy Harpy meant to be used in character setup. + components: + - type: HumanoidAppearance + species: Harpy + - type: Inventory + speciesId: harpy + - type: Sprite + scale: 0.9, 0.9 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "underpants" ] + - map: [ "undershirt" ] + - map: [ "socks" ] + - map: [ "jumpsuit" ] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false +# Yes, RArm has to be down here + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "mask" ] + - map: [ "head" ] + +- type: entity + id: ActionHarpyPlayMidi + name: Play MIDI + description: Sing your heart out! Right click yourself to set an instrument. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + checkCanInteract: false + icon: DeltaV/Interface/Actions/harpy_sing.png + event: !type:OpenUiActionEvent + key: enum.InstrumentUiKey.Key + +- type: entity + id: ActionSyrinxChangeVoiceMask + name: Set name + description: Change the name others hear to something else. + categories: [ HideSpawnMenu ] + components: + - type: InstantAction + icon: DeltaV/Interface/Actions/harpy_syrinx.png + itemIconStyle: BigAction + event: !type:VoiceMaskSetNameEvent diff --git a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml index 9ba7c85e1e1..2a7d3a79896 100644 --- a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml +++ b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml @@ -129,3 +129,55 @@ damage: types: Blunt: 200 + +# Shitmed Change Start + +- type: entity + name: bang severer + parent: BaseItem + id: MeleeDebugSever + description: sever yer parts a week from now + suffix: DEBUG + components: + - type: Tag + tags: + - Debug + - type: Sprite + sprite: Objects/Weapons/Melee/debug.rsi + state: icon + - type: MeleeWeapon + damage: + types: + Slash: 20000 + clickPartDamageMultiplier: 10 + - type: Item + size: Tiny + sprite: Objects/Weapons/Melee/debug.rsi + +- type: entity + name: bang severer 100dmg + parent: MeleeDebugSever + id: MeleeDebugSever100 + components: + - type: Tag + tags: + - Debug + - type: MeleeWeapon + damage: + types: + Slash: 100 + +- type: entity + name: bang severer 200dmg + parent: MeleeDebugSever + id: MeleeDebugSever200 + components: + - type: Tag + tags: + - Debug + - type: MeleeWeapon + damage: + types: + Slash: 200 + +# Shitmed Change End diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 996811b58ff..ae90bf182e5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -889,6 +889,11 @@ - Passive - type: Body prototype: AnimalRuminant + - type: SurgeryTarget # Shitmed + - type: UserInterface # Shitmed + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: HTN rootTask: task: RuminantCompound @@ -972,9 +977,8 @@ task: RuminantCompound - type: Body prototype: AnimalHemocyanin - # start-backmen: surgery - - type: SurgeryTarget - - type: UserInterface + - type: SurgeryTarget # Shitmed + - type: UserInterface # Shitmed interfaces: enum.SurgeryUIKey.Key: type: SurgeryBui diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index f92877e962d..c5ec5661140 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -259,6 +259,11 @@ - type: Body prototype: Bloodsucker requiredLegs: 1 + - type: SurgeryTarget # Shitmed + - type: UserInterface # Shitmed + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: Butcherable spawned: - id: FoodMeatFish diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index ae86307fb44..e08724f1c0b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -261,6 +261,11 @@ - type: Body prototype: Rat requiredLegs: 1 # TODO: More than 1 leg + - type: SurgeryTarget # Shitmed + - type: UserInterface # Shitmed + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: Hunger # probably should be prototyped thresholds: Overfed: 200 diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index 718d1ad8e3f..8fc9f09bb15 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -78,6 +78,13 @@ - type: DeleteOnTrigger - type: StaticPrice price: 0 + - type: Scalpel # Shitmed + speed: 0.45 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel2.ogg - type: entity parent: ShardBase diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml index e735b2dcddc..c1c3fc9877c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml @@ -8,6 +8,13 @@ - type: Item # TODO add inhand sprites for all utensils sprite: Objects/Misc/utensils.rsi - type: SpaceGarbage + - type: Tweezers # Shitmed: Any utensil can poorly remove organs + speed: 0.2 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/hemostat1.ogg - type: entity parent: UtensilBase @@ -50,6 +57,8 @@ damage: types: Piercing: 5 + - type: Tweezers # Shitmed: Forks are better than spoons + speed: 0.35 - type: entity parent: UtensilBasePlastic @@ -62,6 +71,8 @@ - type: Utensil types: - Fork + - type: Tweezers # Shitmed: Forks are better than spoons + speed: 0.35 - type: entity parent: UtensilBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 727c75c8794..ff1aca13b06 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -40,6 +40,15 @@ - type: Item sprite: Objects/Tools/Hydroponics/clippers.rsi storedRotation: -90 + - type: Retractor # Shitmed: Same as wirecutters + speed: 0.35 + - type: Hemostat + speed: 0.6 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor2.ogg - type: entity name: scythe @@ -87,6 +96,11 @@ Piercing: 2 - type: Item sprite: Objects/Tools/Hydroponics/hatchet.rsi + - type: BoneSaw # Shitmed + speed: 0.35 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg - type: entity name: spade diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index f49654cf0b6..f5f2c7eb85e 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -147,6 +147,8 @@ damage: types: Slash: 12 + - type: Scalpel # Shitmed + speed: 1.25 - type: entity name: laser scalpel @@ -161,6 +163,9 @@ sprite: Objects/Specific/Medical/Surgery/scalpel.rsi storedRotation: 90 heldPrefix: laser + - type: Scalpel # Shitmed + speed: 1.5 + # TODO: prevent bleeding from incisions # Retractor @@ -207,7 +212,8 @@ endSound: path: /Audio/Medical/Surgery/hemostat1.ogg - type: Hemostat - # end-backmen: surgery + - type: Tweezers # Shitmed + - type: Tending # Shitmed # Bone setter - type: entity @@ -294,8 +300,8 @@ qualities: - Sawing speedModifier: 0.5 - - type: BoneSaw - # end-backmen: surgery + - type: BoneSaw # Shitmed + speed: 0.5 - type: entity name: circular saw @@ -320,11 +326,8 @@ qualities: - Sawing speedModifier: 1.5 - - type: SurgeryTool - startSound: - path: /Audio/Medical/Surgery/saw.ogg - - type: BoneSaw - # end-backmen: surgery + - type: BoneSaw # Shitmed + speed: 1.5 - type: entity name: advanced circular saw diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml index 7cc57faaa4b..3fddd6b2884 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml @@ -29,6 +29,16 @@ - type: PhysicalComposition materialComposition: Steel: 15 + # FIXME: Used isnt actually implemented so its still unlimited. + # Uncomment this when its implemented, and make sure it handles StackComponent right + #- type: Hemostat # Shitmed + # speed: 0.15 + #- type: SurgeryTool # Shitmed + # used: true + # startSound: + # path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + # endSound: + # path: /Audio/_Shitmed/Medical/Surgery/hemostat1.ogg - type: entity id: CableHVStack diff --git a/Resources/Prototypes/Entities/Objects/Tools/crowbars.yml b/Resources/Prototypes/Entities/Objects/Tools/crowbars.yml index 8655d53fb61..31a6b8ef060 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/crowbars.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/crowbars.yml @@ -41,6 +41,10 @@ size: Normal shape: - 0,0,0,1 + - type: Tweezers # Shitmed + speed: 0.55 + - type: SurgeryTool # Shitmed + startSound: /Audio/Items/crowbar.ogg # Standard (grey) Crowbar - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml index c35d67e7eb4..94f501260b8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml @@ -88,6 +88,13 @@ radius: 1.1 #smallest possible color: orange - type: ItemTogglePointLight + - type: Cautery # Shitmed + speed: 0.45 + - type: SurgeryTool # Shitmed + startSound: + collection: lighterOnSounds + endSound: + collection: lighterOffSounds - type: entity name: cheap lighter diff --git a/Resources/Prototypes/Entities/Objects/Tools/matches.yml b/Resources/Prototypes/Entities/Objects/Tools/matches.yml index e8601fcf355..46be9da7f83 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/matches.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/matches.yml @@ -41,6 +41,13 @@ unlitIcon: match_unlit litIcon: match_lit burntIcon: match_burnt + - type: Cautery # Shitmed + speed: 0.2 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + endSound: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg - type: entity parent: Matchstick diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 41d167352f2..d60bda950b3 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -43,6 +43,19 @@ Steel: 100 - type: StaticPrice price: 30 + - type: Retractor # Shitmed + speed: 0.35 + - type: Hemostat # Shitmed + speed: 0.6 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/Items/wirecutter.ogg + params: + variation: 0.125 + endSound: + path: /Audio/Items/wirecutter.ogg + params: + variation: 0.125 - type: entity name: screwdriver @@ -87,6 +100,15 @@ Steel: 100 - type: StaticPrice price: 30 + - type: Retractor # Shitmed + speed: 0.45 + - type: Tending # Shitmed + speed: 0.65 + - type: SurgeryTool # Shitmed + startSound: + collection: Screwdriver + endSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor2.ogg - type: entity name: wrench diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 197dca00ff8..b834068ee9e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -105,6 +105,13 @@ price: 40 - type: IgnitionSource temperature: 700 + - type: Cautery # Shitmed + speed: 0.7 + - type: SurgeryTool # Shitmed + startSound: + collection: Welder + endSound: + collection: WelderOff - type: entity name: industrial welding tool diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 70953694ca4..7fb2d610ec6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -30,6 +30,11 @@ - type: Appearance - type: StaticPrice price: 500 + - type: Cautery # Shitmed + speed: 0.9 + - type: SurgeryTool # Shitmed + endSound: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg - type: entity id: BaseWeaponPowerCell @@ -65,6 +70,11 @@ - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot + - type: Cautery # Shitmed + speed: 0.9 + - type: SurgeryTool # Shitmed + endSound: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg - type: entity id: BaseWeaponBatterySmall diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml index 61755da76ef..e846712fc90 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml @@ -21,3 +21,10 @@ size: Normal sprite: Objects/Weapons/Melee/armblade.rsi - type: Prying + - type: Scalpel # Shitmed + speed: 0.3 + - type: BoneSaw # Shitmed + speed: 0.75 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml index bfdd94add6c..48d840ef870 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml @@ -47,3 +47,10 @@ maxVol: 300 - type: UseDelay delay: 1 + - type: BoneSaw # Shitmed + speed: 0.5 # TODO: arm-mounted version becomes 0.65 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/Weapons/chainsawwield.ogg + endSound: + path: /Audio/Weapons/chainsaw.ogg diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 590c359fc13..1f5de51fe14 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -91,6 +91,17 @@ jobRequired: - SalvageSpecialist # Corvax-HiddenDesc-End + - type: Scalpel # Shitmed + speed: 0.75 + - type: Cautery # Shitmed: you have to be very, very careful to cauterize with it + speed: 0.2 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/Weapons/ebladehum.ogg + endSound: + path: /Audio/Weapons/eblade1.ogg + params: + variation: 0.250 - type: entity name: energy sword diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index 96e6e687da9..73997bc2955 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -50,6 +50,13 @@ stealGroup: FireAxe - type: IgniteOnMeleeHit fireStacks: -4 + - type: Scalpel # Shitmed + speed: 0.3 + - type: BoneSaw # Shitmed + speed: 0.5 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg - type: entity id: FireAxeFlaming diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 42a78ef077e..0feab540132 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -27,6 +27,13 @@ - Slicing useSound: path: /Audio/Items/Culinary/chop.ogg + - type: Scalpel # Shitmed + speed: 0.65 + - type: SurgeryTool # Shitmed + startSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel2.ogg - type: entity name: kitchen knife @@ -74,6 +81,10 @@ guides: - Chef - FoodRecipes + - type: Scalpel # Shitmed + speed: 0.3 + - type: BoneSaw # Shitmed: Better than tg 25% because its a cleaver its meant to hack off limbs + speed: 0.5 - type: entity name: combat knife diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/carp.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/carp.yml index 44d831cba87..bbf31e7c12e 100644 --- a/Resources/Prototypes/_Backmen/Body/Prototypes/carp.yml +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/carp.yml @@ -4,7 +4,7 @@ id: BaseCarpPart components: - type: Sprite - sprite: _Goobstation/Mobs/Aliens/Carps/carp_parts.rsi + sprite: _Shitmed/Mobs/Aliens/Carps/carp_parts.rsi - type: entity categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/_Goobstation/status_effects.yml b/Resources/Prototypes/_Goobstation/status_effects.yml new file mode 100644 index 00000000000..1717956cb01 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/status_effects.yml @@ -0,0 +1,15 @@ +- type: statusEffect + id: Stasis + alert: Stasis + alwaysAllowed: true + +# CREATED BY Goldminermac +# https://github.com/space-wizards/space-station-14/pull/31149 +# LICENSED UNDER THE MIT LICENSE +# SEE README.MD AND LICENSE.TXT IN THE ROOT OF THIS REPOSITORY FOR MORE INFORMATION +- type: statusEffect + id: Vulgarity +# END OF MIT-LICENSED CODE + +- type: statusEffect + id: Brainrotted diff --git a/Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml b/Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml similarity index 100% rename from Resources/Prototypes/_Goobstation/Body/Organs/Animal/space.yml rename to Resources/Prototypes/_Shitmed/Body/Organs/Animal/space.yml diff --git a/Resources/Prototypes/_Shitmed/Body/Parts/animal.yml b/Resources/Prototypes/_Shitmed/Body/Parts/animal.yml new file mode 100644 index 00000000000..bbf31e7c12e --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Parts/animal.yml @@ -0,0 +1,37 @@ +- type: entity + abstract: true + parent: PartAnimal + id: BaseCarpPart + components: + - type: Sprite + sprite: _Shitmed/Mobs/Aliens/Carps/carp_parts.rsi + +- type: entity + categories: [ HideSpawnMenu ] + parent: BaseCarpPart + id: TailCarp + name: carp tail + description: Unique glands in this tail let space carp fly in a vacuum. + components: + - type: Sprite + layers: + - state: tail + - type: BodyPart + partType: Tail + - type: MovementBodyPart + walkSpeed: 2.5 + sprintSpeed: 3.5 + # TODO: Make it actually needed. Legs are hardcoded to be the only parts that matter for movement. + # TODO: space flight stuff + +- type: entity + categories: [ HideSpawnMenu ] + parent: BaseCarpPart + id: TorsoCarp + name: carp torso + components: + - type: Sprite + layers: + - state: torso + - type: BodyPart + partType: Torso diff --git a/Resources/Prototypes/_Goobstation/Body/Prototypes/Animal/carp.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/carp.yml similarity index 100% rename from Resources/Prototypes/_Goobstation/Body/Prototypes/Animal/carp.yml rename to Resources/Prototypes/_Shitmed/Body/Prototypes/Animal/carp.yml diff --git a/Resources/Prototypes/_Shitmed/status_effects.yml b/Resources/Prototypes/_Shitmed/status_effects.yml new file mode 100644 index 00000000000..7ffdb3e907c --- /dev/null +++ b/Resources/Prototypes/_Shitmed/status_effects.yml @@ -0,0 +1,3 @@ +- type: statusEffect + id: BreathingImmunity + alwaysAllowed: true # Used by space animal lungs to work on anything \ No newline at end of file diff --git a/Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/meta.json similarity index 100% rename from Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/meta.json rename to Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/meta.json diff --git a/Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/tail.png b/Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/tail.png similarity index 100% rename from Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/tail.png rename to Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/tail.png diff --git a/Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/torso.png b/Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/torso.png similarity index 100% rename from Resources/Textures/_Goobstation/Mobs/Aliens/Carps/carp_parts.rsi/torso.png rename to Resources/Textures/_Shitmed/Mobs/Aliens/Carps/carp_parts.rsi/torso.png From d4c338d834f28e721ef389c35cb4b9ad1d8af0bf Mon Sep 17 00:00:00 2001 From: Roudenn Date: Mon, 25 Nov 2024 18:28:57 +0300 Subject: [PATCH 6/7] fixes fixes add and fix shit --- Content.Client/Hands/Systems/HandsSystem.cs | 1 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 5 - .../Components}/StatusEffectOrganComponent.cs | 2 +- .../Components}/StatusEffectOrganSystem.cs | 2 +- .../Body/Systems/DebrainedSystem.cs | 2 +- .../Body/Systems/EyesSystem.cs | 7 +- .../Cybernetics/CyberneticsSystem.cs | 8 +- .../DelayedDeath/DelayedDeathComponent.cs | 2 +- .../DelayedDeath/DelayedDeathSystem.cs | 6 +- Content.Server/Body/Systems/BrainSystem.cs | 6 - Content.Server/Content.Server.csproj | 2 + .../Speech/Components/OhioAccentComponent.cs | 8 + .../Speech/EntitySystems/OhioAccentSystem.cs | 46 +++ Content.Server/Hands/Systems/HandsSystem.cs | 1 + .../Light/Components/MatchstickComponent.cs | 29 -- .../Light/EntitySystems/MatchstickSystem.cs | 4 + .../_Shitmed/Body/Organ/HeartSystem.cs | 38 --- .../DelayedDeath/DelayedDeathComponent.cs | 16 - .../DelayedDeath/DelayedDeathSystem.cs | 28 -- .../Surgery/Body/CyberneticsComponent.cs | 6 +- .../Surgery/Body/Events/BodyPartEvents.cs | 9 +- .../Body/Organs/BodyPartEffectComponent.cs | 4 +- .../Body/Organs/BodyPartEffectSystem.cs | 8 +- .../Body/Organs/OrganEffectComponent.cs | 4 +- .../Surgery/Body/Organs/OrganEffectSystem.cs | 5 +- .../Surgery/Body/Organs/OrganEvents.cs | 2 +- .../Body/SharedBodySystem.PartAppearance.cs | 5 +- .../Body/SharedBodySystem.Targeting.cs | 1 + .../Subsystems/GenerateChildPartComponent.cs | 4 +- .../Subsystems/GenerateChildPartSystem.cs | 4 +- .../SurgeryComponentConditionComponent.cs | 4 +- .../Surgery/SharedSurgerySystem.Steps.cs | 25 +- .../Backmen/Surgery/SharedSurgerySystem.cs | 3 +- .../Steps/SurgeryCanPerformStepEvent.cs | 2 +- .../Backmen/Surgery/Tools/BoneSawComponent.cs | 2 + .../Surgery/Tools/BoneSetterComponent.cs | 4 +- .../Backmen/Surgery/Tools/CauteryComponent.cs | 2 + .../Surgery/Tools/HemostatComponent.cs | 2 + .../Surgery/Tools/RetractorComponent.cs | 2 + .../Backmen/Surgery/Tools/ScalpelComponent.cs | 2 + .../Tools/SurgeryToolConditionsSystem.cs | 2 +- .../Surgery/Tools/SurgeryToolExamineSystem.cs | 3 +- .../Surgery/Tools/TendingComponent.cs | 2 +- .../Surgery/Tools/TweezersComponent.cs | 2 +- Content.Shared/Body/Organ/OrganComponent.cs | 1 - Content.Shared/Body/Part/BodyPartEvents.cs | 27 -- .../Body/Systems/SharedBodySystem.Organs.cs | 6 +- .../Body/Systems/SharedBodySystem.Parts.cs | 167 +--------- .../Damage/Systems/DamageableSystem.cs | 5 +- .../Inventory/InventorySystem.Slots.cs | 30 -- .../_Shitmed/Medical/Surgery/attributions.yml | 49 +++ .../_Shitmed/Medical/Surgery/cautery1.ogg | Bin 0 -> 34770 bytes .../_Shitmed/Medical/Surgery/cautery2.ogg | Bin 0 -> 16854 bytes .../_Shitmed/Medical/Surgery/hemostat1.ogg | Bin 0 -> 15729 bytes .../Audio/_Shitmed/Medical/Surgery/organ1.ogg | Bin 0 -> 18912 bytes .../Audio/_Shitmed/Medical/Surgery/organ2.ogg | Bin 0 -> 18946 bytes .../_Shitmed/Medical/Surgery/retractor1.ogg | Bin 0 -> 11537 bytes .../_Shitmed/Medical/Surgery/retractor2.ogg | Bin 0 -> 9915 bytes .../Audio/_Shitmed/Medical/Surgery/saw.ogg | Bin 0 -> 46750 bytes .../_Shitmed/Medical/Surgery/scalpel1.ogg | Bin 0 -> 13736 bytes .../_Shitmed/Medical/Surgery/scalpel2.ogg | Bin 0 -> 13098 bytes .../en-US/Goobstation/accent/accents.ftl | 299 ++++++++++++++++++ .../en-US/escape-menu/ui/options-menu.ftl | 9 - .../Locale/ru-RU/backmen/accent/ohio.ftl | 295 +++++++++++++++++ .../Prototypes/Body/Organs/Animal/animal.yml | 1 - Resources/Prototypes/Body/Organs/arachnid.yml | 10 - Resources/Prototypes/Body/Organs/diona.yml | 12 +- Resources/Prototypes/Body/Organs/moth.yml | 1 - Resources/Prototypes/Body/Organs/vox.yml | 1 - .../Corvax/Body/Parts/vulpkanin.yml | 281 ++++++++++++---- .../Corvax/Body/Prototypes/vulpkanin.yml | 9 +- .../DeltaV/Body/Parts/vulpkanin.yml | 270 ---------------- .../DeltaV/Body/Prototypes/harpy.yml | 51 --- .../DeltaV/Entities/Mobs/Species/harpy.yml | 222 ------------- .../Mobs/Customization/Markings/gauze.yml | 40 +-- .../Mobs/Customization/Markings/scars.yml | 4 +- .../Prototypes/Entities/Mobs/NPCs/carp.yml | 5 - .../Entities/Mobs/NPCs/regalrat.yml | 8 +- .../Entities/Structures/Machines/lathe.yml | 2 - .../Prototypes/Species/species_weights.yml | 3 + .../_Backmen/Accents/word_replacements.yml | 140 ++++++++ .../Body/Organs/Animal/space.yml | 2 +- .../Body/Organs/cybernetic.yml | 0 .../Body/Organs/generic.yml | 2 +- .../Body/Parts/animal.yml | 0 .../Body/Prototypes/Animal/carp.yml | 0 .../_Backmen/Body/Prototypes/carp.yml | 37 --- .../_Backmen/Body/Prototypes/harpy.yml | 61 ++-- .../Objects/Specific/Medical/surgery.yml | 77 ----- .../Species/cybernetics.yml | 0 Resources/Prototypes/_Backmen/tags.yml | 12 + .../_Goobstation/status_effects.yml | 15 - .../Prototypes/_Shitmed/status_effects.yml | 3 - .../Species/Misc/Pizza/parts.rsi/l_arm.png | Bin 0 -> 572 bytes .../Species/Misc/Pizza/parts.rsi/meta.json | 19 ++ .../Species/Misc/Pizza/parts.rsi/r_arm.png | Bin 0 -> 608 bytes 96 files changed, 1237 insertions(+), 1261 deletions(-) rename Content.Server/{_Shitmed/Body/Organ => Backmen/Body/Components}/StatusEffectOrganComponent.cs (94%) rename Content.Server/{_Shitmed/Body/Organ => Backmen/Body/Components}/StatusEffectOrganSystem.cs (95%) rename Content.Server/{_Shitmed => Backmen}/Body/Systems/DebrainedSystem.cs (97%) rename Content.Server/{_Shitmed => Backmen}/Body/Systems/EyesSystem.cs (95%) rename Content.Server/{_Shitmed => Backmen}/Cybernetics/CyberneticsSystem.cs (90%) create mode 100644 Content.Server/Goobstation/Speech/Components/OhioAccentComponent.cs create mode 100644 Content.Server/Goobstation/Speech/EntitySystems/OhioAccentSystem.cs delete mode 100644 Content.Server/Light/Components/MatchstickComponent.cs delete mode 100644 Content.Server/_Shitmed/Body/Organ/HeartSystem.cs delete mode 100644 Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs delete mode 100644 Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs rename Content.Shared/{_Shitmed => Backmen}/Surgery/Tools/SurgeryToolConditionsSystem.cs (97%) rename Content.Shared/{_Shitmed => Backmen}/Surgery/Tools/TendingComponent.cs (88%) rename Content.Shared/{_Shitmed => Backmen}/Surgery/Tools/TweezersComponent.cs (88%) delete mode 100644 Content.Shared/Body/Part/BodyPartEvents.cs create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/cautery1.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/cautery2.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/hemostat1.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/organ1.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/organ2.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/retractor1.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/retractor2.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/saw.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/scalpel1.ogg create mode 100644 Resources/Audio/_Shitmed/Medical/Surgery/scalpel2.ogg create mode 100644 Resources/Locale/en-US/Goobstation/accent/accents.ftl create mode 100644 Resources/Locale/ru-RU/backmen/accent/ohio.ftl delete mode 100644 Resources/Prototypes/DeltaV/Body/Parts/vulpkanin.yml delete mode 100644 Resources/Prototypes/DeltaV/Body/Prototypes/harpy.yml delete mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml create mode 100644 Resources/Prototypes/_Backmen/Accents/word_replacements.yml rename Resources/Prototypes/{_Shitmed => _Backmen}/Body/Organs/Animal/space.yml (90%) rename Resources/Prototypes/{_Shitmed => _Backmen}/Body/Organs/cybernetic.yml (100%) rename Resources/Prototypes/{_Shitmed => _Backmen}/Body/Organs/generic.yml (94%) rename Resources/Prototypes/{_Shitmed => _Backmen}/Body/Parts/animal.yml (100%) rename Resources/Prototypes/{_Shitmed => _Backmen}/Body/Prototypes/Animal/carp.yml (100%) delete mode 100644 Resources/Prototypes/_Backmen/Body/Prototypes/carp.yml rename Resources/Prototypes/{_Shitmed => _Backmen}/Species/cybernetics.yml (100%) delete mode 100644 Resources/Prototypes/_Goobstation/status_effects.yml delete mode 100644 Resources/Prototypes/_Shitmed/status_effects.yml create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Misc/Pizza/parts.rsi/l_arm.png create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Misc/Pizza/parts.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Mobs/Species/Misc/Pizza/parts.rsi/r_arm.png diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index 4534baf73d2..c4419140673 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -4,6 +4,7 @@ using Content.Client.Examine; using Content.Client.Strip; using Content.Client.Verbs.UI; +using Content.Shared.Backmen.Surgery.Body.Events; using Content.Shared.Body.Part; using Content.Shared.Hands; using Content.Shared.Hands.Components; diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index ed6072dbcdf..a7f68538bdd 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -280,11 +280,6 @@ void HandleToggleAutoGetUp(BaseButton.ButtonToggledEventArgs args) // BACKMEN ED AddButton(boundKey); } - foreach (var boundKey in ContentKeyFunctions.GetLoadoutBoundKeys()) - { - AddButton(boundKey); - } - AddHeader("ui-options-header-shuttle"); AddButton(ContentKeyFunctions.ShuttleStrafeUp); AddButton(ContentKeyFunctions.ShuttleStrafeRight); diff --git a/Content.Server/_Shitmed/Body/Organ/StatusEffectOrganComponent.cs b/Content.Server/Backmen/Body/Components/StatusEffectOrganComponent.cs similarity index 94% rename from Content.Server/_Shitmed/Body/Organ/StatusEffectOrganComponent.cs rename to Content.Server/Backmen/Body/Components/StatusEffectOrganComponent.cs index 640f61d5e8e..0cee3fea695 100644 --- a/Content.Server/_Shitmed/Body/Organ/StatusEffectOrganComponent.cs +++ b/Content.Server/Backmen/Body/Components/StatusEffectOrganComponent.cs @@ -2,7 +2,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Server._Shitmed.Body.Organ; +namespace Content.Server.Backmen.Body.Components; [RegisterComponent, Access(typeof(StatusEffectOrganSystem))] [AutoGenerateComponentPause] diff --git a/Content.Server/_Shitmed/Body/Organ/StatusEffectOrganSystem.cs b/Content.Server/Backmen/Body/Components/StatusEffectOrganSystem.cs similarity index 95% rename from Content.Server/_Shitmed/Body/Organ/StatusEffectOrganSystem.cs rename to Content.Server/Backmen/Body/Components/StatusEffectOrganSystem.cs index b3394b7dd91..86ef051a38c 100644 --- a/Content.Server/_Shitmed/Body/Organ/StatusEffectOrganSystem.cs +++ b/Content.Server/Backmen/Body/Components/StatusEffectOrganSystem.cs @@ -2,7 +2,7 @@ using Content.Shared.StatusEffect; using Robust.Shared.Timing; -namespace Content.Server._Shitmed.Body.Organ; +namespace Content.Server.Backmen.Body.Components; public sealed class StatusEffectOrganSystem : EntitySystem { diff --git a/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs b/Content.Server/Backmen/Body/Systems/DebrainedSystem.cs similarity index 97% rename from Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs rename to Content.Server/Backmen/Body/Systems/DebrainedSystem.cs index efb735e449b..cb7d28d09f5 100644 --- a/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs +++ b/Content.Server/Backmen/Body/Systems/DebrainedSystem.cs @@ -7,7 +7,7 @@ using Content.Shared.Standing; using Content.Shared.Stunnable; -namespace Content.Server._Shitmed.Body.Systems; +namespace Content.Server.Backmen.Body.Systems; /// /// This system handles behavior on entities when they lose their head or their brains are removed. diff --git a/Content.Server/_Shitmed/Body/Systems/EyesSystem.cs b/Content.Server/Backmen/Body/Systems/EyesSystem.cs similarity index 95% rename from Content.Server/_Shitmed/Body/Systems/EyesSystem.cs rename to Content.Server/Backmen/Body/Systems/EyesSystem.cs index 9a10e875b7b..52bf0d6cb04 100644 --- a/Content.Server/_Shitmed/Body/Systems/EyesSystem.cs +++ b/Content.Server/Backmen/Body/Systems/EyesSystem.cs @@ -1,11 +1,10 @@ -using Content.Server.Body.Components; +using Content.Server.Body.Systems; using Content.Shared.Body.Components; -using Content.Shared.Body.Events; -using Content.Shared._Shitmed.Body.Organ; +using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Eye.Blinding.Systems; -namespace Content.Server.Body.Systems +namespace Content.Server.Backmen.Body.Systems { public sealed class EyesSystem : EntitySystem { diff --git a/Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs b/Content.Server/Backmen/Cybernetics/CyberneticsSystem.cs similarity index 90% rename from Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs rename to Content.Server/Backmen/Cybernetics/CyberneticsSystem.cs index 386bfc9de8c..0a9398a7e73 100644 --- a/Content.Server/_Shitmed/Cybernetics/CyberneticsSystem.cs +++ b/Content.Server/Backmen/Cybernetics/CyberneticsSystem.cs @@ -1,11 +1,11 @@ using Content.Server.Emp; +using Content.Shared.Backmen.Surgery.Body; +using Content.Shared.Backmen.Surgery.Body.Events; +using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Body.Part; using Content.Shared.Body.Organ; -using Content.Shared._Shitmed.Body.Organ; -using Content.Shared._Shitmed.Body.Events; -using Content.Shared._Shitmed.Cybernetics; -namespace Content.Server._Shitmed.Cybernetics; +namespace Content.Server.Backmen.Cybernetics; internal sealed class CyberneticsSystem : EntitySystem { diff --git a/Content.Server/Backmen/DelayedDeath/DelayedDeathComponent.cs b/Content.Server/Backmen/DelayedDeath/DelayedDeathComponent.cs index 5dfb7d6b38b..e9ebafdb870 100644 --- a/Content.Server/Backmen/DelayedDeath/DelayedDeathComponent.cs +++ b/Content.Server/Backmen/DelayedDeath/DelayedDeathComponent.cs @@ -13,4 +13,4 @@ public sealed partial class DelayedDeathComponent : Component /// How long it has been since the delayed death timer started. /// public float DeathTimer; -} \ No newline at end of file +} diff --git a/Content.Server/Backmen/DelayedDeath/DelayedDeathSystem.cs b/Content.Server/Backmen/DelayedDeath/DelayedDeathSystem.cs index 2ca05663026..4213cc9beac 100644 --- a/Content.Server/Backmen/DelayedDeath/DelayedDeathSystem.cs +++ b/Content.Server/Backmen/DelayedDeath/DelayedDeathSystem.cs @@ -1,11 +1,7 @@ -using Content.Shared.Body.Organ; -using Content.Shared.Body.Events; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.Mobs.Systems; -using Robust.Shared.Timing; using Robust.Shared.Prototypes; - namespace Content.Server.Backmen.DelayedDeath; public partial class DelayedDeathSystem : EntitySystem @@ -29,4 +25,4 @@ public override void Update(float frameTime) } } } -} \ No newline at end of file +} diff --git a/Content.Server/Body/Systems/BrainSystem.cs b/Content.Server/Body/Systems/BrainSystem.cs index aa3a923b715..1427902a50a 100644 --- a/Content.Server/Body/Systems/BrainSystem.cs +++ b/Content.Server/Body/Systems/BrainSystem.cs @@ -4,18 +4,12 @@ using Content.Shared.Body.Components; using Content.Shared.Body.Systems; using Content.Shared.Body.Events; -using Content.Shared.Body.Organ; using Content.Server.Backmen.DelayedDeath; using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Pointing; -// Shitmed Change -using Content.Shared._Shitmed.Body.Organ; -using Content.Server._Shitmed.DelayedDeath; -using Content.Shared.Body.Systems; - namespace Content.Server.Body.Systems { public sealed class BrainSystem : EntitySystem diff --git a/Content.Server/Content.Server.csproj b/Content.Server/Content.Server.csproj index e376f400307..853e214196a 100644 --- a/Content.Server/Content.Server.csproj +++ b/Content.Server/Content.Server.csproj @@ -29,6 +29,8 @@ + + diff --git a/Content.Server/Goobstation/Speech/Components/OhioAccentComponent.cs b/Content.Server/Goobstation/Speech/Components/OhioAccentComponent.cs new file mode 100644 index 00000000000..c76c3c516b8 --- /dev/null +++ b/Content.Server/Goobstation/Speech/Components/OhioAccentComponent.cs @@ -0,0 +1,8 @@ +using Content.Server.Speech.EntitySystems; + +namespace Content.Server.Speech.Components; + +[RegisterComponent] +[Access(typeof(OhioAccentSystem))] +public sealed partial class OhioAccentComponent : Component +{ } diff --git a/Content.Server/Goobstation/Speech/EntitySystems/OhioAccentSystem.cs b/Content.Server/Goobstation/Speech/EntitySystems/OhioAccentSystem.cs new file mode 100644 index 00000000000..3ad0e2c9a6b --- /dev/null +++ b/Content.Server/Goobstation/Speech/EntitySystems/OhioAccentSystem.cs @@ -0,0 +1,46 @@ +using System.Text.RegularExpressions; +using Content.Server.Speech.Components; +using Robust.Shared.Random; + +namespace Content.Server.Speech.EntitySystems; + +public sealed class OhioAccentSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAccent); + } + + private void OnAccent(EntityUid uid, OhioAccentComponent component, AccentGetEvent args) + { + var message = args.Message; + + message = _replacement.ApplyReplacements(message, "ohio"); + + // Prefix + if (_random.Prob(0.15f)) + { + var pick = _random.Next(1, 7); + + // Reverse sanitize capital + message = message[0].ToString().ToLower() + message.Remove(0, 1); + message = Loc.GetString($"accent-ohio-prefix-{pick}") + " " + message; + } + + // Sanitize capital again, in case we substituted a word that should be capitalized + message = message[0].ToString().ToUpper() + message.Remove(0, 1); + + // Suffixes + if (_random.Prob(0.3f)) + { + var pick = _random.Next(1, 13); + message += Loc.GetString($"accent-ohio-suffix-{pick}"); + } + + args.Message = message; + } +}; diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index ee8bd479299..53865ac585b 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Body.Systems; using Content.Shared.Body.Events; using Content.Shared.ActionBlocker; +using Content.Shared.Backmen.Surgery.Body.Events; using Content.Shared.Body.Part; using Content.Shared.CombatMode; using Content.Shared.Damage.Systems; diff --git a/Content.Server/Light/Components/MatchstickComponent.cs b/Content.Server/Light/Components/MatchstickComponent.cs deleted file mode 100644 index 3c47f4c18b3..00000000000 --- a/Content.Server/Light/Components/MatchstickComponent.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Content.Server.Light.EntitySystems; -using Content.Shared.Smoking; -using Robust.Shared.Audio; - -namespace Content.Server.Light.Components -{ - [RegisterComponent] - [Access(typeof(MatchstickSystem))] - public sealed partial class MatchstickComponent : Component - { - /// - /// Current state to matchstick. Can be Unlit, Lit or Burnt. - /// - [DataField("state")] - public SmokableState CurrentState = SmokableState.Unlit; - - /// - /// How long will matchstick last in seconds. - /// - [ViewVariables(VVAccess.ReadOnly)] - [DataField("duration")] - public int Duration = 10; - - /// - /// Sound played when you ignite the matchstick. - /// - [DataField("igniteSound", required: true)] public SoundSpecifier IgniteSound = default!; - } -} diff --git a/Content.Server/Light/EntitySystems/MatchstickSystem.cs b/Content.Server/Light/EntitySystems/MatchstickSystem.cs index 7e09280c169..12c09fc1d89 100644 --- a/Content.Server/Light/EntitySystems/MatchstickSystem.cs +++ b/Content.Server/Light/EntitySystems/MatchstickSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Item; using Content.Shared.Smoking; using Content.Shared.Smoking.Components; // Shitmed Change +using Content.Shared.Smoking.Systems; using Content.Shared.Smoking.Systems; // Shitmed Change using Content.Shared.Temperature; using Robust.Server.GameObjects; @@ -98,6 +99,9 @@ public void Ignite(Entity matchstick, EntityUid user) // Shitmed Change Start public override bool SetState(Entity ent, SmokableState value) { + var uid = ent.Owner; + var component = ent.Comp; + component.CurrentState = value; if (_lights.TryGetLight(uid, out var pointLightComponent)) { diff --git a/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs b/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs deleted file mode 100644 index 6a76fee77b3..00000000000 --- a/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Content.Shared.Body.Events; -using Content.Server.Body.Components; -using Content.Shared.Body.Systems; -using Content.Shared._Shitmed.Body.Organ; -using Content.Server._Shitmed.DelayedDeath; - -namespace Content.Server._Shitmed.Body.Organ; - -public sealed class HeartSystem : EntitySystem -{ - [Dependency] private readonly SharedBodySystem _bodySystem = default!; - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(HandleAddition); - SubscribeLocalEvent(HandleRemoval); - } - - private void HandleRemoval(EntityUid uid, HeartComponent _, ref OrganRemovedFromBodyEvent args) - { - if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.OldBody)) - return; - - // TODO: Add some form of very violent bleeding effect. - EnsureComp(args.OldBody); - } - - private void HandleAddition(EntityUid uid, HeartComponent _, ref OrganAddedToBodyEvent args) - { - if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Body)) - return; - - if (_bodySystem.TryGetBodyOrganEntityComps(args.Body, out var _)) - RemComp(args.Body); - } - // Shitmed-End -} diff --git a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs deleted file mode 100644 index a844816c8ae..00000000000 --- a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Content.Server._Shitmed.DelayedDeath; - -[RegisterComponent] -public sealed partial class DelayedDeathComponent : Component -{ - /// - /// How long it takes to kill the entity. - /// - [DataField] - public float DeathTime = 60; - - /// - /// How long it has been since the delayed death timer started. - /// - public float DeathTimer; -} diff --git a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs deleted file mode 100644 index 33517bc0480..00000000000 --- a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.Mobs.Systems; -using Robust.Shared.Prototypes; -namespace Content.Server._Shitmed.DelayedDeath; - -public partial class DelayedDeathSystem : EntitySystem -{ - [Dependency] private readonly DamageableSystem _damageable = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly IPrototypeManager _prototypes = default!; - public override void Update(float frameTime) - { - base.Update(frameTime); - - using var query = EntityQueryEnumerator(); - while (query.MoveNext(out var ent, out var component)) - { - component.DeathTimer += frameTime; - - if (component.DeathTimer >= component.DeathTime && !_mobState.IsDead(ent)) - { - var damage = new DamageSpecifier(_prototypes.Index("Bloodloss"), 150); - _damageable.TryChangeDamage(ent, damage, partMultiplier: 0f); - } - } - } -} diff --git a/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs b/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs index 43c1588c2a6..7000bfcbb71 100644 --- a/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs +++ b/Content.Shared/Backmen/Surgery/Body/CyberneticsComponent.cs @@ -1,16 +1,16 @@ using Robust.Shared.GameStates; -namespace Content.Shared._Shitmed.Cybernetics; +namespace Content.Shared.Backmen.Surgery.Body; /// /// Component for cybernetic implants that can be installed in entities /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class CyberneticsComponent : Component +public sealed partial class CyberneticsComponent : Component { /// /// Is the cybernetic implant disabled by EMPs, etc? /// [DataField, AutoNetworkedField] public bool Disabled = false; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs b/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs index 3f65fc37b19..a1bb59761d6 100644 --- a/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs +++ b/Content.Shared/Backmen/Surgery/Body/Events/BodyPartEvents.cs @@ -1,7 +1,6 @@ -using Content.Shared.Humanoid; using Content.Shared.Body.Part; -namespace Content.Shared._Shitmed.Body.Events; +namespace Content.Shared.Backmen.Surgery.Body.Events; /// /// Raised on an entity when attempting to remove a body part. @@ -27,4 +26,10 @@ namespace Content.Shared._Shitmed.Body.Events; [ByRefEvent] public readonly record struct BodyPartDisabledEvent(Entity Part); +[ByRefEvent] +public readonly record struct BodyPartAddedEvent(string Slot, Entity Part); + +[ByRefEvent] +public readonly record struct BodyPartRemovedEvent(string Slot, Entity Part); + public readonly record struct BodyPartComponentsModifyEvent(EntityUid Body, bool Add); diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs index be6ab40a2d2..03e3cfff943 100644 --- a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs +++ b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectComponent.cs @@ -2,7 +2,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Shared._Shitmed.BodyEffects; +namespace Content.Shared.Backmen.Surgery.Body.Organs; [RegisterComponent, NetworkedComponent] [AutoGenerateComponentPause] @@ -23,4 +23,4 @@ public sealed partial class BodyPartEffectComponent : Component [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] public TimeSpan NextUpdate = TimeSpan.Zero; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs index 96cdae1d78f..42c97994338 100644 --- a/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs +++ b/Content.Shared/Backmen/Surgery/Body/Organs/BodyPartEffectSystem.cs @@ -1,14 +1,14 @@ -using Content.Shared._Shitmed.Body.Events; using Content.Shared.Body.Part; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; using Robust.Shared.Timing; using System.Linq; +using Content.Shared.Backmen.Surgery.Body.Events; + +namespace Content.Shared.Backmen.Surgery.Body.Organs; -namespace Content.Shared._Shitmed.BodyEffects; public partial class BodyPartEffectSystem : EntitySystem { - [Dependency] private readonly IComponentFactory _compFactory = default!; [Dependency] private readonly ISerializationManager _serManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Initialize() @@ -93,4 +93,4 @@ private void RemoveComponents(EntityUid body, effectComp.Active.Remove(key); } } -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs index c0c627b8f0b..70a5d695b8e 100644 --- a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectComponent.cs @@ -3,7 +3,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Shared._Shitmed.BodyEffects; +namespace Content.Shared.Backmen.Surgery.Body.Organs; [RegisterComponent, NetworkedComponent] [AutoGenerateComponentPause] @@ -24,4 +24,4 @@ public sealed partial class OrganEffectComponent : Component [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] public TimeSpan NextUpdate = TimeSpan.Zero; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs index 6b290f1955b..a445ce922f4 100644 --- a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEffectSystem.cs @@ -1,6 +1,5 @@ // We keep this clone of the other system since I don't know yet if I'll need organ specific functions in the future. // will delete or refactor as time goes on. -using Content.Shared._Shitmed.Body.Organ; using Content.Shared.Body.Organ; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; @@ -9,7 +8,7 @@ using Robust.Shared.Network; -namespace Content.Shared._Shitmed.BodyEffects; +namespace Content.Shared.Backmen.Surgery.Body.Organs; public partial class OrganEffectSystem : EntitySystem { [Dependency] private readonly IComponentFactory _compFactory = default!; @@ -107,4 +106,4 @@ private void RemoveComponents(EntityUid body, effectComp.Active.Remove(key); } } -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs index 4126b4d13a4..407163d1b8a 100644 --- a/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs +++ b/Content.Shared/Backmen/Surgery/Body/Organs/OrganEvents.cs @@ -1,5 +1,5 @@ using Content.Shared.Body.Organ; -namespace Content.Shared._Shitmed.Body.Organ; +namespace Content.Shared.Backmen.Surgery.Body.Organs; public readonly record struct OrganComponentsModifyEvent(EntityUid Body, bool Add); diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs index d20cdb5a6b8..166c5340d2f 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs @@ -1,4 +1,3 @@ -using System.Diagnostics; using System.Linq; using Content.Shared.Body.Components; using Content.Shared.Body.Part; @@ -6,8 +5,10 @@ using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; +using Content.Shared.Backmen.Surgery.Body.Events; + +// ReSharper disable once CheckNamespace namespace Content.Shared.Body.Systems; public partial class SharedBodySystem diff --git a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs index 444f1be9466..c2ec23e1194 100644 --- a/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Targeting.cs @@ -15,6 +15,7 @@ using Robust.Shared.Timing; using System.Threading; using System.Threading.Tasks; +using Content.Shared.Backmen.Surgery.Body.Events; using Content.Shared.Backmen.Surgery.Steps.Parts; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; diff --git a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs index e581867fc30..343e0b79eb9 100644 --- a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs +++ b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartComponent.cs @@ -1,7 +1,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Shared._Shitmed.BodyEffects.Subsystems; +namespace Content.Shared.Backmen.Surgery.Body.Subsystems; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class GenerateChildPartComponent : Component @@ -15,4 +15,4 @@ public sealed partial class GenerateChildPartComponent : Component [DataField] public bool Active = false; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs index 00215048e73..c0ddc5692cf 100644 --- a/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs +++ b/Content.Shared/Backmen/Surgery/Body/Subsystems/GenerateChildPartSystem.cs @@ -1,12 +1,12 @@ using Content.Shared.Body.Part; using Content.Shared.Body.Systems; -using Content.Shared._Shitmed.Body.Events; using Robust.Shared.Map; using Robust.Shared.Timing; using Robust.Shared.Network; using System.Numerics; +using Content.Shared.Backmen.Surgery.Body.Events; -namespace Content.Shared._Shitmed.BodyEffects.Subsystems; +namespace Content.Shared.Backmen.Surgery.Body.Subsystems; public sealed class GenerateChildPartSystem : EntitySystem { diff --git a/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs b/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs index af03fbf912c..d44bac2f3ef 100644 --- a/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs +++ b/Content.Shared/Backmen/Surgery/Conditions/SurgeryComponentConditionComponent.cs @@ -2,7 +2,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Shared._Shitmed.Medical.Surgery.Conditions; +namespace Content.Shared.Backmen.Surgery.Conditions; // Quite the redundant name eh? [RegisterComponent, NetworkedComponent] @@ -14,4 +14,4 @@ public sealed partial class SurgeryComponentConditionComponent : Component [DataField] public bool Inverse; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs index 02903c4a909..cd7131e36b4 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs @@ -5,7 +5,6 @@ using Content.Shared.Bed.Sleep; using Content.Shared.Body.Part; using Content.Shared.Body.Organ; -using Content.Shared.Body.Events; using Content.Shared.Buckle.Components; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; @@ -17,6 +16,7 @@ using Robust.Shared.Prototypes; using System.Linq; using Content.Shared.Backmen.Mood; +using Content.Shared.Backmen.Surgery.Body.Events; using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Backmen.Surgery.Effects.Step; using Content.Shared.Backmen.Surgery.Steps; @@ -24,6 +24,7 @@ using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Containers.ItemSlots; using Content.Shared.Medical.Surgery; +using AmputateAttemptEvent = Content.Shared.Body.Events.AmputateAttemptEvent; namespace Content.Shared.Backmen.Surgery; @@ -72,7 +73,7 @@ private void OnToolStep(Entity ent, ref SurgeryStepEvent a { foreach (var reg in ent.Comp.Tool.Values) { - if (!AnyHaveComp(args.Tools, reg.Component, out var tool)) + if (!AnyHaveComp(args.Tools, reg.Component, out var tool, out _)) return; if (_net.IsServer && @@ -218,21 +219,21 @@ private void OnToolCanPerform(Entity ent, ref SurgeryCanPe if (ent.Comp.Tool != null) { - args.ValidTools ??= new HashSet(); + args.ValidTools ??= new Dictionary(); foreach (var reg in ent.Comp.Tool.Values) { - if (!AnyHaveComp(args.Tools, reg.Component, out var withComp)) + if (!AnyHaveComp(args.Tools, reg.Component, out var tool, out var speed)) { args.Invalid = StepInvalidReason.MissingTool; - if (reg.Component is ISurgeryToolComponent tool) - args.Popup = $"You need {tool.ToolName} to perform this step!"; + if (reg.Component is ISurgeryToolComponent required) + args.Popup = $"You need {required.ToolName} to perform this step!"; return; } - args.ValidTools.Add(withComp); + args.ValidTools[tool] = speed; } } } @@ -752,7 +753,7 @@ public bool PreviousStepsComplete(EntityUid body, EntityUid part, Entity? validTools) + out Dictionary? validTools) { var type = BodyPartType.Other; if (TryComp(part, out BodyPartComponent? partComp)) @@ -806,18 +807,20 @@ public bool IsStepComplete(EntityUid body, EntityUid part, EntProtoId step, Enti return !ev.Cancelled; } - private bool AnyHaveComp(List tools, IComponent component, out EntityUid withComp) + private bool AnyHaveComp(List tools, IComponent component, out EntityUid withComp, out float speed) { foreach (var tool in tools) { - if (HasComp(tool, component.GetType())) + if (EntityManager.TryGetComponent(tool, component.GetType(), out var found) && found is ISurgeryToolComponent toolComp) { withComp = tool; + speed = toolComp.Speed; return true; } } - withComp = default; + withComp = EntityUid.Invalid; + speed = 1f; return false; } } diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs index 89398c92e6f..47711d80f66 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Shared.Backmen.Surgery.Conditions; using Content.Shared.Backmen.Surgery.Steps.Parts; using Content.Shared.Medical.Surgery.Conditions; using Content.Shared.Body.Systems; @@ -140,7 +141,7 @@ private void OnComponentConditionValid(Entity ent, ref SurgeryValidEvent args) { if (!TryComp(args.Part, out var part)) diff --git a/Content.Shared/Backmen/Surgery/Steps/SurgeryCanPerformStepEvent.cs b/Content.Shared/Backmen/Surgery/Steps/SurgeryCanPerformStepEvent.cs index e89a05efac9..d922ab00417 100644 --- a/Content.Shared/Backmen/Surgery/Steps/SurgeryCanPerformStepEvent.cs +++ b/Content.Shared/Backmen/Surgery/Steps/SurgeryCanPerformStepEvent.cs @@ -10,5 +10,5 @@ public record struct SurgeryCanPerformStepEvent( SlotFlags TargetSlots, string? Popup = null, StepInvalidReason Invalid = StepInvalidReason.None, - HashSet? ValidTools = null + Dictionary? ValidTools = null ) : IInventoryRelayEvent; diff --git a/Content.Shared/Backmen/Surgery/Tools/BoneSawComponent.cs b/Content.Shared/Backmen/Surgery/Tools/BoneSawComponent.cs index 17e9ab149c5..75bf3ad2233 100644 --- a/Content.Shared/Backmen/Surgery/Tools/BoneSawComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/BoneSawComponent.cs @@ -7,4 +7,6 @@ public sealed partial class BoneSawComponent : Component, ISurgeryToolComponent { public string ToolName => "a bone saw"; public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } } diff --git a/Content.Shared/Backmen/Surgery/Tools/BoneSetterComponent.cs b/Content.Shared/Backmen/Surgery/Tools/BoneSetterComponent.cs index 8d2dda0cb1c..77740fe2adf 100644 --- a/Content.Shared/Backmen/Surgery/Tools/BoneSetterComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/BoneSetterComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.GameStates; -namespace Content.Shared._Shitmed.Medical.Surgery.Tools; +namespace Content.Shared.Backmen.Surgery.Tools; [RegisterComponent, NetworkedComponent] public sealed partial class BoneSetterComponent : Component, ISurgeryToolComponent @@ -9,4 +9,4 @@ public sealed partial class BoneSetterComponent : Component, ISurgeryToolCompone public bool? Used { get; set; } = null; [DataField] public float Speed { get; set; } = 1f; -} \ No newline at end of file +} diff --git a/Content.Shared/Backmen/Surgery/Tools/CauteryComponent.cs b/Content.Shared/Backmen/Surgery/Tools/CauteryComponent.cs index a4dc6ade3b5..aa16a953a85 100644 --- a/Content.Shared/Backmen/Surgery/Tools/CauteryComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/CauteryComponent.cs @@ -7,4 +7,6 @@ public sealed partial class CauteryComponent : Component, ISurgeryToolComponent { public string ToolName => "a cautery"; public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; } diff --git a/Content.Shared/Backmen/Surgery/Tools/HemostatComponent.cs b/Content.Shared/Backmen/Surgery/Tools/HemostatComponent.cs index c83c2bde510..4bf422f168c 100644 --- a/Content.Shared/Backmen/Surgery/Tools/HemostatComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/HemostatComponent.cs @@ -7,4 +7,6 @@ public sealed partial class HemostatComponent : Component, ISurgeryToolComponent { public string ToolName => "a hemostat"; public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; } diff --git a/Content.Shared/Backmen/Surgery/Tools/RetractorComponent.cs b/Content.Shared/Backmen/Surgery/Tools/RetractorComponent.cs index 49d917253dd..c2bbfdb0b85 100644 --- a/Content.Shared/Backmen/Surgery/Tools/RetractorComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/RetractorComponent.cs @@ -7,4 +7,6 @@ public sealed partial class RetractorComponent : Component, ISurgeryToolComponen { public string ToolName => "a retractor"; public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; } diff --git a/Content.Shared/Backmen/Surgery/Tools/ScalpelComponent.cs b/Content.Shared/Backmen/Surgery/Tools/ScalpelComponent.cs index 5d9e95c78fb..eea2f56ee15 100644 --- a/Content.Shared/Backmen/Surgery/Tools/ScalpelComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/ScalpelComponent.cs @@ -7,4 +7,6 @@ public sealed partial class ScalpelComponent : Component, ISurgeryToolComponent { public string ToolName => "a scalpel"; public bool? Used { get; set; } = null; + [DataField] + public float Speed { get; set; } = 1f; } diff --git a/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolConditionsSystem.cs similarity index 97% rename from Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs rename to Content.Shared/Backmen/Surgery/Tools/SurgeryToolConditionsSystem.cs index 0c2ff64722c..76a62738bba 100644 --- a/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs +++ b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolConditionsSystem.cs @@ -6,7 +6,7 @@ using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; -namespace Content.Shared._Shitmed.Medical.Surgery.Tools; +namespace Content.Shared.Backmen.Surgery.Tools; /// /// Prevents using esword or welder when off, laser when no charges. diff --git a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs index 025f39e1aa7..8f3231955da 100644 --- a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs +++ b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs @@ -1,11 +1,10 @@ -using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Examine; using Content.Shared.Verbs; using Robust.Shared.Utility; -namespace Content.Shared._Shitmed.Medical.Surgery.Tools; +namespace Content.Shared.Backmen.Surgery.Tools; /// /// Examining a surgical or ghetto tool shows everything it can be used for. diff --git a/Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs b/Content.Shared/Backmen/Surgery/Tools/TendingComponent.cs similarity index 88% rename from Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs rename to Content.Shared/Backmen/Surgery/Tools/TendingComponent.cs index 1d4d9325a63..cb68c628d43 100644 --- a/Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/TendingComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.GameStates; -namespace Content.Shared._Shitmed.Medical.Surgery.Tools; +namespace Content.Shared.Backmen.Surgery.Tools; /// /// Like Hemostat but lets ghetto tools be used differently for clamping and tending wounds. diff --git a/Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs b/Content.Shared/Backmen/Surgery/Tools/TweezersComponent.cs similarity index 88% rename from Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs rename to Content.Shared/Backmen/Surgery/Tools/TweezersComponent.cs index 0b5f6f65e07..682935d3804 100644 --- a/Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs +++ b/Content.Shared/Backmen/Surgery/Tools/TweezersComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.GameStates; -namespace Content.Shared._Shitmed.Medical.Surgery.Tools; +namespace Content.Shared.Backmen.Surgery.Tools; /// /// Like Hemostat but lets ghetto tools be used differently for clamping and removing organs. diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index e946f854623..747ea108ab0 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -2,7 +2,6 @@ using Content.Shared.Body.Systems; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Content.Shared._Shitmed.Medical.Surgery.Tools; namespace Content.Shared.Body.Organ; diff --git a/Content.Shared/Body/Part/BodyPartEvents.cs b/Content.Shared/Body/Part/BodyPartEvents.cs deleted file mode 100644 index 9872b092002..00000000000 --- a/Content.Shared/Body/Part/BodyPartEvents.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Shared.Humanoid; - -namespace Content.Shared.Body.Part; - -[ByRefEvent] -public readonly record struct BodyPartAddedEvent(string Slot, Entity Part); - -// Kind of a clone of the above for surgical reattachment specifically. -[ByRefEvent] -public readonly record struct BodyPartAttachedEvent(Entity Part); - -[ByRefEvent] -public readonly record struct BodyPartRemovedEvent(string Slot, Entity Part); - -// Kind of a clone of the above for any instances where we call DropPart(), reasoning being that RemovedEvent fires off -// a lot more often than what I'd like due to PVS. -[ByRefEvent] -public readonly record struct BodyPartDroppedEvent(Entity Part); - -[ByRefEvent] -public readonly record struct BodyPartEnableChangedEvent(bool Enabled); - -[ByRefEvent] -public readonly record struct BodyPartEnabledEvent(Entity Part); - -[ByRefEvent] -public readonly record struct BodyPartDisabledEvent(Entity Part); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index 94022f6b84f..e44f5e81911 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Body.Components; using Content.Shared.Body.Events; using Content.Shared.Body.Organ; @@ -8,11 +9,6 @@ // Shitmed Change -using Content.Shared.Damage; -using Content.Shared._Shitmed.BodyEffects; -using Content.Shared._Shitmed.Body.Events; -using Content.Shared._Shitmed.Body.Organ; - namespace Content.Shared.Body.Systems; public partial class SharedBodySystem diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index 4ba07b2531a..5bba1751bcc 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -4,7 +4,6 @@ using Content.Shared.Body.Part; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; -using Content.Shared.Hands.EntitySystems; using Content.Shared.Humanoid; using Content.Shared.Inventory; using Content.Shared.Movement.Components; @@ -15,10 +14,10 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.Backmen.Mood; +using Content.Shared.Backmen.Surgery.Body.Events; +using Content.Shared.Backmen.Surgery.Body.Organs; +using AmputateAttemptEvent = Content.Shared.Body.Events.AmputateAttemptEvent; -// Shitmed Change Start -using Content.Shared._Shitmed.Body.Events; -using Content.Shared._Shitmed.BodyEffects; namespace Content.Shared.Body.Systems; public partial class SharedBodySystem @@ -85,32 +84,6 @@ private void OnPartEnableChanged(Entity partEnt, ref BodyPart Dirty(partEnt, partEnt.Comp); } - private void EnablePart(Entity partEnt) - { - if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) - return; - - // I hate having to hardcode these checks so much. - if (partEnt.Comp.PartType == BodyPartType.Leg) - AddLeg(partEnt, (partEnt.Comp.Body.Value, body)); - - if (partEnt.Comp.PartType == BodyPartType.Arm) - { - var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); - if (hand != default) - { - var ev = new BodyPartEnabledEvent(hand); - RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); - } - } - - if (partEnt.Comp.PartType == BodyPartType.Hand) - { - var ev = new BodyPartEnabledEvent(partEnt); - RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); - } - } - /// /// This function handles disabling or enabling equipment slots when an entity is /// missing all of a given part type, or they get one added to them. @@ -133,31 +106,6 @@ public void ChangeSlotState(Entity partEnt, bool disable) } - private void DisablePart(Entity partEnt) - { - if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) - return; - - if (partEnt.Comp.PartType == BodyPartType.Leg) - RemoveLeg(partEnt, (partEnt.Comp.Body.Value, body)); - - if (partEnt.Comp.PartType == BodyPartType.Arm) - { - var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); - if (hand != default) - { - var ev = new BodyPartDisabledEvent(hand); - RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); - } - } - - if (partEnt.Comp.PartType == BodyPartType.Hand) - { - var ev = new BodyPartDisabledEvent(partEnt); - RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); - } - } - // TODO: Refactor this crap. I hate it so much. private void RemovePartEffect(Entity partEnt, Entity bodyEnt) { @@ -207,7 +155,6 @@ protected virtual void DropPart(Entity partEnt) SharedTransform.AttachToGridOrMap(partEnt, transform); _randomHelper.RandomOffset(partEnt, 0.5f); } - } private void OnAmputateAttempt(Entity partEnt, ref AmputateAttemptEvent args) => @@ -338,33 +285,6 @@ protected virtual void RemovePart( PartRemoveDamage(bodyEnt, partEnt); } - protected virtual void DropPart(Entity partEnt) - { - // I don't know if this can cause issues, since any part that's being detached HAS to have a Body. - // though I really just want the compiler to shut the fuck up. - var body = partEnt.Comp.Body.GetValueOrDefault(); - if (TryComp(partEnt, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) - { - var enableEvent = new BodyPartEnableChangedEvent(false); - RaiseLocalEvent(partEnt, ref enableEvent); - - if (TryComp(body, out HumanoidAppearanceComponent? bodyAppearance) - && !HasComp(partEnt) - && !TerminatingOrDeleted(body) - && !TerminatingOrDeleted(partEnt)) - EnsureComp(partEnt); - - SharedTransform.AttachToGridOrMap(partEnt, transform); - _randomHelper.RandomOffset(partEnt, 0.5f); - var droppedEvent = new BodyPartDroppedEvent(partEnt); - RaiseLocalEvent(body, ref droppedEvent); - } - - } - - private void OnAmputateAttempt(Entity partEnt, ref AmputateAttemptEvent args) => - DropPart(partEnt); - private void AddLeg(Entity legEnt, Entity bodyEnt) { if (!Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) @@ -392,39 +312,6 @@ private void RemoveLeg(Entity legEnt, Entity } } - // TODO: Refactor this crap. - private void RemovePartEffect(Entity partEnt, Entity bodyEnt) - { - if (TerminatingOrDeleted(bodyEnt) || !Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) - return; - - RemovePartChildren(partEnt, bodyEnt, bodyEnt.Comp); - } - - protected void RemovePartChildren(Entity partEnt, EntityUid bodyEnt, BodyComponent? body = null) - { - if (!Resolve(bodyEnt, ref body, logMissing: false)) - return; - - if (partEnt.Comp.Children.Any()) - { - foreach (var slotId in partEnt.Comp.Children.Keys) - { - if (Containers.TryGetContainer(partEnt, GetPartSlotContainerId(slotId), out var container) && - container is ContainerSlot slot && - slot.ContainedEntity is { } childEntity && - TryComp(childEntity, out BodyPartComponent? childPart)) - { - var ev = new BodyPartEnableChangedEvent(false); - RaiseLocalEvent(childEntity, ref ev); - DropPart((childEntity, childPart)); - } - } - - Dirty(bodyEnt, body); - } - } - private void PartRemoveDamage(Entity bodyEnt, Entity partEnt) { if (!Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) @@ -440,16 +327,6 @@ private void PartRemoveDamage(Entity bodyEnt, Entity partEnt, ref BodyPartEnableChangedEvent args) - { - partEnt.Comp.Enabled = args.Enabled; - Dirty(partEnt, partEnt.Comp); - - if (args.Enabled) - EnablePart(partEnt); - else - DisablePart(partEnt); - } private void EnablePart(Entity partEnt) { if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) @@ -727,18 +604,6 @@ public bool CanAttachPart( && Containers.CanInsert(partId, container); } - /// - /// Shitmed Change: Returns true if this parentId supports attaching a new part to the specified slot. - /// - public bool CanAttachToSlot( - EntityUid parentId, - string slotId, - BodyPartComponent? parentPart = null) - { - return Resolve(parentId, ref parentPart, logMissing: false) - && parentPart.Children.ContainsKey(slotId); - } - public bool AttachPartToRoot( EntityUid bodyId, EntityUid partId, @@ -1149,20 +1014,6 @@ private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet 0; } - public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) - { - if (!Resolve(bodyId, ref body, logMissing: false)) - return 0; - - int count = 0; - foreach (var part in GetBodyChildren(bodyId, body)) - { - if (part.Component.PartType == partType) - count++; - } - return count; - } - public string GetSlotFromBodyPart(BodyPartComponent part) { if (part.Symmetry != BodyPartSymmetry.None) @@ -1241,18 +1092,6 @@ public bool TryGetBodyPartAdjacentPartsComponents( return false; } - private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet containerNames) - { - containerNames = partType switch - { - BodyPartType.Arm => new() { "gloves" }, - BodyPartType.Leg => new() { "shoes" }, - BodyPartType.Head => new() { "eyes", "ears", "head", "mask" }, - _ => new() - }; - return containerNames.Count > 0; - } - public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) { if (!Resolve(bodyId, ref body, logMissing: false)) diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 94415603746..40ab8d087c7 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -22,12 +22,9 @@ public sealed class DamageableSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly INetManager _netMan = default!; - [Dependency] private readonly SharedBodySystem _body = default!; // Shitmed Change - [Dependency] private readonly IRobustRandom _random = default!; // Shitmed Change [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; - [Dependency] private readonly SharedBodySystem _body = default!; - [Dependency] private readonly IRobustRandom _random = default!; + private EntityQuery _appearanceQuery; private EntityQuery _damageableQuery; private EntityQuery _mindContainerQuery; diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index 810d947dc46..666fe3f4514 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -340,34 +340,4 @@ public bool NextItem(out EntityUid item, [NotNullWhen(true)] out SlotDefinition? return false; } } - - // Shitmed Change Start - public void SetSlotStatus(EntityUid uid, string slotName, bool isDisabled, InventoryComponent? inventory = null) - { - if (!Resolve(uid, ref inventory)) - return; - - foreach (var slot in inventory.Slots) - { - if (slot.Name != slotName) - continue; - - if (isDisabled) - { - if (!TryGetSlotContainer(uid, slotName, out var container, out _, inventory)) - break; - - if (container.ContainedEntity is { } entityUid && TryComp(entityUid, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) - { - _transform.AttachToGridOrMap(entityUid, transform); - _randomHelper.RandomOffset(entityUid, 0.5f); - } - } - slot.Disabled = isDisabled; - break; - } - - Dirty(uid, inventory); - } - // Shitmed Change End } diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml b/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml new file mode 100644 index 00000000000..c88a3e0b70f --- /dev/null +++ b/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml @@ -0,0 +1,49 @@ +- files: ["cautery1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/cautery1.ogg" + +- files: ["cautery2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/cautery2.ogg" + +- files: ["hemostat.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/hemostat.ogg" + +- files: ["organ1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/organ1.ogg" + +- files: ["organ2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/organ2.ogg" + +- files: ["retractor1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/retractor1.ogg" + +- files: ["retractor2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/retractor2.ogg" + +- files: ["saw.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/saw.ogg" + +- files: ["scalpel1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel1.ogg" + +- files: ["scalpel2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel2.ogg" \ No newline at end of file diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/cautery1.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/cautery1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fbd9f2b4d86257e87ec704b2138249f9c60efe65 GIT binary patch literal 34770 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/cautery2.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/cautery2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cc91e9f3ce679bfaf1aae3ea05bd2e10be827a49 GIT binary patch literal 16854 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�L!ICar2S(AT0m!2gadm}(y$<_sa2T&)z z8=l_y{P4aAd2$8qoMi?^q}6%%_C_3zTya&@x%oO54$1>&dzz5a7aO=Q-f&^hqz@47 zx)w0eM#tGM8cC24Pr5pL||ibPeBiio2)|C|ITk1j|%_Kv#{ zAKew~h78*cPcRD?AG79|yijtSXE|MD9-nBvai*u6IF&>JTCMU{eml60*9enPy_Mf* zB7sg97@Kpz^9X>>_NUj|8D{7El36zqqp82VPP*m{xYoTo#0n_mbgInxMU<*_2pDMue_Uc|Ox_j}QE+wp(!UEK_~#tEK^ari1>#&awq zm&29+o$y1mVt&W3pVzIBM!Wm$W>b-!j!i)O@;3_{e}>v@_}8-VQfxly1;T5q#H$aF ztLW;d8N;^W>a!BuwgX7LwJJAQfNS&39J-|)SGuAi?TCRMS2>r6?TW@de%Jg^U8(N8 zhy1TA?^zV9KZ|el$KjBrfos@QdeVh0ye1cXUEv{h=3OR|6okU8>tB~A5BIZyO^**& z`Q(T6r$q0_F_?}>HhNwJA77o&PkYZcz$&t_SXQG#AB$wJA%N_#gY^U~dWup4lNqN9 z2s=PyJ+=4T@reW;-kXOxsDV{VO2u`uNDSbxup+Cqh0LF`r{m+(wQJMsA^zcK-A~?j zSx=OyC>MIjVVmN=+kG%A-K+KF67dsj5xe2OJ}UoxW1M)Z#A2(fyQ=%&0H{#f2&8qhsB3VEOoB zVNrlErjW1~GHmEA*3~fPIp))_2pA zChReztaJuOWJl{@Ii%oxK1uvckg#ZhS!R*_>rvEfg+Q7_yV*oC+0&Uj*g#$cRzs+L@0*T(XOWT{nz_3f@h(-L`zoe8iIVmp7Sqym zaxUCe2$8@8Nm@AzK&kv5~d_F#>r=A0sz0TtAd%DCP_tyt0C?${?cF(->NhAwE#xTf|U`0ab zftr|Bcj9Z#1yWI{`hwETF> z#PL_~vvB56Gh{p_mpTlJ15((s&Pvm~StiiP^51+fFuYHUCRgZnICkVRYoWphBo-g; zU6Pz-7e!4@>KSWBDU9Jf&5IEkrP+GiAE0fhoS!*O8ng ze)iSMVeq73Ym2VIGC3+_CFJ!N6u?3&<$aix90t%O;CpjZ(RzN9lSg}blT^_vW|w8u zd^~EOO7k;_&-bHo#o!NG&NqYkEyA37$}DWdIagnnOuTsfPp}hH+Mx#yqsA}ix5-{^ z<@?s#aJ|w`l(Hd`2>E7mbN!sUm)rBJ_{@%bhuDa*YSzzPX7D3zHv$bm_A)A#=z6SD zJe7k2bF@R^ZOQhd?izFeXV!!);NmyMr+4yZte}rwioZF=fH(vMz;DkM0eh&8H1EGs im7s%^w+g>CQ2zPU`nKnPtADk++-EmIg8xSL=lMVXV@?kM literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/organ1.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/organ1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..37eaffc1a34ceb6bd5978d4fdadf3cf006889a82 GIT binary patch literal 18912 zcmbTe1ymhDvoJUpcXuuXhl{(r1c%`6?!ie276|SZEJ(1R7uNtG1PK}-I0Oj6f(H)} zc1XVWzqkMH`S+ZiGq>sK>aOnUs_L$)=|R)MK?gtp{&U^<{>v17{22kEhWL4SSvz?@ z6hY*x|5L>u@;B24(R^t6zpjUt4-jLnW?sDJ`~TbZ8Sx(?eh_Zx^wg14)60Rz)yZ1_ zFM1kf8eVQ*Zf+rNei{~SJ6m5HCwB)L1$RFuFAsM&J9i%#D%cJi{OM}T$f;`Rsmm&8 zOYq@?1qvE+n)2YoV>KEbA75K14~mCc%DQR_65bxZ?zR@*zFrP?Ue7E%yd13DdC)+p zoTi4ZjGV3n3Yb?^(9l+p_*bf~uAreS@z9fuwyv^{t^@@6-=JZ#a{3V9p%RZ8O@HW@ zWIX`D0{}|~7*3kKGORSch~-&Uy3#|gpF1WiJ*J<`CZ1>DzY-dLTVen}0zz5P6N|T$ zoySES$e0to3PqeWgv)7AW3|>q&_A9t*|?WAmASZ&!x+)9jgSG5BhpH=uZXlC66qf_e?nmgjk4u)ZsNiNQNW6RyU)TauKE(-&Dxj;1LUHJ%xLo7yfE zvlrguBHMZYNznh&K?9CO7KPjvPZsR~eKf2r%L_#Hk1QG>6eJT+Od(RPCmN}Tj!iOX z{$kf66qw{w(9u=b1211Q13$YtKi@gOAfv2TCT&4RZLdt`UzuILvLcK8&wUlNdiikw zC7lKW6w-@iZouBsQM~;w@)j{7vKj%feV7s&^i(=nYO!*ey>qQoZi{18i`z&8`$z-U z-zuOqAw7%+D0Ipx`+wZ_Mwxd1-?y~m5Gx=J&gGydbkLJQL7QRFiyigv3=aVyPo=fl z`@Q%Tz4-^d#lc(ANB(oV+Sr*I?td}if$abw%>(WCgnkBRLz`pTOTfTeV$NHA4xEaI z8Tmh7VSnWXB!u>jeWr6L8eg*2-)RX2(UKLR$zlEL39JxZ^n)hnOU~(-2u{vsVFgj{ zbZ?AqE^~WDR_9Z|C6*kXwQE zoThS6D;5mFwnkraw%)Z9fw`FUT;}F>-GBK0BNi3rdE>nz>tKtR#ax$mbTcq_ZJT#E zhW=3Yzl)DF$TzEbvVk`*X@U|_tchsLXw#^Dl5o-rd4^ym)Cq}?RVu=tXp=LS`n>#0 zISl|r;Qf{2|4ROf@;@mqNsVP4W@#Md9btb+s{6)8_v-ra6qz;0U4 zZpP1Up~cRmHOQ#tKMM0tZC2-e|A*#0s0f`%;)YTx(tm4CAxq+S;Y51nR0g9|re~QB zF*z04`MVWwG5$Braf~g`iYpEP!*YW>(|1Zr^^kM*SP;(T# z82*RmeBgn~f!fr-u73KDMu|yqLVXlS|0e?g;6pN&>fd!lOPgaxTVO_;Lr+)Y|Ew_} zbcSDjnjf6l3;-Yp0D6$g5qPm)$+GSehG;xn49G;dro8sLnWS5E?NmvzZtEMTP|cXg)x|pDYW% ztpb3@46Hq6m`LMSC1O-1RG1*LnR3}tdKhxDC zRL~>Vo6c0%Yj&I9w_DKFTOrY#X|Y=(2{y>|UFB0Z0v~5VsP9~6kj1QS&XD}P23PN?%7l`%rTJ#pq-Sjep)_wHM4D1#z^^8b@ zP3B&$Uj(g_Jz$=j@dcq)vvyXkzN;)wIZn=R-&N+YR9040wzyT+)|kBAseD^G+~81I zTRq$Wuc~$31EIC=DjV14h3-d6tXU>)fOJK|X$@PKx5L(P^1LBN}a8q6S@ zp-c1$m!$#E8_|sm-(olx`d|_$8;}RtARLx1qGdw}6@~yPwA(~Fc&z<2K6u(cX-af? zP-wk1RQjRmPgI;~)4#F~(C8*A59Os1s5rvXr?gRvN}s5>6s6B$^DD41k?8mXfKe)Hjp3xbtjLs5sR;bY9Ux@K|$kN%5tYiEvuS?ijI&ROd-Qo+u*7LDUY(xab+hwuTc?JblFi6 z<_a%0Sr|-jR0fT)d0Yer>z@@tV=N_6W##DCcY(n`DmXy9u36TvRT`3vJmr^1daBj)Gab#J^ZN_C-U=dGLSYfa5RFoM@LDL!o z3fgn7U(yYs;DG+EBbHd!SUiz5KDxZD_z`L<%oSnajMn&qqEOmDYV2IoG%t--^JfQ=B%=b-WW`{=A`W=gqar&{esE=kM&PgxB=rRh@-0Bx0B8n6sj>hl0d*Tw(<)~BFFRHtR@{W7HxTr&}X zXAf(piU?{^`eWDtO?s*}*d0hxg%=h$cm4VgfOO-18c;M`1^np1Ubg88+ zowcqOm;;5lc`L_71q8T^wFAI1GAdAqNU0#mOoqsP#SO=<9Q;9tYdk$^W@NA z{aK)mQ%3e+dVrhkgZ&W?0>H-s5FoM*eMs`W6aU*V`R^S1{|gZnpq+)U5AN0jWRz(C ztn$YMe;;jJ|6`fqPU+eMMmy1t$9gjd(bq zq1TrMju?e1A`-S!5&^QONKQqBg%Okz7z`92P@~h0RkFRcwOJWUGar_Yuf{4IAZ}E~ z(phb1uoqFZ(x$HuUCqlV!AfV1<2XQ-Qvn~X;{_tM!7Bap*3~>EQ`(?@lG#*)3S{g8 z4&8+V);wz+-we(_xI)ZY#|g|DV*+dLPk~USI?u?AlE#mdYkzr73mV(9e`ou_G0+Bi zQTQM&wDKyTR6WQDZ3M`Me`OKL|Emm7bo-xZfdaMtuU`5S*}tNNRs@#8s6ZiO`I}<| zbLjsJxWB>}K>(U^=^*BRW$6T9AAilebnOR;1gGW!@K;p-=Fn*$rt5EI+J9{yY(Y>& z5g%4z`W=SiVLDg-^^b^89EVhZP%HrOoOj-X%?{D@=S5_yMkIUTS##oR$BHP{+bNOv zlg*^_loIJ^yX@py$7^Z6u~Fgat4`NfVM%#8GnpzH_hGHcoG{s@= z@P0rxTlS@iph2RI?uQU1hlUfn2YkoYZ0kiARVc;z=Xyf`Y5+*ZrlF(D5lO^J!cE3Y z!A~VfBTNUy7Xa2Ep}0UO19Eh9w0&Z6-v%Osylq6uryod+f58t48rnZs1?g}8pKBh< z`49Zynm=@Nb^WaI2_q9DBNG#sAP;zP^Yd}TU>rO={Cxa;JiPq;{K9;!>})Ioyn?)J zf_%I}yn<}3to(euJOVtQSz&A}y!^a;Fcwxp-eEp|K|x+#HV&>cU<8>!8pmqE)sYVQ zN08@Olu@JpB31L@4T*vlb;dg!jB0G4Mgyfi5(Kf8x;INqvgA-ORowHo@YQ zInyF;B7lpR5x|1L+(M{>@Z+$;&9GSz3!$lRoL{UZ-l^&1TV}*EYR8ShI8DW z;MC<)epvfZ3qAF9>YHP*TXeabfnFaad+cKI`Q+oM-3_x!D}Hd=W`w*!ET0W9!{3X) zYvua&;;Gnlmdvkpk`ku;=KvP6KT=20^QfFRF$mnk?_%uys;hg1vR8~_jP<@!h~iFB zH_J6+Vcq$0Z-hRUfF2$pEPu?|bu|}bFHVBJOM8C-FF57UJ9#AZdMIF3ic^d5TR94V zbXU8*7&)nzu9~!hgU7*w=u_F@SD-gT&{rJDekdX3)3WKcM2a6tyQnj|oG5#A_4_&r z3EW#S-!JNaVIzVLj{w6TkNT$bcNh<<-UYoIeMB`Q8O3F6?-N0w$A`L!+n-g1%Lu4J z;)?4dwph`hf4?JoLc;k|WYU=~aP~rc>x(SG&x3T8hP2`AS4%;-E(J)0&>%{P>75GA z5<#_l(9vB1^BVGfZF_;0z>9kAG*hlBQH#Odd}Z>^+XNDo^`Yx$5+a+tn7WXztY_k{ zT?S`mPg_GV!awGZ*iDviaE~)9qV_a>_*whjIn?^Se=Wv&<3RI07YZPbJ>tFZ=hY+9 zb@2#ST0zDjmV|;n@4*-{&?^QpC?T zE)kY?Qy+N=440|-pOv=ykaPU>w)8jFdn=>RJG#Feo9S=D@B%?s{oaNs+^u*ODeDbp z$4`1&Qye8ia|TV??1A;wZS)=F4ujSeoz|=1nq2S1khI$tJOGO-gdfo@DT?s(SiS|s z_TzPvGEezWtVNB$7h1-s`J_RoNzKqVA&>qnzhim!MJkmDJ;a`7bM;ZI#Ht0smkmqr zoqSc<@3DBV1L8keR);7fN?e(iYY*@N43Lnk2+wbPhr25M+O~ufc&-jLTEDCG4-D+lqbD?@e%~l#g*=ChEsmue#_`o9pq!Fcd0JfySuDn>RL2-%VP9LJSJEjrUDk&3)-D(;j`rwJl6nTllV2wZg-)$RgZ1){YWF>lmn+A_JHocN8>R%n=(s$Cd_4<61M`NJ6 zN3vheTL1K9-*HYi4I@gvDZ7|-AkJY##O5hc`$dPin?DvwitV=a`hRZ9@7w6P;uf48@ROaI9J%pR=B06%wsLDy|BaAovUXUgiZ4sIL*z>j`^yl7KY zk)VC%_Xz(9i6m!y6q`QZ*x;8rMcpMy%@qj7?;{fXw~m)Rf!F=k_!4fEh~oGbGtc&O zrqoU2J|5giVMC0b3c%|t>9ks$9giA)GoBVW^x#vknAD702IpqH`&}0}1F$3CuSbs6 zDSS8Ueg~mkVm{{W$^U$2%RABY{D2jc{j1M!@sqQX?4eKj<{Frx4FWp~QV>_#5G=4SP0tzypcP<6x6`u--t^GmBi&dF)1@?1-L2a60Mk{JWk9Uz`O zByZ{H6@g9sdK=@LvW4~OFD&+JbIkpM$L$y_I0ycrWDH-OkM{y+26=Dcqg&s!)5q)4%we4x-IzQp zL!r-{T1T9KE(#z567tSkcfc*8_>LK1rDpnp<@k2+#C;Zdd~Of**W6q4=iPPY-+0+B zo4>!n+uFzh*E{l%Ce|AnibqW^nX?ultel~&p)>CstbSi6>qqfsR9BWAkodoL`!?wP z?d}qJvtC7dtVbG?=+2y3VrgB3q@Ka6;gA->3MB~&i5H$~&zb!Ainr{UyJEgBe$a@j zvtttkG?&TySKBt>E&Jo z2=YAla>x6y{p_c=@UMmJFC2pD^gPJte<_b}-J#9-?3(8swC^y!nu!rzlZ%|#fwQNW zo&<+JZyA#|_Z+GZI>)4*#vrq}T{bMpEZ0f0V7{+^_vOi6m!DNJ>gvUkyWyRM3ths~ z@|O_PlUk1LllSCr0$3g~&o_KwZ&fc(P;EYJLF6xQPpRviFO~0Uj_{EYc(bkOHCll@0!PD zj1e0N|C|vA6e;Ld^f^?i93Qu<>9=t@LDPp`)j5mQ!&$R#gBm=mJwhIvo#aoWJ+mS?!?*|lJMsNNOV@hki7eOrT|CMRq#^Gl9b-Q4 zCzjd$Y~XFa(AihFWEbL-bc=m!6Ta4~Ml?YD+}<^6ib8bJL*6e?a}x5Dbx8?4sYmo7y?h=C^Qw7fn~QER zx$r5Ln?2v4Lq6*}Ik)xHysBv?f#7o6v-cJbFXuDsOuT+D`{!qdQxT-2E>bLE7-_y@ z0h;3@Z2C0+oUd2poAhXC!@?+E_&Y{4#AW^A7ICZi?I@8~_wSP`Ey(hG^L-m%uZHb9YP6Wz%J)5WZD+}` z{G+ic!EQ#4Gjv%HK7(WmQO#HhezJp(H<#N5XVvQF>Kml3C-ElZMZ~u{Z8QKiKDt`K;jN~ zlD4X^AuDm$8~3w~rs@0(M^x1XL4W2PE4MfVu0@UbwLHB&VYO-ju#@@X=EmO8KX4_F zArhxC(K6#5r+y3zn-j6|?C(uE=w$`?vF~|1x7$_jd&e0r<+>>#te@QK7uMRE`H8K> z=gytFxor1VUvlD9C2S|O;T8UH@IZyIU)Pq3OR$eKI(59)L`i?OTw6yI7a5*YhCjrO zFt_x_I9FjFrN2k=3~;7!BWd-uKp{egzs^q>JoWJ6&o+bOV>4rD76eh?1SMA+8{Btt zD?G~ZrZn54pEx)_OSGZ4%_Ip#Wq`m(2DU$*(yxvGA#^~br!Bh>F?$Z{P!%a0wXVxw z(5kOa*kJV+0HD|ARamSGoNJascBoGwks~i4&kcVPc;B9$$E6jC;FmSq&h+u&hUUZQbm*!p@N$vU4m;H{3SC>^Ox_4@eoT`Od&rERK0K$FFR3C-+m61jel%=6+1jONEoROF;3#HqBp-d%U10)*h|Gb}T4fuayOx$P!Z8rtx5 z{-ce7n?Os31B;1t%FUSsg=c|*L>~^HS(l6uvx1!%51_Vd-aJshv_O>bie|PQC7BA_ z_EG}xrcybZFwc36%?P!sJv1!>P$Vd3Zi>HtmB7U#V>z*s3$6e zY>E(P!IRDteO|nTi%EeJ(rG0rgy{fp2-vvAGbV69J$3r z>vC;ud~LftTja4mE5+goj3#LGmio%HUmvD<7`I>Jp@WVsT<9WqT}wtj8e@7t@!EBJZsEZC82OFE95H}l)m6sn3L<}-A^YZe*c=@<^ z1bF#)Sh#rj*|@nmdB7Yu_?ML#27~ePa<;JXa`SL=!FaeiIeEC4SXtP>7zQ5)7aKbZ z53l^SpK;(m9Zgsw#ggfQG@BusYW*RUD6zwLmAiMntXe7533_ldF#(1;ZO{GWozi3z z*D2bz{**xo5m_wyRZG)vvw9#OPB8cRJb#J}ug#cl0`skd2>jQz`k8f&70@z0^G6-{ zFOVcTaUYivHrXxZ&Xh~jpZT1-H-u%scDCUJ%`Z6XT2^n&583T%WN|3(n~8S;jxie> zHF~8D5#K)rFUH|ZGy4we*}QwOxeQYe>aH_U87~hWoG=Wa>4p?{`7_{Y8RdEB6``Vc ze=y`1Y<^(+Yw{d3m--|+R1MJyZcg75H^Zh`e=cVi28 zQ-$zX@V6t#^@hQi`-+Y$)l>F0G(Zj6Uv|TOOYKF&YH%Jx17wJw`D0-&3$mHH%f$EQ zwdPnB*)%2tGfz_6lpn0!xWFx%R58BYF9p``xz7A(Ngw-mQthD`iB+GiJ~Hyf^l;<$ z;G>4#Ui$Ddfh3QpB05%iFYd`jkf0L&>3qI+|EaP=XH$Z2#9C?SHhENmzsL4U8DPJw zMV}gf3H9=M4$qf<0uAklSg}`F(qo*Ql~3jfucGx_(hKwGjVl-kp1PFtJ+)+i?JPJH!lC}hH8V7`es#lNn!AOF?2(oyZNUUP&obDdh z+9a*))Y$;VMD+eb7>NP8POH4W!y`R{Rl#QOYg4=Jhy{g8fC1UxK#XD%s`A|A5d|^o zTHRRH^?;N23YO2W&&N@O)T#Xqq_pjK8%%`dhNUtY_n;Ra`~_JyMZ}BKrd!j!@cWlA z%Os{0ixJU;;_Jq4ifs2s~KKXJHDm>*zgJVaIe?}yo+>b&thOP>WKltgkl|6Ca3oMyF$S@pbrW z8S}Uu!4w^HG5kY>|AOb`HYdQfzH)V%YD@u_Y}+Q!k6!f$CTAbJB^N=?u;3OM>)GtQ z+b?5+vN2gphN!^au+B! z@iO^0ssP!!=1tA&w&kqAoCMC`;*RjxzE&`xX>mX>%o$!g*?&)2SOhyxc|l+QO>#Nm zYp42*3-yIetaxLd#Ctn2fwkXjV!In3k-!x;@-CC{B%z=gI3x#7U5*G3iJYp^q&R5=7OfC;@IUH*e_^=t`g+N7$C|ugl&G%}PMFk=M1!~{! zm%*8+gB~4x6x(SM)h{4@)R0h9iWazGh5H&!AVtC14J&TyKaHy z7I%XfsyN!})lbnE(cYp^aqJKxL_`dtvuEchqMsO!#htRoCeqgxwyK3}S2mAWQMo5n zmR4UW=Y# zPUaB#;f8uw=|a>X7M{|{KYzUBblV2rVK)oqAgF;dEw!>$c2G= z$bHe}uHAD-NX942u2%aT5Y9Qc#3`AWguN5IKfm>Z@%LHg>0!cJNhAac@wW=3D8i>J z46tiOmldeyP6pf3bw}%pylsz2`U2=o*kc?*AeNAA?p@_^f+eFJvM3p@$GLpIUJkNO~u-Iy6nZV{Titbz;InV_JNh(xtG#{2e6aABhi?!-#hfy(YI8r zrW-%#$_dCIE`>X?IaLFM;~2Jg=BGd0GlIHfzRVmtKv>&=1cz&9FU|Q^*d=%0UOYdR z7BX?&9wQ;t=os0+q@;zoLg3KZcL7B8%R!x*N`>DMc0}STURz|oG1un^3wf4yB9#4T z5A$Vp^6S&8SOlgK(AR)lNT=k6zI1KUW5Pp6YV6xGKf`M(FN;<~V%Ct{e%gUn)0i=Y z1a8l}KkQ510IB6yVxbsO_F?(qPJ*?ua-Keq%eh{oQ~Wt+MMeEgsH`qRoesLb=oUgJ zo|eP57^%+%Ai6{hl+J^?Von7%X}Q*?X2c4`7)3>V6Jm#pPc8qz2mmZyY>S@PsJ)9Y zTTJbH9GX6vyaU<=&#}pS`@={>f2H})ZO@xO6Uw0S!|waS-3O!-cu4pY zx&dueT#frh35`rdDwqpDPktIN{o6^$joIYdgR0y-`X(e(bPIpfkJ1V2uDP9|v4|f8 zG=H0M_tPNdt65Z?_I%6VTXuKrox-;b@Md#MK>)?6MPGpb$R zr6y{cj5*kCo@hmr;uGP(6y^)X54j=-SVs>H04DC+QwQw)`j|fNDLBa!Zu4Ntf+{tc zS-1ciAdhX)iHhgb5nSJIu!2B{^eCtcn-`}%-)t*TA<6L1SH56lgqt}eO$0S;i_agT zgXO|@S}Ia8)hyd641cF!EoZcT)fM%=z@UItF|d62HAsgdj&6}VLz~^DddfhWD8h!Y zHe*GjFML3@lbRd0Y^ISKoak=6_-Ez4J-DL?jcR1Nq+sMv6hQcggg;c=WsZ{Xo|Kw+ zabU$$igXz7|F$WkiD1p6%aeG^^b|ptI3)fw==C>Dx!&K?R}olv*c$c#W7+ffF?$Tn z$n~n1H1T)Mzm_;O1-mg0EFH-g04O9x+EtAB5?jIXp63G!Zr9_uQ>z@?mtDT??=R;< ziZvL$BdWAbTHVTyzGI*h*e~yR{YH5k5>FHVn&NFB>(;)`2KpzG55g&w#0^?Jhyh)B z7$Vq5IeS%-)9_~84S0`Q*mJ*KBbO@mCEM@Znprn)c7ApIsWz$U8Wsll)(pU~@1y=b zL)K@R0zOzv-P;`+0pvk!z%(#aRFwGMr<{Kvc^qv~S?34(aOfs*{_vNfI zS7gz#U;BNPqSc9Efw;d))zOB=z+^p)3)rQ!1?U@4O(F8;n|PPgX|MyctP*0y;h; z2`f|NzoDhueAF#A+o)MOd*Dn3->cGF~V}Y)23D6O=KGl@Jy5L4XQ`=*d5Da>=waTIWOYcP}%WA zz8qwIy5Nic0UKxFc=v%jC5cb%d9l<8rKJ0ZdHvA9+HBvKJLgg&(n{&5;A-!-n8v1y zM2vKeJhZmnX!k}}EAgV8l}~&%AVDHZw)78w?p@uJZ?$5)3XDYfJ^CBeHo5akKYoBT zICzgYtB3Ck6Ip%hfLV6Dz=I8KG6&vYqo9(;!iUL@7wYgYgs_qRm1#pj7u<$h0 zaC@d~uLu*FlRF{R{Oe*^U5@V`&4oO(ti#V$G~(F)6T^;12==6_{6KMUWY;dX88oH? zI@cAs<kRUn9j-s3Sf&**#0aX2AQ5%DsrC(FYVUfFo*Shck95g;LxTHd@#vt^gxVZYn{d}QdL6me^fv-=?ffFfJ8I*Tz! zs7*M*c7EwV$b19hS5C1it6$7sSy4R_NDxrD9f|#7y=L@al{K~=y!zg)7S~CNZENay zyx7n}Dz_v$P!!!A(?Io$XyimKv(<27Y3084tK}uYj(y)gFA+RY&<{gnl2Q%Fpf=~1 zT5K41=f5$3Q{^dS9HbSa>dJDLx2T}(-t}Y!hJ_t+j25izuA?Tt*z<)3wCn60JMcVP zyr=?+MhvX)tcV7m#|;iM$p>{@Z+^%GEl_yZyqn@FaXHn#OkdOe6R@jS2a=l>{ubV@ofqOwJHyszxlSMZEL&KOp6TisIy%9wR zT~IoLf7lCA4-_EBF`y0%^3o8YMQmm5G{~hlA{^kHJ;kB8X+>drP9C>5hkXWw*b2nc z(vPsPIH6FkBXo(7mci<5!3{ddL;WvGju9?jsDZv?Sk`sHBD8 zB-o#f2HPt&GxE4un7AI$KXu95Sy412mI(I`2mbTvLdt(fCLYdB3^BQcXmWA$2=nlB z^K#U(FmrHmF@xa;K3)zMFz~<&1}eZH1UCmCp8y{ZD+`RBm5-NegqfL@6~@fX51yf5 z2BAFM{jA*FJgn@T4|VwE@65^bCE_9E1CxIgRO=|-&)p_Ye3kX2hR#XEPy2*+Zmqg` z&zC_J+BtoV_yKw3`_aWTKDj=aQu#@&+7o;wls^;=jA>)@}UD)2RM zONE=bq(IoQLjr0!$T9|%*o19FB_YWaFSzo4#00Sf2VZ}D{&wSQwmz3vT>iM$^}X*@ zh_xO>Uf^CVa8V>qnWjQoCRp^wnVy=tEdgP@z``%sGwXSpxJL!ooY!89_Alpko|_xR zn^=rX0;5PoanM-#ejQ9ORs-3A}L+`3~P;jZIw63>QD->ljc)LeOjz3=B)LFZ};qsY#SHj1> z3}J_a*q&6wjKozayDTqT*^1^@3w{ne&wnk2Of?KX!XmoN3hjAZ=k+R=m?g=M>K3mU&!R;VY7@p`-vkhm;Z_j$>3pUH4GQW-*EV20Wm*v z$WuP?P~~}ysT^g;wVzK1vN?QFA8!fI>2s+ao(!18zPhFtdIb7P?a`?6ZcyZ~0;n`H z?zWe`0)XyLQ>$+Je1X4yyQ_In_XvusRYlYPmUW7%J{j0j5=E z#p~PTMaD`jQ@`H_(e9D?EF<4<9nfcqA8f6sr~8m%T$VP|f)eD4s8;-u+QgSW*Eb}% zZU^5`{n(G^lByCfMH+75bO5Ln7T$~4nYjqa4wWJ{VVKdnlrm8&frC$2Fx)xZkAjc~ zleBVP1G;y99s}4;WEG5)7w9Ab$91WvS-NS_9V>eZzP~w7?`fTjRB#I8r&B7zH*WX% z0Nrap<{QOSLCXEP=6fV`Rw&Z#8_#4x8r>5dg_GBm%@u41_wnsH)p>;Uu7>J};Olw# z(j4&0JyK#Rh#=JQn7dOXpRF8CueyVkX_3^WH^-!NU$z%Duh@)jPDWCmD&)s!NddPW z=9J~Ivfm#`c>|O>uY0}-ak@hb?xh4wmN{NJD^6tfh-~BUbp8nqwMVp-u;_d)iIv~3 zOq235q1?ENO`KPF?U&0$+FqBg8!oxq3`M6Q5w!~ccb+* z;Fl*NIkZsXfQmi5AuLcQqK_%(yWQ6N?m26h?Wlk(9x`@hi`@$+Tmu^X5%O(>Vwo-1 zH@Tv_`VAKDw40!bl~Ex)?~V7h4Urui?vZ~Wcs*%DbG>+WKry){a zXtI|xZB1N57r-`uR$Kzh?&Sj1(BV}VWNxc{5y|52lG&lWPt_>rRm38zoEy2sf*v(I zlSr%}m~|_dak9|P;LIXYBeoD*SWKhdC|XN%dXJF2&MowQhTu}|^m|F4aH2SzllxOf z-t=NhqhuhKNpun9fzGIMK~o8(?OtR`&CbUQ!0X<=>mPyUKNXu-P!=SqED(lG{Q{|L zcI>P$x9uWeh~nsQsr`CqnRzujePc|B?(x%SBZ#}#HK%(kHwt|-Kc?L6OSRwnjwWm> za*0Eb@iFA_M?CT+Lb$_~XfVuQKVzh&5Vv#}(XBuEd=la?!9zHBLi$yZ^^aP0_s<|S zMdMS@DuC}3HknC$CN7D6*b%tUh7}p6eQ$&+t%65~%pXZmml7Tm0yem03c2q!p+y`7(l1NBHuY1iAWKRNl2Zq zY|3lwZs@cc`E54)S}?{wp{Z2c%IjvtYAYd0f*4?jSoqgXB&>|%-E6`=fhV3;SeLSm zg1NaI379=)zq3Yak&fd!g|Q}IU5cRqPBchvGs48^_Krz5XM61&2}*~y;)-9n5_DVK&$0Txj6M-Yh&>PqsHZcG#n z{=(QsM{(k3cYi5!rnPzw`0^VrmNAu{LZ&n>Vnd)tW4NM`L&PET-gSh?YciFW`so3q z4vS<4jySf3KcchzX9msB=?fpwVs!*~{iYj;^Pig*~u&aywGEH5mffNMXp_Nwtv~1y~UvTfdn2`L*R}mFYJ4*1`P(6*nD2fR2 zN^8Ppv|yJd`oOJV)YNTtRnyyYI@tU+D`aiz*6Gcz(41^osW$b}B!!I=T8LDmkF0*j z8)rM}A=IDk3T>OtMW&`Vw9t$nPlJ9ZeZhe8{>eC679xnw`3P7{zZbL4ckJCwZmUYN zGu&&R$zar&BC{dRtzb_4cHDJc-D)&txSKmunp#6=g=*W1qNUEfpu;q^Nnt*zTZy+vCUTKaQQy=`cy z;a6jo5U%yIbN4bR+i^Q^lPvMO(x=i>?`rPD_+T_5Z1{M-hr+OdxC`vcjjJAjBZc>< zYG}n?NVCUKk{bAaH(!dqkJ5OI%zzI!cXgZYq7+^%i$$hJYr%P>36$w3vp;1LweO75 zTqH3KN0X^o2H#l2R}gIsN$H}pi<{P1ZiK&g4P^?${7PGz{EO+YN%?;lz)ZM6ug8BM z`{v_CA#=(#xiq4(HRo52=lexUSVHGz*ZnOk;c)@K%kLlcnvE(+uXmvk648eIfN>w1 z$9<(v12+{d+HT=LYrQjVlE@H!Ly&rh4~joxhHC zdI&8Q*_F&KlO7|#Y~o5J>y{|^))8>1JIaw0FhGCC(UF>&Hu!7XH8d5XMh>s0Hdz=d z+s8DGywO>Ci8ZjA6?S2s_&vKO=T;)HXDxHO(p-NUVj)?KNNgFSf}{%$t;eIKw=VcC zx#*z~W>}fbR-x4WF^Y1K-Y0J~+89ZJ3>PHfeM&I6xzZTuGGsR8Q)i(^2xvZjta=)I z5Zmdiadg}mFz=m-cqsNvqibUza`x%3iDo(QZJ$L5A{jRsM$YXgg!#2zVsAnh(^n@Z ztsbJ#DnsR!_tp1x(EgxwqD&+d6!2|ZNPvL*)Kh!tV(#6Dwk!(nN&7KFK11UQk*>cv zD}w2#&m>_+YrkjdpCNs=Utj_q@+<3r{B-rc7XE#Z+9?8 z$Cg6|FN^w-3Jv_G?3Q=V#NqpB#@BXll&*SyFNh3;Vfjf)&ouqWVxqMN7BaF2N{JJ# zx7*J*TXyfdP95TME^pEMcH?M?QI^s8-T*2om+0K}$#8F-TSbm+6zvP%@9>dhbz;TO}!BPoO`=b2G8yT@4 z9SkOgw0g|2kn&~%t~wb2Y4sb|Tv^5w^&_{r{!AQ1im?mBdwy;OE-=a*;@I0w*`NLf z^W|tZ5^q4(O=tDbbL*}$TaTyBPBq1`$de(sR@uL#yU@On1taidhuEG51b_AGH;XTg z*_VVoL5W;wWtn?2>&)TU-AvX9k6;>cXESv_O_?&5#^#6OTP!S*>W!syr@e2t&wxl% z{JA={_t9&;U{ec{maA=ajHHzc8Q@b#fyQ{+Dq{ks*l^dk$m`R{>B;jU4ASy8-`Eud zX}t17OLLZeB?0tL%DIlewecF60W5qAvy8E1zBn}o+zs1tU^%o5{`8%$xwtpaAz6IE zPC30om3mdC`jh==h&(YIp3hQFU$#d63v~_M<@`uzVZ7I2f+S3M^GH8I&DGJsh42OS z@t3e#A#VgzDhs~&rKeSb49~a|1nQBWJokF}rgW5}e9OOaPwZ3dxk{UZsSP>!$(6UN ze-2yRT7@FZ`-T!^yZGv81)8LoVPNd~M{<*jJo9 zS!hXV!)h%fFMYr6tKp2U<>tQGMVA(_VAZOaxL6y8pvGu%X@BpCej4$zY!TvW$$~m6 zaPS6)E4e;ZC08Mdn zNtKU_lb4U1_fva+b5n0iOA6%w|D`5!e^>upcK)DNn6BT!{xSw2{?vDsQ8BE3Zs3zQ zJ}mXNxldtQ+2++)ADn_s>#QXe1w8WQNu2}@c%%4>^Ew6zmpXWor(uIvD>yJeL{nKB;%Fh`DB?vbRH<@4BA)r_`b)DA{d>YrxEgR!_sil$A+T@X~ zX;bG8OR%Ds$?bg<_pC*hLc8>^$_2&nV3&_~{Eg-Ocj5Ej=O2=OFb3iI{$B2vtNA52 z^8VgN%kb<@3sX}3f{{Z>(tL+>^w|VDW7D3gdly~sm(u3nDBpU>=hY*+F!igc$MI_D zw9;NT>gJ>W-g|!M32zLPLi&(1O8tBF@Yh^z(|xCc(+vQ`U{|1LIQUT8W8DhOwV=-T ztowC2k@tViVv!;b;#!X&|1gQk@uw|M82%KtOD)Cd_RZtKh^mJVXDdHi>1CnbiJFcY zsU}}l@vDz*g*i?*6U8(sl^YxZMTkGHL^BDAyM6fgU+e6Jx^k~$dgLPW>kQ8louv2x@pP$g4TKIlLsYo*$FmAkIbeV+eSUu8}( z&u`K7{%m)RLsK*~N(OL8L|W7Yg6*3I6ziKwwa~fdToiIHnZ6d3SZOaXZria1Wx_0% zp}6;`BMZ;}ggrV)I~?2Jil7rXR4=IU=^E4~Y95X`%O!i+DC@%Xj`&`b2FJ?Lo82%g zz&Oc{zR(Y8q=3vM2dVaO))2K2!nD*gqHh|ybY}f z)g7gW)E}c?L=7ZD-WSHz=<+dPjN`Hw(XmsdBr6?ijba((iNW=4itAH_$!>dbYy9z* zHEH?2J+<2aBI2h*iI(lc;J}Lae&(cW$ES;YV$(}>|JS|=JlS{Zpr4k(D%poRN<2@+ zeK|gg3eC5QEPJn(zKu~atd?oTo78t4UoILf5xlou;K5J7lWTQYQ}@_Df9yT?PTU5m zB_I6{T)*sE5x6n!npn z#T3(Ca^d1S22pL7tkXV?4<{-=`*QAGXQt_wqL2T7ecI6-eLY=!>zmbWTBYxA?cUDl z;xgy^huh26Z(%>(WgT4fcv?V|@6Xt5-~UIi2h8Bv_)p=vbI7l=E0!7+&gl15HdH+P zT4iR(hT9?$PHPVMUg?^(ch3$VpN#DjChdw_#B1X2sA+hkPi^aKQ^VU0vfRGjacM7^ z^Fr4w`?F`av$CP%PqWf(rs4Y^@*fX$V7E(aQN6bMM`PWiqVuaurDT&Ye>*C$QQ3%j z$M$j)!^j-Fn>n=x^~X-jcW$UZ{A=-2oBft&TO?L&N^36V)UxvG*LwTlc@6*Nsj;u7 zmG?wXoIEq@-UVQ13>UY*Zk2Wnh`mgo2 zzxsI%rTQM7-W&IK{kFKieD9MNz-iNu%lG}fdG5yUg`U!EIUXlYgsXmO7HwWw(XcT$*oGFI@7M9#ePz}Vv9;{pYZ`0e6;SetGe^;epEhPH&~y zH+o4kVzW;PMt<*T|6=?=?`+8GrB{#6o}y>0-G1|QP)X_)Z`18vV#nFczQ;d`Y}LK{ zF5fJkH+ivGb!qUoX%mUFwsgvli;TNXtL?^_k0NHjmj}HfuvumK`wL9i6%EO31yCR~x6e9?HI!CiCUX zhI_idm)C#N4R?5=v^!wcq6gjTo2ReqG@JRGQQ>4AkM)M5pLZRdpEU8%*SVrm=O(DN zT|D=a@x~jSg%cKAW!~GMSru}5sll6|&9MeAKg3sVTj5Y9`P%)jA4D_daHX~tks8Fk{Ee88TO^_iQS&x$7H6! zyWmiu_F5+%hKwr)Uyq(WcI6KD?wD(wSs%9FdB^&4@$SD9PW{VpeLqL+t90a>^vIo_ zYxRotiqdzS_xaxYNpbyOVfn9{1b_OeHP`rGIJ9X&`u6{IdOY7#xKgv0|NePXGt=Dj u;NwW?8~>~7t}O$O@4T(!ZHoQcVQaODWpl#v*$dsomd`!$I-7xyd;kFam&OPH literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/organ2.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/organ2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..43b22f8354cee8f7a6eea1df9eb312f57dee36b8 GIT binary patch literal 18946 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 F2>=m?oZkQd literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/retractor1.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/retractor1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..70625c961cf982d3bdb93e106b91fd4a410211d1 GIT binary patch literal 11537 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/retractor2.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/retractor2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..94548ec2504ae8da2ab7c9bc7348f2284491a6ef GIT binary patch literal 9915 zcmaia2Ut_h(*Fs)L`0gQ8k82AbP0k|MFOFO4k8eG??@30RhlRekt#(3(h=#Pf=K99 zil8WnfCy3qL`3v|0`I-=`@i4!-0wV_&7PgzncbP+%$YsU(Q|S#1jvBDu7iN%M#0N3 z(GVU;pqDS!#gEhlQLp%G$PLI*qY0u%n)&aGG?PSO@ickP*!<`JyL!ow8OeZjGZ$}X zaXnurxVsD18XP^S9IWp{sHzbUOc2xT1Gk=N`77ep7z#$0lrQSzQNYM z4*tHjcK%+zQZ(QQH9cJ;6*VIzDzL4op^MQ_I_^cIHFS-XNYYd=Mp}kON)XE9g(Fne zOdtShkfaX03paAl7yuXnz=jXOkmjg`Am9sxf-~?}Nv$r4_zZk}7tAh6lK8I*E@RIM z02BaDh&K7rl9uZb(g`M*?3<5t(UmWOQzsbAA!%Rk3fOrT*A=^Y4k7qyPMA{ypjDKw z^2V@WNEJ4YHx>p~x4C?KcuR78>4YEWN7704z@v1eR*KSe6;>WUN>=zHR5zkZFIG2( z(vh4nv8#GUWp&eU2)Uf|S4DfY4>-6MRVsFSMpYUT`#3~#hA+tKcw2A)2W}J4OkvS_ z!qWeQYjBiL@0+Lrv+Ss}hM^JK7`y_kOamRJ0t2Q3!^|^cEStj2n_?{A#8~ac*urA} zDnG(L?2*dR*5ME!{~R)X0a19CqwpiLkUToJf()=HsRT}&dKQuTNUPYke7Jf+ZD7P+`^uX7DNXsI zr$AMZH1glCh$Fm!8{y4$On1f6NZ+$PQVR}b3oD>egC0u)2gDV8f@h6nZ4V+DvKI48 zS+ZYu#2aM`HkW2(A6d|Shg893K`Bx~t$GYi;?$7c)HHya)E`wJGO*K>wCkn`Y-_?c|CW?Cz-wQrxZ zK1fUI`%m~NgLboh10&`}!o!lOuq?dAylFiCcNx<1C3_G>Ja>|>ph~0kG3o%*GRepSe; zZiMl75kBs#Af*RAxc26_^07E`G!w%kN%?!Z*dtg@q=Yl zO3YAN$=Jx)G||Q9s8fa`nTr*pwmPj`6M2jB-x!4rK?JN zY~X)+jt@(B3RiCmpLQ)DdQ5cin~dJJ%qX*lfehM^)oPSA;5D0rp`6ugS%=rg4ikY6 z(+v)mjbY{ue>u#t+kBV`_=o3^T;wb=dEsg*#owNjFO>XIKKYzhDxZ0(KybQKd{$}Z z!FXCNQ!S7%^ibrT^|RAaz0p{aOZ8 z?0o=W2Y_>+k)s(CeDA4xDw)wpF7Z(oAgKyo!JpDQ;g0T;q{@wAL=db^X3~) zlhJ13*JjojW^tHeMo-^VVtj4d?(Z=;2 z!!i!jM#i&j#uE(=Z`s04(*r(8qs_tFNst;al^$k2>0y=e7b`T&5i2?4sRmgCe`5n< z2XiB1^FRmlJ!8|!Fl~@(h@NIOHf}JU-t{m}51aQlwlZ~?-ZM653%8t#ng1R(4#KDttE%X$tuC)}Uj?aE zkIQOB%gRK{Yby@QL{}Rgm$g*()z)NJm9I8z(07Wiws@CSRh8GSk*F<|t3;pG7Kxk1 zi2ma8FD<1lEuO0_J_8LNT#w4WJQwbNS<_d$vD$LJE`Zm-IA9iUwO|VF!^8Tv!(Lp?;IyZnoM0buTja8>d@{i)3tVYgWp-KlYOSY8XT_?jfpM7C zeTNShtjte)ez=fqId!M7>`RMq|8r1~PQ5T)pC9jgDQ$p#G;K7GZ_GZ{Af(&YH1OZp;l=<$cj+Jrj3$pV6pU+ zoa6#$6fs$9A&4x79%96-b3{1Es+T1ENXB9Y9%Pjnm5M@D-cQ90xC=2b?>KT>Ds+4ogzkhnEuap1F%b^N9V&JLENTQ+#A3&ImH-3o zLSV52bqn)jP!(pk8&VNMMC+r35iyJ?Eq(%+Uej@b`JDR*-i!-e&~Y5GfnuSOv2cGQ zDdAJmIw--?2vDPy0U#6zT>}=bm342FX)0qTrL_4$C^%NW%CHatfHiPIYe#W}AGk*i zD8n9sa*%RB2ejWq{AB0VG&4s)7VC-z$g$D*}FuM8Kd{ z;9wtu;7=mpF?0YR>zA_JP$0o=uo(c}QBngnFa*+eOrXPq(upVmYeC(UtIeue4i*3SK}Bt7H!_8&R>-`V?rYgxKgf{^=X z1t`CuqXzy^bDC(%BRJ?qNqb~u0295=3~QL8)Qyuwy-~S}AWT{$ih(YN0&lTNvauL& zNY@)|g=Enf2J}yuT?Obs7H;6u-NX>}lh~wsQ2$_rn8YT^PFm0dbDrJ+?rM!s?ERvr zFGuH&Y|RTM+p0&}CLIhgpe^!AXyH{yfv6&3gf|*A!*O5qy?^&HDl8vE3k1~i@i@G` z>JhYP3cx-DHwZGJqZU8dqCHOFj=&hr1g3I$kn?dLo(Yt3l-}VnBt(L$ArX$Cdeoxj zC8_IZFz@kPQZ5KWl$;cW&wb{5)OXfhX8t9)zH<)>z(E1P=Z)(sVzLL`l@pz=9evN2 z5i5QQlYrEG;&7F{3pRn5B(NA_+&<@ElMM87?NE}P6?hYrP)g*OZ$*9J0C=8-(*P2T zywVZM5EfVuC@7i&0p!=Tk4Rplp!mcjMF*wpj`kaKAqN6;PvWP;g0$_H{ zriU5_y>q87k^Zw(JEhgT0C+TT)81J zt)?sLJ-h_$&7v8fc)0WYU|j?H(nbjTno1fGa|NY{xaCTJb(hS9NMnkzrdwT#Q@l3Ma0Te*Fe0zARJckL@*%Y z;sbQA4cc$;APq7%)~9=fQ4-}hgz}e`0O!wr97MM4!sWLjOe;5DsttE*{&9PIdlu+} z{K+uIU*;5SsvmWvGdv^bApRa>#98SwS08RwBz-~HJ6BDG*Q_|8^3Ij5$SqsUHFH#h-<8HQ+d82+7<`F?BS+iOfK1`jDfBwu!U@6b3 zn{4Jb6>S9B58aO{jEp9{rLMpG(w?!Lxn)LO1p1WV$4R@my9ZvC_|$K|y>~b=60!bu z#nlEo3UnEH#LH=-pw4-!9h!c% zObK0fFS^>^`^v02;WD!JgY$ikC0$g(d+M6q3aZ2I`R0uZG6o~-#^NFJvM z_NrS2WI(cc_-YK=_4-y+9_#0psc!7V?hlWx^V54Gu>K041PcfHKWr4V^ldh^P5y=* z5nEyr!V(U(KA8@d=*w$s;&X3PH}~fQ&qmCK-&ITvqBm|ES~GzH?`RU+l)nn;GwPW> z4T%?t@IlzYM38d)y&I>gj>M*(@DU`kB^alfgXbZSsii~b@{PQQQ>HVL{klp#y5qWew^#K6I zO5obqCxA(DLi2It=6p{3VTr5$zee;8N+d-a|XZcZZWUluBSUwZ#DU8zMJPw(A6IRS5U#m^LRUi5~nW|zKTXqcVAgCMPe20fgXh2I@v71xmVOS|;}`b&qC z-!1`0S8~Y{B;r3?^&{YwZ=eT|FP7^XWI0=lf!yS6|xKwkXlexmbk4 z(`#;Ng^X>E9xR75if$$JKY1-RL+mbNKfB3RC0FAg3}{(jcaB@qDbQ=D!k5ypcgBFPiIPAp^($1j?^uMX|#e$}ED@<;du z?^!b7$0Jdu$L~Z|# zcupN7QwSHg-$sDKOvf|+^QLs}EU?t=!w;N+)fNJhD=u$T-OxTp(DRjfoYNfGS=~EP zp^+7BwUJWmiWK+F1lWB(pDdH+mzT7Bzj3yNGAXI!mW5~@Ti>T?6WzhO3w&HPCE}A^ zmhUXitU7km9$r-t_Wbyrx`o%X1bT=8t9GuJxGFI>qe(GIsJ^Naxa z4y#_{#r`<^JZ8K6NX02(r9Er|DI8I)Ih^cj9>}v$r(t6)zL(%KQC?t>%}EUzJOun# z=;-cDx1I2DRyuTn)4#H*Ebsdnqopo4>B< z_GT1F{YkA40V?~;%pKm<`N%`Fs9NHOD)U-ANA~uDE3!Kp^tkh?9>lh?U7N2O&f;&CBwEXJbd*h}ZlmgCW;#2thhbZ$Gh8x5m8`Z9;CAPzDPR02^wzpn9 z*8=AbjU&G(2K`Pphc2j?h>dTCJru&O-=VA@4ph0ovTT(4-t*gTM))BN&{?dSa0xAO z+#nPCssH#5#kGTQgK{)cSY#!PTGS-j<5|u!e|Vm3$f#?Vjw)yN(2p{5_gR!W;|4WQ z>Gf2VN~nEd>&5o+>Neq$N8ciDakRIw!Z5q>yoY}X$1DH`-H&NWW_G^K?A?zA_)C@UuO z?!|LLSjo+vm-3*|YxGVJtOo&i3N*4SSau;JKpSP^jzFcAP^3>XnM4P!RjY(Cp{C|fVey?)wSN0i zPEwpNY<~X|1Cn+FzZA_MA}HTX-Z}+;ByoY=@r!Ma>DLV|ubuo8Z#UtMJErf~a2zqHgSdWV}qHHQU^IR8o_9vfEzPA8#qNQ%G zQE!%m&EH6eyUD3u&wSBZP^(e&iFFQg%#k00FV$TA{S(Kk7?jWXmhT~e-$E(TtsXw5 zVVH&rux_`sIuGS=NrI;!zV%s>?6r zCAb-4hW0jsB}OvZkb1w-$<*tLH4kd#z)USXQKRTq!;Gm?e80T=&4W;WgTV8?g zCJYv+)|%0XR<@`C`puZQva;73Z@qIP+nyz5+>$2qV|+ynA6~?SF1GAH;{(={5swcP z%V<14l&y9+mATOo%*{twp;R;RZ=Not3cyI>tciINj zB-|g*(??o38qHY<~w)$&ezOirah3Dw@z+X!!) z@1dKFK$%GPETxyDcBfH`j2qwbt8Pi_x(G~pTgPM3S_j%2KH0kLcoDW+tuHk{Mk3vu_J@G8CVT=zyI++9lsP2|5hUB&VyDM$ivc~?Pk zs)+2@wvx2@eck(l$q2^nq<215Zypw!xfdip|6>XD-wkAyu#?VHy3JGMD8IvI(tTkz z`I&~sGwVxfirg&y{7mELA9CZ~?P4J0fd78gXZNd}o9Z9Zwx3hR8{x#d_pV1LG{?7v zx&wn(4!9ReJ)~6xd}+Tc8q9LJANH{dWtWNtk-5$s^5ZViJ$>?Y3;(1Shr7NjWH|0u zs9+4oPTXmyQ2JvR4N*L-+H-z;HSb|F&T-f@?F5rcQ^Njr6O$RZ`=tJ}c$;O2-Ny^M zx3aVQ|GrlD(LGcE_aosq z&MR`_LF*GEp3z_X$WLUnbSy3C=u?hfq+H0#$mUKVjJcfVuCHnIDzZmk8tzZDm%qNc zS@N}U45A=6z;Q60L|0iYi7k8?tmk>=%;mdMRMIAHrtM~StfPB&RAlB9`VN7_VCf6y z(Z6q&a$l->@%`KOcC(XOc}lQ%ukPfw>{8X*<&3>Q88@-pgk4V^+n4rqROUbET*=MC znq<8TC@);2P9NG?&y6D&*X^KJu#{D(y_%vF6BF%~6dgL?B~ll)nMrkJd}2YP_mGI~ z-3_Oe(%{yNIDIK->1nHztY49fVE22+RY<0E^GoVGx0cQMamp_ggnuV#M!TLv`!3CA?)Z2%7&w1^d>cG0;5cDKU+Jq6KKBt2P@ z2AF*G;)mqnYbj)o_4>7$Ti!qS3Hbd?vB7u4L#@c1soIpqkmJLv8y)&Js@hWUz5|XSCfq`WvCE$}0fFE;g?k30ePf$@@A~A>UEv>gyYDj{ zSYTTg5POlKXPyoh+!1QRM=#F(q~UtjOQ^|_734&2sYSG#bloo{`= zr&GfM6%ZPAp@?r`1`PbSF57fLpZ~^^*YeiUW8|*6n$jM8H%oGjGPnI?8z4&F2d?}8Kdh#-UD^33dFa~K)4^7v;Th0B9 z`Pag#HP4@$dp4e~H|FxlLnjr{T5)BfFoz74$qm8t-||lv5~uFQT|lC3&RNXtdH&ja z#W0hQXPdyh;bw2oZMXcoXsaYe!t^(Eb7%o!l5uq?*5ejonb;s`a9Q|kz2n2fbn8%8 z`?03$=>r{yRd(2QEOT{nFuf|dl&iD%*B6!@F-F$oqOGDycCyN}RWBTC5fbD;ePV`w zOERqO!c5p%W^+{xN4E0`ZXS)ck)@L)({f$P8kBqF5>epU#g=9_VVUibPgYiJIL%+k zX9$#QXFs*}3j6ivzG+~lR%`Y8;Pj={UlWbfX^G|K{N;0Pc};UWy~0K(E;9VQnz_%3 z$O>{(E_27f^t`(=*!;!PSyQ!0&@xW$8KvwwzTT_m>J_{4UE}nvZ0yW>Z#+&}!{rc2<3x z$RU>G`O`9nTS_3eV#^dsKZjP7@$=Aqo;IzkeVx^XAz5M#)XEgosGE@^Qzd|E*d4QR*tGKP|E(~lZ*-> zxXiwbf7LA)7E0BdU^&i^{e6rxH%=cG6T!%`X|~Gt{(GE-;k}f-&G?l75B#+4{T79Z z{5qy^E>!((=a42HPd(~%oy#%-{VB+Lks4ndL_P);_C}~PVT_-r`RO<2OL9f@`u zTGtCwmo~edUnDT3*>kVi+8QO2^vUf&4G~B&mcX7_T+BzuE$!6|gY|uYe zYJ&DF7oe9hB{ekOM1}pqw%6wpmeH$?#yQq*UAjVqTbuc8G&9-j#Yx|+-+QR?rnyF8 z0DtKN;^(gm>p#Y)u9>Hn2clYhyed`KxGBD^i^ZM^KK%qn|J&ICGTwfwOzgQWzgRn$ zx6}8H7XfgMy8_=_l}d(g)}L0mMjy>F8YC)5E->*xIJ4?QDNJa|x0hkd`sW4=bi4Pm zEHMxCp*`>^R^;u=N{vXKkK?@TZ{v*`0{OxCsXRV?-t*S)UpIcteP}$te)(|YR;FUc z)BW#Zt-$QCh z`*I~P`CRS7q5vTwQo~yr`Ns1+?Z`^N#oB`chp$@qHW(;SvLnPX!2*@d7GQ7ng~)Z% zYt!elJ2y6Y*-frBxUz+8&c35@ZuRcM5Ppf0nEVs7^z16?BA*k)Em~&I2 z^&z6)mhf!UDy}}T=gA8W?d54M?fIvP^`;(BqZ2Z-&$-m#Aren&3^fj4?VHWRY#&kB zvQ2ymzw^yWA1eK%|H^88R+ndx!uy_TTd}>CQjN?C4qvx~B7Wr#b>Sapm}6V08ojBC zu{`1-SG=2r#PaC6D+nDSfvxBQ>l+l_@;>6gHw$R%^M&%;e&DA>z;lP29*eE^;3q@T z4tMSDPqJcH0NidZmE(Z;vbE7^v5f~wZ#!AV&DPJnWY6g7vM%n!m&{hnyI+rmH)T5t zOYKur(TH{)CgnVxgT8S;k(nR`c}r;+m(V^sO-L{UJCWnm`g||LNiZ z`deuPDZh;TU)RgX7s^;0W-Lba^Z)DWhyKTi144gi^WK_C+1ZNB-o{kxFMBdsGBy@A z78Y(64l-Ib3v)L!8%HZLNk?}ZXD3Go3rANvc*rR9s$3Q&CJ(O^_QC(jciM zt}Fq0kWwI1cXczjal(7)C99zzDd^(l=4fu@;^u5+;p}DPV&Z`SA&Dz1X^4tz2*N?? z(vnJQl7jzQ6%{3wGz4G7h^lGGs%r>>VE@gSPE1@21iW-&RUqpDkHu;N00saUQ_`U& zSjy5BCVrvyN==k`sr9f#q$Wo6;G0FU_WoBv#$k>N05AZU7BMD&Th?}j*9xB|#yOYQ zMv14G4E~eq8ZY9{D{3>xqS_)m#}PUz1XLYZ0Adai8S)SuwU@#)oIDgCQiKsZ{~|BW zbVj28n)?xn?H5^)0^43ef)d}}*Zdg1ecIYFF=WQt2{{GUX)UvgRyYG+ml58b%>NXK zfAt`P%tZ{2z#Kyi;e~xTT~Vqtgw;Q_$N(@zO+Y#hN45%Qu!?wioKpFmK^2>GoLy2~ zLs1iQxfy7?Tg4DLWUSmK^LDdTV!clVUtmB{jJ_%u$p188s%>n2$W!6W&`Bf zq!;~vZcCkHi~svAV*QIA5P_^^-v{Ep50sK>lzq+&@PAkM7XY!Th#EtWGl#SbN1uxT z&Z;;+XS9S|)?ai5B+)TaawS13Y6LWet{?wuP6hzM7=Kax zU&UW2|3h&>{3rSW+L|G@L57#2tZRhtpt1`?9EBBvVg^nKilghcvt259W$X&;W^~^c zCaTHN75?)mh*8PRV@2Tz{yIr$s`CI{F~lqWr{PX1M=@WI|Brk0j93+m3UZILF{-l* zYHDa|yF2KlxGgq>7|gk?&ibv+MjPRU{_nv0U!DU%oF@3MPbQj1vG!#KDTyKeGw^?T z&Ig>nIO6^|O8II^#R-Pta}MPTj&W>BRSrdUT!V33x5-x)>RbksoEDRs7Srw)^Ys>b z4SqWH|8baqZnHY;_CGx5#YHH1V>V>sVgB25a%p4Md1Btk##8FVQ+p*_MWmOcW$%^b zA^mTjWBsW(^;2>9r=9Q^+K6PEi1gB?Jo|x)gXaJ1{l7d%+L;n^Lp(>)neu;lP6sQo zIK-Q(85A%6=_oi3Sx{F=y#Hwc0O*KCk^dVYgCZd1a3;f4FsjUQZ$!H&XETSAT2!MxtkiU$@;(|nQ0KgPQ4T&x!QEh~7J63Ig zb&FU{j<+~deS{a`b?^WyTviYUT_Lgh2wfj>@Q~pfFK_+S`Kqb0D}ft zdrvuvn)6owY+M(368H`5QcK?Jcb^*Rx^un-$8azO}L)#b>3X1{I_ zN9`7SKiu1S~mgy2J@J_%DSja&})5XVmPfil$7D$O>M`*)S$f z=-QU_PU%Krnqjc*6qt|5A{N%Z5Fo5}atqMJz}TDqrk4!Ds{cj!Um07ei4az4LGf~O}<<>A;PH&@#W>J>R#D7vThT~*_6KsFX?%u7XuNlZpT?PWBWqTa}bA}r_+5-{!4RHTgKiQ)AASL^i@gm5aHVkx>3A|6Q&SW@oG_!5qkDbMai}hLb_UH z-S&cuJ?Hh5ZrO_rdB_{W<#W@O79{F`p#c#vqDAgY2zhZ^(Qvg9SsM)JAzpe!u_0cX z5@!W5Iy%iEQ3R^G5nejFo*7;Qs=`YwO~RG;-C0t zWe^9_wS!FEj*+fz#x$x9vi^_=F=HCZIirgVtU101z%rE|LX!$=evYsGwKX{;*%te| z+AkXeHHa;8U(iA>AqPR#3r5I;A!hj3799J(+A#Qb{y_@@sGWcP5>>?hLJQ#wq>b)1 z1Z1>-YgCXL;=cs$FBpTdAgNp;g!8|)L@bDmzv*3~+6y8fOY=hb3)R0hMDmyA`rDcO z-`JO25CT!?mni&Zmok5V!k**zPiPhEUvdB#1pq$G*&fi%{37eg3{I90j&;T`Wx`bZ z#4BB8Aw$rEKb^>0h@-A%x0`7irK+4|Cdb-UmZ&918~1U-xvb882(pnSLjYJX$k_u$ zKsflnAcBHn=z!eHjxkn!7?@2gHY60JzF?OL8)yI{_!mlC_&XFV?9#wIQ$FCGzVR=3 zFiLcEZ6xw8TL-Mck{ekt84P)N4+tj~9E9!YxsIyb*onv|S%~&;-wgst03aTfjDjMa zHwNu9dMrj9W;|8`b|M760I&uEqXS?{*zoXh%b5JG4QNUU^WcK+O&F@b^yyAr8JoN`LI#;@yW&q5iAwjpM?8w%JGA0flQR}7TurS=3G7I4?FbJ=IQO$9lZ#r@-cQjV_Z>vOvJp$EZTzfw9eY&?#qAOCBhO{2rsA>}W)D{Mf-JHRbF!LRkvtYzbV zXgcsUbP;i z5KBU-75Oe{12*pki4GlS7V-o8bF=;Ez6TY$hy-vI_5`0AO=bJ5!{YVus0Pbf7ARhywIUB z$CvNy^4p{4f~h}uQ~k7 zL|{mx3NL?|zh%)dc6Dm(!#q^mU9u9P{bip7vbv9UUF|f&sK*%*XrFKHrh%XEFeoh? z2RDnpj_Ki$96JNDip=8KQ~rf2R3`Xe-d%e zG8uWVci&2&hHr+x51>`QT@9RqZ}N@9<5eTV7recdq7eL;@+9)7d!I{Fo5a3uw%oAq z@S*SEQ8xv%aF<3-6hOetpG{#zzYm|Wo%f9Gyz~#|zk>FMs5Ba{2>OX^>%~nY)WBm5 z`wO^C&!&-#Z}k_G0et;O3R!>G$=_RF^mKZ7#QW5@leF44#qSkQYIensal80sGb$4< zTk9B)d(LCA(Zi;tQ<$XiMk@Z9Wb;Q)P{~Y)60+w$%_8+!v>C%m%*4V(?BLsE8{$c8 zCZZxQ%95~_sD4%3F6VUZX#e3*shjdkR>kI>i%|0VgCb8V54_Dfo;?m=?Ah#}bGNuV z+9+f9ImdoNi{MW5d(%^CLw$GhB25|5x-@v-Q%+Le1!!!3JO8K%8(4swg5hwMLiEJB zw5dr69epf$*I~!KJER!+9n`x|AMH#@b(6pcs6dn2%`6V}?y%^OK4#rak8ka7Ob_48 z1a|q9V7@+PIPf7NWP0Qf-kBMYSZ2#@U!{i23yn1dTE+Q$d4}#t1eNW!_!&2!4VQGT zFEE={A&2H(a^uN3GNx>TOiU;ujeFKDlr77AL8$ z|Jj-8w)4HsqNUTb@{I*z1FCwVLsn8R{z!qJ@O)-D2g{aw7K#4o5FU`Ebu|p%&*8wA z)$jh52D(5P`V8;>h)Wx-iR5^nVA=*fGxB4{p>z)RV#PObYc!S$e3{C}DpD+Z=6g8f z(@J%;+hm=j(yU`)oZwHE@Q?9~w3HQH36b%vB56Jf5BHb~p8_b2cFiC7$!Ruy1`SD& zdi2b$gvv(dB53MP*h?l5o46^)e%!>eqEyuR=IWoxLqoi-QO;hR!gme&Fm!p8f@u;4 zEf+}6Rl&Vp03*Te7URJK=S(L9dryx>&%!a^N#!q+jwt%^{w%PN;0q-2F&-0!W-Rci z$J*|wtX`h2%qhX`QvO!E8M$FMqJQ@ki@NGySd5byvh3P=Q4Ak;cEQ@Z5+87At_+gp z6};JO{3PzEZertHJ#jqOt}iE(Nx~2!9?hhGrz21$w@w#p!z*zp*$^y|GbQMTTC=LS zA(4lfui*Bp;;7&6zHkTs?Rxl5eg}h#OFC(r+&rxHiRdYcLw(}fL$m3Xt<>k>LU3Sm z%4@lZPHCQDK8UUy(F#oAr&t4~2lhGdt*BiTps5{H*s9vdL+?veU;yv;ZBIJ0qS;r8 z&)*f6>kS`bTeDu5HKZJ_6d`o+uYUJNEjDao-yU}8=u{|Qu8j2u4`$cR3t=))GKL)$ zLUC@iB-@ly*M3{qFxjg0m`s=2a}Z1e4Ye-&F)ns9#dQB<3e1bXpEvix$kTz_q||R2 z+$*Y`9`I2Z+ZrFqWI%#OJasd3ouyz8tS}!~m+JKG6=8auf?@ekSsJDl9tg^(2e24~ zIP~ecn+JV4N{s*+G}@Giz1ex-iE8QgYZ+_Mt+5bJak58y-#I<(ZZs#CKO*LCvAhnj z*5E5&+O%%7pYr@T&~0gZPH}(UcW{|Q&VyUbg!)7xqv&%v*Q?HMkRY~YMDR1 z^Lvpek?*3i0EN`-+aQmUn*2Y<3ZQL^xtT(CK`13%7Y6KKUxoEAa~3X_eRjS`(Y&Gi zk;R90A$l&kctS-eic!z3NYu~k=GHj%^lGQ=m>?GA{+BM%w6Y1cD%{5rw>N|ct5aFc za<!fX7`730Y|zpZqGm!RG_AVj@%`SCr!@DG8FPkGD6 z9ublj)R0ZEJlKZH8H=oJR@oN>@Y;nPE1x81`SQLO{C+fbT=%)J8gafoRj`7gZ{=AZA_oOhm;-3P* zSJ%_13YD%4T8I&y1I}j;s_tpDs6onbCoZ;D>mO=2xEh*{#4l_&)4GcRr-Zs`grQ}K62qOdqD_Djr2&ei6e0v+2A0pB;R z#(Ik`Tap7EHY^r-&$lk`9*pyHJW`cX+&k5e%LDw!PqrkDTMq)fClM#dQpm8u1gEv- ze%T(yGqABn?ZU;V<3eV2p5Bi3=nnq2kIm!!8ps{ZE5AK{(~EdDW4}iDo&^_87|T?u zQ|00NIS$UjQ-nQuq{8Z{17tlfO)VX%dQikhae2{$ZZTlST{;)FUem)OF%cGA`a56PdGPzjiPQrB?>YFgzu%{r^~S}McsEx2>ar^ z?r19$7;Z66tC+Vxc8s^ocwv-epi%^Uy+nM)4r3v*zgzgaj1+&Mlip`ipFrxf(%^f; zo}HvLhgG@>`d1=SRj=i%o2#)QK}jRfG-NF$41EXW{)XRz0PY)1YSdAIB9^k!JtB}> zKT}5|Oo~XflkfOM-g1BN@SQ20yKG@p%R20-o-k99B$@MS5(zcy&NtHGejQ-3jW1R; z-%anRH}H9%$vr|j>ErHRP!}hM)xg4RzEgXE^)#(1zK*gru>VAijo%^_(sS~dSbhm3 zy15S9QQ&u$&+uzXJA?AVk)gkf;LH5ilarwy$KA&n0!?+30+SFFzCZzs=<@Eju4vqX zriT7mD$Iz(ml8kdMOjex#qHnMPrF_h+unT^p^HU+Epa7(ik2O^6orW=Zsw~ZJT#?x zoG4W$&|waZ-<5U3yN;5ZqXK}#l6~N<(DW5ZPRXjjj8_L=SwbY?`l$?@@mRst%EXtCjjo@hV_Z$5EZ$W z7I4#w|J0~n-Oo$QqG7|0*`;zMc;M5Q=!;Q9$D(hp(RL(VUaaX<^NKvW)n8Er`TcqY z*00zkE0SaMuX?SVD!slp(PfXbv*3%*26U_=O9hf>p~r{{NlF#qNg7+?5j(d1LKgj zrpPa3DvWwP-#VtzvyV8j-fi*dcl&p+I;6PDuDHe)!WPJ}#9m_QV{#P4>zBmY4Rhit z6K`WgI0bE+^?y_mGU;8gX`IZPZJPyQ-ytU?+wGS1qYSC!lz|$3dR>ZFi=G}%b~(9J z0@uL%RW-ssf*W<8?qrN_zay=P9GVYK7V22ovAVKEI?cInmG497PRr5V~$@Ux+Rr}^-Q+jsM4Te*pNt6|itF>AC2m{J zoW;pE;cd%zh~uFMmS98(H$USOa{dev11Z+c8f>UTiFoA$;;XGC^w)Gy(>cFd1fMAK zu6fI88>SPZuqafDc0K_3B+-gUsNl=-&Ju#FKeh@i5)0DyCXy!(6EFbr;Gf;jqcDvt z99~O6VdBP9CS=-coNMxf9y=(z9+LE54wKz#2yS8=zL_KFwu7xK0Ndok1u%*zeUy!~ zrg8ZU12FtCT8U~{B`r@P_B#LV^R{JCukA6uv&^1*8va|Xi~Repzq@h@Gzv7A)Vp^gJP=zUz|-Mh2E#^|^@zn#NJ9gH{S=3^F)W z_&RK6?|M#N0T3tOREp`0KFt_^v>b9(S)MP(Wha}K+k;IeP6ZXGTux9!mogBNWkJ_K z8}B^c9d{Q^N>RP}72HYHRHGf_Up8%JS*>|t?Jm%4F7bMnD%NeRpt+gt82u9>Xu3wx zirM}7k?-`=H>I9so@ETFQ`R|+A~Dpp<(tPUY^dDd%&N&n8)4@= zwojnj0}hogGpw)cEf;2I_WbEO`#u(3bvj!&zxy(KY=>dM186Qjwm5K8I=u>S+mY1Y z5wCpZ3F@??8efgdQ;w)If=C9!yD6nVle~I@FiUR& zC}d@TZ~(|oUb0rbu^-zPQEV3gzjs0%@zFdPx$SU8Y&0ayhNdm?YB0%gN%|-a+Fdyq zHI&CTdbj%A;CH$)v{m;bGvR#IUVem@YxKmmAH*h5S&`h+{%k!}^Qbt>o#APtIh-nZ z5;p9-Ie(cO@Hrogz3JBHp18j13C)<_1%IgT4V6eO5*G`06sFqc$F{a90+sza-o!C-g<8Zw9>eFFsktbD%`{wd7CsBs}qp_?&u*j`ts2NdfzFcLWU zLnS`eCQK5KjxP1} zs<;Kye~#2RUKL!l;01gZ0He;&gcucG%R$cKH+yD`(s7r z_9cG$M7RCuC)C6z+esx`3wglOW_^|q7k9Fa_i0YQ;vGytNa9zP2E#|9lZE37pYC5t6CnJmOn6<%Yxw}pnOX<03(3a`|C)WL;~Vt0M_@!K9GCNFt*f~Rxt@gd(f zCZBZI1l*8l?Kh#`)_Jf~xiV0~>Z1Kx7VBZ`+I5Xh1vj z+!!pfssP5IED4zMborPTqx7iF80O=+<o9EL)5XoLab z21jV!F7&AU-%UO2-^>DZAD+X$0R~KTNKw4~m3%Z<_Y>fx!|^693*M1zabN&Ow=!G-CHzq#1y^b-o@x zs(gUDg<+oJ4J0)QaF-s5_Ks_vv>(~2Wo$Su__I)tDv(j#sfSPx-K1U4h{lNr3q%j3 zX1Cg-hsWm8iOD6WYpmMozm_{Kjk~xi~k$Z|RM=$8EAqjj<+q{lxkc${Mu> z4s0QH!i0cG{)OwFz=0^n$Z>*D1j*OQ;D)N;>kaqLhQQTGM~-K$@^~)6s~t|e?Rtx$ zN`Z8H6hH3_{0}GD4!_O6T7s`@Y*#6-^!Ll0Wub@m*;}b^KPMe-}LOA0RQAA z4#cuf3?>16`cAat?Q0C&a)2Gox`AXp=_(q4aQ^WN`qIiN1JtQqgtBl{GO9n%laq_} z>2enhT9#2`&UfwaR4_hs8iwRj)A*VPVr}iuL+5!WP@V?@Eka)0OG`n>fwpFUcg>oV60h<+5$9*$SBGGK2Q);^#3$}v}xE!hG%8>-BP?IW*MG*zxe(wFl z^}0^#a|+^D2_zBx{0$N<28!I#0pcJ8j8m;B4`I;*rIx4MCb!T!#-h(*+8rUDM4JaSfk zDnQ+O!2<7*T`_3QT3?@%oMmCPOaqy)s%O=^ttoHhm@Ce2qV-kD-md$g`vx*cLgC}j zBRMR!cPDw^7>{VT)a;G+mc`+I&nK_y3|Xye4PY(&YA@D8GgfM%?F)9zPJ=7ems;9u z@M%7yBA@s$05aTOijp&n-e6k@W2HxU5``M*v9l&Zje_Q)nW&t#3jghY9Et$QPy{eb zeF$o2!{a9Tp1&7TcceXhcctz!sv^5WeR;l^tS8({zK}A4k1{jwehN#pMxib}N^1Y$ zXh{Ry-UB*vbYG%itYO5?y!KwP>7B=Y;+~*GtD0N(Po|H8imE-v;>T@X2zXWOrYa_~ zE_U8`hL4dp-_UEAZTU!;p(mEnq5sW4clfSkf^n0|%FB|F_}#(eA3X(R#lzP2GJ50c zJj>mcnwuDRp(pv*yVMf}LMs&>AC&?%Jau&_5~@*tRmiJdwnF*SEN>e4t7-qBOo`B) z>*A@3^)%+&gU@{ns!DO?3xZ>hy~Iw&14Pud{F45hRjqvY`-MNy9ikXSQp|mx_Un%; z9t}s5MBZ6>+9nyf9CYCxI(1)V`|*K9HWWbR&W2k&x>HDQKD@_uiiE^|;*W;gr2dAb zX5}s#Yw#mp7iFxQR=sPi)19F-=PewWpM+<(9eGCI4Plf`uu6MvT^cjvuq|G)IClDGWUD_?CK@DoI4N zU-VT;=gXwx(~yC^%&$I^3f?(LZQDziX%#RLx(dzd)uP<#n$!g@$%fEk>}i#-)DkM_q3uL5*PS73Nb~ZiwAtfQVA^Y z`?^Lo>S#(P zUq%1G8&f2;m~jjoHCW9pj=T@WPM>Ut3@wkehF> z0*ma0&Y*QEdrIav*nJ~{ZkA|-Jhfz4k|@O;aN-wXv#|T)z(Lj>HGLHYxF6Wk#sOB~ zmZ#zzYzUc3TBc~H#H`$cBj*EcZh?;a;_t|XT=*E$(BOGx6+lGqS@1%%SX7y5`*ET2 z^JH4PAvg9YBObgSmotJyE>#NiCrj(M1fS-^;-36ZVQW4@xh0J`CboPttC=lr@=VwR z3D8uyu`I#>jo<2Lkb}tegRkB<8DknZ%(s(6ch|vSiGxuc|cMoS|%D9d0Q-b?iutKnRe)FL$H0t7V<>|NhxT?W2$U z@$faDF<(CxFuQ0zu`nV7eMyje=~9RZfHS(>sHxIbpLjw`1pPVhHJ{p=AKy}kX(wa! zarsJpnuv_O@DQ#7!nggUwL5DwpP3;)C6DO$$_aQh3Bdn3GyV1tz!3iZL20I{65~yO zGm-T~kcTPi$C=l)nZ_lunEMYFM>Ql=Ti{^i*GTQ3M~ok-W<-Lv-Zxoa&YshXY1XC2 zi*@A23l~Y8JeCx}V>U9BSGCxD%edXtt9-xH$SGc`aq8hpo_oen$35$!0bqE)hDsEq zVWu-{o8;}m_)S`{ZlX@^f&P^f4vPeDxjV!_D(FGf`zv`QKWu|xDfA?&YXLmKpF)pM zrX<)84_qG7*h2ySiYKh&%p|WKcSh`7nEFGOX4>)kN|IQUY(p^!h`x6BOQrJH*bqC! zsi}hAi}GG(@3f(BUg<}hkc1N^JUxKR8o6p2NFKG{5g9qDJ}NM*Q3Ia!x{Os4sj$+M+aR zQh81;tzshd^y;Jj8w4!#vG*c2zFF)Dng}oKVJiNL+eZ0E5xV+jwyS)6falOL5{HxzT zxu-b6ziGDv;JvNLZBC@>KrtSI0_MJ3q=%{@_Os_U_=~{`*5 zg*)bLcf&WBC&tAbzm@R>ARc@jHd%SLFdg)Pk)H#4Uh|K4DC2HOd2v|++QIr)F|AoR z5Ll7jtW~SQE$52A%s5!?*b_1xA-v@RT;VjXy{%_Y0r3s9elKO z$^ftt!VECM5Wjsq8MR_fw(5Ze!^JLd&I`j8MmR-Xm=));2%;;Z8Ipbr3?rr+-@_MM z&hS7|J19T-skLWR269pRL@?yf$${mV1fn`PNOUl+l;_c%z*(>g*9hd`gbXFtAd?c)yt)Y3Q5`=Ov(fStJ zUCC8NfFQq&Uv%t*Y!{r*&GICuPw)1eM_=FcMn5k;n__i6{~WY{ z*)YqjQExpCY;YHz+fep&A7YeNQxt+#7Y4n?xcwj%;BT!Z(DbX zw#)|$5OpveN-^B{E~o}u{yygoa?l0Zq?g}!uBuvs%nTQBoEOfNm2!-wK2n`-gRbv5 z0T$G{tSQI|Uy?>4NW}x|bB2>(fN_8NO52ax9`@NAe}`(Nk;}vk+ekW!4_b=}Dv02V zORwFoJ$$pxYyLu5R5!VaXy7E?DyNK=O^Gt9Y7X~{9yMQGqpaAra0B8-?=#&`Xl9aC zhQk$m+?n4`y137afHk=UEi9K0HRbeL6f=wcV)p#cmg;N6E;X{OXix`FgTL>#a{pw5 zVwKFI%8a{}>QAg-CZAxmhD5rEtndCh8aE|^*z)m+nE{085>TEvrw^EI!as(3H0I?y zoI^?!F`cC+%8`t%cG7*I3~82wp@o8|g_idwkd~WktXR;@QjFP#fkQ6^5IB35ORW=l z{9(-T9!jMtCuQ_*D`(5*a!=1)YriHf4ZfGUnjiA^RS>tED`i%Tb571#=fWgN!vGK? zVETRQ5n)X7I(nC`xf%WVwknGB>V^6NdxJq#?1>9smdUFly;OY);Zjg7Uvsa>N_m+T zF31TvCk~d!(=Ms6?^4R!k08Zs_}WSX84we_KH7QnvjGFw1W8dn$zf|MRLJfsH403b z9E`HlaN*aKewIT~V8FU2bNIN$5YDCG0MOd=YYLW05vHiey>=YDNjX0^hA-TK7kz~Q z31_$1?HBaEb7x)lp@V;vbzrI9fh-|kF79O~fPmJraW4nqv>*jQ#&VraSg(Xxh`#)o$fdgxS>3#dvpr@{lrx4wX#UsMAe)Bw*yypTI==Olj|vcpm#( zY)7H#VBnWl{%2tG7wx2B`C|XIK|$v}OBC@ynx4zMZ~~z#5l+gWT5P%^8@NqX%^61K zkZ_$!R{W`f#iNKwbaW8}me*GUeXmmEUDU@tG;t9$z^IR)mFuO%I0H2pZy){ruNKNS z{2|#LuF$*iKx54X6j^3%HW6@#=!_4{JuPYV4}C8#%Xo_RO7r5UT@7mg8$cQrI&hC_B$6&yVzt;uj?rGNM$6kved%!_`bD5;&$Am}XMgTO#*i8E3 z^xQRnxi`ko)qWojL-L}l(^VNN$#COTaxOoh^tFG@qCDt-C>qXWmigaQF}slAdEAUo4M>b$@DOfNg_vwn)A?MH;xSPc&_h~_KB zABML50fz+6wY5CO-GR~i;yx%vh|oTMX=fiF)JD*~w1qP6n32^zySvM|L4ZlQ(C zNkI^7H^Q!#pV72|Scoc^hK)t^Bg}qBlG%ZfY8K%zoRdx4 zXCanUFE0Kot#60**M1uL<^)G0!>B+TYDiHpw05mx_>-TiTFiIDNs>{R_Y19ehxss! zi!B0U?igjobx^r=)HsS9(Hq4q2F%SB#VhkG;%kVZT5p8E1RcYW;4O0)WKzR0ztMkX z`vF}Q3`fn9W@*ex6HThl7za`d0Qh2XcSR1kpm? z0A`g!_S`%wOU?+`_TGZLkXvFgbrjnyf}&qT|O4QkF)@?b_)lhbOG>kS$mC z<4?wTkHN3!XtV>C20;!`64Q>;=t*?FWXb!4gK$4_1mflnL#?HOIH4>3np3V5hQ2|8 z`zIg18{YCaJsb>_>x@e|_;DZDZU;{IyoxMAx`x;FUC=5Cne>4#Fn#|xwivrR6Ex6t zV0|K+Pe&m^n_|-F({|X94NpIGr$*i1%CN9 zNKl9N6>F=QgGHPAtK#9^j)}xrOOOgwRMt{_CjhN5d)H+N`TGJ}E048>c@bjmmg$VE zFAI%V7eSBh6k0VuDakFj8q_z!O$hw(2Z#W~Canxgq+rkfmDEomeBO`ip{nXoKor5B zZH$~HxL^(^VN?%l92fux5udkVJI>^1p~wN*2Z5_;pQV;ShS#Lo#@KiW=NmMp45(wX z>ti+Y^Lu@hpJGy3cm-Q8{8(C`?td3L1UXmKFii^=mg#`-vH)EIePSG)9WmCOT9}7X zIhpK5j;rrKIS&B64ASU4i(M;Jb$K$p02csQWxfIYA-gZcc10GUL|2;({Z)df#PmcK zojlQ3;2Uh?!?Cj_{^B)Kp_2jAdr?L`v>oPWEGb zB_gCY&9DejVRT7T6Lr~8-YO7pIurBoRC>2q>|C1ar>t`=!s=cRm2| zeQ_^B4m-=M2>>>Pf9@@_8`bwxbZ5-gT z$KNYT0Px=B=(tLIawx3pv$i3-`cup8rhxYXYrr90ljSzdAI$9&)Pa(X{*{l0EV(T0 zBQ{|*iiMRV-%&NVg0XU=Drve@cBWcPCi1sCE-EbgXfi6Se~5Z_ZCTLFLjD{i_yOJ{ zzHPVrs^C(#oM3Dr!tUBf1!*G-1^ZTjWR>n1J+2vrdtwy)5bcrnG%p&KS$s zo>lfeJPE|3VTHwl9!iGsrapd-fr>Q<+o*z4V1I{OTB9RdQjsII=mvlf68m;0WZp@S zPVLx~Wgb6f*sPEY48u0(oGaTDo^lzZ;W;%PH_W+zw5X9RU-zn$nfEmmYtRC9SViFJ z9`<8HH4eF6P4lS+e%u+PU{Gg8?i=XgG!ap31;<1Rp4DI zDHn-}*R->mGTItcCO${K3v+kJBOA7tl^8p_-CWVDOFQZ)=VM7DnB|>2WAV%)DVxth zlU}o@d!}FT?oTmd1Oe~3flc0lhEdSdtK|ZM6X-zn?fuNmgG9mB#%c~`nIRaKeyr0h zaQzQh<9Hjm+?=llARq<3b;bQ&SS|bU>11w_cYb(qX_z;MlxO?h&rq3B)P1=qRX+vV z&Xl~OeBzTiV?;_m%aU(gt>Gn+0)HqhJ@RB?hsP<%k6=yeScTXE&gMI)!Brn>{SLyK zY-Cv^q1ZRrmUVtvZ&6N0^cKs+oRo z_{-v>?9~pXR_!Z0x@d6LA0iKZcjX1ju<0VC~rMhyCa3&(-}i^!4%a-qG##{^>L5&|i8v zvFnIL>L#PbH?@Cnl&!fK_)R4u4Ctkaa9>#hQWgGc_kr?+fY6VNgPs|C`3HWU=e5PF z+h@M#o?$Pd!SIo(5Ph=hdi*=?hDab~z!NjBTadd4j6qb&`vsUyWtqx%rVSRCHkzMc zR)F(c9ddU}ez*af71sU`JZg>KOfSHp3 zs?rWtijw){rc=flJQSf-w^i}}Wi{k3pI?DP=deJy8PwF2t zx=;`m`uu?(t0G3J#C%{LKtnizln#h}@Q7R;*jmiVepF*Wf+yjwFKlfpVrq-mC{M@( zI9L+cA!QoE~&kI5r-0?i}vi;kt}Pa0yl zE1*#g)p2{aRd%7A956zYldN4-gST+gH7T98O7u(o6b%sRTAo^HYDnB75g5HuHiVC6 z<;sK|!N2O?)U<9I^(OT)EOSbVC9ki|R z=k=2$=VmbLdim-v*?r|0)xi5!xF@L57}J1x0^L*)_{ zFOTR%s%>fyR$gu<70MGmBP}d*)7ydu0UDWvo64@8dg209Y?|wmRz*9R*jL6_%D6gD z3ZK4s+Y+u|TiDF=dg{P5D7)OKpS}q*Ao!#=54*tNzMlA`<-sD0Oz#mg$G4-$l<#VG zoB{xqLup0DK^-h{#^P9*)KbQ4izrksNS?@!%PLkj30L0E6#0baTlQULm$x10|yFbnz6o$TpUpDqjA z5iO>uI-BtDFnBp?_0?S~a-#Jh)ds-~YQvbh&exyyMI;Oy{Z1Mx4(T~VfwgN(GW*@0OKg4l&sDHtf!aVvHb^|Kn z@+rn3Y_gaF*N`thZf__0mg&is?$b4itPO{)*AW`oPx^#M{wgl(X^g|VC;XBOZUquL zHDAuR)ICLsESZh~V4Q1sBlmA)#}4UcUKk+?fEV2t#uA$L^%>chdv#k)U{ii5csN8@ zedM3AwP-DOhbcS_{|ErN&*?NpF|&l=@q7m4_h~HPOjZ+$qF+pPS$WK+G0J)9dGQ@J|W zf^tBMmv$+$OhW$eeNHD0H=qhH;;)?D2y0{<7*46ukE3g_rcp6 z*Kk1G7=|4}Z6oy?SScmX{QLDcyvww&m^A<#=*{2t5Vk#%=qSo~_1#yT+>UFba|Pn4 zj=YBYhfl#Kp&50-(F%N>UpIC$QA41=f}!4Fl``e_JMyH zZ1GV%%<3HGk6pi>+fU2;t&;scy*v^lKn>^iWLY}l8M&p<(=!Bp;up8udBEwJX)IL*1imzC;U?TkDNV5VzrS)pb#cC zu+fk}Npx>bbEhD}xOw%H59@SzCF)gKvSwR|aph~9VFT{j5a_Wz| zD}dAy>YGYejzuDQQxU?6B2osrVCU`FE>V#_plL9s@gzhA{T8NMo6f`It^RWL8~4;U zJm$nNe<@nJ;KOo;WB0p;D08p7)6?!~5SiP;KIE>w(=X>#O~M{$%myBSmCj3I9)lBt zrt`qkKeXyOEhzC$kL+S+r3fraRe;DFPiHw5o(P%(lCrMuyhy!UhYn(JZQ}^4=j+p;<|}uTgY(A@kiS3{PpH?a`d! zM(5ZxgGev<$Uf_UeMhx7%w{xd?}3vOZJ{?{l=Q1lZ+8%BpzGCd^x8IaBt#1BC9 z%f{YXHiKk)6spvTKfWkmDmwru-niM{y_KK}@vIuY6V`&g;2x6JG<~oLI>AwgPAPxnBeMCN;qt@hwH@AQ ze;JEf)DezK3X`v!6O}g(6TP_A)B@=u$>+fG3QWzR&@3h7p#ss7L5H)cD!4;Y21N8>bw5Bovs;ob+IBMy5u&m zyXS+9Gy^X3BVB)I)n`tX4@3*TC0rj7Krj`ahqMxXL!$|H$o?nZYB|w);O-MuHHmKy z((i!$NLs7ME0LWrhw=)Vrj#k7>@iL}zZI~oZ@AFFy#dVr2IFMfB|%GQ2@^R*Zg6B> zlLFxe$CrsH90#kYN62^oWFC+=;BuzCeIOVTo1w9KueKJ}QGn@ph0->SZS^aNy2BqH zT7h=(M}S2N!$n^>{C)K$F@X)~a-xN6w<~o*$~Wvd6JZ3}^0M}Nn;Z@r69al?>go38 za`~#z(@+ame%%wZxcc!>)+SF&Mu@iz4DMlsX<>wT7+Z$(yqwL{eO?-thUmPh-)PC! zv>%T$p)*YYx5tZ@_&0$nTTTOIr`!F1exzVVe^v13j#o5M$rQA@#s*}(l!$wScT2>q z>fg06ieOMa=ep5q1TF{r{QN62@gX8iFd(U%mM7fAh>6g&h}!nWON!M*E)H1>1r=r| zv0?GS@FbF^l;irZ?TO8V6tp6_k88W4ZyC9s(%yDJh-T<8{m2sG3y7=}a!nvDe}x6t zyd3iY8wbtaw{PAJHxJ>W7A>idkCp3>jx3E_xyrAc@7;LUxQ%0n2U~1Ppcoc|oV@7d zX>vPaCH#KCC%*j-syxr44MK6s884@!o_^6Ebf1`+O||SLj^oNT89h^14WouAJ*BE% zAK!s`r_yaFYoAn$K)@Mk6LCedA|4x}?iBq4F*!s+`Z@gy>GeYE=0k8d-MsQzLzT8C zAB`~UW?~+96|l624_g_o$#DNrk6q%?THoyEUkp5KWn`|1W>PpJIU#4mmwAwY_vi2o zY@tJshCrdZx$CN}ZaT9)Z)w!{~M4$Ei!$QV(Q zoJ{EP^tgiGh(!yy!5YDeOrkfAE4d+wq$eJUeERIY$lP<2AM$mNV0D`DsySxr*`Jb{ z?VZS2ELV~3e*e2~oR%|eZG>WMFSj8f)WNOl65lOJna$^Hcl9XA{Ux^_{eaoFF3woJ z?6`s3sQc?h1OtnXj$yhCf`qwwWaR>!?}?F z7X|sz=b*Vf=alU%h6Lsqsf&0pQPLA1+V_LU`TheN8wjTm)ttd>o(5ppSuZ`5#X4p9 z0vWD2>LkSuAmMbo!(qWs;eRm}*EElDXz`ZPB}FVW&YliLLw#-g76ZZlKL9c@Sd@KoBVTg2*?PW|w?+XvblS&3Sc)gk{VV!bw4up`QI zeYotuZn9Lkhm&TgxIPurXr-b6O?TdEZF1?~YT$7x&~)p~b&DQ;k_V5DGYj)9DVgy| zT6bhnPvUty83Bd9>Qf(ii@F|L1u-{_FIOupaauaQyzdBbdNaAPbY;w!@P^&k?v64A z(Mr>omz(gB_}BGh!;Y6{MV2zGSV0^ea}`&eJD&7<)1856!i>kpM3eHNL62NY6J0Qn zA-x(D?7JU4jDl`kuA+3uVvb~5qzNAM7521aVTdMT6$L9nO(gV@tdx=fz7r`LU`TPztT-MEdAC@5s^!&sKb^IJUzGB&eyWCz9w_5B?bU@^%F6k>_^-s zJz}?U5ahBBPr}!Tj_T8=UfnMYt}@~N;N+OGKU=|efG)O}-t+A({Kp)@!%-7wE&ejC zN`}QO?yjFT62AvC7WkaF*`ChLMTOU}K#wVFuZZPYh`(wIYPIQ`P&dK?;J0wjsxrAvGa|C}Xr`ett?UniKs93p)pe~SOU zY5&$m^ZVI|SIQ{u^9wC=|AOP~cLe9EzYx5cN_wjtvi=WGyuVeEGh9h=?k!>jHHU5G zCPN>=sjabM2XMEO)H?N>gwA9vBs0H)-u*$yoSFQMpUzqk_#Wt(`XKCgJ`M9qySk4m zoQzAN-5^#9or8c=YLeGF;90-}Fo3IA6-@j*rJN8l;QaxFLDJ^u%*(!0Tc3lFA=D62 z+@t8l?Qz{dXjol&Jp|8d;^m|Tnl=5LDx&KB4QsksUt;QK%vZ4sgAvyF02%foOP1o; zvzv|VIKKkLq)#RqtEC{aL}!|d@q44Q_pka_^-%VLOFZPIKV)cn^6%8RGm=UempkJ` zQIyfuOFzQ?>4|IX!-sD0e>O_ z9y7)*hkSec`6R3~P6o|9RpUKGYFR6x%IEoX>qt0B1By>Wv4nFNp+LoVb9PcC;z1y?eH^2Y)uGq3GU>?SYE6 z33Kde1IVc7`vmc`a_{0LZJ}Fb&=Lueg(=sa;~A92fB#bmMQWfGH*+3sO~F4w?Q1}L zhC7#Y8Ez>8wF0#eo`}w@r(f%Cv{qp4Di8H?Q@Iv4JNTP0gT3l|AUdipk)CwDND2!w zFPTEqQcPYc+8s=qe&xq%#a*~x#15Q9Cs>M^MOt26NsKLO&$HUYr`9=IV z(5c-+h2ZcTCQc_(i&qRKRn(3?*NN4E|9j-YtEw8G55cs}qQ9&~Enu~kRo%d?upO8L zu7v>P43>eX%O3^8jB`p0#k=+fwR=BA+~N2|kN39uk>qP}{o0M0qdK!3WAam})p}0O z=tVpQpJZ)%HuE>A*6FY#Zp?+nCpcA?a+ZJhcBV9ddeFL2z*c32d9Isz# zqTa`^Y-4VIwv6;L4`grz@(ws}#L{lEw=7@jGv{$(9M@-&Rou5QS%imsYFt#VvCK?;I|x{!7m0 z9!F42d!#L29U!F#VrjoTnz4WvqFwDtUdv+;s;OuS^>btVUdJF{hLI%N%^@EhidiBu zX+6ymeT@L&fCGe=z;C)03P&4SaVK$&2YyWBeg_u^1svFdxW;pwaJ1(3>MJ#v=J}m?p5KstXf>My4qy`T_8UQO_!N$pr)PyVJ*$1zhbw zAzk}H9Rd;Vl2cAPG4V#-7!lRvoT9wYU6=1H!lQ|uqB-$?J4e*v#u81j%5Il8 z-lhA3?&v@U6h3~}j6Us{{9yLQW}ImI0(r#65D8TaV8J#7TPlVb-ebRmyn+yU;elaY z1`TRQS>~}-^XmH6^f@nF8sUgYkvfe!FCk^_EbGyup+Fd0jyVf^E_Xy2iI{7i>UoLv z3s3yyJP0P9^U0ZpsDMgu&&I0Am`v?m-S-K1R(mQ1PcDfYk9V+g2RCano9-y))}L*| z6%}PxBbJCNL>Fq_KZRnWLe9pDe?FH>xb8OCRj?xj440Niet6lb`u1$%v+bVwHO(FF zkV^K{&TOf=sq_fpa)-}E+OtA&A5s$f^~Uc&{OAtl}GRAFErCAK?t23^pZ0yYRdpX zTCX>r_5F*crc&0UE5mlg*korD{19@W?Wveb_xp0X5)sVLDj^Yk=27|ljHkG;>BAq{ zsXIu;ig~`Bq$43Tm>Z2RZ?HLDPh(c@+WE;0YiA-ecrb6u@Pv2*E>FQ851NN<*>~=kUYmvUQ@9s+qCf zUt&zU7+;TYCPlGO5qQb6B1?X3PCXH;+;Gw(N%?r~BACyDWpAW~^gn-9N;}xIz{qg9 zTp!!{Wh0ECl}jbdh6|;002%;*`LEkr0k=YTZ-NS{#aTRfZ8Zy+Ig1Xp!qukcWZ!z7E#W; zA$=yN_eM7ax!OL~_Lw2Ux^apdHXnK|z{mh}R5YV%??ERtavrU4X15ERIARstC^PpKkS@34MYQt%QrpjcNQ` zpcfo6MAm_HeQ@vO4zrzRFQ%kx12L_{3c9rq<5Yq9Qvq-qMu9>xm0b?kB|;V)B}+2t}BQOv*Xx5E@o%eaiQVwaG9p(9j&HfVNfOy9Trv~@; zqZ46x)Pmaft^*#iCe^&YPi9Bf8Mjc6>yPC%R27T@$Jl5TQ`{9DgYp?$`8 zb0GGg?6kAAvWuVmBin5=&B*Fi4VSb-glH>m04ykW9!73J;q);US z^GII-e8{5-1mmLAs6B-l9@4%80Nq#GF+cliyV{5QuLa`<#A$2`GDPRDHfAH(wLEMV zAMU_gU!AWpe`3pUp63e?j3fLuqfp_z^g`VL26#+`mLvLqt-FyVdfT74*_Fk_jI_9( z5MagML2cT?q4|WzJJTep#`>W{9S1LL!0BK zQWLrV=>SmZd>~LLkeP|HrORpb@)SNfhQko7*+nT2piq8-7!7?_!53MC5-|Y?DT}p} z2Sh2Dg4MgUA=-Ie?}YO)iY-6^?9|=7(nNE%#6dGB-&#gUha~mB`~aa z!xG|O|GE)jP_FKJ(?GTu327Asd7qDxANU{GvbA>QThGuyt!ezi%`nlpf-2jtTnLeh z8@`pMfH|L3PJF$W3$B=1?3<9&7KjRZ!^C>%A+|{%$n7c z$s(Q^=*F-=z?6D7;=#}Twu~MktH#c1jr%vinB6KWLvomgg$fAR6aPOV1d#E+D8+x9 z9E|B-zI`~qym$j{U+!Oypd*%ttCK56MkXdUC^)&GcTWUBhr)-Qv? ziD?^TPCY!DvIC@A1NkRrGVA00875~U^ z+!V5;L^WE0)VKDlgZg;9JMUFSiAd(&A*^tnA{Q@X43s>ujB?U*>X_2i#k!wD=e9ykVq0?8_8km|$+3D?Sl(B!WRZPt(BwL!+u#_pmVjhBm#@- zlXNU$O;xy67USzUT>bJHc?0L@<@~whyq!1kqI{v1)CLnEnr{56*kFNnZRvjds|_&3 z_YVyTlaKo@!=f-dkEJ%pGDTV6S@InP`EmD8(wVa&lI7R;F~vkm2^>KIiv((Xzdl@4 z{lxhC-A3~bamUKj$BDmEMDO-{k%&| z605qKcDhSuoW}rur;wNxLk(P)hQduGL`nEfDUSfaF45xLq#hHum;1wwnJd$dw03ii zFzp^zL&Vof)Xw3D`f8w%!Q8QE;QfsK0u~vV-lGEYes#vE2q|ubl zoHV=r{_hX-#0*WloZm$n$$PQ8-9}fALn9!j(TjY6 z=P;5<_1evDXV6uPW%;>`HYYApV_ezR;DmOQ^CWsZ6jGbe7mX%7T19t!pk?%AvKY7e>45Qkj z54@6df`Qzl#IgTqALqc?7mW+@UFAIz-V>B;MD&Pcqy=b77S1(V~cROS{yT5{b9XJ&5(YJMI_euc{`6-zXt!Me1C+3Xk8;-JA zvRUClntTV%6I5dRtsieT{oipCLA7ZY6MwdhQepF6TYooIS_AivTGxKLXhbC*u9rq7 zpF=*`!4*IUrxOcLGXCJ2a8H-Nmu_5QoxW>-#_eO>go{o&H zThKb}KvaiW^o5{8B%dKs%|N~n_v~j5;n;Ob==bzc_>4Sia_%9Xq#^a~td>L{%EiX< zV@EGZQO4)nA$q+|UTXT!xV!|=0sz+F4eh6<{Mm55jWnLTY@^#M393abCTu{Q@N(t6@!3(O!|X-+Wzbs0j)c%OECfydL9 z$V8Te1uR|)rD9!3yyJHdzE`aN8 z?zt3vpC$!&jPy*Jfq;cgNF1a>4t$WC`I!$myal5(&(ABn3?C=@k?=iPr|iAC+>*>3+x|6Ud=O2+acc)+neD4 zGXD7e+dnY5#~WLnF;Ax9kq~TCzbx;^;S8v349lR1ATtFWJ3K%Ahl;ThIs!mE4J|D_ zJw@ta5D}Wbp59}ub zK*DBELKK|{!Q_y-C;eLgNwNB}{6*AxcoHi{6$bP>X#U_~II^?}{G(*IO^ z78$G~i9Ivlu~t%N`@za}t^_+92AhYWF{l2^e7NgoYw3@^t1*BZ8Vp?;1+O~maXU{#OptDe5FF7qnhQv5J857w< z9`tYeA4qh!zSEWC;;EoH3^amf6H~mIOl)?!R<+;RDhWz^VQW!uq%0xKWsP9ZlES&O zSAATQ_0gsJ23K_AQ#19Y3Q5Q%B{;N5Pqy1b+%n5@oWo$kp!D;-vEC23MlYrFg_Be9 zk*Vl@UV}(6&NElP+kw`}V=?*pIA}XQ_A0#dWChhj4=Aj#Yu!se?+~&=i0`MrsQP!* z5O<)K8h|FM6Hzp%b{vFdK>*R~?3)kS3k&J5wOk7u&6C}X@#h;^r_)7$nlCj)+d(}P z{sz(T&~&rmk8=nXrfk2EUA*i(qJB#p^7;=T zmVcJxTeU6^Jmd631YFErc)(A8+4$y7H|V|=)7gCE9?-d%oK?m$i6=qtet?l0AwGCe zWc!L}*Z|yyK&+e4pLAGMc=!I1yJE?|{Vasb0VOFH-(gfAa9J$F5%J1R1MSlS5bBfC zx0kn9YhLVXX$unfbE~$qBkAdtHq9Il({EpK6YzexI8)An^~gVvV4i0`c%7IsUC5Zv z5>XDf(U{r5f;D0CE(Q{6)<=XxNi(2au-sP?Q`<16?Vrj1y?di}7mhz-k?6F%kvb)F zqvS@}!@UY&#t*40k1$tUyyesZMg^95PpxFUJ_|w4Qi1lQe6dx&lXdn+>FCzsZ->p8 zt0A)lFMl_4D|R==rD>z!InC(7tu4;_lQAcQSmRtw`g3EbZMeil3CbCI0yDSdxDs7S z8UA5ApfG%wYqpIk5+F1&EmA)^NEo=DCI%{|%BOt)f}v8|7Ca)q1v`auKZ93&uG{)B zrbZ9tiaAHY_WXn$3$bnv)L)9hJu?~)`OAhK+JH;GI>+udzVU91VFjkU@Z;;Xm*ne% zV6@ezzrHGY)AIMN(TIbSBf1A7m)^Cb6Aad(u)h^@ae^4bg0;B?VoG}6-K&eE!cre| zPJZHGQD>2#M{1RS-SpcNYLLc*I2D%$dUV;JWF)m}8e-?QWvKl&Yw}@xbAxG}PZaJ5 z%L-C`*FSM8`mP49$UOvy*ZRQjn&>$Sl(DxmprFge{ygRpEXjCkE={QoV&6|P?FbbF zO>E`fP<|m0X~=})aH-%U1`_n)^f3JzZ@E=F;iJJjazd}8-8CBWh$Src_ZI8l(v-|+ z@M3=n6}8Cv+&IhL;ydY*>0{KPXdoA|KaH z0OnIzt@6gFra#tO6!5qIlyLkceq>lcQ5Ww;xw2#tEfi%Mh;3{r^9>DiAzfOo!EvrM zz8u_U+xdEAm1D2l9e>?4Bm+M;laSUQNK|`k8=1^kl>?6%%?(4P>p$I#_8rqIqV?yJ zH8L>r;MnB`&D0I}tBhYDFUYc;LSkpGbkAHc)1nCQ6N_NLOA>i64w87wPK*T%GY@yZ zs4;PlE*>1*7NoYv^`o6Fn??ThnQ!?Q9Txu5IolLkMv_JUeT|H3Ir6!kF$WA36&o7n zke+5Z_41aBzg*1{sk<(#Yvq~xtUqAW^ZF-o$c#ZIpK{UjB<4WO*r|6kQYBIvWZ{h; zqXcr~!)e6bwlM5{Yda(5i^aHxqO|`OkNAwuR_wmE-W+#Z$7`9ZwjMX2i>GWPv)pRi{?@l zE~USh=W2WUnhRe}R^&9%CbW*lg=t(CfwOY5P;%d1I%ZZy`MK)R_>20;!o`cZfqd=g z5q3p6sd{;w(V(RBt0p}^l-6gvVorqIoF1VACNZ6_KyG4HN`8)U-agI!ad!8Hj;TMhWrf=D2X_4?>2oi8_Ib^YM ziCviIXZRA=V*$`MgHn#8V6=}Rb?ygfs%vBMY}o{#qEQ>RHYXFmj-cmFAV5Uy+UgtZ zAqfDLcz}np4&#viL@&(5!UuG&48NtJjB7tP2ejQxKjv+Gw0%nIv)RD*F<>4Abn)N7 zYM5-5_6oS?JMf{}4Tl*y%3p*J39D^2o?)F-U^iZI`{aX^=+}Oik^;JLZ}KM0gng*1 zG93S2)u=4p5edc+cv^po4rqN^GbMlJq_fwF*AD)RI{8a_Hs1>M|Enzi{V%wH2n82@ z-}|LuvvF~}uH8NFZd{z6o*eE%2@%JK3P^91J=J7=AIedmxFoa@(fcU7kMjei8*D_C z7;ecrT>A^2*&~K_KJm-9h7UZvj|7dd8U!z?*D8t$*1?lol7KqIAIjH-jtWXDbL*oy zt6m*<`smlU#f?>5o%n^9L)kK*CD}v=&Sxd56r=`pQ3lkaq=MS#g1xcQz1q=9u zDyV+2So-na@>pkirv8c6q*PR!`Hty83O8{R#vW(tz20@z-q=A#(z?Q)N0ethr7RTh z%@2gVh1p0k-n@B;MS%E9VF4R&_9dN*)61Xh>gqokB;xr;Z@e22YOu=Kr0R z`E52OW?%P6|tFY$C>(&1(3#=4YMf8dh%->)tKnB4Jpkr_4i`K&k=E8l9! zr(~VOIOY|k2@}ZfNy`G)!l*GjR*5EXlyU<@8;sqU)EB30ASg*mQBO*TYZ+Q!siBsl z`K5cW9zR_*h$b)hsng#b#BS*8eZ z-a*fL-@kEd=S0m}&$tdj_wY4qxG~MJFbOlbW}7V_*DmOf{8$B**+^EQA36t*9rm5* zI^}N{Q_X?Z3kkL!!nvHcZEUB1sp_GxJXMnRkpZnKrAD3uuIuF~8~e*nB#$W1!7CTv z;ZI=F)!>h_N)_>1a$$sr~(6%kW{Eowgr#iDkAD)|6Rp zPY5lEn3WjRo_%-H-WvR2=gSdacnRc-4I6Ya;)l=%rIH31a9qR+eja#;>dRvBrxwWv zegj@G9lYuo+gB>BU|_%C&q6%Fll1DnQC-Giba%&^qwQVOqj1 zNNjU83D2ujAAF*d~e73|pI{I7^1|-~! zMi)F2@c==vrE=v^=L93{t2A*N8B!??Nv?c8F4BA~cfx#oC@ec>X3y8 zJ$Q^4Y$t9I*#pT_=JZVS3qPOFiF!))@~<~^+lV!%11S|QSq#t0@kcw`l;YFPK0o4t z6h;drUg&WlJyn4W#1qbOvU9p~%OHr^OwR-!S9O^O5l!~DQV1LBLi3UeW@GN@F2{o> zH%tHDj`(Wr!I*Rc8;Tz}SNy<@c}?gX|5RPv_oyhK5)3R~6d8oxUzH>0R8wfXXb`95 zbwkh#_VwA zwzOC|LC$6VdgTX;jvViIZziZ%O)a1j6L{C>f-CIk(jY39`m$utj~^StYbcRjo_m#a z1v?now<<0ft%$IEMh9>+JTQ_gDMaah+T+4L2&);Yd_n<-;i1mqkxZ9oOc!kpe72sR z=iE01FcCj{>G~z>_%iV&+LV^xRl_0`z9B;+yfUbqK`ZoqtJ?!Y{M>D7Vg&(1emFGI z0*|&VNISBz6}|xoK;634TlGuwxQ)s3t8bj&BlOR#X^Z6}OS+m3FrR)YLEJj6q_{`| zPaK`NavdE>HdyMdS8ivGd)SA%}$T>j$h2GH@4rV33#_jCnQ76Gs!P~AwT@< zGxtX;Mz^|<9T+$o=oKb`+Q_K`<+c&)P_p}_`}v>p7v_Ys@bEx&`;c3GeggyFrn_AcSk5BD?4N6!bv?ITysYG7vt=UqIuFvX=+bCHW zTk!cSXOIt!o6Y-HY1&YlN)G2tnV!yOg3TMp(u6x2MDn98)^kTOMIejs6g{wC4@I<) zdqras1xmTUCEeZs{?2D^4pX@JM!zOatPKq)F3H+S>`}fc!s(~F>JpXn33S7cR48y5 zH3+~X|GvV~U(+Z%Rsvwlb7}Xt{p%oln}NaGf?m=~$9krf#TxZ#W{#N)r0W}o16I_) zpN_B;L0Nb$1})F803AL>tK~1`vE)OMSMOxy`Yj{oGg;5T1IE+kpRDZRNI8@8T#oh? z$HEE9eBnHDW;!TA=&Z3i^7jPZ9=%LH9|nLzzeVaRB+q<_;U++x}JBX!`p?Ma)@DJvt4jo;Y| z`=m9u5~sJPa2+vcXggOPO~8_^eZytKK7aI}c2f;c_Ey+{Z9&N5kbCS&8>ffq$(8qh zZlo4R;GdK2W-6Z+9hj@TJPJz009x+Oi~S$|l)}p-sf5-v&Dx3_cvA3>Ign(xTn@#= z3DA5$mLpK=8D6b0@T?^#u#vnVpjA*cfKJmdy0BN@0<|#)Fsj^hfL;;;)$icCgX#^R zKJ<=+@|8whB1yGogZTtEG#Eve0Zd!JwTF6e1~eV#xMkpwbh$4WLL+Ld<<$t`DmxE1GXST$xxC(x|R+-fK#}^RlnD-kRjO z`esXXyJM3fMRl}8!G=;q^)ui{CzTRoh12huwp6GEJ!$+|#EYV&^>z3I94K$XzP*|N zbM(t{0c_S~Qb&^%hmn>pxd#&rV;rv!zdOxtU0=oxOo@d>n*u~C91gyRF`_)a@J>&? zUK$<-j1!ccTaEM59+U7Iv4%7jX6UZA+)AObhhUnt`9>;0V)bY^J;%=Bho@>!TNw~E z4-x=`WJb@nxrf8A$$x1qtV5R3R;&==iIaj5K-UaF8J6}5b&p}kaREOJkid(Um`2q4 zGU2m&``mVuS#0&vC5#JCs}miVI=Qn&=6^mD*FAwQ)h!ku3&=oVPD4G#nufgTT>stn z#hP=wpSL@=sTLk2*JZ%C-xsBtFk)#pVZ>J@5R4C0zta9G??KvK{d;4nCmjK$6Mp&t zQ2HT|1KGY)Rlf_)QGU*?2c=>K1o>nd*amQWy21w|noH_fX_!sWur(3KRZH0^Um3u> zGL9KWY^2>4>qb1y;Wzk4Mn)YFZCY7y#J*7Iia&4tr&=c zj1kIK3lWP!Q(E`5a{p3zXF#=9j>F)!dSp|yW;l5rkw~=(u`o z_bQL*pxU_b-QJfHBh$kugzZbv!Rp5Twe_*HT9VclYj_`jDmj&;d0&@Z73%8vJX7G> zmcL49+mpr5`|?sfES|k3A5NL-XVIfj#|9pBX*iolqcMec{kkUW!RY3J{+5t_R6t*b zxFPy%1YRh?HFya#)%jW62)g1z!IXe(6$^OsR}X?YfM-Eig3W?w3Ko9kzbPBv7Ir=B zOWCn`x;@+J--yOr9>Tx^HhVdaa;XGXBu8~II`ZzmeEbB;l_IJgrc}=b%KSx<)Vk>2 z_x0qLS9d??kiNd4?4ut`>hL>@IZw%aYCPG^T9nzJv>xJJ1ERl>y3Bux+BbC&XfN&1 zLb#3s%nIIQFGhDjUU@fy5k(iCmFj$j_E?3$CY#f(bI+fzSX}c0g>FR8F(__ReF?Z#f>Qax>=iqiARCa>oeB|z@B6|-3siN zF8~S*I~v0N{=lc*xK7e2GoRF*UF9Rf#C3hYCh82kMaeO@BjQ#9k&CMgo1s7SVc?QO ze;0(4FsUw?9kn=Kgz8RbUQH!_!6u_dd|?t#NjQ`AD;{xn>(rm?Tx{jQnyy3bo_8X{ z^eR?VFRq#%as)f}@vRSE4$cYuM-3bqb&{KbsZK2Y!LFAuN}UPg905G{&ySA20Ad@4 zq!B_~SznoLaX^nq92#ULE22y|LmDYtju1-$p3MTb`m{bcv4K+$2018**Rj6?262sh zbnMxWs0#DvNnRh|x}jVi?wSXfPyBMQX9k{&lfUMz0kOPs2*9FFFYn7j@76kkf#S>6 z;|4B)oax zlMv*!vH*x3L4oGawoWXEC>h;qC4ZC0FeJbIESklgxbm(Sj^406hp?q@yP7{7|D12Y zry}96I3FEX>sut~y|v>-VicAl*bkq6!Y&nLo~YiA8q#G$g9FwqRt@3Xb(yws58zz0 z3i@YgQ8lMJSwNQ=fCGa}t1c}%;4B~oWX-*vyIU^jw?q`2v37tKabdka}XRCmIr` z(PD69eKvli|K7q@bRU_%8>fggE8b5g@RmfPxmg`78WGO(LMSRK7; z>g>~)q`~p>7Q4Iz0iU341W|$|dh0x++Ex%F*E9$&3n$>OCq*m_*C$Yz^6%=`Zs!O? zd3dUVZ#H5^KXb>Hls7hEAbUy zBjC&DNVVAV;}VAnU8|Qt1YlXYTF9OAJgwR!4nJ$WaTYEVQ7g;q;c=&Ud$P@-5a2AD zG?qGA7#%kD+RMIJ!j$l0w$CehrJHE`W5O;%tqp)mo~3vgKGLS6D$^P)nbO!Ed|aC} z!eAi$J<&x7hDtJ08rN*X+r2dgcxWD`Qb)@DU=R<0FSyTOyyt6OAtJ8b2NX( zd@D2-!@J&{80cI+kNfoOZRYDFGW&OS3+6NT?1{P}zTD_D+EEXI70eRqI|`8OzxVUo z9{7&vQ?I_QIKcf(*M8AEcu1tu<`+Y`Y?{bvY0Y+{gO*5+V(2C#?_vRPQQUt1bhFjs zN4$c2R$MW%?>cztLYxr$+CS=zkyznH0*K4WJ!v>CZ6)ck6Y$*9R{m2Rvh?7>#tQ~a zGDR=n+7TKt=0^a7@}r42r=l2~>%$+e)$hZs9D=*%JOwMh(!^_x&9l7)LPEMOJec$t zrvesYfncalyBBB!g@)qH0-$;M`UemphI$=Ot4^=UP4;Xk`U&)2wYRq4^A0AOGFW2#y zum_7z<+8OSXlnoZfPJLTvfO2@SC>0o;RFuE^l9L`vs-uavb#L6A1c%@O z0tEMsCb+x1LvWW(f(8w4L4pT&*Wm8%?(VX={CAu)PQUbXjq0kkde*FOidX>DLBna8 zaaE=jS_flftCISfH?TeNGt4Wu(ffOfx(_EA6+FMIt(cZWE~OJmvQX%`X9I-=MOln+ z-$Wr{jyTbk@hW8CTqy@-TdM|ua<3R7;%K+tV|5i28xVI~i6JwgqmG!~&PV7sVFJsY zXdUM0x$K5?;lR&amZlmHU!eqEI{#d7CdsqQt%kA~W^gAD3781dEPh6OMAS7D3&bdv z$0`ssE7lS_+egUMCBX_$7d~gE%j*nUkO#|YHNlXmqix^(^oQ5_x!?VS5h)3je>B24 zM5vH|#z!3E{c7qUYUmJfFIIiZS#5rb4yZgl26yAV`!2c_Q-$BWm!y$`oUHLoH;7TU zqBpzr)r!FbJhKa63F4>N@a)&mFBcbF0WrJd3W(p#c>jgJ^o%OugqQ;bZ7Wd$8Z-#N z+gWcv%$a)By_{XA0G$`ejD4v-^osr-V+X3y{vH8jNt!9so<*8tzay3Z zl_lRhbWmyxo&$t~{{bDXKj0^=H9}-Zs$vu*f^$lKt(9TT-#WWrl-nzO(ewzDUh@3i z6xV1O!~3~X3EJMk(#+IuT=Djn4Bl;RMWRDO)@BvnL8kkRb(x%1 z==%sP3&u!ogEyalU7sLI6d{8}wf?&}r;!n~PV4I$So z&e%d5m+0f5GkXJM&Pz&>0T!Q5b91LXe&OX`G z%45Lq!RYmFt$Zq8bF3|917~XL(DaWc(K`_lLg|C@YB)=V#;g@>onUCdv5(8LsnejJ zmV4ZQkK*-qZTa(*ZBR>LwVi^2;&S84PjuzRNAfkALJdZz_W^J(D@t?WHmnj}v6>_vjl53la6^GF=63LSW ziFuU2AV65qCn<)CoJ(FikmxQZ<`|l){ z9+SQHcmZ=*tMe_wTZa|>7#U(LoFdLZ(U_S9WHq?2&&}A~g30)}Plc`}D4AZ{#smoR z-4wX)*v8bvXfHQf|0J+a_menhWnDti%s77`kw~KS<6nx9F4Ww_^sjDRc9gEw+rb;7 z!^YsQ>U|P>#w}PM|AK`z+YKq!oWLfeJR3QYo%tBJ@maUqP-GbiibZRbAbya^PU$8% zRV#EhBY;+M3MZRWz;Jmo1PZzfZ1m})2}O{ZA&^EKXKNq(t8~J-k;GY812eAMa3O(K zH7i|;WNFf|TL*l_wCv4!6X#e1yfb1i6$eoV(xJn1nGA*qxUDYaz@xL_UqMPjwB(n- zJR)Ey@5DgQ(?Pz??){iWsu2{*&gokxxR$(oX=2SR&4MT`q2XrzTSF|1KB$1~J_1=& zF-SKlD5mw-L7hO%NO3pTpOv3u&Y#9hX(nLyLp)TlI&Thb;Do<=x`mr6hz#(P$T4=P zrns5Hz7iu={yR6gw@ zk!{N5lDYyg`=~T`ZsMk$SbW(927GBUyN@J@wgb_KSEiSxJ2i%cWb~w56W){;8-Ziz zA9r2cvpxBVcmR4Hkfrbm{Q5KgU~RXsBAAW?aJV%){E@&z+;q|72L;zz-O`r(TP|tb z3@5a4<;aftm4b9mwQV*U3OOYg7O-2BCEdPD&EPQ5|vwtiY*B-1{73|eVc zM)~wLNO$(#W~5HNGw(@o?aiD!K`lA%wh|_2erl0i`3@tEcnsz}Wh|eDJ-i_jW4S5k zLP>6KFFY5Kds}CTO6MAZx225gJo?|udPA{1^MvX=X15FJdi1*@o}C_!%&DofH#I zw=iHZQd)kfUtP=FnnCP-RI3^QaC-9E)>>1mA&cW;ioz>g*IY?nPB*0nW=#TL&%O1h z1dvskIaT{jmwWaCt|c_imr5X;~`_P0dpY z*6^*i2>_5MS(pcRz6L(#soLyf8<((vR#i11B-UazH{J{^zA?y4ICIk<_r@3jnuG80 zu`!xv^b%vA*A}&#M1VrCH#+7vJYD<0z+q!Wm^a^z`bmPt1R=!5v&-JQ8gtxNg0-2^ zaB-wF2TW1`1EE225TpJPz>eqwY=)fdp85P>Q?b}foZIClJGgl2i{{sugZp3)SSSX2 zUIg6m&ZIIy_3e*Q)8P5iO26PidE^GO&W2%=7McB_c~!CV|2Cvp55|I{r>e0rG&9VC z4G5z(@K3{{OdGt82KUfFz~kxX9RZwox_VV!vUVX?tcU{o#49eT0mKuBxVG_P(evJq!G8ua0|$EgJbF#P}t8diK> z?eaXTN&E?yrBY?kRnYlJeZrXF>F_w+CP{#l3NsjW>K{3#u<=|lV$4~lJ4%cuzSs4h z&BJ?Fd;o{Hv`A$r^S3==fjB+h-WOSlp0ONOeDf9s!}HBR48mmT-ka}b>8lKJHA_il z_#PRPW69-4r5)0Y+<~SLnD4O@++nk7i~A2uZ3Ca7ZwptRMJ)U7ggkozb8iG=*|!s+ z3CFMs2Cc)7*dC+_6O)4;^n}a^toMx~{B^ndmC_8GGL*lS()P>O;iyLgcSy_WQy!^w zkzQ&Gh=Kt?=VEAv3i>ZzI_u}Qr2mAef|#qw%~cOJG@cZ*FIkEAUoHKb-;qesJvTV}ww(0z82+HA;|T8|8Xth{ap@Xa4#<)gEDO4G z)y3?!5D0>7^KA}Cc?Z#kW~OmmKJkot<%?u$DV3xQstJ+>qMP#!|DYrej2a`Zm-0f) zd-nm<)H7yYT!x^3x4aL>wH2(8sCJlIP3(rk_7OzeN(u;Pf(1L$_Hn*AfsHT$uR`)> z)v2L?RI>q+KK^!Fg9jh?^yJ=r*U7HMTvb`Y^=2A(5&)pq+KNPt7+$JIoWbFUX31#r zyBXIdF79Xvmv~K4AA+p6EICh`r%6;qmWnxY?U#>?t{IzUqA$;W`vIpY;GBI=#nL}X zo(CwhUth!YGk2B=OLe2S$$5LC{3%f6crUT~!8U=V0Gy(EVBrulT%T?PQE%%PCHNG5 zQ!inu+uY{BsFvy>!t8^_{;@UrX>5q%3oXFkG8+)<4@)+;yf0cZ9P~`=n*HwY4w)Xn z;Rvz?;yUe?D~PxtG>{YL434aWf^p#OK2j#JzAhKTiGk~9Qy;GuTdfQiUjO4&t$io2 z7T2fxKZ<-Qc+U;s#qA}x5o`^_j%=sK%oX}9gDUDjk9-gI9Nz--rJ6!mUtK(7-fcVR z3Jtg2EanqO$Jt?}xRY{9c4^<)YF3%_2kGsu>Q!d6756&MSOfMG-w66X;JP$OytYuh z@fnvEAyiurW)4c{EXn9bnl$;1ZXFyD3=*1f$><)q4=fx5&||hi~@8< zWj_%*){85PACk@@urS`B)6*CxK{?!uW^P(TzdM5|F*$n=&bMG_jegs;=z~E(ME%zD ziZ12D&H~AnvOTl|^^PNlFnT(grPg5np@7AF6*{&N^_G2SKX@wW>bkNcBL~x=(*v%U zk&_TcJ17wi_ihm;tUESBjkH||)OtI6)Uf~#mIF~XpSS}B3!}!=kPLYe zF-zUd+11iu_{IN-U9e%1?exVrfzms!E!XtU2@iuKVdHMjUp+~9p`ps1G3i-v<-Tdg zbT-G1D9w($FKMRQ;tKhZ?x(JGHpu>Cvkh;tK4J8afbKqMQ-sQ#=QSUuI;EH;fdoG8Y9_U6%EdH*McULW%-!-T|rm&%$@1+a#x) zSgj&PWxkGrq&qXk12y11pBrmEVx^v ztdjgGzIk>G)+N6=Z4{3MFjsGu?z?H02!se(8bQ7Hi7>HpR?djDb|fl-zmiQMPA_nX zkkZLARWmazv@k0X5A(Lmn{KGoS>F{om%8~Re6n;29cXyU%Cgnc1Q@55FI&Z@?>W~+ zR~uXWgxiRfY#o`iUpPS~g1iTY`F;=V{?ppTo%w1QFeqMZdTxXAMH!W4k()GFMK?Ji6BS!4-c&VM5VtRg(2`2 zFE#+9PY)hcLQvO`Zu%Ck`_G}Gh09aXM2sei0HU&@ys)`jjw6{0T__~6 zuM62W#ra<3x6-*u#;K&EQb$8Fy5W*h-jrF4;h5nBOO(T&#j-*jF370RwS1^Sl1Gqn z6^-}r3n6|F<)@ADMiHCAS(rxK&YYW;9d2`azyS{t7Y7S@<}UxYs%p!Th;*_|87lYYOy5} zZ~g4CE!!))Gwk+L{FNcqjDqmvJ#O!+a%7cfC)ez3{_O-NjC6rL1~8gN&XUr(!u(nw z#?|O+YcoW*G~DS+3YL%M{wBhSJ>ufnI5PQlimeJ~zv<%oX2Q=+RxvTO9!rz1 zSm9683xjno7BD!>{dD}8Fn!)s?+R&@#l1w_sBy4ak*U`+cO1p%h z%nhHzV_0nJU5(aJGKh5(?H8Mk6B#ecv|c7(8K^*99QdVL?#KF&@p!JoB8zo63V{n^ zvfyRQoXX$}qq?Ewjp9VX-_4?k)?|JktrXZQ#VL`6A7Lv@-O~(w3P?>`+k{?xgqR=7 z$4H_tgv%Ao)WNOr@4Llx)?Ux{!X33GKuJooO-f7N_j^Wt7ir&>IdQANZYhgPu*q!) znP)#3L~ta(jvMTxguxZUyGgJ-5~a6B?{BKIh_{OZp*2ZnoBtl)hx>sGM1UqNS_6D= z6pMkAE(MjDG^nL|qf+Y|DP8~crpbIb&Hb5K$25NW8FQ&c;_S``y-&y>pki+(N@sMH z+``7nfVq`o>a@KF(0`l3?u-&OK&C|&#ciETkF*A(lZpNv!1&I_k{zHi3uRbVXn=#* zk++?xW(Fu(`>`CSs?&JCzW5xlr50ag9w%R~*A9{>N9(ayI&1m-Uh+=&9#hVJ1%AW9XPzV0z;!?_50o4r8hoThHf^4pDtf7Or-k<>q*U}~4jjh61_!}Uuc?d8vPEla)x{&r7Vh(8En41ULV{MOJHHhb>L8Q@yb;3YVz)Coejx?3*I4@TA8gm^kGW2YLT|dJh3OXUPm!0XK#*aRlFN z2?gkk{c@FQQ*Ir#1yH(vzM1+{E3;KOb2IKCvso4Lg~dk>iWP>8u-a7Jm%~9Xy7|uc zV@DZX8^bsh-Mhlt54bPKQXgHXFyH`;h|A&4Jm|Geo50bpcU_bS1S_Qv=zx$L$?p1Z zS;_X0prMVKzr3$G#mJV_xD{~wwE<+G89(E_T@U~kWHh{5yF0sB6sD%21JI<0@qF^H zsZh78fIz<2KqCjsBIv0z5=HzR<%vVo(jkFVFX84UERd zOR4g+=2z)I;DxC{4Zn~F@~T9BSG?Q#Oa9g|jSs2w997f+9m~Q#t7Lo(3nc=;Quxh^ zP{H+=Wg;(ol<5K3H=x!yEwv+a?K5$n(x6C?Q3>tN=qF9j=DxqgofH7Lii;swBWFkq zof^rYpiW>DleCR~tz8F5v7C(>rg!D~lFrcUjH?H}wgKgx}ge@5vJEB2UbnXQv zy7xxn^c@!ro?odc%l2OFY%Eev86>d|R};~TE7*MwRbJ!ZP%`WZGemKFglJj6ACB=E z1Riy|4r$oRX^7T<7jc3vBccgvi+WeIW|H{XHNy9G+WKZ zz`ALa&g3m30$W~iExi}8^Jq)5+{+yUi0ih36+AG=xJXuoOQ>6zims+*ZMm;qBvj!7 z(ytfMAZt{({ILC$ke3hxZF2v1qC}Yo1^-v#C*7m%7fp6`6&>qYdr0Ph3b&f*yAGqd zbjROL?7pe(ZbnlroiiBxv>(&&=;Ux985Y0A?v78wO7v;Jb!ydXA3K0bz3-7`F?bjb(2 z^{O2|B$aYQu$U27xM(d*h1-2-`&m1w?Uod&e{@!Zu5p15R(AQXlZ$5~FL$*OQm40x z;LF9>FMc$wT;ijM0=8F@@KRZ^KTR0blY$dXA)fZ7C za0h;}9>m2!0nH0Z2K(m6((BvCCLurHLOkC+n=d1Q7}1^Y+fM?$+)Mm-E`C~em}FBi z+>=x01aOp=FZqDqBW{zDLtZ9?n(Q!dHR5ks013nf6sEy9=&GkwFF)79bes zafGTPu)M~7w2ah=P`l)3gm4$OvKi&WV*6vna-`+1$cVU!!FYB*vQ?<;vr_1~G`(-m z5g6pfuf+wWA2zDP09gh>bZrO)w@xJOe(C-2r{ul=wV~6zLAaqAW*6D=iSA#FH(?2u zcnBHKkdhARSV8AShTW;@?WAc6o;R1bEEuHFr{t7rJ$t8nrif@;us55lE^k`F_6(Zv z+-H21jOr~?igUT)m&9t&;cvdRVmuxCWvjV~ z5DlckT&eHilZiq;k&A!0Sr zOby{DEEhhZ&vwbO;nq^e*}`7a&Z*}&uVIowkPQlRp)m^JzTRbGbAx&E6tG54HGy^bP8fF>s5d0F)|6{ms1EqylXo_ zdgI$4^iT5+tjjT<$$K&0rM>q6fpCDPa4L_-L(9{7Q2?mGsY8=CfQa4)Cul?IdH5~deb7gcxuu@n;QiO` zi8ni!7M*R@0dr!?P{xzi@tp&U)9d3HSs)rgHa<7S#R7%O>&HsZ(vLwBo>PD^9tmc= zEqJ0wfW_#V7zN(6C>$i_->h$e54iA5`P7!(9nEx~^&b`Mb@oaDZJcOCy2|!J^x=!N zJ?UOVbpjA{LtW4#pRr_(-kWxH-!t6!?{3z60D4mr-h8!HjCkU=Xc1y7XLD+XqjT{L zX|1%~e?ox31Tt6G_vnAel#jB2eWwTyiFj=F%^=L;-d`?Ef)am1s1zt{pH+k7^oU}M zLn0-z3BTxJ^npp{a3<{jubn^YR$VJA<+h-;`qRjUFnb#sc2xz&fOj z!i4{kvi<|4+Ki{ezj{(Vir7Jf0LjDGC_63JD9XnzquU*$0zO;q$SEnR@aa^2b<#G-=zv!m0`E;#&Sr3 z4eR+HYB<}!7|dy?KSD=f0LaJkwMD`zP_9Ay6L%~@0K72x`-&(kAjCQRo|HT3TuT3f zcr?%qgZ01_cR+L?^7PIpBJM3R# zc(X@E5a7+f77ZzQf*m~*fkth{b&e9$&cd~S!@uLM{_eNpes{zx5{0_`oaSJ05-LV= zhB1T?NVy}tFg;fq9;lWxLZoCBr7ljg@}7iq%A;Qh<{mik_9ZbvT1cGUTbr*j_N;MT zUfqKlhb@S_S+C|ZfbfYUN=)qqTFl5vZ3Gf)ybijb+Hjd4`!1F5xZd`M40TZoMM9C! zMfx#&RxA`RpMjR$i>=z0gOwyngX5F6-Jv&VHaoZH`w)(YO0y3jra!5F*(%<_lFC7@ z!H3xOjd=C>+Ts~E)$J5r0$gw#OHxXYoVLu%KJr;2Rw&jWjtjmD_37{IdC z+wVaeeA!j#KNXNDAIpWoMC5CeiFF!#%2Psowb=zzFWZJjRa_d}RM{|PGMcOTUkLDg z^FZ&{&12;<-B%Z0pdpPF)TV}}-Y)Zi+Y*YI&cnW-2ir%GxQqtqUu!;6WkE89d|F(% zeE2$jSns9{%FujfJ7HDQv`SZ6i)0kWvyzF0ooZrVE=+O93^jj-X=Zq8hzy3&x<|jh zIQC}nWeL^&q0Wuu8h~ZgKIHj*I!Y#_ZYTpo1hz^px(~g`Z<3)LM4-^Q*RwuGs3}&s z{WWwjY3dvKD7M3RI~8CskkhRnG2#=McG`@Mpnq(^dng9`=w?dhzl)lx&0Ad#=4ilP zi|Atj+RTQT4~(Dz_m#=g(z|%}VaTjSsUCiVrlB9PPSL&!Um;KWPa^q3#NFT3YE`Ia>z)P8go<*aPvaWvzek-g;`QrzzK zQ91%S3CWK1GYYX==+@%jo?5O3$vmqA-O1xS_CQOaYtQ~p>!)-p6xMxFVu7pm+&JBJ z&1yW&TS9m&qZaWWcfq_!l|JncKZt>o1Iu<{t+nY78WQt>A*@HWcoqxo+ZfPj{o%nx zMQ4(Q0%ewO%zA?AKCX+aVEUKO@W7{6_pYLHj<*)0SAg?)M?HFg&NPZ}Bc*Ki&%wqD zuY!5Oc-E4+W2cVFo|+9oi5*S$OgI+A&1>(6Br=@qoLuh8PN!HPz6ASqb$idDvFcab z(V8P|sOEbMqVg*rWgB#JSN<9aok{IKH%ev+8=QaXO!L`dPxNAT9JBgeWO%Sh=X*Y4 zWl?`4O*~AoPV?$FIpPK!5E9w$TR4zVpm2#G+k*ALJk99V>S(MSr#7LDC^nZo&#E7Of zTm9XM6&F7!jQ!L$isznPT;%n)$Z51+jK+QZfDZmr0ocYJ+AGoqHy&?C{EI3+3&pu; zs`L5qfe?nU?OkM+<7Cm91bh!ENPU)Ahqt2pV5Pv&{#j#Bpld%nXiu%SAjB?Jt zP3Zq5;7t}RctTxcNB*FwB$-X64cm38Am?N1$Tg&t$f~`k^KFQtT)h;|b@^NKFV_O; z<05nX$s~oJXyXTv4y~7mvK1gOOuTGUTv@pK%h^}@Rw zdtqQ9?v@A>5HeTAe94CjTcEpsrf?scKYNEl@6yU;RqC31-G{esyA^-utdjXMvoQDG z-vBj^Ke6qE(qiD=vK2ym%uQqL*Qp~6f*+aq*iR{#iJik}NdaLBZ%A9+z7~;${MttwsQ&!&%UDkYbcg6m7`9hl`r_VO#1Rh**eZYCvXJos9ypXW8k!)AyofZV=-ux)*Ln!#7KFW=~um7=AMu@fIyHB;Ta zpShpVoJ;x@;N+D>3onfl#eKeh!rU z!Wf7|EHhi{+L=oid0lSj5N91KQM0E#vhsZY0PTLjJu9@OZHz!M`L)~F@^cW!g&Sg* z2%#;S2Juy46)b@=rUn|nZO;l0pfUOKev==!Ro%LI%?O~4pG>38h7~fWcK5%#5BORi zeCYH={utiSw%CVdyPt^-;nFf(dzu3ADrT>g@9&9ejLr}D$^6^K5NE$Rcpv?$U?6o ze)LDDq2p&GI_Pjn(U#DS3ii9n1#+KR zVZTiY1NyG2`5x9j!}^6KECrphaLKZ9o)BPx8fO?!bJmO-;|4tQ0z1cTF&N#$Ou)@@ zYJ$P1+4>WEt|nak6E4lrmT>P>BP#8Wy%+uoVb1cmZ8RVtZr6Matxu+`3u%fECQrUJ zDV*Z~1{eI0AG@rum^wSf!K;*Zw09$X*`v&1|4W!gz|!n{I-jY&*+@XO!90Eq{vVb6 zRNZrif#^>xdz(MiW7GOyrgcdG;nweKCE{*M-tc4fWDdPtkd8FY^6!? zRC>k_fUzSNCvzT;T?OJ>>2189zkRvjH#B_r3O@0Ucn?0%=R)w=hFYtn9UVLJWQ$IS zyXWTaza!;=rC|z@ewP_Z(NvvLuKb4^Zgx~9(vQy_g`;C8_s6x8dd5v43-X+bJuRI^ zaF+3U8dbF$ENaLdQyI5bvka=$>utuG z;*dI351o3RhMq4AOQUKdhfpz3`eLqwH;0m+8FjQo|eXsDb`&PlkS&OCtfq|L<#`(b6x8EbCFP-;C znf@or`r0geV^L?@RCQmLT_(C{ZkV7RvIm`d2WkW8W&V51pvH)-G=n*wC%sDBxp``v zNS2@O(*_Zr@L3XQ_AI?rUjqq_J~#}REE-Q9HnZE5G_)7l_hl5YAMkSf*Ei`&kgCaL zv+`SA4NfOvhfh%$@}7x`X!LnXwwn6;yy_}5Sdby z4DzW}G*4}Z0Reul;$K?}QGxXDMfx6=I{sn-;+o(N*?^16w?h#V=%+hBsPgM)x;0E^ zzD%NxY^%~w1-hvit#g>S*;GpdZtI}dK z{N=4JSzjub!{nGapp#UZ%~WWF6}Cqwmkc`9!Xg0u!OU@05+^#0`unB0uAcC*cr(GH zKHi!xz{)jNWx?-y%u+{&F;HK2hvx4#4Xw8sJ1$p6GU;ed7s6XjbGh@gAj9G}YFx*o zC8h0UZik7V)mDG2$e3fK%c7(G^EfQ_MWqpOvQH5cEeYmY2FkS;1iq9{&Pv#M$O~nO zCg3OQHT2mM1O3cP9mO^6=nALU#YOu{8*s>0fe6tqhxayu!@J^NU5ujCC1EmO+aP2l z8JPq{LDCWLnfMpivS}XpBMM+4!f$m*G=l|{(Jzvl{JpBEh#lLU^$({nZgiWve?+FuY_Jv zC8x3{=3>tOUuUNMOrD7jIA8CGpeuxiv8U&(!MeCah01rP+bH1^Ec}9K$FTn>-n}Z4 zJE$rsC5(9${YJT(IZ&5PsEgvs^Jjsi1HQo@+?fyRz1N5-*v&QveABx>U>x2M{wrh@ zE%>y&TcvYXUX;A~G~E#-&E@I1x)Bu@5$oE-OolIfDVpCt??unbCAurOlUB{IXiJzx zXy(h|_;bUcWBz})1RU?%U)_Jte^H=lZ|^aDJWNpQs#*Hk6E{^dR;TMMuu=A`8CE9^ zdb{xBcX>Q`4jo8w;lB~epMhbYxn+caBZB*qEt;$Q3_Q!9bFt&nSOeou>m1RjtPm(=^9 zE1`nTZS`4lD$VE4-k0qC*+lN?Ms%2ElSACM^)^rojsk6{GTBz<827Dx$EIl^xpi6N SnZSv_J0ivHJ2nid-gtx=H{vZ0`Sju<@~ph)wvS@p@O*BI~ZF!-d8~+ zO8#l`7V@X?8KQXK^S`e9p7#{#bM*(f^>_c*^%e0iBQB7xW%=6TnWBR^)W*_S;}3hN zG?aslgN==sjSI@40ylLwv9vRXO4_+tI@sIU!tIZkUk{4O<%-0Bs^7MH5J*2DXtjWJ^NtB{6q(k)!%7B0bg*Mz{?my=}N+ZN{XRxw2D8O zl?k}NaZ0MH$*Y5xv%aPaeA>l%+QmydF;Mrjm-gpC-I+lB-+@LXLI0$4ujSwO>Ce=m z5Fqn0EMb)~`w?084_G#0Ku`$+V0y0-D0=K8#@HO`d^4*u%al5c;yT-bD&~PItUpaa zJR#kW2FSEb&i{XsnRWvFe@`M7eN2D|sLS3r6uoa~B~@s99hg!7Xt)mmZ7QO|-0i^i z(vhpzQ21tSibDFwNrDm``WXvAulP^H9np^9QGWZ6G;&O#j86xqZyYSD zoPz3V>Y6UL+8>?g>jU*?oR_D)mZu{O9tQn)VEvcp0HD(Z{PD?n<8b!gRDT6A^uGrF zm*>18?2V!L8bd2vMJqqXJoJ-G@r3Iefuu5*yeg6YHzMb8Vz?@g{x~;$Tpd2?0-vpe z>(+Z|*Zt!#f8Azz+W9{`=iWsg!6H|sVv+vsIhhQRKlmaaOUKe`$I`ncn1>`6CZ%r| zW@G#}&#?$CNDM6q4&4lnWC%&H3`s6($hPS(+im<`(|>u+O9xsofu1AjK>Ht_)6PyI z4ti4+v;4{5ISPIQ73w7U@IMUz0PWFOvVYbQWfhi574AtD7Iihj|Jh?e>Li!^I2Wkc z4*)<40FOZ<2jGS}M2p!8YN4@j&?0BSP_n*|1Qg(MV!^N%uzuuEIbh zA?F`K#~TU7?#$PdUgtvtmpvpv8326Q``EvbI1EdF&6F5sM^B6IgFVTM8aNg&~5 zq|3)QSxwCulm40;Pa+$dmWyu^QVMngP{AK&)@U>lM1&9kjImTO7z5)~h8Z`aRr=Z2 zDO6-&1*xjTFf_`5es+{Je_X~q3e{o8UW$N0(e+gSQBei}fVM-xpBMv|sU(2=1o-}% zb|j8VmXJ=CKyri-K20D${ef$Ui(6SueSkoHQcZoHSYEx3PM$zs{!~q!KvJDZeLO*4 zz1DVw3qGr+zDTS-SqGmd_SQ^rUgnh725+Z8s`GS$m%)^+e&Ro@tEp?dz_ov?YfgE|f>c%cSt51yI`!EzTlEC56(@ClP5A6@b!}pA-RZ!UUtTLD z_nfCEok6P66x^uZd6~g7+0rWeQ&BQQQBh%0oo!KBsc!aGQFc*(m3dKFNq<#&ahc67 zNG- zn`b`bKz{K~V_{>X-EQNX!8%)toT8mprh(3i{;I>>M%Ef<8fA6o#d!TyO>iEz25-}K ze+O3C^0$><^@9w?&S4|=6b)dvYCCeUuIJ>bun}Kmo_R7j(xTFoqT<~uyQf_xyJE`f zUiu&4%e?y95ABwDBXy@EvWs>anFd-xLF@}X_7qKQ6#DZ#AR(=)6w}M3?>G90^?c8p ztLLk~oO8;t(0ijmY(Va@LC`OfMe`KFmk$D<&}&pBI<9%o@v5X~4{FshaVb6q4 zIGzbE$7ZhSurzvJ%{>8RwV9cVBPNrVODHSDqA>^pIcH2%sxTK{Rl2YiWR;goEGxra zN2qJZK1Bic$i>%{X6zwUwPoo^e%u2ES$(}1{zt}oVm!zy$v;*`ru0Ls%3x~TJuCl6 z8EMA4SQ$BRR5CJ^fhsyS>{F>KHr(K-KvuCbHY`0lx^lJ7xH_1BMpas?VQp2~0}7|h zBaxM^gRm!s4sv3QjOv4; zXmqv1Fh<7iDHs}E99xRY;ANv0`%e@D7fyRkmiy2 zkCNmPn&3XlBLVG_M`!}-mc$W9jEU4_Sd@V=KuLy)F%VZqnl29vt}(#46v1XRUW)=8 z(BE~$5X%^gJqYTg#=(RaASd&r&=1sTsWS+LyzW6AtJ0bo5wz04DGpgW5DI3cUlMhm z0>BG1?sL_EZ)F?J_{F-|_oedqyh zviI>vI7k3*dq4tglj1&0b&ULXVDj%0`u}GVg2~x=~|b9ko(UJ5NX3e1@2JEHD2;Dl3_C6&k+{~4D`AZ!4acS1_Uu~ zi_Zsk(s(2IhA-B5o+xI`VrU8R(u|L|re=tx1ZIOA878(f|5LNdW zp$P!Z@V71?`oHRMpKtz!76_=#zwP3c#Qs1FEeot;qy$06@TWuvmeBtOaDTuUfDeXp z@gV2Fb@BM1j6dOByvjWyLDk$7{y_Cl37zI%U4I(W{Ox-m3xW_uykCVMZ_(!TKeFLk z=|ohr=#v3_u>j!BjMXmVR3EfEH6TGYAld=f_!*u`DC}h=T#B@tWHO#Tk5E;`dMnj9 zTv;*AM25YqBwj;?A?DqfLrJa6Aow&3MFZGyX*m5vAcQ1+pr8OGMj*4IeUx1f326;I70)VNHoFS z5W;9*e*!z#AJ~eYJJ6p?=HdK(_=W&f01%4}ee@_97Ksz}AR0FYFBU(JARdG-0DOn| zJ^*}ak%NPS%_4KURuO3>OapSitRd0;A>U_cXn!A7kp7haKAell|0Ul)oZpKnEpT-w zXJPK`Y^<-Z?QAM->8Nd=n_k^ze)g1;@A3|UM0sQHn*v>!jHhg;yd}nX5)qOgzTaq4 zGM^lpaZi@jpa_K;jL zn@|+y_q6gfHF4ulh);5j3djtI>KNFHm6tPS7%hc3MVXNgrZ<~G?AOt|QdN|vwzl4W zPQuwsDD!py4oQ~R`Enf9nN-a7X?}AgnvNA`ph#6Ap2VPeK~bmkdupZbW6y2(eb=H? zeVDK$v%`yUGEJqt;7KTFz~Z|fD*NUY^B<(^Ty{QapcO-}BfZI%4I7UfFKACSb?ANU z>n(H;Tj6RmbQ~FmKx*ZR3_Df@pasdB^iJoZDg-Emj=Ul|5J{(QrkTs{Mi-A^^JcLY zpKm;m%1XO(i676g^?n%5$q9Fw#`b>`f!AhToTFBR!+XKsqqnIq<)NXcdaM?$8&xfp zyL4vnXHM0n7{P=quub}n*bBafgn~?`r?yeUaf?iI6ArNzy$E#(Fov-sJ$^iCgvFOn z+_$@w<5Rz4sF0VsxN8hwW1g9c5aM|_*1n+Y#_=O~htd2YWHy_<7KO@;_Buu&Weebg zlSQM^_s9qcKj)!EoJlLyWXu@;6+7K_-Vi$7+oW+-Gc@xlM1RV$RpSSjo7=;g9%=HZ z^Hz0cK=9ctvfd$enPEGca0659C5iI$Mt`m(kC{C@5BP)C=cN&E^7TyQ$FgxSdm^@v zIPL8s{4#hfWe_Mnzepp=FVJ7fx)wRaK@>oUVy6lA{b-tMcK3;*acw*_Xba8Fpc-FZ z_iN}axBHv3cty(7>nBQ0J^OkP$Ss_9k#r0R@jKyQ=Nemn$VWw~UjYb5dxpBdGWw+6t$27{MQBT41OjXg@-ieSqvFBcmgUC#&7ZqXeukRfOL4x z7amiBaP-feL@AV+mQRmMj!F!H^6SsHYga#eMhs9j6CymO5LY}nDv3<|H+iB^r&X(3 zgjn$ep_L4=R(Gim)eeKQc6gG4L5lL2?>iicoawWJt}cDnC0IRX84|og{JViRIr1_Y zMz+4Yr-F4h&eLe~msbjWaTFBqC?+3E_7O9Ki&MjDFmWkym+ z$sDF44QjTlJsdYD0^_}(hbFG_-I#@-%4?z+531L7i5&Fjvln|w9`?QWDjt{J;7LGS zbyrWs**SVD5=Wk=8V`pc+{WRVCfH4z=zW(p8Ap{jrACOuBPpealtQj zjU=%?<p+hb3YG$2G7_@a3ihyogkD+>+}{{4{0`>VbrL^J~V@#t$)0xyhncWQ&t)L*CvQ z_%Bo=>|*Jl-lqT4}4N6#fg#|3f^)pqE& zB0Ub`Qm#g%+rwEAM;7BPpQ%VW_e`rFv1$r5I-uc6f8vTyvj?>Qw z%`O#DTWsG&nM>r1;jL`#e3;M2Xj<*g$9BdQXs_uON7o@F55LJ+*~XQOGdd?u!>lrm zV@rKPWcjZy z+IB-}-Tp^n%vqkW_lBa{AW^D4I@v=)vI(moHd3ADQ9v|(ATKb%l{5<_Dy5cUTB5vhO{6?5i zwkxt8PnO(|9X^YX%IK^(CZ%C+_^%!$CkN3h-+3`TVneuvBmIyHkNb)6U5orN;+A~! zR!Xz_JBVlS!zDW2#aDN6_ATy}mS^VZ)k!1TKTd5;iZ`k@$`L}*fmSD{8UsohO(HIu8bgMcDn_!~|~-=_KYhodXg+iM@FhQ-L>pFo>t9-qz5# znV;?VqxpFjXQ{|wJohzj8{#uXOssC_JV#MMc5lt5%3X|osk!|d<58 zZ$s5{5wf4Is_E(VwQVFiFLAHrG<@_3fABxc5HxSIv@LJaOwZSj%`f`V^eNoTW(%;s zQNjj<%xG6h<5+;#uNoiw3JD*}yfmLdK%>S-9n|jaZ{&H^bgOC_T3W9ttx<2}*}!TO z(Z;t@-@u70R`k2g-*75C{e+6cLXN-LxXlaSJJ{3>AJ>6*@`MD1+a|3{0dXGdW?0Rs z)l1MbmaTpuMm7_zer zE;WLSOB&gB)$BcObd#Ds-YqZQ2KBNRI|z7KfP-FBjToY0qjB`AC4UOYT@Sm~S$lQ? zcC!W7ZUX|1MjsFT3hHt4=Gl_G*h?o9sdO@g%Xmk=G*=8X?T;aDcJ$E(H2*pxT^mzc zx~M^A=#FMU!cTf@k%EvvsS_L|oXE*}SHM0w<7ijSP3hBc(IBiLKn6fXV zJtoj$Rh>2dfUeE{CY9uk>cGZAVMxxz`LmXO2+%IPm`kRvD{@tnUgzyCVdC54j&aU; zu=i@*s*&h-iBI|(R&tf@x!H`(LILhl}0!A$@Q7loVan0c_JgS<>ddZa`=i zSL59C#g4?KP-!A(5xJ7Qm3KOH1*7Ixo;42Ot^3z4^;ME^TmkC(hV1Z$P4gk+Ko{!o@@GjxM1heA?HAp$inT#3I2($OlvZ;N z#%KeMJa(@bK28gMBMoA#hxT1{;~mg+L;d$Yj#&4ujEYG$m>?fEreU~}$fS2u#~Aw` zj=-n+j%~j8`byG@q4&zP`C8$LBD#7EFnxB%l;RpVbIi?GL&M@p$q90GRLu*3+$o}*htD@5M7I&JoI_ihW zMG2M;`){-DlHhx)=9Uq_B{?2BV&ho(boq7*hv>sx*2&YcIoGGU_bTz9txNamZ-x?fAV*&Lssw`2I2YLW*jo%Ug~AC<7Rk8dMIGh=%As;DjU~ z59aGtiQ?&di+^J7m^Ttq+j%iEK%Dup42b2;f>3WUh?uu%qXLQ7ju_d88Kt}ZQN%Uo z)VyAocnNnc8adkTmRfY;$JrCrvxmoTBYx$)*<5ssaJt-Xw!qNQFW=1Y;cX$45>RlA zW3_ssZC?0dtO$GxQmg$E!)!8uk)q%~IvF1(gKMv^k5MqOBAJ@yP@(pWQ?aManyHzC z(e)=q9o6!M6|*Ul*6*Wu&u%pXqR~iVxz%kn>09(@H+%*IF@XLTDFlYOu&{5~9H?y1 z9l7C2gcb1qfy2mLiPVjk^Q6GBO9H8DS=D=c1xf5&Dq{uV&-#{=iEbXk zd*-V|PBap)CF=Wz+g`(05CN>?Rsq9IV+k3T5NxQwsJzJjg-Pu84)*1;Rsmk@d4jMW z;u}YbEaWS5zvK)Q)8jI$P~ItlxS+tyjXg3FQ{N4Vx7o&un77&AKi%v;S%>S)^Y(fe z9Z@3K-1J|G#GKMR|INIp6Ddx2J(g2W?|5~49=|XI|Vw`Iz^ zsFge>QNZ76b?@s73Wb~BM+M>ur@|@qu6A&gAnR^RC*pc53(HHELNwIi>|QQ!=NLgl zp6{Uo>h+Ogv}=XWN0X)ADUw*RwY@y2+kTK&F8+=bMv03ShVD0{-7Q-YE1FM45%BebT`daR37ogD9iOb0zK@Im zkD*Va@7h=M^%EEH{fA?Xbjjl;`4#Xh0kq7uPwRU+vX$R^)=tft4EWL;we(dts;7TO zZFpAO+g|Ey9DCls%llaB0n!JmNRQCfyh;lda#C~SKO$-;ziZRZ^qTT< ztgg>o=cs$ngn}3V5wDO^DvM0zG>fLc&@EXD6e<2%+=V7)8C_dn9UV1%Io@9cUtO_4g3jvWkr+xGszIs?DUz`k(| zkkg>wN=7Upz;y*qiPBsvl#mlEs!=`yfK9WoaD~r}$nE$@F*W_nNO@h2y6(-~2zDv! zRC>-u59+{mo-A#3Azh3Wc2p@__1l|+I`K66$s%=0iuVW*-x?tU0oRPjhpN98*hP}*V$y@L` zf1|fvWC`QaHbgKoYspZtOcqsEIz(yp%ruDiiO4!L97e_f+#E_DV<>5239ta++dJQV zF%fwUIufa#MHp3~?$eD9$RQz);JgSr6Ry^f?s|!yv=#O}&)I_Btx$l)Iu~V*A7Saq zz|jScD=VA^8(NATeAxad4oK?ip2!nJQ7F%BOdVSgv6|k0Diei%1ic{2ANe7DSuH>Z z2=QP=M3EvtydW4HJy8urwRo}`gmMJ{R6ij{Erf*7UKK2nyAbKcgx?1~oOk<&9R~6n z@($7{bq09FJlfh42;+^O!n0L4!4P$h05s)(LbJhTJYT?$fNK@JmYH% zDo|~oqvcWXxtqE#c$7C&d-q|)wRYWsLr9(lSSS=n{27+XWvcz%eb&?`9sh8o z9s9KU<>Jv(3_sf~F^Z7ML=#|Da_*ya4Rgem#`|HPQvRwHt5nrvcYm^zWaPf*e#aFg zd_8%{W*_!@xkz3XiSjk{!7m``JQ8!=;mB6apM!Q!ElH6LY5X9Wvr4uzzF!{rPQz;0 z+ja5*g{0%_~q@#QAbi&Mp)iz#z;gJ}Wre*BGV0}JsBFAB1^S9@rC)@o!TLL*t2 zd=Q^~N^J|azi2eW;8UU$_gZ)9crF6L#05He15zHS)nbI>1sU> zg(qJWN5_bIQM{qBmX{ziHm%K=@}ivK1cwX9Eoob;@SINr#YL9ZOG;imhB9r{SYEU{ zJ(KZ4KeC-3AtORM4=wnS0&*2On4nd^l*SA*_&3vlp zUP$|L-+4Lm0^)i~d!M89ZX0Eye;ivwTICUely8Om4Ve)h$bqi(GB^T(OMGDP1Zw_>C9<&BPonL}vrGQ93+noiue9w}bC%~xC-D_z!* z+F3nLT%v_-y>s7Eu_KG+Hh*fXs*vc_B%wQ2ju`i&Y`@hx_DegjrLG@Gq!Z8%8BL6G z9Tgtm-JOlbIXG4(fB9p*7#nxjvSWq#l`q^w$4rv9N0H{ejwcxl0)9T0Au_~69RIeF z`dt_feZ|P5mABw2^q4zpBEpQ{78^pVpOux0%~-J7{%G!3|D+|j+IRdQ*~eN#v!?FH zm5!>S{$Fe6vH({^?hczI1YX4-CO5Y+pD(KelihxP9_qIr@m}HG=(okPUO0ZF#l3~ZRwWvq_yZWQibX%?x@HG=P@k0zeQFyveIJFS z&)Q|YUrkClnLa(-)@ivuyD3OmsYky*Bk{Qd4CkDYKs9Dg}D_?Ey;r%%X!z zWk6_QHqHKe)~B|_-~Lw|wZYYiMOl!6&_NJv*@-r#LcBP1gi%dW6%7HvEvPwc^)>$y zCPPxJonREl5YAZ&LDUy5VC~g8qN&I-N=g{k5~#(cK~h}iC(M{R_|&r_URxXr3qzKn z_BVU7tw1|3|Sq-=NnL(F4Q-h52oo@XNRG}_t#`CVuaZ`n;>6K?}s z>RGvb(Uk9(J+l+PNi(&)%f_83=0IaUUqt9dQ#y|twV}bK-KT6b<9%!w8carHJ?((9F@dUFg%!@pr0 zTDd+|e+W3mpdne|NXv>({@!_=UdTGp$&bUGqu(RO#rD3C2jKub_)xpy>88>DWK4wB zn>3!X_(hr1_bY8XrV^J~9$>aaF3=sZ{cwZ&n11Js}EqSu@x@r(^?B7K8nbHHp z2z_*K?|Oa4n<=hG_9IFUb(iLA2MfwMlhY70WI>;*aHER+Tzg$awe*Ga)P>wHOClVz zncPh(dr~P6u~x9Qi?+5Ni~q#^8OO__gVq!+OLDHRdEF)zfZXW3;;sX@z5b;m$=*#t2&VByHk?*y_q3QvjGM%7#lE&Ccs*cbt189CtTP zY=tM)8ilM0mMb-S0f^u$Py+_7qg_W=1VM%o5uOh&gDzK6Gu74+zsdH3Kf?D+_!gK$ z(Ss0j3?82*ZLq%MZwi@L(V5hm2vZhnefg@T9Hri*VIA#k($_2ktA8fMCn1_!Ir zbnSYbS`O-|Uhc8`I)j4U<>v~~;hsU(n&&8YQ ze*5Fs{3K%6bV1a_K_slQKfl1%2^AS=uoHXtTjrZ5nkDiMVk$nvK_yqf!l&i;m%&md zP03L0%urE1fuaehTS#+9(;7yB=TqxtuCKQU9}}}~j0D?w9sLgVV=`<}zkkzAXV!|w zoKmQ~?uYtJeWga!_m`fSHcPSHQ70nrP5f@HwygDGTf0av>ZE#ti{Gj{&JI7an&6cg z5#+uok~sqh@V8QpHoJeF>)pTNcQohj;o$TYWz7m z5ntug?E4HGZ*aWkpg%74Mt;+7hL`wSZ@JdR>18PciF5%4gTt8GVfU8xBGQz9(g4dm zeGW&8htTxhwYY&(ajwUeOzMUw6+fCso(kROtdRxQ&j#v#4Wb}*bRHnx3~4)f5T_K8 z@%1HPoZVxRUM}`q3JbI@jP_WcGl3?{mUZi^#e@gHrZA7sZcb{hYGbB<36KdovF1Ih z;9`A~+pJnf(0XwckRv4NlRv}Sxx0xzGq@JQ!{G1f%OFIF%K78Xp5qSJ9CDh6J#McE znjC+O;Y38wCK=BR;&2vj>@I|U<0VVKMql;5T+8xi2$n*m2KSjsY6a`^MOs6bJ0|S` zFpp}-+OOAKkuw(=X8d%a*G^!`dy~o{Q=Cuz^#(JAU&;Gqcj`;Y5{PQwSZJ-q(=&R;8Y&M!P*c5HvqaitXw7 z93YafvegM8i~vf07A-R8x5>L>RL&U4n;fM$s6^haS;&4%w+C6(ww`i%Xndq3(@iw< zUO6JFbFsFiB`!e54b?FaTQOgF52|rErN{-Q;GYE?S?U>Zhg*A?) zK*4uRK~rev{@`_$dyFcxgS{6#kZ3mr5>flE^dkdR2-(IA?pA-R+Kuexz4}V`yBB+G zNE8(%8s68_QKX$6<*y+bGA|pSj8_1AMU62d#?_&59;D34lJ^gYvstQAiX=#HOP{-L(+g7*1y5M*Zu;x70&4Q zcP8)kw-7XZ)74~oV87y#p{NEoO&P**RjJgi4L9ZLUtMS7{D(Oii2T?0nMrdu5o7vy zp8H`8mvTzJc$iYD(%&NZJ)J>v$ zJ@K^_l}4k^`1|Yf7eyW{8LM&`%B%!H^8yW9(ND|@irMRYYG$_Ip^;$?x(*wIV^ErJ zdWNU9E*}%tZ~X+tKJuu{mY;?#a&b_|vA!p5G(z--t96s6u%eL!t*WqE80tY9w=Q5K zWGEF6arCeIy@w~3s;T`Imfr^b?o8l6G(X5)O4aE1#wauTAUQCyH$)Xw%e+ghx{%0= zi_^V_>FSQfU@Vlfrl7ZEPx?AXBDxfz1^yTphesg6(-4?jr<<|fIq_Yq1ZrpT6kpqS z)qBmR&be(&$T;E@j=D6zc*ft{&enG;ZPGyH{mk;26S0&?C7#rz)N3`?h^qSZk8eqJ z*pGNGe$^F1S+Rro9>N`WCb9o~4}lZ_euH#>-G2{p|DD9UEVw;t!{^TC>MB_(v$bx# zp$BY0fxV3!gOc>e2WtXRv@C!yzx(NV3G4L3aRr`{lO}53XZc!(cd1DqvclnJn6VcI zn)xs}8_V^l4-Ma@;bgtFnDL-!`V5UZ4IPdYn|zyjrF9dKi#XgHygrhH5@h^6`BC^$ zS>2x4oZaHil3xhmjzp^%t0pBf#6?C|HHi5unxq8FkWYC>#7>Q=+^uB)b*u2OZ) z8mmoyVzK-{fpjLVLgMhA#PnB-o}(%J;5)-FaPlPiOo#$MAw&yOByGBnuE-8h@;PiZ z?AN!DY;p+NahBcctj`nv%CNHHbX%=we+;%O5`(YILp3rR1w8)~l0TL*^G_oCh>o$t8$4nP}dpO(hbTbH=pN4ejfi5XJK^z41rS z;-PTqsgW-`T6|ObPOMWg+5=bA$h!S~MtI6QdQMrN#k|m;-t_^fU_APR?zIR4UmKeV zH9A|Q(THZGX%?_W&-tc}Rnt58=4!}iQ|>OJxST%Ec01)p+%AR?mNyZ}gkG0b<_N+90z5 zpZuoMW7-$S9nw71dq;!)?`@xubgay!@y9F_nyhsiU(Sp-Qm_=dPBO*4cvApRIQ~{I zd0sJ*wrx;n#fdm8r5If2fR(j=4ZZ7ob1oURF10UmtSL(T?_l80|>zD20uFR*0 zQW`SaGDhSR{l}~vym;geHezk?d7eLb6xBy;;bazoK%YroAl+IMGz`T&TzVy7Ie1b3 z1urh3w}#0FTQi3`x`~Wf!42LM+ravW4-c9;aS3~2io(Ly)YswJTKHP0viG1+tm!3V zbC@j^Bl5D%^UoWRM098}JwSd@=x)xObLxjl^j&(rP0#WQTd$hk4Z>R@pcNc4cP=vC zmj#|00pXcz5%RT?!)ilOKHobkZ->2sI~4r4!uhv1JC}adyY{??_=}phx6I3f&BN1; zdg2DBQ_*>u6cdx`Tb|V-MxiTN%K2OYZB#JRz4dNKs%6b37l(5M3-oZs_Q_nd7FenI za&~8sta||ZMUeeO#yFiqVkTa{%^gd@APN)Z1Kp(nHC literal 0 HcmV?d00001 diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/scalpel2.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/scalpel2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7335f3d9cefa069550ecbac001fea9e997b21f8e GIT binary patch literal 13098 zcmaia1zc3m*Y{mmU_n5nq|~KZdT9`l7M5-S3F!t&QDSKckyt`PLAsGf8l+QFLPA0b z1xZojz2NWvfBx_DzMtp0pV@KloSAdxobx?%&kU;D*k}V-z(3C)&%ceVj?ECrZHSkP zo4K9)Wfw%Q-YBNL23t<1(`tve7*2s6~2v}1U0dZg6tTvO}6S$nQL6tV<;8mq@G1t zGp@0(`>^QO^nWV+D?Q-gT4ZpkElFfxm+YS-@>1MDR)5uk187i9;C>vr(mV2jcXUG^ znbh|B0gIw&)UAsF0IzKxYlW)l5?Pv z@M;K%C+OvBfK0p8y#J?I8zfo%??uYCmmQD-ZQ1jfuIDk6ycScB8zRM(YdD?h; zgiac3Lt#qVl?NS%saHT>BKlu-Wxg6sbsttDOwIk<@*z#bD=i!Y`>4OB6L(WT0>{~n zrQ#LNJOJk!jHa#^G?0U>2uvDlO@q!~e*eIt&?J4hU33|o5iy(Q(133YwoWY5e+=PY z_WgJGNP&KP^ogoFBM9yngKJJspGTi?+v6p1LME~ok#qY+i~_1KSVN1NHP<8PN^>{> zgpgdJ_+Ql(l>eeQCq9zBpRH<;Z-Dc%D(M^++p6d!ktIZeDCQIdQT(E2{k40UsG>t| z&6FWWE=CK5$o(5ppi|+NvC_EIS3we%;?|GI2czOY9k<@2wBO?N3)7on{~cKWjvN3CnvkoQ#F$4Td(wl|Wbpqw z_+OFpn7k*Bt}l*BxspkBjB{vDKz(1}BbmIWfT}iy@ka{JaY`#~A>(mDt8rbcNiVCJ zS}UVEKZDwT0_JbnEKYm=N90_F2!m+MiefzUzal4-E#`|z45Ly!lR-R-Pm)bUYT>Kb z8-;HP{#)eOM&_qP=0A`8`aFg$BFQcywW#5(V}IG!`~S84J96&3F@Xh)9CaS;L<}CW(yS8o@uHoC`%7AE z6mlxTFPMd6;6xpH50%zLVBod~1vCKwjqF8!pmG~l>dTZHM&f5+dPP}t6ULMfTuD^? z2Y(L@784zyp8RvPNSmAX4N2U{0t-fC$BC4I|cLwfd23 zbXq9U{B-SMQP{1Jek5*2FbN`;PJ0;9Ll-hAy_Oz4D$ND}@HPnelVKCElm|#yfhAX_ zkpux{a%N>R`4MufX)@L6M1dgzK}{Xq0W#f59o;!fRoz-28wN`VK{`yIti~Onv;Oi7f^_))fGo5lWPWgwGD)|*FA>HX(K}`=` zOfl9QPiH#N^tff-5a5O)Dzis&wY)EZLIL z)b%q?v|1E4Hn{1$C>&!n{o-xW=6m*m7Elm!zT1Vak(bVRP6#AqRF+=zv*A90xL ze*8yl<;XL;oDjd~C5R2kB{s?4lCj3R$mf8R$nu7h-FZ@IpoSHF13hS zB}8pJN(EdM3iU2j%g_-ym9FI|2(Aib6_0Y{>NYe|sqrK+ymqy!(i%Mn`_gVuICCzQ zGU{CorGqnaod#uBdMUiHi_$0t6t3+cm^WpANicGfm`Zg=l}=4)y#NUoPR*04&vyQ$ zxw$=8_mp|*rEvCliSeND^;yGcQOuY*$SPhd8k}L|*pQcG4-!(fqH5M>-5mvwCJak1 zWhjGR2=|u_hkD?ygT@A=(D+uFms`kX*h)Xw8dkC+aT^q6$CnutWi515kwGAI2c==m zHN&C^MAwukj5(K5nVqXk&jEn|wcrBtj;pZ6RgLI^5D*#Q19D&#cf-Mb2bVgRDtMGC zhungMA(smDOD?$uXj>|GVi|U7i(zRtM2H589T7@`Qew^plWPJnFU4{k#XO(`7xZ@@ zF(Wi5M25jVbokhBgs7lc3j;xmmU@Cv$n6?5v@fmxBn2xCo#Inw2BBbG`XR-T0|2(c z1#MsLBg{Z79w0@P4aya@Au%5m{YEDM?u>LH#O&Sa!Nf8!3UC?Vw`x!ntVm=)0+{b* z1%p*CX6%xnh1!6FeTZC-O9DoV007us!HlRv)6zXCE)(1{u>haTJrgC0mxWP4bi*<6 zTA(;kr9wAC&~{yVmjsOAHXMY8qo5ZF2&-;GSyXA)1BWvD+$r-C!D$f0HS4JkD3IVV z)BphUICww>Hm$r6D-}MwfaR4EXgFxbXk-|+8Cc~qCF2l$b_%s-+* z0{Geu5=6h!T~_JtG5?jA{8tPA|D!}9m}lM41HabYRJ5?aS-Aq~)vJZ$KS_GZ-`D@h z+5anh|DRe$4y7RE{<8w4S_$xg3p`rA`yvRMYn+!lk`RN5US|rpV%%FHVTf-zA)tG* zWKp7Q%pgh-2oOGCL}Lt5uiUk?*qL*aF1L;eLlhUt8;?16O3NOUA_mK?p12hCNm>z+ zJ7pNf1%@07d^L|24ATOKbbT@}LFSBUf$>RYQ33{#p#!*d2QEa-lzDUwXn$~rm@0hRhYTU|C=v;uZ)pwyPF1*uwvtz+HhcgcMBWFd*l@eHcqcVEeM2i!^!__5Md~i9NenWVTwBZGTe^9)rh0}23fWnL z(L=Gt1&z6t)OZbor&%}*;3c8w50rwCQ}u#^LZApBv!ZPj`49?SCFLU^B3pqX%tYEOeM-}K*`|sf#EpT8>~er#+n zpIiVZ+*}+8ZcYKA0}f7J4i0uMem?#_cJMHcWM@AmKcoe8L`-~-v6o2SwobDsA;L7t z8QW#LZ_X!8>|xprEo*mb;k-_4`3GOc;$sroKPqO(wYB`rp!7%y z!&A`BT-?T)Yn#+sVF}psF^7fR2+JuSzdriRJ5yQJt^xcz$+0!SfpR~J7t*TXVt0W(~{b8Gs0y89H7WuVN($Q>*s z&?2~c%a<{J%%~%Lg<+^Yyu%HkMpqXLbOxL4WAOp*K>IWF0i<`x>g3f)iG1_%mUD~J zmj(3~U%e$2Rp?Hg_NG{ht&Y-DuuC^pn9VlM268M^*_vG_B`#c6<|LOB-Fn`BW#rD~ zj(lI>|1MxV_5fY)K^|^o>hx=g7d1^M1;0{P+FPh{=pM0@J5ACLVr$|Sk6`S6WIMAAWOAj7+ANcWIw0IWWc`9U& z8hs>BEYoeKM$h*(*sLmhzO>WS*ZN?Efu`d6Yr*PV&k>w>lcZ{qiw}a!$P+&X4gBNT zJ|;ysN&xLQgo7vb8@r;}`xe#dX3HcO9-cap&bjANw+L^qq0fxxXw)rAMtxRA); z;vxQ;)c-{*triG8P$UWmv$W?f5% zmcz03PGx3)rrit@%qNS@-~BE{;EI4gg4Rp-4{X`2dqaB;U zmb3?S#%AANE#jFqyfqM_iah)}Dt^b86vk9(xHD~XA%?|lJE-oz`z6B4O#z1|D<2&k zVEkE(g$TGUM5ieJC-fKM`V8q&>OF|zz*qXi7r>ZnCBzYU&53V@O$FrK12)dAl_YkX z%{6`njLO=Pu5+KYT(}5`@=_4bi+=Jh+Tv7TB9MQACjuQ*zY`FKKIb`-eciGy$ zhVVx-8kU2J;ymikg(iJ?!5ch)H$dcWK*hER>tgP*??b+PHJ5x(<+@LIo(v|m2S-I0 zBCy#^2xs#Uzh<($U!VLIW7!)?`?ApT!tjgOjGHdLZhR-1*PxVX+JmxCDS}_ZMSA7; zh=u?;~&9lB0w5ZW zh=iGtL)srnp3aArosW4=kG+@dw9@yA4%ZGRFA}pldkvpK6a@-f^|2K9yy09c1$}9R zmTHT{W*wc=9%M+N^K_Y?Q9Fd~9j0A1@z44KWU2(D;=}Clm}MeYZ5v`>YG37G>YH3e~tnor=c9} zkG8vaNd>UngoW#~q(;-HW=ya$uU#*BkRA3r@qzsI(i0a8q2zh4PSg7n@%6lq8R~hf zeKW3Qt2o{Lz4Pa>lJ#tuXZX6qE58%SvutCDy;0dYnp6{JW|WNS>(Hk>W;`$UJfm&d z@1h!?%-v?KhGu02 z7KevUiN2AKtdsPu%ak)S{2pE}kRU1jU2l>}8B;+Xd<^E#UaoN)w-mKpahfg9heYjm zL(s^Xk0+T~11m>A44Ny_-v|K(onnyaJu84$UFK+2fMrV&%e5PkyhQaAmz(bx{k=}e%sqf|8rrW zHA^N;r!CgvhB95^4i>;_6@}|E_dY?ecz=op&4#myn#X%QBf<M0{ z;JmX>lf~eP-*fr}eiggslZ}$+L_`d+g!86;q9dteYKs_RS$;A{d*!DTEeS$pXC4*Y zw|kjfCfp96lq?gHn}!Q}g{=JW-&D0XKY4;wW&G9vTVC7N0oZFPgq3GI zv&%%@7`|=eh-$C_LZzS@kE^~roz@}f(jlXKNBPER&HU}UxhFb~<}8KF)ASYN_93~D zDTwyEi)fetivVFm5N;0bIX3{mmiBhM{V|n3j-oHyyPfBnE;X}MQi7-FI!|7caOlCP zv<(8M3-GQNHl2n5ye4-oCTeBt4|8)L(L4^_5>YWzOZ13eX|?#Vs2>$AExMT1V(P#* zRDDe4()7LTaFa`ZB6DC}qHL z%>+?xqvI3vyrRe%Z|N2SQo?$tTgX$+(Qm@Ck?Wo<)E435kyg&;rrSe``B_H!wBq9_ zOo2E>8wJ}~mhW1PWB8)?B!@dyt$VnEpS(aZ;ml=0kPX>sJbwnE1yoa9<<`8*PDmoTC=Od*ovNueP7$&%DPFP_++|IS z#A%{!OpO(%DYXEaZk5Zo4gZ8lR+f8_j^k$rvOFJ=C+4f z5Oma+=`hVYKM{}L0guTt^wmGBx(FuDS4AcBxn=2VS*3pdI>YY74D;jcdy$y>o^Ehw z+=O_Dexv?}-$LDmgx~V6Pm8zrn4!Pp%V%n9B+8nxi)t6A!beLM$O=AHteX-PDR(|} z!YOg+heWGVr+y$xQWvbnP#;l@yqn2=E}s{R;}E@SB0_}SPJ4z0ZKnJ>nX)-m&%H$LbJQ>AXpW;ZQ#M|um>RB_ zXhMB$S5czPO;AmAi6p?jWDZ*E+dJXqM*Z18YcLZPrwlt?S`ZiF7pr_nKZ7TL#y~a5 zG+ILv3qGvEuS-oI>~LwZv)lT4NqKVLSHkyEr2xb?${v}yt}40)SO)^ICsOv3(fM{t z6KzY3I(4$>4fPxJQ@NjSv3j?XDKRaVJ&I(>;LB4i*8^PIvER0&<}+D|?_vk0jsyc9 zFCw(|Rl4-#e)49)nKsI9pdEs9*3LK}F*^7q3#}<`O$k=WNGyL!!P?AhQ}Z)UWm2o( zy`UY0+?r<>umLbS=lNcaQJ%zjqCF-w<(h>5w;2R+b3$v`t) zy#zDn=!;1#8W@Sxk2R@}>6U+Hh9*i*z1Mv7T z{2aMsGOTYTyAaEe)OAN=%jrLTqMRyEK6T5R<*I2!+jDSsCayN)91=ms1ex>)U8)uj zb|WRmk1NByCU4Ej98?lV+Zp+$l=WaWd4lgo?2X7Cuo~s2ugr zb+Fo-ZdtpzhI$>$-s(LG$w=YS%1-Mr!*7dhIoE}N3&kzc$RYPcqvlTKn!J6_8$m{m zi;oI7@9rFG(gbOmR9j-#%*1N{x|{T7eV~2io9!Kdi9s5?IRnZyS6L`_kUI~CBtO#U z;x&o5I?XF>F%z^M9*^mM(MV1H)skR_U;{^bQzRTtq^0V#x&#K#m{9S*5I?$w)3;_X7)#O}r~=SV-0UbbP#AH+rf>oitOU zg>aJEe&u77!%*nf3;{*R(D1a9U zm(S&e0yg+>m2eZc8XJ;}n+Jj9NAmIs2p~Cm_$rxLI9S=Zki5(YW&|4#FS3i36~V@W z_Lz*amrXS}n%-=@yOamaY0S-fU2XcyN@aihhxYG!RG$3|uV&>RpL@K+I^8XMQj_#43)(n+ zOd5+sr#WR+H225f@d7eU?%%z?IQymN9@FW9u~U?(gUtg(0M5a$7R+N|DwxQr{$!>( z5H@o?!MtDK+!qSyr;Cfc$9ZQvbkK80f_%wSkB_^q41k`L(HkNZ62>5@d5d_I>;&pR zK6h8=Bon-=UW+8%S5jd5wVZae8`3B6>Zj1zile1TbtLAb-J6 z^^ybV>3T&n`?~KW%t&II%xu;aa&TIgrC&j}j@gfj>42=hP&`noIg&*LnXAFlTYqgT&Qh>QNvecG%!${#v- zCHd*avZit0spIJmFR&*#c<)m{+MPCRH^0@Q;&&RIU4kU9S=J14iNG7724l<3MV^>6 zo`4yvVWW|}fLjlYkQY?o9iP54KaScw(;RV5Sv}j9VS;;zQlIjy_-8JbMe?c;4}NW> zSxA)(+eC^zIV1IlJrgOBfXMo&zQ%^ssg_TWr(6r&eNU!eCG$Dk{^-SP)Ip5Q=cNyN~d!_IheT^K{^sL^!SnKsQ4@Hz=n> z6Mx!U2CLu?+8hQY-UMQ}X;oozsF18Q^HTe` z`6r-YC*NHuVe~Z+ zl2dr!UkVz&Jkf08#dE9bOvI3092Vc1?A>dSWA1@aqx0`{Odo9G`li1!m0%zI@*YKs*td83-Z)R?cPRDE%&YSTYPkW20rWc5hv4|nAZ0R?%s}>qy)ySR@K>;txv;;#|ql2;_2S+ zi_QW;?~0<6IwR4Dw$?)G?|(X94y|O-o*isP`~*r#DRg zu$ETI#@-o{`Pl(XZ8Cv%LqYajMmG-0nnLK@iy%mopJ>d`qj?HW@BZ%(jdbrnGk1Q0 zr{^--!@~P|B!!AfDxWLl1Xl9V26vPRIDmQc=82QhXza=z77^8>PrHTG>n5rMEe?CD zYcZNZ8}qw%)nnJd4_Dyh3xFEJRB6o_m=|<%FOXM}vuyf%G-}~V!@zC#8q;y!4Cpp& zU@OOI{A^ukw`oHbR{`I7Zq`Ok*d?tGNM@?0@Z<15H)TJY#11}%dOHwwVZ50rw-J7} zRLlv`1B zF))|({*T6py-jx|ov)A^O1&+F#L!(k?iE^SF;zuX@6V!Xi+H8rcwP+)mQMyMY@5aM zWv(Hrn!nW{mN7{5o6B^EK0&52PWn<}5z(g2Ujzg$q?MB{I zsE@rXb#UiS*f)t)p_|nCVv_;XXOn{8OaSH_85(Gj z+u*vc!=%eQ`ZYHmj@+sY09^!FvDLCf;5^$;AdPMBoD}KD@Xi0;!Hk<{dHVZrI2y|R zvSjg>pm}2G+f0RZ@T&}mZ72ydb$g*0cnZhL9+-=N*StY@~O)qVC2Bc~q~@BcoG>y5@?FlpTBPMAs_6 zn{UBWHK-mAgJ)yGR5lPZ0zTuMHEWj)hOLhDV!cG%kHsdF+h%;MH%M38uT{!cwFR zvO9AwfS5Q2A{TV)r%n#s*YcO@*c1glEoV0K$Q!i@@O#qAVlKdPWAIOn6F_nOx)q>3 zX=|{cW>A`uTV+_eeRnOrnmVev_NzavNMK>%jQkRwt*qySvCA&4*qE3#w6o1hdga`w zwQ~D>Lo$aqvZDKS${$|LOb0pK*<{%$+js;=9pTeiV_g0JBBCNxX3!*&4KSte-^kr4sgw`t zwflF zHMybG{i#zkQ*rbL)EhW}dT;dEVC`iN7r@o-0w3V8eu#^;`Ukr>yC(7Nd%gvWz2+|Z z%@#PH-%knb2axJiRC7RY3|N@s{bC?rt-{9K_QGaiVp7k0N7wSS=?eqJ<0O&?iHIMv zM(GAF`JWshA4HX~=y1+dG^$5|gXmiIS+wMnZzc@FSmSXmYm0#t^Ek;IU(@6l{{*V4 zPgxOpfFFy^)o^Li8?xoLoY}1(+42tk@WXI^ zU=2!$;|+ro^1Itx|M3(ef(PSi52a})PXQ5RRlZKc#0eOg-t3T9qscMW?_eKvQ~oLYxZITpu-(MplzoAUt;NWW% zL(*5O;V&e`yrWtqnr8m~(8y#iQ^Q+U#Ls;e$H@DPsO})kuJ_~zl>DsUA_fXwaV;m6 z!o9g6h6Le9Ft(YC)OTUTdTxZ*^se}C7&b7syI1)Oe6%Drk=#_#U($E#?ESOHeb z4{zTKAEWgr9O3##+nJ8{3wKK=BzH#3JMe67E3^3VmB2TQINN z|41gcdi%S9%CGU6(nKNB<)>Xx-qz}hQAs$V z@S^+YZ*qy?rxJWV!?sCKz`b=VuT-Pq%$sYGS|G`=Nd8BH8J?Emw%V|}tt^jI^a{a9@+o0M)bak z2{)zNXeixAcUJC*h_<4fzTE>i4g&R6yzfqgscCp;1#T;x_v_+2`y+378B15>xTK`b z-FF1<-<)xf#4T1#*Xw8{`I|j9P}Hja`uuhRQjJ)~_E>6hNz`p$w>Qd95(yJpT#gO9 z&$xt5V}ir*-p@#`zDn#04x3OrX-RT<=uP}pXsJRsg7sqyakTk0x3<@lM%R*%P^g)F?Hr_( zI(?!aaL+xVI!8&hClZKq71?>&b(URu)boyOr}H71TWRtmO32dsKnbZP`JTE38wBmO zGfst~N!5sXgz$UcQf@1aF90kZ@6w#|JRxI2PxKa&(TD^Fq}`Wn zn1J>%DE^+Ue9FXiXV>lYzNA@O)2nRe3I5$A)Bkvv!n_8tue+2cv8=SH7xZ^XOH|5v zBNtU)`L9Nq!}-qJO4KFFM(J^R5u)uop{KNbmDUb4T`$BO$_>~Wy( zmt94hSe9*nAN;=ies-Di^4|v?Z7&9O`2Ssau&!#wlv11GQ}(aSmS3@Yc|A7GVddhS z+bSO_>-N`eTND4s^7FL+6(5$(^w@s=cELB1AF6Xrds}wxy?5xp3dpNa;Lzjywc~qz z_wBI$in$F-q}R=@nBDNgZ52>-I%fypy=_%TcC#GWej&G0-61KqOexk@XDI+|85 zZkFHtzqz@oIY1_+L^zNo_Q*D|KT%z!n=XjG5!?BA)z;ieyHyUwR@QkJ{e84o{Uz(9 z=|KA!4jjD~wO_St>$0fy**C1J?E0dQzF95tviIuASEA10>lh<;vMTr0*xuYF%lyE8 zQ|*E8$(xmHR`1T5`*Vt_Xj3l3o6{?Qil55UyL7yIUY?Qa$G&?JbJxVVskJO)ydw8= z`(%~-vrg%@v@!f>*Wa%(b>@PF2eW7SiNCa|JTERTyum7R@76g^8C7gg&T%F6R|s63 znRsjOf(aF#*=zj5)~~T=+%V}>@}@hu zS2i4a9qzK)yC&z>lhqM-Cpx+IyfI}7;It1qe@>9DboFyt=akR{00tQgI{*Lx literal 0 HcmV?d00001 From 64324e2f1907adec2f90feeb8f57d961db2ccb3c Mon Sep 17 00:00:00 2001 From: Roudenn Date: Mon, 25 Nov 2024 19:31:35 +0300 Subject: [PATCH 7/7] Fix Harpies --- .../Prototypes/_Backmen/Body/Parts/harpy.yml | 267 ++++++++++++++++++ .../_Backmen/Body/Prototypes/harpy.yml | 4 +- .../Mobs/Species/Harpy/organs.rsi/lung-l.png | Bin 0 -> 279 bytes .../Mobs/Species/Harpy/organs.rsi/lung-r.png | Bin 0 -> 275 bytes .../Mobs/Species/Harpy/organs.rsi/meta.json | 17 ++ .../Mobs/Species/Harpy/parts.rsi/full.png | Bin 0 -> 585 bytes .../Mobs/Species/Harpy/parts.rsi/head_f.png | Bin 0 -> 442 bytes .../Mobs/Species/Harpy/parts.rsi/head_m.png | Bin 0 -> 435 bytes .../Mobs/Species/Harpy/parts.rsi/l_arm.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/l_foot.png | Bin 0 -> 272 bytes .../Mobs/Species/Harpy/parts.rsi/l_hand.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/l_leg.png | Bin 0 -> 2285 bytes .../Mobs/Species/Harpy/parts.rsi/meta.json | 62 ++++ .../Mobs/Species/Harpy/parts.rsi/r_arm.png | Bin 0 -> 154 bytes .../Mobs/Species/Harpy/parts.rsi/r_foot.png | Bin 0 -> 280 bytes .../Mobs/Species/Harpy/parts.rsi/r_hand.png | Bin 0 -> 153 bytes .../Mobs/Species/Harpy/parts.rsi/r_leg.png | Bin 0 -> 2283 bytes .../Mobs/Species/Harpy/parts.rsi/torso_f.png | Bin 0 -> 646 bytes .../Mobs/Species/Harpy/parts.rsi/torso_m.png | Bin 0 -> 602 bytes 19 files changed, 348 insertions(+), 2 deletions(-) create mode 100644 Resources/Prototypes/_Backmen/Body/Parts/harpy.yml create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-l.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-r.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/meta.json create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/full.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/head_f.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/head_m.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_arm.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_foot.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_hand.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_leg.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/meta.json create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_arm.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_foot.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_hand.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_leg.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/torso_f.png create mode 100644 Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/torso_m.png diff --git a/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml b/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml new file mode 100644 index 00000000000..a7e915cb2ec --- /dev/null +++ b/Resources/Prototypes/_Backmen/Body/Parts/harpy.yml @@ -0,0 +1,267 @@ +- type: entity + id: PartHarpy + parent: BaseItem + name: "harpy body part" + abstract: true + components: + - type: Damageable + damageContainer: OrganicPart # Shitmed Change + - type: BodyPart + - type: ContainerContainer + containers: + bodypart: !type:Container + ents: [] + - type: StaticPrice #DynamicPrice + price: 100 + - type: Tag + tags: + - Trash + # Shitmed Change Start + - type: Gibbable + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/organ1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/organ2.ogg + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 110 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Slash + damage: 150 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 200 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + # Shitmed Change End + +- type: entity + id: TorsoHarpy + name: "harpy torso" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "torso_m" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "torso_m" + - type: BodyPart + partType: Torso + # Shitmed Change Start + toolName: "a torso" + containerName: "torso_slot" + - type: ContainerContainer + containers: + torso_slot: !type:ContainerSlot {} + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 400 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Slash + damage: 400 + behaviors: + - !type:GibPartBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 400 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + # Shitmed Change End + +- type: entity + id: HeadHarpy + name: "harpy head" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "head_m" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "head_m" + - type: BodyPart + partType: Head + vital: true + toolName: "a head" # Shitmed Change + - type: Input + context: "ghost" + - type: InputMover + - type: GhostOnMove + - type: Tag + tags: + - Head + +- type: entity + id: LeftArmHarpy + name: "left harpy arm" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_arm" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_arm" + - type: BodyPart + partType: Arm + symmetry: Left + toolName: "a left arm" # Shitmed Change + +- type: entity + id: RightArmHarpy + name: "right harpy arm" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_arm" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_arm" + - type: BodyPart + partType: Arm + symmetry: Right + toolName: "a right arm" # Shitmed Change + +- type: entity + id: LeftHandHarpy + name: "left harpy hand" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_hand" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_hand" + - type: BodyPart + partType: Hand + symmetry: Left + toolName: "a left hand" # Shitmed Change + +- type: entity + id: RightHandHarpy + name: "right harpy hand" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_hand" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_hand" + - type: BodyPart + partType: Hand + symmetry: Right + toolName: "a right hand" # Shitmed Change +- type: entity + id: LeftLegHarpy + name: "left harpy leg" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_leg" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_leg" + - type: BodyPart + partType: Leg + symmetry: Left + toolName: "a left leg" # Shitmed Change + - type: MovementBodyPart + +- type: entity + id: RightLegHarpy + name: "right harpy leg" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_leg" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_leg" + - type: BodyPart + partType: Leg + symmetry: Right + toolName: "a right leg" # Shitmed Change + - type: MovementBodyPart + +- type: entity + id: LeftFootHarpy + name: "left harpy foot" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_foot" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "l_foot" + - type: BodyPart + partType: Foot + symmetry: Left + toolName: "a left foot" # Shitmed Change + +- type: entity + id: RightFootHarpy + name: "right harpy foot" + parent: PartHarpy + components: + - type: Sprite + netsync: false + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_foot" + - type: Icon + sprite: Backmen/Mobs/Species/Harpy/parts.rsi + state: "r_foot" + - type: BodyPart + partType: Foot + symmetry: Right + toolName: "a right foot" # Shitmed Change diff --git a/Resources/Prototypes/_Backmen/Body/Prototypes/harpy.yml b/Resources/Prototypes/_Backmen/Body/Prototypes/harpy.yml index e695811fc94..06112e8cfb2 100644 --- a/Resources/Prototypes/_Backmen/Body/Prototypes/harpy.yml +++ b/Resources/Prototypes/_Backmen/Body/Prototypes/harpy.yml @@ -12,12 +12,12 @@ eyes: OrganHumanEyes torso: part: TorsoHarpy - connections: + connections: # Goobstation - fix some species having their hands the wrong way around - right arm - left arm - right leg - left leg - - head + - head # Shitmed Change organs: heart: OrganHumanHeart lungs: OrganHarpyLungs diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-l.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-l.png new file mode 100644 index 0000000000000000000000000000000000000000..32aca484b9fc08665323556abb5a3aab1e6e7cf7 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJd!8G4U-!7ULw@2AMbS?e{IeA*r(@YTh(izN9AEkB>i_cgZ@G za2(M2|Nk2=^A$m!{C#^C&u4aENU`kMW;QM9$DgOhwK5GNUwF>P?@dS$5lghF`X+gF zn($i&wiW9gr+IgI8rbZvW7R49tvC15f!o*5ORl@Sk8hjIGmZ%nf0t_aloT@X9MECE zc!kNu+F?SxK%S-PCwm@&SiT0G+J8?pnc4NlZx{k4k0&mk$LDp_x%Y=W#3zmHJUl!M Yt2&}y|Bvjb1p1W0)78&qol`;+06lANPXGV_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-r.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/lung-r.png new file mode 100644 index 0000000000000000000000000000000000000000..7e29649ccd8886c45fc090f4fb039498612cc5d2 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJTb?eCArY;~60D08M0%POd6!x2 z{^1*B%{+K3f-A?8<3PqPO9qy{d9}w5Xy_dJ@aHPG!Tc)$3r;X@ zfA4hZz~lS?Wl6FzQ?> zU|3_rV436~qi{l>qwL6Mb$>~Vik%*pPJ8gOo4k6tU`bWLtp#m6!F~vIs6KGu00YB* Xk4V|}u5V9)zGU!p^>bP0l+XkK4fJs$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/meta.json b/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/meta.json new file mode 100644 index 00000000000..e639085d8d0 --- /dev/null +++ b/Resources/Textures/Backmen/Mobs/Species/Harpy/organs.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "lung-l" + }, + { + "name": "lung-r" + } + ] +} diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/full.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..e358746ec8b05d4b8fe06de36c6fdf5d517d86b7 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikF1AIbU@7}$8Ys;qp|NpOFzy83115b~gPE1Vn_4WPv?$ft>&&$ip7cXA? z^5x4{H}7oPv}ynT{XRZEk&%%TCr-4ovJw;&1R4Vbdk#J{0#f27L4LtNqp$#mXAaNe zfJ!(EJR*x382Ao>Fr%o3R|C+IS)MMAAr}5?C*~G6D+sjs@6fRPc*^_G|Nkpv1tykQ zUDmfXI=Sh0is;f$$N#8bxUxyddH!cj@noKklXJGDuCnAvx@~)gCEDy+W9qXSrfX-d zE>F9A?OkHp0-bk1D|RjY!{iZ}df3;heNWD&Lzc^#s|9Z!-Tl~NPP>rB^OysAyT7_* zD0~vzJ^#S2cPBWPAKAYCw($;z)OD5YCyZZ9nmky2BCh!1HHGP&sm>D?6w=&!IDUl0egv6S?+` ztvp4m-Y$(}k2*WE&xXzgdIzyrtaN zZ5Bd|f3j7tGPl0}_;UO0cUs3QPyIRc-9k6^%>489b7RT{Tc7!>$Mdy`-?!=#*mpeW z)NbAhL0V7iPgfmyzI(~_S)OgVf`Sthqo=eO*1F0^I@_v0tlq;>Jg% z2A6+v#N20H75?AdRi^y+=j9!)A9ma}HWr^G5A+HQJkWglsg7adKgrsKKm9)+T$J|Z zx^mIn%_n!OuP=6+K9Bp^#g^$dU0#P~Y@4jmAHaXpkICzh#qo}S?#>B4 zu|c;eYVPcGWB)_nZ)BDNxmwXvKmY5U5o{u>eKaJ?;cVtTl{LG0rM_10-zBm0ZC>V; z_knkFW8U;HOI~H^yL84(=?B|(FRkXBY_M!qrk3bL*Q+M^dH*l7Ui|03pqkO=xu1SZ gg(DNp#S9M|@2}~*sLTGs!W$&!>FVdQ&MBb@08Z1!#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/head_m.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..e555d030beac914816bddf07bb4242dd747b2584 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV65_VaSW-L^Y+&HRZR{eY#$!S zZsF#tVb!ggdZt}ee!*1TELqFHjbckfA|zP1S(X=Su8E0xeol7fKKT|^i~AK3?jYr{f@V zJm_b9D*ui*{Vpyk+oH>Fzy7yfy{3P&%G1wEk3tQe07)Ist#(ZP<&AHy{=clUNo8;C zstA_NDyeDfROEqfhk*yGnw9nq9`*hEF4a7&-ou$b_3I1y=qIxamg(<*@uc+Ii%+$V zqOKZu<@Aeg%4eE$hVp#X-tD<*m<}N=Fwb}3W!58u3%C`%9zb2HFe{!)GUy@k5G+x5pMTGB9v3FZlWY;^rSsyh1=8 k2>iHKwhqE#U^vj8!uU~x>Hmh)R-Pa+Pgg&ebxsLQ0OtTG+W-In literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_foot.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..a03b643ad62fd7e3f72bdeb8643eedd61e873d43 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwT3K27`1nkmI59FZ5-27pC|F)z4rCmTQ>_G293?@1!T%wE;a>Az zkQ&YckH}&M20bMZW?c2??j)dKuBVG*NQC>_YmR&k3Op_sr!npQ-@A1qcZ*`yopbS~ zjB+}H|0Nlj1fhtfW7?c&E(c3F40J@Q*>{Ak)_uM(ZIxvo#A r#(y7HWFFqN`|gTe~DWM4fT0>T} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_hand.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0ec001ce2acc03b55ba45dd8bfc5c1550308ba GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|N0w$B>G+x5pMTGB9v3FZlWY;^rSsyh1=8 k2t0_qy^{&TWH`{B!ub9#)BlK>Pklf_p00i_>zopr0P?gcvj6}9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_leg.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..a70f92524b61c9295b6660ff966f106df153b26b GIT binary patch literal 2285 zcma)8U2NM_6m}uq+QESRzylP?ctUIsjvd=^Vk_B5oBm`ZZPjF>)dt#)eUq3bwy~Wi zEfaqd5)&ZSv1$_n386_tJWNb`0EtOu+Ju0IJpd9fAO;UeNc?CB9x6>L=Q>UZrDKic z*ys2=-#zE#JNM?;F#Qg1T<;vYK~!hhGo)(78R|!mt-IhKS6k-4L89N z@Dtl-cRiiUfFVIa0N@0kkF&hM3JR&ARb0)^H$3;x zI_sj{!n}>SDePKxN5jK&*z|U_7qhE%w|lL+i;2t6wW^mmNYh`jjUUbACOdf2wX#vO zeKbL~QM%T_*mbAszt=SmS8)v%cY!g|!9rXIyl(o06gr}&Ev-(%GwCElR#kONGj!E| z6vddXXcA&&p4VAPiOZ~_$O4KHOwjaVnaHp12YhrIJu&WjQLbl2FoFq(qA>j>@u# zMOhZ2QHCZ>R8y0gBqN0Rz?`fiuVgtj7zM-Bt%e);3q}p+Jw%!mi7GKc6optUCW~@J z3J?deD1 zgHvS~E|3L`mM;r>cc8>QZDgZ@iOhI`XJOZh2!)8KMkQ5@FW42ipy?t{aQ_q0#TE#C<78_CT3kbxJrC1f@g^GP22;C9 zNQ*CPXxMbEjTN~D-0EuAx#Jht^1`787Ie9NP7O3~M^wG5|2M-*0|MU*wYV-5nFYn%y>VI|n$xn7)Iu*L|g$Vp`)+%F`r>cf?z#3?YM^KE`kOr`&MfwwD9`bGULNIs3cYgj zozO`C{v#)^S-mUfcbA?KcZ_{|Y5a{3nqP&qo_&p@-#;;7bI0YKl?!*id-mZ6LdUO% zK9yhkW@P8#=d4YKA3444t ANB{r; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/meta.json b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/meta.json new file mode 100644 index 00000000000..4073a762e89 --- /dev/null +++ b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf, Legs and lower torso parts made by @ps3moira, Full reference with parts made by @Still-Icarus", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_arm.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47ac86071eaafad7c79e62c192bba707eac520 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL48jb$B>G+x5qZ}G8k|$Z}{?m@!?Ct0+Vem jfs$Zw`_{gADD#1nkw7uie_xsX0U!}iS3j3^P6k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwPMkQ=$H&LY$|^E4QczG3C|q7%4kX!DRRKu`j*=k1;QtW7aIbl9 zBv6dAz$3Dlfk96Rgc(;ox;qIdSnBEG7!u+B_S$Z~1_O@PhfHht{FlBx*+4}9>Wayh z|COBo`t0)fI9*VofkVK7g+qZ!Qe%+_xWzIr49a;m4RpUXO@ GgeCyQl3&sQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_hand.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..2c16b27041ce35dffc7426a51b2fb81978f59491 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK|N0w$B>G+x5pMTGB9v3FZlWY;^rSsyh1=8 i7~I=BR~yPa(44~fa6Qw1NvHb7AR$jzKbLh*2~7ad4=6SO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_leg.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdd3b855667042c8522f4a9564720ea38bea55e GIT binary patch literal 2283 zcma)8U2NM_6!x@s8y!VkwTChdWV}6W2**Eh65C3)W=-2fOWLT3x|RtE$G%BT;~#9N zNh>tA3BiB?D$@3Xc$n0O@j$m}{7f68>k|@4u$PH<_B6zg5Ii7JDCas(2&H3<C`yf2k^CHD}2BI>FFQfw#6MEIZ7;jz3)C4U6o`m zNf1}x*}1B8gWZ?U7KiHf`qb3a!oor}o0Vl5+^>Z8m*KX}8y_vK;SX_bd2ty$kJ#xc zmmoq<;cLtG6RT?kvHiSWob)DhSy{D=kfK>76lxeYpa~*=q+u)S4D!els_15d`uXNE zMe16DIv&ZfIeQRI>*;w173N2a>imoItD4$q{XY6Ju z(ua6632HKzCkHJDkwQoavGhgcwoTPBHVm6BES5)|a&CkSuUp$0eter)^f zuBR~>Fa#(F01VHvBF*wNFX0-R#Tj-k*N!yZpoh>+rlHsj7h)O1XroFsYVW>;%&=UO!vVV9q4RVy=)roUnfKa$Di+j!iyif-6G8Y5dM zO>JZBnp5@PYbt}P$biLNVC33Zh--s4Odpd%N92^H)^KWRX5uN!Aw1j_1{5l&ZOhjEoWxT87sYjRByAa z4+?AZj>8t^dd^&C)8%gv5pQZY4NR6Zw?4N5da=V5w4th#{!q(`ihqIxShP5(CnJaOiXN{*t0ZDXOD@Oz#Ohr;#@vc?&>WYJs6&Nm% z1&o$23-Vx~#6vA)eHvkzu{=w|uEp_1E-Xg`nH8uGH9!>%-Vr-%i{pI+MtFT2;&`u- zGgzdBnr&BggFa>dq7B&FRQD_ zbgj)5xenayYR9?b7uWQ{p#~Ooxphurt9{lY6XfE+NqTAT!H?k-zMM%Vi<2WiUO3is zihZ>E*STA3=Z!0G4!=cD>^g9*r|*kzZ=^3h^X{2F{fE-07tYkXg+uCh6OZ3Ig@#uS zEDW6e=q~s4*}h`r&iDNTyLOQAlgpo6{muCE18(>2uBES@d#^BZee1riv2?QM+@8hT z=@q8ii=9~deD=g<5NG9kdC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/torso_f.png b/Resources/Textures/Backmen/Mobs/Species/Harpy/parts.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..23dde35cd8e6bbbeac71797415290fd86daf724f GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~;1^9%xmY0{meEIU{yHBrf-tqPIO-xKYaNxklTetuJ|G$3y`nz}U{{H=Y z@#4jQ{`|SMWz)}}KmYyv=i}oO85uco;>0V<76FYB(>PcOqDq4Nf`Pg)0R!Wu15bb| zI14-?iy0XB4uUY_j)~cCfeu{l>Eaj?;r@2o-MqsJJZ?WZkEqJ}dVK!3e%JYl%N@HG zXWl+)@-$>A>zn4;aS5CMPVg?^oDnZ7@p{kqb6S@ak4%*5HRRcJDCD5|Y$2wgP3DoA z8=RMTw3N%NS<~p>=ve2(a4e6vY=Okd&kHz&d{3zNtW;m%P`=3gkc7uI2hpq=wK)zq zzkgEP!S2pq^y3Q4B2I?qE3s!t%mLI#%!9wJW~U+UVv=*3JoeYo}+j zpa0#N<*a+)r=g1Xs)Lh#8yBaX+tOsQ;H-u4g6|RnYQ@hK6ig!9fA3bZE=gR%J@3vu z1(#*A3!dve(+qy5QJ~KHMs0IT$yH5R`)WfsQ2U(vv`QkE-9B4=@v)dE409P!{; ztFkt14{k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1!1o(uwmY0{meEIU{yHBrf-tqPIO-xKYaNxlI|NqyoUw`-R-Ea4vFJ8R( z_wV1gwru+M@1Kv4Ph@1|#EBEHEL#LLVA1}qe}I%oNswPKPzyR>@b`Z%2$bh6@Q5sC zVBk9l!i+m6X1@hGtliVaF(ktM?X=r@hZT6*co}1^Emb`Gd;jaY^l5FkEv>hRUp_Lu zImJL;#oR2H--yLo!6wu}(eJWIv%2rjf+v$EAG41Aq ze4RS;<2zwHj!y4N%~o5+uvH6Qb+j7K|0(L9CM#IQI90M~=Y=)OV&|Us)GOr63jUHe z^A~KgsNGk0yC`i=L-DnW<6Il&-4s3ZA$~*i%>OGL-np}UYX709%ZyuFt-&n7Ie^v8^)B18~^23!(Z~6EAVu}7=eNc(% z({JXRjeM-UmwTh^(+-G4aTqSo|B58

zr#hb`D21d{=Y^@#8`CCUS$$M?ZpBPkhvA&;as+#eZ&{YBpTsMe-FnoYW538dlzO+C zSUCSYUBh=2VWn?hH&K&Ydd-iowSVYhbsHhMRMVSVYuJ+XsMu*7cp7drSG*n=W4c`gYl=FHwQRK$^xIlKZQu zyjvWU4Za}|eg3MqZM^dfC-Xd?H}WFomO6aD*Dqa%IOJm~q38DE2M+G24tlMz=9Ed|{?#IlGD%BeBUM>{F5GpybRG#Glx- z-SO#Hsz3QfP|Ie!`kyltJ0D$Fm5_aEei@+%945<^pj~Pd;$KBnV-LTMTb`>?`d7x* zI$yQYTjD7-aZ4Fx_`b%F?pc5> zJ=$HmS@TI35J#wfP(DVg^J2NTMD-<9M9w@=PL%3#@lARzTY(ZG4%Jib8eFA@8kRZA zg+_~*Ewg2m8?^YJUcFc8#b-}7j92Eu-YDsH*&WR3-*2rUHpg~n2Q&D}gAX&15`k-C zWoho>MwA+&^zim`0ei+%YD^7yGm^FY(x+*vB0DA|+;Kj6ByxXXIZRcpz9t+dwT|gs?F4)%n@J z7vHo`)yf{63|o_Qm3$)BwE6;8sh8t7s$8_g8^(*PYZGe<8ZhpEqk15X-psM|cpH96 zKed=9f9wwn^%W}!I=T!}eYWXz+c5A^ovHF}+<>DpV{!gECp9a-3+Put zZp|o@ifJf0U)5^~?7}WSQlIZQ-UoJ)%aHb3SkGhgj|ZzrJb}n9RT#xz|&@yxYbM@~N~4Q07| z>a<{6tl?9?mob-;=caDla#7y4R`+<&&K0&*lZ*D8(GoB93DQQoVvX8G$m7x z@_ryiy;QEB!yzcl!Md_xto+*1?ZD=fc@>PR^+mcq8$JYAzT8>&^x1yzQ(`XGC1>s5 zKVJT7Bk72Qa(!Wd`>E#73neF#EeY@HwU3J6w^+vo8KttoW1}A(JRUk*m=h^19|VcY zA_EA44_kPAgy`xE*d&TKz=M(j4?0s1HhH@e2BlN=U{0DAC=0eB;7Q*bzya(6EbS=) z-V_2AroU5CS3m>-d;lH^D)3=2xkP~;YzdbLz6-@j7<5U6=dA~Gwy=g8vN!+~hrl6F zaAN`84+GmN3DxCLX+&EilW!2Ena^*@DY6_5(q_IrJYbxc1;F8)*x0S-uEDjdL| z$pk!3Qxm6+{|U;J$>oul6hH_Cf+Of4jur|_AZb!G;b=fh8;-+jk>Mmfg$CE6;s6Sb zf+3Mm*q$P7(!}6VZ~{dO3&&{zR5*!-0^nFY20-DdSPYq@ zwFE__5KUMd9}<{Ox(~?%K(d)0OA|uEiMy;#^W9RdLE_Os1F#3^Oe%}d{V`=v z_W|s9Bq5(@Z48Eh*TjNuXlZHTG=C^L0vs+_i$YX13W3Ee%?J}i1j7NTB?&7P1Xz-T z(GU$e0Ex%q*t1v+J($obsL=BJv<28uR1%M5MB)J;C<=okqVPnNmOYw4L}7>+Z8!>) z{G`vK(rNzxm$tBdpt@g^zL(Ag*Y{r%eeEeb;PBVc*CB(x)J#z5QdLhNqzuz z$xjgL>lDS4#Pk5b{o`A~{w=5fhhiX*@!Hx{3I&eCXrbUZ8jb=dzkT~hdIivjJv%D}A)+zFB2x596HfxiAXKi~53-&_I;{k6!y;`bL_zv%i` z4E!tQU)A-Cu7AbAzf%5HUH@-%N&dJ@0Zi}�RfRxP1W^z-!hr^1eMr5HsEIm~w#z7kLUEp{g|YaMgxK0;Dk_l$Uf@NSZ)&v5-t*OX658v5!D{2~ zyi@ybkePvHLKiIF>yz%G$1_u}t7 zI)35(1NVinlXri|Vh4zu`M`=DC+0unEtpd0~hw@vFG`?L%r^a zTQ9|F*+SUa=8~1Smo)_dt80cY$pvsA@#Wcai-M8ykkh-jh1rj+J1vRo z&E+Ln4!pP+cxbsKF=QEx`!@NDB{V4H-oXUyvNLtQvD4^V*|D{J0z64Skv{4Q2&mYHVqA Jb@!pr{{fFOf4cwx literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..93064d56057e1914cbd90a0c7481a5dcb173ce79 GIT binary patch literal 5779 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 bQafR*5h-M*;T%VpBm~oADdU10XUl&8v`5f1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb9ec75e2c4986c643ce9db327df05a65d589f5 GIT binary patch literal 5646 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 i--lImWLj$a+~2q(F-$A|4V4qh(2A7!4;P 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_hand-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_hand-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0660f1bc15769051dc7884e65d25dd1e40da746 GIT binary patch literal 5434 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/l_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce036704ffc199c011e4f49040c89f20854d628 GIT binary patch literal 5949 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 lyy=Gg{C4p7Wm0dEft%YnfnyM}y% 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/meta.json new file mode 100644 index 00000000000..bf863d580f6 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/meta.json @@ -0,0 +1,95 @@ +{ + "version": 1, + "copyright": "Sprites from Paradise Station (https://github.com/ParadiseSS13/Paradise). Monochromatic version by Timemaster99", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "l_foot-1", + "directions": 4 + }, + { + "name": "l_foot-2", + "directions": 4 + }, + { + "name": "r_foot-1", + "directions": 4 + }, + { + "name": "r_foot-2", + "directions": 4 + }, + { + "name": "l_leg-1", + "directions": 4 + }, + { + "name": "l_leg-2", + "directions": 4 + }, + { + "name": "r_leg-1", + "directions": 4 + }, + { + "name": "r_leg-2", + "directions": 4 + }, + { + "name": "groin", + "directions": 4 + }, + { + "name": "torso-1", + "directions": 4 + }, + { + "name": "torso-2", + "directions": 4 + }, + { + "name": "l_arm-1", + "directions": 4 + }, + { + "name": "l_arm-2", + "directions": 4 + }, + { + "name": "r_arm-1", + "directions": 4 + }, + { + "name": "r_arm-2", + "directions": 4 + }, + { + "name": "l_hand-1", + "directions": 4 + }, + { + "name": "l_hand-2", + "directions": 4 + }, + { + "name": "r_hand-1", + "directions": 4 + }, + { + "name": "r_hand-2", + "directions": 4 + }, + { + "name": "head-1", + "directions": 4 + }, + { + "name": "head-2", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd612a5d335c7cf85b024c32acf048cedaa7591 GIT binary patch literal 5824 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 SXBDQUaGI5aWs$j0%>Mv~8xZsW literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_arm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..69be000d9086749712af6c7668eff6fb67a2e28f GIT binary patch literal 5666 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 L`7-idB2xbY3SFu| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f1b5121d0dfa15be97a9d0b789cbdb79f3ee3e GIT binary patch literal 5688 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_foot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a6fb2a71c8d05ef05dec6112a6deff4b07e97a GIT binary patch literal 5256 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_hand-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_hand-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d557eae814aea4780a8c08c99b2c61373cba41 GIT binary patch literal 5349 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 B8rT2; literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..effbab2037d55796d60576cd062c367f5bf0eded GIT binary patch literal 5899 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/r_leg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e22421eb82134075d6f36cb60830e06ee559ddf GIT binary patch literal 5805 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 C1^B!G literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-1.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e1480d69865ccd73a96c70d51b96a6183ccb392 GIT binary patch literal 7778 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 Y(JADo>XLce*0x?v3@uP4`e)An4@LUZ-v9sr literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-2.png b/Resources/Textures/_Shitmed/Mobs/Species/Cybernetics/zenghu/zenghu_main.rsi/torso-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bffee42c20514207568ecf65d6f45bc958f939 GIT binary patch literal 7157 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/ears.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/ears.png new file mode 100644 index 0000000000000000000000000000000000000000..9966cc2ac2d83ac43d9d69f6ed1be7e72a3eef05 GIT binary patch literal 418 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 A^#A|> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/eyes.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb6412e1c3757aa7e0c5d39147b7656e49a9dc3 GIT binary patch literal 1047 zcmV+y1nB#TP)U_Z!1?)S_8 z`}uu;|NP*nR*v9ahUK2BKLEI|0W6ZrS|pY2ZE_Qfq_Y1DfG%1VwC>;Lm6O?&sPRlu z&-XUD>-t;O1fYwy9rDWnYyhx-oA*XCn-T#m>2+lwXZbfm!vFxF?T}yo?c~%NK>*OZ zH^=7BgE^C9^#eGfiLm*Z#xq5YXNt*eN{sOSoUzknHsy@)e%T_a?5%^7B6}tzKYBVO zyGDa@RYzJma@P+{6qY6m>w4WoXrc)E_Za6PG*MV{ZH)5}V~!?@@YHedy4qHbfU2~L z9nnO%G~7210GmHM7r))@ohhfL-9rIcuUpzeVgAUZsPRmGjjjJ!-WK8gb06U{rH{Zp z6p(*7k)mpLfF?@3yQhbAbas*FdU^;=l(62t-s!I6K0*^ksN#U}xzK*fx6TD?wa#14 zOrP4Zr~g&HU4W`CLDMws>JE=R^uk|w_QWCpU__d70AI3v7Y z9+9S;okJmc-Jt-|gA-0OfYn^&h$g}+4g&z}+Ml36Au~INC;fYH{qhyiHX19qg{Ox? zvbqImzM)}u@Z36a17OweH*z4}-hXt!C2}Z8*YV7zO}O3CjNj82Q7kIRq$Xe1cxK#C z&qjE^JpHDmJ}2SIw`u$`JBRP5&K@(?mxlYsEs`4d_(B6a0(-Ht zx(d<#1U$abNsFY0OT&G!O3Ta`6-S^$lm)^7IsnX+-MQ1f`qtqNw>K~#`ns_4xQLqq z2R6TeM+y=$-=t9J4JC^oM-SBOfVn$eP~({x^U0?$&Rx$_psfZ|pT7hc?lqQK#& z`2ws>R+ReRdA|(nsvE%Q#0KdZ+D3!x+zqy{fZb=m1e;%glY0!SE2{wT(%sIlI)Ylj z^bzg!2FEwX*h|BGiwy@bhDB22UHe`cSYBENfHmR(-UIMK zHHiNNppVCJSplF!yV9GkB^MKWe?P8>1*r_|N z5fk63l&EvvXZ~Gt=-@&IRt*P6E&;|MFVkZk0!(|pJC{3XvQGb8diG8N^NTO}Y-_e| z(RwZx!H|{L6Zu*<|Mz_*m-PzI?_@ofc`f*9^=OaTt;{f*s|NA>;1wS&I&Ri$J70|#WQeg3b_0?ki_J51FaR7b5;OXk;vd$@? F2>>CHVJ83p literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/heart-on.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/heart-on.png new file mode 100644 index 0000000000000000000000000000000000000000..676a641989a8a0792243f9bd7d4cb4f8f1e87af0 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(y zxt=bLAr*7p&f3^{*g&E+{y~|=rP!&*QpG$TbKY6*JCW6Tb2X1ZQ*Qxpp1)KXwj%EDbW843Mb*KOeJAm^)$r?cD2zrt#|?Pal2$Sx~j}=d`QSRTOee z3dR4`%1M4W;~&SEedC|iW+I*=EHq`3H_$|1#*Wdc$6kRK=n<{r&enU)nE)d=Y~x*d+hJ6QtnPJ9di& hz5<}2gBx^?o5$$Oi@w&$wB}C literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/meta.json new file mode 100644 index 00000000000..2905c5cbd07 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/meta.json @@ -0,0 +1,50 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Yogstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eyes" + }, + { + "name": "eyeball-r" + }, + { + "name": "tongue" + }, + { + "name": "eyeball-l" + }, + { + "name": "microcell", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "ears" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/microcell.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/microcell.png new file mode 100644 index 0000000000000000000000000000000000000000..18b692a5a99ea63a4f475dc30e5f69cdcb14608d GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_3l z!PCVtq+-t78;abA0z_CJDBs9YGu)*V;d_cDmu=%rmd}$ezKSnE^UCZQe??y`+w-=&#}D1!9$V2I++HB)z`)2N5RiMoVgA0!?`|!RTG{aDVE1Ru z-G)K!8ug5qZ5Zmd$<1y^)S3D%kj>>H?>#l2>&4m2cJ*2*^gZ5kK5F&*uaR~NE1&IZ zbidu&wvOk)&g$Cxwk>I#4C}6QTfI2hf1r_7R#?)(sA)^dSKEJfU9Rp0^1ljxIVp26 zy}#anymn_peVtt^LzfN{he87bh-k=SKJvM7?cAr#(Xm?cC$1;h9jIye$?%!+8S@!- e4uu7W8u)vkl=0_xPqGCD5QC?ypUXO@geCyzPKN^k literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/tongue.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/organs.rsi/tongue.png new file mode 100644 index 0000000000000000000000000000000000000000..dee2ed3b99fc35705f70b30b6541e506e72e896d GIT binary patch literal 516 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 D;qYS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_f.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_f.png new file mode 100644 index 0000000000000000000000000000000000000000..31d77176c96e36ee043c1f9e40a214715586ed4d GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCdO}M*cF=3&%nUUfm60Gox(|3&`j79aH=3ESH?Dlzw&^|ETlFI!lyRPUUTiJZ>vfR% zz{iRs6*g`%$Hf@FR@rJSjpC2dOqG|HXJl~VSdz)5$ind8;X}s!{QNQli3`V%x6fA6 zXlZ!=du#H(_s$#>{a0{j9}ZV$$eeZP^PXFV=RZ$aw(|3W^UsaDSS1*m6b}5XDcjG| zBEWLMPi?Y&mP6tl&tLI93^!g?>2Eoy*e&A48$KAZ?+r_(C85T?~cDNY0k)u?! z=9xD4uigLNf0!Q?ePBJ?g{vE<+qX$DFefnZG%y-4upMAP;Y4k7Gj}@u^wawJxxcga zbmpIHU@N=2^~e6abL)>z4H9$kR6nD#`5`c2oZ1!8vE`bX=cJ%`$5qRhc`w~)#lx`p z;))d@|#6i7+1Nj;11o96*}K@Qi6em0tZvkEJlVC62VdJtFLkeothN$?A3!!H**x0 z9?9COb#?w}A(iEl0UQ&03{NTIxU7}UyNSj+NF>9Ca~81^gsCbKV#_Y@4p!u z&YwRoZ~0-%!~fBre)zNATUP&1CJlRNfrHLGZ9il5I>V@c6JnYefWXt$&t;ucLK6TW CC5b!$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_m.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..53d6069a283d5bfde9f07ec578d7e67338ea8dbf GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCMF=NbU38qCj$dBlc$SgNX4zUvo>bEHV|q1U#uy3 zR=VQ#gR>_m#qtYqJmKWxP2n(9&7Zh;ipEW&lGAfmu0Gx*KGE0NY`^2d$?t@uZ(nbH zeWmEV>hqjQJnqjwU!1t+{+BObTB5hb?Sh)GgV$*o{_KD&wFkep8q^y*~-rg&ObNqVwGTMQaJFlrffe; zivY_3KefsBSq_PJJb%UaFx+@mrN8B*W`l|E$4{S}UVpu1XK#O4g8BaU&1)9u87Xur zO$xd-Yms}nU~ZAfz4za5hPB+y3)gb$KFYLi`+-AY9e4AlZx`=oWmqt|*x_Q}MvhX^ znrGVFzjpt7|6zVq^nvwk7p`ucZr>)sz?{Iq)4*uJz;=KEg%h>S&D`nq(@*Q?=l;&x z)0uy+fvxQ7)*t)x&aFQ>HAu|CQ~iv}=7+$9acWmU$Chhmo|A&&9ak-1=Dl>I6%WJW ziz`-eJQZ`DSX`^nwJ1vSjzqIX-`g5HcBvIE;a3~7K6p-2@DyrE$Dh_eKC58YnMLao4{K4)BoV#|BRupzyD@v zIDh`Uyyb^25C2Dh`r*%dZ(036nKbO71r9p%wEc|H>kOm*O^9h?00K`}KbLh*2~7Yy CJ&HU4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..4f042bf40e07391d9df13e6f861429a604924578 GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCMF=Nyd~HppMil%&eO#)q~g}wS=Q@b83?r1D?jOr ztza$5Y2o8k(JEiLsVziMB-nM)dACbT7nMxxW8G0a`L>L*#yRDkd}b+bPD_40{rN0a zUF`Q?x#DfCX?Z*ij0OyB2N)z6m=hQ_Z%y^s`1$9ZdfTq6S*&YKJ2X1BZT;r?TisfQ zuh2;0e6fiyGsE7kW;51p-IhO#t#aP-Sf+E93_F}Px|C*oj?)a$z43Zap_LdFDbv!)Vw;wWOXnA*S^Vx=# zj%xf39SgSpGwxV;VA^|ut%~YiN?qkrGP_^&zh*R?D?h8&hE4K7`^^iVqL&1;8|MDh z>+@e~`&&-I>7KyO7(GvmsYl#8_??U8n>XL%DrN(Q+=ow^22YlrOkw!Lw5;HtIeTYD z$m3Wa(VrKB6IQLs}Y^zMIhV((r+H(FdU!M!)W7 zn)^PUdpvKuaG)qe*l%-dmPdiXv@K^l@P>gxr~`2t%s19^?fjweGSq240}yz+`njxgN@xNABcvKo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9bede218091d867ae80afbc6e6e8263dcb0c30 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCc!Vo)}JLjlYxQpq^FBxNX4zUw>GY8G7w>Vus`cY zO?RK)-3rEZH8UaKm=Z&~HeqSuPG;%g^tgi)r*407ZE1Ov#=R$MF{k#n{Pzi3v~>P* zTN4GocIIg^+B!BI4h&2J4Gb&_42-y#4XsDgPE5b{+Vqo+duS-bgDuxKTvO^xW)S%O z_ulEFaeCtEYh49cawnhIw8pyLMsE4Z2AlKo{HVAhGwG&A1nTx z7OmanI^jDb#7hnG?{81%Hkf{}f2;V9j_a~g*TMenW||Sq`hm${IoAPAPzWS^tY*|_ zu+u(xW5*n(LoZe;6~%YEhW2I&=NhcdVP;FJvLt zfBj~7n&+e^%nbrfsW(5_^#8pi`*=?J!OeH`rt`CIiPC*mDHpti=~~`)Nt2mH4BK)K zm)@N&v|}q{UCEl<+dn0mKmU}OeDX>7!Spl5!{Q&E2z2!qh5%dEqGHn(#s#taxZ|08o(e0Se){PhLw&u3q=;3zGPAxTk^B?X5ZsIfp^MwUtQi{(I4u?N9+$t&Wtyzg`2M%W{PX$-TeKe-&*W`)))C__i(R~G zb3N~$pVelw&!$XLc~Q1IXK&p96XuJzAInhpK*VK3(=Flu@|UZX+E({70D-5gpUXO@ GgeCyxA{#yc literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_leg.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/l_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..788f2769d430d38fc166ad9d96c98c19ff51b141 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCc!Vo{v%hJpMimi(bL5-q~g}w*@}}68Hlv~fAi*m zWPz=N=(_C=4`(#aDu3opblh=+D|JZ1oLQg{=0y*cpa65F9~^;{ZH zF6y7GuAdZcIM?rD>TieRy$l=;IM9ORZ#SPDfBp5>r>gC@B^i=--&OJrPOrD{oHYCG z`LxZ?nHU-@`p#C^xQV#lc>n!ewU1ZkBa3bMuG3Q2&t~$R6jPt#w)o=O?B42qI^L6? z?<_ZTkl|xza1e1l*S2@-B8@+tjN7iOPv+cmjic#+=lk21@zYcp5-enx8Unn2PG;>p z{&;)f10{i55{sua1)Zvx%J$ZzK=NcF*ID0dT!O&eva$D9>=xijn{q!O~3F{$6)?>-|Gw= r3LJWp2c|v$vs2K{##i-5?r)})t~FUclSNB_>4U-3)z4*}Q$iB}Ez1U! literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/meta.json new file mode 100644 index 00000000000..1463c57a060 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 2, + "license": "CC-BY-SA-3.0", + "copyright": "Original drawn by @robustyanka on Discord, modified by @pspritechologist", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "head_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1ff1ec9cf0b2332d27d4af863375b326ddeddd GIT binary patch literal 737 zcmV<70v`Q|P)-7SF9KwFTuLpoJmXC!Ha2%)C0BqZa5Tdy`Ac`V*o(IQqvgjLK zKwyj^ilQ=~zRT%!%E#;Vy4D;pD95!t45_rCCcf9U{;vR{C<0@w zF^8&j0TunKc3NePQ0e(i!%}U9D*8=bMs?j1%j!3~RNnQ{SsQ?^MI`{VCphNlYXi_# z%d8^SP@GcL-)R>Zl32QGYbdSN>`Tg07x-%chO#?E89)I3=mJLz0F}*&wqX_R(z+jz zO>Xa$R5756gTL8TW#X+g2YgbN8QF9f=*>b%N|_cuZ;c$%s!??gNaHw0k|f!o(k~+P z^})$fytg5Q$X-LibUJNy0i@&J$|b-#$Mt$e7=}oa#29+3RLX$c?S}1kn@7G-3azDf z(^;Te0tmw}e`nxuIKcP)LH;V7*EIcOgq{Tm00AHX1b_e#00KY&2mk>f03(!tpGFp( TMrgpu00000NkvXXu0mjfoE1Db literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..2389c30aea5458ae633b88839ed9f2b51163d25a GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCc!Vok#Wgx9s>j8eoq(2kcwMxZyDw_8;Gzy_#ZlT z`yCZwY4Harn5I3et1Fd$_$2enNk;{l)IFsq)Mu>Fr2u4ZuP23Z_9p9^4xy>>MtI)4?CGB zsT}-T^)}}3#O?p*KV14=TFEuABc8vu^KWL}b!&>+IU9)6moXKbzdW7O zVERe^N$h{7E&Rv>^4f>@48P{QE8fLy!*k(z$^6T*4T>P&CVV{4=jxpJ%;ZpYYv)d~RE zD@RiZfyH8>eBTEE*tU&+zt3U=IG0+jmW!00&*uPuN~Mxa4XD@aux&fafR`63Wuirp z0l;W9LakO~ap&bT#WYPOr9`=0hUag}?yXlh0TheH zf8R%=5nR{RGF}Mr(5fMX(1zf;uGTd8GXsjnB8I~ulv0^hcFy_TAUNk*fnv8_j9m5s z_x1#lv03#D=lVOHPCA|7U(RLSFx{*FD@)~RM*pMt0y+Vp-QXujKQ#c)?*3BS4!@F9 zy81I+1>WXBB#-O*%M`)9)B#!s^Omxd0R$jJ0C{R~QURcIIPq*)=XUAn)}8`Ual57@ zjsbBT{LQX7g*R3WxTP$u)1X{5LXnYq>Kfm26-c!PWZ3}SJ9e|#Onx&20E@-q>itHe z@q>PrQ{Xon-y#FjSY5O-;5^djMqRs~w1i=Z-EN043}G0?O&fJ=`qDLGGMT6#2viUR zs?}<#%jeN2Y3BhzN~yZtu8OYD^~Kd~=o+(JF41T-P%4#RSr+#D{r|xXBee`L3qdWnx62PKP{3oldVtE9vM1 zfa5sq@_rbGSg+RrfNHg>U5FX|YmCkV2mk>f00e*l5C8)3q4EucqAv)4nq?LM0000< KMNUMnLSTY>1XA_@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_leg.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/r_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..f424b2efbcae1ef1e98d9baaaa55659971fecbdd GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(~!XIA!A2IY1H40*}aI z1_nK45N51cYF`EvWH0gbb!C6fCc!Vok#Wgx9s>gtr>Bc!NX4zUv-kI{au7MTzj(8x zmi&Qphc0!UJ9N!`f$_zbLl**n^6X=n%Go-1>Q;S+#3WZwM{|A$)w4N@ulIg5<9^4X zcYmdVV&mu8pPwi5ohaJrGXE`qRUV5211@B{x!+3scwx`wmnjS@Yajovd(9VqKCx?&fotFm-^Py>Is2+}1z6S>{Hxn@|2^Y@2-bkLcAIpX zpI2U5dcptll{#LA2AlI6BXk7X7BVX2uKDNus`K@(Wtt7QVjZ&ozO70;UAFt~{^ie# zb}}$bQrXC_aC+0Zmc2o*UZ$^}%`|D*O3uR{_Rrp*^;O=wKZq+evQ9M9a{l=;z*Q)>k1gA+v zK~#9!?VB%e+e{e1e>Y7r>IX2hw6HEDETA+rL1vXUDZq9?6qJ301Vsi-4JH*<8nS6< zCK)xPF|#H!e*hz!+zVD)?KV|&mdmua_efFdv(>x%-Sg*s&lBpaEzA8o;ZSw{0H2y}iZrJjUa(jG~CLEHMm&(P#u9hQr~r=RMD3y!00MFGHKu>hbbidqYl%X~g>CJ&J3Ia!u5pU;`k z=W0y=AWc&M27^J<7RPbZu3D<9YR0kO?|J|JJ*H_k?aG~?=XoMcQ{p&oK53fbd7d~w zKY#Y@vF#tgwr%n}XTRSAu;1^=^Bmi@PXl1RUXvsVX__{lBuTisx;lvl42MJU==7RZ z55th*a43{V0f5WPOIh1s6h(|iBQ7p3uq;agLN$QRX2Wv1WHy^M5LT-dMN!c2_tk4a z9LEGffN7cln5Ib(1jKO+z{A6XQUHU&K>q0L9(>5AZZ;dW8cF{eRTaMP*9&mEt#GaK_4fL5K{1_9MO9UVVMrXu zA`HWNPy!H7wct;~;4c6Q+qOkL*)Lzdh$qoN9O8rz)c{ddl>iuz$Kvt&=&St#Kv7kd zux-2P|0FL%yf;~XJ^1tlAzJGUjr*0nr@cHxS-%?){JHg-W|F541sG7V! z5YYfM01ZF`IHI%)gKf69iVj1y1{_;Nn+lQJ+uMI)Qf-dKm1%$~mDMJo0sJEX^t-@c zlD5b5+64YjQDD7Z(>6JKQ~)Y-0zU%%RbPidfBOfvChPiu^Ye2qE-u8=K^)r&uGj14 zf4i>BcDt295HvLk*Vor#GMThKEqZgv#3z%9bR36%zfW0~>~=ePy`BW5>$*xKfa|)l z*XzmMZbw;`^!t4r$6+#=NW(Csat&B47Gzn5@B2+IuFlP!N{XUjwOTQo%}A1j-EPNp zI^~e8RBH{WCvO-=)AmwwM3vNi)+XTl{y~|kwz)xqAZV_WBmuq`E1U{Kp6AaBGM+9( z5Cp9?v9$&`j`LF@B1saWD8jNVrRniU-y)(YYT(ym7zSloindzNIx(`@Y-GRRr`zoU z-_zrkWigx0$g)g%jeu#IvMfthtJSkwp)^hDcDpjqbD`7;0wPHgnIs8iSvF4a(GJCQ zI#qs#QG0ve_n(n+Ki*gA1ncs=+62CR`-TwWpfR)pU|E)M97k@qTkh}g zxxc>$zE^J5B{Qdxdg67G6lgX?Z5^@DzZ%o8!y14FpaEzA8h{3%0lZTA52ABh6?@6+ Q5C8xG07*qoM6N<$g75NHga7~l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/torso_m.png b/Resources/Textures/_Shitmed/Mobs/Species/IPC/parts.rsi/torso_m.png new file mode 100644 index 0000000000000000000000000000000000000000..df2588b562d64e65b33bceb18ea7dd26889339b2 GIT binary patch literal 1232 zcmV;>1TXuEP)>ya1YJo) zK~#9!?VGV`<4h38|NC)BTp$miP7rmr8+R_;x|J(+fdo=mP9a=5k6>3ug=H0ilmS=T zXK+A8aGF?M21G2WaX8oJlnc3Y5xwyE%SC;?q#YF?q z05kv%Km*VKGyo0Y%gVQXzwrJ0cl7&xPANrMmM~2duImB->GgW=K06!^5k=8aCp;Vu z0f6`WeL0pS2>_5Nig0;(sTKesg!g(qbUGc}+}vO?nc(#F6xY|+oKi~W^SM%sO{Y^1 z0C}E+F$T-BFr7{TfEPtUlzV{dx+sbQ05F+M002c%z;#_vN|n3pcsz#h`(TU#fP7sn z7WFKFmzNg+K&R7@V`-Yoan({)m7K?Bvq7`jgk@QBTseSU2p^vtjmEq2W3PVz@H`KU zF>E#)0KjImf#W#vJP*s|vK9a&%QC(@kYyPFkdFXVh_Jly2E#CrBng_$W<4I@I1cZ2 zyI_ogQVQ2~v3=$Mh-v_i zzK>Vep0m^ zJq;R$0mCrhd7gZKXc{~y22@prBuS8_DM^w;(7G|JTn0>c|NCKtu!305kv%;16Z*H2Ayat)jzF?Ey#MS{_mf{>!p&C8*2; zYB(3rOF#qAdjahM8o)mb;BRDsLzdl90X#oHqb{Jo(sc;*Z--9k`uduS{(wfKfo``; zb|-P{AQ(lF{M)|oW3^iGIF4nH!hAj_wVVl_oSg8oED;0&R;v}Bo}K{wIHuZKg|u2N zWnSR>K5w;J@?5apZll}nA`C;Arir(=H==Y2OePZqK_D(8006VuO!f@aAw^M$`#@w_ zhA<2f1cB^VPzoT=b4gpsXO|J_1_OB!u?vDy3fs1o-VkpCE1{H1_(Dw6L|K;VdxRKcyxnd?Tt!=!1>3eU z8jXL*=o{M0$mj?Q$_9j` zI;j{JI$AGNQ|k)~I#TZWI7sdP0$(jrU6peeF9NkNmIV0)GdMiEkp|=>d%8G=XiQ8_ zkoe>fATV`3i%3uqgYis6d_zT2jLeLLM2r#=f(p|UzRXa3v`8s~Bk=r& zS&cVMPDY$u5#_>=CNnu>^`ZrfgeGy#lu%YpF`mJDA?IKLJKuCZMh1r6?z~=(pQ8AH P)-iax`njxgN@xNAxPC+i literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/adv-retractor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/adv-retractor.png new file mode 100644 index 0000000000000000000000000000000000000000..7df819a183ec39bacfcdd30b7765a0032971ccaa GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`*8>L*$jIpE8`=vC$_9j` zszon#QZX)cv{vnXG@Np)u#8ihZleC!^M@t5*+_1pV zB~_hy@^w8?adlNi#u;g8o1Ky!4||C2sO-r)-7;kgYp;M-Nf8e#D-Z9(Gy`dc+e$CE wf-@M(*p-=M)Z4sgO7L9Vlis7Q!p6kFa6X;4R4XuC5a=KVPgg&ebxsLQ0KXhhH2?qr literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png new file mode 100644 index 0000000000000000000000000000000000000000..3c2e8972821ee1557f396179b189f87ac8a00b79 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TSI zr;B4q#hkaZ47mg;KVh`t%s5&nTi>Bj9PljkT} z9bLrHq+-12&;PEHn{z8?rZOAzPEcl4aA$JpV`-4#WUv%sC{kf~;=yoYA_GW5J;q`8 zUER-r=7d(3Tg6YE`OiFWosKW$(WQU-+)A(nyLu?AxF^Uqzu| z{(1&wt)CuW8Rte4k5yyWlNv4-C-5E{%Ez(r8^E+ZJqlXScPtC`Yo|t!?lX5 zTzo>+&x>!1)>pRdU(29>Fmd|<^E6hQZx>8CpdQ@G`1V7aw|Mcw$H4Gq@O1TaS?83{ F1OReqo|FIp literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9a93d2bb5fc5945ef09d4860560faa2a5fcc993c GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TRz zr;B4q#hkaZ4z6S}6mebuf%}KSuFHIO9ikDFG8px89wc+_XRO}9BzR}{%(;9w4th*+ z5D=d~^Y@)Q)n+q&?|J(f&1{^m-;vBHaGXh@kJUkjyTL+?p-_k6Q3S)0jSL_O^_T-6 zc4w{Mo_1mB`=Y(M>dS4zcE>LN_rFmu!D{yQ)NJuvyXzu37y+DX(v?*EpZYhPbZ z-VhsZKQY|ycyEK6LhkkZXOjZ1pTFv*+np7nnDkZHgfa8e&z(C>5)So+JJ~aT@=G}8 zvp(464oj@V5e4PPzwD8$$LTJhgkML)il{mlyfV*SO)BTI{*G+K#5Ii~k$)|Jys0WMLADLEfD1G(n8!(6&JYD@< J);T3K0RSAeq1*rf literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png new file mode 100644 index 0000000000000000000000000000000000000000..f91961a9df3aa8347df9b2bd44a5ba9a56e26d34 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5Y zr;B4q#hkaZ47->NMcV2QN_Wh4mk{uOAbKPzT08q9b3{eM)V14hT|1>+!6f)bcgti; z=P$Y}Id?qM${wBgU;k8K()WFpGkNxGaqMGhkl|#o6k;e+VR+)faAG3E1Z74AcP0m* z#GK_!ReR6G>KzxmH|6}t8*?`+UR!;0z9mcef!!P*3;)e2^4Xv*^FQQ3@+Py)<+pd* zJ3roN(RfDo+wN;g@iullm~swXJboqD{C@8`rtZse5ifoyFoyB|J@~===g&{4Mc=Lt zPb!?%a^Yj3=!Gv&dS^W8U6H)u<;m%e|6%sybQn}Zi_@bvU18ftNheK4y9rau*>cYQ znf3qoo~0~5`fV7N1Qy85}Sb4q9e09WR$i~s-t literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6444d084235a2774e056cba05235a803283dfc27 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TSG zr;B4q#hkaZ4ssqc5NWGF$k_5~t+L1w&N~aaEt+01$jLYqvbYyA3GS)hV6MBvQKj8O ze{1H_jZgpY_paus)Q^|TRLtinQek-F!Ej<*LW7)I-Mc< zTkQQx_q#TG`48IZ+zT@I|I3c#1e|UIO8oS6I5DqrTau}mz^3#CXCr!9TV6>P6yN^+ z&+7ZXeI{Z8tI`)(l+UfMkC)=+xNCeNY|VVWgA;6-bB|t17l8WuGu!F|H9eF0CQ1Us OnZeW5&t;ucLK6UUlAuul literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json new file mode 100644 index 00000000000..592796b3e08 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "adv-retractor" + }, + { + "name": "adv-retractor-on" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-left-on", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-right-on", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/bone-gel.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/bone-gel.png new file mode 100644 index 0000000000000000000000000000000000000000..ac425d8014c65360682ea0aa8b90317352a0d87e GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyW&u7St_Kbr*uH)H&!0bgdV12* z(u}HGl%m34y?T}K|GUqP{}(S_R9Sj&(#<<(zkmPv^Xu)6>y$j4_T}aLnxeB9XaZwN zkY6x^!?PP{Ku(pXi(`mI@7q&`LWd1FTmqAsnUqz2|C?^=IXCpxnUvYO|88&lZ`b?6 z`~LT2PQFE|55yDhxb8F!YrNYMwb+Uy=6tYhvq7;rH_H|8kn+|8)t?G@4o!akA)@h2 z=Rwhf<@W@|*^<-NHSoNPH4s?&PKjemhtxaOdx!s~e`jz?Wfc$Je2ow23IyIm{0DQOrli zwz%2ivJHm)0bg1?=DAB$C3^8+*rv;uXy3nq+aN=>s^RNbTeZcPMGB|>70;GylzXr^ zI&pXP4(Eh3$^pzzZZ^FAqxHqAy5F=v;7EXW($Xblobg=0;JT3)|iX zDja!dD3M^d&n;O#u<8D6YnHt( z=UJ)IaQ3sv((7cRX!5d2^yc4L7n`&-Lah2vZC$@1EAy0p$G;za7tHUZ;Lkt+ z>2ofSK5)iC=)lG^Jb%K49AdAh{WmglZ$IF-k3Ggu?vMMlnT*-F@2~r?oiH_i;D77c zHpaBgaqDOEOvp|zopr0MIn4*Z=?k literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json new file mode 100644 index 00000000000..48775ff522a --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bone-gel" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/cautery.png new file mode 100644 index 0000000000000000000000000000000000000000..f82e7f12a0b92afda86e7d8451122e20e823dd2b GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#sNMdt_Kbr&^NRX2uqcAoubVS&X48AEpX;4gzEt<{t ksJ_r}V(|1{=f5`m*WWRn&EcEe1hkaF)78&qol`;+08DOSA^-pY literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc6bd69467f0d5280509af48c389b57b2f07da5 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R52 zr;B4q#hkad?6a5xMOr@!pI~d+8$F?cC5ThWGj-yjAf01=IYvtaH!*pN#x#e{@==Y* z;JCqIl%Vbr_GohZ5qy>5Dj z@t42;!*v%OKJWYVe)cwt$IE>ftF~Xg@P6yXs*HoXIDT9CoOSeJwDRQ4v~}D!clP}k z*KhO4&14K&m;G>=bzybN=Gzopr07}EBt^fc4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1cc9c4d803a7ee8cbabd8049441b5b1f8396f3 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4% zr;B4q#hkad4852g8CoBjKj6J|`zC9XLetcQE;;|(>`C`0t_l15 zeT%Ma+Iw1xP1q&3?7xi3z2CAE{DLQMYdrRDVX32lX8C-@$IbCghW0gr(!05S1Tjnq zCWsm?@b6grY5%u7*F6gwp0@Mf?fSRg=$ZB(@q*n)?w<2ZO=q)WueSfZH>F?u?p!^Y z1+R>mm#>xD_uSb|_V`Ecf>l<=57zC!FE_R5@6L*K ztDir=O1n-GF-h6H^P*bxQq|r^(o*L7hW0WtI(CLL7=gMNOM?7@862M7NCR@Fdb&7< zXiQ8_kYHWW5a{9Q=^1!~K`%k*5fjtFwx*`0W0|ZDjMpz*xR4OMe8GZ_js=m@5)vsk z4NQvb`~(FR6%`oWjte(Ac^R?KZk;-HcD0eYfdT8cEjui@xVT>5vn_s>^No$IPvN<7 z`Z^6w&3N`%$2Z7o2wc3h;>7Dmg<|h`rmOY3-7`)X;0xv~6?7=gY*#w#%*@bbr{O)J S!ekQAfefCmelF{r5}E)zi(bzF literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5a065550e90bf9f235d8226c0587c9699d3317 GIT binary patch literal 666 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S$f zr;B4q#hkaZyuGCZMUMYxv~S`NtI2-k*Am3CG>n6*>DJWQue_E%%1&lwZW5W&#n0lp zVatxp?hCGhv8Fr{@z#NxHf_ASqC4+MzQT3OaHhzYJv)z|wcLMJ<;>j4JNM7oS^RJg z6NfvigM}8up+H7~KCXs>5Qdh;ObRlh3=dZ@fTeVp?v?RNSmpiwBUC83KJDct7eBs& ze~;%*uGncI9`Iw+eZPI{^IQ0iO>LQdM$e)^@4>Gh*-r%iE<5u1Lv6BT=ccI5yA0%_ z4!t-sY3HsV$(vuiuUPrH-j4gUvV+jK{Mo*T{{PARWgGRl@bbkl@d_d9{g=(UC*7-c z3$!sfxQ%0(|MwTm*0vm->1e%DK`0~U_3W&g8BxdgZSQ^k+ahPfKGrHWwZbXCT2o%h zX9P{T#&644GVj>M3a|QIcD7rNS9b4V%32+_V0Eq7>g@Xlrj~78vtBem&b+i<>effA zdzs=FBi2X=KWGhQSZcHM%Zq~bzR!=}<0#p;Zr{xx*==)cw(RLJ{mc2SH(d}7gmj*N#4Z4aa&wqO3r_Vqf1ZjuGn(p8>39OyyIWyi=ULzKb9!7 dfMW7F-#f`q58{q^Rsa(lgQu&X%Q~loCIEm1C+`3N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e064d10b1231794e3e09b5c561e0b642383720 GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|S$v zr;B4q#hkaZe6xiEMcVE={C9AS;iwDby*YK2h@**E8wca*me9(&>!R4$AR;wo zg>>@5rDwfd3Ie@$8?j6hxyxy!?JH_nqUiC`e!}ZH+^scdju=dqlsR9SFvG#9;GX*T zb3Aj5nVxkp7`U@ESSm4`5oAp0<6tOuVVI%JbU;Rs0VMT&JyY8HrJ{4q@2ztaU|MuN zUc2;}(!R7l-jMuwMiINIyV{F>s`Aa{#j8WOH>Fs*ls_nuK(hVcOmMjPetU3N;L4h&bjB@DGFM*mX$L*1T-DYUwp|dXj=WY zyAw{m)ODo&ge`4k{)l zM~)t4IG4^96cof+>eax#VuyyN=1z^ntP*n@xMJpm8r>mdKI;Vst0L7b8FaQ7m literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7531299f2a4973619455df6e2bb1919e961b3b15 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R57 zr;B4q#hkad_Ie#okU08Lc}L`tNA7|wg_m4omNa)idZN)JzHoB*f(N1&FCWQrC~?&3 zEaKpEWhva)EOKz^ijXDeE}9DzbT51^ddl*@YViC?@srakE^&Y4VZe<9vOj$K7Fx8$ z^8Vo&TX&RA_|o6kVEVqiq@myuw|8*HmDy7&qt*RS{(Z}RO#M_x;1ulzU#~4YtHnQ6 zz}U*+o42ib)RfBU>HRZi${s%cTRh2yy<*48<;T1ChMxK>_3roi`TrZrK8qSIV&33q z^X-g|J)7b@Mg>ABi6?d4v1E7l8!JtPuVvZjvzdr0>^X5DruVt1*+s^h#ZjJutF(7} zzAe}*z#*DYm1ktTDeQ5*W<$HS;+hNV``>fb&*M4}2UNX)o$dD}?T01*WtN^Qcqkdt z@Zaj=nm2bF{r2sDE#EwMQMs+da!H0qKy;G1hPkpauHkVWUv%sC{kf~;=yoY zBEtk_Mg?~!hd!1Du*8Ge8!Ahl>wUZKCcqJv|NgP?*H?aPX6j~_MV0ara1GR%Op2>#{JYQesmfm9=$GoJL941& z#RBfx6$buGW8FGS_DSo}FR!Q0@-|-WqjO+Vcy-N(KVRm(-rcCNEIwkU``%gib}`E~ zuD&d-lfU*G_vz*}NxzOTt@-;#Vvmi<@8l;gV%5A?7(I=DB&yBGHqeHI%R=!F%sFsgQu&X%Q~loCIE@KyqEw0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/meta.json new file mode 100644 index 00000000000..9c30d1b15d5 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drapes.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "drapes" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/drill.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/drill.png new file mode 100644 index 0000000000000000000000000000000000000000..1f141fb217ba1f91d86c0e8b11d65ee85f05a685 GIT binary patch literal 702 zcmV;v0zv(WP)AuCLZc!?g<=uJKn~tKc+9~=51u3k@vP+FK`@X| zqs7)hO(BX{s}Z8zZAz@ttd+%hFwl5#+HVtd#R!kgJQGw+}GW+s4%iHV8H z8e?f@kk{*F;c%GRu~-cGd|sR9_xqV32uRHQK&Ndl4%l+o(dW_Teq5N<^*MJZ-$9wa zMQe043LcF{St^x6AP}IwBuQA>c$h`bdq_+$7(^%(!ov&qu<7J!Tpt=npQB5+#?9MP zICE-0wM9|Jquz5|EL(hh+0s!9qVAIKjPDl7WD;(-n}YGhISz+|EdSnFw5q;0u-onA zmt`5%@@sU>*npt`7UYU1g133_(Xp5C>~dlvora~6D!Q>-Wo1>>pCX0!NO?nd?d zJozJ$2zZ9_6&JP$$8f^=2|N4u7_Rl9_?GOrD&UJaNo8nQf=ni3QG;t|AdyHwQGTBR zwG7PX^P%t{2dDy$4-RT`1;L?PYjo_F2p+uY3^dDj=OG5~Mc9=%_4{3Joqzi2GxTij zq3-`7E8}9EfY`^apmfWmTJya`aap*tBhf+4QL_uZC2d4HbQ0K=YZRIGQKJs zZ4;m@Et80PR$j^f!oWU1OO5B~SFKi<^!_tDJA8>5jcsWL>Y1G{k)3!_`0Kc~38;s^ ze#JS-(AUyiP=nuw&9-mUc6pDGJ$g`B^*_>90lQsRdO11#`L3~2M8lWxUl2u6XN_o^ kfWqAJA3WVKF7}1f+`G3u=H%Xg7w0caly>W?uSIBxv-EBrkzZ*rgHaYG9Q@q)~ZJ0ap;2ahk^zAQp#(bcS_ za@s#P=N5(QvBZeyD~fN}`E}{Xyt?iWka8ONQ^2r5ZtCz0Z&OQI{jY5k= zVFA}bfwqO3(@(Elw*Ky?H{XtL{5rSgtM7&K-;eJ6tJ=WzVQ=-F^81Vav*HXFXpl|d zmWaG#@Xgv+<)6KR_=mqAe_olmgWLAv!R!7XUMeS4vRra|q*t?}{@aTG3mRfR|JcJD z9CK*KzF6j}NxAZeJYx=v6fs_XmA&5M&eR&a*P;Ge2i$Jj0Zq7k*_h+7K(8CKd7j^_ z{OrK;Tf4srP2l>_dnES9#ff*eZDLp3u(|4veS&l3^umnvhIEy8Orif7Rx;f8xWl^Y zALA$24<<^v+(4n74VOE%R0o`Rcl$d7ck7#dVh)YKm_5R6!H}zYhCl6SC7liS{p~V#N0Eghf*&U|*%t}uUz*1>tNFpol^nLW zy&oIOHBAWq!@h`PnZm(lj-!th+hg^&Enw8#E83sD@4*zI8E@O>a`N2&?r?)w@{sxY zb7#^%pVKsOXKAohVmKqnn9#?;Q0&4mLz(G-j3C3a4hDnc8VT>N&RdlH;jQtbYhDcg zoZ(SgE9(|FeCI!(U}oQXw@xsT`(D7xkPwNs6=ACn``Pa-6EOFgfpLbJ}QRqc%{ zNUU=F`|I!3?m!2jjvvqEU6n037dPB{DD%s@Qf5x3F`n-K1szTp0Jo)%wo*^)wQDpdf{pIa5i@ z|K!qRujIGRWC{4TZrxp(dAId)L}ahekK6itZ!+hC1y3q2e0Z1o@xNS?bIUYtY1iXl zw@G>*$hhEe@^#L?Nt++3IWE(5sAgAd?R%YTJdI)QZsG8C_k#G}-F4d;iW*8>L*$jImj3(BhYJ_-m+ z)i<>Fx$$2uda09&aiODiUr^9b>#r3+#f&9Ee!&b5&u*jvIpv-%jv*QolM^Hg6grNj z3yC<08gM#=9-6bRLn|Td#=?d(=_S+WbSzTPC2^Gf)g+?doz}!6g%DYA~Z?K~{no(3}He5e-@iv-(b@yFE7EurM>hz~S*` c;|UxLENA)DPrB4E1v-Jj)78&qol`;+0M0l|;{X5v literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/e-cautery.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/e-cautery.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd5b0e97c085a12aeb4ea76fdbd621b29e09f54 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv-2k5u*8>L*=o{J#3(5wBrKd>;p?MapU~*b~tY)W}#81OOXn`1)>%+}UR(CDp*fF(iK}Mo!|D3Kx4jv_;%trGs1|+j~ zF(n3avWBoWI%;q^IlBhNKGkVi)!?ba5!$#aOK=raa0oBY?B+nz0(S0&S{B;B7+TL4 n7s{_lFq3wz5hGLVc(PTs!NLM>`w(5PAM}?ac9uz zX9$pETwufGP|4EpiGu+sQ5&-`z)1PEdPa_qb&&Bdsf3f#hhH}8TOGDK5L0>ZNMMiO z@_Ch4%e2CiwEs^HZJ7FLPvy5Rj`w|uyHl)hIQ*Sy%22#J<6Zdeh}C5ue~3iyzj%74 z_zu~K^HL4Q(LZZmsHqg`&r-U*aD9B!e?e56aXN{4+V;Ciw*S4KwsdZ`Y(i1Zp&fC8s$b3|zKs%j_}j+m?w_xd_mnm~af@3WyE(LD!}j^+ zhwC(&E>!RTb~ta!Pn)I_VjNM8#am{YJD-+&&@QArA*Py(m!)n3XT%%T9~(b8@y~zq oID`u0`T2P-r< z_*#`xCWmQgiX>e)deCtlTj5KwYClfP`~Mk>CdcnMS#Vyb$DKiQe^2 zYuV@azyE7f!7t_d*CW-sgHdJ~^Vh$t0$2WLy4-=oDX4DLVi%ah8#A%8=@g@m*c|l$ z#uMo*^LCX7TWZV1uYR%X5kt22>T~?BG9Fysy1RcB$Jx2M=66m!7fkwoU%9fd;g8!s zE9L8-g0?KY{qoN3BcD06q802<_y5{&%p7(6Se7$r4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbb5332060f03feb501816dd5820248a9a81f37 GIT binary patch literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnC zPZ!6KiaBp@*?S*$kU92IJwPNzWK}n>Q_GGm3U{x##vC6=T}->@xDD}#`EuUtzIRcUmx3iyTI_bn$7RLQP!<&x26kkWq-e1()%}v`|-YtyB_|Gd($60GFZHzopr08{hY-T(jq literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fa95ce487dd4d157f5e7b837b95c5479d8447f02 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5P zr;B4q#hkaZHhLWn5NZ40(7~}tV0Wuin}w*#?5+oT`xu z4z3^l+Fxzm+HKLdCbMv==!S~A2HSkewG~x!CNdn))YzT2`1;-rAN(&=zm+^9$yrgo zvwip0PPTiY%d2CvIDaMoEql8^S>?gQpBH~|xUYJt@?ycAAD{J-T#kJ_mhWJ|u_l3G z&ed113?!$06MIp+tkeH5$F!dxB3I;y8o07F$OtkNxiFj%WK?j+$x)xmaJP8B<+{&h zZ6)XTW-Sr=P;8fQ_kQ5!S&|xAYtQ5#c-6HwCZG2X#tQ%d literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json new file mode 100644 index 00000000000..4a4c2c11d67 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "e-cautery" + }, + { + "name": "e-cautery-on" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-left-on", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-right-on", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/e-scalpel-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/e-scalpel-on.png new file mode 100644 index 0000000000000000000000000000000000000000..04a27c34bbb860d83a26371b4c4bea8b8dcf3924 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_4w zw5N+>NX4ADGxmEQb`Uup?{F|^qw@w07Zs=I35#Y&yE`s<`{2gO`XeBeCwuGBg9kwy zy1kcjxMfUXVYw~vCornOqOyFi)a(eyUfm!2oZsD3E`LAy`=Nt-C1-5lXkdV#Wx@`Z zFZslVv~Rmyrf_0fa_Ii&|JLk0Q@i(_vdf~4{Mm1Ai^-c`wMa1!TUb@e&iheEVul2pL5SGZ>;`0S@qrNoc9ft#=G1!R8{K@p7^2t}s;X;5XuG zmTDJRWy(Hzg+#&Q^H*LxGCp_t{f=pmm?JbLyI2qO@dw}8cKZ512b)tmbDCDfY@ z%pfw2$%}2nVwulu&;G?_uP&i`Ng~`P;lC^&nhYmObQM4tRL8JT=FzO T((h3PjB5r@S3j3^P6L*2n))}$mr-B+N<_H za#Atw3kveN@n1$KJRmIfNV#XBqqSP}QZdKPZ9pxIB|(0{3=Yq3qyagJo-U3d8WWQf zBoZA?+&FRKNTg?Az|9B)oe2x?EUkR@#PhPYsjjJRx>R~@QiA?>12Z#|LNPP3prD{G zzLW$F{mh`CEtWb5!F*#p) z8d^Ut+Fh~kSc+nJc1?wP+Y)YmNw!1C3$uyH*76_uuji!Pt%DTj_;Y*pL*Ep^pEjr8u#D3XR2%d z|K#L;Zn+_-)$A2h3hVl8)f_vk>uZ1NE^GO})4lYmyT~@~78Wh7JqBjC7l>hZA%@$9 z)gKhpUX{InuX?_YtN4Vg+wVH-hudHMdwNB`fKXhAo+Uo~S1o>O))FSC&Z~+6)yz*itd|H2c&*`Ue5JRb@|^tZo5I_9 h+maxm_JwI5V{c58!JJA?7GTUVc)I$ztaD0e0s!>!z_tJY literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png new file mode 100644 index 0000000000000000000000000000000000000000..358f397c5e53ecdee587622ad481073fc1912431 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vn~ zPZ!6KiaBp**?J!i5NW&LWbbgr*Xm_}i@-}Ii-_3A3LJW`RxEy?FDO$QBFJ*^;5sSx z<4Ubcbz3YtW?%EOinDcEFr)5HP2i;OHr~@t``%Mme|X5!S;3vPK}M9JD1_leAR`86 z&Kb^#Svs>;SE;7&-nYJC=1tb%y}LKwE4aYIsb3;$U}lrGOx>$M`}s=F`+h5TWM%P+ zzhB!w@BID1hCN^3ugtx2%GyI)sP4$k<3Ij7p6B|;84-EgXsw%Yz9!%Mi+|24gzC)H zJI813^?|dZvhL9JV}j4-*ywTZ44JlHVd?%q31^ajiq1biJNEidmM8vq_h-*KTR-O)(e(>{tjYI+b`?;KRd_hh{ffYesY*_ba(gXwD-Tvf_o=BFzxx!JWF!IwDLP| ze+A5MXxaXD|MAu{+A16KU(`3`{0#rE58mtUN>zT96t>B}Cc490DLzpwZ+ zJG`UzzlUhT<@$cFOP{$Wo@ewtFRZe6zg&w$9~Xn=7p6LfKAo9m0g+csfN{y->FVdQ I&MBb@07nhd<^TWy literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..70a64d2b0e6b8b6718749584a5aad177130838d1 GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnE zPZ!6KiaBp*ZS*=EAkpf7&{IZacW1Dy6-Q7E3;W{D&65>gykP#p;8)8ae<09RfR#PH zw>eppl|9f~eS4Vo&bVssMu()?CY-94&!df0p4|Jay3_o_e`5uACWk(j1{qEUOCg3L z6^17s3@0WsOi*S7N%%cvd9!BC?BnO%G+%v9W?gf2o6qW>GC$ictNB%UuV9e=_5A~r z{a2|^BKQ0&>n`fdF*B^LG%<2^IB@UZ#+Tdoe>CN||Mq*4ti4Ghx%7DknkU`Ujmw!R?mr?_uxW4Rxp{G1p_W~$2e|Ef=P^dVi(6|^AYHz)&-$Wz!eRHd z`bP0l+XkKpPIco literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json new file mode 100644 index 00000000000..701445e8ab8 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "e-scalpel" + }, + { + "name": "e-scalpel-on", + "delays": [ + [ + 0.1, + 0.1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-left-on", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-right-on", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/hemostat.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/hemostat.png new file mode 100644 index 0000000000000000000000000000000000000000..951d323a52fc4dba01f24877ccbee580d5cf50cc GIT binary patch literal 261 zcmV+g0s8)lP)Gw0m&Em7yV`{yPcmR=Ie&$yGZhM)g9kI}1ZMa&x>8Z$9< zN!%;i%etto-)Ft!1a$_&=)3uI=0(?v**Dk=e{B5`-o5J8wKw$*N-69&K1_`7Dz4;> z-u(XM#0|0ne|O$_ZR2#pxu8S#0jtb6F^NZO8jed<@iy5oHh@r7gL%xCA}?i0(Tl)< OWbkzLb6Mw<&;$S}hmG6- literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b83b2b02c0b93b94f7fd544712dd26266e0f8be5 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TS6 zr;B4q#hkaZ47m;&h_wB0x^PgsWAX0k8djAI{EB>!G`oWPA3ZUYIdU{GW{#{?XuRTs zkW1IvPW-R;wpOi-kNea%UGT(2h6&1y3hqn}eJl+!oD7yi3`HsoPdpev5|4EgHrt1| z?(-I~-2Qvj>68LrY zfWYTcp$Ap(yLFr=Dsx<$yN&Jb`r~g^4m54Q%W>7Ptk`8TW1FtZk=cyqWg(IeI3_YW rbH9sab=o5-QN%aZ5$Z#}y$$BZn+k;;y9GW2!<50()z4*}Q$iB}ml%(J literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json new file mode 100644 index 00000000000..afbaa9cd516 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "hemostat" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/omnimed.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9d45bdb9f44531cc712ec31c89eb37b005ed18 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|OJY zr;B4q#hkaZ&U-UCiX7kHRNoNWv>=$pk!7ya1imyW*ZAoBP9hQF4wK)N?zVsa@(tI#dGTA50_vr%=Ux5tIYw{2*3?OpuReGp z$e}k)uO`1*xWrt1a-{2IE89CiOO;yx3SV7u_xI{$Rpp+we+%{V-xs*5%wABgp4?oP zvtQ7XOE4k!zy}o}bN&}s*7rUtdG>rl|M?Y@)ceDNcC)HmL^5ufa{099{~iAEGpCgG z)Gh4_UH{c?)yEeZ-wIS3%np7^P&T={$IM9c|GC44e&z@N3#H3^QsaR5uK~B$fl>#` z4j7m+?h25aYjkpoi(zkKEW^@`K3Pm9oLL+ik7d|iGim6i1qmo@rUW)$og`gL-bxJB5i+ z!MEQ&&J&*%qQPg*S<8CC-v6NatI{{=#jhePq*~)WmK*!o)vse(W}zV`8_Tq*eYxMx ziuT2KIJvfqYyJ4vn!#iD@abFG(;KIJ4$)-eE8BimXF=_x!m>TrO@(){eBt?}mZ0x( zMRSZc|g%tFZ)I{T9thR%!4Gi2GVDUGh!)#xV=_imUg1UtC|G zAg%3rVeP-XLl(b8dstf5y${rmO_ccpRFkB^Xkse7+HmXJ(E9DJ>HC|`svitsVq3ZY vb`sEZXU-q%_caFoS+|F?2^tZ6)r|LJb&k1va53)yrVR#9S3j3^P6na*S0Ei0mZop+@#Oid^}CPd z*Y`^a=(zFwwr1v-+! M)78&qol`;+0GEtQ^Z)<= literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a23bdae4c5b955ffe8519b516dadf79d9884a302 GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnE zPZ!6KiaBp*8G1Vr z590Rk3tSz0?EFlp!==)#N0b&l%a4`~x2bO6_hBiSZ-4jXOUrfgmn(K@KPqQRxcH|d zr%dwaTE#=vGm@1QHgA(Km+r0qU(1la=+{M&me9|aw*7Co^zmUtn<;zs?6_C6xISFn zPsswH=;Veq118p)*oB$rSFzm%c8e^cjKL-2bNy`d{4Ezopr0DhIl(f|Me literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..cced67007f51b69a3189eb9d6f7190721d24ee7b GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Vm> zPZ!6KiaBp*8G0XfkU2VEp`@T7XhVSD!Llps6+|8F7_|ju~jz2rMtS_FI_*N;I(RR=8J0k6J69 z8e}*bEQJ_~R2ZIkFn}bC3z@>QxVP)zxhVd#+vO+6 z&hlTva(jPF-oc%FKZ{lTfA{O?TeBDT9$L~rZJK=gHZw$DIaf1@Jzuk8bz@lCf?$P} zr|U%2-bwIuVLA_+yANpS|KDrX-~9haoCf1I<+xqVUa7J(U$5&_*1zz&)c5hqUN@^- z3*0mq%f#Y-%XVq&C%l%Q8}sX7`|;JWE|t!*Roq8ric6fhtM^WFfkfup3rxo*ifc^g uSK7Zw{;j%1ahyWNkAtkT&Cmdw6F=)>m4r*yjRauCF?hQAxvXNVA literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json new file mode 100644 index 00000000000..a38e04dcfd2 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "retractor" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/retractor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/retractor.png new file mode 100644 index 0000000000000000000000000000000000000000..24e04fe613a51b552d14e725e578eeabf2686c84 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvl>na**8>L*NV`r^i(abQ`$)tj zMc>eV!pto{e}2s^?Y;HjRX|wk=A9S4UY->Ms%I<-@(X5gcy=QV$l2xT;uxYaF*!j& zoI`WrC&}Jk(Eyef(bk>-mN~K#0jzUmBzOW@B19xb0)0!xgd8?8WvEUzoYY`+!Ry)= zmKG-E1yf}oUKU_d<2kh`R_19YuYq)k#EdgcGs>py*EaGXh@kJUkjyTL+?p-_k6Q3S)0jSL`( zbaj@PxVuxPf6Y3y!`#>5wCCnS>?VwcFMs~sWTXFXmAZXNjr@xF2Y$a^X64e;{V`_+ zlb!uNrHYeYFAn|hUGDUs)2*ZZ_;RK%lLa20Pcz;S|FC;X$K!KJ{-637?1p$BX$j)SY3kV#Ofnoo@_}uFFcz&VVdN>#nv@zEq!wJ7P#sw z9KMhqXxFH?w}D63ibaHRE0D3)ie=0Egl*yz7N)j0?BYtPVw8Ng{rcYi+uI%E*`j@? kl%C&vi~ULhI2_LD-wo=@_|R<#3}prePgg&ebxsLQ0H?aEHUIzs literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4b405d90cfbbca8c33f26a07df8a2a1f630947 GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5S zr;B4q#hkad?ERP=WsZJyeUePQPPx-?Dj_v#vADsO zuxoKiAEs|OskVEQ^_g?8-c;WgDocEJc>dj#XDm-R8E~Rfp@gE+$MdeOj+>jT%~%un zX8#l8d(8~x{Kebn+*LRISyOuKzjnjiKmT?)p1S#CwSX7nrjz;h_a^=Qvi9$fyNWGL z4YD>;d=o!~+s{|D@e}9MaMxhE6Sug&>{jQ=^w>W3z0aq=<#+hFlgZ(_+Wb_G)c*2M zb_diM8*B)mAM*?>_7|*NFZt{<+X=P*;@-~zwfoN9d&3ofXa#KjCl@4LEh@E>=hmgq&#!N1TyXN%jnx-!)H?JuZrd2{Xzrxo f&!EsRm%x7EeY;8RsbP0l+XkKvg5RY literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json new file mode 100644 index 00000000000..7cbc1208942 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "scalpel" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png new file mode 100644 index 0000000000000000000000000000000000000000..44ec06e46319a765d5814f8eeb73d6e83931b1bb GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$Dv*8>L*1casLmiFo!+Hc-@ zal*_kKYxC`_2AX_DB&wWHH;-ee!&b5&u*jvIT4;Njv*QolM^IZO&FcL0v2dw9C#r0 zNJ=RzDk|zxP+ZWXS5jvdgiV|GPDVvVMMUb6kkG0nXAVpWlTgW$kdV;G(b3S!$vJRf p!K7(nS~)yP2OGM&neOgoWH`1$kgMo;jXTf|22WQ%mvv4FO#m))L>mAA literal 0 HcmV?d00001 diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 5cdbda50dbf..5cc9472241e 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -1,4 +1,4 @@ -version: 1 # Not used right now, whatever. +version: 1 # Not used right now, whatever. binds: - function: UIClick type: State @@ -70,23 +70,18 @@ binds: - function: CameraRotateLeft type: State key: NumpadNum7 - mod1: Control - function: CameraRotateRight type: State key: NumpadNum9 - mod1: Control - function: CameraReset type: State key: NumpadNum8 - mod1: Control - function: ZoomOut type: State key: NumpadNum4 - mod1: Control - function: ZoomIn type: State key: NumpadNum6 - mod1: Control - function: ResetZoom type: State key: NumpadNum5 From 3a1c0e8e20cc8a27ef25517e6a41879805dcb9ca Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Fri, 22 Nov 2024 10:07:11 -0400 Subject: [PATCH 2/7] Hotfix for broken organ transplants (#933) * full fucking send * ope forgot to remove the EE scripts * fix test * fix shitcode fail * DELTA THAT VALUE IS NULLABLE * whoopsie daysie * fixed??? --- Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs | 6 +++--- .../Backmen/Surgery/SharedSurgerySystem.Steps.cs | 2 +- .../Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs | 1 + Content.Shared/Body/Systems/SharedBodySystem.Organs.cs | 1 - Content.Shared/Body/Systems/SharedBodySystem.Parts.cs | 8 -------- Content.Shared/Content.Shared.csproj | 4 ---- 6 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs b/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs index 8b3ccba079f..efb735e449b 100644 --- a/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs +++ b/Content.Server/_Shitmed/Body/Systems/DebrainedSystem.cs @@ -1,8 +1,8 @@ -using Content.Server._Shitmed.DelayedDeath; -using Content.Shared._Shitmed.Body.Organ; +using Content.Server.Backmen.DelayedDeath; using Content.Shared.Body.Systems; -using Content.Shared.Mind; using Content.Server.Popups; +using Content.Shared.Backmen.Surgery.Body; +using Content.Shared.Backmen.Surgery.Body.Organs; using Content.Shared.Speech; using Content.Shared.Standing; using Content.Shared.Stunnable; diff --git a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs index 61c21c76da1..02903c4a909 100644 --- a/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs @@ -603,7 +603,7 @@ private void OnRemoveMarkingCheck(Entity ent, private void OnSurgeryTargetStepChosen(Entity ent, ref SurgeryStepChosenBuiMsg args) { - var user = args.Actor; + var user = args.Actor; if (GetEntity(args.Entity) is not { Valid: true } body || GetEntity(args.Part) is not { Valid: true } targetPart || !IsSurgeryValid(body, targetPart, args.Surgery, args.Step, user, out var surgery, out var part, out var step)) diff --git a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs index 5d4b7a9fdfa..025f39e1aa7 100644 --- a/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs +++ b/Content.Shared/Backmen/Surgery/Tools/SurgeryToolExamineSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Backmen.Surgery.Tools; using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Examine; diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index 88c102530ff..e495ca3f745 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -44,7 +44,6 @@ private void AddOrgan( if (organEnt.Comp.Body is not null) { - organEnt.Comp.OriginalBody = organEnt.Comp.Body; var addedInBodyEv = new OrganAddedToBodyEvent(bodyUid, parentPartUid); RaiseLocalEvent(organEnt, ref addedInBodyEv); var organEnabledEv = new OrganEnableChangedEvent(true); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index ac18276e69f..84e0342ea66 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -18,19 +18,11 @@ // Shitmed Change Start using Content.Shared._Shitmed.Body.Events; -using Content.Shared._Shitmed.Body.Part; using Content.Shared._Shitmed.BodyEffects; -using Content.Shared._Shitmed.Targeting.Events; -using Content.Shared.Humanoid; -using Content.Shared.Inventory; -using Content.Shared.Random; - namespace Content.Shared.Body.Systems; public partial class SharedBodySystem { - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly RandomHelperSystem _randomHelper = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; diff --git a/Content.Shared/Content.Shared.csproj b/Content.Shared/Content.Shared.csproj index ef3790da9b3..e8e15d8d1be 100644 --- a/Content.Shared/Content.Shared.csproj +++ b/Content.Shared/Content.Shared.csproj @@ -25,10 +25,6 @@ - - - - From fbfbba4b602f37aadd055808666229fdfcce6f32 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sat, 23 Nov 2024 09:35:56 +0000 Subject: [PATCH 3/7] allow cloning living people (#932) * allow cloning living people * fix client --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- Content.Server/Cloning/CloningConsoleSystem.cs | 2 +- Content.Server/Cloning/CloningSystem.cs | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Content.Server/Cloning/CloningConsoleSystem.cs b/Content.Server/Cloning/CloningConsoleSystem.cs index 03df913691c..54a39882d5c 100644 --- a/Content.Server/Cloning/CloningConsoleSystem.cs +++ b/Content.Server/Cloning/CloningConsoleSystem.cs @@ -221,7 +221,7 @@ private CloningConsoleBoundUserInterfaceState GetUserInterfaceState(CloningConso { scanBodyInfo = MetaData(scanBody.Value).EntityName; - if (!_mobStateSystem.IsDead(scanBody.Value)) + if (false) // GoobStation: Lets you clone living people { clonerStatus = ClonerStatus.ScannerOccupantAlive; } diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index a2d401d12b7..a09ce97f6bb 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -152,7 +152,8 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity Date: Thu, 21 Nov 2024 19:37:41 +0000 Subject: [PATCH 4/7] Added missing locale strings for limb targeting bindings (#921) * Added missing locale strings for limb targeting bindings * Moved the strings down where the rest of shitmed goes --- Resources/Locale/en-US/escape-menu/ui/options-menu.ftl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 95ec42409c3..0d6258b0ae7 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -290,3 +290,12 @@ ui-options-colorblind-friendly = Colorblind friendly mode ui-options-reduced-motion = Reduce motion of visual effects ui-options-chat-window-opacity = Chat window opacity ui-options-screen-shake-intensity = Screen shake intensity + +## Shitmed Change +ui-options-header-targeting = Targeting +ui-options-function-target-head = Target head +ui-options-function-target-torso = Target torso +ui-options-function-target-left-arm = Target left arm +ui-options-function-target-right-arm = Target right arm +ui-options-function-target-left-leg = Target left leg +ui-options-function-target-right-leg = Target right leg From c9ddcbdf75507b165bb3553986d38670b922f4a7 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:38:06 -0400 Subject: [PATCH 5/7] Shitmed Update 1 - Forma de Goob (#897) * full fucking send * ope forgot to remove the EE scripts * fix test * fix shitcode fail * DELTA THAT VALUE IS NULLABLE * whoopsie daysie --- Content.Client/Smoking/MatchstickSystem.cs | 9 + .../Backmen/Surgery/SurgerySystem.cs | 21 +- Content.Server/Body/Systems/BrainSystem.cs | 10 +- .../Body/Systems/RespiratorSystem.cs | 3 +- .../Light/EntitySystems/MatchboxSystem.cs | 1 + .../Light/EntitySystems/MatchstickSystem.cs | 15 +- .../_Shitmed/Body/Organ/HeartSystem.cs | 38 +++ .../DelayedDeath/DelayedDeathComponent.cs | 16 ++ .../DelayedDeath/DelayedDeathSystem.cs | 28 +++ .../Body/SharedBodySystem.PartAppearance.cs | 15 +- .../Surgery/SurgeryStepDamageChangeEvent.cs | 2 +- .../Backmen/Surgery/Tools/BoneGelComponent.cs | 3 + .../Surgery/Tools/ISurgeryToolComponent.cs | 7 + .../Surgery/Tools/SurgeryToolComponent.cs | 7 + Content.Shared/Body/Organ/OrganComponent.cs | 1 - .../Body/Systems/SharedBodySystem.Body.cs | 1 + .../Body/Systems/SharedBodySystem.Organs.cs | 4 + .../Body/Systems/SharedBodySystem.Parts.cs | 12 + .../Inventory/InventorySystem.Slots.cs | 30 +++ .../Smoking/Components/MatchstickComponent.cs | 32 +++ .../Smoking/Systems/SharedMatchstickSystem.cs | 18 ++ .../Tools/SurgeryToolConditionsSystem.cs | 57 +++++ .../Surgery/Tools/TendingComponent.cs | 15 ++ .../Surgery/Tools/TweezersComponent.cs | 15 ++ .../Prototypes/Body/Organs/Animal/animal.yml | 17 +- Resources/Prototypes/Body/Organs/arachnid.yml | 32 ++- Resources/Prototypes/Body/Organs/diona.yml | 27 ++- Resources/Prototypes/Body/Organs/moth.yml | 1 + Resources/Prototypes/Body/Organs/slime.yml | 2 +- Resources/Prototypes/Body/Organs/vox.yml | 1 + .../DeltaV/Entities/Mobs/Species/harpy.yml | 222 ++++++++++++++++++ .../Entities/Debugging/debug_sweps.yml | 52 ++++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 10 +- .../Prototypes/Entities/Mobs/NPCs/carp.yml | 5 + .../Entities/Mobs/NPCs/regalrat.yml | 5 + .../Entities/Objects/Materials/shards.yml | 7 + .../Entities/Objects/Misc/utensils.yml | 11 + .../Objects/Specific/Hydroponics/tools.yml | 14 ++ .../Objects/Specific/Medical/surgery.yml | 19 +- .../Entities/Objects/Tools/cable_coils.yml | 10 + .../Entities/Objects/Tools/crowbars.yml | 4 + .../Entities/Objects/Tools/lighters.yml | 7 + .../Entities/Objects/Tools/matches.yml | 7 + .../Entities/Objects/Tools/tools.yml | 22 ++ .../Entities/Objects/Tools/welders.yml | 7 + .../Weapons/Guns/Battery/battery_guns.yml | 10 + .../Objects/Weapons/Melee/armblade.yml | 7 + .../Objects/Weapons/Melee/chainsaw.yml | 7 + .../Objects/Weapons/Melee/e_sword.yml | 11 + .../Objects/Weapons/Melee/fireaxe.yml | 7 + .../Entities/Objects/Weapons/Melee/knife.yml | 11 + .../_Backmen/Body/Prototypes/carp.yml | 2 +- .../_Goobstation/status_effects.yml | 15 ++ .../Body/Organs/Animal/space.yml | 0 .../Prototypes/_Shitmed/Body/Parts/animal.yml | 37 +++ .../Body/Prototypes/Animal/carp.yml | 0 .../Prototypes/_Shitmed/status_effects.yml | 3 + .../Aliens/Carps/carp_parts.rsi/meta.json | 0 .../Mobs/Aliens/Carps/carp_parts.rsi/tail.png | Bin .../Aliens/Carps/carp_parts.rsi/torso.png | Bin 60 files changed, 899 insertions(+), 53 deletions(-) create mode 100644 Content.Client/Smoking/MatchstickSystem.cs create mode 100644 Content.Server/_Shitmed/Body/Organ/HeartSystem.cs create mode 100644 Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs create mode 100644 Content.Server/_Shitmed/DelayedDeath/DelayedDeathSystem.cs create mode 100644 Content.Shared/Smoking/Components/MatchstickComponent.cs create mode 100644 Content.Shared/Smoking/Systems/SharedMatchstickSystem.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolConditionsSystem.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/TendingComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/TweezersComponent.cs create mode 100644 Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml create mode 100644 Resources/Prototypes/_Goobstation/status_effects.yml rename Resources/Prototypes/{_Goobstation => _Shitmed}/Body/Organs/Animal/space.yml (100%) create mode 100644 Resources/Prototypes/_Shitmed/Body/Parts/animal.yml rename Resources/Prototypes/{_Goobstation => _Shitmed}/Body/Prototypes/Animal/carp.yml (100%) create mode 100644 Resources/Prototypes/_Shitmed/status_effects.yml rename Resources/Textures/{_Goobstation => _Shitmed}/Mobs/Aliens/Carps/carp_parts.rsi/meta.json (100%) rename Resources/Textures/{_Goobstation => _Shitmed}/Mobs/Aliens/Carps/carp_parts.rsi/tail.png (100%) rename Resources/Textures/{_Goobstation => _Shitmed}/Mobs/Aliens/Carps/carp_parts.rsi/torso.png (100%) diff --git a/Content.Client/Smoking/MatchstickSystem.cs b/Content.Client/Smoking/MatchstickSystem.cs new file mode 100644 index 00000000000..42b8b32b33e --- /dev/null +++ b/Content.Client/Smoking/MatchstickSystem.cs @@ -0,0 +1,9 @@ +// Shitmed Change Start + +using Content.Shared.Smoking.Systems; + +namespace Content.Client.Smoking; + +public sealed class MatchstickSystem : SharedMatchstickSystem; + +// Shitmed Change End \ No newline at end of file diff --git a/Content.Server/Backmen/Surgery/SurgerySystem.cs b/Content.Server/Backmen/Surgery/SurgerySystem.cs index 417971307b9..1912591c574 100644 --- a/Content.Server/Backmen/Surgery/SurgerySystem.cs +++ b/Content.Server/Backmen/Surgery/SurgerySystem.cs @@ -130,17 +130,6 @@ private void OnToolAfterInteract(Entity ent, ref AfterInte private void OnSurgeryStepDamage(Entity ent, ref SurgeryStepDamageEvent args) => SetDamage(args.Body, args.Damage, args.PartMultiplier, args.User, args.Part); - private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) - { - // Im killing this shit soon too, inshallah. - if (ent.Comp.DamageType == "Rot") - _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) - /*else if (ent.Comp.DamageType == "Eye" - && TryComp(ent, out BlindableComponent? blindComp) - && blindComp.EyeDamage > 0) - _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage);*/ - } - private void OnSurgeryDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) { var damageChange = ent.Comp.Damage; @@ -150,6 +139,16 @@ private void OnSurgeryDamageChange(Entity en SetDamage(args.Body, damageChange, 0.5f, args.User, args.Part); } + private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) + { + if (ent.Comp.DamageType == "Rot") + _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) + else if (ent.Comp.DamageType == "Eye" + && TryComp(ent, out BlindableComponent? blindComp) + && blindComp.EyeDamage > 0) + _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage); + } + private void OnStepScreamComplete(Entity ent, ref SurgeryStepEvent args) { if (HasComp(args.Body)) diff --git a/Content.Server/Body/Systems/BrainSystem.cs b/Content.Server/Body/Systems/BrainSystem.cs index 3cf362afc6d..aa3a923b715 100644 --- a/Content.Server/Body/Systems/BrainSystem.cs +++ b/Content.Server/Body/Systems/BrainSystem.cs @@ -11,6 +11,11 @@ using Content.Shared.Mind.Components; using Content.Shared.Pointing; +// Shitmed Change +using Content.Shared._Shitmed.Body.Organ; +using Content.Server._Shitmed.DelayedDeath; +using Content.Shared.Body.Systems; + namespace Content.Server.Body.Systems { public sealed class BrainSystem : EntitySystem @@ -37,6 +42,7 @@ private void HandleRemoval(EntityUid uid, BrainComponent brain, ref OrganRemoved { // Prevents revival, should kill the user within a given timespan too. EnsureComp(args.OldBody); + EnsureComp(args.OldBody); HandleMind(uid, args.OldBody); } } @@ -49,7 +55,9 @@ private void HandleAddition(EntityUid uid, BrainComponent brain, ref OrganAddedT if (!CheckOtherBrains(args.Body)) { RemComp(args.Body); - HandleMind(args.Body, uid, brain); + if (_bodySystem.TryGetBodyOrganEntityComps(args.Body, out var _)) + RemComp(args.Body); + HandleMind(args.Body, uid); } } diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 57a88da049c..d4146c15fb9 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -22,6 +22,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Timing; + namespace Content.Server.Body.Systems; [UsedImplicitly] @@ -79,7 +80,7 @@ public override void Update(float frameTime) UpdateSaturation(uid, -(float) respirator.UpdateInterval.TotalSeconds, respirator); - if (!_mobState.IsIncapacitated(uid) && !HasComp(uid)) // Shitmed: cannot breathe in crit or when no brain. + if (!_mobState.IsIncapacitated(uid) && !HasComp(uid)) // Shitmed Change - Cannot breathe in crit or when no brain. { switch (respirator.Status) { diff --git a/Content.Server/Light/EntitySystems/MatchboxSystem.cs b/Content.Server/Light/EntitySystems/MatchboxSystem.cs index 9a73e44f878..5b1d98beca4 100644 --- a/Content.Server/Light/EntitySystems/MatchboxSystem.cs +++ b/Content.Server/Light/EntitySystems/MatchboxSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Storage.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Smoking; +using Content.Shared.Smoking.Components; // Shitmed Change namespace Content.Server.Light.EntitySystems { diff --git a/Content.Server/Light/EntitySystems/MatchstickSystem.cs b/Content.Server/Light/EntitySystems/MatchstickSystem.cs index 96e4695784d..7e09280c169 100644 --- a/Content.Server/Light/EntitySystems/MatchstickSystem.cs +++ b/Content.Server/Light/EntitySystems/MatchstickSystem.cs @@ -4,6 +4,8 @@ using Content.Shared.Interaction; using Content.Shared.Item; using Content.Shared.Smoking; +using Content.Shared.Smoking.Components; // Shitmed Change +using Content.Shared.Smoking.Systems; // Shitmed Change using Content.Shared.Temperature; using Robust.Server.GameObjects; using Robust.Shared.Audio; @@ -12,7 +14,7 @@ namespace Content.Server.Light.EntitySystems { - public sealed class MatchstickSystem : EntitySystem + public sealed class MatchstickSystem : SharedMatchstickSystem // Shitmed Change { [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -84,22 +86,21 @@ public void Ignite(Entity matchstick, EntityUid user) _audio.PlayPvs(component.IgniteSound, matchstick, AudioParams.Default.WithVariation(0.125f).WithVolume(-0.125f)); // Change state - SetState(matchstick, component, SmokableState.Lit); + SetState((matchstick, component), SmokableState.Lit); // Shitmed Change _litMatches.Add(matchstick); matchstick.Owner.SpawnTimer(component.Duration * 1000, delegate { - SetState(matchstick, component, SmokableState.Burnt); + SetState((matchstick, component), SmokableState.Burnt); // Shitmed Change _litMatches.Remove(matchstick); }); } - private void SetState(EntityUid uid, MatchstickComponent component, SmokableState value) + // Shitmed Change Start + public override bool SetState(Entity ent, SmokableState value) { component.CurrentState = value; - if (_lights.TryGetLight(uid, out var pointLightComponent)) { - _lights.SetEnabled(uid, component.CurrentState == SmokableState.Lit, pointLightComponent); } if (EntityManager.TryGetComponent(uid, out ItemComponent? item)) @@ -119,6 +120,8 @@ private void SetState(EntityUid uid, MatchstickComponent component, SmokableStat { _appearance.SetData(uid, SmokingVisuals.Smoking, component.CurrentState, appearance); } + + return true; // Shitmed Change } } } diff --git a/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs b/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs new file mode 100644 index 00000000000..6a76fee77b3 --- /dev/null +++ b/Content.Server/_Shitmed/Body/Organ/HeartSystem.cs @@ -0,0 +1,38 @@ +using Content.Shared.Body.Events; +using Content.Server.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared._Shitmed.Body.Organ; +using Content.Server._Shitmed.DelayedDeath; + +namespace Content.Server._Shitmed.Body.Organ; + +public sealed class HeartSystem : EntitySystem +{ + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(HandleAddition); + SubscribeLocalEvent(HandleRemoval); + } + + private void HandleRemoval(EntityUid uid, HeartComponent _, ref OrganRemovedFromBodyEvent args) + { + if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.OldBody)) + return; + + // TODO: Add some form of very violent bleeding effect. + EnsureComp(args.OldBody); + } + + private void HandleAddition(EntityUid uid, HeartComponent _, ref OrganAddedToBodyEvent args) + { + if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Body)) + return; + + if (_bodySystem.TryGetBodyOrganEntityComps(args.Body, out var _)) + RemComp(args.Body); + } + // Shitmed-End +} diff --git a/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs new file mode 100644 index 00000000000..a844816c8ae --- /dev/null +++ b/Content.Server/_Shitmed/DelayedDeath/DelayedDeathComponent.cs @@ -0,0 +1,16 @@ +namespace Content.Server._Shitmed.DelayedDeath; + +[RegisterComponent] +public sealed partial class DelayedDeathComponent : Component +{ + ///