diff --git a/Content.Server/Interaction/Components/InteractionPopupComponent.cs b/Content.Server/Interaction/Components/InteractionPopupComponent.cs index eef29506b2..f41f57dd09 100644 --- a/Content.Server/Interaction/Components/InteractionPopupComponent.cs +++ b/Content.Server/Interaction/Components/InteractionPopupComponent.cs @@ -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; + /// + /// a prototype that will spawn upon successful interaction (as planned only for special effects) + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntProtoId? InteractSuccessSpawn; + + /// + /// a prototype that will spawn upon failure interaction (as planned only for special effects) + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntProtoId? InteractFailureSpawn; + /// /// Chance that an interaction attempt will succeed. /// 1 = always play "success" popup and sound. diff --git a/Content.Server/Interaction/InteractionPopupSystem.cs b/Content.Server/Interaction/InteractionPopupSystem.cs index 286919b64f..86158fb7a8 100644 --- a/Content.Server/Interaction/InteractionPopupSystem.cs +++ b/Content.Server/Interaction/InteractionPopupSystem.cs @@ -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 index 0000000000..042fdb5e8a --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/hearts.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index a79a0e0a99..0077fddcfc 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -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 @@ -204,6 +205,7 @@ successChance: 0.8 interactSuccessString: petting-success-bird interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/chicken_cluck_happy.ogg - type: Bloodstream @@ -290,6 +292,7 @@ successChance: 0.9 interactSuccessString: petting-success-bird interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/duck_quack_happy.ogg - type: Bloodstream @@ -469,6 +472,7 @@ 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 @@ -523,6 +527,7 @@ successChance: 0.5 interactSuccessString: petting-success-crab interactFailureString: petting-failure-crab + interactSuccessSpawn: EffectHearts - type: Bloodstream bloodMaxVolume: 50 - type: Tag @@ -598,6 +603,7 @@ successChance: 0.2 interactSuccessString: petting-success-goat interactFailureString: petting-failure-goat + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/goat_bah.ogg - type: NpcFactionMember @@ -650,6 +656,7 @@ 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 @@ -1160,6 +1167,7 @@ successChance: 0.3 interactSuccessString: petting-success-reptile interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/lizard_happy.ogg - type: Bloodstream @@ -1215,6 +1223,7 @@ successChance: 0.3 interactSuccessString: petting-success-generic interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts - type: Bloodstream bloodMaxVolume: 50 @@ -1259,6 +1268,7 @@ successChance: 0.6 interactSuccessString: petting-success-frog interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/frog_ribbit.ogg - type: Bloodstream @@ -1310,6 +1320,7 @@ successChance: 0.6 interactSuccessString: petting-success-bird interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/parrot_raught.ogg - type: Bloodstream @@ -1353,6 +1364,7 @@ successChance: 0.5 interactSuccessString: petting-success-bird interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/penguin_squawk.ogg - type: Tag @@ -1578,6 +1590,7 @@ successChance: 0.6 interactSuccessString: petting-success-reptile interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts - type: Bloodstream bloodMaxVolume: 50 - type: Damageable @@ -1655,6 +1668,7 @@ successChance: 0.5 interactSuccessString: petting-success-tarantula interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts - type: NoSlip - type: Spider - type: IgnoreSpiderWeb @@ -1834,6 +1848,7 @@ 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 @@ -1890,6 +1905,7 @@ successChance: 0.5 interactSuccessString: petting-success-soft-floofy interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/fox_squeak.ogg - type: Grammar @@ -1951,6 +1967,7 @@ - type: InteractionPopup interactSuccessString: petting-success-dog interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/small_dog_bark_happy.ogg - type: Grammar @@ -2100,6 +2117,7 @@ successChance: 0.7 interactSuccessString: petting-success-cat interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/cat_meow.ogg - type: Grammar @@ -2152,6 +2170,7 @@ 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? @@ -2225,6 +2244,7 @@ successChance: 0.9 interactSuccessString: petting-success-sloth interactFailureString: petting-failure-sloth + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/sloth_squeak.ogg - type: Grammar @@ -2282,6 +2302,7 @@ 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 @@ -2412,6 +2433,7 @@ successChance: 0.4 interactSuccessString: petting-success-hamster interactFailureString: petting-failure-hamster + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/fox_squeak.ogg - type: Bloodstream @@ -2482,6 +2504,7 @@ successChance: 0.7 interactSuccessString: petting-success-pig interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/pig_oink.ogg - type: ReplacementAccent diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 1efa767af1..21cc305acd 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -211,6 +211,7 @@ successChance: 0.9 interactSuccessString: petting-success-bingus interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/cat_meow.ogg - type: Grammar @@ -273,6 +274,7 @@ successChance: 0.5 interactSuccessString: petting-success-dog interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/small_dog_bark_happy.ogg - type: Grammar @@ -312,6 +314,7 @@ successChance: 1 interactSuccessString: petting-success-sloth interactFailureString: petting-failure-sloth + interactSuccessSpawn: EffectHearts - type: Grammar attributes: proper: true @@ -368,6 +371,7 @@ successChance: 0.7 interactSuccessString: petting-success-dog interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/small_dog_bark_happy.ogg - type: Grammar @@ -389,6 +393,7 @@ 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 @@ -410,6 +415,7 @@ successChance: 0.7 interactSuccessString: petting-success-raccoon interactFailureString: petting-failure-raccoon + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/raccoon_chatter.ogg - type: Grammar @@ -431,6 +437,7 @@ successChance: 1 interactSuccessString: petting-success-pig interactFailureString: petting-failure-pig + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/pig_oink.ogg - type: Grammar @@ -452,6 +459,7 @@ successChance: 1 interactSuccessString: petting-success-soft-floofy interactFailureString: petting-failure-generic + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/fox_squeak.ogg - type: Butcherable @@ -492,6 +500,7 @@ successChance: 1 interactSuccessString: petting-success-hamster interactFailureString: petting-failure-hamster + interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/fox_squeak.ogg - type: Butcherable @@ -518,6 +527,7 @@ 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 @@ -592,7 +602,8 @@ - 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 index 0000000000..25bf0a8b5a 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 index 0000000000..0c90d63d88 --- /dev/null +++ b/Resources/Textures/Effects/hearts.rsi/meta.json @@ -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