Possums and Raccoons and Ferrets, Oh My! (#6808)

* * Fixed Reagent Tanks so they now dispense an amount according to the transfer amount of the bucket you use.

* Revert "* Fixed Reagent Tanks so they now dispense an amount according to the transfer amount of the bucket you use."

This reverts commit 3b565c0509e0a802b5aec63fc62007205ec330f1.

* Adds possums along with their sound effects and petting popup messages.

* Adds Morty my beloved

* Fixed a small error in InteractionPopupSystem that was causing an error: "[ERRO] root: Server tried to play audio file  which does not exist."

* Added raccoons

* Adds Morticia the raccoon. Morticia my beloved! (Original character do not steal :P)

* Adds ferrets and their SFX

* Well excuuu-uuuuse ME, Princess!

* "It can't be THAT easy..." --Spider-man Noir

* It's that easy.
This commit is contained in:
Willhelm53
2022-02-23 12:40:31 -06:00
committed by GitHub
parent 12ba246d21
commit b4b2f02264
17 changed files with 274 additions and 5 deletions

View File

@@ -37,7 +37,7 @@ public sealed class InteractionPopupSystem : EntitySystem
return; return;
string msg = ""; // Stores the text to be shown in the popup message string msg = ""; // Stores the text to be shown in the popup message
string sfx = ""; // Stores the filepath of the sound to be played string? sfx = null; // Stores the filepath of the sound to be played
if (_random.Prob(component.SuccessChance)) if (_random.Prob(component.SuccessChance))
{ {
@@ -61,10 +61,13 @@ public sealed class InteractionPopupSystem : EntitySystem
else else
_popupSystem.PopupEntity(msg, uid, Filter.Entities(args.User)); //play only for the initiating entity. _popupSystem.PopupEntity(msg, uid, Filter.Entities(args.User)); //play only for the initiating entity.
if (component.SoundPerceivedByOthers) if (sfx is not null) //not all cases will have sound.
SoundSystem.Play(Filter.Pvs(args.Target), sfx, args.Target); //play for everyone in range {
else if (component.SoundPerceivedByOthers)
SoundSystem.Play(Filter.Entities(args.User, args.Target), sfx, args.Target); //play only for the initiating entity and its target. SoundSystem.Play(Filter.Pvs(args.Target), sfx, args.Target); //play for everyone in range
else
SoundSystem.Play(Filter.Entities(args.User, args.Target), sfx, args.Target); //play only for the initiating entity and its target.
}
component.LastInteractTime = curTime; component.LastInteractTime = curTime;
args.Handled = true; args.Handled = true;

Binary file not shown.

Binary file not shown.

View File

@@ -2,8 +2,12 @@ The following sounds were used from freesound:
cat_meow.ogg: modified from "Meow 4.wav" by freesound user "TRNGLE" (https://freesound.org/people/TRNGLE/sounds/368006/) licensed under CCBY 3.0. The original audio was trimmed, split to mono, and converted from WAV to OGG format. cat_meow.ogg: modified from "Meow 4.wav" by freesound user "TRNGLE" (https://freesound.org/people/TRNGLE/sounds/368006/) licensed under CCBY 3.0. The original audio was trimmed, split to mono, and converted from WAV to OGG format.
cat_hiss.ogg: modified from "catHisses1.wav" by freesound user "Zabuhailo" (https://freesound.org/people/Zabuhailo/sounds/146963/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
small_dog_bark_happy.ogg: modified from "Dog bark2.wav" by freesound user "MisterTood" (https://freesound.org/people/MisterTood/sounds/9032/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format. small_dog_bark_happy.ogg: modified from "Dog bark2.wav" by freesound user "MisterTood" (https://freesound.org/people/MisterTood/sounds/9032/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
duck_quack_happy.ogg: modified from "Duck Quack - Sound Effect (HD).mp3" by freesound user "Tabby+Gus." (https://freesound.org/people/Tabby+Gus./sounds/515408/) licensed under CC0 1.0 (public domain). The original audio was trimmed, looped, split to mono, and converted from MP3 to OGG format. duck_quack_happy.ogg: modified from "Duck Quack - Sound Effect (HD).mp3" by freesound user "Tabby+Gus." (https://freesound.org/people/Tabby+Gus./sounds/515408/) licensed under CC0 1.0 (public domain). The original audio was trimmed, looped, split to mono, and converted from MP3 to OGG format.
chicken_cluck_happy.ogg: modified from "Chicken Single Alarm Call" by freesound user "Rudmer_Rotteveel" (https://freesound.org/people/Rudmer_Rotteveel/sounds/316920/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format. chicken_cluck_happy.ogg: modified from "Chicken Single Alarm Call" by freesound user "Rudmer_Rotteveel" (https://freesound.org/people/Rudmer_Rotteveel/sounds/316920/) licensed under CC0 1.0 (public domain). The original audio was trimmed and converted from WAV to OGG format.
ferret_happy.ogg: modified from "Ferret" by freesound user "J.Zazvurek" (https://freesound.org/people/J.Zazvurek/sounds/155115/) licensed under CC BY 3.0. The original audio was trimmed and converted from WAV to OGG format.

View File

@@ -13,6 +13,7 @@ petting-success-dog = You pet {THE($target)} on {POSS-ADJ($target)} soft floofy
petting-success-frog = You pet {THE($target)} on {POSS-ADJ($target)} slippery little head. petting-success-frog = You pet {THE($target)} on {POSS-ADJ($target)} slippery little head.
petting-success-goat = You pet {THE($target)} on {POSS-ADJ($target)} horned floofy head. petting-success-goat = You pet {THE($target)} on {POSS-ADJ($target)} horned floofy head.
petting-success-goose = Against all odds, you manage to pet {THE($target)} on {POSS-ADJ($target)} horrible little head. petting-success-goose = Against all odds, you manage to pet {THE($target)} on {POSS-ADJ($target)} horrible little head.
petting-success-possum = You pet {THE($target)} on {POSS-ADJ($target)} horrible little head.
petting-success-reptile = You pet {THE($target)} on {POSS-ADJ($target)} scaly little head. petting-success-reptile = You pet {THE($target)} on {POSS-ADJ($target)} scaly little head.
petting-success-sloth = You pet {THE($target)} on {POSS-ADJ($target)} slow moving head. petting-success-sloth = You pet {THE($target)} on {POSS-ADJ($target)} slow moving head.
petting-success-space-cat = You pet {THE($target)} on {POSS-ADJ($target)} glass domed head. petting-success-space-cat = You pet {THE($target)} on {POSS-ADJ($target)} glass domed head.
@@ -26,6 +27,7 @@ petting-failure-corrupted-corgi = You reach out to pet {THE($target)}, but think
petting-failure-crab = You reach out to pet {THE($target)}, but {SUBJECT($target)} snaps {POSS-ADJ($target)} claws in your general direction! petting-failure-crab = You reach out to pet {THE($target)}, but {SUBJECT($target)} snaps {POSS-ADJ($target)} claws in your general direction!
petting-failure-goat = You reach out to pet {THE($target)}, but {SUBJECT($target)} stubbornly refuses! petting-failure-goat = You reach out to pet {THE($target)}, but {SUBJECT($target)} stubbornly refuses!
petting-failure-goose = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} too horrible! petting-failure-goose = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} too horrible!
petting-failure-possum = You reach out to pet {THE($target)}, but are met with hisses and snarls!
petting-failure-sloth = You reach out to pet {THE($target)}, but {SUBJECT($target)} somehow dodge with ludicrous speed! petting-failure-sloth = You reach out to pet {THE($target)}, but {SUBJECT($target)} somehow dodge with ludicrous speed!
## Knocking on windows ## Knocking on windows

View File

@@ -45,6 +45,32 @@
- MobCorgi - MobCorgi
- MobCorgiOld - MobCorgiOld
- type: entity
name: Possum Morty Spawner
id: SpawnMobPossumMorty
parent: MarkerBase
components:
- type: Sprite
layers:
- state: green
- state: ai
- type: ConditionalSpawner
prototypes:
- MobPossumMorty
- type: entity
name: Raccoon Morticia Spawner
id: SpawnMobRaccoonMorticia
parent: MarkerBase
components:
- type: Sprite
layers:
- state: green
- state: ai
- type: ConditionalSpawner
prototypes:
- MobRaccoonMorticia
## Player-controlled ## Player-controlled
- type: entity - type: entity

View File

@@ -937,3 +937,119 @@
successChance: 0.5 successChance: 0.5
interactSuccessString: petting-success-tarantula interactSuccessString: petting-success-tarantula
interactFailureString: petting-failure-generic interactFailureString: petting-failure-generic
- type: entity
name: possum
parent: SimpleMobBase
id: MobPossum
description: '"O Possum! My Possum!" -- Walt Whitman, 1865'
components:
- type: Sprite
drawdepth: Mobs
sprite: Mobs/Animals/possum.rsi
scale: 0.7, 0.7 # Possums are pretty huge on Goonstation, let's scale them down a little.
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: possum
- type: Physics
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeCircle
radius: 0.35
mass: 10
mask:
- Impassable
- MobImpassable
- VaultImpassable
- SmallImpassable
layer:
- Opaque
- type: Appearance
visuals:
- type: DamageStateVisualizer
normal: possum
crit: possum_dead # TODO: Make it so possums can "play dead." Probably need AI changes
dead: possum_dead
- type: Butcherable
spawned: FoodMeat
pieces: 3
- type: InteractionPopup
successChance: 0.2 # Low when undomesticated.
interactSuccessString: petting-success-possum # Possums don't really make much noise when they're happy. They make clicking noises as a mating call, but that is NOT the same thing!
interactFailureString: petting-failure-possum
interactFailureSound:
path: /Audio/Animals/cat_hiss.ogg # This sound effect is intended for generic hissing. For easy reference it's named after the animal it came from IRL.
- type: Grammar
attributes:
gender: epicene
- type: entity
name: Morty
parent: MobPossum
id: MobPossumMorty
description: The station's resident Didelphis virginiana. A sensitive but resilient kind of guy.
components:
- type: InteractionPopup
successChance: 1.0 # Hey, c'mon, this is Morty we're talking about here.
- type: Grammar
attributes:
proper: true
gender: male
- type: entity
name: raccoon
parent: SimpleMobBase
id: MobRaccoon
description: Trash panda!
components:
- type: Sprite
drawdepth: Mobs
sprite: Mobs/Animals/raccoon.rsi
scale: 0.7, 0.7
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: raccoon
- type: Physics
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeCircle
radius: 0.35
mass: 10
mask:
- Impassable
- MobImpassable
- VaultImpassable
- SmallImpassable
layer:
- Opaque
- type: Appearance
visuals:
- type: DamageStateVisualizer
normal: raccoon
crit: raccoon_dead
dead: raccoon_dead
- type: Butcherable
spawned: FoodMeat
pieces: 3
- type: InteractionPopup
successChance: 0.2 # Low when undomesticated.
interactSuccessString: petting-success-soft-floofy
interactFailureString: petting-failure-generic
- type: Grammar
attributes:
gender: epicene
- type: entity
name: Morticia
parent: MobRaccoon
id: MobRaccoonMorticia
description: A powerful creature of the night. Her eyeshadow is always on point.
components:
- type: InteractionPopup
successChance: 0.7
- type: Grammar
attributes:
proper: true
gender: female

View File

@@ -339,3 +339,50 @@
- type: Grammar - type: Grammar
attributes: attributes:
gender: epicene gender: epicene
- type: entity
name: ferret
parent: SimpleMobBase
id: MobFerret
description: Just a silly little guy!
components:
- type: Sprite
drawdepth: Mobs
sprite: Mobs/Pets/ferret.rsi
scale: 0.7, 0.7
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: ferret
- type: Physics
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeCircle
radius: 0.35
mass: 10
mask:
- Impassable
- MobImpassable
- VaultImpassable
- SmallImpassable
layer:
- Opaque
- type: Appearance
visuals:
- type: DamageStateVisualizer
normal: ferret
crit: ferret_dead
dead: ferret_dead
- type: Butcherable
spawned: FoodMeat
pieces: 3
- type: InteractionPopup
successChance: 0.8
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
interactSuccessSound:
path: /Audio/Animals/ferret_happy.ogg
- type: Grammar
attributes:
gender: epicene

View File

@@ -0,0 +1,23 @@
{
"version": 1,
"size":
{
"x": 32,
"y": 32
},
"license": "CC-BY-NC-SA-3.0",
"copyright": "https://github.com/goonstation/goonstation/commit/c98666f47a90d106c7a154cedffc747b3769e933",
"states":
[
{
"name": "possum",
"directions": 4,
"delays": [[1],[1],[1],[1]]
},
{
"name": "possum_dead",
"directions": 1,
"delays": [[1]]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -0,0 +1,24 @@
{
"version": 1,
"size":
{
"x": 32,
"y": 32
},
"license": "CC-BY-NC-SA-3.0",
"copyright": "https://github.com/goonstation/goonstation/commit/c98666f47a90d106c7a154cedffc747b3769e933",
"states":
[
{
"name": "raccoon",
"directions": 4,
"delays": [[1],[1],[1],[1]]
},
{
"name": "raccoon_dead",
"directions": 1,
"delays": [[1]]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

View File

@@ -0,0 +1,24 @@
{
"version": 1,
"size":
{
"x": 32,
"y": 32
},
"license": "CC-BY-NC-SA-3.0",
"copyright": "https://github.com/goonstation/goonstation/commit/c98666f47a90d106c7a154cedffc747b3769e933",
"states":
[
{
"name": "ferret",
"directions": 4,
"delays": [[1],[1],[1],[1]]
},
{
"name": "ferret_dead",
"directions": 1,
"delays": [[1]]
}
]
}