]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Animals make hearts when you pet them (#20859)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Fri, 13 Oct 2023 17:34:18 +0000 (20:34 +0300)
committerGitHub <noreply@github.com>
Fri, 13 Oct 2023 17:34:18 +0000 (09:34 -0800)
Content.Server/Interaction/Components/InteractionPopupComponent.cs
Content.Server/Interaction/InteractionPopupSystem.cs
Resources/Prototypes/Entities/Effects/hearts.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
Resources/Prototypes/Entities/Mobs/NPCs/pets.yml
Resources/Textures/Effects/hearts.rsi/hearts.png [new file with mode: 0644]
Resources/Textures/Effects/hearts.rsi/meta.json [new file with mode: 0644]

index eef29506b2728ef8c7f75d74b7dc05c7ff0c46ef..f41f57dd099ca22eb0efa39f14cf831a7f881b0a 100644 (file)
@@ -1,4 +1,5 @@
 using Robust.Shared.Audio;
+using Robust.Shared.Prototypes;
 
 namespace Content.Server.Interaction.Components;
 
@@ -40,6 +41,18 @@ public sealed partial class InteractionPopupComponent : Component
     [DataField("interactFailureSound")]
     public SoundSpecifier? InteractFailureSound;
 
+    /// <summary>
+    /// a prototype that will spawn upon successful interaction (as planned only for special effects)
+    /// </summary>
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public EntProtoId? InteractSuccessSpawn;
+
+    /// <summary>
+    /// a prototype that will spawn upon failure interaction (as planned only for special effects)
+    /// </summary>
+    [DataField, ViewVariables(VVAccess.ReadWrite)]
+    public EntProtoId? InteractFailureSpawn;
+
     /// <summary>
     /// Chance that an interaction attempt will succeed.
     /// 1   = always play "success" popup and sound.
index 286919b64fc881fe5559ca82e7dbb2b881015f21..86158fb7a89f5a67a0803423295172197d719c48 100644 (file)
@@ -58,6 +58,9 @@ public sealed class InteractionPopupSystem : EntitySystem
 
             if (component.InteractSuccessSound != null)
                 sfx = component.InteractSuccessSound.GetSound();
+
+            if (component.InteractSuccessSpawn != null)
+                Spawn(component.InteractSuccessSpawn, Transform(uid).MapPosition);
         }
         else
         {
@@ -66,6 +69,9 @@ public sealed class InteractionPopupSystem : EntitySystem
 
             if (component.InteractFailureSound != null)
                 sfx = component.InteractFailureSound.GetSound();
+
+            if (component.InteractFailureSpawn != null)
+                Spawn(component.InteractFailureSpawn, Transform(uid).MapPosition);
         }
 
         if (component.MessagePerceivedByOthers != null)
diff --git a/Resources/Prototypes/Entities/Effects/hearts.yml b/Resources/Prototypes/Entities/Effects/hearts.yml
new file mode 100644 (file)
index 0000000..042fdb5
--- /dev/null
@@ -0,0 +1,16 @@
+- type: entity
+  id: EffectHearts
+  noSpawn: true
+  components:
+  - type: TimedDespawn
+    lifetime: 0.85
+  - type: Sprite
+    noRot: true
+    drawdepth: Effects
+    sprite: Effects/hearts.rsi
+    state: hearts
+  - type: EffectVisuals
+  - type: Tag
+    tags:
+      - HideContextMenu
+  - type: AnimationPlayer
\ No newline at end of file
index a79a0e0a99b031d22a69536c621638eb5f07c3f2..0077fddcfc4002ef7136e901242d68411ce13c62 100644 (file)
@@ -41,6 +41,7 @@
     successChance: 0.2
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-bat
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/fox_squeak.ogg
   - type: SentienceTarget
     successChance: 0.8
     interactSuccessString: petting-success-bird
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/chicken_cluck_happy.ogg
   - type: Bloodstream
     successChance: 0.9
     interactSuccessString: petting-success-bird
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/duck_quack_happy.ogg
   - type: Bloodstream
     interactDelay: 2 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/cow_moo.ogg
   - type: Perishable
     successChance: 0.5
     interactSuccessString: petting-success-crab
     interactFailureString: petting-failure-crab
