Add Snails (#30765)
* add snails * scuffix * migrate * mo-grate * oopsied the ftls * Revert "oopsied the ftls" This reverts commit 0d3c6c17f31ec904679d6a48799cea71e77c1f99. * the curse of staging the wrong file, resolved. * Snoth * fix my dumbs * reviews 1 * anti space technology * salt hurty * spelling * Its a slotherhouse out here * sequencing * cooked snail * volfix * speed reversal
@@ -1,4 +1,4 @@
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Mobs.Components;
|
||||
|
||||
namespace Content.Shared.Mobs.Systems;
|
||||
@@ -14,9 +14,26 @@ public sealed class MobStateActionsSystem : EntitySystem
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<MobStateActionsComponent, MobStateChangedEvent>(OnMobStateChanged);
|
||||
SubscribeLocalEvent<MobStateComponent, ComponentInit>(OnMobStateComponentInit);
|
||||
}
|
||||
|
||||
private void OnMobStateChanged(EntityUid uid, MobStateActionsComponent component, MobStateChangedEvent args)
|
||||
{
|
||||
ComposeActions(uid, component, args.NewMobState);
|
||||
}
|
||||
|
||||
private void OnMobStateComponentInit(EntityUid uid, MobStateComponent component, ComponentInit args)
|
||||
{
|
||||
if (!TryComp<MobStateActionsComponent>(uid, out var mobStateActionsComp))
|
||||
return;
|
||||
|
||||
ComposeActions(uid, mobStateActionsComp, component.CurrentState);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds or removes actions from a mob based on mobstate.
|
||||
/// </summary>
|
||||
private void ComposeActions(EntityUid uid, MobStateActionsComponent component, MobState newMobState)
|
||||
{
|
||||
if (!TryComp<ActionsComponent>(uid, out var action))
|
||||
return;
|
||||
@@ -27,7 +44,7 @@ public sealed class MobStateActionsSystem : EntitySystem
|
||||
}
|
||||
component.GrantedActions.Clear();
|
||||
|
||||
if (!component.Actions.TryGetValue(args.NewMobState, out var toGrant))
|
||||
if (!component.Actions.TryGetValue(newMobState, out var toGrant))
|
||||
return;
|
||||
|
||||
foreach (var id in toGrant)
|
||||
|
||||
@@ -30,6 +30,15 @@ ghost-role-information-mouse-description = A hungry and mischievous mouse.
|
||||
ghost-role-information-mothroach-name = Mothroach
|
||||
ghost-role-information-mothroach-description = A cute but mischievous mothroach.
|
||||
|
||||
ghost-role-information-snail-name = Snail
|
||||
ghost-role-information-snail-description = A little snail who doesn't mind a bit of space. Just stay on grid!
|
||||
|
||||
ghost-role-information-snailspeed-name = Snail
|
||||
ghost-role-information-snailspeed-description = A little snail with snailborn thrusters.
|
||||
|
||||
ghost-role-information-snoth-name = Snoth
|
||||
ghost-role-information-snoth-description = A little snoth who doesn't mind a bit of space. Just stay on grid!
|
||||
|
||||
ghost-role-information-giant-spider-name = Giant spider
|
||||
ghost-role-information-giant-spider-description = This station's inhabitants look mighty tasty, and your sticky web is perfect to catch them!
|
||||
ghost-role-information-giant-spider-rules = You are a [color=red][bold]Team Antagonist[/bold][/color] with all other giant spiders.
|
||||
|
||||
@@ -73,6 +73,7 @@ food-sequence-content-capfruit = capfruit
|
||||
food-sequence-content-berries = berries
|
||||
food-sequence-content-spacemans-trumpet = spacemans trupmet
|
||||
food-sequence-content-cherry = cherry
|
||||
food-sequence-content-snail = snail
|
||||
|
||||
# BURGERS
|
||||
|
||||
|
||||
@@ -9,3 +9,7 @@ species-name-arachnid = Arachnid
|
||||
species-name-moth = Moth Person
|
||||
species-name-skeleton = Skeleton
|
||||
species-name-vox = Vox
|
||||
|
||||
## Misc species things
|
||||
|
||||
snail-hurt-by-salt-popup = The salty solution burns like acid!
|
||||
@@ -369,3 +369,206 @@
|
||||
suffix: "Salvage Ruleset"
|
||||
components:
|
||||
- type: SalvageMobRestrictions
|
||||
|
||||
- type: entity
|
||||
parent: SimpleSpaceMobBase
|
||||
id: MobSnail
|
||||
name: snail
|
||||
description: Revolting unless you're french.
|
||||
components:
|
||||
- type: Body
|
||||
prototype: Mouse
|
||||
- type: GhostRole
|
||||
makeSentient: true
|
||||
allowSpeech: false
|
||||
allowMovement: true
|
||||
name: ghost-role-information-snail-name
|
||||
description: ghost-role-information-snail-description
|
||||
rules: ghost-role-information-freeagent-rules
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Sprite
|
||||
drawdepth: SmallMobs
|
||||
sprite: Mobs/Animals/snail.rsi
|
||||
layers:
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: snail
|
||||
- type: Item
|
||||
size: Tiny
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Mouse
|
||||
- type: HTN
|
||||
rootTask:
|
||||
task: MouseCompound
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.2
|
||||
density: 100
|
||||
mask:
|
||||
- SmallMobMask
|
||||
layer:
|
||||
- SmallMobLayer
|
||||
- type: MobState
|
||||
- type: Deathgasp
|
||||
- type: MobStateActions
|
||||
actions:
|
||||
Critical:
|
||||
- ActionCritSuccumb
|
||||
- ActionCritFakeDeath
|
||||
- ActionCritLastWords
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
10: Critical
|
||||
20: Dead
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed : 2
|
||||
baseSprintSpeed : 3
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: snail
|
||||
Critical:
|
||||
Base: dead
|
||||
Dead:
|
||||
Base: dead
|
||||
- type: Food
|
||||
- type: Thirst
|
||||
startingThirst: 25 # spawn with Okay thirst state
|
||||
thresholds:
|
||||
OverHydrated: 35
|
||||
Okay: 25
|
||||
Thirsty: 15
|
||||
Parched: 10
|
||||
Dead: 0
|
||||
baseDecayRate: 0.04
|
||||
- type: Hunger
|
||||
currentHunger: 25 # spawn with Okay hunger state
|
||||
thresholds:
|
||||
Overfed: 35
|
||||
Okay: 25
|
||||
Peckish: 15
|
||||
Starving: 10
|
||||
Dead: 0
|
||||
baseDecayRate: 0.1
|
||||
- type: Extractable
|
||||
grindableSolutionName: food
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: UncookedAnimalProteins
|
||||
Quantity: 3
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatSnail
|
||||
amount: 1
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- VimPilot
|
||||
- ChefPilot
|
||||
- Meat
|
||||
- type: CombatMode
|
||||
combatToggleAction: ActionCombatModeToggleOff
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 30
|
||||
bloodReagent: Cryoxadone
|
||||
- type: CanEscapeInventory
|
||||
- type: MobPrice
|
||||
price: 50
|
||||
- type: BadFood
|
||||
- type: NonSpreaderZombie
|
||||
- type: PreventSpiller
|
||||
- type: FireVisuals
|
||||
sprite: Mobs/Effects/onfire.rsi
|
||||
normalState: Mouse_burning
|
||||
- type: Temperature
|
||||
heatDamageThreshold: 500
|
||||
coldDamageThreshold: 0
|
||||
- type: Reactive
|
||||
reactions:
|
||||
- reagents: [TableSalt, Saline]
|
||||
methods: [Touch, Ingestion, Injection]
|
||||
effects:
|
||||
- !type:HealthChange
|
||||
scaleByQuantity: true
|
||||
damage:
|
||||
types:
|
||||
Caustic: 1
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Large
|
||||
messages: [ "snail-hurt-by-salt-popup" ]
|
||||
probability: 0.66
|
||||
|
||||
- type: entity
|
||||
parent: MobSnail
|
||||
id: MobSnailInstantDeath
|
||||
suffix: Smite
|
||||
components:
|
||||
- type: MobStateActions
|
||||
actions:
|
||||
Alive:
|
||||
- ActionSmite
|
||||
Critical:
|
||||
- ActionCritSuccumb
|
||||
- ActionCritFakeDeath
|
||||
- ActionCritLastWords
|
||||
- type: Godmode
|
||||
- type: MovementAlwaysTouching
|
||||
|
||||
- type: entity
|
||||
parent: MobSnail
|
||||
id: MobSnailSpeed
|
||||
suffix: Speed
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-snailspeed-name
|
||||
description: ghost-role-information-snailspeed-description
|
||||
rules: ghost-role-information-freeagent-rules
|
||||
- type: Sprite
|
||||
layers:
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: spacesnail
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: spacesnail
|
||||
Critical:
|
||||
Base: spacesnaildead
|
||||
Dead:
|
||||
Base: spacesnaildead
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed : 5 #he go fast, also they cant slip so its probably fine.
|
||||
baseSprintSpeed : 7
|
||||
# - type: ActiveJetpack # I think this will need a custom component to not make tests angry.
|
||||
- type: MovementAlwaysTouching
|
||||
|
||||
- type: entity
|
||||
parent: MobSnail
|
||||
id: MobSnailMoth
|
||||
name: Snoth
|
||||
components:
|
||||
- type: Body
|
||||
prototype: Mothroach
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-snoth-name
|
||||
description: ghost-role-information-snoth-description
|
||||
rules: ghost-role-information-freeagent-rules
|
||||
- type: Sprite
|
||||
layers:
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: snoth
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: snoth
|
||||
Critical:
|
||||
Base: snothdead
|
||||
Dead:
|
||||
Base: snothdead
|
||||
|
||||
@@ -930,6 +930,35 @@
|
||||
taco:
|
||||
name: food-sequence-content-slime
|
||||
|
||||
- type: entity
|
||||
name: raw snail meat
|
||||
parent: FoodMeatRawBase
|
||||
id: FoodMeatSnail
|
||||
description: Improved with salt.
|
||||
components:
|
||||
- type: Sprite
|
||||
state: snail
|
||||
- type: FoodSequenceElement
|
||||
sprite:
|
||||
sprite: Objects/Consumable/Food/meat.rsi
|
||||
state: snail
|
||||
entries:
|
||||
burger:
|
||||
name: food-sequence-content-snail
|
||||
taco:
|
||||
name: food-sequence-content-snail
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
maxVol: 15
|
||||
reagents:
|
||||
- ReagentId: UncookedAnimalProteins
|
||||
Quantity: 3
|
||||
- ReagentId: Fat
|
||||
Quantity: 3
|
||||
- ReagentId: Water
|
||||
Quantity: 4 #It makes saline if you add salt!
|
||||
|
||||
# Cooked
|
||||
|
||||
- type: entity
|
||||
@@ -1473,6 +1502,40 @@
|
||||
sprite: Objects/Consumable/Food/skewer.rsi
|
||||
state: skewer-meat
|
||||
|
||||
- type: entity
|
||||
name: boiled snail
|
||||
parent: FoodMeatBase
|
||||
id: FoodMeatSnailCooked
|
||||
description: Improved with salt.
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cooked
|
||||
- Meat
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: snail-cooked
|
||||
- type: FoodSequenceElement
|
||||
sprite:
|
||||
sprite: Objects/Consumable/Food/meat.rsi
|
||||
state: snail-cooked
|
||||
entries:
|
||||
burger:
|
||||
name: food-sequence-content-snail
|
||||
taco:
|
||||
name: food-sequence-content-snail
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
maxVol: 15
|
||||
reagents:
|
||||
- ReagentId: Nutriment
|
||||
Quantity: 3
|
||||
- ReagentId: Protein
|
||||
Quantity: 3
|
||||
- ReagentId: Water
|
||||
Quantity: 4 # makes saline if you add salt!
|
||||
|
||||
# Cutlets
|
||||
|
||||
# Raw
|
||||
|
||||
@@ -1227,3 +1227,33 @@
|
||||
- Fruit
|
||||
- Soup
|
||||
# Tastes like bungo, hot curry.
|
||||
|
||||
- type: entity
|
||||
name: escargot
|
||||
parent: FoodBowlBase
|
||||
id: FoodSoupEscargot
|
||||
description: A creamy and rich bowl of snails, bon appetit!
|
||||
components:
|
||||
- type: FlavorProfile
|
||||
flavors:
|
||||
- creamy
|
||||
- slimy
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: bowl
|
||||
- state: escargot
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
maxVol: 20
|
||||
reagents:
|
||||
- ReagentId: Nutriment
|
||||
Quantity: 6
|
||||
- ReagentId: Vitamin
|
||||
Quantity: 6
|
||||
- ReagentId: Allicin
|
||||
Quantity: 3
|
||||
- type: Tag
|
||||
tags:
|
||||
- Meat
|
||||
- Soup
|
||||
|
||||
@@ -337,6 +337,48 @@
|
||||
- id: MobMothroach
|
||||
prob: 0.008
|
||||
|
||||
- type: entity
|
||||
id: SnailMigrationLowPop
|
||||
parent: BaseStationEventShortDelay
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-vent-creatures-start-announcement
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 6
|
||||
duration: 50
|
||||
- type: VentCrittersRule
|
||||
entries:
|
||||
- id: MobSnail
|
||||
prob: 0.02
|
||||
- id: MobSnailSpeed
|
||||
prob: 0.002
|
||||
- id: MobSnailMoth
|
||||
prob: 0.002
|
||||
|
||||
- type: entity
|
||||
id: SnailMigration
|
||||
parent: BaseStationEventShortDelay
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-vent-creatures-start-announcement
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
earliestStart: 15
|
||||
weight: 6
|
||||
duration: 50
|
||||
minimumPlayers: 30
|
||||
- type: VentCrittersRule
|
||||
entries:
|
||||
- id: MobSnail
|
||||
prob: 0.02
|
||||
- id: MobSnailSpeed
|
||||
prob: 0.002
|
||||
- id: MobSnailMoth
|
||||
prob: 0.002
|
||||
- id: MobSnailInstantDeath
|
||||
prob: 0.00001 # ~ 1:2000 snails
|
||||
|
||||
- type: entity
|
||||
id: PowerGridCheck
|
||||
parent: BaseStationEventShortDelay
|
||||
|
||||
@@ -957,6 +957,29 @@
|
||||
FoodBungo: 2
|
||||
FoodChiliPepper: 1
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
id: RecipeBoiledSnail
|
||||
name: boiled snail recipe
|
||||
result: FoodMeatSnailCooked
|
||||
time: 5
|
||||
reagents:
|
||||
Water: 10
|
||||
solids:
|
||||
FoodMeatSnail: 1
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
id: RecipeEscargotSoup
|
||||
name: escargot recipe
|
||||
result: FoodSoupEscargot
|
||||
time: 10
|
||||
reagents:
|
||||
Water: 5
|
||||
solids:
|
||||
FoodBowlBig: 1
|
||||
FoodOnionSlice: 1
|
||||
FoodButter: 1
|
||||
FoodMeatSnailCooked: 1
|
||||
|
||||
#Pies
|
||||
|
||||
- type: microwaveMealRecipe
|
||||
|
||||
BIN
Resources/Textures/Mobs/Animals/snail.rsi/dead.png
Normal file
|
After Width: | Height: | Size: 441 B |
32
Resources/Textures/Mobs/Animals/snail.rsi/meta.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Created by Kezu (discord) & IProduceWidgets (github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "snail",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "dead"
|
||||
},
|
||||
{
|
||||
"name": "spacesnail",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "spacedead"
|
||||
},
|
||||
{
|
||||
"name": "snoth",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "snothdead"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Mobs/Animals/snail.rsi/snail.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Resources/Textures/Mobs/Animals/snail.rsi/snoth.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
Resources/Textures/Mobs/Animals/snail.rsi/snothdead.png
Normal file
|
After Width: | Height: | Size: 503 B |
BIN
Resources/Textures/Mobs/Animals/snail.rsi/spacedead.png
Normal file
|
After Width: | Height: | Size: 478 B |
BIN
Resources/Textures/Mobs/Animals/snail.rsi/spacesnail.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Resources/Textures/Objects/Consumable/Food/bowl.rsi/escargot.png
Normal file
|
After Width: | Height: | Size: 392 B |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. Fills created by potato1234_x",
|
||||
"copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. escargot from tgstation at https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955. Fills created by potato1234_x",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -66,6 +66,9 @@
|
||||
0.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "escargot"
|
||||
},
|
||||
{
|
||||
"name": "eyeball"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa",
|
||||
"copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, snail by IproduceWidgets (github) and Kezu (discord)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -152,6 +152,12 @@
|
||||
},
|
||||
{
|
||||
"name": "slime"
|
||||
},
|
||||
{
|
||||
"name": "snail"
|
||||
},
|
||||
{
|
||||
"name": "snail-cooked"
|
||||
},
|
||||
{
|
||||
"name": "snake"
|
||||
|
||||
|
After Width: | Height: | Size: 290 B |
BIN
Resources/Textures/Objects/Consumable/Food/meat.rsi/snail.png
Normal file
|
After Width: | Height: | Size: 307 B |