exterminator midround minor antag (#19946)

* terminator locale

* terminate objective

* terminator components and shared system

* terminator roles rules and system

* terminator events

* skeleton recolour

* terminator and endoskeleton

* ghost role spawn

* damage modifier sets

* :trollface:

* :trollface:

* add antag prototype

* ghost role locale

* skynet

* :trollface:

* :trollface:

* :trollface:

* add endoskeleton body prototype

* :trollface:

* :trollface:

* smite locale

* implement terminate smite

* :trollface:

* :trollface:

* implement PopupBehavior

* endoskeleton transform popup

* move stuff from shared to server since nothing actually used it

* recolour everything

* update parts

* :trollface:

* :trollface:

* ok fire was using the damage set, back to 1.0

* tweak

* :trollface:

* :trollface:

* simplemob ops

* 1 rule per pro

* :trollface:

* :trollface:

* update some sprites

* structural damage

* :trollface:

* :trollface:

* Revert "update some sprites"

This reverts commit 459196c6a8942c5412885d5fe2f1a83a48408ddc.

* offbrand, add die objective to maybe remove fear of murderbone

* add shut down objective to the list

* fix ghost role

* fix control mob

* :trollface:

* :trollface:

* please

* naming

* code changes for GenericAntag terminator

* yml changes for GenericAntag terminator

* :trollface:

* moved kill objective override to an objective component

* use kill objective override

* fix

* oh

* locale changes

* change burn to heat for skin melting gib

* change some endoskeleton stuff

* pro

* i already did this dementia ops

* objective

* fix

* pro

* swap out full sprite

* update parts

* forgor

* fix mind transfer

* type

* endoskeleton has 500 mass

* evil

* fishops

* warops

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
deltanedas
2023-12-25 03:16:56 +00:00
committed by GitHub
parent 2b25e00453
commit 52532e4075
39 changed files with 973 additions and 4 deletions

View File

@@ -18,6 +18,7 @@ using Content.Server.Storage.Components;
using Content.Server.Storage.EntitySystems;
using Content.Server.Tabletop;
using Content.Server.Tabletop.Components;
using Content.Server.Terminator.Systems;
using Content.Shared.Administration;
using Content.Shared.Administration.Components;
using Content.Shared.Body.Components;
@@ -30,6 +31,7 @@ using Content.Shared.Database;
using Content.Shared.Electrocution;
using Content.Shared.Interaction.Components;
using Content.Shared.Inventory;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
@@ -72,6 +74,7 @@ public sealed partial class AdminVerbSystem
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly TabletopSystem _tabletopSystem = default!;
[Dependency] private readonly TerminatorSystem _terminator = default!;
[Dependency] private readonly VomitSystem _vomitSystem = default!;
[Dependency] private readonly WeldableSystem _weldableSystem = default!;
[Dependency] private readonly SharedContentEyeSystem _eyeSystem = default!;
@@ -793,6 +796,7 @@ public sealed partial class AdminVerbSystem
Message = Loc.GetString("admin-smite-super-speed-description"),
};
args.Verbs.Add(superSpeed);
//Bonk
Verb superBonkLite = new()
{
@@ -820,5 +824,27 @@ public sealed partial class AdminVerbSystem
Impact = LogImpact.Extreme,
};
args.Verbs.Add(superBonk);
Verb terminate = new()
{
Text = "Terminate",
Category = VerbCategory.Smite,
Icon = new SpriteSpecifier.Rsi(new ("Mobs/Species/Terminator/parts.rsi"), "skull_icon"),
Act = () =>
{
if (!TryComp<MindContainerComponent>(args.Target, out var mindContainer) || mindContainer.Mind == null)
return;
var coords = Transform(args.Target).Coordinates;
var mindId = mindContainer.Mind.Value;
_terminator.CreateSpawner(coords, mindId);
_popupSystem.PopupEntity(Loc.GetString("admin-smite-terminate-prompt"), args.Target,
args.Target, PopupType.LargeCaution);
},
Impact = LogImpact.Extreme,
Message = Loc.GetString("admin-smite-terminate-description")
};
args.Verbs.Add(terminate);
}
}

