diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index 582b9cb2ac..b8e530bf38 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -5,17 +5,26 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Store.Components; +using Content.Shared.Implants.Components; // Starlight +using Content.Server.Polymorph.Systems; // Starlight +using Content.Shared.Zombies; // Starlight +using Robust.Shared.Player; // Starlight + namespace Content.Server.Implants; public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem { [Dependency] private readonly StoreSystem _store = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + + [Dependency] private readonly PolymorphSystem _polymorphSystem = default!; // Starlight + public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(OnStoreRelay); + SubscribeLocalEvent(OnMagillitisSerumImplantImplant); // Starlight } // TODO: This shouldn't be in the SubdermalImplantSystem @@ -41,4 +50,26 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem var msg = Loc.GetString("store-currency-inserted-implant", ("used", args.Used)); _popup.PopupEntity(msg, args.User, args.User); } + + // Starlight-start + private void OnMagillitisSerumImplantImplant(EntityUid uid, SubdermalImplantComponent component, UseMagillitisSerumImplantEvent args) + { + if (component.ImplantedEntity is not { } ent) + return; + + if (HasComp(ent)) + return; + + var polymorph = _polymorphSystem.PolymorphEntity(ent, "RampagingGorilla"); + + if (!polymorph.HasValue) + return; + + _popup.PopupEntity(Loc.GetString("magillitisserum-implant-activated-others", ("entity", polymorph.Value)), polymorph.Value, Filter.PvsExcept(polymorph.Value), true); + _popup.PopupEntity(Loc.GetString("magillitisserum-implant-activated-user"), polymorph.Value, polymorph.Value); + + args.Handled = true; + QueueDel(uid); + } + // Starlight-end } diff --git a/Resources/Audio/_Starlight/Voice/gorilla.ogg b/Resources/Audio/_Starlight/Voice/gorilla.ogg new file mode 100644 index 0000000000..2d62702e55 Binary files /dev/null and b/Resources/Audio/_Starlight/Voice/gorilla.ogg differ diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index f1531f9dfc..523d6d5280 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -4095,3 +4095,37 @@ - type: NpcFactionMember factions: - NanoTrasen + +# Starlight-start +- type: entity + name: Rampaging Gorilla + parent: MobGorilla + id: MobGorillaRampaging + description: A gorilla that has gone wild. Run! + components: + - type: Sprite + drawdepth: Mobs + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: crawling + sprite: Mobs/Animals/gorilla.rsi + color: "#FF0000" + - type: MobThresholds + thresholds: + 0: Alive + 350: Critical + 400: Dead + - type: MeleeWeapon + soundHit: + collection: Punch + damage: + types: + Blunt: 35 + Structural: 20 + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 4 + - type: Damageable + damageContainer: Biological + damageModifierSet: GorillaRampaging +# Starlight-end diff --git a/Resources/Prototypes/_Starlight/Polymorphs/polymorphs.yml b/Resources/Prototypes/_Starlight/Polymorphs/polymorphs.yml index 14eac14b33..15f19df6ad 100644 --- a/Resources/Prototypes/_Starlight/Polymorphs/polymorphs.yml +++ b/Resources/Prototypes/_Starlight/Polymorphs/polymorphs.yml @@ -13,3 +13,18 @@ path: /Audio/Magic/forcewall.ogg exitPolymorphSound: !type:SoundPathSpecifier path: /Audio/Magic/forcewall.ogg + +# Starlight-start +- type: polymorph + id: RampagingGorilla + configuration: + entity: MobGorillaRampaging + forced: true + transferName: true + transferHumanoidAppearance: false + inventory: Drop + transferDamage: true + revertOnDeath: true + revertOnCrit: false + polymorphSound: /Audio/_Starlight/Voice/gorilla.ogg +# Starlight-end diff --git a/Resources/Prototypes/_Sunrise/Catalog/uplink_catalog.yml b/Resources/Prototypes/_Sunrise/Catalog/uplink_catalog.yml index a26c9fbf2c..32ae875981 100644 --- a/Resources/Prototypes/_Sunrise/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/_Sunrise/Catalog/uplink_catalog.yml @@ -1856,24 +1856,24 @@ categories: - UplinkCybernetics -# - type: listing -# id: UplinkMagillitisSerumImplant -# name: uplink-magillitis-serum-implanter-name -# description: uplink-magillitis-serum-implanter-desc -# icon: { sprite: _Starlight/Actions/implants.rsi, state: gorilla_rampage } -# productEntity: MagillitisSerumImplanter # Sunrise-TODO: FIX this Shit! -# discountDownTo: -# Telecrystal: 4 -# cost: -# Telecrystal: 6 -# categories: -# - UplinkJob -# conditions: -# - !type:BuyerJobCondition -# whitelist: -# - ResearchAssistant -# - Scientist -# - ResearchDirector +- type: listing + id: UplinkMagillitisSerumImplant + name: uplink-magillitis-serum-implanter-name + description: uplink-magillitis-serum-implanter-desc + icon: { sprite: _Starlight/Actions/implants.rsi, state: gorilla_rampage } + productEntity: MagillitisSerumImplanter + discountDownTo: + Telecrystal: 4 + cost: + Telecrystal: 6 + categories: + - UplinkJob + conditions: + - !type:BuyerJobCondition + whitelist: + - ResearchAssistant + - Scientist + - ResearchDirector - type: listing id: UplinkCaneShotgun diff --git a/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml b/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml index 7ea75af0ed..e0f7d8f5e4 100644 --- a/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml +++ b/Resources/Prototypes/_Sunrise/Damage/modifier_sets.yml @@ -68,6 +68,12 @@ coefficients: Heat: 1.15 +- type: damageModifierSet + id: GorillaRampaging + coefficients: + Blunt: 1.25 + Cellular: 0 + - type: damageModifierSet id: Resomi coefficients: