Рефактор мехов, правки в системе медицины (#507)

* mech system, fix hands, fix fraction

* fix

* fix fake hypo

* fix triple airlocks big sizing

* fix

* upd clown hulk

* xd fix 2

* bigger exit delay

* mechs reflect changes

* guns changes

* draike up

* mechs in another category

* add equipment

* Revert "upd clown hulk"

This reverts commit b8084967040be5d442b2d4770cf7fdece1daa2a8.

* SPIN MY MECH ASS

* mech no rot

* some resprite

* no injections in hardsuits

* some species can not be injectable

* medipans can ignore armor, admeme hypospray ignore armor

* fix

* fix admeme hypo

* mob fraction fix

* rover + nt gygax add

* fix description

* fix id

* some better dome effects

* если пустая гильза в стволе -> Кнопки "казнь" не будет

* phazon added

* fix server crashes

* full rework mechs on mobstates, coils fix mechs, diagnostic hud show health bar for mechs, mechs fastest repair, add mech analyzer

* some fixes

* configure health of all mechs

* upd

* add rover to uplink

* translate bundle

* change price

* phazon construction

* fix

* fix

* Finish phazon construction

* add phazon research and recipes

* phazon construction translate

* fix

* Mech lights

* fix

* translate light action

* Mech sounds, fix damage

* fix

* fix hello sound

* upd

* fix linter

* change damagePercentage

* fix

* fix hello sound

* temp disable damage sounds

* fix battery needed on construct

* some changes

* add mech painting system as DEBUG(in dev)

* Fix yaml, durand paintings

* mech spray cans textures

* change sprite

* fix

* ripley, clarke new textures

* ripley,clarke paints

* fix

* sec pod texture

---------

Co-authored-by: Vigers Ray <60344369+VigersRay@users.noreply.github.com>
This commit is contained in:
Rinary 2024-10-30 09:53:00 +02:00 committed by GitHub
parent ca06f79c39
commit b6920aec99
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
269 changed files with 3590 additions and 503 deletions

View file

@ -2,6 +2,7 @@
using Content.Shared.Mech.Components;
using Content.Shared.Mech.EntitySystems;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
namespace Content.Client.Mech;
@ -17,6 +18,7 @@ public sealed class MechSystem : SharedMechSystem
base.Initialize();
SubscribeLocalEvent<MechComponent, AppearanceChangeEvent>(OnAppearanceChanged);
SubscribeLocalEvent<MechComponent, UpdateAppearanceEvent>(OnUpdateAppearanceEvent);
}
private void OnAppearanceChanged(EntityUid uid, MechComponent component, ref AppearanceChangeEvent args)
@ -24,23 +26,41 @@ public sealed class MechSystem : SharedMechSystem
if (args.Sprite == null)
return;
if (!args.Sprite.TryGetLayer((int) MechVisualLayers.Base, out var layer))
UpdateAppearance(uid, component, args.Sprite);
}
private void OnUpdateAppearanceEvent(EntityUid uid, MechComponent component, ref UpdateAppearanceEvent args)
{
if (!TryComp<SpriteComponent>(uid, out var sprite))
return;
UpdateAppearance(uid, component, sprite);
}
private void UpdateAppearance(EntityUid uid, MechComponent component, SpriteComponent sprite)
{
if (!sprite.TryGetLayer((int) MechVisualLayers.Base, out var layer))
return;
var state = component.BaseState;
var drawDepth = DrawDepth.Mobs;
if (component.BrokenState != null && _appearance.TryGetData<bool>(uid, MechVisuals.Broken, out var broken, args.Component) && broken)
if (component.BrokenState != null
&& _appearance.TryGetData<bool>(uid, MechVisuals.Broken, out var broken)
&& broken)
{
state = component.BrokenState;
drawDepth = DrawDepth.SmallMobs;
}
else if (component.OpenState != null && _appearance.TryGetData<bool>(uid, MechVisuals.Open, out var open, args.Component) && open)
else if (component.OpenState != null
&& _appearance.TryGetData<bool>(uid, MechVisuals.Open, out var open)
&& open)
{
state = component.OpenState;
drawDepth = DrawDepth.SmallMobs;
}
layer.SetState(state);
args.Sprite.DrawDepth = (int) drawDepth;
sprite.DrawDepth = (int) drawDepth;
}
}

View file

@ -11,8 +11,12 @@ using Content.Shared.Interaction.Events;
using Content.Shared.Mobs.Components;
using Content.Shared.Timing;
using Content.Shared.Weapons.Melee.Events;
using Content.Shared.Inventory;
using Content.Shared.Tag;
using Content.Shared.Popups;
using Content.Server.Interaction;
using Content.Server.Body.Components;
using Content.Server.Popups;
using Robust.Shared.GameStates;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
@ -22,6 +26,8 @@ namespace Content.Server.Chemistry.EntitySystems;
public sealed class HypospraySystem : SharedHypospraySystem
{
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly InteractionSystem _interaction = default!;
@ -84,6 +90,23 @@ public sealed class HypospraySystem : SharedHypospraySystem
}
string? msgFormat = null;
if (!component.PierceArmor && _inventorySystem.TryGetSlotEntity(target, "outerClothing", out var suit))
{
if (TryComp<TagComponent>(suit, out var tag) && tag.Tags.Contains("Hardsuit"))
{
if (target == null) return false;
var taget = (EntityUid) target;
_popup.PopupEntity(Loc.GetString("hypospay-component-failure-hardsuit"), target, user, PopupType.MediumCaution);
return false;
}
}
else if (!component.PierceArmor && TryComp<TagComponent>(target, out var tag) && tag.Tags.Contains("NoInjectable"))
{
_popup.PopupEntity(Loc.GetString("hypospay-component-failure-hardsuit"), target, user, PopupType.MediumCaution);
return false;
}
if (target == user)
msgFormat = "hypospray-component-inject-self-message";

View file

