From d8c9f73ed054a82a6106fecf30e62c1fae6d7884 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:27:13 -0700 Subject: [PATCH 01/14] initial stuff, maybe will work, but we'll see --- .../Components/CrownedSpiritRoleComponent.cs | 6 ++ .../en-US/_DV/ghost/roles/crowned-spirit.ftl | 12 +++ .../objectives/conditions/crowned-spirit.ftl | 2 + .../en-US/_DV/prototypes/roles/antags.ftl | 3 + .../Prototypes/_DV/Damage/modifier_sets.yml | 12 +++ .../Entities/Markers/Spawners/ghost_roles.yml | 17 ++++ .../_DV/Entities/Mobs/NPCs/crownedspirit.yml | 93 ++++++++++++++++++ Resources/Prototypes/_DV/GameRules/events.yml | 27 +++++ .../_DV/Objectives/crownedspirit.yml | 59 +++++++++++ .../_DV/Roles/Antags/crownedspirit.yml | 9 ++ .../_DV/Roles/MindRoles/mind_roles.yml | 13 +++ .../Mobs/Ghosts/radiantspirit.rsi/meta.json | 15 +++ .../radiantspirit.rsi/radiantspirit.png | Bin 0 -> 837 bytes 13 files changed, 268 insertions(+) create mode 100644 Content.Shared/_DV/Roles/Components/CrownedSpiritRoleComponent.cs create mode 100644 Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl create mode 100644 Resources/Locale/en-US/_DV/objectives/conditions/crowned-spirit.ftl create mode 100644 Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml create mode 100644 Resources/Prototypes/_DV/Objectives/crownedspirit.yml create mode 100644 Resources/Prototypes/_DV/Roles/Antags/crownedspirit.yml create mode 100644 Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/meta.json create mode 100644 Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/radiantspirit.png diff --git a/Content.Shared/_DV/Roles/Components/CrownedSpiritRoleComponent.cs b/Content.Shared/_DV/Roles/Components/CrownedSpiritRoleComponent.cs new file mode 100644 index 00000000000..2ef8a5b5e41 --- /dev/null +++ b/Content.Shared/_DV/Roles/Components/CrownedSpiritRoleComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Roles.Components; + +namespace Content.Shared._DV.Roles; + +[RegisterComponent] +public sealed partial class CrownedSpiritRoleComponent : BaseMindRoleComponent; diff --git a/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl new file mode 100644 index 00000000000..0fbbe47a3d3 --- /dev/null +++ b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl @@ -0,0 +1,12 @@ +ghost-role-information-crownedspirit-name = Crowned Spirit +ghost-role-information-crownedspirit-description = Ambition and Malice once again rears it's head. Offer it your assistance, and then end it. +ghost-role-information-crownedspirit-rules = You are a [color=red][bold]Solo Antagonist[/bold][/color]. + You should find a Traitor or other similar antagonist and offer your aid. + You should avoid killing your target without explicit orders from the one you are aiding. + You may kill the one you are aiding after they have completed your kill objective, but not before. + +crownedspirit-role-briefing = + You are a Crowned Spirit, a being born to punish the ambition and hubris of mortals. + You seek to push your target to reveal their true nature to you, ending a life simply for the power and assistance you offer. + Offer them all you can, assist them in their own goals, and keep them alive until your task is done. And then punish them for their transgressions. +crownedspirit-round-end-name = Crowned Spirit diff --git a/Resources/Locale/en-US/_DV/objectives/conditions/crowned-spirit.ftl b/Resources/Locale/en-US/_DV/objectives/conditions/crowned-spirit.ftl new file mode 100644 index 00000000000..21fdcd6bfcc --- /dev/null +++ b/Resources/Locale/en-US/_DV/objectives/conditions/crowned-spirit.ftl @@ -0,0 +1,2 @@ +objective-issuer-crownedspirit = The Ambitions +objective-condition-crownedspirit-corruption-title = Have your charge murder {$targetName}, {CAPITALIZE($job)}. diff --git a/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl b/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl index d194bd3e15b..7d5bf9d8e29 100644 --- a/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl @@ -33,3 +33,6 @@ roles-antag-asakim-objective = Serve the ancient directives of your ship's AI. roles-antag-hitman-name = Hitman roles-antag-hitman-objective = Kill your target in the way your client wishes. + +roles-antag-crownedspirit-name = Crowned Spirit +roles-antag-crownedspirit-objective = Provide aid to the wicked, and then punish them for it. diff --git a/Resources/Prototypes/_DV/Damage/modifier_sets.yml b/Resources/Prototypes/_DV/Damage/modifier_sets.yml index da68c3b5fd5..630fd0a8f36 100644 --- a/Resources/Prototypes/_DV/Damage/modifier_sets.yml +++ b/Resources/Prototypes/_DV/Damage/modifier_sets.yml @@ -138,6 +138,18 @@ Holy: 5.0 Soul: 0.0 +- type: damageModifierSet + id: RadiantSpirit + coefficients: + Cold: 2.0 + Shock: 0.2 + Blunt: 0.4 + Slash: 0.0 + Piercing: 0.4 + Heat: 0.4 + Holy: 0.0 + Soul: 3.0 + - type: damageModifierSet id: Ifrit coefficients: diff --git a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml index 030f4035a4b..26e99e19676 100644 --- a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml @@ -177,3 +177,20 @@ map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] color: "#bb4b1e" shader: unshaded + +- type: entity + categories: [ HideSpawnMenu, Spawner ] + id: SpawnPointCrownedSpirit + name: crowned spirit role spawn point + suffix: Crowned Spirit + parent: BaseAntagSpawner + components: + - type: GhostRole + name: ghost-role-information-crownedspirit-name + description: ghost-role-information-crownedspirit-description + rules: ghost-role-information-crownedspirit-rules + makeSentient: true + allowSpeech: true + allowMovement: true + mindRoles: + - MindRoleGhostRoleSoloAntagonist diff --git a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml new file mode 100644 index 00000000000..cc491e99c40 --- /dev/null +++ b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml @@ -0,0 +1,93 @@ +- type: entity + parent: [ SimpleSpaceMobBase, MobCombat ] + id: MobCrownedSpirit + name: Crowned Spirit + description: A creature of radiance. So beautiful are they, with their crown of light. + components: + - type: Sprite + drawdepth: Mobs + sprite: _DV/Mobs/Ghosts/radiantspirit.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: radiantspirit + - type: SlowOnDamage + speedModifierThresholds: + 100: 0.9 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: MobThresholds + thresholds: + 0: Alive + 210: Dead + - type: Damageable + damageContainer: BiologicalMetaphysical + damageModifierSet: RadiantSpirit + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 160 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 5.5 + - type: NoSlip + - type: MovedByPressure + enabled: false + - type: CombatMode + - type: MeleeWeapon + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg + angle: 90 + animation: WeaponArcSkiaLunge + wideAnimation: WeaponArcSkiaSwipe + wideAnimationRotation: -90 + swingLeft: true + attackRate: 1.5 + range: 2.0 + altDisarm: false + damage: + types: + Slash: 20 + Holy: 15 + - type: Tag + tags: + - TaserImmune + - type: Speech + speechVerb: Ghost + - type: Psionic + - type: NoosphericZapPower + - type: PsionicInvisibilityPower + - type: Emoting + - type: Insulated + - type: FlashImmunity + - type: Bloodstream + bloodReferenceSolution: + reagents: + - ReagentId: Ambrosia + Quantity: 200 + - type: PointLight + radius: 3 + energy: 2 + color: "#f5d750" + castShadows: false + - type: GhostRole + name: ghost-role-information-crownedspirit-name + description: ghost-role-information-crownedspirit-description + rules: ghost-role-information-crownedspirit-rules + mindRoles: + - MindRoleCrownedSpirit + raffle: + settings: default + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index fb6c252dc2c..df231ca54c6 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -458,3 +458,30 @@ implants: - RadioImplantCentcomm - NanolinkSubImplant + +- type: entity + parent: BaseMidRoundAntag + id: CrownedSpiritSpawn + components: + - type: StationEvent + weight: 5 + duration: null + minimumPlayers: 30 + - type: PrecognitionResult + message: psionic-power-precognition-crownedspirit-result-message + - type: AntagSpawner + prototype: MobCrownedSpirit + - type: AntagObjectives + objectives: + - CrownedSpiritServeObjective + - CrownedSpiritKillObjective + - CrownedSpiritPunishObjective + - type: AntagSelection + agentName: crownedspirit-round-end-name + definitions: + - spawnerPrototype: SpawnPointCrownedSpirit + min: 1 + max: 1 + pickPlayer: false + mindRoles: + - MindRoleCrownedSpirit diff --git a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml new file mode 100644 index 00000000000..1e724ffee11 --- /dev/null +++ b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml @@ -0,0 +1,59 @@ +- type: entity + abstract: true + parent: BaseObjective + id: BaseCrownedSpiritObjective + components: + - type: Objective + difficulty: 1 # unused + issuer: objective-issuer-crownedspirit + icon: + sprite: Mobs/Ghosts/ghost_human.rsi + state: icon + - type: RoleRequirement + roles: + - CrownedSpiritRole + +- type: entity + parent: [BaseCrownedSpiritObjective, BaseSurviveObjective] + id: CrownedSpiritServeObjective + name: Find someone wicked to serve. + description: Find someone wicked and offer them your power.. for a price. + components: + - type: Objective + +- type: entity + parent: BaseCrownedSpiritObjective + id: CrownedSpiritKillObjective + name: Ensure their corruption. + description: Have your new charge cause your target's death. Do not kill them yourself unless your charge orders it. This must be their own decision. + components: + - type: Objective + issuer: objective-issuer-crownedspirit + unique: false + icon: + sprite: Mobs/Ghosts/ghost_human.rsi + state: icon + - type: KillPersonCondition + requireDead: true + - type: TargetObjective + title: objective-condition-crownedspirit-corruption-title + - type: PickRandomPerson + filters: + - !type:BodyMindFilter + whitelist: + components: + - CommandStaff + - !type:ObjectiveImmuneFilter + # Can't have multiple objectives to kill the same person. + - !type:TargetObjectiveMindFilter + blacklist: + components: + - KillPersonCondition + +- type: entity + parent: [BaseCrownedSpiritObjective, BaseSurviveObjective] + id: CrownedSpiritPunishObjective + name: Punish them for their actions. + description: Punish the one you have chosen to serve. Through their actions, a life you chose has been taken. Return the favor to them. + components: + - type: Objective diff --git a/Resources/Prototypes/_DV/Roles/Antags/crownedspirit.yml b/Resources/Prototypes/_DV/Roles/Antags/crownedspirit.yml new file mode 100644 index 00000000000..26a9f8686f7 --- /dev/null +++ b/Resources/Prototypes/_DV/Roles/Antags/crownedspirit.yml @@ -0,0 +1,9 @@ +- type: antag + id: CrownedSpirit + name: roles-antag-crownedspirit-name + objective: roles-antag-crownedspirit-objective + antagonist: true + setPreference: true + requirements: + - !type:OverallPlaytimeRequirement + time: 24h diff --git a/Resources/Prototypes/_DV/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/_DV/Roles/MindRoles/mind_roles.yml index 2ce9150cde1..7e5afa89efd 100644 --- a/Resources/Prototypes/_DV/Roles/MindRoles/mind_roles.yml +++ b/Resources/Prototypes/_DV/Roles/MindRoles/mind_roles.yml @@ -141,3 +141,16 @@ - type: HitmanRole - type: RoleBriefing briefing: hitman-briefing + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleCrownedSpirit + name: Crowned Spirit Role + components: + - type: MindRole + roleType: SoloAntagonist + antagPrototype: CrownedSpirit + exclusiveAntag: true + - type: CrownedSpiritRole + - type: RoleBriefing + briefing: crownedspirit-role-briefing diff --git a/Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/meta.json b/Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/meta.json new file mode 100644 index 00000000000..0875017fa47 --- /dev/null +++ b/Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Original art by by AeraAulin (github) for ss14", + "states": [ + { + "name": "radiantspirit", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/radiantspirit.png b/Resources/Textures/_DV/Mobs/Ghosts/radiantspirit.rsi/radiantspirit.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d9c8e99e9e4b7ab829e398d97df7f90aa66109 GIT binary patch literal 837 zcmV-L1G@Z)P)Px%|4BqaRCt{2TD@-DFc3Z!l8|P|+74AwR6sKrsFyy2mkfcP)X3n)Z=u0M22FYc z4|X64P^T+snwH4p@u!JCAVVlh-{;fu?s!xJ1oU+^%46Ajn^2w=n&0Rqkys?WHO>te z{92QB30xT>D1Tp9qxfL?f89B;@_(8m2f>K56}^&OT-CI{#2JFTW=H51;y()_WDv>1)sjIMoK{P#edTPDu^QFwWuQJ zh6{e=Ht1%>{pw%o ziItbn&5(C~)m!N6YW(`;m$E~{-5_zvujK)z*5!U1F8M!v8nlA%UZ4y9#RI6A3PS%A z|Kb4@p!M-D#JK<$Kk0NBdvhY>rlbpm=D!jXIty^<`0z1cF#zSJ7+hZlRg<*`gfvDJ zl^{p=mjdc}fs7>vgccAQEQgjpzY*ltV(kIN<`66fs47BJ7#SeO^e4kqqw!v#d}^-7 zeVq)6I`Ft$Mzbs3w8ZeohdKw)L7L`JJ~jMJQISAr%ojNHkb+>dD=D`*1yz%g0YaSv zn!r?}RT_*T9@uIyjsa+4Jfjck6)G*xV}MK$QxK$Rv5o;Tc);A)6s${O-$f8id@4hM zwgIyBHfeU{g@t3t3bGz&l^{aQw;|p>LgfXNT7a|!kUSRHyaeOV Date: Sat, 6 Jun 2026 20:34:43 -0700 Subject: [PATCH 02/14] add crowned spirit to the antags table --- Resources/Prototypes/_DV/GameRules/events.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index df231ca54c6..7df1764b842 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -17,6 +17,7 @@ - id: SkiaSpawn - id: RatKingSpawn - id: NTAgentSleeper + - id: CrownedSpiritSpawn # Replaces upstream meteor events until they're good - type: entity From 557a3b55664240590dcbedc4974e03d20b1886a0 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:40:36 -0700 Subject: [PATCH 03/14] change some wording --- Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl index 0fbbe47a3d3..cbe6c67bad5 100644 --- a/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl +++ b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl @@ -3,10 +3,10 @@ ghost-role-information-crownedspirit-description = Ambition and Malice once agai ghost-role-information-crownedspirit-rules = You are a [color=red][bold]Solo Antagonist[/bold][/color]. You should find a Traitor or other similar antagonist and offer your aid. You should avoid killing your target without explicit orders from the one you are aiding. - You may kill the one you are aiding after they have completed your kill objective, but not before. + You may kill the one you are aiding after they have completed your kill objective and their own, but not before. crownedspirit-role-briefing = You are a Crowned Spirit, a being born to punish the ambition and hubris of mortals. You seek to push your target to reveal their true nature to you, ending a life simply for the power and assistance you offer. - Offer them all you can, assist them in their own goals, and keep them alive until your task is done. And then punish them for their transgressions. + Offer them all you can, assist them in their own goals, and keep them alive until both of your tasks are done. And then punish them for their transgressions. crownedspirit-round-end-name = Crowned Spirit From aff32be5611d380f167fa6afbd8e804c54033b90 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 6 Jun 2026 21:12:45 -0700 Subject: [PATCH 04/14] add precog stuff --- Resources/Locale/en-US/_DV/abilities/psionic.ftl | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Locale/en-US/_DV/abilities/psionic.ftl b/Resources/Locale/en-US/_DV/abilities/psionic.ftl index 1d96aa22f43..fcd56c31836 100644 --- a/Resources/Locale/en-US/_DV/abilities/psionic.ftl +++ b/Resources/Locale/en-US/_DV/abilities/psionic.ftl @@ -100,6 +100,7 @@ psionic-power-precognition-unknown-shuttle-disaster-evac-pod-result-message = Yo psionic-power-precognition-syndicate-armsdealer-result-message = You see a vision of a ship lurking in the shadows, its cargo deadly. psionic-power-precognition-rift-spawn-result-message = You see a small spark of energy, quickly expanding as it tears reality apart, twisting everything around it. psionic-power-precognition-asakim-spawn-result-message = You smell stale air from a cryopod opening, and the faint echo of an intelligence far away but very near. +psionic-power-precognition-crownedspirit-result-message = You see a blinding light and a figure standing in front of you, their features obscured by their own shadow. # Psionic Eruption psionic-eruption-begin = {CAPITALIZE(THE($user))} is being consumed by a psionic energy! From 55d0ff4614bde7ca9851319f572d53750a35fbf5 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 7 Jun 2026 14:43:07 -0700 Subject: [PATCH 05/14] small tweaks --- Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl | 2 +- Resources/Prototypes/_DV/Objectives/crownedspirit.yml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl index cbe6c67bad5..c52c2937c15 100644 --- a/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl +++ b/Resources/Locale/en-US/_DV/ghost/roles/crowned-spirit.ftl @@ -2,7 +2,7 @@ ghost-role-information-crownedspirit-name = Crowned Spirit ghost-role-information-crownedspirit-description = Ambition and Malice once again rears it's head. Offer it your assistance, and then end it. ghost-role-information-crownedspirit-rules = You are a [color=red][bold]Solo Antagonist[/bold][/color]. You should find a Traitor or other similar antagonist and offer your aid. - You should avoid killing your target without explicit orders from the one you are aiding. + You should avoid killing your target without explicit orders from and the presence of the one you are aiding. You may kill the one you are aiding after they have completed your kill objective and their own, but not before. crownedspirit-role-briefing = diff --git a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml index 1e724ffee11..da6eba9a4e7 100644 --- a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml @@ -41,8 +41,6 @@ filters: - !type:BodyMindFilter whitelist: - components: - - CommandStaff - !type:ObjectiveImmuneFilter # Can't have multiple objectives to kill the same person. - !type:TargetObjectiveMindFilter From 1ebd5871557dd742ea1207a16e41da01de7d859b Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 7 Jun 2026 15:20:39 -0700 Subject: [PATCH 06/14] modify resistances, fix a thing, and add the thing I forgot --- Resources/Prototypes/_DV/Damage/modifier_sets.yml | 8 ++++---- .../Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml | 2 ++ Resources/Prototypes/_DV/Objectives/crownedspirit.yml | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/_DV/Damage/modifier_sets.yml b/Resources/Prototypes/_DV/Damage/modifier_sets.yml index 630fd0a8f36..24ac995890f 100644 --- a/Resources/Prototypes/_DV/Damage/modifier_sets.yml +++ b/Resources/Prototypes/_DV/Damage/modifier_sets.yml @@ -143,10 +143,10 @@ coefficients: Cold: 2.0 Shock: 0.2 - Blunt: 0.4 - Slash: 0.0 - Piercing: 0.4 - Heat: 0.4 + Blunt: 0.6 + Slash: 0.4 + Piercing: 0.55 + Heat: 0.5 Holy: 0.0 Soul: 3.0 diff --git a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml index cc491e99c40..ff17e422fc7 100644 --- a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml @@ -28,6 +28,8 @@ - type: Damageable damageContainer: BiologicalMetaphysical damageModifierSet: RadiantSpirit + - type: Puller + needsHands: false - type: Fixtures fixtures: fix1: diff --git a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml index da6eba9a4e7..1e724ffee11 100644 --- a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml @@ -41,6 +41,8 @@ filters: - !type:BodyMindFilter whitelist: + components: + - CommandStaff - !type:ObjectiveImmuneFilter # Can't have multiple objectives to kill the same person. - !type:TargetObjectiveMindFilter From d1a7d3c583b821789e9990d914079f31e43ae46c Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 14 Jun 2026 04:59:21 -0700 Subject: [PATCH 07/14] change threshold to 180 --- Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml index ff17e422fc7..282a6e8eee9 100644 --- a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/crownedspirit.yml @@ -17,7 +17,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 200 + damage: 180 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] From 411cd23e59066a442aa38098e41fa2bb3490da0b Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:28:29 -0700 Subject: [PATCH 08/14] merge conflict stuff --- .../Locale/en-US/_DV/abilities/psionic.ftl | 1 - .../Entities/Markers/Spawners/ghost_roles.yml | 17 ------------ Resources/Prototypes/_DV/GameRules/events.yml | 27 ------------------- 3 files changed, 45 deletions(-) diff --git a/Resources/Locale/en-US/_DV/abilities/psionic.ftl b/Resources/Locale/en-US/_DV/abilities/psionic.ftl index fcd56c31836..1d96aa22f43 100644 --- a/Resources/Locale/en-US/_DV/abilities/psionic.ftl +++ b/Resources/Locale/en-US/_DV/abilities/psionic.ftl @@ -100,7 +100,6 @@ psionic-power-precognition-unknown-shuttle-disaster-evac-pod-result-message = Yo psionic-power-precognition-syndicate-armsdealer-result-message = You see a vision of a ship lurking in the shadows, its cargo deadly. psionic-power-precognition-rift-spawn-result-message = You see a small spark of energy, quickly expanding as it tears reality apart, twisting everything around it. psionic-power-precognition-asakim-spawn-result-message = You smell stale air from a cryopod opening, and the faint echo of an intelligence far away but very near. -psionic-power-precognition-crownedspirit-result-message = You see a blinding light and a figure standing in front of you, their features obscured by their own shadow. # Psionic Eruption psionic-eruption-begin = {CAPITALIZE(THE($user))} is being consumed by a psionic energy! diff --git a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml index 26e99e19676..030f4035a4b 100644 --- a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml @@ -177,20 +177,3 @@ map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] color: "#bb4b1e" shader: unshaded - -- type: entity - categories: [ HideSpawnMenu, Spawner ] - id: SpawnPointCrownedSpirit - name: crowned spirit role spawn point - suffix: Crowned Spirit - parent: BaseAntagSpawner - components: - - type: GhostRole - name: ghost-role-information-crownedspirit-name - description: ghost-role-information-crownedspirit-description - rules: ghost-role-information-crownedspirit-rules - makeSentient: true - allowSpeech: true - allowMovement: true - mindRoles: - - MindRoleGhostRoleSoloAntagonist diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index 7df1764b842..5d3cd646b34 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -459,30 +459,3 @@ implants: - RadioImplantCentcomm - NanolinkSubImplant - -- type: entity - parent: BaseMidRoundAntag - id: CrownedSpiritSpawn - components: - - type: StationEvent - weight: 5 - duration: null - minimumPlayers: 30 - - type: PrecognitionResult - message: psionic-power-precognition-crownedspirit-result-message - - type: AntagSpawner - prototype: MobCrownedSpirit - - type: AntagObjectives - objectives: - - CrownedSpiritServeObjective - - CrownedSpiritKillObjective - - CrownedSpiritPunishObjective - - type: AntagSelection - agentName: crownedspirit-round-end-name - definitions: - - spawnerPrototype: SpawnPointCrownedSpirit - min: 1 - max: 1 - pickPlayer: false - mindRoles: - - MindRoleCrownedSpirit From f39163c8413e89d6652d1d1ffbd4096b4c2af1d0 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 20 Jun 2026 22:31:02 -0700 Subject: [PATCH 09/14] and fix merge conflicts hopefully --- .../Locale/en-US/_DV/abilities/psionic.ftl | 1 + .../Entities/Markers/Spawners/ghost_roles.yml | 17 ++++++++++++ Resources/Prototypes/_DV/GameRules/events.yml | 27 +++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/Resources/Locale/en-US/_DV/abilities/psionic.ftl b/Resources/Locale/en-US/_DV/abilities/psionic.ftl index 14c8dd45bdd..743ac0c7ada 100644 --- a/Resources/Locale/en-US/_DV/abilities/psionic.ftl +++ b/Resources/Locale/en-US/_DV/abilities/psionic.ftl @@ -94,6 +94,7 @@ psionic-power-precognition-rift-spawn-result-message = You see a small spark of psionic-power-precognition-asakim-spawn-result-message = You smell stale air from a cryopod opening, and the faint echo of an intelligence far away but very near. psionic-power-precognition-pitbull-spawn-result-message = You see a vision of a hundred small creatures being torn apart by bloodthirsty beasts in a maze of steel. psionic-power-precognition-hitman-spawn-result-message = You see a man in a business suit, a corpse at their feet. +psionic-power-precognition-crownedspirit-result-message = You see a blinding light and a figure standing in front of you, their features obscured by their own shadow. # Psionic Eruption psionic-eruption-begin = {CAPITALIZE(THE($user))} is being consumed by a psionic energy! diff --git a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml index 66d0d11a39c..d7b86eb79a9 100644 --- a/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/_DV/Entities/Markers/Spawners/ghost_roles.yml @@ -189,3 +189,20 @@ rules: ghost-role-information-hitman-rules mindRoles: - MindRoleHitman + +- type: entity + categories: [ HideSpawnMenu, Spawner ] + id: SpawnPointCrownedSpirit + name: crowned spirit role spawn point + suffix: Crowned Spirit + parent: BaseAntagSpawner + components: + - type: GhostRole + name: ghost-role-information-crownedspirit-name + description: ghost-role-information-crownedspirit-description + rules: ghost-role-information-crownedspirit-rules + makeSentient: true + allowSpeech: true + allowMovement: true + mindRoles: + - MindRoleGhostRoleSoloAntagonist diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index d03cbc74c05..fae0640703c 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -493,3 +493,30 @@ - id: MobMouse2 - id: MobMouse2 - id: MobPitbullVent + +- type: entity + parent: BaseMidRoundAntag + id: CrownedSpiritSpawn + components: + - type: StationEvent + weight: 5 + duration: null + minimumPlayers: 30 + - type: PrecognitionResult + message: psionic-power-precognition-crownedspirit-result-message + - type: AntagSpawner + prototype: MobCrownedSpirit + - type: AntagObjectives + objectives: + - CrownedSpiritServeObjective + - CrownedSpiritKillObjective + - CrownedSpiritPunishObjective + - type: AntagSelection + agentName: crownedspirit-round-end-name + definitions: + - spawnerPrototype: SpawnPointCrownedSpirit + min: 1 + max: 1 + pickPlayer: false + mindRoles: + - MindRoleCrownedSpirit From c815b2b9aef14230b3080500ec8bef7601464bfc Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sat, 20 Jun 2026 23:35:12 -0700 Subject: [PATCH 10/14] AAAAAAAAAAAA hatred --- Resources/Prototypes/_DV/GameRules/events.yml | 6 +++++- .../Prototypes/_DV/Objectives/crownedspirit.yml | 10 ++++++++++ .../_DV/Objectives/objectiveGroups.yml | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index fae0640703c..0da04db3553 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -510,7 +510,11 @@ objectives: - CrownedSpiritServeObjective - CrownedSpiritKillObjective - - CrownedSpiritPunishObjective + - type: AntagRandomObjectives + sets: + - groups: CrownedSpiritObjectiveGroup + maxPicks: 3 + maxDifficulty: 300 - type: AntagSelection agentName: crownedspirit-round-end-name definitions: diff --git a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml index 1e724ffee11..00cce713cdc 100644 --- a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml @@ -57,3 +57,13 @@ description: Punish the one you have chosen to serve. Through their actions, a life you chose has been taken. Return the favor to them. components: - type: Objective + difficulty: 1 + +- type: entity + parent: [BaseCrownedSpiritObjective, BaseSurviveObjective] + id: CrownedSpiritAidObjective + name: Provide support to those wronged. + description: Provide aid to those your charge has hurt, even if it comes at cost to your charge. + components: + - type: Objective + difficulty: 1 diff --git a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml index da4645aa2b4..0fd0d7b25e9 100644 --- a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml @@ -241,3 +241,19 @@ TestEngineeringObjective: 1 TestMedicalObjective: 1 DefundDepartmentObjective: 1 + +- type: weightedRandom + id: CrownedSpiritObjectiveGroup + weights: + CrownedSpiritObjectiveGroupPunish: 1 + CrownedSpiritObjectiveGroupAid: 1 + +- type: weightedRandom + id: CrownedSpiritObjectiveGroupPunish + weights: + CrownedSpiritPunishObjective + +- type: weightedRandom + id: CrownedSpiritObjectiveGroupAid + weights: + CrownedSpiritObjectiveGroupAid From 61554ea22cc13d68fcffa8f78d8696cdb3ea3a49 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:10:24 -0700 Subject: [PATCH 11/14] maybe this will work.. --- Resources/Prototypes/_DV/Objectives/crownedspirit.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml index 00cce713cdc..14d3ca31194 100644 --- a/Resources/Prototypes/_DV/Objectives/crownedspirit.yml +++ b/Resources/Prototypes/_DV/Objectives/crownedspirit.yml @@ -58,6 +58,7 @@ components: - type: Objective difficulty: 1 + unique: true - type: entity parent: [BaseCrownedSpiritObjective, BaseSurviveObjective] @@ -67,3 +68,4 @@ components: - type: Objective difficulty: 1 + unique: true From 54b80a2994765c190b526dc7bdcee2884797f414 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 21 Jun 2026 04:57:44 -0700 Subject: [PATCH 12/14] coding while eepy = mistakes --- Resources/Prototypes/_DV/Objectives/objectiveGroups.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml index 0fd0d7b25e9..e996d9151ad 100644 --- a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml @@ -256,4 +256,4 @@ - type: weightedRandom id: CrownedSpiritObjectiveGroupAid weights: - CrownedSpiritObjectiveGroupAid + CrownedSpiritAidObjective From 007f3196e82057df388602b9770953c82d7528a5 Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Sun, 21 Jun 2026 05:18:10 -0700 Subject: [PATCH 13/14] tired.. --- Resources/Prototypes/_DV/Objectives/objectiveGroups.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml index e996d9151ad..bb941fed65b 100644 --- a/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/_DV/Objectives/objectiveGroups.yml @@ -251,9 +251,9 @@ - type: weightedRandom id: CrownedSpiritObjectiveGroupPunish weights: - CrownedSpiritPunishObjective + CrownedSpiritPunishObjective: 1 - type: weightedRandom id: CrownedSpiritObjectiveGroupAid weights: - CrownedSpiritAidObjective + CrownedSpiritAidObjective: 1 From 6be4ec7e3c90eac4a90815ffced9c0fe5c570ade Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Wed, 15 Jul 2026 02:46:58 -0700 Subject: [PATCH 14/14] thing and merge conflict --- Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl | 3 --- Resources/Prototypes/_DV/GameRules/events.yml | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl b/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl index 7d5bf9d8e29..d194bd3e15b 100644 --- a/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/_DV/prototypes/roles/antags.ftl @@ -33,6 +33,3 @@ roles-antag-asakim-objective = Serve the ancient directives of your ship's AI. roles-antag-hitman-name = Hitman roles-antag-hitman-objective = Kill your target in the way your client wishes. - -roles-antag-crownedspirit-name = Crowned Spirit -roles-antag-crownedspirit-objective = Provide aid to the wicked, and then punish them for it. diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml index 0da04db3553..79749b7a8b8 100644 --- a/Resources/Prototypes/_DV/GameRules/events.yml +++ b/Resources/Prototypes/_DV/GameRules/events.yml @@ -513,7 +513,7 @@ - type: AntagRandomObjectives sets: - groups: CrownedSpiritObjectiveGroup - maxPicks: 3 + maxPicks: 1 maxDifficulty: 300 - type: AntagSelection agentName: crownedspirit-round-end-name