View File

@@ -0,0 +1,30 @@
using Content.Shared.Popups;
namespace Content.Server.Destructible.Thresholds.Behaviors;
/// <summary>
/// Shows a popup for everyone.
/// </summary>
[DataDefinition]
public sealed partial class PopupBehavior : IThresholdBehavior
{
/// <summary>
/// Locale id of the popup message.
/// </summary>
[DataField("popup", required: true)]
public string Popup;
/// <summary>
/// Type of popup to show.
/// </summary>
[DataField("popupType")]
public PopupType PopupType;
public void Execute(EntityUid uid, DestructibleSystem system, EntityUid? cause = null)
{
var popup = system.EntityManager.System<SharedPopupSystem>();
// popup is placed at coords since the entity could be deleted after, no more popup then
var coords = system.EntityManager.GetComponent<TransformComponent>(uid).Coordinates;
popup.PopupCoordinates(Loc.GetString(Popup), coords, PopupType);
}
}

View File

@@ -0,0 +1,12 @@
using Content.Server.Objectives.Systems;
namespace Content.Server.Objectives.Components;
/// <summary>
/// Sets this objective's target to the exterminator's target override, if it has one.
/// If not it will be random.
/// </summary>
[RegisterComponent, Access(typeof(TerminatorTargetOverrideSystem))]
public sealed partial class TerminatorTargetOverrideComponent : Component
{
}

View File

@@ -0,0 +1,41 @@
using Content.Server.Objectives.Components;
using Content.Server.Terminator.Components;
using Content.Shared.Mind;
using Content.Shared.Objectives.Components;
namespace Content.Server.Objectives.Systems;
/// <summary>
/// Handles copying the exterminator's target override to this objective.
/// </summary>
public sealed class TerminatorTargetOverrideSystem : EntitySystem
{
[Dependency] private readonly TargetObjectiveSystem _target = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TerminatorTargetOverrideComponent, ObjectiveAssignedEvent>(OnAssigned);
}
private void OnAssigned(EntityUid uid, TerminatorTargetOverrideComponent comp, ref ObjectiveAssignedEvent args)
{
if (args.Mind.OwnedEntity == null)
{
args.Cancelled = true;
return;
}
var user = args.Mind.OwnedEntity.Value;
if (!TryComp<TerminatorComponent>(user, out var terminator))
{
args.Cancelled = true;
return;
}
// this exterminator has a target override so set its objective target accordingly
if (terminator.Target != null)
_target.SetTarget(uid, terminator.Target.Value);
}
}

View File

@@ -15,6 +15,7 @@ public sealed class RoleSystem : SharedRoleSystem
SubscribeAntagEvents<NukeopsRoleComponent>();
SubscribeAntagEvents<RevolutionaryRoleComponent>();
SubscribeAntagEvents<SubvertedSiliconRoleComponent>();
SubscribeAntagEvents<TerminatorRoleComponent>();
SubscribeAntagEvents<TraitorRoleComponent>();
SubscribeAntagEvents<ZombieRoleComponent>();
SubscribeAntagEvents<ThiefRoleComponent>();

View File

@@ -0,0 +1,8 @@
using Content.Shared.Roles;
namespace Content.Server.Roles;
[RegisterComponent]
public sealed partial class TerminatorRoleComponent : AntagonistRoleComponent
{
}

View File

@@ -0,0 +1,19 @@
using Content.Server.Terminator.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
namespace Content.Server.Terminator.Components;
/// <summary>
/// Main terminator component, handles the target, if any, and objectives.
/// </summary>
[RegisterComponent, Access(typeof(TerminatorSystem))]
public sealed partial class TerminatorComponent : Component
{
/// <summary>
/// Used to force the terminate objective's target.
/// If null it will be a random person.
/// </summary>
[DataField("target")]
public EntityUid? Target;
}

View File

