Derelict Borg Revival (#33433)
* Derelictn'tn't Borg! * Clean *sparkles* * Removed "S: Awaiting Changes"
This commit is contained in:
37
Content.Server/Silicons/Laws/StartIonStormedSystem.cs
Normal file
37
Content.Server/Silicons/Laws/StartIonStormedSystem.cs
Normal 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()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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-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-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-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...
|
ghost-role-information-security-description = You are part of a security task force, but seem to have found yourself in a strange situation...
|
||||||
|
|
||||||
|
|||||||
@@ -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-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-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-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-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!
|
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-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-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-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
|
## Rattling fences
|
||||||
|
|
||||||
|
|||||||
@@ -170,3 +170,21 @@
|
|||||||
- state: green
|
- state: green
|
||||||
- sprite: Objects/Weapons/Melee/energykatana.rsi
|
- sprite: Objects/Weapons/Melee/energykatana.rsi
|
||||||
state: icon
|
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
|
||||||
@@ -328,3 +328,23 @@
|
|||||||
Unsexed: UnisexSiliconSyndicate
|
Unsexed: UnisexSiliconSyndicate
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
color: "#dd200b"
|
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
|
||||||
|
|
||||||
@@ -187,3 +187,35 @@
|
|||||||
interactFailureString: petting-failure-syndicate-cyborg
|
interactFailureString: petting-failure-syndicate-cyborg
|
||||||
interactSuccessSound:
|
interactSuccessSound:
|
||||||
path: /Audio/Ambience/Objects/periodic_beep.ogg
|
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
|
||||||
@@ -526,3 +526,37 @@
|
|||||||
- PlayerBorgSyndicateAssaultGhostRole
|
- PlayerBorgSyndicateAssaultGhostRole
|
||||||
- PlayerBorgSyndicateAssaultGhostRole # Saboteurs are kinda like cyborg medics, we want less.
|
- PlayerBorgSyndicateAssaultGhostRole # Saboteurs are kinda like cyborg medics, we want less.
|
||||||
- PlayerBorgSyndicateSaboteurGhostRole
|
- 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
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
- id: SleeperAgents
|
- id: SleeperAgents
|
||||||
- id: ZombieOutbreak
|
- id: ZombieOutbreak
|
||||||
- id: LoneOpsSpawn
|
- id: LoneOpsSpawn
|
||||||
|
- id: DerelictCyborgSpawn
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseStationEvent
|
id: BaseStationEvent
|
||||||
@@ -562,3 +563,24 @@
|
|||||||
- Service
|
- Service
|
||||||
blacklist:
|
blacklist:
|
||||||
- External # don't space everything
|
- 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
|
||||||
|
|||||||
@@ -34,3 +34,6 @@
|
|||||||
|
|
||||||
- node: cyborg
|
- node: cyborg
|
||||||
entity: BorgChassisSelectable
|
entity: BorgChassisSelectable
|
||||||
|
|
||||||
|
- node: derelictcyborg
|
||||||
|
entity: BorgChassisDerelict
|
||||||
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict.png
Normal file
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_e.png
Normal file
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_e.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_e_r.png
Normal file
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_e_r.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_icon.png
Normal file
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.3 KiB |
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_l.png
Normal file
BIN
Resources/Textures/Mobs/Silicon/chassis.rsi/derelict_l.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
@@ -5,7 +5,7 @@
|
|||||||
"y": 32
|
"y": 32
|
||||||
},
|
},
|
||||||
"license": "CC-BY-SA-3.0",
|
"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": [
|
"states": [
|
||||||
{
|
{
|
||||||
"name": "clown",
|
"name": "clown",
|
||||||
@@ -23,6 +23,26 @@
|
|||||||
"name": "clown_l",
|
"name": "clown_l",
|
||||||
"directions": 4
|
"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",
|
"name": "engineer",
|
||||||
"directions": 4
|
"directions": 4
|
||||||
|
|||||||
Reference in New Issue
Block a user