Фикс половины тестов

This commit is contained in:
Vigers Ray 2025-01-06 00:09:27 +03:00
parent 3bb4d6e098
commit 668b4fdc9a
37 changed files with 189 additions and 77863 deletions

View file

@ -34,6 +34,7 @@ namespace Content.IntegrationTests.Tests.Buckle
- type: Body
prototype: Human
- type: StandingState
- type: Appearance
- type: entity
name: {StrapDummyId}

View file

@ -145,7 +145,7 @@ public sealed class SuicideCommandTests
damageableComp = entManager.GetComponent<DamageableComponent>(player);
if (protoMan.TryIndex<DamageTypePrototype>("Slash", out var slashProto))
damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5)));
damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5)), useModifier: false, useVariance: false); // Sunrise-Edit
});
// Check that running the suicide command kills the player

View file

@ -156,7 +156,7 @@ namespace Content.IntegrationTests.Tests.Damageable
var damageToDeal = FixedPoint2.New(types.Count * 5);
DamageSpecifier damage = new(group3, damageToDeal);
sDamageableSystem.TryChangeDamage(uid, damage, true);
sDamageableSystem.TryChangeDamage(uid, damage, true, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -170,7 +170,7 @@ namespace Content.IntegrationTests.Tests.Damageable
});
// Heal
sDamageableSystem.TryChangeDamage(uid, -damage);
sDamageableSystem.TryChangeDamage(uid, -damage, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -189,7 +189,7 @@ namespace Content.IntegrationTests.Tests.Damageable
Assert.That(types, Has.Count.EqualTo(3));
damage = new DamageSpecifier(group3, 14);
sDamageableSystem.TryChangeDamage(uid, damage, true);
sDamageableSystem.TryChangeDamage(uid, damage, true, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -201,7 +201,7 @@ namespace Content.IntegrationTests.Tests.Damageable
});
// Heal
sDamageableSystem.TryChangeDamage(uid, -damage);
sDamageableSystem.TryChangeDamage(uid, -damage, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -217,7 +217,7 @@ namespace Content.IntegrationTests.Tests.Damageable
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
});
damage = new DamageSpecifier(group1, FixedPoint2.New(10)) + new DamageSpecifier(type2b, FixedPoint2.New(10));
sDamageableSystem.TryChangeDamage(uid, damage, true);
sDamageableSystem.TryChangeDamage(uid, damage, true, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -233,9 +233,9 @@ namespace Content.IntegrationTests.Tests.Damageable
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
// Test 'wasted' healing
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(type3a, 5));
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(type3b, 7));
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, -11));
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(type3a, 5), useModifier: false, useVariance: false); // Sunrise-Edit
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(type3b, 7), useModifier: false, useVariance: false); // Sunrise-Edit
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, -11), useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -245,11 +245,11 @@ namespace Content.IntegrationTests.Tests.Damageable
});
// Test Over-Healing
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, FixedPoint2.New(-100)));
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, FixedPoint2.New(-100)), useModifier: false, useVariance: false); // Sunrise-Edit
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
// Test that if no health change occurred, returns false
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, -100));
sDamageableSystem.TryChangeDamage(uid, new DamageSpecifier(group3, -100), useModifier: false, useVariance: false); // Sunrise-Edit
Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(FixedPoint2.Zero));
});
await pair.CleanReturnAsync();

View file

@ -45,7 +45,7 @@ namespace Content.IntegrationTests.Tests.Destructible
#pragma warning disable NUnit2045 // Interdependent assertions.
Assert.DoesNotThrow(() =>
{
sEntityManager.System<DamageableSystem>().TryChangeDamage(sDestructibleEntity, bruteDamage, true);
sEntityManager.System<DamageableSystem>().TryChangeDamage(sDestructibleEntity, bruteDamage, true, useModifier: false, useVariance: false); // Sunrise-Edit
});
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Count.EqualTo(1));

View file