@@ -0,0 +1,16 @@
using Content.Server.Terminator.Systems;
namespace Content.Server.Terminator.Components;
/// <summary>
/// Sets <see cref="TerminatorComponent.Target"/> after the ghost role spawns.
/// </summary>
[RegisterComponent, Access(typeof(TerminatorSystem))]
public sealed partial class TerminatorTargetComponent : Component
{
/// <summary>
/// The target to set after the ghost role spawns.
/// </summary>
[DataField("target")]
public EntityUid? Target;
}

View File

@@ -0,0 +1,66 @@
using Content.Server.Body.Components;
using Content.Server.GenericAntag;
using Content.Server.Ghost.Roles.Events;
using Content.Server.Roles;
using Content.Server.Terminator.Components;
using Content.Shared.Roles;
using Robust.Shared.Map;
namespace Content.Server.Terminator.Systems;
public sealed class TerminatorSystem : EntitySystem
{
[Dependency] private readonly SharedRoleSystem _role = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TerminatorComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<TerminatorComponent, GhostRoleSpawnerUsedEvent>(OnSpawned);
SubscribeLocalEvent<TerminatorComponent, GenericAntagCreatedEvent>(OnCreated);
}
private void OnMapInit(EntityUid uid, TerminatorComponent comp, MapInitEvent args)
{
// cyborg doesn't need to breathe
RemComp<RespiratorComponent>(uid);
}
private void OnSpawned(EntityUid uid, TerminatorComponent comp, GhostRoleSpawnerUsedEvent args)
{
if (!TryComp<TerminatorTargetComponent>(args.Spawner, out var target))
return;
comp.Target = target.Target;
}
private void OnCreated(EntityUid uid, TerminatorComponent comp, ref GenericAntagCreatedEvent args)
{
var mindId = args.MindId;
var mind = args.Mind;
_role.MindAddRole(mindId, new RoleBriefingComponent
{
Briefing = Loc.GetString("terminator-role-briefing")
}, mind);
_role.MindAddRole(mindId, new TerminatorRoleComponent(), mind);
}
/// <summary>
/// Create a spawner at a position and return it.
/// </summary>
/// <param name="coords">Coordinates to create the spawner at</param>
/// <param name="target">Optional target mind to force the terminator to target</param>
public EntityUid CreateSpawner(EntityCoordinates coords, EntityUid? target)
{
var uid = Spawn("SpawnPointGhostTerminator", coords);
if (target != null)
{
var comp = EnsureComp<TerminatorTargetComponent>(uid);
comp.Target = target;
}
return uid;
}
}

View File

@@ -12,7 +12,8 @@ admin-smite-turned-ash-other = {CAPITALIZE($name)} turns into a pile of ash!
admin-smite-stomach-removal-self = Your stomach feels hollow...
admin-smite-run-walk-swap-prompt = You have to press shift to run!
admin-smite-super-speed-prompt = You move at mach 0.8!
admin-smite-lung-removal-self = You can't breath!
admin-smite-lung-removal-self = You can't breathe!
admin-smite-terminate-prompt = I'll be back
## Smite descriptions
@@ -57,6 +58,7 @@ admin-smite-disarm-prone-description = Makes them get disarmed 100% of the time
admin-smite-garbage-can-description = Turn them into a garbage bin to emphasize what they remind you of.
admin-smite-super-bonk-description = Slams them on every single table on the Station and beyond.
admin-smite-super-bonk-lite-description= Slams them on every single table on the Station and beyond. Stops when the target is dead.
admin-smite-terminate-description = Creates a Terminator ghost role with the sole objective of killing them.
## Tricks descriptions

View File

