From b5119183f751b91b5084677e5eefcb98ec1c22d2 Mon Sep 17 00:00:00 2001 From: Doublechest Date: Sun, 11 Aug 2024 08:10:32 +0300 Subject: [PATCH 1/2] return S. P. A. F. --- Content.Server/Stories/Spaf/SpafSystem.cs | 30 +++ .../Stories/Spaf/SharedSpafSystem.cs | 133 ++++++++++++ Content.Shared/Stories/Spaf/SpafActions.cs | 56 +++++ Content.Shared/Stories/Spaf/SpafComponent.cs | 19 ++ .../Locale/ru-RU/_stories/ghost-roles.ftl | 9 + Resources/Locale/ru-RU/_stories/spaf.ftl | 1 + Resources/Prototypes/Stories/Actions/spaf.yml | 118 +++++++++++ Resources/Prototypes/Stories/Alerts/spaf.yml | 27 +++ .../Stories/Datasets/Names/spaf_first.yml | 15 ++ .../Stories/Datasets/Names/spaf_last.yml | 22 ++ .../Entities/Markers/Spawners/ghost_roles.yml | 21 ++ .../Stories/Entities/Mobs/NPCs/spaf.yml | 194 ++++++++++++++++++ .../Entities/Objects/Misc/spaf_egg.yml | 43 ++++ .../Entities/Objects/Misc/spaf_mine.yml | 13 ++ .../Prototypes/Stories/GameRules/events.yml | 17 ++ .../Prototypes/Stories/Polymorphs/spaf.yml | 10 + .../Prototypes/Stories/radio_channels.yml | 7 + .../Stories/Actions/spaf.rsi/meta.json | 41 ++++ .../Stories/Actions/spaf.rsi/spaf_devour.png | Bin 0 -> 720 bytes .../Actions/spaf.rsi/spaf_devour_on.png | Bin 0 -> 737 bytes .../Stories/Actions/spaf.rsi/spaf_egg.png | Bin 0 -> 872 bytes .../Stories/Actions/spaf.rsi/spaf_evol.png | Bin 0 -> 662 bytes .../Stories/Actions/spaf.rsi/spaf_food.png | Bin 0 -> 597 bytes .../Stories/Actions/spaf.rsi/spaf_glue.png | Bin 0 -> 598 bytes .../Stories/Actions/spaf.rsi/spaf_light.png | Bin 0 -> 687 bytes .../Stories/Actions/spaf.rsi/spaf_lube.png | Bin 0 -> 597 bytes .../Stories/Actions/spaf.rsi/spaf_mine.png | Bin 0 -> 638 bytes .../Stories/Actions/spaf.rsi/spaf_stealth.png | Bin 0 -> 536 bytes .../Alerts/spaf_alive.rsi/health0.png | Bin 0 -> 361 bytes .../Alerts/spaf_alive.rsi/health1.png | Bin 0 -> 377 bytes .../Alerts/spaf_alive.rsi/health2.png | Bin 0 -> 388 bytes .../Alerts/spaf_alive.rsi/health3.png | Bin 0 -> 376 bytes .../Alerts/spaf_alive.rsi/health4.png | Bin 0 -> 400 bytes .../Interface/Alerts/spaf_alive.rsi/meta.json | 26 +++ .../Stories/Mobs/Aliens/minispaf.rsi/dead.png | Bin 0 -> 357 bytes .../Mobs/Aliens/minispaf.rsi/meta.json | 40 ++++ .../Stories/Mobs/Aliens/minispaf.rsi/spaf.png | Bin 0 -> 3356 bytes .../Stories/Mobs/Aliens/spaf.rsi/dead.png | Bin 0 -> 357 bytes .../Stories/Mobs/Aliens/spaf.rsi/meta.json | 18 ++ .../Stories/Mobs/Aliens/spaf.rsi/spaf.png | Bin 0 -> 2873 bytes .../Stories/Mobs/Aliens/spafegg.rsi/dead.png | Bin 0 -> 357 bytes .../Stories/Mobs/Aliens/spafegg.rsi/meta.json | 25 +++ .../Mobs/Aliens/spafegg.rsi/spaf_eggs.png | Bin 0 -> 927 bytes .../Mobs/Aliens/spafobserv.rsi/meta.json | 14 ++ .../Mobs/Aliens/spafobserv.rsi/spaf.png | Bin 0 -> 458 bytes .../Objects/Misc/spafmine.rsi/meta.json | 24 +++ .../Misc/spafmine.rsi/spafmine-inactive.png | Bin 0 -> 320 bytes .../Objects/Misc/spafmine.rsi/spafmine.png | Bin 0 -> 601 bytes 48 files changed, 923 insertions(+) create mode 100644 Content.Server/Stories/Spaf/SpafSystem.cs create mode 100644 Content.Shared/Stories/Spaf/SharedSpafSystem.cs create mode 100644 Content.Shared/Stories/Spaf/SpafActions.cs create mode 100644 Content.Shared/Stories/Spaf/SpafComponent.cs create mode 100644 Resources/Locale/ru-RU/_stories/ghost-roles.ftl create mode 100644 Resources/Locale/ru-RU/_stories/spaf.ftl create mode 100644 Resources/Prototypes/Stories/Actions/spaf.yml create mode 100644 Resources/Prototypes/Stories/Alerts/spaf.yml create mode 100644 Resources/Prototypes/Stories/Datasets/Names/spaf_first.yml create mode 100644 Resources/Prototypes/Stories/Datasets/Names/spaf_last.yml create mode 100644 Resources/Prototypes/Stories/Entities/Mobs/NPCs/spaf.yml create mode 100644 Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_egg.yml create mode 100644 Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_mine.yml create mode 100644 Resources/Prototypes/Stories/Polymorphs/spaf.yml create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/meta.json create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_devour.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_devour_on.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_egg.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_evol.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_food.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_glue.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_light.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_lube.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_mine.png create mode 100644 Resources/Textures/Stories/Actions/spaf.rsi/spaf_stealth.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health0.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health1.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health2.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health3.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health4.png create mode 100644 Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/meta.json create mode 100644 Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/dead.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/meta.json create mode 100644 Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/spaf.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/dead.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/meta.json create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/spaf.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/dead.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/meta.json create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/spaf_eggs.png create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/meta.json create mode 100644 Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/spaf.png create mode 100644 Resources/Textures/Stories/Objects/Misc/spafmine.rsi/meta.json create mode 100644 Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine-inactive.png create mode 100644 Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine.png diff --git a/Content.Server/Stories/Spaf/SpafSystem.cs b/Content.Server/Stories/Spaf/SpafSystem.cs new file mode 100644 index 0000000000..0ca7d34e85 --- /dev/null +++ b/Content.Server/Stories/Spaf/SpafSystem.cs @@ -0,0 +1,30 @@ +using Robust.Shared.Prototypes; +using Content.Server.Polymorph.Systems; +using Content.Shared.Stories.Spaf; + +namespace Content.Server.Stories.Spaf; + +public sealed partial class SpafSystem : SharedSpafSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly PolymorphSystem _polymorph = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPolymorph); + } + + private void OnPolymorph(EntityUid uid, SpafComponent component, SpafPolymorphEvent args) + { + if (args.Handled || !TryModifyHunger(args.Performer, args.HungerCost)) + return; + + if (!_prototype.TryIndex(args.ProtoId, out var prototype)) + return; + + _polymorph.PolymorphEntity(args.Performer, prototype.Configuration); + + args.Handled = true; + } +} diff --git a/Content.Shared/Stories/Spaf/SharedSpafSystem.cs b/Content.Shared/Stories/Spaf/SharedSpafSystem.cs new file mode 100644 index 0000000000..7f9706c3a9 --- /dev/null +++ b/Content.Shared/Stories/Spaf/SharedSpafSystem.cs @@ -0,0 +1,133 @@ +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Content.Shared.Popups; +using Robust.Shared.Containers; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Fluids; +using Robust.Shared.Prototypes; +using Content.Shared.Stealth; +using Content.Shared.Chemistry.Components; +using Content.Shared.Devour; +using Content.Shared.Devour.Components; + +namespace Content.Shared.Stories.Spaf; + +public abstract partial class SharedSpafSystem : EntitySystem +{ + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedActionsSystem _action = default!; + [Dependency] private readonly HungerSystem _hunger = default!; + [Dependency] private readonly SharedPuddleSystem _puddle = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + + SubscribeLocalEvent(OnCreateEntity); + SubscribeLocalEvent(OnSpill); + SubscribeLocalEvent(OnStealth); + SubscribeLocalEvent(OnStealthDoAfter); + + SubscribeLocalEvent(OnDevourDoAfter); + + SubscribeLocalEvent(OnFood); + } + + public bool TryModifyHunger(EntityUid uid, float amount, HungerComponent? component = null) + { + if (!Resolve(uid, ref component)) + return false; + + if (component.CurrentHunger - amount < 0) + { + _popup.PopupEntity(Loc.GetString("need-more-food"), uid, uid); + return false; + } + + _hunger.ModifyHunger(uid, -amount, component); + + return true; + } + + private void OnDevourDoAfter(EntityUid uid, SpafComponent component, DevourDoAfterEvent args) + { + if (!args.Cancelled && TryComp(uid, out var devourer)) + _hunger.ModifyHunger(uid, devourer.HealRate); + } + + private void OnInit(EntityUid uid, SpafComponent component, ComponentInit args) + { + foreach (var action in component.Actions) + { + var actionId = _action.AddAction(uid, action); + if (actionId.HasValue) + component.GrantedActions.Add(actionId.Value); + } + } + + private void OnCreateEntity(EntityUid uid, SpafComponent component, SpafCreateEntityEvent args) + { + if (args.Handled || !TryModifyHunger(args.Performer, args.HungerCost)) + return; + + SpawnAtPosition(args.Prototype, Transform(args.Performer).Coordinates); + + args.Handled = true; + } + + private void OnSpill(EntityUid uid, SpafComponent component, SpafSpillSolutionEvent args) + { + if (args.Handled || !TryModifyHunger(args.Performer, args.HungerCost)) + return; + + var solution = new Solution(args.Solution); + + _puddle.TrySpillAt(Transform(args.Performer).Coordinates, solution, out _); + + args.Handled = true; + } + + private void OnStealth(EntityUid uid, SpafComponent component, SpafStealthEvent args) + { + if (args.Handled || !TryModifyHunger(args.Performer, args.HungerCost)) + return; + + // DoAfter с Hidden = true используется, чтобы спаф мог видеть сколько секунд + // у него осталось. Достаточно удобно, не требует писать много кода для этого. + + _stealth.SetEnabled(uid, true); + + args.Handled = _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.Performer, TimeSpan.FromSeconds(args.Seconds), new SpafStealthDoAfterEvent(), args.Performer, args.Performer) + { + Hidden = true, + BreakOnHandChange = false, + BreakOnDropItem = false, + BreakOnWeightlessMove = false, + RequireCanInteract = false, + }); + } + + private void OnStealthDoAfter(EntityUid uid, SpafComponent component, SpafStealthDoAfterEvent args) + { + if (args.Handled || args.Cancelled) + return; + + _stealth.SetEnabled(uid, false); + + args.Handled = true; + } + + private void OnFood(EntityUid uid, HungerComponent component, FoodPopupEvent args) + { + if (args.Handled) + return; + + _popup.PopupEntity("" + component.CurrentHunger, uid, uid); + + args.Handled = true; + } +} diff --git a/Content.Shared/Stories/Spaf/SpafActions.cs b/Content.Shared/Stories/Spaf/SpafActions.cs new file mode 100644 index 0000000000..f14842b89b --- /dev/null +++ b/Content.Shared/Stories/Spaf/SpafActions.cs @@ -0,0 +1,56 @@ +using Content.Shared.Actions; +using Content.Shared.Chemistry.Components; +using Content.Shared.DoAfter; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Stories.Spaf; + +public interface ISpafAction +{ + [DataField("cost")] + public float HungerCost { get; set; } +} + +public sealed partial class SpafCreateEntityEvent : InstantActionEvent, ISpafAction +{ + [DataField("cost")] + public float HungerCost { get; set; } = 20f; + + [DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Prototype; +} + +public sealed partial class SpafSpillSolutionEvent : InstantActionEvent, ISpafAction +{ + [DataField("cost")] + public float HungerCost { get; set; } = 10f; + + [DataField("solution")] + public Solution Solution { get; set; } = new(); +} + +public sealed partial class SpafPolymorphEvent : InstantActionEvent, ISpafAction +{ + [DataField("cost")] + public float HungerCost { get; set; } = 70f; + + [DataField] + public ProtoId ProtoId; +} + +public sealed partial class SpafStealthEvent : InstantActionEvent, ISpafAction +{ + [DataField("cost")] + public float HungerCost { get; set; } = 15f; + + [DataField] + public float Seconds { get; set; } = 5f; +} + +[Serializable, NetSerializable] +public sealed partial class SpafStealthDoAfterEvent : SimpleDoAfterEvent { } + +public sealed partial class FoodPopupEvent : InstantActionEvent { } diff --git a/Content.Shared/Stories/Spaf/SpafComponent.cs b/Content.Shared/Stories/Spaf/SpafComponent.cs new file mode 100644 index 0000000000..80291c0dad --- /dev/null +++ b/Content.Shared/Stories/Spaf/SpafComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Stories.Spaf; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedSpafSystem))] +public sealed partial class SpafComponent : Component +{ + // TODO: Add spaf status icon + // [DataField] + // public ProtoId StatusIcon = "SpafFaction"; + + [DataField] + public HashSet Actions = new(); + + [DataField] + public HashSet GrantedActions = new(); +} diff --git a/Resources/Locale/ru-RU/_stories/ghost-roles.ftl b/Resources/Locale/ru-RU/_stories/ghost-roles.ftl new file mode 100644 index 0000000000..82e9d91f66 --- /dev/null +++ b/Resources/Locale/ru-RU/_stories/ghost-roles.ftl @@ -0,0 +1,9 @@ +ghost-role-information-spaf-name = S.P.A.F. +ghost-role-information-spaf-description = Вы - космический паразит, который жаждит двух вещей: еды и продолжения жизни. Играйте как настоящий охотник техов при помощи способностей, которые тратят еду во время своего использования +ghost-role-information-spaf-rules = Вы - антагонист, убивайте, ешьте, размножайтесь и в конце концов захватите эту станцию, но старайтесь не попадаться на глаза! +ghost-role-information-spafegg-name = личинка принадлежащая S.P.A.F. +ghost-role-information-spafegg-description = Вы еще не родившийся S.P.A.F. Эволюционируйте до маленького монстра, который выглядит как маленький (и миленький) слизнячок. Это ваше оружие ;) +ghost-role-information-spafegg-rules = Вы - скрытный антагонист, убивайте, ешьте, размножайтесь и в конце концов захватите эту станцию, но старайтесь не попадаться на глаза! +ghost-role-information-spafmouse-name = Мышь, зараженная паразитом S.P.A.F. +ghost-role-information-spafmouse-description = Ваша задача: найти уромное место для последующего превращения в S.P.A.F. +ghost-role-information-spafmouse-rules = Вы - скрытный антагонист, найдите место для эволюции и старайтесь не показывать окружающим, что вы не простая мышь! diff --git a/Resources/Locale/ru-RU/_stories/spaf.ftl b/Resources/Locale/ru-RU/_stories/spaf.ftl new file mode 100644 index 0000000000..c1fd77f6b5 --- /dev/null +++ b/Resources/Locale/ru-RU/_stories/spaf.ftl @@ -0,0 +1 @@ +need-more-food = Вам нужно больше еды! diff --git a/Resources/Prototypes/Stories/Actions/spaf.yml b/Resources/Prototypes/Stories/Actions/spaf.yml new file mode 100644 index 0000000000..5c899b20cd --- /dev/null +++ b/Resources/Prototypes/Stories/Actions/spaf.yml @@ -0,0 +1,118 @@ +- type: entity + id: ActionSpafStealth + name: "[color=limegreen]Режим невидимости[/color]" + description: Потратьте 15 единиц еды, чтобы замаскироваться на 5 секунд. + noSpawn: true + components: + - type: InstantAction + useDelay: 6 + icon: Stories/Actions/spaf.rsi/spaf_stealth.png + event: !type:SpafStealthEvent + cost: 15 + seconds: 5 + +- type: entity + id: ActionSpafLight + name: "[color=orange]Светящаяся эссенция[/color]" + description: Выработайте светящуюся эссенцию, чтобы осветить себе путь. + noSpawn: true + components: + - type: InstantAction + useDelay: 1 + icon: Stories/Actions/spaf.rsi/spaf_light.png + event: !type:ToggleActionEvent + +- type: entity + id: ActionSpafLube + name: "[color=purple]Слизь[/color]" + description: Потратьте 10 единиц еды, чтобы выделить очень скользкую слизь. + noSpawn: true + components: + - type: InstantAction + useDelay: 10 + icon: Stories/Actions/spaf.rsi/spaf_lube.png + event: !type:SpafSpillSolutionEvent + cost: 10 + solution: + maxVol: 12 + reagents: + - ReagentId: SpaceLube + Quantity: 12 + +- type: entity + id: ActionSpafMine + name: "[color=rosybrown]Органическая ловушка[/color]" + description: Потратьте 20 единиц еды, чтобы создать органическую ловушку, которая оглушает врагов на время. + noSpawn: true + components: + - type: InstantAction + useDelay: 5 + icon: Stories/Actions/spaf.rsi/spaf_mine.png + event: !type:SpafCreateEntityEvent + cost: 20 + proto: LandMineSpaf + +- type: entity + id: ActionSpafFood + name: "[color=lightseagreen]Таинственные знания[/color]" + description: Неизвестный науке метод, который позволяет вам с точностью до сотых определить наполненность своего желудка. + noSpawn: true + components: + - type: InstantAction + useDelay: 1 + icon: Stories/Actions/spaf.rsi/spaf_food.png + event: !type:FoodPopupEvent + +- type: entity + id: ActionSpafGlue + name: "[color=darkslateblue]Липкая слизь[/color]" + description: Потратьте 10 единиц еды, чтобы выделить липкую слизь. + noSpawn: true + components: + - type: InstantAction + useDelay: 10 + icon: Stories/Actions/spaf.rsi/spaf_glue.png + event: !type:SpafSpillSolutionEvent + cost: 10 + solution: + maxVol: 12 + reagents: + - ReagentId: Slime + Quantity: 12 + +- type: entity + id: ActionSpafEgg + name: "[color=orange]Новая жизнь[/color]" + description: Потратьте 50 единиц еды, чтобы создать яйцо с маленькой копией себя. + noSpawn: true + components: + - type: InstantAction + useDelay: 60 + icon: Stories/Actions/spaf.rsi/spaf_egg.png + event: !type:SpafCreateEntityEvent + cost: 50 + proto: MobSpafEgg + +- type: entity + id: ActionSpafEvol + name: "[color=blue]Эволюция[/color]" + description: Потратьте 70 единиц еды, чтобы эволюционировать во взрослую особь. + noSpawn: true + components: + - type: InstantAction + useDelay: 60 + icon: Stories/Actions/spaf.rsi/spaf_evol.png + event: !type:SpafPolymorphEvent + cost: 70 + protoId: MobSpaf + +- type: entity + id: ActionSpafDevour + name: "[color=lime]Поглощение[/color]" + description: Съешьте свою жертву, чтобы насытиться. + noSpawn: true + components: + - type: EntityTargetAction + icon: Stories/Actions/spaf.rsi/spaf_devour.png + iconOn: Stories/Actions/spaf.rsi/spaf_devour_on.png + event: !type:DevourActionEvent diff --git a/Resources/Prototypes/Stories/Alerts/spaf.yml b/Resources/Prototypes/Stories/Alerts/spaf.yml new file mode 100644 index 0000000000..6865f01897 --- /dev/null +++ b/Resources/Prototypes/Stories/Alerts/spaf.yml @@ -0,0 +1,27 @@ +- type: alert + id: SpafHealth + category: Health + icons: + - sprite: /Textures/Stories/Interface/Alerts/spaf_alive.rsi + state: health0 + - sprite: /Textures/Stories/Interface/Alerts/spaf_alive.rsi + state: health1 + - sprite: /Textures/Stories/Interface/Alerts/spaf_alive.rsi + state: health2 + - sprite: /Textures/Stories/Interface/Alerts/spaf_alive.rsi + state: health3 + - sprite: /Textures/Stories/Interface/Alerts/spaf_alive.rsi + state: health4 + name: alerts-health-name + description: alerts-health-desc + minSeverity: 0 + maxSeverity: 4 + +- type: alert + id: SpafDead + category: Health + icons: + - sprite: /Textures/Interface/Alerts/human_dead.rsi + state: dead + name: alerts-dead-name + description: alerts-dead-desc diff --git a/Resources/Prototypes/Stories/Datasets/Names/spaf_first.yml b/Resources/Prototypes/Stories/Datasets/Names/spaf_first.yml new file mode 100644 index 0000000000..ed8f9a6248 --- /dev/null +++ b/Resources/Prototypes/Stories/Datasets/Names/spaf_first.yml @@ -0,0 +1,15 @@ +- type: dataset + id: SpafFirst + values: + #- Green + - Зеленый + #- Meadow + - Луговой + #- Bloody + - Кровавый + #- Shadow + - Призрачный + #- Dark + - Темный + #- Silent + - Бесшумный \ No newline at end of file diff --git a/Resources/Prototypes/Stories/Datasets/Names/spaf_last.yml b/Resources/Prototypes/Stories/Datasets/Names/spaf_last.yml new file mode 100644 index 0000000000..901e99634b --- /dev/null +++ b/Resources/Prototypes/Stories/Datasets/Names/spaf_last.yml @@ -0,0 +1,22 @@ +- type: dataset + id: SpafLast + values: + #- Predator + - Хищник + #- Hunter + - Охотник + #- Devourer + - Поглотитель + #- Beast + - Зверь + #- Horror + - Ужас + #- Death + #- Reaper + - Жнец + #- Bonecracker + - Костолом + #- Killer + - Убийца + #- Ravager + - Опустошитель \ No newline at end of file diff --git a/Resources/Prototypes/Stories/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Stories/Entities/Markers/Spawners/ghost_roles.yml index d158a54501..ee752c004c 100644 --- a/Resources/Prototypes/Stories/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Stories/Entities/Markers/Spawners/ghost_roles.yml @@ -15,3 +15,24 @@ - state: green - sprite: Stories/Mobs/Ghosts/sith.rsi state: sith + +- type: entity + id: SpawnPointGhostSpaf + name: spaf spawn point + suffix: S.P.A.F. + parent: MarkerBase + components: + - type: GhostRole + name: ghost-role-information-spaf-name + description: ghost-role-information-spaf-description + rules: ghost-role-information-spaf-rules + raffle: + settings: default + - type: GhostRoleMobSpawner + prototype: MobSpaf + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: Stories/Mobs/Aliens/spaf.rsi + state: spaf diff --git a/Resources/Prototypes/Stories/Entities/Mobs/NPCs/spaf.yml b/Resources/Prototypes/Stories/Entities/Mobs/NPCs/spaf.yml new file mode 100644 index 0000000000..fb87fe4dcc --- /dev/null +++ b/Resources/Prototypes/Stories/Entities/Mobs/NPCs/spaf.yml @@ -0,0 +1,194 @@ +- type: entity + save: false + parent: SimpleSpaceMobBase + id: BaseMobSpaf + abstract: true + components: + - type: Bloodstream + bloodReagent: Slime + bloodlossDamage: + types: + Bloodloss: + 0.5 + bloodlossHealDamage: + types: + Bloodloss: + -0.25 + - type: Butcherable + spawned: + - id: FoodMeatSlime + amount: 2 + - type: StepTriggerImmune + - type: Speech + speechVerb: Slime + speechSounds: Slime + - type: Tag + tags: + - CannotSuicide + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - SpafMind + - type: ActiveRadio + channels: + - SpafMind + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 100 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: Puller + needsHands: false + - type: Hunger + thresholds: # only animals and rats are derived from this prototype so let's override it here and in rats' proto + Overfed: 100 + Okay: 50 + Peckish: 25 + Starving: 10 + Dead: 0 + baseDecayRate: 0 # it is okay for animals to eat and drink less than humans, but more frequently + - type: Thirst + thresholds: + OverHydrated: 200 + Okay: 150 + Thirsty: 100 + Parched: 50 + Dead: 0 + baseDecayRate: 0.04 + - type: MovementSpeedModifier + baseWalkSpeed : 4 + baseSprintSpeed : 4 + - type: UnpoweredFlashlight + toggleFlashlightSound: + path: "" + toggleAction: ActionSpafLight + - type: PointLight + enabled: false + color: DarkGreen + radius: 3 + energy: 2 + softness: 1 + - type: StealthOnMove + passiveVisibilityRate: -0.9 + movementVisibilityRate: -10 + - type: Stealth + enabledOnDeath: false + enabled: false + +- type: entity + name: S.P.A.F. + description: Ужасное на вид создание... Брр.. Пожалуй, от него стоит убегать. + parent: BaseMobSpaf + id: MobSpaf + components: + - type: Spaf + actions: + - ActionSpafStealth + - ActionSpafLube + # - ActionSpafMine Сломалось. + - ActionSpafFood + - ActionSpafGlue + - ActionSpafEgg + - type: Devourer + devourAction: ActionSpafDevour + foodPreference: Humanoid + shouldStoreDevoured: true + chemical: Ichor + healRate: 30.0 + whitelist: + components: + - MobState + - type: RandomMetadata + nameSegments: + - SpafFirst + - SpafLast + - type: MeleeWeapon + altDisarm: false + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg + damage: + types: + Slash: 15 + - type: GhostRole + makeSentient: true + name: ghost-role-information-spaf-name + description: ghost-role-information-spaf-description + rules: ghost-role-information-spaf-rules + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: SlowOnDamage + speedModifierThresholds: + 40: 1.1 + 50: 1.05 + 70: 1.01 + - type: Sprite + drawdepth: SmallMobs + sprite: Stories/Mobs/Aliens/spaf.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: spaf + - type: MobThresholds + thresholds: + 0: Alive + 100: Dead + stateAlertDict: + Alive: SpafHealth + Dead: SpafDead + showOverlays: false + - type: DamageStateVisuals + states: + Alive: + Base: spaf + Dead: + Base: dead + +- type: entity + name: маленький радужный слизняк + description: На вид очень милый и безобидный! Скорее всего, он сбежал из РНД. + parent: BaseMobSpaf + id: MobMiniSpaf + components: + - type: Spaf + actions: + - ActionSpafFood + - ActionSpafEvol + - type: Sprite + drawdepth: SmallMobs + sprite: Stories/Mobs/Aliens/minispaf.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: spaf + - type: MobThresholds + thresholds: + 0: Alive + 50: Dead + stateAlertDict: + Alive: SpafHealth + Dead: SpafDead + showOverlays: false + - type: DamageStateVisuals + states: + Alive: + Base: spaf + Dead: + Base: dead + - type: SlowOnDamage + speedModifierThresholds: + 20: 1.1 + 30: 1.05 + 40: 1.01 + - type: MeleeWeapon + altDisarm: false + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg + damage: + types: + Slash: 5 + diff --git a/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_egg.yml b/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_egg.yml new file mode 100644 index 0000000000..6dfcf4f1fd --- /dev/null +++ b/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_egg.yml @@ -0,0 +1,43 @@ +- type: entity + name: странное яйцо + description: Оно шевелится! Возможно, стоит позвать экспертов. + parent: BaseStructure + id: MobSpafEgg + components: + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 60 + mask: + - MachineMask + - type: Damageable + - type: GhostRoleMobSpawner + prototype: MobMiniSpaf + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Sprite + drawdepth: Mobs + sprite: Stories/Mobs/Aliens/spafegg.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: spaf_eggs + - type: PointLight + color: DarkGreen + radius: 1 + softness: 1 + - type: GhostRole + makeSentient: true + name: ghost-role-information-spafegg-name + description: ghost-role-information-spafegg-description + rules: ghost-role-information-spafegg-rules + raffle: + settings: default diff --git a/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_mine.yml b/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_mine.yml new file mode 100644 index 0000000000..beb3397de3 --- /dev/null +++ b/Resources/Prototypes/Stories/Entities/Objects/Misc/spaf_mine.yml @@ -0,0 +1,13 @@ +- type: entity + id: LandMineSpaf + name: органическая ловушка + description: По её внешнему виду тяжело понять функционал, но явно наступать на это не стоит... + parent: BaseLandMine + components: + - type: Sprite + drawdepth: Items + sprite: Stories/Objects/Misc/spafmine.rsi + state: spafmine + - type: FlashOnTrigger + - type: StealthOnMove + - type: Stealth diff --git a/Resources/Prototypes/Stories/GameRules/events.yml b/Resources/Prototypes/Stories/GameRules/events.yml index 919b93f55f..eeebaf43c0 100644 --- a/Resources/Prototypes/Stories/GameRules/events.yml +++ b/Resources/Prototypes/Stories/GameRules/events.yml @@ -188,3 +188,20 @@ mindComponents: - type: EmpireMemberRole prototype: EmpireMember + +- type: entity + id: SpafMigration + 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 + specialEntries: + - id: SpawnPointGhostSpaf + prob: 0.001 diff --git a/Resources/Prototypes/Stories/Polymorphs/spaf.yml b/Resources/Prototypes/Stories/Polymorphs/spaf.yml new file mode 100644 index 0000000000..7dfeae8559 --- /dev/null +++ b/Resources/Prototypes/Stories/Polymorphs/spaf.yml @@ -0,0 +1,10 @@ +- type: polymorph + id: MobSpaf + configuration: + entity: MobSpaf + forced: true + inventory: None + transferName: false + transferDamage: true + revertOnCrit: false + revertOnDeath: false diff --git a/Resources/Prototypes/Stories/radio_channels.yml b/Resources/Prototypes/Stories/radio_channels.yml index 3b3d1729dd..e8a26f94f4 100644 --- a/Resources/Prototypes/Stories/radio_channels.yml +++ b/Resources/Prototypes/Stories/radio_channels.yml @@ -26,4 +26,11 @@ frequency: 98767 keycode: 'ш' color: "#8b0000" + +- type: radioChannel + id: SpafMind #for spaf + name: Общий разум + keycode: 'r' + frequency: 9361 + color: "#00FF00" longRange: true diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/meta.json b/Resources/Textures/Stories/Actions/spaf.rsi/meta.json new file mode 100644 index 0000000000..e9bfb515bc --- /dev/null +++ b/Resources/Textures/Stories/Actions/spaf.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Space_Stories", + "states": [ + { + "name": "spaf_stealth" + }, + { + "name": "spaf_lube" + }, + { + "name": "spaf_mine" + }, + { + "name": "spaf_light" + }, + { + "name": "spaf_glue" + }, + { + "name": "spaf_food" + }, + { + "name": "spaf_devour" + }, + { + "name": "spaf_egg" + }, + { + "name": "spaf_evol" + }, + { + "name": "spaf_devour_on" + } + ] +} diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/spaf_devour.png b/Resources/Textures/Stories/Actions/spaf.rsi/spaf_devour.png new file mode 100644 index 0000000000000000000000000000000000000000..669f124c85e324426a9d512c28bd56b61e4d1500 GIT binary patch literal 720 zcmV;>0x$iEP)Px%a7jc#R9J=0S3hssKpcIfkw_IqKq^RJuxzASL7s5B&`ePxu`ro|&w#|hN9ae$ z5GkLbLs1487&1nvY69N?5Q9%LA#^J0lumcOv(IOTR*)xI=XbyRy?gh^_Bml%moL~N zc6stVpKPSl!>kcB@I0TuKE2q8f#KsFGqJPj&H=zaygM)n`PIGvTIeB87kO|)JXXH!Z zhf6#plY4N92LMPW_gFmu7`g_RctYGI9t>TJ)Rr2c9TxIA+z%eGBntpwC54JF$pZI- z2b@(t3FcxM@C(bt;~H^^hsks%)db$aCJfyJVblH^#L-aBz>+Lr*`>7&SavCL07?Uv zU4o%&Ynh0f8)|?G{41hNgc|7G_5dLC@reVPOSN8QKxT%H#Ij4msCZ6GRi`{6--LyH zjtSEx@h=U}>HTyzX1Qw_(6u7_x;c$HI$yt`)ou!}SpHQ^xuI+5-S*%#>MURO6{Lt< z0;f?IMl$;TL%8>Iib6gIr%{iRN5Zr&UsOjj)nOtI!bVTeg^_zeHGTgB!V=V+Dr!zO zz-gVol(mt?!`cN506@3X7aDateRMm0sr#B!WpRI=3^JX_O(=7{E~sH1!XBWH6<-bq zBV}BbFVnIsWkK_8oCglG28NG!uq)+&L%UK201OACzz8U(kk#{AtR44jmf-)6xB7GH z4{Qp50Q2-*=FK~`6aWAK4rN$LW=%~1DgXcg2mk;800000(o>TF0000Px%fk{L`R9J=0SHEl9Kp1@rE_Bf#Lqn56q=C9aDhkOTV2lGE3K{G{Q#UVx3??+0 zI(8_elnjO}-ZFJ)H+K`obPF_KWDm|@2Mxud>XUJj!`4{QS7U3<{St6HVC;E- zALquN7Z`kCbY)RK@+>^MTMhYnHN3Ye1w`Qtr}&~?!11QRg1SZR0B~Oq1UY8`r?I8v z+FSw7aEg&0?CSVz7uui(>+vgSgBk$f1YH0SauR!tT|6tjq2e?=Nhd%X)PkaV*v6YD z@zIrq6Q>)CA^1OULf}sqM9R}3O$})Wv_TE3+0QIMHT#JhkP1-EKFa=nCJ||Kg#t){ zzeSP=p#b|p1psufUu0gK5KJP6^kl2B` z*}(GBBIVydJPggFoM3rr5p}bXR31ucZSzL8t+ z(LBG>gZ=uN9?cZ?bUfF?Y1EMyegT6IhNq`f3R3_801jnXNoGw=04e|g00;m800000 T0Mb*F00000NkvXXu0mjf*BnTi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/spaf_egg.png b/Resources/Textures/Stories/Actions/spaf.rsi/spaf_egg.png new file mode 100644 index 0000000000000000000000000000000000000000..f098459c36c605a0ba1b128d8e4379af5c2472d9 GIT binary patch literal 872 zcmV-u1DE`XP)Px&2uVaiR9J<@m$6G5VHk&>gorgHkc(Bp;+bGDf)Wj;Hfj~rKnX=1OFMLPu!}>N z4*m(w9V%TqC>_;;i(;vmT5E}l(Hu3zrXV#z6EIC%6zvdlXiR!ZYV=+1?z@lg_uTK^ z_q%&l^^LAGZZI^N1`i{_qKFwQ%*p_Vks!@>S5W}gy>pi!)Yl~r&}?^Ia#sc@wsvD8g2f~p{0{Cw!DOF2F|C3ckn zx9=F)+Lq+&tm2hgnlv>m>ys{=%y(Q3KsLctEPY%}o>YNQsfSP!CKneJbKrjOT}5%T zNyKatsn{4~df^LhhaDiNTqr09(#2C@FbJ?Q$TU-w=+zKbUZbFmD3f@hq3FQM%BpU4B9*5h{AiSPZ9kF%>@0KWQi zdwKv>sx`~!&p6v2pUc+|E;cBt^S$A9{GO+GM;Bg!vBJ!{ckbH6ATF0000Px%Hc3Q5R9J<@mrqLqK^VrLq-E<6C|aUm5*ATjBr*!=5QrZ0(0AzAt-eFIj(rCY zd2|svNE8*(CAuVmhrp7IHd(}|4mQ)eGqXEuZoMG8zW<)z&g|&S$lPM~6aQ$VJZG~} z^F%BZPB;TJ8#OE~=R5(py3`m5-(QGtZuNRDE$5igr2t-wiy(Y|A#VL{hVU^}9*K+m z+*L3PD-|^WKsu8`G&0ra`xSsvsM^N6N9(ToxdKoMRZPZ%wmDCQsw)WTcYug@jd$D6 zWIX6NN&^89aR6AIo@L_1M<8TPY6^N!6r@6dsR^uN7H9Q4p-=gqii?wL+uqV6FgB*j zrn<^?{X1}0zeDR$r%x*Kc?LiPWqd;cPzqJV=A+PCZRw_ZtBu%vRBAQY0t_PV7J|D9 zIx7_{Y|H={Oxy~Ay&7(h@1dS&odG&46@(KZJlAyqfHLvB|0~iboCu+T3Io9(0iy$T zytkCP`UmyP!kBB!J$c3e80938zkxs6?^nlFZex*I1z#R?8093?fCGR(5W!0sK>o%O z(WS+CW|Wig2O^B0I|USCh{h8a0@xJ{+qiGl=2ni`Oq#b+=D0P+tFh)g0s#E&6KPf| zYA6*oVN*B#d_eESa&`HW@cOD_BezEHc~_B7R73g!{Rb2}0%nM}wt-{ql-~2MBA=*+ z^s}ChMy!X^W}}Afom~K+n~8KL)wi)oXHra@7_WxJ4-fX4qZtE0AiOZC!>K6IEBgY! w_ckicLUn%t000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f||%0Z2$lO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/spaf_food.png b/Resources/Textures/Stories/Actions/spaf.rsi/spaf_food.png new file mode 100644 index 0000000000000000000000000000000000000000..35ae10b179c14ad281a9b3ed4c9a5805c55f7b25 GIT binary patch literal 597 zcmV-b0;>IqP)Px$^+`lQR9J<@m%nSmKorNnN{3RgMNw%j)kHy|T7L`I}qJ0RAZe z)@Ol=d&wTyqXnXa=sUpEV~>r~a&qtNT>}8{-0On@P$PsuP9;z*#tBgb_hl0?Zc# z56V58KX-eWFNi6I|F!cQV|D^iQNJw+tZyuXes^m@*L72{(I<-G{royVHhq@U1^)BA zS}WuA<;}EtwN_?heqH1j`HUBnfbnvA)TXxIP%01jnX jNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjf^MwR_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/spaf_glue.png b/Resources/Textures/Stories/Actions/spaf.rsi/spaf_glue.png new file mode 100644 index 0000000000000000000000000000000000000000..357e6964cad851e162d7cd63f76223b8da7436a8 GIT binary patch literal 598 zcmV-c0;&CpP)Px$_DMuRR9J=8m%nSmKorNn33VwIN>L{%1gwjL4Q6oZ5D<$)b#duG;LyEJ9lN>v z2ME%|#dau);NWVp7F_J$(y0~^EL}wHAa|G_mrGKk^b11n?&aPm_uifNglH_a!X9;C z);SrEJaKjsl=uLX@d$A_gGJ)CZScr@%qhj#W8@_Vgfi_PN&UUCj^5eIQA`w80+7^@BZ$540$cwDP8C)HsCL(@a0Kg%&ej3uvn2pP zQbU-}mYBX<+ZzCag*UE~QTr3XI>W!uT9DKb03f3z@YsG~&X-YSR0<2txM*dZQDjY< zh$LFIUxcKF=-6|&2LQ;b32K`>jUag%q2u}w)LcsKe7zosI3<1MQUhTn0H0r^;qduI zjZLMnpqEmClx76t`1;l0>>?JW&z-@L3-{6e!p-d^%B2Q?by5;dAI>!eim+K55{Rq& zA9MyoWL0BKSzs)Px%Pf0{UR9J<@mqAM#K@`XTNdsaUTNFJ++=5UNC4t~U@Dhz7c+iT6=28m%5cwea z5WRSb2eB%YkVd@(6rvDNK@j4if}l;%z*3<-#5YWKXEQUT8~?DEH^cmY^WMv3#utfY z{^AuC5C!k=EPjaIo&e}b z2tf63w)E=B>sRF*zw7dnX=UL3_*Y^h*B#P3I&HT~L7}0000EWmrjOO-%qQ0000800000 V0002eQIqP)Px$^+`lQR9J<@moaO?KorOSQKvv@E2O)Ni%=VCmqLd^NO7<(E?pe`0_~X5vHb#$ zE?rz~2C1}k5K5sbsRb7)2ptu)Ah;DflnXJrOD-|7Z}IN9d;eeFdl&PBY))C?A1y^& zoK8luh^3{BKfrV{LS9y40qC0#E{MdY!~q~LE3W8T0C9`6AcSmAS+c~-71bKITir-O zNIDX%4R&$bJSt-Xgt2l(4Gc=XhCD)188ZUToRhhqc+gt$jDXWw97V}h1GL;ml?Gn` zFQF(P*1iR_$OO3!o;5(rIn6OktXxrjYlSNUb|+E45ksZG3!>fX27(M-12hrZnqNJv zRfIv`6V*l%)kZQnfY%f7q@&&HTEesOoF9NUm-c;Lu(R)*ErD-DWZ?+pn= zslGsOFl0KRfwAE1dvr~7bw`4;Io)(?<^muPaTr%~%Gwy0{Q_K+=RG0nuNMFS01jnX jNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjfe8u)E literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Actions/spaf.rsi/spaf_mine.png b/Resources/Textures/Stories/Actions/spaf.rsi/spaf_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..4f19f450b9781ed1ed6c639a061a7dc3cad759da GIT binary patch literal 638 zcmV-^0)hRBP)Px%9!W$&R9J<@moaO?KorOShEAn}6fD}Ui;K|e;9@B*LFiEI;NlnPClEh@pQ4+S zi;HVB+m7OLC{g{ugt}-M!zvzj>F-6ifC7|EMF?&84?U zCD>{1A{k)mEpSz_QvsMw#~}#oP{9GLPx$xJg7oR9J=8mrrZLFc`)kJDEeIhk>wxD63Lr9{lqeO0Qo0m|nb!pFu6CC#fjH z27(9K!9N9ekYt%jZTq^;?YX3HNb~-ZJV~2`S+S0|p^~b~^=cMNvd8R8Fu-~>L$z+j z0^kgK5`^|!$pN5Rx1`zS08x_{j2xORo0n7wjgq|CvZ3o4xYGqM3r3Cvp#`*6YS^Dh zb+yJTr7IeMDwzr@Hh`PYz}#KJDCM!)eDJcTYgmZUE?ZO{`Z7Vj_YdFXtaWngRWTF0000{#6Cvzr|WDc?!Ovs#pVB>W;x{r;u4q2F`YgT>(? z2+cj%LSn!}03{dTihDvn#u^MjL0Cw@GOv9oA-F%Sb;0l2+uit}R3?tAB99Uw6`Q-bTpD?8; zG)x{v5C><#LjWZk%C$s+t6TJti12@o!~Mhwuh=LFR;a3~3Z{_@q`?&eF#o^`Bv@R+ zLWD=k<|})2p~IVlsy^(BQpd544Gi;J8e@600000NkvXX Hu0mjfC?S#i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health1.png b/Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health1.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc92e0aaff990ff56eb6041ef0f9a8c7e43a060 GIT binary patch literal 377 zcmV-<0fzpGP)3i^ z;0ytn&oO+grU3Ejtp`|rj4lWZ8GIoz;32?*?rN-jn9re-jIvlW16=F>$B?823qe?j zVhf1@4*`^10COqKd6m^ijHG2kIE;0{1Zgq*)Vz(NZ`!xG>3`zYe? zkH~`g9Hyw^FhxI3D}tGVHjlwHEGjU}2g(kv5MX%w2;vDgs4L!8KLqF4A|w7l@GEI5S9Zw?&k?;NI;#+ZUG4qSX?6b$bLbv(dB=hcn6mJ zE{R!b4R{Ek6htsTzzQUIs)eNuXb8d63QPk!ji!#X>mF8nK-va81kl|+${!7Zkrx60 Xrs-EZP@`O}00000NkvXXu0mjf>B5qW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health2.png b/Resources/Textures/Stories/Interface/Alerts/spaf_alive.rsi/health2.png new file mode 100644 index 0000000000000000000000000000000000000000..7291cd7950e90eede61ee066561b4320269438d0 GIT binary patch literal 388 zcmV-~0ek+5P)5=(TJm3 zORSsOIlTVo^Xw|+9!J0tuuS0LmhXH0-d?KjybW&JC%#82?$}tLRn9xEK7WfEm(z+E zzlKaQ37~V{@$RKToutlasbkb}3lfM+Ghv;8bpgf@7WaRkMK&6~|B(^@`e>0~>@18poR#-P%X)W07Qdpr zU7;kh$s*wY&PiFOSs;rGCs6uWVHk5ipOk;h=y=plxbVZg3g6@TxSuQn*;0+fZHAfz zl;+!-2>xZhtve6QGL$Qx-wfB3!~Rj>abcZ+aS=foE+m`^%mzAuk9ux--Rt{O{Lbk; i>jb!X=Q{%TN8kX7WnNzU5GJ$$0000<&X~ zP8)D@$iFi?+01;I-8hcDECEZvFo8~!_dkr!D=Gf&<+IT`>KZ4iVPbqRb6#=io{BkU zEB4M0> zwhNFcGDmsGDn=Yvkbqz63F8EeC!jUqdsTmt@Ru2yFHcsWNE&Aw((7od`C&ZAOBzPu zfE1qs>m%+*+eP4QTTpVBo=?gT95mzltEBlTeI@0${XCx#Y~uv9ZFoQG(eD-{knn9# z6M@}SAM-6eGC6Ze)dQ(r1W*|cBy=r^T=*V^z(zb*9yd=5jkFqXoPe5)9a{qblfXA- WRb4>(uu4<_0000k>>Wsv$^d0yKqys(1f`h(`QTZ$aZ)1{ z1qo;1?w&7q?_Mr}F?TryoB~dPdsiTHi2%L2zc=N-OoEH*$TbpgjB6+tNb+rnWs?f% zXHVXv4pBUhwnp3rG%A3}^@c6qr<%hcu&K>JEJ=w6t4dc)vU&uV96YLpB3z?gZq|fD zK`3fcB6S6n9RO1>$9R8Dj6B^!3E&^mhTQICB>JYVfU*N?wgXwRc=n6WnS#H4Eh&C( zG!z`c`*=)lyIds;CBozr`f7BhFrSZ>!`}`btU^kxd3mz(_dp@QPdSMqI|_rP1fhzTqXLL2F#N>jaRPF4 ue(M zF^h8Hr0H^o!~_Mj`h!zIXB6S6qXuHcT?gW>aP}~@uGVXVNt)~FLU4w#@lpHZ^$_o00000NkvXXu0mjf D%7Bz% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/meta.json b/Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/meta.json new file mode 100644 index 0000000000..46657125b5 --- /dev/null +++ b/Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by Fragoler (Space Stories)", + "states": [ + { + "name": "dead" + }, + { + "name": "spaf", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/spaf.png b/Resources/Textures/Stories/Mobs/Aliens/minispaf.rsi/spaf.png new file mode 100644 index 0000000000000000000000000000000000000000..139b83a19ad93f6ee254929d0d77a5e2f6c81260 GIT binary patch literal 3356 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 L5oR?e=-7V&h@~VL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/dead.png b/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..eca4d510df08b1278b35eb2fa62f11e973db0e00 GIT binary patch literal 357 zcmV-r0h<1aP) zF^h8Hr0H^o!~_Mj`h!zIXB6S6qXuHcT?gW>aP}~@uGVXVNt)~FLU4w#@lpHZ^$_o00000NkvXXu0mjf D%7Bz% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/meta.json b/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/meta.json new file mode 100644 index 0000000000..7605ece951 --- /dev/null +++ b/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by Fragoler (Space Stories)", + "states": [ + { + "name": "dead" + }, + { + "name": "spaf", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/spaf.png b/Resources/Textures/Stories/Mobs/Aliens/spaf.rsi/spaf.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4ee451b49919640ff570e17d5fbd316132348f GIT binary patch literal 2873 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 X000000Mb*F00000NkvXXu0mjf!GwI@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/dead.png b/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..eca4d510df08b1278b35eb2fa62f11e973db0e00 GIT binary patch literal 357 zcmV-r0h<1aP) zF^h8Hr0H^o!~_Mj`h!zIXB6S6qXuHcT?gW>aP}~@uGVXVNt)~FLU4w#@lpHZ^$_o00000NkvXXu0mjf D%7Bz% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/meta.json b/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/meta.json new file mode 100644 index 0000000000..a9f1cac880 --- /dev/null +++ b/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by BeatusCrow", + "states": [ + { + "name": "dead" + }, + { + "name": "spaf_eggs", + "delays": [ + [ + 3.0, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/spaf_eggs.png b/Resources/Textures/Stories/Mobs/Aliens/spafegg.rsi/spaf_eggs.png new file mode 100644 index 0000000000000000000000000000000000000000..66630c75544ae2d1bbcf0922a45c0d09896a7f24 GIT binary patch literal 927 zcmV;Q17Q4#P)nuMg<;*vp7Q2z!8$*haefRlrhyH5QZ+`8-H;3Vj%b98Wbs}6#cRw(^J zLYkVym@nZA_dP;5_q}^#rRPGpzfR8go$ucFLVJ#gHB-P8Fa<8L0)?!xKfd*3=zjOj z_t%+yxqh_cQ20w)K-Ui7*a%{;Dg3B+Gydt1!xUgQ{OIu>0;yo@qxW|cTJbdV(B3!K%SK>~O9 za}sbK4&DN|#7V$iTjZF5=i%WcK>fx2>2Lqj4|O^JawOfi$AU4NYs0nBJ@A0bz`?`i z;De`rXb{-#`l{?VmSpqV#!QT(!(*wv`y=0)J!x)#RQsOkEVT&y%FbE>o9`YscyMSx zJ6Gecq;OQz?nzIIS636ZSX)GMvE9IdorQz90IlJvNPmQOQc1+y>9+-YHJSWMBsK$0 zaJzQ5_N01vManC)@$bB^j&7hHP%Xg0*WY8W0NC9+l~!*gM5;}|dqUgPcCIOXhQ?P5 z(E5R6pR~gBB8Q0{&pwE{wh4nA6W3=*e6JT(?OuIYy)j=i5Z(XW^zy6KB?i7XQIMEN zI9Bk){MY#8VZA9}3YY?>fGJ=Km;$DNDPRhi0;Yf|U<&-d3V8oRgrTO>;jy#A#AP1} z-zzcVf?IvSWvmZi?wz@KWM-J1;TmmtTSE5qO{@_3-j4vY!vGJFpZ66gG`?B@sJ~uW z7v|?t8^9DbixiN$h7C{3H#m(w@gY95!wansc-8ncK6z$lDFR7og2-cYA?gFDJOjZz zy~e$mJu!J0S+LZP0G%^8&pCP!NY@Ft`=Q6=z`*m=2dD+;cL&q-GYGIa0)e{(kfMfd z=!W_L*RRU~V>a0M6lu&)^wI06N6~@oj0U5$IBEl2P?{llq{+v&+guIXhprD$-vESx z{QR%po}dZ?MBES7um_u1Ee5{&2E@wGYsHF%uNELyeqJj;EPSuO24m#swF1B{2ELa7 zBr%V))d$Q|$M#GCQ@|831xx``z!WeAOo0odz+akPJ`9A;Lg)Yh002ovPDHLkV1o6S B!G!<- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/meta.json b/Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/meta.json new file mode 100644 index 0000000000..9d70f327d9 --- /dev/null +++ b/Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by BeatusCrow (Space Stories)", + "states": [ + { + "name": "spaf" + } + ] +} diff --git a/Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/spaf.png b/Resources/Textures/Stories/Mobs/Aliens/spafobserv.rsi/spaf.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1c36e0e83280dbe823164f8ad7dfa20df9e3c4 GIT binary patch literal 458 zcmV;*0X6=KP)-lhY%=zc*d(XAw2M3%fF2N~L);f-L5=f^fnR2 zr8&9@m8cCKk=sXXG|$V1xEPN*p!>O2=zJz_Qtuh-yl3V8AK+Xua82CcjKF)Emv9UQ zS_&;xGqIGTbie{Fb2KqWJn}CxAQGEcBQBoiuR!29WFqF~t`~P;u22pCe+=-VskyyX zo?4?0aN|~Dktb>l27H4F908GF&6?cSEFEy7mx)YVTE&1CQzl3vd^R!+bJS4%$bb?A zu#mBE*9NhS$?f{|A`(zHoIoUSQOg|bGI8--00S-arm1e30000007*qoM6N<$g4GGi Am;e9( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/meta.json b/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/meta.json new file mode 100644 index 0000000000..12247edbf1 --- /dev/null +++ b/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "BeatusSilva", + "states": [ + { + "name": "spafmine", + "delays": [ + [ + 0.4, + 0.15, + 0.1 + ] + ] + }, + { + "name": "spafmine-inactive" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine-inactive.png b/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..17b5ab90e730c558eabbac2948ac96246b88d65a GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=hEVFtU5PIEF-UCMQU+E><*?x>Bl5nwpaP(<>!sjd3J{#TP zaU PWEebM{an^LB{Ts5*W7|) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine.png b/Resources/Textures/Stories/Objects/Misc/spafmine.rsi/spafmine.png new file mode 100644 index 0000000000000000000000000000000000000000..2c75eba9a1acb09fe932cb7ac4cb156c80cf7d2c GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU{dgOaSW+od^^kD`*48B(Ri1@ zBVvLqvMjPCWhE2N?BdwId!uA~7X=eDCtCG%Q|R@e)01FJOC7T7O~7 zo^Q67A8^_f-7f$9&UXJ2-7hxD6%!aZk}ZT59y)usFYil)pl_dE3DPF2>-_Ot22x$~pe&Q=dQ|8vFt<=jt>YS>Bh zEzuOP-(fI~hq2M~iGsOriO7#t@e&SU?C*ZPu2h!%#FA26v#%_4|NU(zpLr|qP5GPf zPd!gH{Y>xdD699%1+n`L8h&?gcR7D2@NCSwe@+*a49i9LN}s%1eD~OUzcy9-rJX(7Dh5R{IIG1v;G^$4yJTg1#P)+7JNI7 zJQ7ImcbKXmvhDcR=la#mO)GCCFtprLUQir+S2O;#2-^Z_fqc7tygY4nOeJxmN!kn_ zo_*|iEWivRFVdQ&MBb@0L8Kh=l}o! literal 0 HcmV?d00001 From 496a86a90c2d4757dca04a8396f1cbea17430eea Mon Sep 17 00:00:00 2001 From: Doublechest Date: Sun, 11 Aug 2024 08:11:03 +0300 Subject: [PATCH 2/2] transfer stories lobbyscreens prototypes --- Resources/Prototypes/Stories/lobbyscreens.yml | 35 ++++++++++++++++++ Resources/Prototypes/lobbyscreens.yml | 36 ------------------- 2 files changed, 35 insertions(+), 36 deletions(-) create mode 100644 Resources/Prototypes/Stories/lobbyscreens.yml diff --git a/Resources/Prototypes/Stories/lobbyscreens.yml b/Resources/Prototypes/Stories/lobbyscreens.yml new file mode 100644 index 0000000000..bd25ba685d --- /dev/null +++ b/Resources/Prototypes/Stories/lobbyscreens.yml @@ -0,0 +1,35 @@ +- type: lobbyBackground + id: Atmos + background: /Textures/Stories/LobbyScreens/atmos.jpg + +- type: lobbyBackground + id: Boom + background: /Textures/Stories/LobbyScreens/boom.jpg + +- type: lobbyBackground + id: Botanic + background: /Textures/Stories/LobbyScreens/botanic.jpg + +- type: lobbyBackground + id: Engineer + background: /Textures/Stories/LobbyScreens/engineer.jpg + +- type: lobbyBackground + id: Fire + background: /Textures/Stories/LobbyScreens/fire.jpg + +- type: lobbyBackground + id: GuitarHunter + background: /Textures/Stories/LobbyScreens/guiterhunter.jpg + +- type: lobbyBackground + id: NewYear + background: /Textures/Stories/LobbyScreens/newyear.jpg + +- type: lobbyBackground + id: Plazma + background: /Textures/Stories/LobbyScreens/plazma.jpg + +- type: lobbyBackground + id: Spaf + background: /Textures/Stories/LobbyScreens/spaf.jpg diff --git a/Resources/Prototypes/lobbyscreens.yml b/Resources/Prototypes/lobbyscreens.yml index 38b360e369..8ffa580bc7 100644 --- a/Resources/Prototypes/lobbyscreens.yml +++ b/Resources/Prototypes/lobbyscreens.yml @@ -30,42 +30,6 @@ id: Behonker background: /Textures/LobbyScreens/behonker.webp -- type: lobbyBackground - id: Atmos - background: /Textures/Stories/LobbyScreens/atmos.jpg - -- type: lobbyBackground - id: Boom - background: /Textures/Stories/LobbyScreens/boom.jpg - -- type: lobbyBackground - id: Botanic - background: /Textures/Stories/LobbyScreens/botanic.jpg - -- type: lobbyBackground - id: Engineer - background: /Textures/Stories/LobbyScreens/engineer.jpg - -- type: lobbyBackground - id: Fire - background: /Textures/Stories/LobbyScreens/fire.jpg - -- type: lobbyBackground - id: GuitarHunter - background: /Textures/Stories/LobbyScreens/guiterhunter.jpg - -- type: lobbyBackground - id: NewYear - background: /Textures/Stories/LobbyScreens/newyear.jpg - -- type: lobbyBackground - id: Plazma - background: /Textures/Stories/LobbyScreens/plazma.jpg - -- type: lobbyBackground - id: Spaf - background: /Textures/Stories/LobbyScreens/spaf.jpg - - type: lobbyBackground id: TerminalStation background: /Textures/LobbyScreens/terminalstation.webp