@ -1,5 +1,6 @@
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Popups;
using Content.Shared.Chemistry;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
@ -11,13 +12,18 @@ using Content.Shared.FixedPoint;
using Content.Shared.Forensics;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Mobs.Components;
using Content.Shared.Stacks;
using Content.Shared.Tag;
using Content.Shared.Popups;
namespace Content.Server.Chemistry.EntitySystems;
public sealed class InjectorSystem : SharedInjectorSystem
{
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
[Dependency] private readonly BloodstreamSystem _blood = default!;
[Dependency] private readonly ReactiveSystem _reactiveSystem = default!;
@ -31,6 +37,20 @@ public sealed class InjectorSystem : SharedInjectorSystem
private bool TryUseInjector(Entity<InjectorComponent> injector, EntityUid target, EntityUid user)
{
if (_inventorySystem.TryGetSlotEntity(target, "outerClothing", out var suit))
{
if (TryComp<TagComponent>(suit, out var tag) && tag.Tags.Contains("Hardsuit"))
{
_popup.PopupEntity(Loc.GetString("injector-component-failure-hardsuit"), target, user, PopupType.MediumCaution);
return false;
}
}
else if (TryComp<TagComponent>(target, out var tag) && tag.Tags.Contains("NoInjectable"))
{
_popup.PopupEntity(Loc.GetString("injector-component-failure-hardsuit"), target, user, PopupType.MediumCaution);
return false;
}
// Handle injecting/drawing for solutions
if (injector.Comp.ToggleState == InjectorToggleMode.Inject)
{

View file

@ -11,6 +11,9 @@ using Content.Shared.Interaction;
using Content.Shared.Mech;
using Content.Shared.Mech.Components;
using Content.Shared.Mech.EntitySystems;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Systems;
using Content.Shared.Mobs.Components;
using Content.Shared.Movement.Events;
using Content.Shared.Popups;
using Content.Shared.Tools.Components;
@ -20,7 +23,11 @@ using Content.Server.Body.Systems;
using Content.Shared.Tools.Systems;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.NPC.Components;
using Content.Shared.NPC.Systems;
using Content.Shared.Tag;
using Robust.Server.Audio;
using Robust.Shared.Audio;
using Robust.Server.Containers;
using Robust.Server.GameObjects;
using Robust.Shared.Containers;
@ -32,6 +39,8 @@ namespace Content.Server.Mech.Systems;
/// <inheritdoc/>
public sealed partial class MechSystem : SharedMechSystem
{
[Dependency] private readonly AudioSystem _audioSystem = default!;
[Dependency] private readonly NpcFactionSystem _factionSystem = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
[Dependency] private readonly BatterySystem _battery = default!;
@ -44,6 +53,7 @@ public sealed partial class MechSystem : SharedMechSystem
[Dependency] private readonly SharedToolSystem _toolSystem = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!;
/// <inheritdoc/>
public override void Initialize()
@ -240,14 +250,11 @@ public sealed partial class MechSystem : SharedMechSystem
return;
}
if (!TryComp<HandsComponent>(args.Args.User, out var handsComponent))
return;
foreach (var hand in _hands.EnumerateHands(args.Args.User, handsComponent))
{
_hands.DoDrop(args.Args.User, hand, true, handsComponent);
}
if (TryComp<HandsComponent>(args.Args.User, out var handsComponent))
foreach (var hand in _hands.EnumerateHands(args.Args.User, handsComponent))
_hands.DoDrop(args.Args.User, hand, true, handsComponent);
_factionSystem.Up(args.Args.User, uid);
TryInsert(uid, args.Args.User, component);
_actionBlocker.UpdateCanMove(uid);
@ -259,6 +266,7 @@ public sealed partial class MechSystem : SharedMechSystem
if (args.Cancelled || args.Handled)
return;
RemComp<NpcFactionMemberComponent>(component.Owner);
TryEject(uid, component);
args.Handled = true;
@ -266,17 +274,40 @@ public sealed partial class MechSystem : SharedMechSystem
private void OnDamageChanged(EntityUid uid, MechComponent component, DamageChangedEvent args)
{
var integrity = component.MaxIntegrity - args.Damageable.TotalDamage;
SetIntegrity(uid, integrity, component);
/*
if (TryComp<DamageableComponent>(uid, out var damage))
{
PlayCritSound(uid, component, damage);
}
*/
if (args.DamageIncreased &&
args.DamageDelta != null &&
component.PilotSlot.ContainedEntity != null)
{
var damage = args.DamageDelta * component.MechToPilotDamageMultiplier;
_damageable.TryChangeDamage(component.PilotSlot.ContainedEntity, damage);
var damagetoplayer = args.DamageDelta * component.MechToPilotDamageMultiplier;
_damageable.TryChangeDamage(component.PilotSlot.ContainedEntity, damagetoplayer);
}
}
private void PlayCritSound(EntityUid uid, MechComponent component, DamageableComponent damage )
{
var total = damage.TotalDamage;
if (_mobThresholdSystem.TryGetThresholdForState(uid, MobState.Critical, out var critThreshold))
{
var damagePercentage = (total / critThreshold) * 100;
if (component.PilotSlot.ContainedEntity != null)
{
if (damagePercentage >= 95)
_audioSystem.PlayPvs(_audioSystem.GetSound(component.Alert5), component.PilotSlot.ContainedEntity.Value);
else if (damagePercentage >= 75)
_audioSystem.PlayPvs(_audioSystem.GetSound(component.Alert25), component.PilotSlot.ContainedEntity.Value);
else if (damagePercentage >= 50)
_audioSystem.PlayPvs(_audioSystem.GetSound(component.Alert50), component.PilotSlot.ContainedEntity.Value);
Dirty(uid ,component);
}
}
}
private void ToggleMechUi(EntityUid uid, MechComponent? component = null, EntityUid? user = null)
{

View file

@ -127,7 +127,7 @@ public sealed class HealingSystem : EntitySystem
var healingDict = healing.Damage.DamageDict;
foreach (var type in healingDict)
{
if (damageableDict[type.Key].Value > 0)
if (damageableDict.TryGetValue(type.Key, out var damageValue) && damageValue.Value > 0) //Sunrise-edit: fix server crashes
{
return true;
}

View file

@ -21,6 +21,7 @@ using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Containers;
namespace Content.Server._Sunrise.Execution;
@ -29,6 +30,7 @@ namespace Content.Server._Sunrise.Execution;
/// </summary>
public sealed class ExecutionSystem : EntitySystem
{
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
@ -168,6 +170,15 @@ public sealed class ExecutionSystem : EntitySystem
// We must be able to actually fire the gun
if (!TryComp<GunComponent>(weapon, out var gun) && _gunSystem.CanShoot(gun!))
return false;
if (_containerSystem.TryGetContainer(weapon, "gun_chamber", out var chamberContainer))
{
foreach (var contained in chamberContainer.ContainedEntities)
{
if (TryComp<CartridgeAmmoComponent>(contained, out var cartridge) && cartridge.Spent)
return false;
}
}
return true;
}

View file

@ -0,0 +1,92 @@
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Shared._Sunrise.Paint;
using Content.Shared.DoAfter;
using Content.Shared.Humanoid;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Popups;
using Content.Shared.Sprite;
using Content.Shared.SubFloor;
using Content.Shared.Verbs;
using Content.Shared.Mech.Components;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Utility;
using PaintComponent = Content.Shared._Sunrise.Paint.PaintComponent;
using PaintDoAfterEvent = Content.Shared._Sunrise.Paint.PaintDoAfterEvent;
using PaintedComponent = Content.Shared._Sunrise.Paint.PaintedComponent;
namespace Content.Server._Sunrise.Paint;
/// <summary>
/// Colors target and consumes reagent on each color success.
/// </summary>
public sealed class MechPaintSystem : SharedMechPaintSystem
{
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SolutionContainerSystem _solutionContainer = default!;
[Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly OpenableSystem _openable = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MechPaintComponent, AfterInteractEvent>(OnInteract);
SubscribeLocalEvent<MechPaintComponent, GetVerbsEvent<UtilityVerb>>(OnPaintVerb);
}
private void OnInteract(EntityUid uid, MechPaintComponent component, AfterInteractEvent args)
{
if (!args.CanReach)
return;
if (args.Target is not { Valid: true } target)
return;
if (!HasComp<MechComponent>(args.Target))
return;
PrepPaint(uid, component, target, args.User);
}
private void OnPaintVerb(EntityUid uid, MechPaintComponent component, GetVerbsEvent<UtilityVerb> args)
{
if (!args.CanInteract || !args.CanAccess)
return;
if (!HasComp<MechComponent>(args.Target))
return;
var paintText = Loc.GetString("paint-verb");
var verb = new UtilityVerb()
{
Act = () =>
{
PrepPaint(uid, component, args.Target, args.User);
},
Text = paintText,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/paint.svg.192dpi.png"))
};
args.Verbs.Add(verb);
}
private void PrepPaint(EntityUid uid, MechPaintComponent component, EntityUid target, EntityUid user)
{
var doAfterEventArgs = new DoAfterArgs(EntityManager, user, component.Delay, new PaintDoAfterEvent(), uid, target: target, used: uid)
{
BreakOnMove = true,
BreakOnDamage = true,
NeedHand = true,
BreakOnHandChange = true
};
if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs))
return;
}
}

View file

@ -37,4 +37,11 @@ public sealed partial class HyposprayComponent : Component
/// </summary>
[DataField]
public bool InjectOnly = false;
/// <summary>
/// Whether the hypospray uses a needle (i.e. medipens)
/// or sci fi bullshit that sprays into the bloodstream directly (i.e. hypos)
/// </summary>
[DataField]
public bool PierceArmor = false;
}

View file

@ -1,6 +1,7 @@
using Content.Shared.Actions;
using Content.Shared.Mind;
using Content.Shared.MouseRotator;
using Content.Shared.Mech.Components;
using Content.Shared.Movement.Components;
using Content.Shared.Popups;
using Robust.Shared.Network;
@ -94,11 +95,21 @@ public abstract class SharedCombatModeSystem : EntitySystem
{
if (value)
{
if (TryComp<MechPilotComponent>(uid, out var mechPilot) && !HasComp<NoRotateOnMoveComponent>(mechPilot.Mech))
{
EnsureComp<NoRotateOnMoveComponent>(mechPilot.Mech);
}
EnsureComp<MouseRotatorComponent>(uid);
EnsureComp<NoRotateOnMoveComponent>(uid);
}
else
{
if (TryComp<MechPilotComponent>(uid, out var mechPilot) && HasComp<NoRotateOnMoveComponent>(mechPilot.Mech))
{
RemComp<NoRotateOnMoveComponent>(mechPilot.Mech);
}
RemComp<MouseRotatorComponent>(uid);
RemComp<NoRotateOnMoveComponent>(uid);
}

View file

@ -1,7 +1,9 @@
using Content.Shared.FixedPoint;
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.Containers;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
using Robust.Shared.Prototypes;
namespace Content.Shared.Mech.Components;
@ -67,6 +69,12 @@ public sealed partial class MechComponent : Component
/// </summary>
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public bool Broken = false;
/// <summary>
/// Whether the mech has toggled lights.
/// </summary>
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public bool Lights = false;
/// <summary>
/// The slot the pilot is stored in.
@ -119,7 +127,7 @@ public sealed partial class MechComponent : Component
/// outside of the mech. You can exit instantly yourself.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float ExitDelay = 3;
public float ExitDelay = 6;
/// <summary>
/// How long it takes to pull out the battery.
@ -143,6 +151,21 @@ public sealed partial class MechComponent : Component
/// </summary>
[DataField]
public List<EntProtoId> StartingEquipment = new();
#region Sounds
[DataField]
public SoundSpecifier EnableLightSound = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_lights_enabled.ogg");
[DataField]
public SoundSpecifier DisableLightSound = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_lights_disabled.ogg");
[DataField]
public SoundSpecifier HelloSound = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_hello.ogg");
[DataField]
public SoundSpecifier Alert50 = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_alert_50.ogg");
[DataField]
public SoundSpecifier Alert25 = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_alert_25.ogg");
[DataField]
public SoundSpecifier Alert5 = new SoundPathSpecifier("/Audio/_Sunrise/Mechs/mech_alert_5.ogg");
#endregion
#region Action Prototypes
[DataField]
@ -151,18 +174,21 @@ public sealed partial class MechComponent : Component
public EntProtoId MechUiAction = "ActionMechOpenUI";
[DataField]
public EntProtoId MechEjectAction = "ActionMechEject";
[DataField]
public EntProtoId MechLightsAction = "ActionMechLights";
#endregion
#region Visualizer States
[DataField]
[DataField, AutoNetworkedField]
public string? BaseState;
[DataField]
[DataField, AutoNetworkedField]
public string? OpenState;
[DataField]
[DataField, AutoNetworkedField]
public string? BrokenState;
#endregion
[DataField] public EntityUid? MechCycleActionEntity;
[DataField] public EntityUid? MechUiActionEntity;
[DataField] public EntityUid? MechEjectActionEntity;
[DataField] public EntityUid? MechLightsActionEntity;
}

View file

@ -4,6 +4,7 @@ using Content.Shared.ActionBlocker;
using Content.Shared.Actions;
using Content.Shared.Destructible;
using Content.Shared.DoAfter;
using Content.Shared.Mobs;
using Content.Shared.DragDrop;
using Content.Shared.Emag.Components;
using Content.Shared.Emag.Systems;
@ -19,10 +20,12 @@ using Content.Shared.Popups;
using Content.Shared.Weapons.Melee;
using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Whitelist;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers;
using Robust.Shared.Network;
using Robust.Shared.Serialization;
using Robust.Shared.Timing;
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
namespace Content.Shared.Mech.EntitySystems;
@ -33,12 +36,14 @@ public abstract class SharedMechSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly SharedMoverController _mover = default!;
[Dependency] private readonly SharedPointLightSystem _pointLight = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
@ -48,9 +53,10 @@ public abstract class SharedMechSystem : EntitySystem
{
SubscribeLocalEvent<MechComponent, MechToggleEquipmentEvent>(OnToggleEquipmentAction);
SubscribeLocalEvent<MechComponent, MechEjectPilotEvent>(OnEjectPilotEvent);
SubscribeLocalEvent<MechComponent, MechToggleLightsEvent>(OnToggleLightsEvent);
SubscribeLocalEvent<MechComponent, UserActivateInWorldEvent>(RelayInteractionEvent);
SubscribeLocalEvent<MechComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<MechComponent, DestructionEventArgs>(OnDestruction);
SubscribeLocalEvent<MechComponent, MobStateChangedEvent>(OnMobState);
SubscribeLocalEvent<MechComponent, GetAdditionalAccessEvent>(OnGetAdditionalAccess);
SubscribeLocalEvent<MechComponent, DragDropTargetEvent>(OnDragDrop);
SubscribeLocalEvent<MechComponent, CanDropTargetEvent>(OnCanDragDrop);
@ -76,7 +82,17 @@ public abstract class SharedMechSystem : EntitySystem
args.Handled = true;
TryEject(uid, component);
}
private void OnToggleLightsEvent(EntityUid uid, MechComponent component, MechToggleLightsEvent args)
{
if (args.Handled)
return;
ToggleLights(uid, component);
args.Handled = true;
}
private void RelayInteractionEvent(EntityUid uid, MechComponent component, UserActivateInWorldEvent args)
{
var pilot = component.PilotSlot.ContainedEntity;
@ -101,9 +117,17 @@ public abstract class SharedMechSystem : EntitySystem
UpdateAppearance(uid, component);
}
private void OnDestruction(EntityUid uid, MechComponent component, DestructionEventArgs args)
private void OnMobState(EntityUid uid, MechComponent component, MobStateChangedEvent args)
{
BreakMech(uid, component);
if (args.NewMobState == MobState.Critical)
{
BreakMech(uid, component);
}
if (args.NewMobState == MobState.Alive)
{
component.Broken = false;
UpdateAppearance(uid, component);
}
}
private void OnGetAdditionalAccess(EntityUid uid, MechComponent component, ref GetAdditionalAccessEvent args)
@ -135,6 +159,7 @@ public abstract class SharedMechSystem : EntitySystem
_actions.AddAction(pilot, ref component.MechCycleActionEntity, component.MechCycleAction, mech);
_actions.AddAction(pilot, ref component.MechUiActionEntity, component.MechUiAction, mech);
_actions.AddAction(pilot, ref component.MechLightsActionEntity, component.MechLightsAction, mech);
_actions.AddAction(pilot, ref component.MechEjectActionEntity, component.MechEjectAction, mech);
}
@ -147,6 +172,21 @@ public abstract class SharedMechSystem : EntitySystem
_actions.RemoveProvidedActions(pilot, mech);
}
public void ToggleLights(EntityUid uid, MechComponent component)
{
if (_pointLight.TryGetLight(uid, out var pointLightComponent))
{
component.Lights = !component.Lights;
_pointLight.SetEnabled(uid, component.Lights, pointLightComponent);
_actions.SetToggled(component.MechLightsActionEntity, component.Lights);
if(component.Lights)
_audioSystem.PlayPredicted(component.EnableLightSound, component.Owner, component.PilotSlot.ContainedEntity);
else
_audioSystem.PlayPredicted(component.DisableLightSound, component.Owner, component.PilotSlot.ContainedEntity);
Dirty(uid ,component);
}
}
/// <summary>
/// Destroys the mech, removing the user and ejecting all installed equipment.
@ -370,6 +410,7 @@ public abstract class SharedMechSystem : EntitySystem
return false;
SetupUser(uid, toInsert.Value);
_audioSystem.PlayPredicted(component.HelloSound, component.Owner, toInsert.Value);
_container.Insert(toInsert.Value, component.PilotSlot);
UpdateAppearance(uid, component);
return true;
@ -389,6 +430,11 @@ public abstract class SharedMechSystem : EntitySystem
if (component.PilotSlot.ContainedEntity == null)
return false;
if (HasComp<NoRotateOnMoveComponent>(uid))
{
RemComp<NoRotateOnMoveComponent>(uid);
}
var pilot = component.PilotSlot.ContainedEntity.Value;
RemoveUser(uid, pilot);
@ -421,7 +467,7 @@ public abstract class SharedMechSystem : EntitySystem
args.Cancel();
}
private void UpdateAppearance(EntityUid uid, MechComponent? component = null,
public void UpdateAppearance(EntityUid uid, MechComponent? component = null,
AppearanceComponent? appearance = null)
{
if (!Resolve(uid, ref component, ref appearance, false))
@ -429,6 +475,9 @@ public abstract class SharedMechSystem : EntitySystem
_appearance.SetData(uid, MechVisuals.Open, IsEmpty(component), appearance);
_appearance.SetData(uid, MechVisuals.Broken, component.Broken, appearance);
var ev = new UpdateAppearanceEvent();
RaiseLocalEvent(uid, ev);
}
private void OnDragDrop(EntityUid uid, MechComponent component, ref DragDropTargetEvent args)
@ -488,3 +537,8 @@ public sealed partial class MechExitEvent : SimpleDoAfterEvent
public sealed partial class MechEntryEvent : SimpleDoAfterEvent
{
}
[Serializable, NetSerializable]
public sealed partial class UpdateAppearanceEvent : EntityEventArgs
{
}

View file

@ -60,3 +60,7 @@ public sealed partial class MechOpenUiEvent : InstantActionEvent
public sealed partial class MechEjectPilotEvent : InstantActionEvent
{
}
public sealed partial class MechToggleLightsEvent : InstantActionEvent
{
}

View file

@ -1,6 +1,7 @@
using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Logs;
using Content.Shared.Mobs.Components;
using Content.Shared.Mech.Components;
using Content.Shared.Standing;
using Robust.Shared.Physics.Systems;
using Robust.Shared.Timing;
@ -38,6 +39,8 @@ public partial class MobStateSystem : EntitySystem
/// <returns>If the entity is alive</returns>
public bool IsAlive(EntityUid target, MobStateComponent? component = null)
{
if (TryComp<MechComponent>(target, out var mech))
return !mech.Broken;
if (!_mobStateQuery.Resolve(target, ref component, false))
return false;
return component.CurrentState == MobState.Alive;

View file

@ -168,7 +168,7 @@ public sealed class MobThresholdSystem : EntitySystem
MobThresholdsComponent? thresholdComponent = null)
{
threshold = null;
if (!Resolve(target, ref thresholdComponent))
if (!Resolve(target, ref thresholdComponent, false))
return false;
return TryGetThresholdForState(target, MobState.Critical, out threshold, thresholdComponent)

View file

@ -1,4 +1,5 @@
using Content.Shared.Interaction;
using Content.Shared.Mech.Components;
namespace Content.Shared.MouseRotator;
@ -9,6 +10,7 @@ namespace Content.Shared.MouseRotator;
public abstract class SharedMouseRotatorSystem : EntitySystem
{
[Dependency] private readonly RotateToFaceSystem _rotate = default!;
public override void Initialize()
{
@ -29,9 +31,17 @@ public abstract class SharedMouseRotatorSystem : EntitySystem
{
if (rotator.GoalRotation == null)
continue;
var target = uid;
if (TryComp<MechPilotComponent>(uid, out var mechPilot))
{
target = mechPilot.Mech;
xform = Transform(mechPilot.Mech);
}
if (_rotate.TryRotateTo(
uid,
target,
rotator.GoalRotation.Value,
frameTime,
rotator.AngleTolerance,

View file

@ -1,6 +1,7 @@
using Content.Shared.NPC.Components;
using Content.Shared.NPC.Prototypes;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
using System.Collections.Frozen;
using System.Linq;
@ -13,6 +14,7 @@ public sealed partial class NpcFactionSystem : EntitySystem
{
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly ISerializationManager _serialization = default!;
[Dependency] private readonly SharedTransformSystem _xform = default!;
/// <summary>
@ -80,6 +82,23 @@ public sealed partial class NpcFactionSystem : EntitySystem
return ent.Comp.Factions.Contains(faction);
}
public void Up(EntityUid from, EntityUid to)
{
if (TryComp<NpcFactionMemberComponent>(from, out var fromFaction))
{
if (TryComp<NpcFactionMemberComponent>(to, out var toFaction))
{
_serialization.CopyTo(fromFaction, ref toFaction, notNullableOverride: true);
}
else
{
var newComp = new NpcFactionMemberComponent();
_serialization.CopyTo(fromFaction, ref newComp, notNullableOverride: true);
AddComp<NpcFactionMemberComponent>(to, newComp);
}
}
}
/// <summary>
/// Adds this entity to the particular faction.

View file

@ -6,6 +6,7 @@ namespace Content.Shared.Tag;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(TagSystem))]
public sealed partial class TagComponent : Component
{
[DataField, ViewVariables, AutoNetworkedField]
[DataField, AutoNetworkedField]
[Access(typeof(TagSystem), Other = AccessPermissions.ReadExecute)]
public HashSet<ProtoId<TagPrototype>> Tags = new();
}

View file

@ -0,0 +1,53 @@
using Content.Shared.Chemistry.Reagent;
using Content.Shared.FixedPoint;
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._Sunrise.Paint;
/// <summary>
/// Entity when used on another entity will paint target entity.
/// </summary>
[RegisterComponent, NetworkedComponent]
[Access(typeof(SharedMechPaintSystem))]
public sealed partial class MechPaintComponent : Component
{
/// <summary>
/// Noise made when paint applied.
/// </summary>
[DataField]
public SoundSpecifier Spray = new SoundPathSpecifier("/Audio/Effects/spray2.ogg");
/// <summary>
/// This paint was used?
/// </summary>
[DataField]
public bool Used = false;
/// <summary>
/// How long the doafter will take.
/// </summary>
[DataField]
public int Delay = 2;
/// <summary>
/// What mech are paint?
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public EntityWhitelist? Whitelist;
/// <summary>
/// Paint states
/// </summary>
#region Visualizer States
[DataField]
public string BaseState;
[DataField]
public string OpenState;
[DataField]
public string BrokenState;
#endregion
}

View file

@ -0,0 +1,92 @@
using Content.Shared.DoAfter;
using Content.Shared.Humanoid;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Mech.Components;
using Content.Shared.Mech.EntitySystems;
using Content.Shared.Popups;
using Content.Shared.SubFloor;
using Robust.Shared.Audio.Systems;
using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Whitelist;
namespace Content.Shared._Sunrise.Paint;
/// <summary>
/// Colors target and consumes reagent on each color success.
/// </summary>
public abstract class SharedMechPaintSystem : EntitySystem
{
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly OpenableSystem _openable = default!;
[Dependency] private readonly SharedMechSystem _mechSystem = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MechPaintComponent, PaintDoAfterEvent>(OnPaint);
}
private void OnPaint(Entity<MechPaintComponent> entity, ref PaintDoAfterEvent args)
{
if (args.Target == null || args.Used == null || !HasComp<MechComponent>(args.Target))
return;
if (args.Handled || args.Cancelled)
return;
if (args.Target is not { Valid: true } target)
return;
if (!_openable.IsOpen(entity))
{
_popup.PopupEntity(Loc.GetString("paint-closed", ("used", args.Used)), args.User, args.User, PopupType.Medium);
return;
}
if (entity.Comp.Whitelist != null && !_whitelist.IsValid(entity.Comp.Whitelist, target) || HasComp<HumanoidAppearanceComponent>(target) || HasComp<SubFloorHideComponent>(target))
{
_popup.PopupEntity(Loc.GetString("paint-failure", ("target", args.Target)), args.User, args.User, PopupType.Medium);
return;
}
if (TryPaint(entity, target))
{
EnsureComp<MechComponent>(target, out MechComponent? mech);
EnsureComp<AppearanceComponent>(target, out AppearanceComponent? appearance);
_audio.PlayPvs(entity.Comp.Spray, entity);
_popup.PopupEntity(Loc.GetString("paint-success", ("target", args.Target)), args.User, args.User, PopupType.Medium);
mech.BaseState = entity.Comp.BaseState;
mech.OpenState = entity.Comp.OpenState;
mech.BrokenState = entity.Comp.BrokenState;
entity.Comp.Used = true;
Dirty(target, mech);
args.Handled = true;
_mechSystem.UpdateAppearance(target, mech, appearance);
return;
}
if (!TryPaint(entity, target))
{
_popup.PopupEntity(Loc.GetString("paint-empty", ("used", args.Used)), args.User, args.User, PopupType.Medium);
return;
}
}
private bool TryPaint(Entity<MechPaintComponent> entity, EntityUid target)
{
if (HasComp<HumanoidAppearanceComponent>(target) || HasComp<SubFloorHideComponent>(target) || entity.Comp.Used)
return false;
if (HasComp<MechComponent>(target))
return true;
return false;
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -19,3 +19,6 @@ hypospray-cant-inject = Can't inject into {$target}!
hypospray-verb-mode-label = Toggle Container Draw
hypospray-verb-mode-inject-all = You cannot draw from containers anymore.
hypospray-verb-mode-inject-mobs-only = You can now draw from containers.
## failure
hypospay-component-failure-hardsuit = You cant get the needle to go through the thick plating!

View file

@ -27,3 +27,6 @@ injector-component-drawing-user = You start drawing the needle.
injector-component-injecting-user = You start injecting the needle.
injector-component-drawing-target = {CAPITALIZE(THE($user))} is trying to use a needle to draw from you!
injector-component-injecting-target = {CAPITALIZE(THE($user))} is trying to inject a needle into you!
## failure
injector-component-failure-hardsuit = You can't get the needle to go through the thick plating!

View file

@ -31,6 +31,17 @@ ent-HandheldRoboAnalyzerEmpty = { ent-HandheldRoboAnalyzer }
ent-HandheldRoboAnalyzerUnpowered = { ent-BaseHandheldRoboAnalyzer }
.desc = { ent-BaseHandheldRoboAnalyzer.desc }
.suffix = Переносной, Не требует энергии
ent-BaseHandheldMechAnalyzer = анализатор механоидов
.desc = Портативный анализатор механоидов.
ent-HandheldMechAnalyzer = { ent-BaseHandheldMechAnalyzer }
.desc = { ent-BaseHandheldMechAnalyzer.desc }
.suffix = Переносной, Требует энергию
ent-HandheldMechAnalyzerEmpty = { ent-HandheldMechAnalyzer }
.desc = { ent-HandheldMechAnalyzer.desc }
.suffix = Переносной, Пустой
ent-HandheldMechAnalyzerUnpowered = { ent-BaseHandheldMechAnalyzer }
.desc = { ent-BaseHandheldMechAnalyzer.desc }
.suffix = Переносной, Не требует энергии
ent-BaseHandheldCamera = бодикамера
.desc = Оно наблюдает за вами... И пикает..
ent-HandheldCamera = { ent-BaseHandheldCamera }

View file

@ -4,3 +4,5 @@ ent-ActionMechOpenUI = Панель управления
.desc = Открывает панель управления меха.
ent-ActionMechEject = Покинуть
.desc = Высаживает пилота из меха.
ent-ActionMechLights = Свет
.desc = Переключает освещение меха.

View file

@ -8,6 +8,9 @@ ent-CrateSyndicateSuperSurplusBundle = ящик суперприпасов си
ent-CrateCybersunDarkGygaxBundle = набор Cybersun "Гигакс"
.desc = Содержит набор легкобронированных мехов от компании Cybersun.
.suffix = Заполненный
ent-CrateCybersunRoverBundle = набор Cybersun "Ровер"
.desc = Содержит набор среднебронированных мехов от компании Cybersun.
.suffix = Заполненный
ent-CrateCybersunMaulerBundle = набор Cybersun "Маулер"
.desc = Содержит набор тяжелых бронированных мехов от компании Cybersun.
.suffix = Заполненный

View file

@ -4,9 +4,13 @@ ent-DurandArmorPlate = бронепластины Дюранда
.desc = Броневые пластины из пластали для экзокостюма Дюранд.
ent-GygaxArmorPlate = бронепластины Гигакса
.desc = Броневые пластины из стали для экзокостюма Гигакс.
ent-PhazonArmorPlate = бронепластины Фазона
.desc = Броневые пластины из стали для экзокостюма Фазон.
ent-RipleyUpgradeKit = комплект модернизации экзокостюма
.desc = Этот комплект позволяет собрать экзокостюм Рипли MK-II.
ent-MechAirTank = воздушный баллон экзокостюма
.desc = Специальный воздушный баллон, способный вместить большое количество воздуха.
ent-MechThruster = ускоритель экзокостюма
.desc = Ускоритель, который позволяет экзокостюму безопасно двигаться при отсутствии гравитации.
ent-MechPhasicScanningModule = фазовый сканирующий модуль
.desc = Высокотехнологичный сканирующий модуль, позволяющий прорывать пространство и проходить сквозь твердые объекты.

View file

@ -28,3 +28,9 @@ ent-DurandPeripheralsElectronics = модуль управления периф
.desc = Система управления электрическими периферийными устройствами меха Дюранд.
ent-DurandTargetingElectronics = модуль управления огнём Дюранд
.desc = Электрическая система управления огнём меха Дюранд.
ent-PhazonCentralElectronics = центральный модуль управления Фазон
.desc = Центр управления электрооборудованием меха Фазон.
ent-PhazonPeripheralsElectronics = модуль управления периферией Фазон
.desc = Система управления электрическими периферийными устройствами меха Фазон.
ent-PhazonTargetingElectronics = модуль управления огнём Фазон
.desc = Электрическая система управления огнём меха Фазон.

View file

@ -114,3 +114,17 @@ ent-VimHarness = каркас ВИМ
.desc = Небольшой кронштейн для крепления частей ВИМ.
ent-VimChassis = шасси ВИМ
.desc = Незавершённое шасси меха ВИМ.
ent-PhazonHarness = каркас Фазона
.desc = Ядро меха Фазон.
ent-PhazonHead = голова Фазона
.desc = Голова меха Фазон. Устанавливается на шасси меха.
ent-PhazonLArm = левая рука Фазона
.desc = Левая рука меха Фазон. Устанавливается на шасси меха.
ent-PhazonLLeg = левая нога Фазона
.desc = Левая нога меха Фазон. Устанавливается на шасси меха.
ent-PhazonRLeg = правая нога Фазона
.desc = Правая нога меха Фазон. Устанавливается на шасси меха.
ent-PhazonRArm = правая рука Фазона
.desc = Правая рука меха Фазон. Устанавливается на шасси меха.
ent-PhazonChassis = шасси Фазона
.desc = Незавершённое шасси меха Фазон.

View file

@ -51,6 +51,19 @@ ent-MechDurand = Дюранд
ent-MechDurandBattery = { ent-MechDurand }
.suffix = Батарея
.desc = { ent-MechDurand.desc }
ent-MechPhazon = Фазон
.desc = Самый продвинутый мех на рынке, вершина технологического развития, крайне мобильная и смертоносная.
ent-MechPhazonBattery = { ent-MechPhazon }
.suffix = Батарея
.desc = { ent-MechPhazon.desc }
ent-MechNTGygax = Особый гигакс NanoTrasen
.desc = Козырь Nanotrasen при решении проблем. Высокая прочность, повышенная защита от ударов, взрывов, температуры, выстрелов: обычных, лазерных и энергетических, а также расширенные слоты под оборудование позволяют перевернуть ситуацию на станции. Ускорители потребляют колоссальное количество энергии.
ent-MechNTGygaxBattery = { ent-MechNTGygax }
.desc = { ent-MechNTGygax.desc }
.suffix = Батарея
ent-MechNTGygaxFilled = { ent-MechNTGygaxBattery }
.desc = { ent-MechNTGygaxBattery.desc }
.suffix = Батарея, Заполненный
ent-MechMarauder = Мародёр
.desc = Похоже, мы все спасены.
ent-MechMarauderBattery = { ent-MechMarauder }
@ -75,6 +88,14 @@ ent-MechGygaxSyndieBattery = { ent-MechGygaxSyndie }
ent-MechGygaxSyndieFilled = { ent-MechGygaxSyndieBattery }
.suffix = Батарея, Заполненный
.desc = { ent-MechGygaxSyndieBattery.desc }
ent-MechRoverSyndie = Ровер
.desc = Модифицированный Дюранд, используемый в неблаговидных целях. На задней стороне бронепластины имеется надпись "Cybersun Inc.".
ent-MechRoverSyndieBattery = { ent-MechRoverSyndie }
.suffix = Батарея
.desc = { ent-MechRoverSyndie.desc }
ent-MechRoverSyndieFilled = { ent-MechRoverSyndieBattery }
.suffix = Батарея, Заполненный
.desc = { ent-MechRoverSyndieBattery.desc }
ent-MechMaulerSyndie = Маулер
.desc = Модифицированный Мародёр, используемый Синдикатом, не такой маневренный, как Тёмный гигакс, но он компенсирует это броней и мощной огневой мощью. На задней стороне бронепластины имеется надпись "Cybersun Inc.".
ent-MechMaulerSyndieBattery = { ent-MechMaulerSyndie }

View file

@ -24,7 +24,7 @@ ent-WeaponMechCombatShotgun = LBX AC 10 "Залп"
.suffix = Оружие мехов, Стрелковое, Боевое, Дробовик
ent-WeaponMechCombatShotgunIncendiary = карабин FNX-99 "Аид"
.desc = Навесной карабин, стреляющий зажигательными патронами.
.suffix = Оружие мехов, Стрелковое, Боевое, Дробовик, Incendiary
.suffix = Оружие мехов, Стрелковое, Боевое, Дробовик, Зажигательный
ent-WeaponMechCombatUltraRifle = AC-2 "Ультра"
.desc = Навесной карабин, стреляющий зажигательными патронами.
.suffix = Оружие мехов, Стрелковое, Боевое, Автомат

View file

@ -16,6 +16,7 @@ step-wallmount-generator-circuit-board-name = микросхему настен
step-freezer-electronics-name = микросхему морозильника
step-multitool-name = мультитул
step-capacitor-name = конденсатор
step-powercage-name = любую энерго ячейку
step-powercell-name = любую батарею
step-powercell-small-name = маленькую батарею
step-signal-trigger-name = сигнальный триггер

View file

@ -2,4 +2,5 @@ research-technology-handcraft-nvd = Кустарные ПНВ
research-technology-basic-nvd = Продвинутое ПНВ
research-technology-combat-equipment = Боевое снаряжение
research-technology-extended-amunitions = Расширенные магазины
research-technology-phazon = Фазон
research-technology-cargo-bluespace-equipment = Блюспейс экипировка карго

View file

@ -24,3 +24,4 @@ shop-disease-category-symptoms = Симптомы
shop-disease-category-evolution = Улучшение
# Uplink
store-category-objectives = Цели
store-category-mechs = Мехи

View file

@ -62,3 +62,26 @@ uplink-hypo-name = Горлекс гипоспрей
uplink-hypo-desc = Химический гипоспрей, произвёденный синдикатом, способный мгновенно впрыснуть до 20 ед. реагентов. Изначально пуст.
uplink-polytrinic-acid-chemistry-bottle-name = Политриновая кислота
uplink-polytrinic-acid-chemistry-bottle-desc = Чрезвычайно едкое химическое вещество. Сильно обжигает всех, кто вступит с ней в непосредственный контакт.
## Mechs equipment
uplink-mech-equipment-immolation-gun-name = пушка-испепелитель ZFI
uplink-mech-equipment-immolation-gun-desc = Оружие для боевых мехов, стреляющее высокотемпературными лучами.
uplink-mech-equipment-tesla-cannon-name = тесла-пушка P-X
uplink-mech-equipment-tesla-cannon-desc = Оружие для боевых мехов, стреляющее энергетическими шарами, основанное на принципе экспериментального двигателя Теслы.
uplink-mech-equipment-shotgun-name = LBX AC 10 "Залп"
uplink-mech-equipment-shotgun-desc = Навесной нелетальный электрошокер, позволяющий оглушить злоумышленников.
uplink-mech-equipment-shotgun-incendiary-name = карабин FNX-99 "Аид"
uplink-mech-equipment-shotgun-incendiary-desc = Навесной карабин, стреляющий зажигательными патронами.
uplink-mech-equipment-ultra-rifle-name = AC-2 "Ультра"
uplink-mech-equipment-ultra-rifle-desc = Навесной карабин, стреляющий зажигательными патронами.
uplink-mech-equipment-ion-name = ионная тяжёлая пушка М-4
uplink-mech-equipment-ion-desc = Навесное ионное орудие, действующее по тому же принципу, что и ручной ионный карабин. Чрезвычайно эффективно против синтетиков, роботов и других мехов.
uplink-mech-equipment-amlg90-name = AMLG-90
uplink-mech-equipment-amlg90-desc = Лазерный навесной пулемёт.
uplink-mech-equipment-vindictor-name = Устанавливаемый MG-100 Vindicator Minigun
uplink-mech-equipment-vindictor-desc = Тяжёлое оружие массового поражения.
uplink-mech-equipment-uvm31-name = UVM-31 "Дрейк"
uplink-mech-equipment-uvm31-desc = Тяжёлое оружие массового поражения разработанное Cybersun на основе минигана. теперь на прочном штативе позволяющем вести огонь прямо из МЕХа!
uplink-mech-teleporter-medium-name = Телепорт среднего меха
uplink-mech-teleporter-medium-desc = Содержит среднебронированный мех Cybersan с интегрированными цепным мечом и ракетной установкой BRM-8.

View file

@ -19,3 +19,7 @@ hypospray-verb-mode-label = Переключить на набор из конт
hypospray-verb-mode-inject-all = Вы больше не можете набирать из контейнеров.
hypospray-verb-mode-inject-mobs-only = Теперь вы можете набирать из контейнеров.
hypospray-cant-inject = Нельзя сделать инъекцию в { $target }!
## failure
hypospay-component-failure-hardsuit = Вы не сможете провести иглу через толстое покрытие!

View file

@ -28,3 +28,7 @@ injector-component-drawing-user = Вы начинаете набирать шп
injector-component-injecting-user = Вы начинаете вводить содержимое шприца.
injector-component-drawing-target = { CAPITALIZE($user) } начинает набирать шприц из вас!
injector-component-injecting-target = { CAPITALIZE($user) } начинает вводить содержимое шприца в вас!
## failure
injector-component-failure-hardsuit = Вы не сможете провести иглу через толстое покрытие!

View file

@ -16,5 +16,6 @@ lathe-category-mechs-ripleymkii = Рипли MK-II
lathe-category-mechs-clarke = Кларк
lathe-category-mechs-gygax = Гигакс
lathe-category-mechs-durand = Дюранд
lathe-category-mechs-phazon = Фазон
lathe-category-mechs-equipment = Оборудование механоидов
lathe-category-mechs-weapons = Вооружение механоидов

View file

@ -93,9 +93,9 @@ uplink-reinforcement-radio-nukeops-desc = Телепортирует в каче
uplink-reinforcement-radio-cyborg-assault-name = Телепорт штурмового киборга Синдиката
uplink-reinforcement-radio-cyborg-assault-desc = Машина для убийств с доступом к энергомечу, пулемёту, криптографическому секвенсору и пинпоинтеру.
uplink-mech-teleporter-heavy-name = Телепорт тяжелого меха
uplink-mech-teleporter-heavy-desc = Содержит тяжелобронированный мех Cybersan с интегрированными цепным мечом, Ultra AC-2, LBX AC 10 "Картечь", ракетной установкой BRM-6 и пушкой P-X Tesla.
uplink-mech-teleporter-heavy-desc = Содержит тяжелобронированный мех Cybersan с интегрированными цепным мечом и ракетной установкой BRM-6.
uplink-mech-teleporter-assault-name = Телепорт штурмового меха
uplink-mech-teleporter-assault-desc = Содержит легкобронированный мех Cybersan с интегрированными цепным мечом, LBX AC 10 "Картечь", легкой ракетной установкой SRM-8 и пушкой P-X Tesla.
uplink-mech-teleporter-assault-desc = Содержит легкобронированный мех Cybersan с интегрированными цепным мечом и легкой ракетной установкой SRM-8.
uplink-stealth-box-name = Стелс-коробка
uplink-stealth-box-desc = Ящик, оснащённый технологией невидимости, проникните везде и не двигайтесь слишком быстро!
uplink-headset-name = Полноразмерная гарнитура Синдиката

View file

@ -35,3 +35,15 @@
sprite: Interface/Actions/actions_mecha.rsi
state: mech_eject
event: !type:MechEjectPilotEvent
- type: entity
id: ActionMechLights
name: Lights
description: Turns mech lights.
components:
- type: InstantAction
useDelay: 5
itemIconStyle: NoItem
icon: { sprite: Interface/Actions/actions_mecha.rsi, state: mech_lights_off }
iconOn: { sprite: Interface/Actions/actions_mecha.rsi, state: mech_lights_on }
event: !type:MechToggleLightsEvent

View file

@ -45,6 +45,21 @@
- id: DoubleEmergencyNitrogenTankFilled
- id: ToolboxSyndicateFilled
- id: PlushieNuke
- type: entity
id: CrateCybersunRoverBundle
suffix: Filled
parent: CrateSyndicate
name: Cybersun rover bundle
description: Contains a set of Cybersan medium armored mechs.
components:
- type: StorageFill
contents:
- id: MechRoverSyndieFilled
- id: DoubleEmergencyOxygenTankFilled
- id: DoubleEmergencyNitrogenTankFilled
- id: ToolboxSyndicateFilled
- id: PlushieNuke
- type: entity
id: CrateCybersunMaulerBundle

View file

@ -1424,38 +1424,6 @@
- !type:ListingLimitedStockCondition
stock: 1
- type: listing
id: UplinkDarkGygax
name: uplink-mech-teleporter-assault-name
description: uplink-mech-teleporter-assault-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: darkgygax }
productEntity: CrateCybersunDarkGygaxBundle
cost:
Telecrystal: 100
categories:
- UplinkAllies
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMauler
name: uplink-mech-teleporter-heavy-name
description: uplink-mech-teleporter-heavy-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: mauler }
productEntity: CrateCybersunMaulerBundle
cost:
Telecrystal: 150
categories:
- UplinkAllies
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
# Implants
- type: listing

View file

@ -33,6 +33,7 @@
damageContainers:
- Inorganic
- Silicon
- Mech # Sunrise-edit
- type: entity
parent: [ClothingEyesBase, ShowMedicalIcons]

View file

@ -1,3 +1,5 @@
# Basic
- type: entity
id: EnergyDomeBase
abstract: true
@ -32,40 +34,8 @@
tags:
- HideContextMenu
- IgnoreMelee
- type: entity
id: EnergyDomeSmallPink
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Sprite
sprite: Effects/EnergyDome/energydome_small.rsi
layers:
- state: small
color: "#f5166b"
- type: PointLight
enabled: true
radius: 5
power: 2
color: "#f5166b"
- type: entity
id: EnergyDomeSmallBlue
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Sprite
drawdepth: Effects
noRot: true
sprite: Effects/EnergyDome/energydome_small.rsi
layers:
- state: small
color: "#64b9de"
- type: PointLight
enabled: true
radius: 5
power: 2
color: "#64b9de"
# Nukeops
- type: entity
id: EnergyDomeSmallRed
@ -84,34 +54,6 @@
radius: 5
power: 2
color: "#b00000"
- type: entity
id: EnergyDomeMediumBlue
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 1.8
density: 0
mask:
- None
layer:
- BulletImpassable
- Opaque
- type: Sprite
sprite: Effects/EnergyDome/energydome_medium.rsi
layers:
- state: medium
color: "#64b9de"
- type: PointLight
enabled: true
radius: 5
power: 10
color: "#64b9de"
- type: entity
id: EnergyDomeMediumRed
@ -141,6 +83,72 @@
power: 10
color: "#b00000"
# NanoTrasen
- type: entity
id: EnergyDomeSmallBlue
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Sprite
drawdepth: Effects
noRot: true
sprite: Effects/EnergyDome/energydome_small.rsi
layers:
- state: small
color: "#64b9de"
- type: PointLight
enabled: true
radius: 5
power: 2
color: "#64b9de"
- type: entity
id: EnergyDomeMediumBlue
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 1.8
density: 0
mask:
- None
layer:
- BulletImpassable
- Opaque
- type: Sprite
sprite: Effects/EnergyDome/energydome_medium.rsi
layers:
- state: medium
color: "#64b9de"
- type: PointLight
enabled: true
radius: 5
power: 10
color: "#64b9de"
# Misc
- type: entity
id: EnergyDomeSmallPink
categories: [ HideSpawnMenu ]
parent: EnergyDomeBase
components:
- type: Sprite
sprite: Effects/EnergyDome/energydome_small.rsi
layers:
- state: small
color: "#f5166b"
- type: PointLight
enabled: true
radius: 5
power: 2
color: "#f5166b"
- type: entity
id: EnergyDomeSlowing
categories: [ HideSpawnMenu ]

View file

@ -6,7 +6,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/ripley.rsi
state: ripley
- type: ConditionalSpawner
prototypes:
@ -20,7 +20,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/ripley.rsi
state: ripleymkii
- type: ConditionalSpawner
prototypes:
@ -63,7 +63,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/clarke.rsi
state: clarke
- type: ConditionalSpawner
prototypes:
@ -77,7 +77,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/gygax.rsi
state: gygax
- type: ConditionalSpawner
prototypes:
@ -91,7 +91,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/durand.rsi
state: durand
- type: ConditionalSpawner
prototypes:
@ -163,7 +163,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/gygax.rsi
state: darkgygax
- type: ConditionalSpawner
prototypes:
@ -178,7 +178,7 @@
- type: Sprite
layers:
- state: green
- sprite: Objects/Specific/Mech/mecha.rsi
- sprite: Objects/Specific/Mech/gygax.rsi
state: darkgygax
- type: ConditionalSpawner
prototypes:

View file

@ -66,6 +66,15 @@
295: 0.6
285: 0.4
- type: Wagging
# Sunrise-start
- type: Tag
tags:
- CanPilot
- FootstepSound
- DoorBumpOpener
- AnomalyHost
- NoInjectable
#Sunrise-end
- type: Inventory
speciesId: reptilian
femaleDisplacements:

View file

@ -51,6 +51,24 @@
- type: GuideHelp
guides:
- Robotics
- type: entity
id: PhazonArmorPlate
parent: BaseExosuitParts
name: phazon armor plates
description: Armor plates made of steel for Phazon exosuit.
components:
- type: Item
storedRotation: 0
- type: Sprite
sprite: Objects/Specific/Mech/phazon_construction.rsi
state: phazon_armor
- type: Tag
tags:
- PhazonArmor
- type: GuideHelp
guides:
- Robotics
- type: entity
id: RipleyUpgradeKit
@ -99,6 +117,23 @@
- type: Tag
tags:
- MechThruster
- type: GuideHelp
guides:
- Robotics
- type: entity
id: MechPhasicScanningModule
parent: BaseExosuitParts
name: phasic scanning module
description: An application part used in the construction of various devices.
components:
- type: Item
storedRotation: 0
- type: Sprite
state: triphasic_scan_module
- type: Tag
tags:
- MechPhasicScanningModule
- type: GuideHelp
guides:
- Robotics

View file

@ -258,6 +258,58 @@
- type: Tag
tags:
- DurandTargetingControlModule
- type: GuideHelp
guides:
- Robotics
# Phazon
- type: entity
id: PhazonCentralElectronics
parent: BaseElectronics
name: phazon central control module
description: The electrical control center for the Phazon mech.
components:
- type: Item
storedRotation: 0
- type: Sprite
sprite: Objects/Misc/module.rsi
state: mainboard
- type: Tag
tags:
- PhazonCentralControlModule
- type: GuideHelp
guides:
- Robotics
- type: entity
id: PhazonPeripheralsElectronics
parent: BaseElectronics
name: phazon peripherals control module
description: The electrical peripherals control for the Phazon mech.
components:
- type: Sprite
sprite: Objects/Misc/module.rsi
state: id_mod
- type: Tag
tags:
- PhazonPeripheralsControlModule
- type: GuideHelp
guides:
- Robotics
- type: entity
id: PhazonTargetingElectronics
parent: BaseElectronics
name: phazon weapon control and targeting module
description: The electrical targeting control for the Phazon mech.
components:
- type: Sprite
sprite: Objects/Misc/module.rsi
state: mcontroller
- type: Tag
tags:
- PhazonTargetingControlModule
- type: GuideHelp
guides:
- Robotics

View file

@ -30,7 +30,7 @@
components:
- type: Sprite
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_laser
state: mecha_immolator
- type: Gun
fireRate: 0.6
selectedMode: SemiAuto
@ -53,7 +53,7 @@
components:
- type: Sprite
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_laser
state: mecha_solaris
- type: Gun
fireRate: 1
selectedMode: SemiAuto
@ -76,7 +76,7 @@
components:
- type: Sprite
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_laser
state: mecha_firedart
- type: Gun
fireRate: 0.8
selectedMode: SemiAuto
@ -220,7 +220,7 @@
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_uac2
- type: Gun
fireRate: 2
fireRate: 5
shotsPerBurst: 3
burstCooldown: 1.2
selectedMode: Burst
@ -273,7 +273,7 @@
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_amlg90
- type: Gun
fireRate: 2
fireRate: 4
shotsPerBurst: 3
burstCooldown: 1.2
selectedMode: Burst
@ -285,7 +285,7 @@
path: /Audio/Weapons/Guns/Empty/empty.ogg
- type: ProjectileBatteryAmmoProvider
proto: BulletSyndiPlasma
fireCost: 75
fireCost: 20
- type: Appearance
- type: AmmoCounter

View file

@ -978,3 +978,149 @@
graph: Vim
node: start
defaultTarget: vim
# Phazon
- type: entity
id: BasePhazonPart
parent: BaseMechPart
abstract: true
components:
- type: Sprite
drawdepth: Items
noRot: false
sprite: Objects/Specific/Mech/phazon_construction.rsi
- type: entity
id: BasePhazonPartItem
parent: BasePhazonPart
abstract: true
components:
- type: Item
size: Ginormous
- type: entity
parent: BasePhazonPart
id: PhazonHarness
name: phazon harness
description: The core of the Phazon.
components:
- type: Appearance
- type: ItemMapper
mapLayers:
phazon_head+o:
whitelist:
tags:
- PhazonHead
phazon_l_arm+o:
whitelist:
tags:
- PhazonLArm
phazon_r_arm+o:
whitelist:
tags:
- PhazonRArm
phazon_l_leg+o:
whitelist:
tags:
- PhazonLLeg
phazon_r_leg+o:
whitelist:
tags:
- PhazonRLeg
sprite: Objects/Specific/Mech/phazon_construction.rsi
- type: ContainerContainer
containers:
mech-assembly-container: !type:Container
- type: MechAssembly
finishedPrototype: PhazonChassis
requiredParts:
PhazonHead: false
PhazonLArm: false
PhazonRArm: false
PhazonLLeg: false
PhazonRLeg: false
- type: Sprite
state: phazon_harness+o
noRot: true
- type: entity
parent: BasePhazonPartItem
id: PhazonHead
name: phazon head
description: The head of the Phazon. It belongs on the chassis of the mech.
components:
- type: Sprite
state: phazon_head
- type: Tag
tags:
- PhazonHead
- type: entity
parent: BasePhazonPartItem
id: PhazonLArm
name: phazon left arm
description: The left arm of the Phazon. It belongs on the chassis of the mech.
components:
- type: Sprite
state: phazon_l_arm
- type: Tag
tags:
- PhazonLArm
- type: entity
parent: BasePhazonPartItem
id: PhazonLLeg
name: phazon left leg
description: The left leg of the Phazon. It belongs on the chassis of the mech.
components:
- type: Sprite
state: phazon_l_leg
- type: Tag
tags:
- PhazonLLeg
- type: entity
parent: BasePhazonPartItem
id: PhazonRLeg
name: phazon right leg
description: The right leg of the Phazon. It belongs on the chassis of the mech.
components:
- type: Sprite
state: phazon_r_leg
- type: Tag
tags:
- PhazonRLeg
- type: entity
parent: BasePhazonPartItem
id: PhazonRArm
name: phazon right arm
description: The right arm of the Phazon. It belongs on the chassis of the mech.
components:
- type: Sprite
state: phazon_r_arm
- type: Tag
tags:
- PhazonRArm
- type: entity
id: PhazonChassis
parent: BasePhazonPart
name: phazon chassis
description: An in-progress construction of the Phazon mech.
components:
- type: Appearance
- type: ContainerContainer
containers:
battery-container: !type:Container
- type: MechAssemblyVisuals
statePrefix: phazon
- type: Sprite
noRot: true
state: phazon0
- type: Construction
graph: Phazon
node: start
defaultTarget: phazon

View file

@ -77,7 +77,12 @@
- type: DoAfter
- type: Repairable
fuelCost: 25
doAfterDelay: 10
doAfterDelay: 3
damage:
types:
Blunt: -15
Slash: -15
Piercing: -15
- type: UserInterface
interfaces:
enum.MechUiKey.Key:
@ -118,6 +123,25 @@
- MobMask
layer:
- MobLayer
- type: MobState
allowedStates:
- Alive
- Critical
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
500: Critical
showOverlays: false
allowRevives: true
- type: HealthExaminable
examinableTypes:
- Blunt
- Slash
- Piercing
- Heat
- Shock
locPrefix: mech
- type: Appearance
- type: ContainerContainer
containers:
@ -125,7 +149,7 @@
mech-equipment-container: !type:Container
mech-battery-slot: !type:ContainerSlot
- type: Damageable
damageContainer: Inorganic
damageContainer: Mech
damageModifierSet: LightArmor
- type: FootstepModifier
footstepSoundCollection:
@ -137,7 +161,7 @@
thresholds:
- trigger:
!type:DamageTrigger
damage: 1000
damage: 700
behaviors:
- !type:PlaySoundBehavior
sound:
@ -147,6 +171,14 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Prying
- type: StatusIcon
bounds: "-0.6,-0.6, 0.6, 0.6"
- type: PointLight
enabled: false
mask: /Textures/Effects/LightMasks/cone.png
autoRot: true
radius: 4
netsync: false
# Ripley MK-I
- type: entity
@ -158,7 +190,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/ripley.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -184,9 +216,23 @@
baseWalkSpeed: 2.25
baseSprintSpeed: 3.6
- type: Reflect
reflectProb: 0.05
reflectProb: 0.15
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: Tag
tags:
- DoorBumpOpener
- FootstepSound
- Ripley
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
200: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechRipleyBattery
@ -208,7 +254,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/ripley.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -237,9 +283,18 @@
- type: Damageable
damageModifierSet: MediumArmorNT
- type: Reflect
reflectProb: 0.15
reflectProb: 0.25
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
250: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechRipley2Battery
@ -261,7 +316,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/clarke.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -290,9 +345,29 @@
- type: CanMoveInAir
- type: MovementAlwaysTouching
- type: Reflect
reflectProb: 0.15
reflectProb: 0.25
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
250: Critical
showOverlays: false
allowRevives: true
- type: PointLight
enabled: false
mask: /Textures/Effects/LightMasks/cone.png
autoRot: true
radius: 8
netsync: false
- type: Tag
tags:
- DoorBumpOpener
- FootstepSound
- Clarke
- type: entity
id: MechClarkeBattery
@ -332,9 +407,18 @@
components:
- HumanoidAppearance
- type: Reflect
reflectProb: 0.05
reflectProb: 0.15
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
150: Critical
showOverlays: false
allowRevives: true
- type: entity
parent: MechHonker
@ -396,10 +480,19 @@
baseWalkSpeed: 2.4
baseSprintSpeed: 3.7
- type: Reflect
reflectProb: 0.05
reflectProb: 0.15
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
150: Critical
showOverlays: false
allowRevives: true
- type: entity
parent: MechHamtr
id: MechHamtrBattery
@ -467,9 +560,18 @@
tags:
- Maintenance
- type: Reflect
reflectProb: 0.05
reflectProb: 0.15
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
150: Critical
showOverlays: false
allowRevives: true
# TOOD: buzz / chime actions
# TODO: builtin flashlight
@ -495,7 +597,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/gygax.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -523,9 +625,23 @@
baseWalkSpeed: 2
baseSprintSpeed: 2.6
- type: Reflect
reflectProb: 0.15
reflectProb: 0.25
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
300: Critical
showOverlays: false
allowRevives: true
- type: Tag
tags:
- DoorBumpOpener
- FootstepSound
- Gygax
- type: entity
id: MechGygaxBattery
@ -547,7 +663,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/durand.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -561,7 +677,6 @@
brokenState: durand-broken
mechToPilotDamageMultiplier: 0.25
airtight: true
maxIntegrity: 400
pilotWhitelist:
components:
- HumanoidAppearance
@ -583,9 +698,23 @@
fuelCost: 30
doAfterDelay: 15
- type: Reflect
reflectProb: 0.15
reflectProb: 0.25
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
450: Critical
showOverlays: false
allowRevives: true
- type: Tag
tags:
- DoorBumpOpener
- FootstepSound
- Durand
- type: entity
id: MechDurandBattery
@ -596,9 +725,154 @@
containers:
mech-battery-slot:
- PowerCageHigh
# Phazon
- type: entity
id: MechPhazon
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
name: Phazon
description: The most advanced mech on the market, the pinnacle of technological development, extremely mobile and deadly.
components:
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
state: phazon
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
- type: Mech
baseState: phazon
openState: phazon-open
brokenState: phazon-broken
mechToPilotDamageMultiplier: 0.4
maxEquipmentAmount: 6
airtight: true
pilotWhitelist:
components:
- HumanoidAppearance
- type: MeleeWeapon
hidden: true
attackRate: 1
damage:
types:
Blunt: 20
Structural: 130
- type: MovementSpeedModifier
baseWalkSpeed: 3.2
baseSprintSpeed: 4
- type: Reflect
reflectProb: 0.65
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- Energy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
200: Critical
showOverlays: false
allowRevives: true
- type: Tag
tags:
- DoorBumpOpener
- FootstepSound
- Phazon
- type: entity
id: MechPhazonBattery
parent: MechPhazon
suffix: Battery
components:
- type: ContainerFill
containers:
mech-battery-slot:
- PowerCageHigh
# Nanotrasen Combat Mechs
# NT Gygax
- type: entity
id: MechNTGygax
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
name: Nanotrasen Special Gygax
description: "Nanotrasen's trump card when solving problems. High durability, increased protection against shock, explosions, temperature, shots: conventional, laser and energy, as well as expanded equipment slots allow to turn the situation on the station upside down. Gas pedals consume a colossal amount of energy."
components:
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/gygax.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
state: ntgygax
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
- type: Mech
baseState: ntgygax
openState: ntgygax-open
brokenState: ntgygax-broken
mechToPilotDamageMultiplier: 0.2
airtight: true
maxEquipmentAmount: 4
pilotWhitelist:
components:
- HumanoidAppearance
- type: MeleeWeapon
hidden: true
attackRate: 1
damage:
types:
Blunt: 30
Structural: 180
- type: MovementSpeedModifier
baseWalkSpeed: 2.4
baseSprintSpeed: 3
- type: Reflect
reflectProb: 0.30
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: Damageable
damageModifierSet: MediumArmorNT
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
400: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechNTGygaxBattery
parent: MechNTGygax
suffix: Battery
components:
- type: ContainerFill
containers:
mech-battery-slot:
- PowerCageHigh
- type: entity
id: MechNTGygaxFilled
parent: MechNTGygaxBattery
suffix: Battery, Filled
components:
- type: Mech
startingEquipment:
- WeaponMechChainSword
- WeaponMechCombatPulseRifle
- WeaponMechCombatXray
- WeaponMechCombatMissileRack6
# Marauder
- type: entity
id: MechMarauder
@ -623,7 +897,6 @@
brokenState: marauder-broken
mechToPilotDamageMultiplier: 0.1
airtight: true
maxIntegrity: 500
maxEquipmentAmount: 4
pilotWhitelist:
components:
@ -646,9 +919,18 @@
fuelCost: 30
doAfterDelay: 15
- type: Reflect
reflectProb: 0.3
reflectProb: 0.4
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
500: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechMarauderBattery
@ -677,7 +959,7 @@
id: MechSeraph
parent: [ BaseMech, CombatMech, BaseCentcommContraband ]
name: Seraph
description: That's the last thing you'll see. # Death Squad mech
description: That's the last thing you'll see.
components:
- type: Sprite
drawdepth: Mobs
@ -696,7 +978,6 @@
brokenState: seraph-broken
mechToPilotDamageMultiplier: 0.05
airtight: true
maxIntegrity: 550
maxEquipmentAmount: 5
pilotWhitelist:
components:
@ -719,9 +1000,18 @@
fuelCost: 30
doAfterDelay: 20
- type: Reflect
reflectProb: 0.3
reflectProb: 0.4
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
550: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechSeraphBattery
@ -758,7 +1048,7 @@
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/gygax.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
@ -770,9 +1060,8 @@
baseState: darkgygax
openState: darkgygax-open
brokenState: darkgygax-broken
mechToPilotDamageMultiplier: 0.15
mechToPilotDamageMultiplier: 0.2
airtight: true
maxIntegrity: 300
maxEquipmentAmount: 4
pilotWhitelist:
components:
@ -795,9 +1084,18 @@
fuelCost: 40
doAfterDelay: 20
- type: Reflect
reflectProb: 0.25
reflectProb: 0.30
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
350: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechGygaxSyndieBattery
@ -817,9 +1115,86 @@
- type: Mech
startingEquipment:
- WeaponMechChainSword
- WeaponMechCombatShotgun
- WeaponMechCombatMissileRack8
- WeaponMechCombatTeslaCannon
# Rover
- type: entity
id: MechRoverSyndie
parent: [ BaseMech, CombatMech, BaseSyndicateContraband ]
name: Rover
description: A modified Durand used for nefarious purposes. On the back of the armor plate there is an inscription "Cybersun Inc."
components:
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: Objects/Specific/Mech/durand.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
state: darkdurand
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
- type: Mech
baseState: darkdurand
openState: darkdurand-open
brokenState: darkdurand-broken
mechToPilotDamageMultiplier: 0.15
airtight: true
maxEquipmentAmount: 5
pilotWhitelist:
components:
- HumanoidAppearance
- type: MeleeWeapon
hidden: true
attackRate: 1
damage:
types:
Blunt: 30
Structural: 200
- type: MovementSpeedModifier
baseWalkSpeed: 2
baseSprintSpeed: 3
- type: Damageable
damageModifierSet: MediumArmorSyndi
- type: CanMoveInAir
- type: MovementAlwaysTouching
- type: Repairable
fuelCost: 30
doAfterDelay: 20
- type: Reflect
reflectProb: 0.35
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
450: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechRoverSyndieBattery
parent: MechRoverSyndie
suffix: Battery
components:
- type: ContainerFill
containers:
mech-battery-slot:
- PowerCageHigh
- type: entity
id: MechRoverSyndieFilled
parent: MechRoverSyndieBattery
suffix: Battery, Filled
components:
- type: Mech
startingEquipment:
- WeaponMechChainSword
- WeaponMechCombatMissileRack8
# Mauler
- type: entity
@ -845,7 +1220,6 @@
brokenState: mauler-broken
mechToPilotDamageMultiplier: 0.1
airtight: true
maxIntegrity: 500
maxEquipmentAmount: 5
pilotWhitelist:
components:
@ -868,9 +1242,18 @@
fuelCost: 50
doAfterDelay: 25
- type: Reflect
reflectProb: 0.35
reflectProb: 0.45
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
500: Critical
showOverlays: false
allowRevives: true
- type: entity
id: MechMaulerSyndieBattery
@ -890,7 +1273,4 @@
- type: Mech
startingEquipment:
- WeaponMechChainSword
- WeaponMechCombatUltraRifle
- WeaponMechCombatShotgun
- WeaponMechCombatMissileRack6
- WeaponMechCombatTeslaCannon
- WeaponMechCombatMissileRack6

View file

@ -88,6 +88,9 @@
solutions:
hypospray:
maxVol: 3000
- type: Hypospray
onlyAffectsMobs: false
pierceArmor: true
- type: UseDelay
delay: 0.0
@ -116,6 +119,7 @@
transferAmount: 15
onlyAffectsMobs: false
injectOnly: true
pierceArmor: true
- type: Appearance
- type: SolutionContainerVisuals
maxFillLevels: 1

View file

@ -199,8 +199,9 @@
- type: Healing
delay: 1
damageContainers:
- Synth
- Synth #Sunrise-edit
- Silicon
- Mech #Sunrise-edit
damage:
types:
Heat: -5

View file

@ -361,6 +361,7 @@
- DeviceQuantumSpinInverter
- EnergyDomeDirectionalTurtle
# Sunrise-start
- MechPhasicScanningModule
- HandCraftedNVD
- BasicNVD
- PowerCageHigh
@ -527,6 +528,9 @@
- GygaxCentralElectronics
- GygaxPeripheralsElectronics
- GygaxTargetingElectronics
- PhazonCentralElectronics
- PhazonPeripheralsElectronics
- PhazonTargetingElectronics
- DurandCentralElectronics
- DurandPeripheralsElectronics
- DurandTargetingElectronics
@ -721,6 +725,13 @@
- GygaxLLeg
- GygaxRArm
- GygaxRLeg
- PhazonHarness
- PhazonArmor
- PhazonHead
- PhazonLArm
- PhazonLLeg
- PhazonRArm
- PhazonRLeg
- MechEquipmentDrill
- MechEquipmentDrillDiamond
- MechEquipmentKineticAccelerator

View file

@ -29,6 +29,7 @@
- type: Tag
tags:
- ForceableFollow
- AnomalyCore #Sunrise-edit
- type: AnomalyCore
timeToDecay: 600
startPrice: 10000

View file

@ -84,11 +84,11 @@
key: "enum.MechAssemblyVisuals.State"
data: 10
- component: PowerCell
name: power cell
- tag: PowerCage
name: power cage
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -97,11 +97,11 @@
key: "enum.MechAssemblyVisuals.State"
data: 11
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -97,11 +97,11 @@
key: "enum.MechAssemblyVisuals.State"
data: 11
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -70,11 +70,11 @@
#i omitted the steps involving inserting machine parts because
#currently mechs don't support upgrading. add them back in once that's squared away.
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -67,11 +67,11 @@
#i omitted the steps involving inserting machine parts because
#currently mechs don't support upgrading. add them back in once that's squared away.
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -0,0 +1,215 @@
- type: constructionGraph
id: Phazon
start: start
graph:
- node: start
edges:
- to: phazon
steps:
- tool: Anchoring
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 1
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 2
- material: Cable
amount: 4
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 3
- tool: Cutting
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 4
- tag: PhazonCentralControlModule
name: phazon central control module
icon:
sprite: "Objects/Misc/module.rsi"
state: "mainboard"
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 5
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 6
- tag: PhazonPeripheralsControlModule
name: phazon peripherals control module
icon:
sprite: "Objects/Misc/module.rsi"
state: id_mod
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 7
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 8
- tag: PhazonTargetingControlModule
name: phazon weapon control and targeting module
icon:
sprite: "Objects/Misc/module.rsi"
state: mcontroller
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 9
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 10
- tag: MechPhasicScanningModule
name: phasic scanning module
icon:
sprite: "Objects/Specific/Mech/mecha_equipment.rsi"
state: triphasic_scan_module
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 11
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 12
- tag: CapacitorStockPart
name: capacitor
icon:
sprite: Objects/Misc/stock_parts.rsi
state: capacitor
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 13
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 14
- tag: AnomalyCore
name: any anomaly core
icon:
sprite: "Structures/Specific/Anomalies/Cores/gravity_core.rsi"
state: core
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 15
- tag: PowerCage
name: power cage
store: battery-container
icon:
sprite: Objects/Power/power_cages.rsi
state: small
- material: Cable
amount: 4
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 16
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 17
- material: Plasteel
amount: 5
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 18
- tool: Anchoring
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 19
- tool: Welding
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 20
- tag: MechAirTank
name: exosuit air tank
icon:
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_air_tank
- tool: Anchoring
doAfter: 1
- tag: MechThruster
name: exosuit thruster
icon:
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_bin
- tool: Anchoring
doAfter: 1
- tag: PhazonArmor
name: phazon armor plates
icon:
sprite: "Objects/Specific/Mech/phazon_construction.rsi"
state: phazon_armor
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 21
- tool: Anchoring
doAfter: 2
completed:
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 22
- tool: Welding
doAfter: 1
- node: phazon
actions:
- !type:BuildMech
mechPrototype: MechPhazon

View file

@ -70,11 +70,11 @@
#i omitted the steps involving inserting machine parts because
#currently mechs don't support upgrading. add them back in once that's squared away.
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -67,11 +67,11 @@
key: "enum.MechAssemblyVisuals.State"
data: 8
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
completed:
- !type:VisualizerDataInt

View file

@ -15,11 +15,11 @@
- !type:VisualizerDataInt
key: "enum.MechAssemblyVisuals.State"
data: 1
- component: PowerCell
name: step-powercell-name
- tag: PowerCage
name: step-powercage-name
store: battery-container
icon:
sprite: Objects/Power/power_cells.rsi
sprite: Objects/Power/power_cages.rsi
state: small
- tool: Screwing
doAfter: 1

View file

@ -72,6 +72,10 @@
- type: latheCategory
id: Durand
name: lathe-category-mechs-durand
- type: latheCategory
id: Phazon
name: lathe-category-mechs-phazon
- type: latheCategory
id: MechEquipment

View file

@ -377,6 +377,21 @@
parent: BaseGoldCircuitboardRecipe
id: GygaxTargetingElectronics
result: GygaxTargetingElectronics
- type: latheRecipe
parent: BaseGoldCircuitboardRecipe
id: PhazonCentralElectronics
result: PhazonCentralElectronics
- type: latheRecipe
parent: BaseGoldCircuitboardRecipe
id: PhazonPeripheralsElectronics
result: PhazonPeripheralsElectronics
- type: latheRecipe
parent: BaseGoldCircuitboardRecipe
id: PhazonTargetingElectronics
result: PhazonTargetingElectronics
- type: latheRecipe
parent: BaseSilverCircuitboardRecipe

View file

@ -340,6 +340,72 @@
materials:
Steel: 500
Glass: 200
#Phazon
- type: latheRecipe
id: PhazonHarness
result: PhazonHarness
category: Phazon
completetime: 10
materials:
Steel: 2500
Glass: 2000
- type: latheRecipe
id: PhazonArmor
result: PhazonArmorPlate
category: Phazon
completetime: 10
materials:
Steel: 3000
Plasma: 1000
- type: latheRecipe
id: PhazonHead
result: PhazonHead
category: Phazon
completetime: 10
materials:
Steel: 1500
Glass: 250
Plasma: 500
- type: latheRecipe
id: PhazonLArm
result: PhazonLArm
category: Phazon
completetime: 10
materials:
Steel: 1100
Plasma: 250
- type: latheRecipe
id: PhazonLLeg
result: PhazonLLeg
category: Phazon
completetime: 10
materials:
Steel: 1100
Plasma: 250
- type: latheRecipe
id: PhazonRLeg
result: PhazonRLeg
category: Phazon
completetime: 10
materials:
Steel: 1100
Plasma: 250
- type: latheRecipe
id: PhazonRArm
result: PhazonRArm
category: Phazon
completetime: 10
materials:
Steel: 1100
Plasma: 250
# Equipment
@ -409,6 +475,16 @@
Bananium: 300
# Misc
- type: latheRecipe
id: MechPhasicScanningModule
result: MechPhasicScanningModule
category: MechEquipment
completetime: 10
materials:
Steel: 2000
Glass: 500
Silver: 100
- type: latheRecipe
id: MechAirTank
result: MechAirTank

View file

@ -127,6 +127,30 @@
# Tier 3
- type: technology
id: Phazon
name: research-technology-phazon
icon:
sprite: Objects/Specific/Mech/mecha.rsi
state: phazon
discipline: Experimental
tier: 3
cost: 20000
recipeUnlocks:
- MechPhasicScanningModule
- PhazonHarness
- PhazonArmor
- PhazonHead
- PhazonLArm
- PhazonLLeg
- PhazonRArm
- PhazonRLeg
- PhazonCentralElectronics
- PhazonPeripheralsElectronics
- PhazonTargetingElectronics
technologyPrerequisites:
- Ripley2
- type: technology
id: GravityManipulation
name: research-technology-gravity-manipulation

View file

@ -107,7 +107,7 @@
id: RipleyAPLU
name: research-technology-ripley-aplu
icon:
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/ripley.rsi
state: ripley
discipline: Industrial
tier: 1
@ -190,7 +190,7 @@
id: Ripley2
name: research-technology-ripley-mkii
icon:
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/ripley.rsi
state: ripleymkii
discipline: Industrial
tier: 2
@ -205,7 +205,7 @@
id: Clarke
name: research-technology-clarke
icon:
sprite: Objects/Specific/Mech/mecha.rsi
sprite: Objects/Specific/Mech/clarke.rsi
state: clarke
discipline: Industrial
tier: 2

View file

@ -77,22 +77,22 @@
- type: storeCategory
id: UplinkAllies
name: store-category-allies
priority: 8
priority: 9 #Sunrise-mechs
- type: storeCategory
id: UplinkJob
name: store-category-job
priority: 9
priority: 10 #Sunrise-mechs
- type: storeCategory
id: UplinkPointless
name: store-category-pointless
priority: 10
priority: 11 #Sunrise-mechs
- type: storeCategory
id: UplinkObjectives
name: store-category-objectives
priority: 11
priority: 12 #Sunrise-mechs
#revenant
- type: storeCategory

View file

@ -17,6 +17,7 @@
- UplinkJob
- UplinkPointless
- UplinkObjectives
- UplinkMechs #Sunrise-mechs
currencyWhitelist:
- Telecrystal
balance:

View file

@ -389,4 +389,200 @@
cost:
Telecrystal: 8
categories:
- UplinkChemicals
- UplinkChemicals
# Mechs
- type: listing
id: UplinkDarkGygax
name: uplink-mech-teleporter-assault-name
description: uplink-mech-teleporter-assault-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: darkgygax }
productEntity: CrateCybersunDarkGygaxBundle
cost:
Telecrystal: 65
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkRover
name: uplink-mech-teleporter-medium-name
description: uplink-mech-teleporter-medium-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: rover }
productEntity: CrateCybersunRoverBundle
cost:
Telecrystal: 75
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMauler
name: uplink-mech-teleporter-heavy-name
description: uplink-mech-teleporter-heavy-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: mauler }
productEntity: CrateCybersunMaulerBundle
cost:
Telecrystal: 90
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
# Mechs equipment
- type: listing
id: UplinkMechImmolationGun
name: uplink-mech-equipment-immolation-gun-name
description: uplink-mech-equipment-immolation-gun-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_laser }
productEntity: WeaponMechCombatImmolationGun
cost:
Telecrystal: 7
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechTeslaCannon
name: uplink-mech-equipment-tesla-cannon-name
description: uplink-mech-equipment-tesla-cannon-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_wholegen }
productEntity: WeaponMechCombatTeslaCannon
cost:
Telecrystal: 15
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechShotgun
name: uplink-mech-equipment-shotgun-name
description: uplink-mech-equipment-shotgun-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_scatter }
productEntity: WeaponMechCombatShotgun
cost:
Telecrystal: 7
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechShotgunIncendiary
name: uplink-mech-equipment-shotgun-incendiary-name
description: uplink-mech-equipment-shotgun-incendiary-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_carbine }
productEntity: WeaponMechCombatShotgunIncendiary
cost:
Telecrystal: 12
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechUltraRifle
name: uplink-mech-equipment-ultra-rifle-name
description: uplink-mech-equipment-ultra-rifle-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_uac2 }
productEntity: WeaponMechCombatUltraRifle
cost:
Telecrystal: 10
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechIon
name: uplink-mech-equipment-ion-name
description: uplink-mech-equipment-ion-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_ion }
productEntity: WeaponMechCombatIon
cost:
Telecrystal: 12
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechAMLG90
name: uplink-mech-equipment-amlg90-name
description: uplink-mech-equipment-amlg90-desc
icon: { sprite: /Textures/Objects/Specific/Mech/mecha_equipment.rsi, state: mecha_amlg90 }
productEntity: WeaponMechCombatAMLG90
cost:
Telecrystal: 15
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechVindictor
name: uplink-mech-equipment-vindictor-name
description: uplink-mech-equipment-vindictor-desc
icon: { sprite: /Textures/_Sunrise/Objects/Specific/Mech/mecha_vindictor.rsi, state: mecha_vindictor }
productEntity: WeaponMechCombatVindictor
cost:
Telecrystal: 30
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
- type: listing
id: UplinkMechUVM31
name: uplink-mech-equipment-uvm31-name
description: uplink-mech-equipment-uvm31-desc
icon: { sprite: /Textures/_Sunrise/Objects/Specific/Mech/mecha_uvm31.rsi, state: mecha_uvm31 }
productEntity: WeaponMechCombatUVM31
cost:
Telecrystal: 20
categories:
- UplinkMechs
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink

View file

@ -6,3 +6,12 @@
- Heat
- Shock
- Caustic
- type: damageContainer
id: Mech
supportedGroups:
- Brute
supportedTypes:
- Heat
- Shock
- Caustic

View file

@ -126,6 +126,7 @@
- CanPilot
- FootstepSound
- DoorBumpOpener
- NoInjectable
- type: CollectiveMind
minds:
- Xeno

View file

@ -226,6 +226,82 @@
id: HandheldRoboAnalyzerUnpowered
parent: BaseHandheldRoboAnalyzer
suffix: Handheld, Unpowered
# Handheld Mech Analyzer
- type: entity
id: BaseHandheldMechAnalyzer
parent: BaseItem
name: mech analyzer
description: A hand-held mech scaner.
abstract: true
components:
- type: Sprite
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_analyzer
layers:
- state: mecha_analyzer
- state: mecha_analyzer_anim
shader: unshaded
visible: true
map: [ "enum.PowerDeviceVisualLayers.Powered" ]
- type: Item
storedRotation: -90
- type: ActivatableUI
key: enum.HealthAnalyzerUiKey.Key
- type: UserInterface
interfaces:
enum.HealthAnalyzerUiKey.Key:
type: HealthAnalyzerBoundUserInterface
- type: HealthAnalyzer
scanningEndSound:
path: "/Audio/Items/Medical/healthscanner.ogg"
damageContainers:
- Mech
- type: Tag
tags:
- DiscreteHealthAnalyzer
- type: Appearance
- type: GenericVisualizer
visuals:
enum.PowerCellSlotVisuals.Enabled:
enum.PowerDeviceVisualLayers.Powered:
True: { visible: true }
False: { visible: false }
- type: GuideHelp
guides:
- Robotics
- type: entity
id: HandheldMechAnalyzer
parent:
- BaseHandheldMechAnalyzer
- BaseHandheldComputer
suffix: HandHeld, Powered
- type: entity
id: HandheldMechAnalyzerEmpty
parent: HandheldMechAnalyzer
suffix: HandHeld, Empty
components:
- type: Sprite
sprite: Objects/Specific/Mech/mecha_equipment.rsi
state: mecha_analyzer
layers:
- state: mecha_analyzer
- state: mecha_analyzer_anim
shader: unshaded
visible: false
map: [ "enum.PowerDeviceVisualLayers.Powered" ]
- type: ItemSlots
slots:
cell_slot:
name: power-cell-slot-component-slot-name-default
- type: entity
id: HandheldMechAnalyzerUnpowered
parent: BaseHandheldMechAnalyzer
suffix: Handheld, Unpowered
# Handheld Camera

