diff --git a/Content.Server/Speech/Components/BarkAccentComponent.cs b/Content.Server/Speech/Components/BarkAccentComponent.cs new file mode 100644 index 0000000000..2e9aef2e6f --- /dev/null +++ b/Content.Server/Speech/Components/BarkAccentComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Speech.Components +{ + [RegisterComponent] + public sealed partial class BarkAccentComponent : Component + { + } +} diff --git a/Content.Server/Speech/EntitySystems/BarkAccentSystem.cs b/Content.Server/Speech/EntitySystems/BarkAccentSystem.cs new file mode 100644 index 0000000000..a6e5b68ffc --- /dev/null +++ b/Content.Server/Speech/EntitySystems/BarkAccentSystem.cs @@ -0,0 +1,43 @@ +using Content.Server.Speech.Components; +using Robust.Shared.Random; + +namespace Content.Server.Speech.EntitySystems +{ + public sealed class BarkAccentSystem : EntitySystem + { + [Dependency] private readonly IRobustRandom _random = default!; + + private static readonly IReadOnlyList Barks = new List{ + " Woof!", " WOOF", " wof-wof" + }.AsReadOnly(); + + private static readonly IReadOnlyDictionary SpecialWords = new Dictionary() + { + { "ah", "arf" }, + { "Ah", "Arf" }, + { "oh", "oof" }, + { "Oh", "Oof" }, + }; + + public override void Initialize() + { + SubscribeLocalEvent(OnAccent); + } + + public string Accentuate(string message) + { + foreach (var (word, repl) in SpecialWords) + { + message = message.Replace(word, repl); + } + + return message.Replace("!", _random.Pick(Barks)) + .Replace("l", "r").Replace("L", "R"); + } + + private void OnAccent(EntityUid uid, BarkAccentComponent component, AccentGetEvent args) + { + args.Message = Accentuate(args.Message); + } + } +} diff --git a/Resources/Audio/Animals/attributions.yml b/Resources/Audio/Animals/attributions.yml index 180502850f..c9c20473c2 100644 --- a/Resources/Audio/Animals/attributions.yml +++ b/Resources/Audio/Animals/attributions.yml @@ -116,4 +116,19 @@ - files: ["kangaroo_grunt.ogg"] license: "CC-BY-4.0" copyright: "Audio is recorded/created by Pfranzen 'FreeSound.org'. The original audio was trimmed and renamed" - source: "https://freesound.org/people/pfranzen/sounds/322744/" \ No newline at end of file + source: "https://freesound.org/people/pfranzen/sounds/322744/" + +- files: ["dog_bark1.ogg"] + license: "CC0-1.0" + copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + +- files: ["dog_bark2.ogg"] + license: "CC0-1.0" + copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" + source: "https://freesound.org/people/KFerentchak/sounds/235912/" + +- files: ["dog_bark3.ogg"] + license: "CC0-1.0" + copyright: "Audio is recorded/created by KFerentchak 'FreeSound.org'. The original audio was trimmed and renamed" + source: "https://freesound.org/people/KFerentchak/sounds/235912/" \ No newline at end of file diff --git a/Resources/Audio/Animals/dog_bark1.ogg b/Resources/Audio/Animals/dog_bark1.ogg new file mode 100644 index 0000000000..8e5b8ca26e Binary files /dev/null and b/Resources/Audio/Animals/dog_bark1.ogg differ diff --git a/Resources/Audio/Animals/dog_bark2.ogg b/Resources/Audio/Animals/dog_bark2.ogg new file mode 100644 index 0000000000..c0dbd32b19 Binary files /dev/null and b/Resources/Audio/Animals/dog_bark2.ogg differ diff --git a/Resources/Audio/Animals/dog_bark3.ogg b/Resources/Audio/Animals/dog_bark3.ogg new file mode 100644 index 0000000000..634c3e23bc Binary files /dev/null and b/Resources/Audio/Animals/dog_bark3.ogg differ diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index d3f447ae47..5d6d0b337b 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -184,4 +184,8 @@ ghost-role-information-Death-Squad-description = One of Nanotrasen's top interna ghost-role-information-Cak-name = Cak ghost-role-information-Cak-description = You are the chef's favorite child. You're a living cake cat. -ghost-role-information-Cak-rules = You are a living edible sweet cat. Your task is to find your place in this world where everything wants to eat you. \ No newline at end of file +ghost-role-information-Cak-rules = You are a living edible sweet cat. Your task is to find your place in this world where everything wants to eat you. + +ghost-role-information-BreadDog-name = BreadDog +ghost-role-information-BreadDog-description = You are the chef's favorite child. You're a living bread dog. +ghost-role-information-BreadDog-rules = You're an edible dog made of bread. Your task is to find your place in this world where everything wants to eat you. \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 4ca9ab4a74..56bcfff306 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -774,3 +774,64 @@ - ReagentId: Wine Quantity: 5 # Tastes like decaying fungus. + +- type: entity + name: bread dog + id: MobBreadDog + parent: FoodBreadSausage + description: It's a bread. It's a dog. It's a... breaddog? + components: + - type: Sprite + noRot: true + drawdepth: Mobs + sprite: Mobs/Pets/breaddog.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: base + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 50 + mask: + - MobMask + layer: + - MobLayer + - type: RotationVisuals + defaultRotation: 0 + horizontalRotation: 0 + - type: Item + size: Ginormous + - type: GhostRole + prob: 1 + name: ghost-role-information-BreadDog-name + allowMovement: true + description: ghost-role-information-BreadDog-description + rules: ghost-role-information-BreadDog-rules + - type: GhostTakeoverAvailable + - type: BarkAccent + - type: Speech + speechSounds: Dog + speechVerb: SmallMob + - type: MovementSpeedModifier + baseWalkSpeed : 5 + baseSprintSpeed : 3 + - type: Tag + tags: + - VimPilot + - DoorBumpOpener + - type: CanEscapeInventory + baseResistTime: 2 + - type: Puller + needsHands: false + - type: Examiner + - type: CombatMode + - type: MeleeWeapon + soundHit: + path: /Audio/Animals/dog_bark1.ogg + hidden: true + damage: + groups: + Brute: 1 \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 0472a2c42f..10fb7b3aef 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1282,6 +1282,18 @@ FoodSnackRaisins: 1 OrganAnimalHeart: 1 +- type: microwaveMealRecipe + id: RecipeBreadDog + name: bread dog recipe + result: MobBreadDog + time: 15 + reagents: + Cognizine: 5 + solids: + FoodBreadSausage: 1 + OrganAnimalHeart: 1 + FoodSpaceshroomCooked: 1 + - type: microwaveMealRecipe id: RecipeGrapeTart name: grape tart recipe diff --git a/Resources/Prototypes/Voice/speech_sounds.yml b/Resources/Prototypes/Voice/speech_sounds.yml index ece518a7cc..abe6a83102 100644 --- a/Resources/Prototypes/Voice/speech_sounds.yml +++ b/Resources/Prototypes/Voice/speech_sounds.yml @@ -104,4 +104,13 @@ askSound: path: /Audio/Animals/cat_meow.ogg exclaimSound: - path: /Audio/Animals/cat_meow.ogg \ No newline at end of file + path: /Audio/Animals/cat_meow.ogg + +- type: speechSounds + id: Dog + saySound: + path: /Audio/Animals/dog_bark1.ogg + askSound: + path: /Audio/Animals/dog_bark3.ogg + exclaimSound: + path: /Audio/Animals/dog_bark2.ogg \ No newline at end of file diff --git a/Resources/Textures/Mobs/Pets/breaddog.rsi/base.png b/Resources/Textures/Mobs/Pets/breaddog.rsi/base.png new file mode 100644 index 0000000000..4897cc6422 Binary files /dev/null and b/Resources/Textures/Mobs/Pets/breaddog.rsi/base.png differ diff --git a/Resources/Textures/Mobs/Pets/breaddog.rsi/dead.png b/Resources/Textures/Mobs/Pets/breaddog.rsi/dead.png new file mode 100644 index 0000000000..4a1a7c809e Binary files /dev/null and b/Resources/Textures/Mobs/Pets/breaddog.rsi/dead.png differ diff --git a/Resources/Textures/Mobs/Pets/breaddog.rsi/meta.json b/Resources/Textures/Mobs/Pets/breaddog.rsi/meta.json new file mode 100644 index 0000000000..45d0190b0c --- /dev/null +++ b/Resources/Textures/Mobs/Pets/breaddog.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "taken from tgstation on commit https://github.com/tgstation/tgstation/commit/ce6f2724cd79fa7c916e97167f9eab61cbd0a8cb", + "states": + [ + { + "name": "base", + "directions": 4 + }, + + { + "name": "dead", + "directions": 1 + } + ] +} \ No newline at end of file