diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs index 36e2127f301..4d2f3d12746 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs @@ -5,6 +5,10 @@ using Content.Shared.Damage; using Content.Shared.Atmos; using Content.Server.Polymorph.Systems; +using Content.Server.Temperature.Components; +using Content.Shared.Temperature.Components; +using Content.Server.Body.Components; +using Content.Shared.Armor; namespace Content.Server.Heretic.Abilities; @@ -20,6 +24,8 @@ private void SubscribeAsh() SubscribeLocalEvent(OnNWRebirth); SubscribeLocalEvent(OnFlames); SubscribeLocalEvent(OnCascade); + + SubscribeLocalEvent(OnAscensionAsh); } private void OnJaunt(Entity ent, ref EventHereticAshenShift args) @@ -139,4 +145,17 @@ private void OnCascade(Entity ent, ref EventHereticCascade arg args.Handled = true; } + + + private void OnAscensionAsh(Entity ent, ref HereticAscensionAshEvent args) + { + RemComp(ent); + RemComp(ent); + RemComp(ent); + RemComp(ent); + + // fire immunity + var flam = EnsureComp(ent); + flam.Damage = new(); // reset damage dict + } } diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs index 8976a576eb2..c15b56981d3 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs @@ -16,7 +16,7 @@ private void SubscribeFlesh() { SubscribeLocalEvent(OnFleshSurgery); SubscribeLocalEvent(OnFleshSurgeryDoAfter); - SubscribeLocalEvent(OnFleshAscendPolymorph); + SubscribeLocalEvent(OnAscensionFlesh); } private void OnFleshSurgery(Entity ent, ref EventHereticFleshSurgery args) @@ -99,17 +99,12 @@ private void OnFleshSurgeryDoAfter(Entity ent, ref EventHereti _dmg.SetAllDamage((EntityUid) args.Target, dmg, 0); args.Handled = true; } - private void OnFleshAscendPolymorph(Entity ent, ref EventHereticFleshAscend args) + private void OnAscensionFlesh(Entity ent, ref HereticAscensionFleshEvent args) { - if (!TryUseAbility(ent, args)) - return; - var urist = _poly.PolymorphEntity(ent, "EldritchHorror"); if (urist == null) return; _aud.PlayPvs(new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg"), (EntityUid) urist, AudioParams.Default.AddVolume(2f)); - - args.Handled = true; } } diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/HereticSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/HereticSystem.cs index 5b62c852f28..feb9acb82ff 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/HereticSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/HereticSystem.cs @@ -8,9 +8,6 @@ using Content.Shared.Heretic.Prototypes; using Content.Server.Chat.Systems; using Robust.Shared.Audio; -using Content.Server.Temperature.Components; -using Content.Server.Body.Components; -using Content.Server.Atmos.Components; using Content.Shared.Damage; using Content.Server.Heretic.Components; using Content.Server.Antag; @@ -20,9 +17,7 @@ using Robust.Server.Player; using Content.Server.Revolutionary.Components; using Content.Shared.Random.Helpers; -using Content.Shared.Roles.Jobs; using Robust.Shared.Prototypes; -using Content.Shared.Roles; namespace Content.Server.Heretic.EntitySystems; @@ -52,9 +47,6 @@ public override void Initialize() SubscribeLocalEvent(OnAscension); SubscribeLocalEvent(OnBeforeDamage); - SubscribeLocalEvent(OnDamage); - - } public override void Update(float frameTime) @@ -170,19 +162,6 @@ private void OnAscension(Entity ent, ref EventHereticAscension var pathLoc = ent.Comp.CurrentPath!.ToLower(); var ascendSound = new SoundPathSpecifier($"/Audio/_Goobstation/Heretic/Ambience/Antag/Heretic/ascend_{pathLoc}.ogg"); _chat.DispatchGlobalAnnouncement(Loc.GetString($"heretic-ascension-{pathLoc}"), Name(ent), true, ascendSound, Color.Pink); - - // do other logic, e.g. make heretic immune to whatever - switch (ent.Comp.CurrentPath!) - { - case "Ash": - RemComp(ent); - RemComp(ent); - RemComp(ent); - break; - - default: - break; - } } #endregion @@ -195,19 +174,6 @@ private void OnBeforeDamage(Entity ent, ref BeforeDamageChange if (args.Origin.HasValue && HasComp(args.Origin)) args.Cancelled = true; } - private void OnDamage(Entity ent, ref DamageModifyEvent args) - { - if (!ent.Comp.Ascended) - return; - - switch (ent.Comp.CurrentPath) - { - case "Ash": - // nullify heat damage because zased - args.Damage.DamageDict["Heat"] = 0; - break; - } - } #endregion } diff --git a/Content.Shared/Armor/ArmorComponent.cs b/Content.Shared/Armor/ArmorComponent.cs index fd04c5d29c8..9640f742e1a 100644 --- a/Content.Shared/Armor/ArmorComponent.cs +++ b/Content.Shared/Armor/ArmorComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Utility; @@ -7,7 +7,7 @@ namespace Content.Shared.Armor; /// /// Used for clothing that reduces damage when worn. /// -[RegisterComponent, NetworkedComponent, Access(typeof(SharedArmorSystem))] +[RegisterComponent, NetworkedComponent] // goob edit - remove access restrictions public sealed partial class ArmorComponent : Component { /// diff --git a/Content.Shared/Armor/SharedArmorSystem.cs b/Content.Shared/Armor/SharedArmorSystem.cs index 010ee5e65b0..a9d055e21a3 100644 --- a/Content.Shared/Armor/SharedArmorSystem.cs +++ b/Content.Shared/Armor/SharedArmorSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.Inventory; using Content.Shared.Silicons.Borgs; @@ -19,12 +19,18 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent>(OnDamageModify); + SubscribeLocalEvent(OnDamageModify); // goob edit - why hasn't anyone done this yet? + SubscribeLocalEvent>(OnRelayDamageModify); SubscribeLocalEvent>(OnBorgDamageModify); SubscribeLocalEvent>(OnArmorVerbExamine); } - private void OnDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent args) + // goob edit - why hasn't anyone done this yet? + private void OnDamageModify(EntityUid uid, ArmorComponent component, DamageModifyEvent args) + { + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, component.Modifiers); + } + private void OnRelayDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent args) { args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers); } diff --git a/Content.Shared/Store/ListingLocalisationHelpers.cs b/Content.Shared/Store/ListingLocalisationHelpers.cs index 882300109ce..3bbc3214f18 100644 --- a/Content.Shared/Store/ListingLocalisationHelpers.cs +++ b/Content.Shared/Store/ListingLocalisationHelpers.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; namespace Content.Shared.Store; diff --git a/Content.Shared/_Goobstation/Heretic/Heretic.Abilites.cs b/Content.Shared/_Goobstation/Heretic/Heretic.Abilites.cs index 52bf77c81ad..23081a82f81 100644 --- a/Content.Shared/_Goobstation/Heretic/Heretic.Abilites.cs +++ b/Content.Shared/_Goobstation/Heretic/Heretic.Abilites.cs @@ -92,12 +92,19 @@ public sealed partial class EventHereticCascade : InstantActionEvent { } // flesh public sealed partial class EventHereticFleshSurgery : EntityTargetActionEvent { } -public sealed partial class EventHereticFleshAscend : InstantActionEvent { } + // void (including upgrades) [Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAristocratWayEvent : EntityEventArgs { } -[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionVoidEvent : EntityEventArgs { } + public sealed partial class HereticVoidBlastEvent : InstantActionEvent { } public sealed partial class HereticVoidBlinkEvent : WorldTargetActionEvent { } public sealed partial class HereticVoidPullEvent : InstantActionEvent { } + +// ascensions +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionAshEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionVoidEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionFleshEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionLockEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class HereticAscensionBladeEvent : EntityEventArgs { } #endregion diff --git a/Resources/Prototypes/_Goobstation/Heretic/Actions/Heretic/path_flesh.yml b/Resources/Prototypes/_Goobstation/Heretic/Actions/Heretic/path_flesh.yml index 25b823d2e0f..1f60f016c86 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Actions/Heretic/path_flesh.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Actions/Heretic/path_flesh.yml @@ -11,19 +11,4 @@ sprite: _Goobstation/Heretic/abilities_heretic.rsi state: flesh_surgery - type: HereticAction - messageLoc: heretic-speech-flesh-surgery - -- type: entity - id: ActionPolymorphHereticHorror - name: REALITY UNCOIL - description: Transform into an eldritch horror. - components: - - type: InstantAction - useDelay: 60 - event: !type:EventHereticFleshAscend - itemIconStyle: NoItem - icon: - sprite: _Goobstation/Heretic/abilities_heretic.rsi - state: final_hymn - - type: HereticAction - messageLoc: heretic-speech-flesh-worm + messageLoc: heretic-speech-flesh-surgery \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Heretic/Entities/Mobs/NPC/polymorph.yml b/Resources/Prototypes/_Goobstation/Heretic/Entities/Mobs/NPC/polymorph.yml index 3506cb87c32..f9984cb4145 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Entities/Mobs/NPC/polymorph.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Entities/Mobs/NPC/polymorph.yml @@ -66,12 +66,14 @@ # heretic ascend flesh form - type: entity - parent: BaseMob + parent: [ SimpleSpaceMobBase, FlyingMobBase ] id: MobHereticFleshAscend name: eldritch horror description: An incomprehensible mess of limbs and eyes. You can feel it's stare into your soul. suffix: DO NOT MAP components: + - type: Bloodstream + bloodMaxVolume: 1984 - type: NpcFactionMember factions: - Heretic @@ -115,7 +117,6 @@ - type: MobThresholds thresholds: 0: Alive - 500: Critical 1000: Dead - type: Damageable damageContainer: Biological @@ -139,7 +140,7 @@ foodPreference: Humanoid shouldStoreDevoured: true chemical: Ichor - healRate: 15.0 + healRate: 50.0 whitelist: components: - MobState @@ -170,3 +171,15 @@ - Mansus - type: Examiner - type: Pullable + - type: Reflect + reflectProb: 0.7 + reflects: + - Energy + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepThud + - type: Flammable + damage: + types: {} + - type: Puller + needsHands: false \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_knowledge.yml b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_knowledge.yml index 07e918aa1a5..b698f637602 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_knowledge.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_knowledge.yml @@ -95,6 +95,7 @@ actionPrototypes: - ActionHereticAscension1 - ActionHereticAscension2 + event: !type:HereticAscensionAshEvent ### flesh path - type: hereticKnowledge @@ -161,8 +162,7 @@ id: PriestFinalHymn path: Flesh stage: 10 - actionPrototypes: - - ActionPolymorphHereticHorror + event: !type:HereticAscensionFleshEvent ### void path - type: hereticKnowledge diff --git a/Resources/Prototypes/_Goobstation/Heretic/Polymorphs/polymorphs.yml b/Resources/Prototypes/_Goobstation/Heretic/Polymorphs/polymorphs.yml index a69a3fcd85d..dc582cbb2a9 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Polymorphs/polymorphs.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Polymorphs/polymorphs.yml @@ -10,6 +10,6 @@ configuration: entity: MobHereticFleshAscend transferName: true - transferDamage: true + transferDamage: false revertOnCrit: false revertOnDeath: false \ No newline at end of file