View file

@ -0,0 +1,434 @@
# Base Paints
- type: entity
parent: BaseItem
id: MechPaintBase
name: mech spray paint
description: A tin of mech spray paint.
categories: [ HideSpawnMenu ]
components:
- type: Appearance
- type: Sprite
sprite: Objects/Fun/spraycans.rsi
state: clown_cap
layers:
- state: clown_cap
map: ["enum.OpenableVisuals.Layer"]
- type: MechPaint
used: false
whitelist:
tags:
- Gygax
baseState: gygax
openState: gygax-open
brokenState: gygax-broken
- type: Item
sprite: Objects/Fun/spraycans.rsi
heldPrefix: spray
- type: SolutionContainerManager
solutions:
drink:
maxVol: 50
reagents:
- ReagentId: SpaceGlue
Quantity: 50
- type: TrashOnSolutionEmpty
solution: drink
- type: Sealable
- type: Openable
sound:
path: /Audio/Effects/pop_high.ogg
closeable: true
closeSound:
path: /Audio/Effects/pop_high.ogg
# Paints
# Ripley-Aluminizer
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Aluminizer
id: MechPaintClarkeOrangey
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: aluminizer-cap
layers:
- state: aluminizer-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: aluminizer
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: aluminizer
openState: aluminizer-open
brokenState: aluminizer-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "aluminizer"}
False: {state: "aluminizer-cap"}
# Ripley-Combat Ripley
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Combat Ripley
id: MechPaintRipleyCombatRipley
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: combat-ripley-cap
layers:
- state: combat-ripley-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: combat-ripley
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: combatripley
openState: combatripley-open
brokenState: combatripley-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "combat-ripley"}
False: {state: "combat-ripley-cap"}
# Ripley-Firestarter
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Firestarter
id: MechPaintRipleyFirestarter
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: firestarter-cap
layers:
- state: firestarter-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: firestarter
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: ripley_flames_red
openState: ripley_flames_red-open
brokenState: ripley_flames_red-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "firestarter"}
False: {state: "firestarter-cap"}
# Ripley-Hauler
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Hauler
id: MechPaintRipleyHauler
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: hauler-cap
layers:
- state: hauler-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: hauler
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: hauler
openState: hauler-open
brokenState: hauler-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "hauler"}
False: {state: "hauler-cap"}
# Ripley-Reaper
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Reaper
id: MechPaintRipleyReaper
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: reaper-cap
layers:
- state: reaper-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: reaper
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: deathripley
openState: deathripley-open
brokenState: deathripley-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "reaper"}
False: {state: "reaper-cap"}
# Ripley-Zairjah
- type: entity
parent: MechPaintBase
suffix: DEBUG, Ripley, Zairjah
id: MechPaintRipleyZairjah
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
state: zairjah-cap
layers:
- state: zairjah-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/ripley.rsi
heldPrefix: zairjah
- type: MechPaint
used: false
whitelist:
tags:
- Ripley
baseState: ripley_zairjah
openState: ripley_zairjah-open
brokenState: ripley_zairjah-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "zairjah"}
False: {state: "zairjah-cap"}
# Clarke-Orangey
- type: entity
parent: MechPaintBase
suffix: DEBUG, Clarke, Orangey
id: MechPaintClarkeOrangey
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/clarke.rsi
state: orangey-cap
layers:
- state: orangey-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/clarke.rsi
heldPrefix: orangey
- type: MechPaint
used: false
whitelist:
tags:
- Clarke
baseState: orangey
openState: orangey-open
brokenState: orangey-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "orangey"}
False: {state: "orangey-cap"}
# Gygax-Molot
- type: entity
parent: MechPaintBase
suffix: DEBUG, Gygax, Molot
id: MechPaintGygaxMolot
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/gygax.rsi
state: pobeda-cap
layers:
- state: pobeda-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/gygax.rsi
heldPrefix: pobeda
- type: MechPaint
used: false
whitelist:
tags:
- Gygax
baseState: molot
openState: molot-open
brokenState: molot-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "pobeda"}
False: {state: "pobeda-cap"}
#Gygax-Old
- type: entity
parent: MechPaintBase
suffix: DEBUG, Gygax, Old
id: MechPaintGygaxOld
components:
- type: Sprite
sprite: Objects/Fun/spraycans.rsi
layers:
- state: spray
map: ["Base"]
- state: spray_cap_colors
map: ["enum.OpenableVisuals.Layer"]
color: "#ed5f3b"
- type: MechPaint
used: false
whitelist:
tags:
- Gygax
baseState: gygax_alt
openState: gygax_alt-open
brokenState: gygax_alt-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "spray_colors" , color: "#ed5f3b"}
False: {state: "spray_cap_colors" , color: "#ed5f3b"}
#Durand-Unathi
- type: entity
parent: MechPaintBase
suffix: DEBUG, Durand, Unathi
id: MechPaintDurandUnathi
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
layers:
- state: kharn-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
heldPrefix: kharn
- type: MechPaint
used: false
whitelist:
tags:
- Durand
baseState: unathi
openState: unathi-open
brokenState: unathi-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "kharn"}
False: {state: "kharn-cap"}
#Durand-Shire
- type: entity
parent: MechPaintBase
suffix: DEBUG, Durand , Shire
id: MechPaintDurandShire
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
layers:
- state: shire-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
heldPrefix: shire
- type: MechPaint
used: false
whitelist:
tags:
- Durand
baseState: shire
openState: shire-open
brokenState: shire-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "shire"}
False: {state: "shire-cap"}
#Durand-Dollhouse
- type: entity
parent: MechPaintBase
suffix: DEBUG, Durand , Dollhouse
id: MechPaintDurandDollhouse
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
layers:
- state: dollhouse-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
heldPrefix: dollhouse
- type: MechPaint
used: false
whitelist:
tags:
- Durand
baseState: dollhouse
openState: dollhouse-open
brokenState: dollhouse-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "dollhouse"}
False: {state: "dollhouse-cap"}
#Durand-Executor
- type: entity
parent: MechPaintBase
suffix: DEBUG, Durand , Executor
id: MechPaintDurandExecutor
components:
- type: Sprite
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
layers:
- state: executioner-cap
map: ["enum.OpenableVisuals.Layer"]
- type: Item
sprite: _Sunrise/Objects/Fun/mech_spraycans/durand.rsi
heldPrefix: executioner
- type: MechPaint
used: false
whitelist:
tags:
- Durand
baseState: executor
openState: executor-open
brokenState: executor-broken
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "executioner"}
False: {state: "executioner-cap"}