@ -63,12 +63,12 @@ namespace Content.IntegrationTests.Tests.Destructible
{
var bluntDamage = new DamageSpecifier(sPrototypeManager.Index<DamageTypePrototype>("TestBlunt"), 10);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true, useModifier: false, useVariance: false); // Sunrise-Edit
// No thresholds reached yet, the earliest one is at 20 damage
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true, useModifier: false, useVariance: false); // Sunrise-Edit
// Only one threshold reached, 20
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Count.EqualTo(1));
@ -87,7 +87,7 @@ namespace Content.IntegrationTests.Tests.Destructible
sTestThresholdListenerSystem.ThresholdsReached.Clear();
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 3, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 3, true, useModifier: false, useVariance: false); // Sunrise-Edit
// One threshold reached, 50, since 20 already triggered before and it has not been healed below that amount
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Count.EqualTo(1));
@ -118,7 +118,7 @@ namespace Content.IntegrationTests.Tests.Destructible
sTestThresholdListenerSystem.ThresholdsReached.Clear();
// Damage for 50 again, up to 100 now
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true, useModifier: false, useVariance: false); // Sunrise-Edit
// No thresholds reached as they weren't healed below the trigger amount
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
@ -127,7 +127,7 @@ namespace Content.IntegrationTests.Tests.Destructible
sDamageableSystem.SetAllDamage(sDestructibleEntity, sDamageableComponent, 0);
// Damage for 100, up to 100
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 10, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 10, true, useModifier: false, useVariance: false); // Sunrise-Edit
// Two thresholds reached as damage increased past the previous, 20 and 50
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Count.EqualTo(2));
@ -135,25 +135,25 @@ namespace Content.IntegrationTests.Tests.Destructible
sTestThresholdListenerSystem.ThresholdsReached.Clear();
// Heal the entity for 40 damage, down to 60
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * -4, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * -4, true, useModifier: false, useVariance: false); // Sunrise-Edit
// ThresholdsLookup don't work backwards
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
// Damage for 10, up to 70
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true, useModifier: false, useVariance: false); // Sunrise-Edit
// Not enough healing to de-trigger a threshold
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
// Heal by 30, down to 40
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * -3, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * -3, true, useModifier: false, useVariance: false); // Sunrise-Edit
// ThresholdsLookup don't work backwards
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
// Damage up to 50 again
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage, true, useModifier: false, useVariance: false); // Sunrise-Edit
// The 50 threshold should have triggered again, after being healed
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Has.Count.EqualTo(1));
@ -188,7 +188,7 @@ namespace Content.IntegrationTests.Tests.Destructible
sDamageableSystem.SetAllDamage(sDestructibleEntity, sDamageableComponent, 0);
// Damage up to 50
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{
@ -260,7 +260,7 @@ namespace Content.IntegrationTests.Tests.Destructible
}
// Damage the entity up to 50 damage again
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true);
sDamageableSystem.TryChangeDamage(sDestructibleEntity, bluntDamage * 5, true, useModifier: false, useVariance: false); // Sunrise-Edit
Assert.Multiple(() =>
{

View file

@ -105,6 +105,11 @@ namespace Content.IntegrationTests.Tests
.ToList();
foreach (var protoId in protoIds)
{
// Sunrise-Start
if (protoId == "Envelope")
continue;
// Sunrise-End
entityMan.SpawnEntity(protoId, map.GridCoords);
}
});

View file