+    interactSuccessSpawn: EffectHearts
   - type: Bloodstream
     bloodMaxVolume: 50
   - type: Tag
     successChance: 0.2
     interactSuccessString: petting-success-goat
     interactFailureString: petting-failure-goat
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/goat_bah.ogg
   - type: NpcFactionMember
     successChance: 0.1 # Yeah, good luck with that.
     interactSuccessString: petting-success-goose
     interactFailureString: petting-failure-goose
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/goose_honk.ogg
   - type: Bloodstream
     successChance: 0.3
     interactSuccessString: petting-success-reptile
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/lizard_happy.ogg
   - type: Bloodstream
     successChance: 0.3
     interactSuccessString: petting-success-generic
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
   - type: Bloodstream
     bloodMaxVolume: 50
 
     successChance: 0.6
     interactSuccessString: petting-success-frog
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/frog_ribbit.ogg
   - type: Bloodstream
     successChance: 0.6
     interactSuccessString: petting-success-bird
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/parrot_raught.ogg
   - type: Bloodstream
     successChance: 0.5
     interactSuccessString: petting-success-bird
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/penguin_squawk.ogg
   - type: Tag
     successChance: 0.6
     interactSuccessString: petting-success-reptile
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
   - type: Bloodstream
     bloodMaxVolume: 50
   - type: Damageable
     successChance: 0.5
     interactSuccessString: petting-success-tarantula
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
   - type: NoSlip
   - type: Spider
   - type: IgnoreSpiderWeb
     successChance: 0.2 # Low when undomesticated.
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/raccoon_chatter.ogg
   - type: Grammar
     successChance: 0.5
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/fox_squeak.ogg
   - type: Grammar
   - type: InteractionPopup
     interactSuccessString: petting-success-dog
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/small_dog_bark_happy.ogg
   - type: Grammar
     successChance: 0.7
     interactSuccessString: petting-success-cat
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/cat_meow.ogg
   - type: Grammar
     successChance: 0.7
     interactSuccessString: petting-success-space-cat
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/cat_meow.ogg
   - type: Respirator #It just works?
     successChance: 0.9
     interactSuccessString: petting-success-sloth
     interactFailureString: petting-failure-sloth
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/sloth_squeak.ogg
   - type: Grammar
     interactDelay: 1.5 # Avoids overlapping SFX due to spam - these SFX are a little longer than the typical 1 second.
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/ferret_happy.ogg
   - type: Grammar
     successChance: 0.4
     interactSuccessString: petting-success-hamster
     interactFailureString: petting-failure-hamster
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/fox_squeak.ogg
   - type: Bloodstream
     successChance: 0.7
     interactSuccessString: petting-success-pig
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/pig_oink.ogg
   - type: ReplacementAccent
index 1efa767af1bc7465fe054f3035a4d9f4023970f3..21cc305acdebac79d5dba63ac325f42edbc9f738 100644 (file)
     successChance: 0.9
     interactSuccessString: petting-success-bingus
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/cat_meow.ogg
   - type: Grammar
     successChance: 0.5
     interactSuccessString: petting-success-dog
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/small_dog_bark_happy.ogg
   - type: Grammar
     successChance: 1
     interactSuccessString: petting-success-sloth
     interactFailureString: petting-failure-sloth
+    interactSuccessSpawn: EffectHearts
   - type: Grammar
     attributes:
       proper: true
     successChance: 0.7
     interactSuccessString: petting-success-dog
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/small_dog_bark_happy.ogg
   - type: Grammar
     successChance: 1.0 # Hey, c'mon, this is Morty we're talking about here.
     interactSuccessString: petting-success-possum
     interactFailureString: petting-failure-possum
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/snake_hiss.ogg
   - type: Grammar
     successChance: 0.7
     interactSuccessString: petting-success-raccoon
     interactFailureString: petting-failure-raccoon
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/raccoon_chatter.ogg
   - type: Grammar
     successChance: 1
     interactSuccessString: petting-success-pig
     interactFailureString: petting-failure-pig
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/pig_oink.ogg
   - type: Grammar
     successChance: 1
     interactSuccessString: petting-success-soft-floofy
     interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/fox_squeak.ogg
   - type: Butcherable
     successChance: 1
     interactSuccessString: petting-success-hamster
     interactFailureString: petting-failure-hamster
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/fox_squeak.ogg
   - type: Butcherable
     successChance: 0.5 # spider is mean
     interactSuccessString: petting-success-tarantula
     interactFailureString: petting-failure-hamster
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/snake_hiss.ogg
   - type: NpcFactionMember
   - type: InteractionPopup
     successChance: 0.8
     interactSuccessString: petting-success-kangaroo
-    interactFailureString: petting-failure-kangaroo
+    interactFailureString: petting-failure-generic
+    interactSuccessSpawn: EffectHearts
     interactSuccessSound:
       path: /Audio/Animals/kangaroo_grunt.ogg
   - type: Grammar
diff --git a/Resources/Textures/Effects/hearts.rsi/hearts.png b/Resources/Textures/Effects/hearts.rsi/hearts.png
new file mode 100644 (file)
index 0000000..25bf0a8
Binary files /dev/null and b/Resources/Textures/Effects/hearts.rsi/hearts.png differ
diff --git a/Resources/Textures/Effects/hearts.rsi/meta.json b/Resources/Textures/Effects/hearts.rsi/meta.json
new file mode 100644 (file)
index 0000000..0c90d63
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "version": 1,
+    "size": {
+        "x": 32,
+        "y": 32
+    },
+    "license": "CC-BY-SA-3.0",
+    "copyright": "Created by TheShuEd (github) for ss14",
+    "states": [
+        {
+            "name": "hearts",
+            "delays": [
+                [
+                    0.15,
+                    0.15,
+                    0.15,
+                    0.15,
+                    0.15,
+                    0.15
+                ]
+            ]
+        }
+    ]
+}
\ No newline at end of file