From 4da9a78d374c3e530feb193c917d186d005bf307 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Sat, 16 Nov 2024 18:10:26 -0400 Subject: [PATCH 01/80] SHITMED REAL --- Content.Client/Body/Systems/BodySystem.cs | 69 ++ Content.Client/Hands/Systems/HandsSystem.cs | 33 + .../UI/HealthAnalyzerBoundUserInterface.cs | 20 +- .../UI/HealthAnalyzerWindow.xaml | 224 +++++- .../UI/HealthAnalyzerWindow.xaml.cs | 128 ++- .../Humanoid/HumanoidAppearanceSystem.cs | 8 +- Content.Client/Input/ContentContexts.cs | 8 + .../Inventory/ClientInventorySystem.cs | 14 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 10 + .../Screens/DefaultGameScreen.xaml | 2 + .../Screens/DefaultGameScreen.xaml.cs | 1 + .../Screens/SeparatedChatGameScreen.xaml | 6 +- .../Screens/SeparatedChatGameScreen.xaml.cs | 3 +- .../Systems/Alerts/Widgets/AlertsUI.xaml | 12 +- .../Inventory/InventoryUIController.cs | 2 +- .../Body/Components/BrainComponent.cs | 3 + .../_Shitmed/Body/Components/LungComponent.cs | 3 + .../Body/Components/StomachComponent.cs | 3 + .../_Shitmed/Medical/Surgery/SurgeryBui.cs | 358 +++++++++ .../Medical/Surgery/SurgeryStepButton.xaml | 4 + .../Medical/Surgery/SurgeryStepButton.xaml.cs | 16 + .../_Shitmed/Medical/Surgery/SurgerySystem.cs | 11 + .../Medical/Surgery/SurgeryWindow.xaml | 23 + .../Medical/Surgery/SurgeryWindow.xaml.cs | 14 + .../_Shitmed/Targeting/TargetingSystem.cs | 102 +++ .../PartStatus/PartStatusUIController.cs | 82 ++ .../PartStatus/Widgets/PartStatusControl.xaml | 57 ++ .../Widgets/PartStatusControl.xaml.cs | 50 ++ .../Targeting/TargetingUIController.cs | 82 ++ .../Targeting/Widgets/TargetingControl.xaml | 216 +++++ .../Widgets/TargetingControl.xaml.cs | 58 ++ .../Xenonids/UI/XenoChoiceControl.xaml | 17 + .../Xenonids/UI/XenoChoiceControl.xaml.cs | 26 + .../Tests/_Shitmed/Body/SpeciesBUITest.cs | 63 ++ .../Atmos/EntitySystems/BarotraumaSystem.cs | 4 +- Content.Server/Body/Systems/BodySystem.cs | 64 +- Content.Server/Body/Systems/BrainSystem.cs | 25 +- .../Body/Systems/RespiratorSystem.cs | 3 +- .../Thresholds/Behaviors/GibBehavior.cs | 5 +- .../EntityEffects/Effects/HealthChange.cs | 8 +- Content.Server/Hands/Systems/HandsSystem.cs | 45 +- .../Components/HealthAnalyzerComponent.cs | 6 + Content.Server/Medical/CryoPodSystem.cs | 3 +- Content.Server/Medical/HealingSystem.cs | 30 +- .../Medical/HealthAnalyzerSystem.cs | 88 +- .../Thresholds/Behaviors/GibPartBehavior.cs | 21 + .../_Shitmed/Medical/Surgery/SurgerySystem.cs | 189 +++++ .../_Shitmed/Targeting/TargetingSystem.cs | 54 ++ Content.Shared/Bed/Sleep/SleepingSystem.cs | 8 +- Content.Shared/Body/Organ/OrganComponent.cs | 22 +- Content.Shared/Body/Part/BodyPartComponent.cs | 117 ++- .../Body/Systems/SharedBodySystem.Body.cs | 105 ++- .../Body/Systems/SharedBodySystem.Organs.cs | 15 + .../Body/Systems/SharedBodySystem.Parts.cs | 282 ++++++- .../Body/Systems/SharedBodySystem.cs | 8 +- .../Damage/Systems/DamageableSystem.cs | 54 +- .../Humanoid/HumanoidVisualLayersExtension.cs | 14 + .../SharedHumanoidAppearanceSystem.cs | 2 + Content.Shared/Input/ContentKeyFunctions.cs | 9 + .../Inventory/InventorySystem.Slots.cs | 49 +- .../Inventory/InventoryTemplatePrototype.cs | 5 + .../HealthAnalyzerScannedUserMessage.cs | 16 +- .../Systems/MobStateSystem.StateMachine.cs | 4 + .../Weapons/Melee/MeleeWeaponComponent.cs | 16 + .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 4 +- .../_Goobstation/CCVar/GoobCCVars.cs | 13 +- .../Standing/SharedLayingDownSystem.cs | 8 +- .../_Shitmed/Body/Events/BodyPartEvents.cs | 28 + .../_Shitmed/Body/Organ/DebrainedComponent.cs | 7 + .../_Shitmed/Body/Organ/EarsComponent.cs | 7 + .../_Shitmed/Body/Organ/EyesComponent.cs | 6 + .../_Shitmed/Body/Organ/HeartComponent.cs | 6 + .../_Shitmed/Body/Organ/LiverComponent.cs | 6 + .../Body/Organ/MarkingContainerComponent.cs | 15 + .../_Shitmed/Body/Organ/TailComponent.cs | 6 + .../Body/Part/BodyPartAppearanceComponent.cs | 45 ++ .../SharedBodySystem.PartAppearance.cs | 201 +++++ .../Systems/SharedBodySystem.Targeting.cs | 505 ++++++++++++ .../Events/ProfileLoadFinishedEvent.cs | 7 + .../SurgeryCloseIncisionConditionComponent.cs | 6 + .../SurgeryLarvaConditionComponent.cs | 6 + .../SurgeryMarkingConditionComponent.cs | 26 + ...SurgeryOperatingTableConditionComponent.cs | 6 + .../SurgeryOrganConditionComponent.cs | 18 + .../SurgeryPartConditionComponent.cs | 17 + .../Conditions/SurgeryPartPresentCondition.cs | 6 + .../SurgeryPartRemovedConditionComponent.cs | 14 + .../Surgery/Conditions/SurgeryValidEvent.cs | 9 + .../SurgeryWoundedConditionComponent.cs | 7 + .../Effects/Complete/SurgeryCompletedEvent.cs | 7 + .../Complete/SurgeryRemoveLarvaComponent.cs | 6 + .../SurgeryDamageChangeEffectComponent.cs | 17 + ...rgerySpecialDamageChangeEffectComponent.cs | 14 + .../Step/SurgeryStepCavityEffectComponent.cs | 10 + .../Step/SurgeryStepEmoteEffectComponent.cs | 12 + .../Effects/Step/SurgeryStepSpawnEffect.cs | 13 + .../Step/SurgeryTendWoundsEffectComponent.cs | 20 + .../Surgery/OperatingTableComponent.cs | 6 + .../Surgery/SharedSurgerySystem.Steps.cs | 758 ++++++++++++++++++ .../_Shitmed/Surgery/SharedSurgerySystem.cs | 283 +++++++ .../_Shitmed/Surgery/StepInvalidReason.cs | 10 + .../Steps/Parts/BleedersClampedComponent.cs | 6 + .../Parts/BodyPartReattachedComponent.cs | 6 + .../Steps/Parts/BodyPartSawedComponent.cs | 6 + .../Steps/Parts/IncisionOpenComponent.cs | 6 + .../Parts/InternalBleedersClampedComponent.cs | 6 + .../Steps/Parts/OrganReattachedComponent.cs | 6 + .../Steps/Parts/PartRemovedComponent.cs | 6 + .../Steps/Parts/RibcageOpenComponent.cs | 6 + .../Steps/Parts/RibcageSawedComponent.cs | 6 + .../Steps/Parts/SkinRetractedComponent.cs | 6 + .../Steps/SurgeryAddMarkingStepComponent.cs | 34 + .../Steps/SurgeryAddOrganStepComponent.cs | 6 + .../Steps/SurgeryAddPartStepComponent.cs | 6 + .../Steps/SurgeryAffixOrganStepComponent.cs | 6 + .../Steps/SurgeryAffixPartStepComponent.cs | 6 + .../Steps/SurgeryCanPerformStepEvent.cs | 14 + .../SurgeryCutLarvaRootsStepComponent.cs | 6 + .../SurgeryRemoveMarkingStepComponent.cs | 29 + .../Steps/SurgeryRemoveOrganStepComponent.cs | 6 + .../Steps/SurgeryRemovePartStepComponent.cs | 6 + .../Steps/SurgeryRepeatableStepComponent.cs | 6 + .../Steps/SurgeryStepCompleteCheckEvent.cs | 4 + .../Surgery/Steps/SurgeryStepComponent.cs | 22 + .../_Shitmed/Surgery/SurgeryComponent.cs | 18 + .../_Shitmed/Surgery/SurgeryDoAfterEvent.cs | 18 + .../Surgery/SurgerySpeedModifierComponent.cs | 11 + .../Surgery/SurgeryStepDamageEvent.cs | 9 + .../_Shitmed/Surgery/SurgeryStepEvent.cs | 7 + .../Surgery/SurgeryTargetComponent.cs | 10 + Content.Shared/_Shitmed/Surgery/SurgeryUI.cs | 32 + .../_Shitmed/Surgery/SurgeryUiRefreshEvent.cs | 14 + .../Surgery/Tools/BoneGelComponent.cs | 11 + .../Surgery/Tools/BoneSawComponent.cs | 10 + .../Surgery/Tools/BoneSetterComponent.cs | 6 + .../Surgery/Tools/CauteryComponent.cs | 10 + .../Surgery/Tools/HemostatComponent.cs | 10 + .../Surgery/Tools/ISurgeryToolComponent.cs | 11 + .../Surgery/Tools/RetractorComponent.cs | 10 + .../Surgery/Tools/ScalpelComponent.cs | 10 + .../Surgery/Tools/SurgeryToolComponent.cs | 16 + .../Surgery/Tools/SurgicalDrillComponent.cs | 10 + Content.Shared/_Shitmed/Targeting/Events.cs | 38 + .../Targeting/SharedTargetingSystem.cs | 26 + .../_Shitmed/Targeting/TargetBodyPart.cs | 31 + .../_Shitmed/Targeting/TargetIntegrity.cs | 13 + .../_Shitmed/Targeting/TargetingComponent.cs | 59 ++ .../_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 .../Locale/en-US/_Shitmed/surgery-ui.ftl | 12 + .../en-US/escape-menu/ui/options-menu.ftl | 3 + Resources/Locale/en-US/guidebook/guides.ftl | 6 + .../components/health-analyzer-component.ftl | 2 + Resources/Prototypes/Body/Organs/human.yml | 58 +- Resources/Prototypes/Body/Parts/animal.yml | 2 +- Resources/Prototypes/Body/Parts/base.yml | 85 +- Resources/Prototypes/Body/Parts/skeleton.yml | 2 +- Resources/Prototypes/Body/Parts/vox.yml | 88 +- .../Prototypes/Body/Prototypes/a_ghost.yml | 19 +- .../Prototypes/Body/Prototypes/human.yml | 35 +- .../Catalog/Fills/Backpacks/duffelbag.yml | 2 + .../Catalog/Fills/Crates/medical.yml | 4 + .../Catalog/Fills/Lockers/heads.yml | 2 + .../Entities/Clothing/Belt/belts.yml | 1 + .../Entities/Debugging/debug_sweps.yml | 52 ++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 6 +- .../Prototypes/Entities/Mobs/Species/base.yml | 5 + .../Entities/Mobs/Species/skeleton.yml | 3 +- .../Entities/Mobs/Species/slime.yml | 3 + .../Circuitboards/Machine/production.yml | 16 + .../Objects/Specific/Medical/surgery.yml | 188 ++++- .../Furniture/Tables/operating_table.yml | 3 +- .../Entities/Structures/Machines/lathe.yml | 50 ++ .../Prototypes/EntityLists/Tools/surgery.yml | 6 + Resources/Prototypes/Guidebook/medical.yml | 32 + Resources/Prototypes/Reagents/gases.yml | 16 +- .../Prototypes/Recipes/Lathes/medical.yml | 9 + .../Recipes/Lathes/rehydrateable.yml | 100 +++ .../Prototypes/Roles/Jobs/Medical/chemist.yml | 6 + .../Roles/Jobs/Medical/medical_intern.yml | 5 + .../Roles/Jobs/Medical/paramedic.yml | 5 + .../_Shitmed/Body/Organs/felinid.yml | 24 + .../Prototypes/_Shitmed/Damage/containers.yml | 5 + .../_Shitmed/Damage/modifier_sets.yml | 10 + .../_Shitmed/Entities/Surgery/surgeries.yml | 539 +++++++++++++ .../Entities/Surgery/surgery_steps.yml | 563 +++++++++++++ .../Prototypes/_Shitmed/Species/misc.yml | 12 + .../Guidebook/Medical/OrganManipulation.xml | 51 ++ .../Guidebook/Medical/PartManipulation.xml | 51 ++ .../_Shitmed/Guidebook/Medical/Surgery.xml | 40 + .../Guidebook/Medical/UtilitySurgeries.xml | 24 + .../Textures/Interface/Ashen/target_doll.png | Bin 0 -> 422 bytes .../Interface/Clockwork/target_doll.png | Bin 0 -> 1219 bytes .../Interface/Default/target_doll.png | Bin 0 -> 422 bytes .../Interface/Minimalist/target_doll.png | Bin 0 -> 422 bytes .../Interface/Plasmafire/target_doll.png | Bin 0 -> 462 bytes .../Textures/Interface/Retro/target_doll.png | Bin 0 -> 383 bytes .../Interface/Slimecore/target_doll.png | Bin 0 -> 422 bytes .../Interface/Targeting/Doll/eyes.png | Bin 0 -> 5227 bytes .../Interface/Targeting/Doll/eyes_hover.png | Bin 0 -> 6856 bytes .../Interface/Targeting/Doll/groin.png | Bin 0 -> 5485 bytes .../Interface/Targeting/Doll/groin_hover.png | Bin 0 -> 6452 bytes .../Interface/Targeting/Doll/head.png | Bin 0 -> 5663 bytes .../Interface/Targeting/Doll/head_hover.png | Bin 0 -> 7153 bytes .../Interface/Targeting/Doll/leftarm.png | Bin 0 -> 5779 bytes .../Targeting/Doll/leftarm_hover.png | Bin 0 -> 6652 bytes .../Interface/Targeting/Doll/leftfoot.png | Bin 0 -> 5462 bytes .../Targeting/Doll/leftfoot_hover.png | Bin 0 -> 5476 bytes .../Interface/Targeting/Doll/lefthand.png | Bin 0 -> 5462 bytes .../Targeting/Doll/lefthand_hover.png | Bin 0 -> 6174 bytes .../Interface/Targeting/Doll/leftleg.png | Bin 0 -> 5488 bytes .../Targeting/Doll/leftleg_hover.png | Bin 0 -> 6185 bytes .../Interface/Targeting/Doll/mouth.png | Bin 0 -> 5219 bytes .../Interface/Targeting/Doll/mouth_hover.png | Bin 0 -> 5208 bytes .../Interface/Targeting/Doll/rightarm.png | Bin 0 -> 5773 bytes .../Targeting/Doll/rightarm_hover.png | Bin 0 -> 6592 bytes .../Interface/Targeting/Doll/rightfoot.png | Bin 0 -> 5454 bytes .../Targeting/Doll/rightfoot_hover.png | Bin 0 -> 5465 bytes .../Interface/Targeting/Doll/righthand.png | Bin 0 -> 5467 bytes .../Targeting/Doll/righthand_hover.png | Bin 0 -> 6207 bytes .../Interface/Targeting/Doll/rightleg.png | Bin 0 -> 5473 bytes .../Targeting/Doll/rightleg_hover.png | Bin 0 -> 5908 bytes .../Interface/Targeting/Doll/torso.png | Bin 0 -> 5284 bytes .../Interface/Targeting/Doll/torso_hover.png | Bin 0 -> 5672 bytes .../Targeting/Status/groin.rsi/groin_0.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_1.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_2.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_3.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_4.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_5.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_6.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_7.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_8.png | Bin 0 -> 178 bytes .../Targeting/Status/groin.rsi/meta.json | 38 + .../Targeting/Status/head.rsi/head_0.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_1.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_2.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_3.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_4.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_5.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_6.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_7.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_8.png | Bin 0 -> 155 bytes .../Targeting/Status/head.rsi/meta.json | 38 + .../Status/leftarm.rsi/leftarm_0.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_1.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_2.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_3.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_4.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_5.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_6.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_7.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_8.png | Bin 0 -> 154 bytes .../Targeting/Status/leftarm.rsi/meta.json | 38 + .../Status/leftfoot.rsi/leftfoot_0.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_1.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_2.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_3.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_4.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_5.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_6.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_7.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_8.png | Bin 0 -> 166 bytes .../Targeting/Status/leftfoot.rsi/meta.json | 38 + .../Status/lefthand.rsi/lefthand_0.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_1.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_2.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_3.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_4.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_5.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_6.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_7.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_8.png | Bin 0 -> 152 bytes .../Targeting/Status/lefthand.rsi/meta.json | 38 + .../Status/leftleg.rsi/leftleg_0.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_1.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_2.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_3.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_4.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_5.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_6.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_7.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_8.png | Bin 0 -> 170 bytes .../Targeting/Status/leftleg.rsi/meta.json | 38 + .../Targeting/Status/rightarm.rsi/meta.json | 38 + .../Status/rightarm.rsi/rightarm_0.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_1.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_2.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_3.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_4.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_5.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_6.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_7.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_8.png | Bin 0 -> 158 bytes .../Targeting/Status/rightfoot.rsi/meta.json | 38 + .../Status/rightfoot.rsi/rightfoot_0.png | Bin 0 -> 176 bytes .../Status/rightfoot.rsi/rightfoot_1.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_2.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_3.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_4.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_5.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_6.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_7.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_8.png | Bin 0 -> 161 bytes .../Targeting/Status/righthand.rsi/meta.json | 38 + .../Status/righthand.rsi/righthand_0.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_1.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_2.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_3.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_4.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_5.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_6.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_7.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_8.png | Bin 0 -> 152 bytes .../Targeting/Status/rightleg.rsi/meta.json | 38 + .../Status/rightleg.rsi/rightleg_0.png | Bin 0 -> 178 bytes .../Status/rightleg.rsi/rightleg_1.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_2.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_3.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_4.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_5.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_6.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_7.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_8.png | Bin 0 -> 166 bytes .../Targeting/Status/torso.rsi/meta.json | 38 + .../Targeting/Status/torso.rsi/torso_0.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_1.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_2.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_3.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_4.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_5.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_6.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_7.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_8.png | Bin 0 -> 186 bytes .../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 .../Medical/Surgery/bone_gel.rsi/bone-gel.png | Bin 0 -> 432 bytes .../Surgery/bone_gel.rsi/bone-gel_0.png | Bin 0 -> 391 bytes .../Surgery/bone_gel.rsi/bone-gel_25.png | Bin 0 -> 444 bytes .../Surgery/bone_gel.rsi/bone-gel_50.png | Bin 0 -> 456 bytes .../Surgery/bone_gel.rsi/bone-gel_75.png | Bin 0 -> 444 bytes .../Medical/Surgery/bone_gel.rsi/meta.json | 29 + .../bone_gel.rsi/predator_bone-gel.png | Bin 0 -> 585 bytes .../Surgery/bonesetter.rsi/bonesetter.png | Bin 0 -> 581 bytes .../Medical/Surgery/bonesetter.rsi/meta.json | 17 + .../bonesetter.rsi/predator_bonesetter.png | Bin 0 -> 489 bytes .../Surgery/manipulation.rsi/insertion.png | Bin 0 -> 379 bytes .../Surgery/manipulation.rsi/meta.json | 14 + .../limbgrower.rsi/limbgrower_fill.png | Bin 0 -> 9056 bytes .../limbgrower.rsi/limbgrower_idleoff.png | Bin 0 -> 3320 bytes .../limbgrower.rsi/limbgrower_idleon.png | Bin 0 -> 11102 bytes .../limbgrower.rsi/limbgrower_openpanel.png | Bin 0 -> 3981 bytes .../limbgrower.rsi/limbgrower_panelopen.png | Bin 0 -> 2273 bytes .../limbgrower.rsi/limbgrower_unfill.png | Bin 0 -> 9104 bytes .../Machines/limbgrower.rsi/meta.json | 85 ++ Resources/keybinds.yml | 9 +- 366 files changed, 8299 insertions(+), 221 deletions(-) create mode 100644 Content.Client/_Shitmed/Body/Components/BrainComponent.cs create mode 100644 Content.Client/_Shitmed/Body/Components/LungComponent.cs create mode 100644 Content.Client/_Shitmed/Body/Components/StomachComponent.cs create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgeryBui.cs create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml.cs create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgerySystem.cs create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgeryWindow.xaml create mode 100644 Content.Client/_Shitmed/Medical/Surgery/SurgeryWindow.xaml.cs create mode 100644 Content.Client/_Shitmed/Targeting/TargetingSystem.cs create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/PartStatus/PartStatusUIController.cs create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/PartStatus/Widgets/PartStatusControl.xaml create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/PartStatus/Widgets/PartStatusControl.xaml.cs create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/Targeting/TargetingUIController.cs create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/Targeting/Widgets/TargetingControl.xaml create mode 100644 Content.Client/_Shitmed/UserInterface/Systems/Targeting/Widgets/TargetingControl.xaml.cs create mode 100644 Content.Client/_Shitmed/Xenonids/UI/XenoChoiceControl.xaml create mode 100644 Content.Client/_Shitmed/Xenonids/UI/XenoChoiceControl.xaml.cs create mode 100644 Content.IntegrationTests/Tests/_Shitmed/Body/SpeciesBUITest.cs create mode 100644 Content.Server/_Shitmed/Destructible/Thresholds/Behaviors/GibPartBehavior.cs create mode 100644 Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs create mode 100644 Content.Server/_Shitmed/Targeting/TargetingSystem.cs create mode 100644 Content.Shared/_Shitmed/Body/Events/BodyPartEvents.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/DebrainedComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/EarsComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/EyesComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/HeartComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/LiverComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/MarkingContainerComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Organ/TailComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Part/BodyPartAppearanceComponent.cs create mode 100644 Content.Shared/_Shitmed/Body/Systems/SharedBodySystem.PartAppearance.cs create mode 100644 Content.Shared/_Shitmed/Body/Systems/SharedBodySystem.Targeting.cs create mode 100644 Content.Shared/_Shitmed/Humanoid/Events/ProfileLoadFinishedEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryCloseIncisionConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryLarvaConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryMarkingConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOperatingTableConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryOrganConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartPresentCondition.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryValidEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Conditions/SurgeryWoundedConditionComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Complete/SurgeryCompletedEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Complete/SurgeryRemoveLarvaComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgerySpecialDamageChangeEffectComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgeryStepCavityEffectComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgeryStepEmoteEffectComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgeryStepSpawnEffect.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Effects/Step/SurgeryTendWoundsEffectComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/OperatingTableComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.cs create mode 100644 Content.Shared/_Shitmed/Surgery/StepInvalidReason.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/BleedersClampedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/BodyPartReattachedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/BodyPartSawedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/IncisionOpenComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/InternalBleedersClampedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/OrganReattachedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/PartRemovedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/RibcageOpenComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/RibcageSawedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/Parts/SkinRetractedComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddMarkingStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddOrganStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddPartStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryAffixOrganStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryAffixPartStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryCanPerformStepEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryCutLarvaRootsStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveOrganStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemovePartStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryRepeatableStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepCompleteCheckEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Steps/SurgeryStepComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryDoAfterEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgerySpeedModifierComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryStepDamageEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryStepEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryTargetComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryUI.cs create mode 100644 Content.Shared/_Shitmed/Surgery/SurgeryUiRefreshEvent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/BoneGelComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/BoneSawComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/BoneSetterComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/CauteryComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/HemostatComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/ISurgeryToolComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/RetractorComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/ScalpelComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolComponent.cs create mode 100644 Content.Shared/_Shitmed/Surgery/Tools/SurgicalDrillComponent.cs create mode 100644 Content.Shared/_Shitmed/Targeting/Events.cs create mode 100644 Content.Shared/_Shitmed/Targeting/SharedTargetingSystem.cs create mode 100644 Content.Shared/_Shitmed/Targeting/TargetBodyPart.cs create mode 100644 Content.Shared/_Shitmed/Targeting/TargetIntegrity.cs create mode 100644 Content.Shared/_Shitmed/Targeting/TargetingComponent.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/_Shitmed/surgery-ui.ftl create mode 100644 Resources/Prototypes/_Shitmed/Body/Organs/felinid.yml create mode 100644 Resources/Prototypes/_Shitmed/Damage/containers.yml create mode 100644 Resources/Prototypes/_Shitmed/Damage/modifier_sets.yml create mode 100644 Resources/Prototypes/_Shitmed/Entities/Surgery/surgeries.yml create mode 100644 Resources/Prototypes/_Shitmed/Entities/Surgery/surgery_steps.yml create mode 100644 Resources/Prototypes/_Shitmed/Species/misc.yml create mode 100644 Resources/ServerInfo/_Shitmed/Guidebook/Medical/OrganManipulation.xml create mode 100644 Resources/ServerInfo/_Shitmed/Guidebook/Medical/PartManipulation.xml create mode 100644 Resources/ServerInfo/_Shitmed/Guidebook/Medical/Surgery.xml create mode 100644 Resources/ServerInfo/_Shitmed/Guidebook/Medical/UtilitySurgeries.xml create mode 100644 Resources/Textures/Interface/Ashen/target_doll.png create mode 100644 Resources/Textures/Interface/Clockwork/target_doll.png create mode 100644 Resources/Textures/Interface/Default/target_doll.png create mode 100644 Resources/Textures/Interface/Minimalist/target_doll.png create mode 100644 Resources/Textures/Interface/Plasmafire/target_doll.png create mode 100644 Resources/Textures/Interface/Retro/target_doll.png create mode 100644 Resources/Textures/Interface/Slimecore/target_doll.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/eyes.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/eyes_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/groin.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/groin_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/head.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/head_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftarm.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftarm_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftfoot.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftfoot_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/lefthand.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/lefthand_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftleg.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/leftleg_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/mouth.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/mouth_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightarm.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightarm_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightfoot.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightfoot_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/righthand.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/righthand_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightleg.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/rightleg_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/torso.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Doll/torso_hover.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/groin_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/groin.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/head_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/head.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/leftarm_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftarm.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/leftfoot_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftfoot.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/lefthand_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/lefthand.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/leftleg_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/leftleg.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightarm.rsi/rightarm_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightfoot.rsi/rightfoot_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/righthand.rsi/righthand_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/rightleg.rsi/rightleg_8.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_0.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_1.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_2.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_3.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_4.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_5.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_6.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_7.png create mode 100644 Resources/Textures/_Shitmed/Interface/Targeting/Status/torso.rsi/torso_8.png 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 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/bone-gel_0.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_25.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_50.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_75.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/bone_gel.rsi/predator_bone-gel.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/bonesetter.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/predator_bonesetter.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/manipulation.rsi/insertion.png create mode 100644 Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/manipulation.rsi/meta.json create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_fill.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_idleoff.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_idleon.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_openpanel.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_panelopen.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/limbgrower_unfill.png create mode 100644 Resources/Textures/_Shitmed/Structures/Machines/limbgrower.rsi/meta.json diff --git a/Content.Client/Body/Systems/BodySystem.cs b/Content.Client/Body/Systems/BodySystem.cs index bab785525b0d..d26721ba2478 100644 --- a/Content.Client/Body/Systems/BodySystem.cs +++ b/Content.Client/Body/Systems/BodySystem.cs @@ -1,7 +1,76 @@ using Content.Shared.Body.Systems; +// Shitmed Change Start +using Content.Shared._Shitmed.Body.Part; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Robust.Client.GameObjects; +using Robust.Shared.Utility; +using Content.Shared.Body.Components; +// Shitmed Change End namespace Content.Client.Body.Systems; public sealed class BodySystem : SharedBodySystem { + // Shitmed Change Start + [Dependency] private readonly MarkingManager _markingManager = default!; + + private void ApplyMarkingToPart(MarkingPrototype markingPrototype, + IReadOnlyList? colors, + bool visible, + SpriteComponent sprite) + { + for (var j = 0; j < markingPrototype.Sprites.Count; j++) + { + var markingSprite = markingPrototype.Sprites[j]; + + if (markingSprite is not SpriteSpecifier.Rsi rsi) + continue; + + var layerId = $"{markingPrototype.ID}-{rsi.RsiState}"; + + if (!sprite.LayerMapTryGet(layerId, out _)) + { + var layer = sprite.AddLayer(markingSprite, j + 1); + sprite.LayerMapSet(layerId, layer); + sprite.LayerSetSprite(layerId, rsi); + } + + sprite.LayerSetVisible(layerId, visible); + + if (!visible) + continue; + + // Okay so if the marking prototype is modified but we load old marking data this may no longer be valid + // and we need to check the index is correct. So if that happens just default to white? + if (colors != null && j < colors.Count) + sprite.LayerSetColor(layerId, colors[j]); + else + sprite.LayerSetColor(layerId, Color.White); + } + } + + protected override void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component) + { + if (!TryComp(target, out SpriteComponent? sprite)) + return; + + if (component.Color != null) + sprite.Color = component.Color.Value; + + foreach (var (visualLayer, markingList) in component.Markings) + foreach (var marking in markingList) + { + if (!_markingManager.TryGetMarking(marking, out var markingPrototype)) + continue; + + ApplyMarkingToPart(markingPrototype, marking.MarkingColors, marking.Visible, sprite); + } + } + + protected override void RemoveBodyMarkings(EntityUid target, BodyPartAppearanceComponent partAppearance, HumanoidAppearanceComponent bodyAppearance) + { + return; + } + // Shitmed Change End } diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index 68800a2afe51..a9f162fefe73 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -1,9 +1,11 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared._Shitmed.Body.Events; // Shitmed Change using Content.Client.DisplacementMap; using Content.Client.Examine; using Content.Client.Strip; using Content.Client.Verbs.UI; +using Content.Shared.Body.Part; // Shitmed Change using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; @@ -51,6 +53,8 @@ public override void Initialize() SubscribeLocalEvent(OnHandsShutdown); SubscribeLocalEvent(HandleComponentState); SubscribeLocalEvent(OnVisualsChanged); + SubscribeLocalEvent(HandleBodyPartRemoved); // Shitmed Change + SubscribeLocalEvent(HandleBodyPartDisabled); // Shitmed Change OnHandSetActive += OnHandActivated; } @@ -240,6 +244,35 @@ public void UIHandAltActivateItem(string handName) #region visuals + // Shitmed Change Start + private void HideLayers(EntityUid uid, HandsComponent component, Entity part, SpriteComponent? sprite = null) + { + if (part.Comp.PartType != BodyPartType.Hand || !Resolve(uid, ref sprite, logMissing: false)) + return; + + var location = part.Comp.Symmetry switch + { + BodyPartSymmetry.None => HandLocation.Middle, + BodyPartSymmetry.Left => HandLocation.Left, + BodyPartSymmetry.Right => HandLocation.Right, + _ => throw new ArgumentOutOfRangeException(nameof(part.Comp.Symmetry)) + }; + + if (component.RevealedLayers.TryGetValue(location, out var revealedLayers)) + { + foreach (var key in revealedLayers) + sprite.RemoveLayer(key); + + revealedLayers.Clear(); + } + } + + private void HandleBodyPartRemoved(EntityUid uid, HandsComponent component, ref BodyPartRemovedEvent args) => HideLayers(uid, component, args.Part); + + private void HandleBodyPartDisabled(EntityUid uid, HandsComponent component, ref BodyPartDisabledEvent args) => HideLayers(uid, component, args.Part); + + // Shitmed Change End + protected override void HandleEntityInserted(EntityUid uid, HandsComponent hands, EntInsertedIntoContainerMessage args) { base.HandleEntityInserted(uid, hands, args); diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs index baea03c89231..3261a109e734 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs @@ -1,4 +1,5 @@ using Content.Shared.MedicalScanner; +using Content.Shared._Shitmed.Targeting; // Shitmed Change using JetBrains.Annotations; using Robust.Client.UserInterface; @@ -19,10 +20,11 @@ protected override void Open() base.Open(); _window = this.CreateWindow(); - + _window.OnBodyPartSelected += SendBodyPartMessage; // Shitmed Change _window.Title = EntMan.GetComponent(Owner).EntityName; } + protected override void ReceiveMessage(BoundUserInterfaceMessage message) { if (_window == null) @@ -33,5 +35,21 @@ protected override void ReceiveMessage(BoundUserInterfaceMessage message) _window.Populate(cast); } + + // Shitmed Change Start + private void SendBodyPartMessage(TargetBodyPart? part, EntityUid target) => SendMessage(new HealthAnalyzerPartMessage(EntMan.GetNetEntity(target), part ?? null)); + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + if (_window != null) + _window.OnBodyPartSelected -= SendBodyPartMessage; + + _window?.Dispose(); + } + + // Shitmed Change End } } diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index aae8785b1fe1..996796d9c9be 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -2,7 +2,7 @@ xmlns="https://spacestation14.io" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" MaxHeight="525" - MinWidth="300"> + MinWidth="350">