ВНИМАНИЕ!!! ОБНАРУЖЕНЫ УЛИТКИ!!! (#774)

This commit is contained in:
BIGZi0348
2024-11-11 09:54:23 +03:00
committed by Jabak
parent 0db0511a5e
commit e37a1758fc
31 changed files with 519 additions and 9 deletions

View File

@@ -14,9 +14,26 @@ public sealed class MobStateActionsSystem : EntitySystem
public override void Initialize()
{
SubscribeLocalEvent<MobStateActionsComponent, MobStateChangedEvent>(OnMobStateChanged);
SubscribeLocalEvent<MobStateComponent, ComponentInit>(OnMobStateComponentInit); // WD ahead of wizden
}
private void OnMobStateChanged(EntityUid uid, MobStateActionsComponent component, MobStateChangedEvent args)
{
ComposeActions(uid, component, args.NewMobState); // WD ahead of wizden
}
private void OnMobStateComponentInit(EntityUid uid, MobStateComponent component, ComponentInit args) // WD ahead of wizden
{
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) // WD ahead of wizden
{
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)

View File

@@ -10,6 +10,13 @@ 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!

View File

@@ -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!

View File

@@ -37,8 +37,8 @@ spellbook-mime-desc = { ent-ActionMimeTouchSpell.desc }
spellbook-recall-name = { ent-ActionInstantRecallSpell }
spellbook-recall-desc = { ent-ActionInstantRecallSpell.desc }
spellbook-smite-name = { ent-ActionSmite }
spellbook-smite-desc = { ent-ActionSmite.desc }
spellbook-smite-name = { ent-ActionSmiteWizard }
spellbook-smite-desc = { ent-ActionSmiteWizard.desc }
spellbook-mindswap-name = { ent-ActionMindswapSpell }
spellbook-mindswap-desc = { ent-ActionMindswapSpell.desc }

View File

@@ -40,7 +40,7 @@ ent-ActionTeleportSpell = Телепортация
ent-ActionKnock = Стук
.desc = Открывает все двери, шлюзы и шкафы в радиусе 5 тайлов.
ent-ActionSmite = Кара
ent-ActionSmiteWizard = Кара
.desc = Заряжает вашу руку мерзкой энергией, которую можно использовать для взрыва жертв. Заклинание требует, чтобы вы коснулись своей цели, поэтому вы не сможете использовать его в наручниках или будучи оглушённым. Не работает без волшебной мантии и шляпы.
ent-ActionMindswapSpell = Подмена сознания

View File

@@ -10,6 +10,15 @@ ghost-role-information-mouse-description = Голодная и озорная м
ghost-role-information-mothroach-name = Таракамоль
ghost-role-information-mothroach-description = Милая озорная таракамоль.
ghost-role-information-snail-name = Улитка
ghost-role-information-snail-description = Маленькая улитка, которая не против немного побыть на свободе. Только не убегай за пределы клетки!
ghost-role-information-snailspeed-name = Улитка
ghost-role-information-snailspeed-description = Маленькая улитка с турбоулиточными ускорителями.
ghost-role-information-snoth-name = Молитка
ghost-role-information-snoth-description = Маленькая молитка, которая не против немного побыть на свободе. Только не убегай за пределы клетки!
ghost-role-information-deathsnail-name = Улитка забвения
ghost-role-information-deathsnail-description = Маленькая улитка, предвестник Конца, последний адепт Элегиста. Вся жизнь будет окончена, все звёзды - потухнут, но она останется.
ghost-role-information-giant-spider-name = Гигантский паук
ghost-role-information-giant-spider-description = Устройте хаос обитателям станции!

View File

@@ -51,3 +51,13 @@ ent-MobKangarooSpace = космо-кенгуру
.desc = Это выглядит дружелюбно. Почему бы тебе не обнять его?
ent-MobSpiderSpace = космо-паук
.desc = Он так светится, что выглядит опасным.
ent-MobSnail = улитка
.desc = Отвратительна, только если вы не француз.
ent-MobSnailInstantDeath = { ent-MobSnail }
.suffix = Кара
.desc = Древнее существо, пришедшее из ниоткуда и которое останется, пока последний атом не будет расчеплён.
ent-MobSnailSpeed = { ent-MobSnail }
.suffix = Скорость
.desc = { ent-MobSnail.desc }
ent-MobSnailMoth = молитка
.desc = Отвратительна, только если вы не моль-француз.

View File

@@ -10,3 +10,7 @@ species-name-skrell = Скрелл
species-name-moth = Моль
species-name-skeleton = Скелет
species-name-felinid = Фелинид
## Misc species things
snail-hurt-by-salt-popup = Соленый раствор жжет, как кислота!

View File

@@ -48,6 +48,8 @@ ent-FoodMeatMeatball = фрикаделька
.desc = Шарик сырого мяса. Ноу хомо.
ent-FoodMeatSlime = шар слизи
.desc = Студенистая масса из слаймового желе.
ent-FoodMeatSnail = сырое мясо улитки
.desc = Лучше с солью.
ent-FoodMeatCooked = стейк
.desc = Зажаренный кусок мяса. Аромат первобытности.
ent-FoodMeatBaconCooked = бекон
@@ -72,6 +74,8 @@ ent-FoodMeatSpiderlegCooked = приготовленная паучья нога
.desc = Нога гигантского паука, которая все еще дергается после приготовления. Отвратительно!
ent-FoodMeatMeatballCooked = фрикаделька
.desc = Приготовленная фрикаделька. Идеально подходит для добавления в другие блюда... кроме фруктовых.
ent-FoodMeatSnailCooked = варёная улитка
.desc = Лучше с солью.
ent-FoodMeatCutlet = сырая котлета
.desc = Котлета из сырого мяса.
ent-FoodMeatBearCutlet = сырая котлета из медведя

View File

@@ -84,3 +84,5 @@ ent-FoodSaladColeslaw = салат коул слоу
.desc = Нашинкованную капусту и красный лук заправить винегретом.
ent-FoodSaladKimchi = салат кимчи
.desc = На самом деле это просто острый салат.
ent-FoodSoupEscargot = эскарго
.desc = Сытное сливочное блюдо с улитками, бон апетит!

View File

@@ -0,0 +1,2 @@
ent-ActionSmite = Кара
.desc = Мгновенно поражает цель.

View File

@@ -375,3 +375,239 @@
suffix: "Salvage Ruleset"
components:
- type: SalvageMobRestrictions
- type: entity # WD Ahead of wizden
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 # WD TODO later
- type: GhostTakeoverAvailable
- type: Emoting
- 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 # WD Ahead of wizden
parent: MobSnail
id: MobSnailInstantDeath
suffix: Smite
components:
- type: MobStateActions
actions:
Alive:
- ActionSmite
Critical:
- ActionCritSuccumb
- ActionCritFakeDeath
- ActionCritLastWords
# - type: Godmode # WD Removed - not funny
- type: MovementAlwaysTouching
# WD EDIT START
- type: MobThresholds
thresholds:
0: Alive
1900: Critical
2000: Dead
- type: Bloodstream
maxBleedAmount: 1
bloodMaxVolume: 100
bloodReagent: Necrosol
- type: GhostRole
name: ghost-role-information-deathsnail-name
description: ghost-role-information-deathsnail-description
raffle:
settings: default
- type: Sprite
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: deathsnail
- type: PointLight
color: red
energy: 2
range: 3
- type: AmbientSound
range: 5
volume: 30
sound:
path: /Audio/White/Supermatter/calm.ogg
- type: MovementSpeedModifier
baseWalkSpeed : 0.5
baseSprintSpeed : 1
# WD EDIT END
- type: entity # WD Ahead of wizden
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 # WD TODO later
- type: Sprite
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: spacesnail
- type: DamageStateVisuals
states:
Alive:
Base: spacesnail
Critical:
Base: spacedead
Dead:
Base: spacedead
- 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 # WD Ahead of wizden
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 # WD TODO later
- type: Sprite
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: snoth
- type: DamageStateVisuals
states:
Alive:
Base: snoth
Critical:
Base: snothdead
Dead:
Base: snothdead

View File

@@ -679,6 +679,35 @@
- type: Sprite
state: slime
- type: entity # WD Ahead of wizden
name: raw snail meat
parent: FoodMeatRawBase
id: FoodMeatSnail
description: Improved with salt.
components:
- type: Sprite
state: snail
# - type: FoodSequenceElement # WD TODO later
# 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
@@ -1070,6 +1099,40 @@
- ReagentId: Protein
Quantity: 5
- 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

View File

@@ -1226,3 +1226,33 @@
- Fruit
- Soup
# Tastes like bungo, hot curry.
- type: entity # WD Ahead of wizden
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

View File

@@ -207,6 +207,52 @@
- id: MobMothroach
prob: 0.008
- type: entity # WD Ahead of wizden
id: SnailMigrationLowPop
# parent: BaseStationEventShortDelay # WD TODO later
parent: BaseGameRule
noSpawn: true
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.005 # WD edit from 0.002 to 0.005
- type: entity # WD Ahead of wizden
id: SnailMigration
# parent: BaseStationEventShortDelay # WD TODO later
parent: BaseGameRule
noSpawn: true
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.005 # WD edit from 0.002 to 0.005
- id: MobSnailInstantDeath
prob: 0.00001 # ~ 1:2000 snails
- type: entity
id: PowerGridCheck
parent: BaseGameRule

View File

@@ -4,8 +4,6 @@
description: Instantly gibs a target.
noSpawn: true
components:
- type: Magic
requiresClothes: true
- type: EntityTargetAction
useDelay: 60
itemIconStyle: BigAction
@@ -22,3 +20,13 @@
state: gib
event: !type:SmiteSpellEvent
speech: action-speech-spell-smite
- type: entity
id: ActionSmiteWizard
parent: ActionSmite
name: Smite
description: Instantly gibs a target.
noSpawn: true
components:
- type: Magic
requiresClothes: true

View File

@@ -896,6 +896,29 @@
FoodBungo: 2
FoodChiliPepper: 1
- type: microwaveMealRecipe # WD Ahead of wizden
id: RecipeBoiledSnail
name: boiled snail recipe
result: FoodMeatSnailCooked
time: 5
reagents:
Water: 10
solids:
FoodMeatSnail: 1
- type: microwaveMealRecipe # WD Ahead of wizden
id: RecipeEscargotSoup
name: escargot recipe
result: FoodSoupEscargot
time: 10
reagents:
Water: 5
solids:
FoodBowlBig: 1
FoodOnionSlice: 1
FoodButter: 1
FoodMeatSnailCooked: 1
#Pies
- type: microwaveMealRecipe

View File

@@ -149,7 +149,7 @@
name: "Smite scroll"
components:
- type: Scroll
actionId: ActionSmite
actionId: ActionSmiteWizard
learnPopup: scroll-component-smite
- type: entity

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,36 @@
{
"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": "deathsnail",
"directions": 4
},
{
"name": "spacedead"
},
{
"name": "snoth",
"directions": 4
},
{
"name": "snothdead"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

View File

@@ -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"

View File

@@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B