Derelict Borg Revival (#33433)

* Derelictn'tn't Borg!

* Clean *sparkles*

* Removed "S: Awaiting Changes"
This commit is contained in:
ScarKy0
2024-12-06 07:22:38 +01:00
committed by GitHub
parent 38c8ffb9b5
commit 274c3ab0b9
16 changed files with 209 additions and 1 deletions

View File

@@ -0,0 +1,37 @@
using Content.Shared.Silicons.Laws.Components;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
namespace Content.Server.Silicons.Laws;
/// <summary>
/// This handles running the ion storm event a on specific entity when that entity is spawned in.
/// </summary>
public sealed class StartIonStormedSystem : EntitySystem
{
[Dependency] private readonly IonStormSystem _ionStorm = default!;
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
[Dependency] private readonly SiliconLawSystem _siliconLaw = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<StartIonStormedComponent, MapInitEvent>(OnMapInit);
}
private void OnMapInit(Entity<StartIonStormedComponent> ent, ref MapInitEvent args)
{
if (!TryComp<SiliconLawBoundComponent>(ent.Owner, out var lawBound))
return;
if (!TryComp<IonStormTargetComponent>(ent.Owner, out var target))
return;
for (int currentIonStorm = 0; currentIonStorm < ent.Comp.IonStormAmount; currentIonStorm++)
{
_ionStorm.IonStormTarget((ent.Owner, lawBound, target), false);
}
var laws = _siliconLaw.GetLaws(ent.Owner, lawBound);
_adminLogger.Add(LogType.Mind, LogImpact.High, $"{ToPrettyString(ent.Owner):silicon} spawned with ion stormed laws: {laws.LoggingString()}");
}
}

View File

@@ -0,0 +1,17 @@
using Content.Shared.Roles;
using Robust.Shared.Prototypes;
namespace Content.Shared.Silicons.Laws.Components;
/// <summary>
/// Applies law altering ion storms on a specific entity IonStormAmount times when the entity is spawned.
/// </summary>
[RegisterComponent]
public sealed partial class StartIonStormedComponent : Component
{
/// <summary>
/// Amount of times that the ion storm will be run on the entity on spawn.
/// </summary>
[DataField]
public int IonStormAmount = 1;
}

View File

@@ -238,6 +238,9 @@ ghost-role-information-syndicate-cyborg-assault-name = Syndicate Assault Cyborg
ghost-role-information-syndicate-cyborg-saboteur-name = Syndicate Saboteur Cyborg
ghost-role-information-syndicate-cyborg-description = The Syndicate needs reinforcements. You, a cold silicon killing machine, will help them.
ghost-role-information-derelict-cyborg-name = Derelict Cyborg
ghost-role-information-derelict-cyborg-description = You are a regular cyborg that got lost in space. After years of exposure to ion storms you find yourself near a space station.
ghost-role-information-security-name = Security
ghost-role-information-security-description = You are part of a security task force, but seem to have found yourself in a strange situation...

View File

@@ -68,6 +68,7 @@ petting-success-janitor-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} d
petting-success-medical-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head.
petting-success-service-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dapper looking metal head.
petting-success-syndicate-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} menacing metal head.
petting-success-derelict-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} rusty metal head.
petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior.
petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BASIC($target, "honk", "honks")} in refusal!
@@ -82,6 +83,7 @@ petting-failure-janitor-cyborg = You reach out to pet {THE($target)}, but {SUBJE
petting-failure-medical-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy saving lives!
petting-failure-service-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy serving others!
petting-failure-syndicate-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} treacherous affiliation makes you reconsider.
petting-failure-derelict-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} rusty and jagged exterior makes you reconsider.
## Rattling fences

View File

@@ -170,3 +170,21 @@
- state: green
- sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon
- type: entity
categories: [ HideSpawnMenu, Spawner ]
parent: BaseAntagSpawner
id: SpawnPointGhostDerelictCyborg
components:
- type: GhostRole
name: ghost-role-information-derelict-cyborg-name
description: ghost-role-information-derelict-cyborg-description
rules: ghost-role-information-silicon-rules
raffle:
settings: default
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: Mobs/Silicon/chassis.rsi
state: derelict_icon

View File

