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:
@@ -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;
|
||||||
|
|||||||
BIN
Resources/Audio/Animals/cat_hiss.ogg
Normal file
BIN
Resources/Audio/Animals/cat_hiss.ogg
Normal file
Binary file not shown.
BIN
Resources/Audio/Animals/ferret_happy.ogg
Normal file
BIN
Resources/Audio/Animals/ferret_happy.ogg
Normal file
Binary file not shown.
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
23
Resources/Textures/Mobs/Animals/possum.rsi/meta.json
Normal file
23
Resources/Textures/Mobs/Animals/possum.rsi/meta.json
Normal 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]]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Mobs/Animals/possum.rsi/possum.png
Normal file
BIN
Resources/Textures/Mobs/Animals/possum.rsi/possum.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 721 B |
BIN
Resources/Textures/Mobs/Animals/possum.rsi/possum_dead.png
Normal file
BIN
Resources/Textures/Mobs/Animals/possum.rsi/possum_dead.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 468 B |
24
Resources/Textures/Mobs/Animals/raccoon.rsi/meta.json
Normal file
24
Resources/Textures/Mobs/Animals/raccoon.rsi/meta.json
Normal 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]]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Mobs/Animals/raccoon.rsi/raccoon.png
Normal file
BIN
Resources/Textures/Mobs/Animals/raccoon.rsi/raccoon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 740 B |
BIN
Resources/Textures/Mobs/Animals/raccoon.rsi/raccoon_dead.png
Normal file
BIN
Resources/Textures/Mobs/Animals/raccoon.rsi/raccoon_dead.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 496 B |
BIN
Resources/Textures/Mobs/Pets/ferret.rsi/ferret.png
Normal file
BIN
Resources/Textures/Mobs/Pets/ferret.rsi/ferret.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1013 B |
BIN
Resources/Textures/Mobs/Pets/ferret.rsi/ferret_dead.png
Normal file
BIN
Resources/Textures/Mobs/Pets/ferret.rsi/ferret_dead.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 454 B |
24
Resources/Textures/Mobs/Pets/ferret.rsi/meta.json
Normal file
24
Resources/Textures/Mobs/Pets/ferret.rsi/meta.json
Normal 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]]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user