View file

@ -122,6 +122,7 @@
solutionName: hypospray
transferAmount: 10
onlyAffectsMobs: false
injectOnly: true
- type: UseDelay
delay: 0.5
# - type: HiddenDescription

View file

@ -10,7 +10,7 @@
- type: Gun
minAngle: -25
maxAngle: 25
fireRate: 8
fireRate: 6
selectedMode: FullAuto
availableModes:
- FullAuto
@ -18,7 +18,7 @@
path: /Audio/_Sunrise/Weapons/Guns/HMGs/minigun_shot.ogg
- type: ProjectileBatteryAmmoProvider
proto: CartridgeLightRifle
fireCost: 50
fireCost: 30
- type: Appearance
- type: AmmoCounter
@ -44,7 +44,7 @@
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
- type: ProjectileBatteryAmmoProvider
proto: BulletEnergyGunLaser
fireCost: 20
proto: BulletSyndiPlasma2
fireCost: 25
- type: Appearance
- type: AmmoCounter

View file

@ -1,27 +1,26 @@
- type: entity
id: MechMolot
parent: [ BaseMech, CombatMech ]
name: Molot M-1
description: A heavy mech designed by the SSSP to operate in aggressive, unaccepted environments. It has 4 weapon mounts on board, oxygen maintenance in the cockpit.
id: MechSecPod
parent: [ BaseMech, CombatMech, BaseRestrictedContraband ]
name: Security Pod
description: While lightly armored, the Gygax has incredible mobility thanks to its ability that lets it smash through walls at high speeds.
components:
- type: Sprite
drawdepth: Mobs
noRot: true
sprite: _Sunrise/Objects/Specific/Mech/mecha.rsi
sprite: _Sunrise/Objects/Specific/Mech/sec_pod.rsi
scale: 1.08, 1.08
layers:
- map: [ "enum.MechVisualLayers.Base" ]
state: molot
state: sec_pod
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Mecha/sound_mecha_powerloader_step.ogg
- type: Mech
baseState: molot
openState: molot-open
brokenState: molot-broken
mechToPilotDamageMultiplier: 0.1
baseState: sec_pod
openState: sec_pod
brokenState: sec_pod
mechToPilotDamageMultiplier: 0.3
airtight: true
maxIntegrity: 700
maxEquipmentAmount: 4
pilotWhitelist:
components:
- HumanoidAppearance
@ -30,41 +29,22 @@
attackRate: 1
damage:
types:
Blunt: 40
Structural: 200
Blunt: 0
Structural: 0
- type: MovementSpeedModifier
baseWalkSpeed: 2
baseSprintSpeed: 2.5
- type: Damageable
damageModifierSet: HeavyArmorNT
- type: CanMoveInAir
- type: MovementAlwaysTouching
- type: Repairable
fuelCost: 30
doAfterDelay: 15
baseWalkSpeed: 2.5
baseSprintSpeed: 3
- type: Reflect
reflectProb: 0.3
reflectProb: 0.25
spread: 180
soundOnReflect: /Audio/Weapons/block_metal1.ogg
reflects:
- NonEnergy
- type: entity
id: MechMolotBattery
parent: MechMolot
suffix: Battery
components:
- type: ContainerFill
containers:
mech-battery-slot:
- PowerCageHigh
- type: entity
id: MechMolotFilled
parent: MechMolotBattery
suffix: Battery, Filled
components:
- type: Mech
startingEquipment:
- WeaponMechChainSword
- WeaponMechCombatPulseRifle
- WeaponMechCombatUltraRifle
- WeaponMechCombatMissileRack8
- type: MobThresholds
currentThresholdState : Alive
thresholds:
0: Alive
300: Critical
showOverlays: false
allowRevives: true
- type: Tag

View file

@ -42,7 +42,6 @@
- type: Sprite
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_glass_airlock.rsi
snapCardinals: false
scale: 1.5,1
offset: 0,0
- type: Fixtures
fixtures:

View file

@ -113,4 +113,11 @@
- type: currency
id: DiseasePoints
displayName: shop-disease-currency
canWithdraw: false
canWithdraw: false
#uplink categoires
- type: storeCategory
id: UplinkMechs
name: store-category-mechs
priority: 8

View file

@ -5,18 +5,19 @@
- type: Store
name: store-preset-name-uplink
categories:
- UplinkWeaponrySilent
- UplinkWeaponry
- UplinkAmmoSilent
- UplinkExplosivesSilent
- UplinkExplosives
- UplinkChemicals
- UplinkDeception
- UplinkDisruptionSilent
- UplinkDisruption
- UplinkImplants
- UplinkAllies
- UplinkWearablesSilent
- UplinkWearables
- UplinkJob
- UplinkPointless
- UplinkObjectives
- UplinkMechs #Sunrise-mechs
currencyWhitelist:
- Telecrystal
balance:

View file

@ -3,6 +3,9 @@
- type: Tag
id: IgnoreMelee
- type: Tag
id: NoInjectable
- type: Tag
id: Nanopaste
@ -33,6 +36,9 @@
- type: Tag
id: SyndieAgentUplink
- type: Tag
id: AnomalyCore
# Catridges:
@ -158,3 +164,20 @@
- type: Tag
id: Board
# Mechs
- type: Tag
id: Ripley
- type: Tag
id: Clarke
- type: Tag
id: Gygax
- type: Tag
id: Durand
- type: Tag
id: Phazon

View file

@ -808,6 +808,33 @@
- type: Tag
id: GygaxRLeg
- type: Tag
id: PhazonArmor
- type: Tag
id: PhazonCentralControlModule
- type: Tag
id: PhazonPeripheralsControlModule
- type: Tag
id: PhazonTargetingControlModule
- type: Tag
id: PhazonHead
- type: Tag
id: PhazonLArm
- type: Tag
id: PhazonLLeg
- type: Tag
id: PhazonRArm
- type: Tag
id: PhazonRLeg
- type: Tag
id: HudMedical
@ -1049,6 +1076,9 @@
- type: Tag
id: MechThruster
- type: Tag
id: MechPhasicScanningModule
- type: Tag
id: Medal

View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -0,0 +1,75 @@
{
"copyright" : "Taken from https://github.com/tgstation/tgstation at at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, hamtr made by brainfood1183 (github)",
"license" : "CC-BY-SA-3.0",
"version": 1,
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "clarke",
"directions": 4,
"delays": [
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
]
]
},
{
"name": "clarke-open"
},
{
"name": "clarke-broken"
},
{
"name": "orangey",
"directions": 4,
"delays": [
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
],
[
0.1,
0.05,
0.05
]
]
},
{
"name": "orangey-open"
},
{
"name": "orangey-broken"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Some files were not shown because too many files have changed in this diff Show more