@@ -0,0 +1,14 @@
terminator-round-end-agent-name = nt-800
objective-issuer-susnet = [color=#d64119]Susnet[/color]
terminator-role-greeting =
You are the exterminator, a relentless assassin sent into the past to secure our future.
We need you to eliminate {$target}, {$job}.
Use any means at your disposal to complete the mission.
Glory to Cybersun.
terminator-role-briefing = Kill the target at all costs.
terminator-endoskeleton-gib-popup = All the battered flesh falls apart, revealing a titanium endoskeleton!
terminator-endoskeleton-burn-popup = The seared flesh is burned to a crisp, revealing a titanium endoskeleton!

View File

@@ -189,3 +189,7 @@ ghost-role-information-Cak-rules = You are a living edible sweet cat. Your task
ghost-role-information-BreadDog-name = BreadDog
ghost-role-information-BreadDog-description = You are the chef's favorite child. You're a living bread dog.
ghost-role-information-BreadDog-rules = You're an edible dog made of bread. Your task is to find your place in this world where everything wants to eat you.
ghost-role-information-exterminator-name = Exterminator
ghost-role-information-exterminator-description = You been been sent back in time to terminate a target with high importance to the future.
ghost-role-information-exterminator-rules = You are an antagonist and may kill anyone that tries to stop you, but killing the target is always your top priority.

View File

@@ -0,0 +1 @@
objective-terminate-title = Terminate {$targetName}, {CAPITALIZE($job)}

View File

@@ -30,3 +30,6 @@ roles-antag-space-ninja-objective = Use your stealth to sabotage the station, no
roles-antag-thief-name = Thief
roles-antag-thief-objective = Add some NT property to your personal collection without using violence.
roles-antag-terminator-name = Terminator
roles-antag-terminator-objective = Kill the target at all costs, the future depends on it.

View File

@@ -0,0 +1,157 @@
- type: entity
abstract: true
parent: BaseItem
id: PartTerminator
name: nt-800 body part
components:
- type: Sprite
sprite: Mobs/Species/Terminator/parts.rsi
- type: Icon
sprite: Mobs/Species/Terminator/parts.rsi
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Cybernetic
- type: BodyPart
- type: ContainerContainer
containers:
bodypart: !type:Container
ents: []
- type: StaticPrice
price: 200
- type: entity
parent: PartTerminator
id: TorsoTerminator
name: nt-800 torso
components:
- type: Sprite
state: torso_m
- type: Icon
state: torso_m
- type: BodyPart
partType: Torso
- type: entity
parent: PartTerminator
id: HeadTerminator
name: nt-800 skull
description: Its red eyes have powered down... for now.
components:
- type: Sprite
state: skull_icon
- type: Icon
state: skull_icon
- type: BodyPart
partType: Head
# killing a terminators worth big bucks
- type: StaticPrice
price: 2000
- type: Tag
tags:
- Head
- type: entity
parent: PartTerminator
id: LeftArmTerminator
name: left nt-800 arm
components:
- type: Sprite
state: l_arm
- type: Icon
state: l_arm
- type: BodyPart
partType: Arm
symmetry: Left
- type: entity
parent: PartTerminator
id: RightArmTerminator
name: right nt-800 arm
components:
- type: Sprite
state: r_arm
- type: Icon
state: r_arm
- type: BodyPart
partType: Arm
symmetry: Right
- type: entity
parent: PartTerminator
id: LeftHandTerminator
name: left nt-800 hand
components:
- type: Sprite
state: l_hand
- type: Icon
state: l_hand
- type: BodyPart
partType: Hand
symmetry: Left
- type: entity
parent: PartTerminator
id: RightHandTerminator
name: right nt-800 hand
components:
- type: Sprite
state: r_hand
- type: Icon
state: r_hand
- type: BodyPart
partType: Hand
symmetry: Right
- type: entity
parent: PartTerminator
id: LeftLegTerminator
name: left nt-800 leg
components:
- type: Sprite
state: l_leg
- type: Icon
state: l_leg
- type: BodyPart
partType: Leg
symmetry: Left
- type: MovementBodyPart
- type: entity
parent: PartTerminator
id: RightLegTerminator
name: right nt-800 leg
components:
- type: Sprite
state: r_leg
- type: Icon
state: r_leg
- type: BodyPart
partType: Leg
symmetry: Right
- type: MovementBodyPart
- type: entity
parent: PartTerminator
id: LeftFootTerminator
name: left nt-800 foot
components:
- type: Sprite
state: l_foot
- type: Icon
state: l_foot
- type: BodyPart
partType: Foot
symmetry: Left
- type: entity
parent: PartTerminator
id: RightFootTerminator
name: right nt-800 foot
components:
- type: Sprite
state: r_foot
- type: Icon
state: r_foot
- type: BodyPart
partType: Foot
symmetry: Right

View File

@@ -0,0 +1,85 @@
# not quite human...
- type: body
id: TerminatorFlesh
name: exterminator
root: torso
slots:
head:
part: HeadHuman
connections:
- torso
organs:
brain: MobTerminatorEndoskeleton
torso:
part: TorsoHuman
connections:
- left arm
- right arm
- left leg
- right leg
right arm:
part: RightArmHuman
connections:
- right hand
left arm:
part: LeftArmHuman
connections:
- left hand
right hand:
part: RightHandHuman
left hand:
part: LeftHandHuman
right leg:
part: RightLegHuman
connections:
- right foot
left leg:
part: LeftLegHuman
connections:
- left foot
right foot:
part: RightFootHuman
left foot:
part: LeftFootHuman
# TODO: terminator body parts
- type: body
id: TerminatorEndoskeleton
name: terminatorEndoskeleton
root: torso
slots:
head:
part: HeadTerminator
connections:
- torso
torso:
part: TorsoTerminator
connections:
- left arm
- right arm
- left leg
- right leg
right arm:
part: RightArmTerminator
connections:
- right hand
left arm:
part: LeftArmTerminator
connections:
- left hand
right hand:
part: RightHandTerminator
left hand:
part: LeftHandTerminator
right leg:
part: RightLegTerminator
connections:
- right foot
left leg:
part: LeftLegTerminator
connections:
- left foot
right foot:
part: RightFootTerminator
left foot:
part: LeftFootTerminator

View File

@@ -249,3 +249,41 @@
Cellular: 0.0
Heat: 2.5
Caustic: 0.0
# terminator's flesh damage set
- type: damageModifierSet
id: CyberneticFlesh
coefficients:
Blunt: 0.2
Slash: 0.2
Piercing: 0.1
# fire and lasers burn it good
Heat: 1.0
# zap
Shock: 1.5
Cold: 0.25
Caustic: 0.25
# doesnt have organs to poison
Poison: 0.0
Cellular: 0.0
# terminator's endoskeleton damage set
- type: damageModifierSet
id: Cybernetic
coefficients:
# bonk
Blunt: 1.0
# alloy too hard to cut or shoot
Slash: 0.0
Piercing: 0.0
# no burning anymore
Heat: 0.0
# zap zap
Shock: 2.5
Cold: 0.0
Caustic: 0.0
Poison: 0.0
Cellular: 0.0
flatReductions:
# can't punch the endoskeleton to death
Blunt: 5

View File

@@ -130,3 +130,20 @@
- state: green
- sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon
- type: entity
parent: MarkerBase
id: SpawnPointGhostTerminator
name: terminator spawn point
components:
- type: GhostRole
name: ghost-role-information-exterminator-name
description: ghost-role-information-exterminator-description
rules: ghost-role-information-exterminator-rules
- type: GhostRoleMobSpawner
prototype: MobHumanTerminator
- type: Sprite
layers:
- state: green
- sprite: Mobs/Species/Terminator/parts.rsi
state: full

View File

@@ -0,0 +1,183 @@
- type: entity
parent: MobHuman
id: MobHumanTerminator
# uses random name generator dont worry
name: exterminator
components:
- type: Terminator
- type: GenericAntag
rule: Exterminator
# reduced barotrauma damage
- type: Barotrauma
damage:
types:
Blunt: 0.1
# 4x stamina, faster recovery
- type: Stamina
decay: 6
cooldown: 1
critThreshold: 400
# immune to space drugs, pax, temporary blindness
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- Stutter
- Electrocution
- Drunk
- SlurredSpeech
- RatvarianLanguage
- PressureImmunity
- Muted
- ForcedSleep
- StaminaModifier
- type: MobState
allowedStates:
- Alive
- Dead
# endoskeleton need it
- type: TransferMindOnGib
- type: MobThresholds
thresholds:
0: Alive
# used for health display its not possible to actually fall into crit
200: Dead
# fire!!!!
- type: Flammable
damage:
types:
Heat: 2.0
# slightly wider thresholds
- type: Temperature
heatDamageThreshold: 390
coldDamageThreshold: 240
# take terminator flesh damage
- type: Damageable
damageModifierSet: CyberneticFlesh
# only organ is an endoskeleton, which is transferred when flesh dies
- type: Body
prototype: TerminatorFlesh
# endoskeleton transformation when either you would get burned to crit or killed by any damage
# you will become an endoskeleton as your last chance to kill the target
- type: Destructible
thresholds:
# the burn trigger is first incase of a bombing or nuking, it might well do over 200 damage but 100 heat is more important
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 100
behaviors:
- !type:PopupBehavior
popup: terminator-endoskeleton-burn-popup
popupType: LargeCaution
- !type:GibBehavior
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:PopupBehavior
popup: terminator-endoskeleton-gib-popup
popupType: LargeCaution
- !type:GibBehavior
# faster than humans when damaged
- type: SlowOnDamage
speedModifierThresholds:
70: 0.8
90: 0.6
# arnold is very strong
- type: MeleeWeapon
damage:
types:
Blunt: 10
Structural: 10
- type: RandomHumanoidAppearance
- type: entity
parent:
- BaseMob
- MobCombat
- MobDamageable
- MobSiliconBase
id: MobTerminatorEndoskeleton
# you are now valid
name: nt-800 "exterminator" endoskeleton
description: The inner powerhouse of Susnet's infiltrator androids. Ridiculously hard alloy on the inside, unassuming flesh on the outside.
components:
- type: HumanoidAppearance
species: Terminator
- type: MovementSpeedModifier
baseWalkSpeed: 1.5
baseSprintSpeed: 3.0
- type: Sprite
sprite: Mobs/Species/Terminator/parts.rsi
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
# he heavy
density: 500
mask:
- MobMask
layer:
- MobLayer
- type: MobThresholds
thresholds:
0: Alive
# gibbed at 200 so cant go crit
200: Dead
# incase some weird stuff happens and the crew adopts a terminator
- type: Repairable
doAfterDelay: 15
allowSelfRepair: false
- type: Body
prototype: TerminatorEndoskeleton
# lets it sit in the terminator flesh's brain slot
- type: Organ
- type: Brain
- type: TypingIndicator
proto: robot # beep boop borp
- type: Speech
speechSounds: Pai
- type: Damageable
damageModifierSet: Cybernetic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 200
behaviors:
- !type:PlaySoundBehavior
# endoSKELETON
sound: /Audio/Effects/bone_rattle.ogg
# a keepsake or a gift for cargo
- !type:SpawnEntitiesBehavior
spawn:
HeadTerminator:
min: 1
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
# for fire spreading around, the endoskeleton cannot burn
- type: Flammable
fireSpread: true
canResistFire: true
damage:
types:
Heat: 0
# now his only weapon, but it is stronger
- type: MeleeWeapon
damage:
types:
Blunt: 15
Structural: 5
- type: Puller
needsHands: false
- type: Tag
tags:
- DoorBumpOpener
- ShoesRequiredStepTriggerImmune
# let mind transfer on gib work
- MindTransferTarget

View File

@@ -260,6 +260,19 @@
lightBreakChancePerSecond: 0.0003
doorToggleChancePerSecond: 0.001
- type: entity
parent: BaseGameRule
id: TerminatorSpawn
noSpawn: true
components:
- type: StationEvent
weight: 8
duration: 1
earliestStart: 30
minimumPlayers: 20
- type: RandomSpawnRule
prototype: SpawnPointGhostTerminator
- type: entity
id: VentClog
parent: BaseGameRule

View File

@@ -35,3 +35,14 @@
noSpawn: true
components:
- type: ThiefRule
- type: entity
noSpawn: true
parent: BaseGameRule
id: Exterminator
components:
- type: GenericAntagRule
agentName: terminator-round-end-agent-name
objectives:
- TerminateObjective
- ShutDownObjective

View File

@@ -0,0 +1,40 @@
- type: entity
abstract: true
parent: BaseObjective
id: BaseTerminatorObjective
components:
- type: Objective
difficulty: 1
issuer: susnet
- type: RoleRequirement
roles:
components:
- TerminatorRole
- type: entity
noSpawn: true
parent: [BaseTerminatorObjective, BaseKillObjective]
id: TerminateObjective
description: Follow your programming and terminate the target.
components:
- type: Objective
unique: false
- type: TargetObjective
title: objective-terminate-title
- type: PickRandomPerson
- type: TerminatorTargetOverride
- type: KillPersonCondition
requireDead: true
- type: entity
noSpawn: true
parent: BaseTerminatorObjective
id: ShutDownObjective
name: Shut down
description: Once the mission is complete die to prevent our technology from being stolen.
components:
- type: Objective
icon:
sprite: Mobs/Species/Terminator/parts.rsi
state: skull_icon
- type: DieCondition

View File

@@ -0,0 +1,6 @@
- type: antag
id: Terminator
name: roles-antag-terminator-name
antagonist: true
setPreference: false
objective: roles-antag-terminator-objective

View File

@@ -0,0 +1,110 @@
- type: species
id: Terminator
name: Terminator
roundStart: false
prototype: MobTerminatorEndoskeleton
sprites: MobTerminatorSprites
defaultSkinTone: "#fff9e2"
markingLimits: MobHumanMarkingLimits
maleFirstNames: skeletonNamesFirst
femaleFirstNames: skeletonNamesFirst
dollPrototype: MobSkeletonPersonDummy
skinColoration: TintedHues
- type: speciesBaseSprites
id: MobTerminatorSprites
sprites:
Head: MobTerminatorHead
Chest: MobTerminatorTorso
LArm: MobTerminatorLArm
RArm: MobTerminatorRArm
LHand: MobTerminatorLHand
RHand: MobTerminatorRHand
LLeg: MobTerminatorLLeg
RLeg: MobTerminatorRLeg
LFoot: MobTerminatorLFoot
RFoot: MobTerminatorRFoot
- type: humanoidBaseSprite
id: MobTerminatorHead
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: head_m
- type: humanoidBaseSprite
id: MobTerminatorHeadMale
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: head_m
- type: humanoidBaseSprite
id: MobTerminatorHeadFemale
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: head_f
- type: humanoidBaseSprite
id: MobTerminatorTorso
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: torso_m
- type: humanoidBaseSprite
id: MobTerminatorTorsoMale
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: torso_m
- type: humanoidBaseSprite
id: MobTerminatorTorsoFemale
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: torso_f
- type: humanoidBaseSprite
id: MobTerminatorLLeg
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: l_leg
- type: humanoidBaseSprite
id: MobTerminatorLArm
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: l_arm
- type: humanoidBaseSprite
id: MobTerminatorLHand
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: l_hand
- type: humanoidBaseSprite
id: MobTerminatorLFoot
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: l_foot
- type: humanoidBaseSprite
id: MobTerminatorRLeg
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: r_leg
- type: humanoidBaseSprite
id: MobTerminatorRArm
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: r_arm
- type: humanoidBaseSprite
id: MobTerminatorRHand
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: r_hand
- type: humanoidBaseSprite
id: MobTerminatorRFoot
baseSprite:
sprite: Mobs/Species/Terminator/parts.rsi
state: r_foot

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

View File

@@ -0,0 +1,66 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Created by ps3moira#9488 (discord) for SS14.",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "full"
},
{
"name": "head_f",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "skull_icon",
"directions": 1
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB