From 0d4d9cc292d2cdc0c2219b71dedd5998e2a6ffa7 Mon Sep 17 00:00:00 2001 From: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:55:45 -0500 Subject: [PATCH] Adds Silvia the snake, a pet for CMO (#1488) * Adds Silvia the snake, a pet for CMO * yeet extra line * tweaks to attack rate and butcher products * fix copy/paste typo * Add Silvia meat --------- Co-authored-by: Velcroboy --- .../ghost/roles/ghost-role-component.ftl | 4 + .../DeltaV/Entities/Markers/Spawners/mobs.yml | 14 ++ .../DeltaV/Entities/Mobs/NPCs/pets.yml | 127 ++++++++++++++++++ .../Entities/Objects/Consumable/Food/meat.yml | 12 ++ .../DeltaV/Objectives/stealTargetGroups.yml | 7 +- .../Prototypes/DeltaV/Objectives/traitor.yml | 11 +- .../Prototypes/Objectives/objectiveGroups.yml | 1 + .../Mobs/Pets/silvia.rsi/dead_silvia.png | Bin 0 -> 873 bytes .../DeltaV/Mobs/Pets/silvia.rsi/glow.png | Bin 0 -> 3529 bytes .../DeltaV/Mobs/Pets/silvia.rsi/meta.json | 34 +++++ .../DeltaV/Mobs/Pets/silvia.rsi/silvia.png | Bin 0 -> 7862 bytes 11 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/meat.yml create mode 100644 Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/dead_silvia.png create mode 100644 Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/glow.png create mode 100644 Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/silvia.png diff --git a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl index a438a16e2f4..02124d4de1c 100644 --- a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl @@ -22,3 +22,7 @@ ghost-role-information-recruiter-rules = Set up shop in maints or use your ship as a portable hiring office! You are just a recruiter so do not act like a full-on antagonist, i.e. no killing people. + +ghost-role-information-silvia-name = Silvia +ghost-role-information-silvia-description = You are Silvia the space snake and the CMO's charming companion. +ghost-role-information-silvia-rules = Keep the medical team company and help out in emergencies with your omnizine venom. Stick close to the CMO in case they need emergency healing. diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/mobs.yml index 6e60a440efb..73bb3ee485d 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/mobs.yml @@ -64,3 +64,17 @@ - type: ConditionalSpawner prototypes: - MobCarpLegal + +- type: entity + name: Silvia Spawner + id: SpawnMobCMOPetSilvia + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - state: silvia + sprite: DeltaV/Mobs/Pets/silvia.rsi + - type: ConditionalSpawner + prototypes: + - MobCobraSilvia diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml index 17c604196e8..fb2af980bd9 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/pets.yml @@ -78,3 +78,130 @@ department: Justice time: 3600 # 1 hours - type: GhostTakeoverAvailable + +- type: entity + name: Silvia + id: MobCobraSilvia + parent: MobSpaceBasic + description: With needle-sharp fangs and an alluring gaze, will you let her bite you? + components: + - type: HTN + rootTask: + task: IdleCompound + - type: Sprite + drawdepth: Mobs + sprite: DeltaV/Mobs/Pets/silvia.rsi + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: silvia + - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + state: glow + shader: unshaded + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepSnake + - type: MobThresholds + thresholds: + 0: Alive + 125: Dead + - type: DamageStateVisuals + states: + Alive: + Base: silvia + BaseUnshaded: glow + Dead: + Base: dead_silvia + - type: Butcherable + spawned: + - id: FoodMeatSnakeSilvia + maxAmount: 3 + - id: ClothingShoesSnakeskinBoots #different version? wysi + amount: 1 + prob: 0.2 + - type: Bloodstream + bloodMaxVolume: 200 + bloodReagent: Cryoxadone + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.40 + density: 120 + mask: + - MobMask + layer: + - MobLayer + - type: MeleeWeapon + attackRate: 1.75 #faster attack rate to compensate for healing in self defense situations + hidden: true + soundHit: + path: /Audio/Effects/bite.ogg + angle: 0 + animation: WeaponArcBite + damage: + types: + Piercing: 6 #take dmg to heal dmg + - type: SolutionContainerManager + solutions: + melee: + maxVol: 30 + reagents: + - ReagentId: Omnizine + Quantity: 30 #5 bites to heal 90hp/1 min + - type: MeleeChemicalInjector + solution: melee + transferAmount: 6 #heals 24 burn/brute/air/toxin in 12seconds/minus 6 brute per bite + - type: SolutionRegeneration + solution: melee + duration: 30 #regen 1u every 30 seconds. 15 mins to full + generated: + reagents: + - ReagentId: Omnizine + Quantity: 1 + - type: ReplacementAccent + accent: xeno #Add cool snake accent later. wyci + - type: PointLight + radius: 1.1 + energy: 0.25 + color: "#00ff80" + - type: Stealth + enabledOnDeath: false + maxVisibility: 1.2 + - type: StealthOnMove + passiveVisibilityRate: -0.15 + movementVisibilityRate: 0.30 + - type: GhostRole + makeSentient: true + allowSpeech: true + allowMovement: true + name: ghost-role-information-silvia-name + description: ghost-role-information-silvia-description + rules: ghost-role-information-silvia-rules + requirements: #No raiders + - !type:DepartmentTimeRequirement + department: Medical + time: 14400 #4 hours + - type: GhostTakeoverAvailable + - type: InteractionPopup + successChance: 0.65 + interactSuccessString: petting-success-snake + interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts + interactSuccessSound: + path: /Audio/Animals/snake_hiss.ogg + - type: NpcFactionMember + factions: + - PetsNT + - type: Grammar + attributes: + proper: true + gender: female + - type: Tag + tags: + - CannotSuicide + - VimPilot + - DoorBumpOpener + - FootstepSound + - type: StealTarget + stealGroup: AnimalSilvia diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/meat.yml new file mode 100644 index 00000000000..b258b3779da --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/meat.yml @@ -0,0 +1,12 @@ +- type: entity + parent: FoodMeatSnake + id: FoodMeatSnakeSilvia + components: + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 8 + - ReagentId: Omnizine + Quantity: 8 diff --git a/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml b/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml index b3113308735..19fbcd25b22 100644 --- a/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/DeltaV/Objectives/stealTargetGroups.yml @@ -26,4 +26,9 @@ sprite: DeltaV/Objects/Misc/stamps.rsi state: stamp-notary - +- type: stealTargetGroup + id: AnimalSilvia + name: Silvia + sprite: + sprite: DeltaV/Mobs/Pets/silvia.rsi + state: silvia diff --git a/Resources/Prototypes/DeltaV/Objectives/traitor.yml b/Resources/Prototypes/DeltaV/Objectives/traitor.yml index 932b0d64fc3..1d9f3c992be 100644 --- a/Resources/Prototypes/DeltaV/Objectives/traitor.yml +++ b/Resources/Prototypes/DeltaV/Objectives/traitor.yml @@ -41,4 +41,13 @@ stealGroup: RubberStampNotary owner: job-name-clerk - +- type: entity + abstract: true + parent: BaseTraitorStealObjective + id: SilviaStealObjective + components: + - type: NotJobRequirement + job: ChiefMedicalOfficer + - type: StealCondition + stealGroup: AnimalSilvia + owner: job-name-cmo diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 309b087dfaf..8a86bee8d16 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -120,6 +120,7 @@ RenaultStealObjective: 1 ShivaStealObjective: 1 TropicoStealObjective: 1 + SilviaStealObjective: 1 #DeltaV - CMO steal objective, see Resources/Prototypes/DeltaV/Objectives/traitor.yml - type: weightedRandom id: ThiefObjectiveGroupEscape diff --git a/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/dead_silvia.png b/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/dead_silvia.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa3c7b0b85b3528766dd8c8f53833aea7e8ad2f GIT binary patch literal 873 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 D`+}TE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/meta.json new file mode 100644 index 00000000000..c739aa365ec --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by Nimfar11 (Github) for Space Station 14, re-shaded by Velcroboy for Delta V ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "silvia", + "directions": 4, + "delays": [ + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3] + ] + }, + { + "name": "glow", + "directions": 4, + "delays": [ + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3], + [0.3,0.2,0.2,0.4,0.2,0.2,0.3] + ] + }, + { + "name": "dead_silvia" + } + ] +} diff --git a/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/silvia.png b/Resources/Textures/DeltaV/Mobs/Pets/silvia.rsi/silvia.png new file mode 100644 index 0000000000000000000000000000000000000000..487a9941d56128bdfcd24414d37f6f2e7f730217 GIT binary patch literal 7862 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