public override void OnInitialize()
{
+ // This is very janky. This could easily result in no visible animation at all if the random values happen
+ // to all be close to each other.
+ // TODO ANIMATIONS
_randomValue1 = (float)InterpolateLinear(StartValue, EndValue, (float)_random.NextDouble());
_randomValue2 = (float)InterpolateLinear(StartValue, EndValue, (float)_random.NextDouble());
_randomValue3 = (float)InterpolateLinear(StartValue, EndValue, (float)_random.NextDouble());
Category = VerbCategory.Debug,
Act = () =>
{
+ if (_net.IsClient)
+ return;
var brain = SpawnInContainerOrDrop(DefaultAi, ent.Owner, StationAiCoreComponent.Container);
_mind.ControlMob(user, brain);
},
{
foreach (var errorNode in errorHashset)
{
- Console.WriteLine($"::error file={file},line={errorNode.Node.Start.Line},col={errorNode.Node.Start.Column}::{file}({errorNode.Node.Start.Line},{errorNode.Node.Start.Column}) {errorNode.ErrorReason}");
+ // TODO YAML LINTER Fix inheritance
+ // If a parent/abstract prototype has na error, this will misreport the file name (but with the correct line/column).
+ Console.WriteLine($"::error in {file}({errorNode.Node.Start.Line},{errorNode.Node.Start.Column}) {errorNode.ErrorReason}");
}
}
foreach (var (key, val) in clientErrors.YamlErrors)
{
var newErrors = val.Where(n => n.AlwaysRelevant).ToHashSet();
- if (newErrors.Count == 0)
- continue;
-
- if (yamlErrors.TryGetValue(key, out var errors))
- errors.UnionWith(val.Where(n => n.AlwaysRelevant));
- else
- yamlErrors[key] = newErrors;
// Include any errors that relate to client-only types
foreach (var errorNode in val)
{
- if (errorNode is FieldNotFoundErrorNode fieldNotFoundNode && !serverTypes.Contains(fieldNotFoundNode.FieldType.Name))
+ if (errorNode is FieldNotFoundErrorNode fieldNotFoundNode
+ && !serverTypes.Contains(fieldNotFoundNode.FieldType.Name))
{
newErrors.Add(errorNode);
}
}
+
+ if (newErrors.Count == 0)
+ continue;
+
+ if (yamlErrors.TryGetValue(key, out var errors))
+ errors.UnionWith(newErrors);
+ else
+ yamlErrors[key] = newErrors;
}
// Finally, combine the prototype ID field errors.
layers:
- state: box
- state: bodybags
+ - type: Storage
whitelist:
tags:
- BodyBag
components:
- type: Sprite
sprite: Clothing/Back/Duffels/mime.rsi
+ - type: Storage
storageOpenSound:
collection: null
storageInsertSound:
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: PowerCellSlot
cellSlotId: cell_slot
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: Battery
maxCharge: 600 #lights drain 3/s but recharge of 2 makes this 1/s. Therefore 600 is 10 minutes of light.
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: ToggleableVisuals
spriteLayer: light
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: Battery
maxCharge: 600
- type: Sprite
sprite: Interface/Misc/pointing.rsi
state: pointing
- drawDepth: Overlays
+ drawdepth: Overlays
noRot: true
- type: PointingArrow
duration: 4
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: ToggleableVisuals
spriteLayer: light
solution: bloodstream
transferAmount: 5
- type: DamageStateVisuals
- rotate: true
states:
Alive:
Base: alive
Dead: 0
baseDecayRate: 0.1
- type: DamageStateVisuals
- rotate: true
states:
Alive:
Base: regalrat
groups:
Brute: 6
- type: DamageStateVisuals
- rotate: true
states:
Alive:
Base: running
groups:
Brute: 5
- type: DamageStateVisuals
- rotate: true
states:
Alive:
Base: running
components:
- type: Sprite
sprite: Structures/Power/Generation/Tesla/energy_miniball.rsi
- shader: unshaded
layers:
- state: tesla_projectile
+ shader: unshaded
- type: Item
inhandVisuals:
left:
components:
- type: Sprite
sprite: Objects/Fun/pondering_orb.rsi
- state: icon
- shader: unshaded
+ layers:
+ - state: icon
+ shader: unshaded
- type: PointLight
radius: 2
color: "#00CCFF"
- type: Sprite
sprite: Objects/Fun/whoopie.rsi
state: icon
- quickEquip: false
- type: Tag
tags:
- Payload
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: PowerCellSlot
cellSlotId: cell_slot
description: Get out there and slang some dogs.
components:
- type: Sprite
- netSync: false
noRot: true
sprite: Objects/Specific/Kitchen/food_carts.rsi
layers:
description: It's the Ice Cream Man! It's the Ice Cream Man!
components:
- type: Sprite
- netSync: false
noRot: true
sprite: Objects/Specific/Kitchen/food_carts.rsi
layers:
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: ToggleableVisuals
spriteLayer: light
- !type:PulseBehaviour
interpolate: Cubic
maxDuration: 10.0
- minValue: 1.0
- maxValue: 7.0
+ startValue: 1.0
+ endValue: 7.0
isLooped: true
property: Energy
enabled: true
interpolate: Nearest
minDuration: 0.2
maxDuration: 1.0
- maxValue: 0.2
+ endValue: 0.2
property: AnimatedEnable
isLooped: true
enabled: true
- !type:FadeBehaviour
interpolate: Cubic
maxDuration: 5.0
- minValue: 0.0
- maxValue: 10.0
+ startValue: 0.0
+ endValue: 10.0
isLooped: true
property: Energy
enabled: true
interpolate: Cubic
minDuration: 1.0
maxDuration: 5.0
- minValue: 2.0
- maxValue: 10.0
+ startValue: 2.0
+ endValue: 10.0
isLooped: true
enabled: true
- !type:RandomizeBehaviour
interpolate: Nearest
maxDuration: 0.5
- minValue: 10.0
- maxValue: 25.0
+ startValue: 10.0
+ endValue: 25.0
isLooped: true
enabled: true
id: blinking
interpolate: Nearest
maxDuration: 1.0
- minValue: 0.1
- maxValue: 2.0
+ startValue: 0.1
+ endValue: 2.0
isLooped: true
- type: Sprite
sprite: Objects/Tools/lantern.rsi
proto: CartridgeCaselessRifle
capacity: 10
- type: Sprite
- slayers:
+ layers:
- state: base
map: ["enum.GunVisualLayers.Base"]
- state: mag-1
components:
- type: Sprite
sprite: Structures/Doors/Windoors/clockwork_windoor.rsi
+ - type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
min: 1
max: 2
SheetBrass1:
- min: 2
- max: 4
+ min: 0
+ max: 2
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Construction
- GhostOnlyWarp
- type: Sprite
sprite: Structures/Power/Generation/Singularity/singularity_1.rsi
- shader: unshaded
layers:
- map: [ "VisualLevel" ]
state: singularity_1
+ shader: unshaded
- type: GenericVisualizer
visuals:
enum.SingularityAppearanceKeys.Singularity:
- type: Sprite
drawdepth: Effects
sprite: Structures/Power/Generation/Tesla/energy_ball.rsi
- shader: unshaded
layers:
- state: energy_ball
+ shader: unshaded
- type: EmitSoundOnSpawn
sound:
path: /Audio/Effects/tesla_collapse.ogg
- type: Sprite
drawdepth: Effects
sprite: Structures/Power/Generation/Tesla/energy_miniball.rsi
- shader: unshaded
layers:
- state: tesla_projectile
+ shader: unshaded
- type: Electrified
requirePower: false
sprite: Structures/Power/Cables/lv_cable.rsi
state: lvcable_0
- type: Icon
- color: Green
sprite: Structures/Power/Cables/lv_cable.rsi
state: lvcable_4
- type: NodeContainer
max: 1
- type: Appearance
- type: EntityStorageVisuals
- stateBase: base
+ # stateBase: base // This field does not exist. this is probably a bug. TODO
stateDoorOpen: base
stateDoorClosed: door
- type: LockVisuals
color: FloralWhite
textOffset: 0,6
timerOffset: 0,6
- textLength: 5
+ # textLength: 5 This field does not exist. Bug?
rows: 1
- type: Sprite
drawdepth: WallMountedItems
- map: [ "enum.EdgeLayer.West" ]
state: rock_chromite_west
- state: rock_coal
- map: [ "enum.MiningScannerVisualLayers.Overlay" ]
+ map: [ "enum.MiningScannerVisualLayers.Overlay" ]
- type: entity
id: WallRockChromiteGold
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
# Because hyperspace and the menu need their own.
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.5
+ slowness: 0.5
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
layersLQUseHQ: false
!type:GeneratedParallaxTextureSource
id: ""
configPath: "/Prototypes/Parallaxes/parallax_config.toml"
- slowness: 0.875
+ slowness: 0.875
scrolling: "0, -0.475"
layersLQUseHQ: false