New event: Approaching unknown shuttle (#24490)
* setup codebase * Add first shuttle * tak * sync striker * sync 2 * pipipi * Preloaded roundstart shuttles! * Make it abstract "PreloaderGrid" not "PreloaderShuttle" * to do * added china cuisin shuttle * fixes * add disaster evacpod * remove enemy * final shuttles * weight 5 -> 10 * move data to component * remove autotrailer touching * doc, respath * fix frozen positioning * fixes + cvar * finally * fix evacpod * remove blacklistrules * remove `UnknownShuttleSpawnRule`, refactor `LoadMapRule` to support preloaded grids * use tryload * cleanup * fixes * use preloadedgrid for loneops * weight unknown shuttles differently (preliminal) * leftover * cleanup and raffling * partial review * singleton gridpreloader no station coupling * fix grid atmoses * `roleLoadout` support for `LoadoutComponent`, fix missing gear * weighting changes * init logic fix --------- Co-authored-by: Kara <lunarautomaton6@gmail.com>
This commit is contained in:
@@ -22,6 +22,7 @@ public static partial class PoolManager
|
||||
(CVars.ThreadParallelCount.Name, "1"),
|
||||
(CCVars.GameRoleTimers.Name, "false"),
|
||||
(CCVars.GridFill.Name, "false"),
|
||||
(CCVars.PreloadGrids.Name, "false"),
|
||||
(CCVars.ArrivalsShuttles.Name, "false"),
|
||||
(CCVars.EmergencyShuttleEnabled.Name, "false"),
|
||||
(CCVars.ProcgenPreload.Name, "false"),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using Content.Server.Maps;
|
||||
using Content.Shared.GridPreloader.Prototypes;
|
||||
using Content.Shared.Storage;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
@@ -16,11 +18,14 @@ public sealed partial class LoadMapRuleComponent : Component
|
||||
public MapId? Map;
|
||||
|
||||
[DataField]
|
||||
public ProtoId<GameMapPrototype>? GameMap ;
|
||||
public ProtoId<GameMapPrototype>? GameMap;
|
||||
|
||||
[DataField]
|
||||
public ResPath? MapPath;
|
||||
|
||||
[DataField]
|
||||
public ProtoId<PreloadedGridPrototype>? PreloadedGrid;
|
||||
|
||||
[DataField]
|
||||
public List<EntityUid> MapGrids = new();
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using Content.Server.Antag;
|
||||
using Content.Server.GameTicking.Components;
|
||||
using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.GridPreloader;
|
||||
using Content.Server.Spawners.Components;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Server.Maps;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.GameTicking.Rules;
|
||||
@@ -11,9 +13,12 @@ namespace Content.Server.GameTicking.Rules;
|
||||
public sealed class LoadMapRuleSystem : GameRuleSystem<LoadMapRuleComponent>
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly IMapManager _mapManager = default!;
|
||||
[Dependency] private readonly MapSystem _map = default!;
|
||||
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
[Dependency] private readonly GridPreloaderSystem _gridPreloader = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -41,7 +46,9 @@ public sealed class LoadMapRuleSystem : GameRuleSystem<LoadMapRuleComponent>
|
||||
if (comp.Map != null)
|
||||
return;
|
||||
|
||||
_map.CreateMap(out var mapId);
|
||||
// grid preloading needs map to init after moving it
|
||||
var mapUid = comp.PreloadedGrid != null ? _map.CreateMap(out var mapId, false) : _map.CreateMap(out mapId);
|
||||
_metaData.SetEntityName(mapUid, $"LoadMapRule destination for rule {ToPrettyString(uid)}");
|
||||
comp.Map = mapId;
|
||||
|
||||
if (comp.GameMap != null)
|
||||
@@ -51,8 +58,29 @@ public sealed class LoadMapRuleSystem : GameRuleSystem<LoadMapRuleComponent>
|
||||
}
|
||||
else if (comp.MapPath != null)
|
||||
{
|
||||
if (_mapLoader.TryLoad(comp.Map.Value, comp.MapPath.Value.ToString(), out var roots, new MapLoadOptions { LoadMap = true }))
|
||||
comp.MapGrids.AddRange(roots);
|
||||
if (!_mapLoader.TryLoad(comp.Map.Value,
|
||||
comp.MapPath.Value.ToString(),
|
||||
out var roots,
|
||||
new MapLoadOptions { LoadMap = true }))
|
||||
{
|
||||
_mapManager.DeleteMap(mapId);
|
||||
return;
|
||||
}
|
||||
|
||||
comp.MapGrids.AddRange(roots);
|
||||
}
|
||||
else if (comp.PreloadedGrid != null)
|
||||
{
|
||||
// TODO: If there are no preloaded grids left, any rule announcements will still go off!
|
||||
if (!_gridPreloader.TryGetPreloadedGrid(comp.PreloadedGrid.Value, out var loadedShuttle))
|
||||
{
|
||||
_mapManager.DeleteMap(mapId);
|
||||
return;
|
||||
}
|
||||
|
||||
_transform.SetParent(loadedShuttle.Value, mapUid);
|
||||
comp.MapGrids.Add(loadedShuttle.Value);
|
||||
_map.InitializeMap(mapId);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
16
Content.Server/GridPreloader/GridPreloaderComponent.cs
Normal file
16
Content.Server/GridPreloader/GridPreloaderComponent.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Content.Shared.GridPreloader.Prototypes;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.GridPreloader;
|
||||
|
||||
/// <summary>
|
||||
/// Component storing data about preloaded grids and their location
|
||||
/// Goes on the map entity
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(GridPreloaderSystem))]
|
||||
public sealed partial class GridPreloaderComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public Dictionary<ProtoId<PreloadedGridPrototype>, List<EntityUid>> PreloadedGrids = new();
|
||||
}
|
||||
147
Content.Server/GridPreloader/GridPreloaderSystem.cs
Normal file
147
Content.Server/GridPreloader/GridPreloaderSystem.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.GridPreloader.Prototypes;
|
||||
using Content.Shared.GridPreloader.Systems;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Server.Maps;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Physics.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
using System.Numerics;
|
||||
using Content.Server.GameTicking;
|
||||
using Content.Shared.GameTicking;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Content.Server.GridPreloader;
|
||||
public sealed class GridPreloaderSystem : SharedGridPreloaderSystem
|
||||
{
|
||||
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||
[Dependency] private readonly MapSystem _map = default!;
|
||||
[Dependency] private readonly MapLoaderSystem _mapLoader = default!;
|
||||
[Dependency] private readonly MetaDataSystem _meta = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnRoundRestart);
|
||||
SubscribeLocalEvent<PostGameMapLoad>(OnPostGameMapLoad);
|
||||
}
|
||||
|
||||
private void OnRoundRestart(RoundRestartCleanupEvent ev)
|
||||
{
|
||||
var ent = GetPreloaderEntity();
|
||||
if (ent == null)
|
||||
return;
|
||||
|
||||
Del(ent.Value.Owner);
|
||||
}
|
||||
|
||||
private void OnPostGameMapLoad(PostGameMapLoad ev)
|
||||
{
|
||||
EnsurePreloadedGridMap();
|
||||
}
|
||||
|
||||
private void EnsurePreloadedGridMap()
|
||||
{
|
||||
// Already have a preloader?
|
||||
if (GetPreloaderEntity() != null)
|
||||
return;
|
||||
|
||||
if (!_cfg.GetCVar(CCVars.PreloadGrids))
|
||||
return;
|
||||
|
||||
var mapUid = _map.CreateMap(out var mapId, false);
|
||||
var preloader = EnsureComp<GridPreloaderComponent>(mapUid);
|
||||
_meta.SetEntityName(mapUid, "GridPreloader Map");
|
||||
_map.SetPaused(mapId, true);
|
||||
|
||||
var globalXOffset = 0f;
|
||||
foreach (var proto in _prototype.EnumeratePrototypes<PreloadedGridPrototype>())
|
||||
{
|
||||
for (var i = 0; i < proto.Copies; i++)
|
||||
{
|
||||
var options = new MapLoadOptions
|
||||
{
|
||||
LoadMap = false,
|
||||
};
|
||||
|
||||
if (!_mapLoader.TryLoad(mapId, proto.Path.ToString(), out var roots, options))
|
||||
continue;
|
||||
|
||||
// only supports loading maps with one grid.
|
||||
if (roots.Count != 1)
|
||||
continue;
|
||||
|
||||
var gridUid = roots[0];
|
||||
|
||||
// gets grid + also confirms that the root we loaded is actually a grid
|
||||
if (!TryComp<MapGridComponent>(gridUid, out var mapGrid))
|
||||
continue;
|
||||
|
||||
if (!TryComp<PhysicsComponent>(gridUid, out var physics))
|
||||
continue;
|
||||
|
||||
// Position Calculating
|
||||
globalXOffset += mapGrid.LocalAABB.Width / 2;
|
||||
|
||||
var coords = new Vector2(-physics.LocalCenter.X + globalXOffset, -physics.LocalCenter.Y);
|
||||
_transform.SetCoordinates(gridUid, new EntityCoordinates(mapUid, coords));
|
||||
|
||||
globalXOffset += (mapGrid.LocalAABB.Width / 2) + 1;
|
||||
|
||||
// Add to list
|
||||
if (!preloader.PreloadedGrids.ContainsKey(proto.ID))
|
||||
preloader.PreloadedGrids[proto.ID] = new();
|
||||
preloader.PreloadedGrids[proto.ID].Add(gridUid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Should be a singleton no matter station count, so we can assume 1
|
||||
/// (better support for singleton component in engine at some point i guess)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Entity<GridPreloaderComponent>? GetPreloaderEntity()
|
||||
{
|
||||
var query = AllEntityQuery<GridPreloaderComponent>();
|
||||
while (query.MoveNext(out var uid, out var comp))
|
||||
{
|
||||
return (uid, comp);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An attempt to get a certain preloaded shuttle. If there are no more such shuttles left, returns null
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
public bool TryGetPreloadedGrid(ProtoId<PreloadedGridPrototype> proto, [NotNullWhen(true)] out EntityUid? preloadedGrid, GridPreloaderComponent? preloader = null)
|
||||
{
|
||||
preloadedGrid = null;
|
||||
|
||||
if (preloader == null)
|
||||
{
|
||||
preloader = GetPreloaderEntity();
|
||||
if (preloader == null)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!preloader.PreloadedGrids.TryGetValue(proto, out var list) || list.Count <= 0)
|
||||
return false;
|
||||
|
||||
preloadedGrid = list[0];
|
||||
|
||||
list.RemoveAt(0);
|
||||
if (list.Count == 0)
|
||||
preloader.PreloadedGrids.Remove(proto);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -200,27 +200,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
||||
loadout.SetDefault(_prototypeManager);
|
||||
}
|
||||
|
||||
// Order loadout selections by the order they appear on the prototype.
|
||||
foreach (var group in loadout.SelectedLoadouts.OrderBy(x => roleProto.Groups.FindIndex(e => e == x.Key)))
|
||||
{
|
||||
foreach (var items in group.Value)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex(items.Prototype, out var loadoutProto))
|
||||
{
|
||||
Log.Error($"Unable to find loadout prototype for {items.Prototype}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!_prototypeManager.TryIndex(loadoutProto.Equipment, out var startingGear))
|
||||
{
|
||||
Log.Error($"Unable to find starting gear {loadoutProto.Equipment} for loadout {loadoutProto}");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Handle any extra data here.
|
||||
EquipStartingGear(entity.Value, startingGear, raiseEvent: false);
|
||||
}
|
||||
}
|
||||
EquipRoleLoadout(entity.Value, loadout, roleProto);
|
||||
}
|
||||
|
||||
var gearEquippedEv = new StartingGearEquippedEvent(entity.Value);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
||||
|
||||
namespace Content.Server.StationEvents.Components;
|
||||
@@ -15,49 +15,49 @@ public sealed partial class StationEventComponent : Component
|
||||
public const float WeightHigh = 15.0f;
|
||||
public const float WeightVeryHigh = 20.0f;
|
||||
|
||||
[DataField("weight")]
|
||||
[DataField]
|
||||
public float Weight = WeightNormal;
|
||||
|
||||
[DataField("startAnnouncement")]
|
||||
[DataField]
|
||||
public string? StartAnnouncement;
|
||||
|
||||
[DataField("endAnnouncement")]
|
||||
[DataField]
|
||||
public string? EndAnnouncement;
|
||||
|
||||
[DataField("startAudio")]
|
||||
[DataField]
|
||||
public SoundSpecifier? StartAudio;
|
||||
|
||||
[DataField("endAudio")]
|
||||
[DataField]
|
||||
public SoundSpecifier? EndAudio;
|
||||
|
||||
/// <summary>
|
||||
/// In minutes, when is the first round time this event can start
|
||||
/// </summary>
|
||||
[DataField("earliestStart")]
|
||||
[DataField]
|
||||
public int EarliestStart = 5;
|
||||
|
||||
/// <summary>
|
||||
/// In minutes, the amount of time before the same event can occur again
|
||||
/// </summary>
|
||||
[DataField("reoccurrenceDelay")]
|
||||
[DataField]
|
||||
public int ReoccurrenceDelay = 30;
|
||||
|
||||
/// <summary>
|
||||
/// How long after being added does the event start
|
||||
/// </summary>
|
||||
[DataField("startDelay")]
|
||||
[DataField]
|
||||
public TimeSpan StartDelay = TimeSpan.Zero;
|
||||
|
||||
/// <summary>
|
||||
/// How long the event lasts.
|
||||
/// </summary>
|
||||
[DataField("duration")]
|
||||
[DataField]
|
||||
public TimeSpan? Duration = TimeSpan.FromSeconds(1);
|
||||
|
||||
/// <summary>
|
||||
/// The max amount of time the event lasts.
|
||||
/// </summary>
|
||||
[DataField("maxDuration")]
|
||||
[DataField]
|
||||
public TimeSpan? MaxDuration;
|
||||
|
||||
/// <summary>
|
||||
@@ -66,13 +66,13 @@ public sealed partial class StationEventComponent : Component
|
||||
/// <remarks>
|
||||
/// To avoid running deadly events with low-pop
|
||||
/// </remarks>
|
||||
[DataField("minimumPlayers")]
|
||||
[DataField]
|
||||
public int MinimumPlayers;
|
||||
|
||||
/// <summary>
|
||||
/// How many times this even can occur in a single round
|
||||
/// </summary>
|
||||
[DataField("maxOccurrences")]
|
||||
[DataField]
|
||||
public int? MaxOccurrences;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Linq;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Chat.Systems;
|
||||
using Content.Server.GameTicking.Components;
|
||||
@@ -42,6 +43,7 @@ public abstract class StationEventSystem<T> : GameRuleSystem<T> where T : ICompo
|
||||
if (!TryComp<StationEventComponent>(uid, out var stationEvent))
|
||||
return;
|
||||
|
||||
|
||||
AdminLogManager.Add(LogType.EventAnnounced, $"Event added / announced: {ToPrettyString(uid)}");
|
||||
|
||||
if (stationEvent.StartAnnouncement != null)
|
||||
|
||||
@@ -1375,6 +1375,12 @@ namespace Content.Shared.CCVar
|
||||
public static readonly CVarDef<bool> GridFill =
|
||||
CVarDef.Create("shuttle.grid_fill", true, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Whether to automatically preloading grids by GridPreloaderSystem
|
||||
/// </summary>
|
||||
public static readonly CVarDef<bool> PreloadGrids =
|
||||
CVarDef.Create("shuttle.preload_grids", true, CVar.SERVERONLY);
|
||||
|
||||
/*
|
||||
* Emergency
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Shared.Preferences.Loadouts;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Clothing.Components;
|
||||
|
||||
@@ -10,7 +11,20 @@ public sealed partial class LoadoutComponent : Component
|
||||
/// <summary>
|
||||
/// A list of starting gears, of which one will be given.
|
||||
/// All elements are weighted the same in the list.
|
||||
///
|
||||
/// If not specified, <see cref="RoleLoadout"/> will be used instead.
|
||||
/// </summary>
|
||||
[DataField("prototypes", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer<StartingGearPrototype>)), AutoNetworkedField]
|
||||
public List<string>? Prototypes;
|
||||
[DataField("prototypes")]
|
||||
[AutoNetworkedField]
|
||||
public List<ProtoId<StartingGearPrototype>>? StartingGear;
|
||||
|
||||
/// <summary>
|
||||
/// A list of role loadouts, of which one will be given.
|
||||
/// All elements are weighted the same in the list.
|
||||
///
|
||||
/// If not specified, <see cref="StartingGear"/> will be used instead.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
[AutoNetworkedField]
|
||||
public List<ProtoId<RoleLoadoutPrototype>>? RoleLoadout;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ using Robust.Shared.Random;
|
||||
namespace Content.Shared.Clothing;
|
||||
|
||||
/// <summary>
|
||||
/// Assigns a loadout to an entity based on the startingGear prototype
|
||||
/// Assigns a loadout to an entity based on the RoleLoadout prototype
|
||||
/// </summary>
|
||||
public sealed class LoadoutSystem : EntitySystem
|
||||
{
|
||||
@@ -110,10 +110,22 @@ public sealed class LoadoutSystem : EntitySystem
|
||||
|
||||
private void OnMapInit(EntityUid uid, LoadoutComponent component, MapInitEvent args)
|
||||
{
|
||||
if (component.Prototypes == null)
|
||||
// Use starting gear if specified
|
||||
if (component.StartingGear != null)
|
||||
{
|
||||
var gear = _protoMan.Index(_random.Pick(component.StartingGear));
|
||||
_station.EquipStartingGear(uid, gear);
|
||||
return;
|
||||
}
|
||||
|
||||
if (component.RoleLoadout == null)
|
||||
return;
|
||||
|
||||
var proto = _protoMan.Index<StartingGearPrototype>(_random.Pick(component.Prototypes));
|
||||
_station.EquipStartingGear(uid, proto);
|
||||
// ...otherwise equip from role loadout
|
||||
var id = _random.Pick(component.RoleLoadout);
|
||||
var proto = _protoMan.Index(id);
|
||||
var loadout = new RoleLoadout(id);
|
||||
loadout.SetDefault(_protoMan, true);
|
||||
_station.EquipRoleLoadout(uid, loadout, proto);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.GridPreloader.Prototypes;
|
||||
|
||||
/// <summary>
|
||||
/// Creating this prototype will automatically load the grid at the specified path at the beginning of the round,
|
||||
/// and allow the GridPreloader system to load them in the middle of the round. This is needed for optimization,
|
||||
/// because loading grids in the middle of a round causes the server to lag.
|
||||
/// </summary>
|
||||
[Prototype("preloadedGrid")]
|
||||
public sealed partial class PreloadedGridPrototype : IPrototype
|
||||
{
|
||||
[IdDataField] public string ID { get; } = string.Empty;
|
||||
|
||||
[DataField(required: true)]
|
||||
public ResPath Path;
|
||||
|
||||
[DataField]
|
||||
public int Copies = 1;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
namespace Content.Shared.GridPreloader.Systems;
|
||||
public abstract class SharedGridPreloaderSystem : EntitySystem
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Linq;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Preferences.Loadouts;
|
||||
using Content.Shared.Roles;
|
||||
using Content.Shared.Storage;
|
||||
using Content.Shared.Storage.EntitySystems;
|
||||
@@ -31,6 +33,34 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
_xformQuery = GetEntityQuery<TransformComponent>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Equips the given starting gears from a `RoleLoadout` onto an entity.
|
||||
/// </summary>
|
||||
public void EquipRoleLoadout(EntityUid entity, RoleLoadout loadout, RoleLoadoutPrototype roleProto)
|
||||
{
|
||||
// Order loadout selections by the order they appear on the prototype.
|
||||
foreach (var group in loadout.SelectedLoadouts.OrderBy(x => roleProto.Groups.FindIndex(e => e == x.Key)))
|
||||
{
|
||||
foreach (var items in group.Value)
|
||||
{
|
||||
if (!PrototypeManager.TryIndex(items.Prototype, out var loadoutProto))
|
||||
{
|
||||
Log.Error($"Unable to find loadout prototype for {items.Prototype}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!PrototypeManager.TryIndex(loadoutProto.Equipment, out var startingGear))
|
||||
{
|
||||
Log.Error($"Unable to find starting gear {loadoutProto.Equipment} for loadout {loadoutProto}");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Handle any extra data here.
|
||||
EquipStartingGear(entity, startingGear, raiseEvent: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="EquipStartingGear(Robust.Shared.GameObjects.EntityUid,System.Nullable{Robust.Shared.Prototypes.ProtoId{Content.Shared.Roles.StartingGearPrototype}},bool)"/>
|
||||
/// </summary>
|
||||
|
||||
@@ -23,6 +23,7 @@ grid_fill = false
|
||||
auto_call_time = 0
|
||||
emergency = false
|
||||
arrivals = false
|
||||
preload_grids = false
|
||||
|
||||
[admin]
|
||||
see_own_notes = true
|
||||
|
||||
@@ -224,6 +224,26 @@ ghost-role-information-syndicate-monkey-reinforcement-name = Syndicate Monkey Ag
|
||||
ghost-role-information-syndicate-monkey-reinforcement-description = Someone needs reinforcements. You, a trained monkey, will help them.
|
||||
ghost-role-information-syndicate-monkey-reinforcement-rules = Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them.
|
||||
|
||||
ghost-role-information-lost-cargo-technical-name = Lost Cargo Technician
|
||||
ghost-role-information-lost-cargo-technical-description = Something went wrong and your cargo shuttle with the goods was beamed into the sector to another station.
|
||||
ghost-role-information-lost-cargo-technical-rules = You're a regular cargo technician from another station. Do what regular cargo do.
|
||||
|
||||
ghost-role-information-clown-troupe-name = Space Clown
|
||||
ghost-role-information-clown-troupe-description = You and your troupe have come to cheer up this station with your best jokes. Honk!
|
||||
ghost-role-information-clown-troupe-rules = Normal station crew rules apply.
|
||||
|
||||
ghost-role-information-traveling-chef-name = Traveling Chef
|
||||
ghost-role-information-traveling-chef-description = You are a chef on a traveling shuttle of exotic cuisine. Delight the station with delicious food!
|
||||
ghost-role-information-traveling-chef-rules = Normal station crew rules apply.
|
||||
|
||||
ghost-role-information-disaster-victim-name = Disaster Victim
|
||||
ghost-role-information-disaster-victim-description = You were rescued in an escape pod from another station that suffered a terrible fate. Perhaps you will be found and rescued.
|
||||
ghost-role-information-disaster-victim-rules = Normal station crew rules apply.
|
||||
|
||||
ghost-role-information-syndie-disaster-victim-name = Syndie Disaster Victim
|
||||
ghost-role-information-syndie-disaster-victim-description = You're a regular passenger from a syndicate station. Unfortunately, an evacuation pod has thrown you into an enemy sector.....
|
||||
ghost-role-information-syndie-disaster-victim-rules = Normal station crew rules apply. You are NOT an antagonist!
|
||||
|
||||
ghost-role-information-syndicate-kobold-reinforcement-name = Syndicate Kobold Agent
|
||||
ghost-role-information-syndicate-kobold-reinforcement-description = Someone needs reinforcements. You, a trained kobold, will help them.
|
||||
ghost-role-information-syndicate-kobold-reinforcement-rules = Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
station-event-unknown-shuttle-incoming = Attention! An unidentified space shuttle has been spotted approaching your sector.
|
||||
350
Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml
Normal file
350
Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml
Normal file
@@ -0,0 +1,350 @@
|
||||
meta:
|
||||
format: 6
|
||||
postmapinit: false
|
||||
tilemap:
|
||||
0: Space
|
||||
82: FloorShuttleOrange
|
||||
85: FloorShuttleWhite
|
||||
120: Lattice
|
||||
121: Plating
|
||||
entities:
|
||||
- proto: ""
|
||||
entities:
|
||||
- uid: 1
|
||||
components:
|
||||
- type: MetaData
|
||||
name: Evacuation pod
|
||||
- type: Transform
|
||||
parent: invalid
|
||||
- type: MapGrid
|
||||
chunks:
|
||||
0,0:
|
||||
ind: 0,0
|
||||
tiles: eQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
-1,0:
|
||||
ind: -1,0
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
0,-1:
|
||||
ind: 0,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
-1,-1:
|
||||
ind: -1,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAA
|
||||
version: 6
|
||||
- type: Broadphase
|
||||
- type: Physics
|
||||
bodyStatus: InAir
|
||||
angularDamping: 0.05
|
||||
linearDamping: 0.05
|
||||
fixedRotation: False
|
||||
bodyType: Dynamic
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- type: OccluderTree
|
||||
- type: SpreaderGrid
|
||||
- type: Shuttle
|
||||
- type: GridPathfinding
|
||||
- type: Gravity
|
||||
gravityShakeSound: !type:SoundPathSpecifier
|
||||
path: /Audio/Effects/alert.ogg
|
||||
- type: DecalGrid
|
||||
chunkCollection:
|
||||
version: 2
|
||||
nodes: []
|
||||
- type: GridAtmosphere
|
||||
version: 2
|
||||
data:
|
||||
tiles:
|
||||
0,-1:
|
||||
0: 4368
|
||||
1: 32
|
||||
0,0:
|
||||
1: 2
|
||||
-1,0:
|
||||
1: 8
|
||||
-1,-1:
|
||||
1: 128
|
||||
uniqueMixes:
|
||||
- volume: 2500
|
||||
temperature: 293.15
|
||||
moles:
|
||||
- 21.824879
|
||||
- 82.10312
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- volume: 2500
|
||||
immutable: True
|
||||
moles:
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
chunkSize: 4
|
||||
- type: GasTileOverlay
|
||||
- type: RadiationGridResistance
|
||||
- type: NavMap
|
||||
- proto: AirlockShuttle
|
||||
entities:
|
||||
- uid: 2
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-2.5
|
||||
parent: 1
|
||||
- proto: APCBasic
|
||||
entities:
|
||||
- uid: 3
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 1.5,-0.5
|
||||
parent: 1
|
||||
- proto: AtmosDeviceFanTiny
|
||||
entities:
|
||||
- uid: 4
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-2.5
|
||||
parent: 1
|
||||
- proto: BoxMRE
|
||||
entities:
|
||||
- uid: 6
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 5
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: InsideEntityStorage
|
||||
- proto: CableApcExtension
|
||||
entities:
|
||||
- uid: 10
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,-0.5
|
||||
parent: 1
|
||||
- uid: 11
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-0.5
|
||||
parent: 1
|
||||
- uid: 12
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-1.5
|
||||
parent: 1
|
||||
- proto: CableHV
|
||||
entities:
|
||||
- uid: 13
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-1.5
|
||||
parent: 1
|
||||
- uid: 14
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-0.5
|
||||
parent: 1
|
||||
- proto: CableMV
|
||||
entities:
|
||||
- uid: 15
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-0.5
|
||||
parent: 1
|
||||
- uid: 16
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-0.5
|
||||
parent: 1
|
||||
- uid: 17
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,-0.5
|
||||
parent: 1
|
||||
- proto: ChairPilotSeat
|
||||
entities:
|
||||
- uid: 18
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 0.5,-1.5
|
||||
parent: 1
|
||||
- proto: ClosetWallMaintenanceFilledRandom
|
||||
entities:
|
||||
- uid: 5
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 1.5,-1.5
|
||||
parent: 1
|
||||
- type: EntityStorage
|
||||
air:
|
||||
volume: 200
|
||||
immutable: False
|
||||
temperature: 293.14673
|
||||
moles:
|
||||
- 1.7459903
|
||||
- 6.568249
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
entity_storage: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 8
|
||||
- 9
|
||||
- 6
|
||||
- 7
|
||||
- proto: ClothingOuterSuitEmergency
|
||||
entities:
|
||||
- uid: 7
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 5
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: InsideEntityStorage
|
||||
- proto: ComputerShuttle
|
||||
entities:
|
||||
- uid: 19
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-0.5
|
||||
parent: 1
|
||||
- proto: DisasterVictimSpawner
|
||||
entities:
|
||||
- uid: 20
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-1.5
|
||||
parent: 1
|
||||
- proto: GeneratorWallmountAPU
|
||||
entities:
|
||||
- uid: 21
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-1.5
|
||||
parent: 1
|
||||
- proto: Gyroscope
|
||||
entities:
|
||||
- uid: 32
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-2.5
|
||||
parent: 1
|
||||
- proto: HandheldGPSBasic
|
||||
entities:
|
||||
- uid: 8
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 5
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: InsideEntityStorage
|
||||
- proto: Poweredlight
|
||||
entities:
|
||||
- uid: 22
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 0.5,-1.5
|
||||
parent: 1
|
||||
- proto: ShuttleWindow
|
||||
entities:
|
||||
- uid: 23
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,0.5
|
||||
parent: 1
|
||||
- proto: SubstationWallBasic
|
||||
entities:
|
||||
- uid: 24
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: -0.5,-0.5
|
||||
parent: 1
|
||||
- proto: Thruster
|
||||
entities:
|
||||
- uid: 25
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 1.5,-2.5
|
||||
parent: 1
|
||||
- proto: WallShuttle
|
||||
entities:
|
||||
- uid: 26
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,-0.5
|
||||
parent: 1
|
||||
- uid: 27
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: -0.5,-1.5
|
||||
parent: 1
|
||||
- uid: 28
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 1.5,-0.5
|
||||
parent: 1
|
||||
- uid: 29
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 1.5,-1.5
|
||||
parent: 1
|
||||
- proto: WallShuttleDiagonal
|
||||
entities:
|
||||
- uid: 30
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -0.5,0.5
|
||||
parent: 1
|
||||
- uid: 31
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 1.5,0.5
|
||||
parent: 1
|
||||
- proto: WeaponLaserSvalinn
|
||||
entities:
|
||||
- uid: 9
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 5
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: InsideEntityStorage
|
||||
...
|
||||
2666
Resources/Maps/Shuttles/ShuttleEvent/honki.yml
Normal file
2666
Resources/Maps/Shuttles/ShuttleEvent/honki.yml
Normal file
File diff suppressed because it is too large
Load Diff
1411
Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml
Normal file
1411
Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml
Normal file
File diff suppressed because it is too large
Load Diff
1188
Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml
Normal file
1188
Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml
Normal file
File diff suppressed because it is too large
Load Diff
1872
Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml
Normal file
1872
Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -838,3 +838,17 @@
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobLuminousEntity
|
||||
|
||||
- type: entity
|
||||
name: clown spider spawner
|
||||
id: SpawnClownSpider
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: clown
|
||||
sprite: Mobs/Animals/clownspider.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobClownSpider
|
||||
@@ -589,3 +589,307 @@
|
||||
settings: default
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Cluwne
|
||||
|
||||
## Lost Cargo technician
|
||||
|
||||
- type: entity
|
||||
name: lost cargo technician spawner
|
||||
id: LostCargoTechnicianSpawner
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: red
|
||||
- sprite: Objects/Tools/appraisal-tool.rsi
|
||||
state: icon
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- RandomHumanoidLostCargoTechnician
|
||||
chance: 1
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidLostCargoTechnician
|
||||
name: lost cargo technician ghost role
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/appraisal-tool.rsi
|
||||
state: icon
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: LostCargoTechnician
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: LostCargoTechnician
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-lost-cargo-technical-name
|
||||
description: ghost-role-information-lost-cargo-technical-description
|
||||
rules: ghost-role-information-lost-cargo-technical-rules
|
||||
raffle:
|
||||
settings: short
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobCargoTechnician ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
# Clown troupe
|
||||
|
||||
- type: entity
|
||||
name: clown troupe spawner
|
||||
id: ClownTroupeSpawner
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: red
|
||||
- sprite: Objects/Fun/bikehorn.rsi
|
||||
state: icon
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- RandomHumanoidClownTroupe
|
||||
rarePrototypes:
|
||||
- RandomHumanoidClownTroupeBanana
|
||||
rareChance: 0.3
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidClownTroupe
|
||||
name: clown troupe ghost role
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/appraisal-tool.rsi
|
||||
state: icon
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: ClownTroupe
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidClownTroupeBanana
|
||||
name: banana clown troupe
|
||||
parent: RandomHumanoidClownTroupe
|
||||
components:
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: ClownTroupeBanana
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: ClownTroupe
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-clown-troupe-name
|
||||
description: ghost-role-information-clown-troupe-description
|
||||
rules: ghost-role-information-clown-troupe-rules
|
||||
raffle:
|
||||
settings: short
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobClown ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_clown
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: ClownTroupeBanana
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-clown-troupe-name
|
||||
description: ghost-role-information-clown-troupe-description
|
||||
rules: ghost-role-information-clown-troupe-rules
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
prototypes: [ BananaClown ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_clown
|
||||
|
||||
# Traveling exotic chef
|
||||
|
||||
- type: entity
|
||||
name: traveling chef spawner
|
||||
id: TravelingChefSpawner
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: red
|
||||
- sprite: Objects/Weapons/Melee/kitchen_knife.rsi
|
||||
state: icon
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- RandomHumanoidTravelingChef
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidTravelingChef
|
||||
name: traveling chef ghost role
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/appraisal-tool.rsi
|
||||
state: icon
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: TravelingChef
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: TravelingChef
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-traveling-chef-name
|
||||
description: ghost-role-information-traveling-chef-description
|
||||
rules: ghost-role-information-traveling-chef-rules
|
||||
raffle:
|
||||
settings: short
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobChef ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
# Disaster victim
|
||||
|
||||
- type: entity
|
||||
name: disaster victim spawner
|
||||
id: DisasterVictimSpawner
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: red
|
||||
- sprite: Clothing/OuterClothing/Hardsuits/basic.rsi
|
||||
state: icon
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- RandomHumanoidDisasterVictimRD
|
||||
- RandomHumanoidDisasterVictimCMO
|
||||
- RandomHumanoidDisasterVictimCaptain
|
||||
- MobSkeletonCloset
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidDisasterVictimRD
|
||||
name: disaster victim RD ghost role
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/OuterClothing/Hardsuits/basic.rsi
|
||||
state: icon
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: DisasterVictimResearchDirector
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidDisasterVictimCMO
|
||||
parent: RandomHumanoidDisasterVictimRD
|
||||
name: disaster victim CMO ghost role
|
||||
components:
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: DisasterVictimCMO
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidDisasterVictimCaptain
|
||||
parent: RandomHumanoidDisasterVictimRD
|
||||
name: disaster victim Captain ghost role
|
||||
components:
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: DisasterVictimCaptain
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: DisasterVictimResearchDirector
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-disaster-victim-name
|
||||
description: ghost-role-information-disaster-victim-description
|
||||
rules: ghost-role-information-disaster-victim-rules
|
||||
raffle:
|
||||
settings: default
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobResearchDirector ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: DisasterVictimCMO
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-disaster-victim-name
|
||||
description: ghost-role-information-disaster-victim-description
|
||||
rules: ghost-role-information-disaster-victim-rules
|
||||
raffle:
|
||||
settings: default
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobChiefMedicalOfficer ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: DisasterVictimCaptain
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-disaster-victim-name
|
||||
description: ghost-role-information-disaster-victim-description
|
||||
rules: ghost-role-information-disaster-victim-rules
|
||||
raffle:
|
||||
settings: default
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
roleLoadout: [ JobCaptain ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
# Syndie Disaster Victim
|
||||
|
||||
- type: entity
|
||||
name: syndie disaster victim spawner
|
||||
id: SyndieDisasterVictimSpawner
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: red
|
||||
- sprite: Structures/Decoration/banner.rsi
|
||||
state: banner_syndicate
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- RandomHumanoidSyndieDisasterVictim
|
||||
|
||||
- type: entity
|
||||
id: RandomHumanoidSyndieDisasterVictim
|
||||
name: syndie disaster victim ghost role
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Decoration/banner.rsi
|
||||
state: banner_syndicate
|
||||
- type: RandomHumanoidSpawner
|
||||
settings: SyndieDisasterVictim
|
||||
|
||||
- type: randomHumanoidSettings
|
||||
id: SyndieDisasterVictim
|
||||
randomizeName: false
|
||||
components:
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Syndicate
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-syndie-disaster-victim-name
|
||||
description: ghost-role-information-syndie-disaster-victim-description
|
||||
rules: ghost-role-information-syndie-disaster-victim-rules
|
||||
raffle:
|
||||
settings: short
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: Loadout
|
||||
prototypes: [ SyndicateOperativeGearCivilian ]
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_first
|
||||
- names_last
|
||||
|
||||
@@ -126,4 +126,4 @@
|
||||
id: BaseStationAllEventsEligible
|
||||
abstract: true
|
||||
components:
|
||||
- type: StationEventEligible # For when someone makes this more granular in the future.
|
||||
- type: StationEventEligible # For when someone makes this more granular in the future.
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
minimumPlayers: 20
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
mapPath: /Maps/Shuttles/striker.yml
|
||||
preloadedGrid: ShuttleStriker
|
||||
- type: NukeopsRule
|
||||
roundEndBehavior: Nothing
|
||||
- type: AntagSelection
|
||||
|
||||
74
Resources/Prototypes/GameRules/unknown_shuttles.yml
Normal file
74
Resources/Prototypes/GameRules/unknown_shuttles.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
- type: entity
|
||||
id: UnknownShuttleCargoLost
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-unknown-shuttle-incoming
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 5
|
||||
reoccurrenceDelay: 30
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
preloadedGrid: ShuttleCargoLost
|
||||
|
||||
- type: entity
|
||||
id: UnknownShuttleTravelingCuisine
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-unknown-shuttle-incoming
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 5
|
||||
reoccurrenceDelay: 30
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
preloadedGrid: TravelingCuisine
|
||||
|
||||
- type: entity
|
||||
id: UnknownShuttleDisasterEvacPod
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-unknown-shuttle-incoming
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 5
|
||||
reoccurrenceDelay: 30
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
preloadedGrid: DisasterEvacPod
|
||||
|
||||
- type: entity
|
||||
id: UnknownShuttleHonki
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-unknown-shuttle-incoming
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 2
|
||||
reoccurrenceDelay: 30
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
preloadedGrid: Honki
|
||||
|
||||
- type: entity
|
||||
id: UnknownShuttleSyndieEvacPod
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
startAnnouncement: station-event-unknown-shuttle-incoming
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 2
|
||||
reoccurrenceDelay: 30
|
||||
duration: 1
|
||||
- type: LoadMapRule
|
||||
preloadedGrid: SyndieEvacPod
|
||||
@@ -71,6 +71,15 @@
|
||||
shoes: ClothingShoesBootsCombatFilled
|
||||
gloves: ClothingHandsGlovesColorBlack
|
||||
|
||||
# Syndicate Operative Outfit - Civilian
|
||||
- type: startingGear
|
||||
id: SyndicateOperativeGearCivilian
|
||||
equipment:
|
||||
jumpsuit: ClothingUniformJumpsuitSyndieFormal
|
||||
back: ClothingBackpackDuffelSyndicate
|
||||
shoes: ClothingShoesBootsCombat
|
||||
gloves: ClothingHandsGlovesColorBlack
|
||||
|
||||
#Syndicate Operative Outfit - Basic
|
||||
- type: startingGear
|
||||
id: SyndicateOperativeGearBasic
|
||||
|
||||
29
Resources/Prototypes/Shuttles/shuttle_incoming_event.yml
Normal file
29
Resources/Prototypes/Shuttles/shuttle_incoming_event.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
- type: preloadedGrid
|
||||
id: ShuttleStriker
|
||||
path: /Maps/Shuttles/ShuttleEvent/striker.yml
|
||||
copies: 2
|
||||
|
||||
- type: preloadedGrid
|
||||
id: ShuttleCargoLost
|
||||
path: /Maps/Shuttles/ShuttleEvent/lost_cargo.yml
|
||||
copies: 2
|
||||
|
||||
- type: preloadedGrid
|
||||
id: TravelingCuisine
|
||||
path: /Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml
|
||||
copies: 2
|
||||
|
||||
- type: preloadedGrid
|
||||
id: DisasterEvacPod
|
||||
path: /Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml
|
||||
copies: 3
|
||||
|
||||
- type: preloadedGrid
|
||||
id: Honki
|
||||
path: /Maps/Shuttles/ShuttleEvent/honki.yml
|
||||
copies: 1
|
||||
|
||||
- type: preloadedGrid
|
||||
id: SyndieEvacPod
|
||||
path: /Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml
|
||||
copies: 2
|
||||
Reference in New Issue
Block a user