@ -74,6 +74,7 @@ namespace Content.IntegrationTests.Tests
// Sunrise-Start
private static readonly string[] SunriseGameMaps =
{
"SunriseDev",
"SunriseBox",
"SunriseDelta",
"SunriseFland",

View file

@ -20,7 +20,6 @@ public sealed partial class DroneConsoleComponent : Component
public EntityUid? Entity;
// Sunrise-Start
[ViewVariables]
[DataField("portable")]
public bool Portable;
// Sunrise-End

View file

@ -33,6 +33,18 @@ public sealed class IcarusTerminalSystem : EntitySystem
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
[Dependency] private readonly RoundEndSystem _roundEndSystem = default!;
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<IcarusTerminalComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<IcarusTerminalComponent, EntInsertedIntoContainerMessage>(OnItemSlotInserted);
SubscribeLocalEvent<IcarusTerminalComponent, EntRemovedFromContainerMessage>(OnItemSlotRemoved);
// UI events
SubscribeLocalEvent<IcarusTerminalComponent, IcarusTerminalFireMessage>(OnFireButtonPressed);
}
public override void Update(float frameTime)
{
@ -67,19 +79,11 @@ public sealed class IcarusTerminalSystem : EntitySystem
_roundEndSystem.EndRound();
}
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<IcarusTerminalComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<IcarusTerminalComponent, EntInsertedIntoContainerMessage>(OnItemSlotInserted);
SubscribeLocalEvent<IcarusTerminalComponent, EntRemovedFromContainerMessage>(OnItemSlotRemoved);
// UI events
SubscribeLocalEvent<IcarusTerminalComponent, IcarusTerminalFireMessage>(OnFireButtonPressed);
}
private void OnInit(EntityUid uid, IcarusTerminalComponent component, ComponentInit args)
private void OnMapInit(EntityUid uid, IcarusTerminalComponent component, MapInitEvent args)
{
_itemSlotsSystem.AddItemSlot(uid, IcarusTerminalComponent.FirstKeySlotId, component.FirstKeySlot);
_itemSlotsSystem.AddItemSlot(uid, IcarusTerminalComponent.SecondKeySlotId, component.SecondKeySlot);
_itemSlotsSystem.AddItemSlot(uid, IcarusTerminalComponent.ThirdKeySlotId, component.ThirdKeySlot);
component.RemainingTime = component.Timer;
UpdateStatus(component);
UpdateUserInterface(component);

View file

@ -24,7 +24,6 @@ public sealed class DiseaseRoleSystem : SharedDiseaseRoleSystem
{
base.Initialize();
SubscribeLocalEvent<DiseaseRoleComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<DiseaseRoleComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<DiseaseRoleComponent, DiseaseShopActionEvent>(OnShop);
SubscribeLocalEvent<DiseaseRoleComponent, DiseaseAddSymptomEvent>(OnAddSymptom);
@ -113,9 +112,9 @@ public sealed class DiseaseRoleSystem : SharedDiseaseRoleSystem
}
}
private void OnInit(EntityUid uid, DiseaseRoleComponent component, ComponentInit args)
private void OnMapInit(EntityUid uid, DiseaseRoleComponent component, MapInitEvent args)
{
_actionsSystem.AddAction(uid, DiseaseShopId, uid);
foreach (var (id, charges) in component.Actions)
{
EntityUid? actionId = null;
@ -126,11 +125,6 @@ public sealed class DiseaseRoleSystem : SharedDiseaseRoleSystem
component.Symptoms.Add("Headache", (1, 4));
}
private void OnMapInit(EntityUid uid, DiseaseRoleComponent component, MapInitEvent args)
{
_actionsSystem.AddAction(uid, DiseaseShopId, uid);
}
private void OnShop(EntityUid uid, DiseaseRoleComponent component, DiseaseShopActionEvent args)
{
if (!TryComp<StoreComponent>(uid, out var store))

View file

@ -13,11 +13,9 @@ namespace Content.Server._Sunrise.FleshCult
[DataField("startingActions", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))]
public List<string> StartingActions = new();
[DataField]
public List<EntityUid> Actions = new();
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string ActionFleshCultistDevourId = "FleshCultistDevour";
public EntProtoId ActionFleshCultistDevourId = "FleshCultistDevour";
[ViewVariables(VVAccess.ReadWrite), DataField("bloodWhitelist")]
public List<string> BloodWhitelist = new()
@ -29,17 +27,16 @@ namespace Content.Server._Sunrise.FleshCult
"ZombieBlood"
};
[DataField("devourTime")] public float DevourTime = 10f;
public float DevourTime = 10f;
[DataField("devourSound")]
public SoundSpecifier DevourSound = new SoundPathSpecifier("/Audio/_Sunrise/FleshCult/devour_flesh_cultist.ogg");
[DataField("adrenalinReagents")] public Solution AdrenalinReagents = new()
public Solution AdrenalinReagents = new()
{
Contents = { new ReagentQuantity(new ReagentId("Ephedrine", null), 10) }
};
[DataField("healDevourReagents")] public Solution HealDevourReagents = new()
public Solution HealDevourReagents = new()
{
Contents =
{
@ -47,7 +44,7 @@ namespace Content.Server._Sunrise.FleshCult
}
};
[DataField("healBloodAbsorbReagents")] public Solution HealBloodAbsorbReagents = new()
public Solution HealBloodAbsorbReagents = new()
{
Contents =
{
@ -55,27 +52,18 @@ namespace Content.Server._Sunrise.FleshCult
}
};
[DataField]
public SoundSpecifier BloodAbsorbSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg");
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string BulletAcidSpawnId = "BulletSplashAcid";
public EntProtoId BulletAcidSpawnId = "BulletSplashAcid";
public EntProtoId FleshHeartId = "FleshHeart";
public EntProtoId HuggerMobSpawnId = "MobFleshHugger";
[DataField]
public SoundSpecifier SoundBulletAcid = new SoundPathSpecifier("/Audio/_Sunrise/FleshCult/flesh_cultist_mutation.ogg");
[DataField]
public SoundSpecifier SoundMutation = new SoundPathSpecifier("/Audio/_Sunrise/FleshCult/flesh_cultist_mutation.ogg");
[DataField("fleshHeartId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>)),
ViewVariables(VVAccess.ReadWrite)]
public string FleshHeartId = "FleshHeart";
[ViewVariables(VVAccess.ReadWrite), DataField("soundThrowWorm")]
public SoundSpecifier? SoundThrowHugger = new SoundPathSpecifier("/Audio/_Sunrise/FleshCult/throw_worm.ogg");
[ViewVariables(VVAccess.ReadWrite),
DataField("huggerMobSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string HuggerMobSpawnId = "MobFleshHugger";
}
}

View file

@ -167,12 +167,6 @@ public sealed partial class FleshCultSystem
EnsureComp<IgnoreFleshSpiderWebComponent>(uid);
if (HasComp<HungerComponent>(uid))
RemComp<HungerComponent>(uid);
if (HasComp<ThirstComponent>(uid))
RemComp<ThirstComponent>(uid);
_tagSystem.AddTag(uid, FleshTagProto);
if (TryComp<HumanoidAppearanceComponent>(uid, out var appearance))
@ -210,9 +204,6 @@ public sealed partial class FleshCultSystem
collectiveMind.Minds.Remove(FleshCollectiveMindProto);
}
EnsureComp<HungerComponent>(uid);
EnsureComp<ThirstComponent>(uid);
_alerts.ClearAlert(uid, component.MutationPointAlert);
_tagSystem.RemoveTag(uid, FleshTagProto);