@@ -328,3 +328,23 @@
Unsexed: UnisexSiliconSyndicate
- type: PointLight
color: "#dd200b"
- type: entity
id: BaseBorgChassisDerelict
parent: BaseBorgChassis
abstract: true
components:
- type: NpcFactionMember
factions:
- NanoTrasen #The seemingly best fit. It was a regular NT cyborg once, after all.
- type: Access
enabled: false
groups:
- AllAccess #Randomized access would be fun. AllAccess is the best i can think of right now that does make it too hard for it to enter the station or navigate it..
- type: AccessReader
access: [["Command"], ["Research"]]
- type: StartIonStormed
ionStormAmount: 3
- type: IonStormTarget
chance: 1

View File

@@ -187,3 +187,35 @@
interactFailureString: petting-failure-syndicate-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: entity
id: BorgChassisDerelict
parent: BaseBorgChassisDerelict
name: derelict cyborg
description: A man-machine hybrid that assists in station activity. This one is in a state of great disrepair.
components:
- type: Sprite
layers:
- state: derelict
- state: derelict_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: derelict_l
shader: unshaded
map: ["light"]
visible: false
- type: BorgChassis
maxModules: 5 # the sixth one broke lol
moduleWhitelist:
tags:
- BorgModuleGeneric
hasMindState: derelict_e
noMindState: derelict_e_r
- type: Construction
node: derelictcyborg
- type: InteractionPopup
interactSuccessString: petting-success-derelict-cyborg
interactFailureString: petting-failure-derelict-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg

View File

@@ -526,3 +526,37 @@
- PlayerBorgSyndicateAssaultGhostRole
- PlayerBorgSyndicateAssaultGhostRole # Saboteurs are kinda like cyborg medics, we want less.
- PlayerBorgSyndicateSaboteurGhostRole
- type: entity
id: PlayerBorgDerelict
parent: BorgChassisDerelict
suffix: Battery, Module
components:
- type: ContainerFill
containers:
borg_brain:
- PositronicBrain
borg_module:
- BorgModuleTool
- BorgModuleFireExtinguisher
- BorgModuleGPS
- type: ItemSlots
slots:
cell_slot:
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellHigh
- type: RandomMetadata
nameSegments: [names_borg]
- type: entity
id: PlayerBorgDerelictGhostRole
parent: PlayerBorgDerelict
suffix: Ghost role
components:
- type: GhostRole
name: ghost-role-information-derelict-cyborg-name
description: ghost-role-information-derelict-cyborg-description
rules: ghost-role-information-silicon-rules
raffle:
settings: default
- type: GhostTakeoverAvailable

View File

@@ -37,6 +37,7 @@
- id: SleeperAgents
- id: ZombieOutbreak
- id: LoneOpsSpawn
- id: DerelictCyborgSpawn
- type: entity
id: BaseStationEvent
@@ -562,3 +563,24 @@
- Service
blacklist:
- External # don't space everything
- type: entity
parent: BaseGameRule
id: DerelictCyborgSpawn
components:
- type: StationEvent
weight: 5
earliestStart: 15
reoccurrenceDelay: 20
minimumPlayers: 4
duration: null
- type: SpaceSpawnRule
spawnDistance: 0
- type: AntagSpawner
prototype: PlayerBorgDerelict
- type: AntagSelection
definitions:
- spawnerPrototype: SpawnPointGhostDerelictCyborg
min: 1
max: 1
pickPlayer: false

View File

@@ -34,3 +34,6 @@
- node: cyborg
entity: BorgChassisSelectable
- node: derelictcyborg
entity: BorgChassisDerelict

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -5,7 +5,7 @@
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/faf6db214927874c19b8fa8585d26b5d40de1acc",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/faf6db214927874c19b8fa8585d26b5d40de1acc, derelict sprites modified by GoldenCan(GitHub).",
"states": [
{
"name": "clown",
@@ -23,6 +23,26 @@
"name": "clown_l",
"directions": 4
},
{
"name": "derelict",
"directions": 4
},
{
"name": "derelict_e",
"directions": 4
},
{
"name": "derelict_e_r",
"directions": 4
},
{
"name": "derelict_icon",
"directions": 1
},
{
"name": "derelict_l",
"directions": 4
},
{
"name": "engineer",
"directions": 4