Space cobra 1.1 (#20298)
* space cobra again * didn't see * fix * Dirty * space spider * license * component * sprite update * visibility * fix * fix visibility
@@ -19,6 +19,12 @@ public sealed partial class StealthComponent : Component
|
||||
[DataField("enabled")]
|
||||
public bool Enabled = true;
|
||||
|
||||
/// <summary>
|
||||
/// The creature will continue invisible at death.
|
||||
/// </summary>
|
||||
[DataField("enabledOnDeath")]
|
||||
public bool EnabledOnDeath = true;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not the entity previously had an interaction outline prior to cloaking.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Mobs;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Stealth.Components;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Timing;
|
||||
@@ -8,6 +10,7 @@ namespace Content.Shared.Stealth;
|
||||
public abstract class SharedStealthSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -22,6 +25,7 @@ public abstract class SharedStealthSystem : EntitySystem
|
||||
SubscribeLocalEvent<StealthComponent, ComponentInit>(OnInit);
|
||||
SubscribeLocalEvent<StealthComponent, ExamineAttemptEvent>(OnExamineAttempt);
|
||||
SubscribeLocalEvent<StealthComponent, ExaminedEvent>(OnExamined);
|
||||
SubscribeLocalEvent<StealthComponent, MobStateChangedEvent>(OnMobStateChanged);
|
||||
}
|
||||
|
||||
private void OnExamineAttempt(EntityUid uid, StealthComponent component, ExamineAttemptEvent args)
|
||||
@@ -55,20 +59,34 @@ public abstract class SharedStealthSystem : EntitySystem
|
||||
return;
|
||||
|
||||
component.Enabled = value;
|
||||
Dirty(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private void OnMobStateChanged(EntityUid uid, StealthComponent component, MobStateChangedEvent args)
|
||||
{
|
||||
if (args.NewMobState == MobState.Dead)
|
||||
{
|
||||
component.Enabled = component.EnabledOnDeath;
|
||||
}
|
||||
else
|
||||
{
|
||||
component.Enabled = true;
|
||||
}
|
||||
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private void OnPaused(EntityUid uid, StealthComponent component, ref EntityPausedEvent args)
|
||||
{
|
||||
component.LastVisibility = GetVisibility(uid, component);
|
||||
component.LastUpdated = null;
|
||||
Dirty(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
private void OnUnpaused(EntityUid uid, StealthComponent component, ref EntityUnpausedEvent args)
|
||||
{
|
||||
component.LastUpdated = _timing.CurTime;
|
||||
Dirty(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
protected virtual void OnInit(EntityUid uid, StealthComponent component, ComponentInit args)
|
||||
@@ -128,7 +146,7 @@ public abstract class SharedStealthSystem : EntitySystem
|
||||
}
|
||||
|
||||
component.LastVisibility = Math.Clamp(component.LastVisibility + delta, component.MinVisibility, component.MaxVisibility);
|
||||
Dirty(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -144,7 +162,7 @@ public abstract class SharedStealthSystem : EntitySystem
|
||||
if (component.LastUpdated != null)
|
||||
component.LastUpdated = _timing.CurTime;
|
||||
|
||||
Dirty(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -33,6 +33,14 @@
|
||||
copyright: "Taken and modified from tgstation (clownstep 1 and 2) by brainfood1183 (github)"
|
||||
source: "https://github.com/tgstation/tgstation/tree/f8ee37afc00bce1ad421615eaa0e4cbddd5eea90/sound/effects"
|
||||
|
||||
- files:
|
||||
- snake1.ogg
|
||||
- snake2.ogg
|
||||
- snake3.ogg
|
||||
license: "Custom"
|
||||
copyright: "Taken from https://zvukipro.com/"
|
||||
source: "https://zvukipro.com/jivotnie/21-zvuki-zmej.html"
|
||||
|
||||
- files:
|
||||
- bells1.ogg
|
||||
- bells2.ogg
|
||||
|
||||
BIN
Resources/Audio/Effects/Footsteps/snake1.ogg
Normal file
BIN
Resources/Audio/Effects/Footsteps/snake2.ogg
Normal file
BIN
Resources/Audio/Effects/Footsteps/snake3.ogg
Normal file
@@ -103,6 +103,12 @@ ghost-role-information-space-spider-description = Space spiders are just as agg
|
||||
ghost-role-information-salvage-spider-name = Space spider on salvage wreck
|
||||
ghost-role-information-salvage-spider-description = Space spiders are just as aggressive as regular spiders, feed.
|
||||
|
||||
ghost-role-information-space-cobra-name = Space cobra
|
||||
ghost-role-information-space-cobra-description = Space cobras really don't like guests, and will always snack on a visitor.
|
||||
|
||||
ghost-role-information-salvage-cobra-name = Space cobra on salvage wreck
|
||||
ghost-role-information-salvage-cobra-description = Space cobras really don't like guests, and will always snack on a visitor.
|
||||
|
||||
ghost-role-information-guardian-name = Guardian
|
||||
ghost-role-information-guardian-description = Listen to your owner. Don't tank damage. Punch people hard.
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ petting-success-dragon = Dodging teeth, claws, and flames, you pet {THE($target)
|
||||
petting-success-hamster = You pet {THE($target)} on {POSS-ADJ($target)} fluffy little head.
|
||||
petting-success-bear = You reluctantly pet {THE($target)} on {POSS-ADJ($target)} mystical head.
|
||||
petting-success-slimes = You pet {THE($target)} on {POSS-ADJ($target)} mucous surface.
|
||||
petting-success-snake = You pet {THE($target)} on {POSS-ADJ($target)} scaly large head.
|
||||
|
||||
petting-failure-generic = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} aloof towards you.
|
||||
|
||||
|
||||
@@ -70,6 +70,18 @@
|
||||
- type: Clothing
|
||||
sprite: Clothing/Shoes/Misc/damedaneshoes.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingShoesBase
|
||||
id: ClothingShoesSnakeskinBoots
|
||||
name: snakeskin boots
|
||||
description: Boots made of high-class snakeskin, everyone around you will be jealous.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Shoes/Misc/snakeskin.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Shoes/Misc/snakeskin.rsi
|
||||
- type: NoSlip
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingShoesBase, PowerCellSlotSmallItem]
|
||||
id: ClothingShoesBootsSpeed
|
||||
|
||||
@@ -238,6 +238,22 @@
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: spacespider
|
||||
sprite: Mobs/Animals/spacespider.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobSpiderSpaceSalvage
|
||||
|
||||
- type: entity
|
||||
name: Salvage Space Cobra Spawner
|
||||
id: SpawnMobCobraSalvage
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: spacecobra
|
||||
sprite: Mobs/Animals/spacecobra.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobCobraSpaceSalvage
|
||||
|
||||
@@ -372,7 +372,8 @@
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: ai
|
||||
- state: shiva
|
||||
sprite: Mobs/Pets/shiva.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobSpiderShiva
|
||||
@@ -427,11 +428,26 @@
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: ai
|
||||
- state: spacespider
|
||||
sprite: Mobs/Animals/spacespider.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobSpiderSpace
|
||||
|
||||
- type: entity
|
||||
name: Space Cobra Spawner
|
||||
id: SpawnMobSpaceCobra
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: spacecobra
|
||||
sprite: Mobs/Animals/spacecobra.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobCobraSpace
|
||||
|
||||
- type: entity
|
||||
name: Slimes Spawner Blue
|
||||
id: SpawnMobAdultSlimesBlue
|
||||
|
||||
@@ -254,16 +254,16 @@
|
||||
damage:
|
||||
types:
|
||||
Piercing: 6
|
||||
Poison: 2
|
||||
Poison: 4
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
melee:
|
||||
reagents:
|
||||
- ReagentId: ChloralHydrate
|
||||
Quantity: 60
|
||||
Quantity: 80
|
||||
- type: MeleeChemicalInjector
|
||||
solution: melee
|
||||
transferAmount: 3
|
||||
transferAmount: 4
|
||||
- type: ReplacementAccent
|
||||
accent: xeno
|
||||
- type: InteractionPopup
|
||||
@@ -293,3 +293,108 @@
|
||||
name: ghost-role-information-salvage-spider-name
|
||||
description: ghost-role-information-salvage-spider-description
|
||||
- type: SalvageMobRestrictions
|
||||
|
||||
- type: entity
|
||||
name: space cobra
|
||||
id: MobCobraSpace
|
||||
parent: MobSpaceBasic
|
||||
description: Long fangs and a glowing hood, and the alluring look begs to come closer.
|
||||
components:
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
sprite: Mobs/Animals/spacecobra.rsi
|
||||
layers:
|
||||
- map: [ "enum.DamageStateVisualLayers.Base" ]
|
||||
state: spacecobra
|
||||
- map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
|
||||
state: glow
|
||||
shader: unshaded
|
||||
- type: FootstepModifier
|
||||
footstepSoundCollection:
|
||||
collection: FootstepSnake
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
100: Dead
|
||||
- type: Stamina
|
||||
critThreshold: 150
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: spacecobra
|
||||
BaseUnshaded: glow
|
||||
Dead:
|
||||
Base: dead_spacecobra
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeatSnake
|
||||
amount: 2
|
||||
- id: UraniumOre1
|
||||
amount: 1
|
||||
- id: ClothingShoesSnakeskinBoots
|
||||
amount: 1
|
||||
prob: 0.3
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 200
|
||||
bloodReagent: Cryoxadone
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.40
|
||||
density: 120
|
||||
mask:
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: MeleeWeapon
|
||||
hidden: true
|
||||
soundHit:
|
||||
path: /Audio/Effects/bite.ogg
|
||||
angle: 0
|
||||
animation: WeaponArcBite
|
||||
damage:
|
||||
types:
|
||||
Piercing: 6
|
||||
Poison: 4
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
melee:
|
||||
reagents:
|
||||
- ReagentId: NorepinephricAcid
|
||||
Quantity: 90
|
||||
- type: MeleeChemicalInjector
|
||||
solution: melee
|
||||
transferAmount: 6
|
||||
- type: ReplacementAccent
|
||||
accent: xeno
|
||||
- type: InteractionPopup
|
||||
successChance: 0.2
|
||||
interactSuccessString: petting-success-snake
|
||||
interactFailureString: petting-failure-generic
|
||||
- type: PointLight
|
||||
radius: 1.1
|
||||
energy: 1.5
|
||||
color: "#4faffb"
|
||||
- type: GhostRole
|
||||
prob: 0.25
|
||||
name: ghost-role-information-space-cobra-name
|
||||
description: ghost-role-information-space-cobra-description
|
||||
- type: Stealth
|
||||
enabledOnDeath: false
|
||||
maxVisibility: 1.2
|
||||
- type: StealthOnMove
|
||||
passiveVisibilityRate: -0.25
|
||||
movementVisibilityRate: 0.25
|
||||
|
||||
- type: entity
|
||||
id: MobCobraSpaceSalvage
|
||||
parent: MobCobraSpace
|
||||
suffix: "Salvage Ruleset"
|
||||
components:
|
||||
- type: GhostRole
|
||||
prob: 0.25
|
||||
name: ghost-role-information-salvage-cobra-name
|
||||
description: ghost-role-information-salvage-cobra-description
|
||||
- type: SalvageMobRestrictions
|
||||
|
||||
@@ -416,7 +416,14 @@
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
|
||||
- type: FootstepModifier
|
||||
footstepSoundCollection:
|
||||
collection: FootstepSnake
|
||||
- type: Tag
|
||||
tags:
|
||||
- DoorBumpOpener
|
||||
- FootstepSound
|
||||
|
||||
- type: entity
|
||||
name: space adder
|
||||
parent: MobPurpleSnake
|
||||
|
||||
@@ -507,6 +507,26 @@
|
||||
- ReagentId: UncookedAnimalProteins
|
||||
Quantity: 1
|
||||
|
||||
- type: entity
|
||||
name: raw snake meat
|
||||
parent: FoodMeatBase
|
||||
id: FoodMeatSnake
|
||||
description: A long piece of snake meat, hopefully not poisonous.
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Raw
|
||||
- type: Sprite
|
||||
state: snake
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: UncookedAnimalProteins
|
||||
Quantity: 10
|
||||
- ReagentId: Toxin
|
||||
Quantity: 2
|
||||
|
||||
- type: entity
|
||||
name: raw xeno meat
|
||||
# not raw since acid kills bacteria or something, same as xeno
|
||||
|
||||
@@ -159,6 +159,13 @@
|
||||
- /Audio/Effects/Footsteps/clownspiderstep1.ogg
|
||||
- /Audio/Effects/Footsteps/clownspiderstep2.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: FootstepSnake
|
||||
files:
|
||||
- /Audio/Effects/Footsteps/snake1.ogg
|
||||
- /Audio/Effects/Footsteps/snake2.ogg
|
||||
- /Audio/Effects/Footsteps/snake3.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: FootstepBells
|
||||
files:
|
||||
|
||||
|
After Width: | Height: | Size: 463 B |
BIN
Resources/Textures/Clothing/Shoes/Misc/snakeskin.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 330 B |
|
After Width: | Height: | Size: 468 B |
|
After Width: | Height: | Size: 445 B |
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-NC-3.0",
|
||||
"copyright": "Made by Nimfar11 (GitHub) for Space Station 14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "equipped-FEET",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
BIN
Resources/Textures/Mobs/Animals/spacecobra.rsi/glow.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
34
Resources/Textures/Mobs/Animals/spacecobra.rsi/meta.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Sprited by Nimfar11 (Github) for Space Station 14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "spacecobra",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "glow",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3],
|
||||
[0.3,0.2,0.2,0.4,0.2,0.2,0.3]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "dead_spacecobra"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Mobs/Animals/spacecobra.rsi/spacecobra.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -156,6 +156,9 @@
|
||||
{
|
||||
"name": "slime"
|
||||
},
|
||||
{
|
||||
"name": "snake"
|
||||
},
|
||||
{
|
||||
"name": "spider"
|
||||
},
|
||||
|
||||
BIN
Resources/Textures/Objects/Consumable/Food/meat.rsi/snake.png
Normal file
|
After Width: | Height: | Size: 461 B |