View file

@ -1,7 +1,5 @@
// © SUNRISE, An EULA/CLA with a hosting restriction, full text: https://github.com/space-sunrise/space-station-14/blob/master/CLA.txt;
using Content.Shared.DoAfter;
namespace Content.Server._Sunrise.HairDye;
/// <summary>
@ -10,7 +8,7 @@ namespace Content.Server._Sunrise.HairDye;
[RegisterComponent]
public sealed partial class HairDyerComponent : Component
{
[DataField(required: true, readOnly: true)]
[DataField(required: true)]
public Color TargetColor;
[DataField]

View file

@ -25,10 +25,10 @@ public sealed class PacificatorSystems : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<Pacificator.PacificatorComponent, ComponentInit>(OnCompInit);
SubscribeLocalEvent<Pacificator.PacificatorComponent, ComponentShutdown>(OnComponentShutdown);
SubscribeLocalEvent<Pacificator.PacificatorComponent, InteractHandEvent>(OnInteractHand);
SubscribeLocalEvent<Pacificator.PacificatorComponent, SwitchGeneratorMessage>(
SubscribeLocalEvent<PacificatorComponent, ComponentInit>(OnCompInit);
SubscribeLocalEvent<PacificatorComponent, ComponentShutdown>(OnComponentShutdown);
SubscribeLocalEvent<PacificatorComponent, InteractHandEvent>(OnInteractHand);
SubscribeLocalEvent<PacificatorComponent, SwitchGeneratorMessage>(
OnSwitchGenerator);
}

View file

@ -23,7 +23,7 @@ public sealed class TapePlayerSystem : SharedTapePlayerSystem
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TapePlayerComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<TapePlayerComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<TapePlayerComponent, ComponentShutdown>(OnComponentShutdown);
SubscribeLocalEvent<TapePlayerComponent, EntInsertedIntoContainerMessage>(OnItemInserted);
SubscribeLocalEvent<TapePlayerComponent, EntRemovedFromContainerMessage>(OnItemRemoved);
@ -60,7 +60,7 @@ public sealed class TapePlayerSystem : SharedTapePlayerSystem
Dirty(uid, component);
}
private void OnComponentInit(EntityUid uid, TapePlayerComponent component, ComponentInit args)
private void OnMapInit(EntityUid uid, TapePlayerComponent component, MapInitEvent args)
{
_itemSlotsSystem.AddItemSlot(uid, TapePlayerComponent.TapeSlotId, component.TapeSlot);
if (HasComp<ApcPowerReceiverComponent>(uid))

View file

@ -38,7 +38,7 @@ public sealed class SharedSuicideSystem : EntitySystem
appliedDamageSpecifier.DamageDict[key] = Math.Ceiling((double) (value * lethalAmountOfDamage / totalDamage));
}
_damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target);
_damageableSystem.TryChangeDamage(target, appliedDamageSpecifier, true, origin: target, useModifier: false, useVariance: false); // Sunrise-Edit
}
/// <summary>
@ -62,6 +62,6 @@ public sealed class SharedSuicideSystem : EntitySystem
}
var damage = new DamageSpecifier(damagePrototype, lethalAmountOfDamage);
_damageableSystem.TryChangeDamage(target, damage, true, origin: target);
_damageableSystem.TryChangeDamage(target, damage, true, origin: target, useModifier: false, useVariance: false); // Sunrise-Edit
}
}

View file

@ -1,3 +1,4 @@
using Content.Shared.Containers.ItemSlots;
using Robust.Shared.Audio;
using Robust.Shared.Containers;
@ -45,9 +46,18 @@ public sealed partial class IcarusTerminalComponent : Component
[DataField("keySlots")]
public int KeySlots = 3;
[ViewVariables]
public Container KeyContainer = default!;
public const string KeyContainerName = "key_slots";
public static string FirstKeySlotId = "firstKeySlot";
public static string SecondKeySlotId = "secondKeySlot";
public static string ThirdKeySlotId = "thirdKeySlot";
[DataField]
public ItemSlot FirstKeySlot = new();
[DataField]
public ItemSlot SecondKeySlot = new();
[DataField]
public ItemSlot ThirdKeySlot = new();
[ViewVariables]
public float TimerRoundEnd = 1200;

View file

@ -10,11 +10,11 @@ namespace Content.Shared._Sunrise.FleshCult
public sealed partial class FleshMobComponent : Component
{
[ViewVariables(VVAccess.ReadWrite), DataField("soundDeath")]
public SoundSpecifier? SoundDeath = new SoundPathSpecifier("/Audio/_Sunrise/FleshCult/flesh_pudge_dead.ogg");
public SoundSpecifier? SoundDeath;
[ViewVariables(VVAccess.ReadWrite),
DataField("deathMobSpawnId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string DeathMobSpawnId = "MobFleshWorm";
DataField("deathMobSpawnId")]
public EntProtoId DeathMobSpawnId;
[DataField("deathMobSpawnCount"), ViewVariables(VVAccess.ReadWrite)]
public int DeathMobSpawnCount;

View file

@ -0,0 +1,4 @@
advertisement-firebot-1 = No fires detected.
advertisement-firebot-2 = Only you can prevent station fires.
advertisement-firebot-3 = Temperature nominal.
advertisement-firebot-4 = Keep it cool.

View file

@ -0,0 +1,4 @@
advertisement-firebot-1 = No fires detected.
advertisement-firebot-2 = Only you can prevent station fires.
advertisement-firebot-3 = Temperature nominal.
advertisement-firebot-4 = Keep it cool.

File diff suppressed because it is too large Load diff

View file

@ -33,7 +33,7 @@
sprite: Objects/Specific/Service/vending_machine_restock.rsi
state: base
product: CrateVendingMachineRestockClothesFilled
cost: 2440
cost: 2500 # Sunrise-Edit
category: cargoproduct-category-name-service
group: market

View file

@ -1,25 +0,0 @@
- type: entity
name: Blood Drain
id: beam_blooddrain
components:
- type: Sprite
sprite: /Textures/Effects/lightning.rsi
drawdepth: Effects
layers:
- state: "lightning_1"
shader: unshaded
- type: Physics
canCollide: false
- type: PointLight
enabled: true
color: "#800000"
radius: 3.5
softness: 1
autoRot: true
castShadows: false
- type: Beam
- type: TimedDespawn
lifetime: 3
- type: Tag
tags:
- HideContextMenu

View file

@ -682,14 +682,16 @@
- Trash
- Document
#- type: Appearance, hide stamp marks until we have some kind of displacement
- type: Flammable
fireSpread: true
canResistFire: false
alwaysCombustible: true
canExtinguish: true
damage:
types:
Heat: 1
# Sunrise-Edit
# Тесты падают из-за отсутсвия Apperance. Значит конверты не будут гореть
# - type: Flammable
# fireSpread: true
# canResistFire: false
# alwaysCombustible: true
# canExtinguish: true
# damage:
# types:
# Heat: 1
- type: FireVisuals
sprite: Effects/fire.rsi
normalState: fire

View file

@ -1257,6 +1257,10 @@
parent: BaseItem
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
layers:
- state: grenade
- type: Projectile
damage:
types:

View file

@ -31,6 +31,8 @@
- type: ContainerContainer
containers:
tape: !type:ContainerSlot
machine_board: !type:Container
machine_parts: !type:Container
# Sunrise-End
- type: Machine
board: JukeboxCircuitBoard

View file

@ -382,7 +382,6 @@
- type: EmagLatheRecipes
emagDynamicRecipes:
# Sunrise-Start
- BaseMagazinePistolCaselessRifleExtended
- PowerCellCombat
- MagazineLightRifleBoxIncendiary
- MagazineLightRifleBoxUranium
@ -396,7 +395,21 @@
- MagazineBoxRifleRubber
- MagazineBoxLightRifleRubber
- WeaponGunLaserCarbineSemi
- WeaponGunLaserCarbineAutomatic # Sunrise - IK-60 Laser Carbine
- WeaponGunLaserCarbineAutomatic
- BaseMagazinePistolCaselessRifleExtended
- MagazinePPSH41Extended
- MagazineMP5Extended
- MagazineMP7Extended
- MagazineP90Extended
- MagazineM16A4Extended
- MagazineAR18Extended
- MagazineM28Extended
- MagazineG36Extended
- MagazineFamasExtended
- MagazineV31Extended
- MagazineBauer127Extended
- MagazineBR64Extended
- MagazineDragunovExtended
# Sunrise-End
- BoxBeanbag
- BoxShotgunIncendiary
@ -861,9 +874,6 @@
- ClothingBackpackElectropack
- ExplosivePayload
- FlashPayload
- ShellBlastArtillery #Sunrise-edit
- ShellEMPArtillery #Sunrise-edit
- ShellFlashArtillery #Sunrise-edit
- HoloprojectorSecurity
- MagazineBoxLightRifleIncendiary
- MagazineBoxLightRifleUranium
@ -914,11 +924,14 @@
- MagazineShotgunUranium
- MagazineLightRifleRubber
- MagazineRifleRubber
- MagazineMagnumRubber
- MagazinePistolSubMachineGunRubber
- MagazineBoxPistolRubber
- MagazineBoxMagnumRubber
- MagazineBoxRifleRubber
- MagazineBoxLightRifleRubber
- MagazineLightRifleBoxIncendiary
- MagazineLightRifleBoxUranium
- PowerCageCombat
- WeaponMechCombatImmolationGun # Sunrise - Mechs
- WeaponMechCombatSolarisLaser # Sunrise - Mechs
@ -934,13 +947,23 @@
- WeaponEnergyGunPistol # Sunrise - PDW-9 Energy Pistol
- WeaponGunLaserCarbineAutomatic # Sunrise - IK-60 Laser Carbine
- ClothingShoesBootsMagCombat # Sunrise - Combat Magboots
- BaseMagazinePistolCaselessRifleExtended
- MagazinePPSH41Extended
- MagazineMP5Extended
- MagazineMP7Extended
- MagazineP90Extended
- MagazineM16A4Extended
- MagazineAR18Extended
- MagazineM28Extended
- MagazineG36Extended
- MagazineFamasExtended
- MagazineV31Extended
- MagazineBauer127Extended
- MagazineBR64Extended
- MagazineDragunovExtended
- ShellBlastArtillery
- ShellEMPArtillery
- ShellFlashArtillery
# Sunrise-End
- type: MaterialStorage
whitelist:

View file

@ -28,7 +28,7 @@
- type: TTS
voice: FactCore # Sunrise-TTS
- type: StaticPrice
price: 0 # Sunrise-TTS
price: 0
- type: DamageOverlay
damagePopupType: SmallFloating
isStructure: true

View file

@ -23,7 +23,6 @@
- Clown
- HeadOfPersonnel
- Janitor
- Lawyer
- Librarian
- Mime
- Musician

View file

@ -31,7 +31,14 @@
offset: "0, 0.4" # shine from the top, not bottom of the computer
castShadows: false
- type: ItemSlots
slots:
- type: ContainerContainer
containers:
firstKeySlot: !type:ContainerSlot
secondKeySlot: !type:ContainerSlot
thirdKeySlot: !type:ContainerSlot
board: !type:Container
ents: []
- type: IcarusTerminal
firstKeySlot:
ejectSound: /Audio/Machines/id_swipe.ogg
insertSound: /Audio/Machines/Nuke/general_beep.ogg
@ -56,12 +63,6 @@
whitelist:
components:
- IcarusKey
- type: ContainerContainer
containers:
firstKeySlot: !type:ContainerSlot
secondKeySlot: !type:ContainerSlot
thirdKeySlot: !type:ContainerSlot
- type: IcarusTerminal
- type: UserInterface
interfaces:
enum.IcarusTerminalUiKey.Key:

View file

@ -25,3 +25,15 @@
Steel: 5
CableHV: 5
Uranium: 2
- type: entity
parent: BaseMachineCircuitboard
id: ReflectorMachineCircuitboard
name: reflector machine board
components:
- type: MachineBoard
prototype: Reflector
stackRequirements:
Manipulator: 2
MatterBin: 1
Steel: 1

View file

@ -44,6 +44,8 @@
id: BlueShieldPDA
name: blue shield officer's PDA
components:
- type: Sprite
sprite: _Sunrise/Objects/Devices/pda.rsi
- type: Pda
id: BlueShieldIDCard
- type: Appearance
@ -60,6 +62,8 @@
id: PathologistPDA
name: Pathologist PDA
components:
- type: Sprite
sprite: _Sunrise/Objects/Devices/pda.rsi
- type: Pda
id: PathologistIDCard
- type: Appearance
@ -261,16 +265,6 @@
components:
- type: Sprite
sprite: _Sunrise/Objects/Devices/pda.rsi
layers:
- map: [ "enum.PdaVisualLayers.Base" ]
- state: "light_overlay"
map: [ "enum.PdaVisualLayers.Flashlight" ]
shader: "unshaded"
visible: false
- state: "id_overlay"
map: [ "enum.PdaVisualLayers.IdLight" ]
shader: "unshaded"
visible: false
- type: Pda
id: AdjutantIDCard
- type: Appearance

View file

@ -12,6 +12,8 @@
powerLoad: 0
- type: ShuttleConsole
portable: true
- type: DroneConsole
portable: true
- type: RadarConsole
maxRange: 256
- type: ActivatableUI
@ -30,7 +32,6 @@
- type: Sprite
state: syndicate
- type: DroneConsole
portable: true
components:
- type: AssaultOpsShuttle
@ -43,7 +44,6 @@
- type: Sprite
state: syndicate
- type: DroneConsole
portable: true
components:
- type: NukeOpsShuttle
@ -56,7 +56,6 @@
- type: Sprite
state: nanotrasen
- type: DroneConsole
portable: true
components:
- type: SecurityShuttle
@ -69,7 +68,6 @@
- type: Sprite
state: nanotrasen
- type: DroneConsole
portable: true
components:
- type: CargoShuttle
@ -82,6 +80,5 @@
- type: Sprite
state: nanotrasen
- type: DroneConsole
portable: true
components:
- type: PrisonShuttle

View file

@ -54,6 +54,7 @@
containers:
gun_magazine: !type:ContainerSlot
gun_chamber: !type:ContainerSlot
ballistic-ammo: !type:Container
- type: MagazineVisuals
magState: mag
steps: 1
@ -183,6 +184,7 @@
containers:
gun_magazine: !type:ContainerSlot
gun_chamber: !type:ContainerSlot
ballistic-ammo: !type:Container
- type: MagazineVisuals
magState: mag
steps: 1

View file

@ -16,6 +16,11 @@
- type: Pullable
- type: Rotatable
- type: Machine
board: ReflectorMachineCircuitboard
- type: ContainerContainer
containers:
machine_board: !type:Container
machine_parts: !type:Container
- type: Physics
bodyType: Static
- type: Fixtures

View file

@ -8,7 +8,6 @@
- !type:RoleTimeRequirement
role: JobChef
time: 7200 #2 hrs
setPreference: false
icon: "JobIconPrisonChef"
supervisors: job-supervisors-head-of-prison
alwaysUseSpawner: true

View file

@ -8,7 +8,6 @@
supervisors: job-supervisors-head-of-prison
alwaysUseSpawner: true
canBeAntag: false
setPreference: false
displayWeight: 40
access:
- Service