[Antag] add space ninja as midround antag (#14069)

* start of space ninja midround antag

* suit has powercell, can be upgraded only (not replaced with equal or worse battery)

* add doorjacking to ninja gloves, power cell, doorjack objective (broken), tweaks

* 💀

* add basic suit power display that uses stamina rsi

* add draining apc/sub/smes - no wires yet

* add research downloading

* ninja starts implanted, move some stuff to yaml

* add Automated field to OnUseTimerTrigger

* implement spider charge and objective

* fix client crash when taking suit off, some refactor

* add survive condition and tweak locale

* add comms console icon for objective

* add calling in a threat - currently revenant and dragon

* combine all glove abilities

* locale

* spark sounds when draining, refactoring

* toggle is actually toggle now

* prevent crash if disabling stealth with outline

* add antag ctrl for ninja, hopefully show greentext

* fix greentext and some other things

* disabling gloves if taken off or suit taken off

* basic energy katana, change ninja loadout

* recallable katana, refactoring

* start of dash - not done yet

* katana dashing ability

* merge upstream + compiling, make AutomatedTimer its own component

* docs and stuff

* partial refactor of glove abilities, still need to move handling

* make dooremaggedevent by ref

* move bunch of stuff to shared - broken

* clean ninja antag verb

* doc

* mark rule config fields as required

* fix client crash

* wip systems refactor

* big refactor of systems

* fuck

* make TryDoElectrocution callable from shared

* finish refactoring?

* no guns

* start with internals on

* clean up glove abilities, add range check

* create soap, in place of ninja throwing stars

* add emp suit ability

* able to eat chefs stolen food in space

* stuff, tell client when un/cloaked but there is bug with gloves

* fix prediction breaking gloves on client

* ninja soap despawns after a minute

* ninja spawns outside the station now, with gps + station coords to navigate

* add cooldown to stun ability

* cant use glove abilities in combat mode

* require empty hand to use glove abilities

* use ghost role spawner

* Update Content.Server/Ninja/Systems/NinjaSuitSystem.cs

Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>

* some review changes

* show powercell charge on examine

* new is needed

* address some reviews

* ninja starts with jetpack, i hope

* partial feedback

* uhh

* pro

* remove pirate from threats list

* use doafter refactor

* pro i gave skeleton jetpack

* some stuff

* use auto gen state

* mr handy

* use EntityQueryEnumerator

* cleanup

* spider charge target anti-troll

* mmmmmm

---------

Co-authored-by: deltanedas <deltanedas@laptop>
Co-authored-by: deltanedas <user@zenith>
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
This commit is contained in:
deltanedas
2023-04-17 07:33:27 +00:00
committed by GitHub
parent 0e6b273f1f
commit c1cda0dbf8
78 changed files with 2697 additions and 19 deletions

View File

@@ -6,6 +6,7 @@
order:
- category: Health
- category: Stamina
- alertType: SuitPower
- category: Internals
- alertType: Fire
- alertType: Handcuffed

View File

@@ -0,0 +1,21 @@
- type: alert
id: SuitPower
icons:
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina0
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina1
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina2
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina3
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina4
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina5
- sprite: /Textures/Interface/Alerts/stamina.rsi
state: stamina6
name: alerts-suit-power-name
description: alerts-suit-power-desc
minSeverity: 0
maxSeverity: 6

View File

@@ -9,6 +9,20 @@
- type: entity
noSpawn: true
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelTools
components:
- type: StorageFill
contents:
- id: BoxSurvival
- id: Crowbar
- id: Wrench
- id: Screwdriver
- id: Wirecutter
- id: Welder
- id: Multitool
- type: entity
parent: ClothingBackpackSatchelClown
id: ClothingBackpackSatchelClownFilled
components:

View File

@@ -203,6 +203,17 @@
- type: Thieving
stripTimeReduction: 1
stealthy: true
- type: NinjaGloves
- type: NinjaDoorjack
- type: NinjaDrain
- type: NinjaStun
- type: NinjaDownload
- type: NinjaTerror
# not actually electrified, just used to make stun ability work
- type: Electrified
# delay for stunning to prevent instant stunlocking
- type: UseDelay
delay: 1
- type: entity
parent: ClothingHandsBase

View File

@@ -137,7 +137,7 @@
- HidesHair
- type: entity
parent: ClothingHeadBase
parent: ClothingHeadEVAHelmetBase
id: ClothingHeadHelmetSpaceNinja
name: space ninja helmet
description: What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear.
@@ -146,7 +146,6 @@
sprite: Clothing/Head/Helmets/spaceninja.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/spaceninja.rsi
- type: IngestionBlocker
- type: Tag
tags:
- HidesHair

View File

@@ -92,6 +92,13 @@
sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
- type: PressureProtection
highPressureMultiplier: 0.6
lowPressureMultiplier: 1000
- type: DiseaseProtection
protection: 0.05
- type: TemperatureProtection
coefficient: 0.01
- type: Armor
modifiers:
coefficients:
@@ -99,6 +106,22 @@
Slash: 0.6
Piercing: 0.6
Heat: 0.6
- type: NinjaSuit
- type: PowerCellSlot
cellSlotId: cell_slot
# throwing in a recharger would bypass glove charging mechanic
fitsInCharger: false
- type: ContainerContainer
containers:
cell_slot: !type:ContainerSlot
- type: ItemSlots
slots:
cell_slot:
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellSmall
# delay for when attacked while cloaked
- type: UseDelay
delay: 5
- type: entity
parent: ClothingOuterBase

View File

@@ -77,6 +77,10 @@
- type: Clothing
sprite: Clothing/Shoes/Specific/spaceninja.rsi
- type: NoSlip
- type: ClothingSpeedModifier
# ninja are masters of sneaking around relatively quickly, won't break cloak
walkModifier: 1.1
sprintModifier: 1.3
- type: entity
parent: ClothingShoesBaseButcherable

View File

@@ -93,3 +93,21 @@
- state: green
- sprite: Structures/Wallmounts/signs.rsi
state: radiation
- type: entity
id: SpawnPointGhostSpaceNinja
name: ghost role spawn point
suffix: space ninja
parent: MarkerBase
components:
- type: GhostRoleMobSpawner
prototype: MobHumanSpaceNinja
name: Space Ninja
description: Use stealth and deception to sabotage the station.
rules: You are an elite mercenary of the Spider Clan. You aren't required to follow your objectives, yet your NINJA HONOR demands you try.
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon

View File

@@ -77,3 +77,26 @@
- type: Faction
factions:
- Syndicate
# Space Ninja
- type: entity
noSpawn: true
name: Space Ninja
parent: MobHuman
id: MobHumanSpaceNinja
components:
- type: Loadout
prototype: SpaceNinjaGear
prototypes: [SpaceNinjaGear]
- type: Faction
factions:
- Syndicate
- type: Ninja
- type: RandomMetadata
nameSegments:
- names_ninja_title
- names_ninja
- type: Tag
tags:
# fight with honor!
- GunsDisabled

View File

@@ -102,3 +102,18 @@
- type: StepTrigger
- type: Item
heldPrefix: omega
- type: entity
name: ninja soap
id: SoapNinja
parent: Soap
description: The most important soap in the entire universe, as without it we would all cease to exist. Smells of honor.
components:
- type: Item
heldPrefix: ninja
# despawn to prevent ninja killing server
- type: TimedDespawn
lifetime: 60
# no holding ninja hostage and forcing him to make infinite money for cargo
- type: StaticPrice
price: 0

View File

@@ -0,0 +1,47 @@
- type: entity
name: spider charge
description: A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area.
# not actually modified C-4! oh the horror!
parent: BaseItem
id: SpiderCharge
components:
- type: Sprite
sprite: Objects/Weapons/Bombs/spidercharge.rsi
state: icon
- type: Item
sprite: Objects/Weapons/Bombs/spidercharge.rsi
size: 10
- type: SpiderCharge
- type: OnUseTimerTrigger
delay: 10
delayOptions: [5, 10, 30, 60]
initialBeepDelay: 0
beepSound: /Audio/Machines/Nuke/general_beep.ogg
startOnStick: true
- type: AutomatedTimer
- type: Sticky
stickDelay: 5
stickPopupStart: comp-sticky-start-stick-bomb
stickPopupSuccess: comp-sticky-success-stick-bomb
# can only stick it in target area, no reason to unstick
canUnstick: false
blacklist: # can't stick it to movable things, even if they are in the target area
components:
- Anchorable
- Item
- Body
- type: Explosive # Powerful explosion in a medium radius. Will break underplating.
explosionType: DemolitionCharge
totalIntensity: 60
intensitySlope: 10
maxIntensity: 60
canCreateVacuum: true
- type: ExplodeOnTrigger
- type: StickyVisualizer
- type: Appearance
visuals:
- type: GenericEnumVisualizer
key: enum.Trigger.TriggerVisuals.VisualState
states:
enum.Trigger.TriggerVisualState.Primed: primed
enum.Trigger.TriggerVisualState.Unprimed: complete

View File

@@ -43,6 +43,29 @@
sprite: Objects/Weapons/Melee/katana.rsi
- type: DisarmMalus
- type: entity
name: energy katana
parent: Katana
id: EnergyKatana
description: A katana infused with strong energy.
components:
- type: Sprite
sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon
- type: MeleeWeapon
damage:
types:
Slash: 30
- type: Item
size: 15
sprite: Objects/Weapons/Melee/energykatana.rsi
- type: EnergyKatana
- type: Clothing
sprite: Objects/Weapons/Melee/energykatana.rsi
slots:
- Back
- Belt
- type: entity
name: machete
parent: BaseItem

View File

@@ -69,6 +69,28 @@
earliestStart: 15
minimumPlayers: 15
- type: gameRule
id: SpaceNinjaSpawn
config:
!type:NinjaRuleConfiguration
id: SpaceNinjaSpawn
weight: 10
endAfter: 1
earliestStart: 60
minimumPlayers: 15
objectives:
- DownloadObjective
- DoorjackObjective
- SpiderChargeObjective
- TerrorObjective
- SurviveObjective
implants: [ MicroBombImplant ]
threats:
- announcement: terror-dragon
rule: Dragon
- announcement: terror-revenant
rule: RevenantSpawn
- type: gameRule
id: RevenantSpawn
config:

View File

@@ -0,0 +1,39 @@
- type: objective
id: DownloadObjective
issuer: spiderclan
requirements:
- !type:TraitorRequirement {}
conditions:
- !type:DownloadCondition {}
- type: objective
id: DoorjackObjective
issuer: spiderclan
requirements:
- !type:TraitorRequirement {}
conditions:
- !type:DoorjackCondition {}
- type: objective
id: SpiderChargeObjective
issuer: spiderclan
requirements:
- !type:TraitorRequirement {}
conditions:
- !type:SpiderChargeCondition {}
- type: objective
id: TerrorObjective
issuer: spiderclan
requirements:
- !type:TraitorRequirement {}
conditions:
- !type:TerrorCondition {}
- type: objective
id: SurviveObjective
issuer: spiderclan
requirements:
- !type:TraitorRequirement {}
conditions:
- !type:SurviveCondition {}

View File

@@ -0,0 +1,9 @@
- type: antag
id: SpaceNinja
name: roles-antag-space-ninja-name
antagonist: true
setPreference: false
objective: roles-antag-space-ninja-objective
# special:
# - !type:AddImplantSpecial
# implants: [ MicroBombImplant ]

View File

@@ -40,12 +40,23 @@
id: SpaceNinjaGear
equipment:
jumpsuit: ClothingUniformJumpsuitColorBlack
back: ClothingBackpackFilled
# belt holds katana so satchel has the tools for sabotaging things
back: ClothingBackpackSatchelTools
mask: ClothingMaskGasSyndicate
head: ClothingHeadHelmetSpaceNinja
# TODO: space ninja mask
eyes: ClothingEyesGlassesMeson
gloves: ClothingHandsGlovesSpaceNinja
outerClothing: ClothingOuterSuitSpaceninja
shoes: ClothingShoesSpaceNinja
id: PassengerPDA
id: AgentIDCard
ears: ClothingHeadsetGrey
pocket1: SpiderCharge
pocket2: HandheldGPSBasic
belt: EnergyKatana
suitstorage: YellowOxygenTankFilled
inhand:
left hand: JetpackBlackFilled
innerclothingskirt: ClothingUniformJumpskirtColorBlack
satchel: ClothingBackpackSatchelFilled
duffelbag: ClothingBackpackDuffelFilled