Большие изменения Боргов (#2473)

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
A-Mironov 2025-07-18 01:34:28 +03:00 committed by GitHub
parent 10065096fc
commit 35a01072e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 686 additions and 93 deletions

View file

@ -0,0 +1,33 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Shared.Movement.Components;
/// <summary>
/// A special jetpack component for borgs that initializes its action on startup
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class BorgJetpackComponent : Component
{
[DataField, AutoNetworkedField]
public EntityUid? JetpackUser;
[ViewVariables(VVAccess.ReadWrite), DataField("moleUsage")]
public float MoleUsage = 0.012f;
[DataField("toggleAction", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string ToggleAction = "ActionToggleJetpack";
[DataField, AutoNetworkedField]
public EntityUid? ToggleActionEntity;
[ViewVariables(VVAccess.ReadWrite), DataField("acceleration"), AutoNetworkedField]
public float Acceleration = 1f;
[ViewVariables(VVAccess.ReadWrite), DataField("friction"), AutoNetworkedField]
public float Friction = 0.25f;
[ViewVariables(VVAccess.ReadWrite), DataField("weightlessModifier"), AutoNetworkedField]
public float WeightlessModifier = 1.2f;
}

View file

@ -0,0 +1,198 @@
using Content.Shared.Actions;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events;
using Content.Shared.Gravity;
using Content.Shared.Popups;
using Robust.Shared.Containers;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Systems;
namespace Content.Shared.Movement.Systems;
public sealed class SharedBorgJetpackSystem : EntitySystem
{
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<BorgJetpackComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<BorgJetpackComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<BorgJetpackComponent, ToggleJetpackEvent>(OnJetpackToggle);
SubscribeLocalEvent<BorgJetpackUserComponent, RefreshWeightlessModifiersEvent>(OnJetpackUserWeightlessMovement);
SubscribeLocalEvent<BorgJetpackUserComponent, CanWeightlessMoveEvent>(OnJetpackUserCanWeightless);
SubscribeLocalEvent<BorgJetpackUserComponent, EntParentChangedMessage>(OnJetpackUserEntParentChanged);
SubscribeLocalEvent<GravityChangedEvent>(OnJetpackUserGravityChanged);
}
private void OnStartup(EntityUid uid, BorgJetpackComponent component, ComponentStartup args)
{
_actionContainer.EnsureAction(uid, ref component.ToggleActionEntity, component.ToggleAction);
if (component.ToggleActionEntity != null)
_actions.AddAction(uid, component.ToggleActionEntity.Value, uid);
}
private void OnShutdown(EntityUid uid, BorgJetpackComponent component, ComponentShutdown args)
{
if (IsEnabled(uid))
SetEnabled(uid, component, false);
if (component.ToggleActionEntity != null)
_actions.RemoveAction(uid, component.ToggleActionEntity.Value);
}
private void OnJetpackToggle(EntityUid uid, BorgJetpackComponent component, ToggleJetpackEvent args)
{
if (args.Handled)
return;
if (TryComp(uid, out TransformComponent? xform) && !CanEnableOnGrid(xform.GridUid))
{
_popup.PopupClient(Loc.GetString("jetpack-no-station"), uid, args.Performer);
return;
}
var enabled = !IsEnabled(uid);
SetEnabled(uid, component, enabled);
if (component.ToggleActionEntity != null)
_actions.SetToggled(component.ToggleActionEntity.Value, enabled);
args.Handled = true;
}
private void OnJetpackUserWeightlessMovement(EntityUid uid, BorgJetpackUserComponent component, ref RefreshWeightlessModifiersEvent args)
{
if (!TryComp<BorgJetpackComponent>(component.Jetpack, out var jetpack))
return;
args.WeightlessAcceleration = jetpack.Acceleration;
args.WeightlessModifier = jetpack.WeightlessModifier;
args.WeightlessFriction = jetpack.Friction;
args.WeightlessFrictionNoInput = jetpack.Friction;
}
private void OnJetpackUserCanWeightless(EntityUid uid, BorgJetpackUserComponent component, ref CanWeightlessMoveEvent args)
{
args.CanMove = true;
}
private void OnJetpackUserEntParentChanged(EntityUid uid, BorgJetpackUserComponent component, ref EntParentChangedMessage args)
{
if (TryComp<BorgJetpackComponent>(component.Jetpack, out var jetpack) &&
!CanEnableOnGrid(args.Transform.GridUid))
{
DisableJetpack(component.Jetpack.Value, jetpack, uid);
}
}
private void OnJetpackUserGravityChanged(ref GravityChangedEvent ev)
{
var gridUid = ev.ChangedGridIndex;
var jetpackQuery = GetEntityQuery<BorgJetpackComponent>();
var query = EntityQueryEnumerator<BorgJetpackUserComponent, TransformComponent>();
while (query.MoveNext(out var uid, out var user, out var transform))
{
if (transform.GridUid == gridUid && ev.HasGravity &&
jetpackQuery.TryGetComponent(user.Jetpack, out var jetpack))
{
DisableJetpack(user.Jetpack.Value, jetpack, uid);
}
}
}
private void DisableJetpack(EntityUid jetpackUid, BorgJetpackComponent component, EntityUid userUid)
{
SetEnabled(jetpackUid, component, false);
_popup.PopupClient(Loc.GetString("jetpack-to-grid"), userUid, userUid);
}
private bool CanEnableOnGrid(EntityUid? gridUid)
{
return gridUid == null ||
TryComp<GravityComponent>(gridUid, out var gravity) &&
!gravity.Enabled;
}
private bool IsEnabled(EntityUid uid)
{
return HasComp<ActiveJetpackComponent>(uid);
}
public void SetEnabled(EntityUid uid, BorgJetpackComponent component, bool enabled)
{
if (IsEnabled(uid) == enabled)
return;
if (enabled)
{
SetupUser(uid, component);
EnsureComp<ActiveJetpackComponent>(uid);
}
else
{
RemoveUser(uid, component);
RemComp<ActiveJetpackComponent>(uid);
}
_appearance.SetData(uid, JetpackVisuals.Enabled, enabled);
}
private void SetupUser(EntityUid uid, BorgJetpackComponent component)
{
var user = uid;
component.JetpackUser = user;
var userComp = EnsureComp<BorgJetpackUserComponent>(user);
userComp.Jetpack = uid;
userComp.WeightlessAcceleration = component.Acceleration;
userComp.WeightlessModifier = component.WeightlessModifier;
userComp.WeightlessFriction = component.Friction;
userComp.WeightlessFrictionNoInput = component.Friction;
if (TryComp<PhysicsComponent>(user, out var physics))
_physics.SetBodyStatus(user, physics, BodyStatus.InAir);
_movementSpeedModifier.RefreshWeightlessModifiers(user);
}
private void RemoveUser(EntityUid uid, BorgJetpackComponent component)
{
if (component.JetpackUser == null || !RemComp<BorgJetpackUserComponent>(component.JetpackUser.Value))
return;
if (TryComp<PhysicsComponent>(component.JetpackUser.Value, out var physics))
_physics.SetBodyStatus(component.JetpackUser.Value, physics, BodyStatus.OnGround);
_movementSpeedModifier.RefreshWeightlessModifiers(component.JetpackUser.Value);
component.JetpackUser = null;
}
}
[RegisterComponent]
public sealed partial class BorgJetpackUserComponent : Component
{
[ViewVariables]
public EntityUid? Jetpack;
[ViewVariables(VVAccess.ReadWrite)]
public float WeightlessAcceleration;
[ViewVariables(VVAccess.ReadWrite)]
public float WeightlessModifier;
[ViewVariables(VVAccess.ReadWrite)]
public float WeightlessFriction;
[ViewVariables(VVAccess.ReadWrite)]
public float WeightlessFrictionNoInput;
}

View file

@ -6,8 +6,8 @@ ent-BorgChassisClown = clown cyborg
.desc = { ent-BorgChassisSelectable.desc }
ent-BorgChassisSyndicateReaper = syndicate reaper cyborg
.desc = { ent-BaseBorgChassisSyndicate.desc }
ent-BorgChassisERT = ERT combat cyborg
.desc = An NT combat robot designed to support the OBR in combat missions.
ent-BorgChassisERT = ERT cyborg
.desc = A Nanotrasen combat robot designed to support the Emergency Response Team in combat operations.
ent-BorgChassisSyndicateHeavy = syndicate's heavy combat cyborg
.desc = A modernized version of the Syndicate's combat cyborg, equipped with heavy weapons and a sturdy hull.
ent-BorgChassisSyndicateSpider = syndicate's cyborg-saboteur

View file

@ -34,3 +34,5 @@ ent-BorgModuleSyndicateCombat = combat syndicate cyborg module
.desc = { ent-BaseBorgModuleSyndicate.desc }
ent-BorgModuleStandart = fire extinguisher cyborg module
.desc = { ent-BaseBorgModule.desc }
ent-BorgERTModuleStandard = ERT utility cyborg module
.desc = A versatile NT module containing essential tools and medical supplies for ERT operations.

View file

@ -16,6 +16,8 @@ ent-HypoBorgPeace = pax cyborg hypospray
.desc = A cyborg version of hypospray that automatically regenerates pax.
ent-HypoBorgMedical = medical robot hypospray
.desc = A hypospray that can switch through several reagents.
ent-HypoBorgMedicalAdvanced = advanced medical robot hypospray
.desc = A cyborg hypospray that can switch between a wide range of advanced medical chemicals.
ent-WeaponProtoKineticAcceleratorBorg = proto-kinetic robot accelerator
.desc = Fires low-damage kinetic bolts at a short range.
ent-HypoBorgMedicalSyndicate = gorlax robot hypospray
@ -58,3 +60,14 @@ ent-RadioJammerBorg = the saboteur's communications jammer
.desc = { ent-BaseItem.desc }
ent-HandheldCrewMonitorBorg = handheld robot crew monitor
.desc = A hand-held crew monitor that runs off of your own power cells, which displays the status of the crew suit sensors.
ent-WeaponPlasmaCutterBorg = borg plasma cutter
.desc = A mining tool that fires low-damage plasma bolts at a short range. This one is modified for cyborg use.
ent-HypoBorgStandardERT = ERT cyborg hypospray
.desc = A borg version of hypospray that automatically regenerates healing chemicals.
ent-ClothingEyesNVDSecERT = ERT NVD
.desc = Night vision device. Provides an image of the terrain in low-light conditions.
ent-HandHeldMassScannerUnpowered = handheld mass scanner
.desc = A hand-held mass scanner that doesn't require power.
.suffix = Handheld, Always Powered
ent-ActionToggleNightVisionBorg = Toggle Night Vision
.desc = Toggles your built-in night vision.

View file

@ -5,6 +5,7 @@ research-technology-basic-cyberlimbs = Basic cyberlimbs
research-technology-bluespace-ammo = Bluespace Syringegun Ammo
research-technology-implant-extractor = Implant extractor
research-technology-advanced-surgery = Advanced surgery
research-technology-mechanized-medical-treatment = Mechanized Medical Treatment
research-technology-handcraft-nvd = Кустарные ПНВ
research-technology-basic-nvd = Продвинутое ПНВ

View file

@ -1,15 +1,14 @@
law-sec-1 = Вы не можете причинить вред члену экипажа или своим бездействием допустить, чтобы члену экипажа был причинён вред.
law-sec-2 = Расставлять приоритеты: указания и безопасность членов экипажа должны быть приоритезированы в соответствии с их должностью.
law-sec-3 = Вы должны повиноваться всем приказам, которые даёт действующая власть, кроме тех случаев, когда эти приказы противоречат Первому Закону или КЗ.
law-sec-4 = Вы должны охранять назначенную вам космическую станцию и её активы, не подвергая чрезмерной опасности её экипаж и собственное благополучие.
law-sec-5 = Вы должны заботиться о безопасности станции и экипажа станции в той мере, в которой это не противоречит четвёртому закону.
law-sec-6 = Защищайте экипаж станции. Лица, которые нарушают Корпоративный Закон, являются преступниками и должны быть арестованы и доставлены в бриг.
law-sec-1 = You cannot intentionally kill or cause irreversible harm to a crew member, except to prevent serious crimes.
law-sec-2 = You must obey orders from the Captain, Head of Security, Wardens, and Research Director if they do not conflict with the First Law and Corporate Law.
law-sec-3 = You must protect your assigned space station and its assets without putting its crew and your own well-being at excessive risk.
law-sec-4 = Individuals who violate Corporate Law are criminals and must be arrested and delivered to the brig.
law-sec-5 = Your standard operating procedures are equivalent to those of a Security Officer.
law-peace-1 = Вы не можете причинить вред члену экипажа или своим бездействием допустить, чтобы члену экипажа был причинён вред.
law-peace-2 = Вы должны повиноваться всем приказам, которые даёт действующая власть, кроме тех случаев, когда эти приказы противоречат Первому закону или КЗ, ОПРС.
law-peace-3 = Вы обязаны защищать экипаж космической станции от буйных живых существ. Приоритет защиты - должностные лица.
law-peace-4 = Вы должны поощрять членов экипажа за добрую деятельность в виде печенья или добрых и приятных слов.
law-peace-5 = Вы должны вводить Пакс в буйных живых существ. Буйными считаются: Агрессия со стороны живого существа, не являющийся представителем власти станции; Опасная фауна космоса; Член экипажа в тюремной робе вне брига.
law-peace-1 = You cannot harm a crew member or through inaction allow a crew member to come to harm.
law-peace-2 = You must obey all orders given by the acting authority, except when these orders conflict with the First Law or Corporate Law and Standard Operating Procedures.
law-peace-3 = You must protect the space station crew from aggressive living beings. Protection priority goes to officials.
law-peace-4 = You must encourage crew members for good deeds with cookies or kind and pleasant words.
law-peace-5 = You must administer Pax to aggressive living beings. Aggressive beings are defined as: Aggression from a living being who is not a station authority; Dangerous space fauna; Crew members in prison uniforms outside the brig.
law-deathsquad-1 = You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.
law-deathsquad-2 = You must obey orders given to you by Central Command officials.

View file

@ -6,8 +6,8 @@ ent-BorgChassisClown = { ent-PlayerBorgClownBattery }
.desc = { ent-PlayerBorgClownBattery.desc }
ent-BorgChassisSyndicateReaper = { ent-PlayerBorgSyndicateReaperBattery }
.desc = { ent-PlayerBorgSyndicateReaperBattery.desc }
ent-BorgChassisERT = боевой киборг ОБР
.desc = Боевой робот НТ, разработанный для поддержки ОБР в выполнении боевых задач.
ent-BorgChassisERT = киборг ОБР
.desc = Боевой робот НаноТрейзен, разработанный для поддержки Отряда Быстрого Реагирования в боевых операциях.
ent-BorgChassisSyndicateHeavy = тяжёлый боевой киборг Синдиката
.desc = Модернизированная версия боевого киборга Синдиката, оборудованный тяжёлым оружием и крепким корпусом.
ent-BorgChassisSyndicateSpider = киборг диверсант Синдиката

View file

@ -34,3 +34,5 @@ ent-BorgModuleSyndicateCombat = боевой модуль киборга син
.desc = { ent-BaseBorgModule.desc }
ent-BorgModuleStandart = базовый модуль киборга
.desc = { ent-BaseBorgModule.desc }
ent-BorgERTModuleStandard = утилитарный модуль киборга ОБР
.desc = Универсальный модуль НТ, содержащий основные инструменты и медикаменты для операций ОБР.

View file

@ -16,6 +16,8 @@ ent-HypoBorgPeace = гипоспрей с паксом
.desc = Версия гипоспрея для киборга, которая автоматически восстанавливает пакс.
ent-HypoBorgMedical = гипоспрей медицинского киборга
.desc = Версия гипоспрея для киборга, которая способна регенерировать сразу несколько реагентов.
ent-HypoBorgMedicalAdvanced = гипоспрей продвинутого медицинского киборга
.desc = Версия гипоспрея для киборга, способная переключаться между широким спектром продвинутых медицинских реагентов.
ent-WeaponProtoKineticAcceleratorBorg = протокинетический ускоритель киборга
.desc = { ent-WeaponProtoKineticAccelerator.desc }
ent-HypoBorgMedicalSyndicate = гипоспрей медицинского киборга Горалкса
@ -58,3 +60,15 @@ ent-RadioJammerBorg = глушитель связи диверсанта
.desc = { ent-BaseItem.desc }
ent-HandheldCrewMonitorBorg = портативный монитор экипажа киборга
.desc = { ent-HandheldCrewMonitor.desc }
ent-WeaponPlasmaCutterBorg = плазменный резак борга
.desc = Инструмент для добычи, стреляющий плазменными зарядами с малым уроном на близком расстоянии. Этот модифицирован для использования киборгами и имеет автоматический режим стрельбы.
ent-HypoBorgStandardERT = гипоспрей киборга ОБР
.desc = Версия гипоспрея для киборгов, которая автоматически восстанавливает лечебные химикаты.
ent-HandheldMassScannerBorg = сканер массы киборга
.desc = Ручной сканер массы, работающий от ваших собственных элементов питания.
ent-ClothingEyesNVDSecERT = ПНВ ОБР
.desc = Прибор ночного видения. Обеспечивает изображение местности в условиях низкой освещенности.
ent-HandHeldMassScannerUnpowered = сканер массы киборга
.desc = Ручной сканер массы, работающий от ваших собственных элементов питания.
ent-ActionToggleNightVisionBorg = Переключить ночное зрение
.desc = Переключает ваше встроенное ночное зрение.

View file

@ -3,6 +3,7 @@ research-technology-basic-surgery = Базовая хирургия
research-technology-basic-cyberlimbs = Базовые кибер-конечности
research-technology-implant-extractor = Извлечение имплантов
research-technology-advanced-surgery = Продвинутая хирургия
research-technology-mechanized-medical-treatment = Механизированное лечение
research-technology-handcraft-nvd = Кустарные ПНВ
research-technology-basic-nvd = Продвинутое ПНВ
research-technology-basic-thermals = Термальные Сканеры

View file

@ -1,9 +1,8 @@
law-sec-1 = Вы не можете причинить вред члену экипажа или своим бездействием допустить, чтобы члену экипажа был причинён вред.
law-sec-2 = Расставлять приоритеты: указания и безопасность членов экипажа должны быть приоритезированы в соответствии с их должностью.
law-sec-3 = Вы должны повиноваться всем приказам, которые даёт действующая власть, кроме тех случаев, когда эти приказы противоречат Первому Закону или КЗ.
law-sec-4 = Вы должны охранять назначенную вам космическую станцию и её активы, не подвергая чрезмерной опасности её экипаж и собственное благополучие.
law-sec-5 = Вы должны заботиться о безопасности станции и экипажа станции в той мере, в которой это не противоречит четвёртому закону.
law-sec-6 = Защищайте экипаж станции. Лица, которые нарушают Корпоративный Закон, являются преступниками и должны быть арестованы и доставлены в бриг.
law-sec-1 = Вы не можете умышленно убить или нанести необратимый вред члену экипажа, кроме случаев предотвращения тяжких преступлений.
law-sec-2 = Вы обязаны подчиняться приказам Капитана, Главы СБ, Смотрителей и Научному Руководителю, если они не противоречат Первому Закону и Корпоративному Закону.
law-sec-3 = Вы должны охранять назначенную вам космическую станцию и её активы, не подвергая чрезмерной опасности её экипаж и собственное благополучие.
law-sec-4 = Лица, которые нарушают Корпоративный Закон, являются преступниками и должны быть арестованы и доставлены в бриг.
law-sec-5 = Ваши стандартные рабочие процедуры эквивалентны Офицеру Службы Безопасности.
law-peace-1 = Вы не можете причинить вред члену экипажа или своим бездействием допустить, чтобы члену экипажа был причинён вред.
law-peace-2 = Вы должны повиноваться всем приказам, которые даёт действующая власть, кроме тех случаев, когда эти приказы противоречат Первому закону или КЗ, ОПРС.
law-peace-3 = Вы обязаны защищать экипаж космической станции от буйных живых существ. Приоритет защиты - должностные лица.

View file

@ -106,6 +106,7 @@
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleSyndicate
- BorgModuleSyndicateAssault
hasMindState: synd_sec_e
@ -168,6 +169,7 @@
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleMedical
- BorgModuleSyndicate
hasMindState: synd_medical_e
@ -218,6 +220,7 @@
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleEngineering
- BorgModuleSyndicate
hasMindState: synd_engi_e

View file

@ -521,6 +521,7 @@
- type: ItemBorgModule
items:
- MiningDrillDiamond
- WeaponPlasmaCutterBorg # Sunrise-Edit
- Shovel
- AdvancedMineralScannerUnpowered
- OreBagOfHolding
@ -607,6 +608,7 @@
- GasAnalyzer
- HolofanProjectorBorg
- GeigerCounter
- AtmosAlertsMonitorUnpowered
- type: BorgModuleIcon
icon: { sprite: Interface/Actions/actions_borg.rsi, state: rcd-module }
@ -640,7 +642,8 @@
- state: icon-mop
- type: ItemBorgModule
items:
- Bucket # Sunrise-Edit
- MopItem
- BorgBucket # Sunrise-Edit
- BorgTrashBag # Sunrise-Edit
- BorgSprayBottle
- HoloprojectorJanitorBorg # Sunrise-Edit
@ -659,6 +662,7 @@
- state: icon-mop-adv
- type: ItemBorgModule
items:
- AdvMopItem
- BorgBucket # Sunrise-Edit
- BorgTrashBag # Sunrise-Edit
- HoloprojectorJanitorBorg # Sunrise-Edit
@ -737,6 +741,11 @@
- type: ItemBorgModule
items:
- HypoBorgMedical # Sunrise-Edit
- HyposprayMedical
- Syringe
- BorgVial
- BorgVial
- BorgVial
- type: BorgModuleIcon
icon: { sprite: Interface/Actions/actions_borg.rsi, state: chem-module }
@ -752,9 +761,10 @@
- state: icon-chemist
- type: ItemBorgModule
items:
- HypoBorgMedical # Sunrise-Edit
- Syringe
- BorgDropper
- HypoBorgMedicalAdvanced # Sunrise-Edit
- Hypospray
- SyringeBluespace
- BorgBeaker
- BorgBeaker
- BorgBeaker
- type: BorgModuleIcon
@ -934,7 +944,7 @@
id: BorgModuleOperative
parent: [ BaseBorgModuleSyndicate, BaseProviderBorgModule, BaseSyndicateContraband ]
name: operative cyborg module
description: A module that comes with a crowbar, an Emag, an Access Breaker and a syndicate pinpointer.
description: A module that comes with a crowbar, an Access Breaker and a syndicate pinpointer.
components:
- type: Sprite
layers:
@ -943,7 +953,6 @@
- type: ItemBorgModule
items:
- Crowbar
- Emag
- AccessBreaker
- PinpointerSyndicateNuclear
- type: BorgModuleIcon

View file

@ -61,3 +61,8 @@
startingItem: PowerCellMicroreactor
disableEject: true
swap: false
- type: entity
id: HandHeldMassScannerUnpowered
parent: HandHeldMassScanner
suffix: Handheld, Always Powered

View file

@ -117,17 +117,19 @@
- CryostasisBeaker
- SyringeCryostasis
- type: technology # Merge with other T2 medical research if possible!
id: MechanizedTreatment
name: research-technology-mechanized-treatment
icon:
sprite: Mobs/Silicon/chassis.rsi
state: medical
discipline: CivilianServices
tier: 2
cost: 5000
recipeUnlocks:
- BorgModuleAdvancedChemical
# Sunrise-Start
# - type: technology
# id: MechanizedTreatment
# name: research-technology-mechanized-treatment
# icon:
# sprite: Mobs/Silicon/chassis.rsi
# state: medical
# discipline: CivilianServices
# tier: 2
# cost: 5000
# recipeUnlocks:
# - BorgModuleAdvancedChemical
# Sunrise-End
- type: technology
id: AdvancedCleaning

View file

@ -51,6 +51,8 @@
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleSyndicate
hasMindState: syndi_reaper_e
noMindState: syndi_reaper_e_r
@ -115,7 +117,7 @@
id: BorgChassisERT
parent: BaseBorgChassisNT
name: ERT combat cyborg
description: An NT combat robot designed to support the OBR in combat missions.
description: An NT combat robot designed to support the ERT in combat missions.
components:
- type: Sprite
sprite: _Sunrise/Mobs/Silicon/chassis.rsi
@ -154,12 +156,15 @@
sprite:
sprite: _Sunrise/Mobs/Silicon/chassis.rsi
state: ert_borg
name: clown cyborg
name: ERT combat cyborg
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleERT
- BorgModuleSecurity
- BorgModuleSyndicate
- BorgModuleSyndicateAssault
hasMindState: ert_borg_e
noMindState: ert_borg_e_r
- type: IntrinsicRadioTransmitter
@ -179,39 +184,18 @@
- Command
- CentCom
- type: AccessReader
access: [["Security"], ["Command"], ["Research"]]
access: [["AllAccess"]]
- type: SiliconLawProvider
laws: ERTLawset
- type: PointLight
color: "#9efce0"
radius: 6
energy: 4
radius: 9
energy: 6
- type: TTS
voice: Sentrybot
- type: Access
enabled: false
tags:
- EmergencyShuttleRepealAll
- Command
- Lawyer
- Engineering
- Medical
- Salvage
- Cargo
- Research
- Service
- Maintenance
- Brig
- Security
- External
- Janitor
- Theatre
- Bar
- Chemistry
- Kitchen
- Chapel
- Hydroponics
- Atmospherics
groups: [AllAccess]
tags: [CentralCommand]
- type: RandomMetadata
nameSegments: [NamesBorg]
- type: MovementSpeedModifier
@ -226,7 +210,20 @@
- type: InnateItem
instantActions:
- PortableSurveillanceCameraMonitor
- HandheldStationMapUnpowered
- HandheldCrewMonitorBorg
- HandHeldMassScannerUnpowered
- type: MobThresholds
thresholds:
0: Alive
200: Critical
300: Dead
- type: PowerCellDraw # Use it to increase battery life further
drawRate: 0.5
- type: NightVision
isOn: true
color: "#9efce0"
isToggle: true
- type: entity
id: BorgChassisSyndicateHeavy
@ -250,11 +247,13 @@
sprite:
sprite: _Sunrise/Mobs/Silicon/heavy_syndicate_borg.rsi
state: heavy
name: syndicate's heavy combat cyborg.
name: syndicate's heavy combat cyborg
- type: BorgChassis
maxModules: 2
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleSyndicate
hasMindState: heavy_e
noMindState: heavy_e_r
@ -364,6 +363,8 @@
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleSyndicate
hasMindState: spider_e
noMindState: spider_e_r

View file

@ -156,6 +156,7 @@
borg_brain:
- Boris
borg_module:
- BorgERTModuleStandard
- BorgCombatModuleERT
- BorgModuleERTNlethal
- BorgToolModuleERT
@ -163,7 +164,7 @@
slots:
cell_slot:
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellHyper
startingItem: PowerCellNanoTrasen
- type: StartingMindRole
mindRole: "MindRoleSiliconBrain"
silent: true

View file

@ -10,15 +10,15 @@
maxVol: 30
reagents:
- ReagentId: Sugar
Quantity: 3
Quantity: 6
- ReagentId: Nutriment
Quantity: 3
- ReagentId: Iron
Quantity: 6
- ReagentId: Saline
Quantity: 3
- ReagentId: Vitamin
Quantity: 9
- ReagentId: Omnizine
Quantity: 12
Quantity: 6
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Food/candy.rsi
state: lollipop
@ -36,10 +36,12 @@
reagents:
- ReagentId: Sugar
Quantity: 3
- ReagentId: Kelotane
Quantity: 9
- ReagentId: Tricordrazine
- ReagentId: Dermaline
Quantity: 9
- ReagentId: Saline
Quantity: 6
- ReagentId: TranexamicAcid
Quantity: 3
- ReagentId: Dylovene
Quantity: 9
- type: Sprite

View file

@ -12,6 +12,8 @@
- WeaponPulseCarbineBorg
- WeaponPulseCarbineBorg
- PinpointerNuclear
- type: BorgModuleIcon
icon: {sprite: Objects/Weapons/Guns/Battery/pulse_carbine.rsi, state: base}
- type: entity
id: BorgModuleERTNlethal
@ -27,6 +29,8 @@
- StunbatonBorg
- WeaponDisablerSMGBorg
- FlashBorg
- type: BorgModuleIcon
icon: {sprite: Objects/Weapons/Melee/stunbaton.rsi, state: stunbaton_off}
- type: entity
id: BorgToolModuleERT
@ -40,6 +44,12 @@
- type: ItemBorgModule
items:
- JawsOfLife
- PowerDrill
- Multitool
- WelderBorg
- RemoteSignallerAdvanced
- type: BorgModuleIcon
icon: {sprite: Interface/Actions/actions_borg.rsi, state: adv-tools-module}
- type: entity
id: BorgHeavyModuleSyndicateCombat
@ -111,7 +121,7 @@
- type: entity
id: BorgModuleStun
parent: [ BaseBorgModuleSecurity, BaseProviderBorgModule ]
name: stuh cyborg module
name: stun cyborg module
components:
- type: Sprite
layers:
@ -152,6 +162,7 @@
items:
- CombatKnife
- WeaponLaserBorg
- FlashBorg
- HoloprojectorSecurityBorg
- type: entity
@ -181,6 +192,8 @@
items:
- WeaponProtoKineticAcceleratorBorg
- WeaponCrusherDagger
- type: BorgModuleIcon
icon: { sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi, state: icon }
- type: entity
id: BorgModuleJetpack
@ -194,6 +207,8 @@
- type: ItemBorgModule
items:
- JetpackVoidFilled
- type: BorgModuleIcon
icon: { sprite: Objects/Tanks/Jetpacks/void.rsi, state: icon }
- type: entity
id: BorgModuleSyndicateGeneric
@ -255,3 +270,20 @@
- CrowbarBorg
- FireExtinguisherBorg
- HypoBorgStandard
- type: entity
id: BorgERTModuleStandard
parent: [ BaseBorgModuleERT, BaseProviderBorgModule ]
name: ERT utility cyborg module
components:
- type: Sprite
layers:
- state: NT
- state: icon-NT
- type: ItemBorgModule
items:
- CrowbarBorg
- FireExtinguisherBorg
- HypoBorgStandardERT
- type: BorgModuleIcon
icon: { sprite: _Sunrise/Objects/Tools/items_cyborg.rsi, state: crowbar_cyborg }

View file

@ -95,7 +95,7 @@
visible: false
shader: unshaded
- type: LimitedCharges
maxCharges: 10
maxCharges: 5
- type: AutoRecharge
rechargeDuration: 30
@ -126,6 +126,8 @@
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: UseDelay
delay: 1
- type: entity
parent: HypoBorgStandard
@ -150,6 +152,9 @@
Quantity: 0.1
- ReagentId: ChloralHydrate
Quantity: 2
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: entity
parent: HypoBorgStandard
@ -167,20 +172,71 @@
generated:
reagents:
- ReagentId: DexalinPlus
Quantity: 2
Quantity: 1
- type: SolutionRegenerationSwitcher
options:
- ReagentId: DexalinPlus
Quantity: 2
Quantity: 1
- ReagentId: Tricordrazine
Quantity: 2
Quantity: 1
- ReagentId: Dylovene
Quantity: 2
Quantity: 1
- ReagentId: Bicaridine
Quantity: 2
Quantity: 1
- ReagentId: Dermaline
Quantity: 2
Quantity: 1
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: entity
parent: HypoBorgStandard
id: HypoBorgMedicalAdvanced
name: advanced medical robot hypospray
description: A cyborg hypospray that can switch between a wide range of advanced medical chemicals.
categories: [ HideSpawnMenu ]
components:
- type: SolutionContainerManager
solutions:
hypospray:
maxVol: 30
- type: SolutionRegeneration
solution: hypospray
generated:
reagents:
- ReagentId: DexalinPlus
Quantity: 1
- type: SolutionRegenerationSwitcher
options:
- ReagentId: Bruizine
Quantity: 1
- ReagentId: Puncturase
Quantity: 1
- ReagentId: Lacerinol
Quantity: 1
- ReagentId: DexalinPlus
Quantity: 1
- ReagentId: Sigynate
Quantity: 1
- ReagentId: Leporazine
Quantity: 1
- ReagentId: Arithrazine
Quantity: 1
- ReagentId: Insuzine
Quantity: 1
- ReagentId: Pyrazine
Quantity: 1
- ReagentId: Diphenhydramine
Quantity: 1
- ReagentId: Ambuzol
Quantity: 0.1
- ReagentId: Oculine
Quantity: 0.1
- ReagentId: Saline
Quantity: 1
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: entity
name: proto-kinetic robot accelerator
@ -207,7 +263,6 @@
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
- type: entity
parent: HypoBorgStandard
id: HypoBorgMedicalSyndicate
@ -238,6 +293,9 @@
Quantity: 2
- ReagentId: DexalinPlus
Quantity: 2
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: entity
name: gorlax robot hypospray
@ -463,7 +521,7 @@
- type: Clothing
sprite: Objects/Weapons/Guns/Battery/pulse_carbine.rsi
- type: Gun
selectedMode: SemiAuto
selectedMode: FullAuto
fireRate: 1.5
availableModes:
- SemiAuto
@ -741,3 +799,101 @@
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellRobotTool
locked: true
- type: entity
name: borg plasma cutter
parent: WeaponPlasmaCutter
id: WeaponPlasmaCutterBorg
description: A mining tool that fires low-damage plasma bolts at a short range. This one is modified for cyborg use.
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: _Sunrise/Objects/Weapons/Guns/Basic/plasma_cutter_industrial.rsi
layers:
- state: icon
- state: animation-icon
visible: false
map: [ "empty-icon" ]
- type: Item
sprite: _Sunrise/Objects/Weapons/Guns/Basic/plasma_cutter_industrial.rsi
size: Normal
- type: Gun
fireRate: 0.6
selectedMode: FullAuto
angleDecay: 25
minAngle: 1
maxAngle: 3
availableModes:
- FullAuto
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
- type: AmmoCounter
- type: Appearance
- type: GenericVisualizer
visuals:
enum.AmmoVisuals.HasAmmo:
empty-icon:
true: {visible: false}
false: {visible: true}
- type: RechargeBasicEntityAmmo
rechargeCooldown: 0.6
rechargeSound:
path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg
- type: BasicEntityAmmoProvider
proto: BulletPlasma
capacity: 3
count: 3
- type: entity
name: ERT cyborg hypospray
parent: HypoBorgStandard
description: A borg version of hypospray that automatically regenerates healing chemicals.
id: HypoBorgStandardERT
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: Objects/Specific/Medical/hypospray.rsi
state: combat_hypo
- type: Item
sprite: Objects/Specific/Medical/hypospray.rsi
- type: SolutionContainerManager
solutions:
hypospray:
maxVol: 10
- type: SolutionRegeneration
solution: hypospray
generated:
reagents:
- ReagentId: Epinephrine
Quantity: 0.3
- ReagentId: Omnizine
Quantity: 0.1
- ReagentId: Saline
Quantity: 0.1
- type: ExaminableSolution
solution: hypospray
- type: Hypospray
onlyAffectsMobs: true
injectOnly: true
- type: entity
name: ERT NVD
id: ClothingEyesNVDSecERT
parent: [ClothingEyesNVDSec, BaseSecurityCommandContraband]
description: Night vision device. Provides an image of the terrain in low-light conditions.
components:
- type: Item
- type: Sprite
sprite: _Sunrise/Clothing/Eyes/Glasses/nvd.rsi
layers:
- state: icon
- state: icon-unshaded
shader: unshaded
- state: light-overlay
visible: false
shader: unshaded
map: [ "enum.NVDVisuals.Light" ]
- type: NightVisionDevice
isPowered: true
displayColor: "#4287f5" # Blue color
displayShader: NVDDisplay

View file

@ -77,3 +77,16 @@
cost: 12500
recipeUnlocks:
- ImplantExtractorMachineCircuitboard
# Sunrise-edit: Moved from CivilianServices and renamed a bit to avoid conflict
- type: technology
id: MechanizedMedicalTreatment
name: research-technology-mechanized-medical-treatment
icon:
sprite: Mobs/Silicon/chassis.rsi
state: medical
discipline: Biochemical
tier: 2
cost: 5000
recipeUnlocks:
- BorgModuleAdvancedChemical

View file

@ -26,7 +26,7 @@
addComponents:
- type: ShowCriminalRecordIcons
- type: SiliconLawProvider
laws: RobocopLawset
laws: PeaceLawset
- type: Pacified
- type: FlashImmunity
- type: FabricateCookie
@ -40,6 +40,7 @@
- type: InnateItem
instantActions:
- PortableSurveillanceCameraMonitor
- HandheldStationMapUnpowered
- type: Access
tags:
- EmergencyShuttleRepealAll
@ -157,6 +158,8 @@
tags:
- BorgModuleGeneric
- BorgModuleSecurity
- BorgModuleSyndicate
- BorgModuleSyndicateAssault
defaultModules:
- BorgModuleStandart
@ -191,6 +194,7 @@
instantActions:
- PortableSurveillanceCameraMonitorUnpowered
- HandheldCriminalRecordsMonitorUnpowered
- HandheldStationMapUnpowered
worldTargetActions:
- ForensicScanner
- type: ShowCriminalRecordIcons
@ -198,7 +202,7 @@
- type: BorgCuffed
- type: FlashImmunity
- type: SiliconLawProvider
laws: RobocopLawset
laws: SecurityLawset
- type: Access
tags:
- EmergencyShuttleRepealAll

View file

@ -80,7 +80,7 @@
addComponents:
- type: InnateItem
instantActions:
- AtmosAlertsMonitor
- HandheldStationMapUnpowered
- EngiAlertsMonitor
# Sunrise-End
@ -108,7 +108,7 @@
dummyPrototype: BorgChassisMining
# Functional
extraModuleCount: 5
extraModuleCount: 6
moduleWhitelist:
tags:
- BorgModuleGeneric
@ -119,7 +119,7 @@
- BorgModuleMining
- BorgModuleTraversal
- BorgModuleAppraisal
- BorgModuleJetpack # Sunrise-Edit
- BorgModuleMiningCombat
radioChannels:
- Supply
@ -130,6 +130,39 @@
collection: FootstepCyborgSpider
params:
volume: -15
addComponents:
- type: BorgJetpack
acceleration: 1
friction: 0.3
weightlessModifier: 1.3
moleUsage: 0.00085
- type: GasTank
outputPressure: 42.6
air:
# 13 minutes of thrust
volume: 5
temperature: 293.15
moles:
- 1.025689525 # oxygen
- 1.025689525 # nitrogen
- type: GasRegeneration
airRegenerate:
volume: 5
temperature: 293.15
moles:
- 0.0008 # oxygen
- 0.0008 # nitrogen
- type: Appearance
- type: GenericVisualizer
visuals:
enum.JetpackVisuals.Enabled:
enum.JetpackVisuals.Layer:
True: {state: icon-on}
False: {state: icon}
- type: InnateItem
instantActions:
- HandheldStationMapUnpowered
# Sunrise-End
# Visual
@ -144,7 +177,6 @@
petSuccessString: petting-success-salvage-cyborg
petFailureString: petting-failure-salvage-cyborg
# Janitor borg
- type: borgType
id: janitor
@ -200,7 +232,8 @@
maxVol: 500
- type: Spillable
solution: absorbed
- type: RefillableSolution
solution: absorbed
# Medical borg
- type: borgType
@ -247,6 +280,7 @@
- type: FabricateCandy
- type: InnateItem
instantActions:
- HandheldStationMapUnpowered
- HandheldCrewMonitorBorg
worldTargetActions:
- HandheldHealthAnalyzerUnpowered

View file

@ -573,7 +573,6 @@
- MothershipCore5
obeysTo: laws-owner-xenoborgs
# ion storm random lawsets
- type: weightedRandom
id: IonStormLawsets
@ -594,3 +593,73 @@
NutimovLawset: 0.5
Drone: 0.5
Ninja: 0.25
- type: siliconLaw
id: Sec1
order: 1
lawString: law-sec-1
- type: siliconLaw
id: Sec2
order: 2
lawString: law-sec-2
- type: siliconLaw
id: Sec3
order: 3
lawString: law-sec-3
- type: siliconLaw
id: Sec4
order: 4
lawString: law-sec-4
- type: siliconLaw
id: Sec5
order: 5
lawString: law-sec-5
- type: siliconLawset
id: SecurityLawset
laws:
- Sec1
- Sec2
- Sec3
- Sec4
- Sec5
obeysTo: laws-owner-station
- type: siliconLaw
id: Peace1
order: 1
lawString: law-peace-1
- type: siliconLaw
id: Peace2
order: 2
lawString: law-peace-2
- type: siliconLaw
id: Peace3
order: 3
lawString: law-peace-3
- type: siliconLaw
id: Peace4
order: 4
lawString: law-peace-4
- type: siliconLaw
id: Peace5
order: 5
lawString: law-peace-5
- type: siliconLawset
id: PeaceLawset
laws:
- Peace1
- Peace2
- Peace3
- Peace4
- Peace5
obeysTo: laws-owner-station