diff --git a/Content.Server/Guardian/GuardianSystem.cs b/Content.Server/Guardian/GuardianSystem.cs index ed6811449b..24d7a7e838 100644 --- a/Content.Server/Guardian/GuardianSystem.cs +++ b/Content.Server/Guardian/GuardianSystem.cs @@ -1,4 +1,6 @@ +using Content.Server.Inventory; using Content.Server.Popups; +using Content.Server.Body.Systems; using Content.Shared.Actions; using Content.Shared.Audio; using Content.Shared.Damage; @@ -14,6 +16,7 @@ using Robust.Server.GameObjects; using Robust.Shared.Containers; using Robust.Shared.Player; using Robust.Shared.Utility; +using Content.Shared.Hands.Components; namespace Content.Server.Guardian { @@ -28,6 +31,7 @@ namespace Content.Server.Guardian [Dependency] private readonly SharedActionsSystem _actionSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly BodySystem _bodySystem = default!; public override void Initialize() { @@ -94,6 +98,9 @@ namespace Content.Server.Guardian if (component.HostedGuardian == null) return; + if (HasComp(component.HostedGuardian.Value)) + _bodySystem.GibBody(component.HostedGuardian.Value); + EntityManager.QueueDeleteEntity(component.HostedGuardian.Value); _actionSystem.RemoveAction(uid, component.Action); } diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index 11a8437b8a..5a05b713fe 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -94,6 +94,9 @@ ghost-role-information-guardian-description = Listen to your owner. Don't tank d ghost-role-information-holoparasite-name = Holoparasite ghost-role-information-holoparasite-description = Listen to your owner. Don't tank damage. Punch people hard. +ghost-role-information-holoclown-name = Holoclown +ghost-role-information-holoclown-description = Listen to your owner. Utilize your pockets and hand to help your owner. + ghost-role-information-ifrit-name = Ifrit ghost-role-information-ifrit-description = Listen to your owner. Don't tank damage. Punch people hard. diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index fc301e482c..1011d44fff 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -84,6 +84,10 @@ uplink-holopara-kit-name = Holoparasite Kit uplink-holopara-kit-desc = The pride and joy of Cybersun. Contains an injector that hosts a sentient metaphysical guardian made of hard light which resides in the user's body when not active. The guardian can punch rapidly and is immune to hazardous environments while being resistant to direct trauma, but shares any damage it takes with the user. +uplink-holoclown-kit-name = Holoclown Kit +uplink-holoclown-kit-desc = A joint venture between Cybersun and Honk.co. Contains an injector that hosts a sentient metaphysical clown made of hard light which resides in the user's body when not active. + The holoclown has pockets to store things, a hardlight hand it can manipulate the environment with and is immune to hazardous environments while being resistant to direct trauma, but shares any damage it takes with the user. + uplink-holster-name = Shoulder Holster uplink-holster-desc = A deep shoulder holster capable of holding many types of ballistics. diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index b3abfad1b2..3dd2f0f993 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -922,6 +922,21 @@ whitelist: - Clown +- type: listing + id: UplinkHoloclownKit + name: uplink-holoclown-kit-name + description: uplink-holoclown-kit-desc + icon: { sprite: /Textures/Objects/Fun/figurines.rsi, state: holoclown } + productEntity: BoxHoloclown + cost: + Telecrystal: 12 + categories: + - UplinkJob + conditions: + - !type:BuyerJobCondition + whitelist: + - Clown + - type: listing id: uplinkHotPotato name: uplink-hot-potato-name diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index d7aec292d2..74ceea1cac 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -151,3 +151,76 @@ map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] color: "#40a7d7" shader: unshaded + +- type: entity + name: HoloClown + id: MobHoloClownGuardian + parent: MobGuardianBase + description: A mesmerising whirl of hard-light patterns weaves a blue colored clown of dubious origin. + components: + - type: GhostRole + allowMovement: true + allowSpeech: true + makeSentient: true + name: ghost-role-information-holoclown-name + description: ghost-role-information-holoclown-description + - type: GhostTakeoverAvailable + - type: NameIdentifier + group: Holoparasite + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepClown + - type: TypingIndicator + proto: holo + - type: RandomSprite + available: + - enum.DamageStateVisualLayers.Base: + holoclown_base: "" + enum.DamageStateVisualLayers.BaseUnshaded: + holoclown_flare: Sixteen + - enum.DamageStateVisualLayers.Base: + holoclown_base: "" + enum.DamageStateVisualLayers.BaseUnshaded: + holoclown_flare: Sixteen + - enum.DamageStateVisualLayers.Base: + holoclown_base: "" + enum.DamageStateVisualLayers.BaseUnshaded: + holoclown_flare: Sixteen + - type: Sprite + layers: + - state: holoclown_base + map: [ "enum.DamageStateVisualLayers.Base" ] + - state: holoclown_flare + map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + color: "#8adaff" + shader: unshaded + - type: Body + prototype: Primate + - type: Tag + tags: + - CannotSuicide + - FootstepSound + - type: Inventory + templateId: holoclown + - type: Hands + - type: Clumsy + clumsyDamage: + types: + Blunt: 5 + Piercing: 4 + groups: + Burn: 3 + - type: InventorySlots + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcFist + attackRate: 1.8 + damage: + types: + Blunt: 5 + - type: Loadout + prototypes: [ HoloClownGear ] + - type: RandomMetadata + nameSegments: + - names_clown diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index 7040bfb29e..6aa53f6875 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -371,7 +371,6 @@ - names_first - names_last - - type: randomHumanoidSettings id: Cluwne randomizeName: false diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml index 188e98d316..0b1769a3da 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml @@ -10,6 +10,15 @@ - type: GuardianCreator guardianProto: MobHoloparasiteGuardian +- type: entity + name: holoclown injector + parent: HoloparasiteInjector + id: HoloClownInjector + description: A complex artwork of handheld machinery allowing the user to host a holoclown guardian. + components: + - type: GuardianCreator + guardianProto: MobHoloClownGuardian + - type: entity name: magical lamp id: MagicalLamp @@ -38,3 +47,22 @@ layers: - state: box - state: holo + +- type: entity + name: holoclown box + parent: BoxCardboard + id: BoxHoloclown + description: A box containing a holoclown injector + components: + - type: StorageFill + contents: + - id: HoloClownInjector + - id: ToyFigurineHoloClown + - id: ToyHammer + - type: Sprite + layers: + - state: box_hug + - state: holo + - type: Tag + tags: + - BoxHug diff --git a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml index 8aa71731fa..06db6e5212 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml @@ -53,7 +53,17 @@ components: - type: Sprite state: clown - + +- type: entity + parent: BaseFigurine + id: ToyFigurineHoloClown + name: holoclown figure + description: A figurine depicting a holoclown. Even more annoying than a clown and no less real. + components: + - type: Sprite + state: holoclown + + - type: entity parent: BaseFigurine id: ToyFigurineMime diff --git a/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml new file mode 100644 index 0000000000..57dce506ea --- /dev/null +++ b/Resources/Prototypes/InventoryTemplates/holoclown_inventory_template.yml @@ -0,0 +1,22 @@ +- type: inventoryTemplate + id: holoclown + slots: + - name: pocket1 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 0,3 + strippingWindowPos: 0,4 + displayName: Pocket 1 + stripHidden: true + - name: pocket2 + slotTexture: pocket + slotFlags: POCKET + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,3 + strippingWindowPos: 1,4 + displayName: Pocket 2 + stripHidden: true + diff --git a/Resources/Prototypes/Roles/Jobs/Fun/cluwne.yml b/Resources/Prototypes/Roles/Jobs/Fun/cluwne.yml index 41360479d1..a797208c32 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/cluwne.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/cluwne.yml @@ -8,3 +8,9 @@ id: CluwnePDA gloves: ClothingHandsGlovesCluwne pocket1: CluwneHorn + +- type: startingGear + id: HoloClownGear + equipment: + pocket1: BikeHorn + diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown.png new file mode 100644 index 0000000000..112eec5e8b Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown.png differ diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_base.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_base.png new file mode 100644 index 0000000000..112eec5e8b Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_base.png differ diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_flare.png b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_flare.png new file mode 100644 index 0000000000..89f927bc48 Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/holoclown_flare.png differ diff --git a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json index b8d7bcd6c9..57b81f4f1e 100644 --- a/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json +++ b/Resources/Textures/Mobs/Aliens/Guardians/guardians.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-NC-SA-3.0", - "copyright": "taken from /tg/ station at commit https://github.com/tgstation/tgstation/commit/02756c2bc2cf3000080d030955e994242bab39b5", + "copyright": "taken from /tg/ station at commit https://github.com/tgstation/tgstation/commit/02756c2bc2cf3000080d030955e994242bab39b5, holoclown made by brainfood1183 (github)", "size": { "x": 32, "y": 32 @@ -27,6 +27,36 @@ "name": "magic_base", "directions": 4 }, + { + "name": "holoclown", + "directions": 4 + }, + { + "name": "holoclown_base", + "directions": 4 + }, + { + "name": "holoclown_flare", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ] + ] + }, { "name": "miner_flare", "directions": 4 diff --git a/Resources/Textures/Objects/Fun/figurines.rsi/holoclown.png b/Resources/Textures/Objects/Fun/figurines.rsi/holoclown.png new file mode 100644 index 0000000000..0997719aee Binary files /dev/null and b/Resources/Textures/Objects/Fun/figurines.rsi/holoclown.png differ diff --git a/Resources/Textures/Objects/Fun/figurines.rsi/meta.json b/Resources/Textures/Objects/Fun/figurines.rsi/meta.json index ab656e28a3..f6e93b64fc 100644 --- a/Resources/Textures/Objects/Fun/figurines.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/figurines.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprites made by Flareguy for Space Station 14. Griffinprize, skeletonprize, and owlprize taken from /tg/station at commit https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. Figurine_spawner sprite made using parts found in spawner_icons.dmi from Paradise Station at commit https://github.com/ParadiseSS13/Paradise/commit/813f0a3ae556d86dddd7c4ef93a52880de8d2e37. Head sprites excluding Captain, Medical exluding doctor, non-human excluding queen and slime, and service jobs excluding librarian done by tacobeller.", + "copyright": "Sprites made by Flareguy for Space Station 14. Griffinprize, skeletonprize, and owlprize taken from /tg/station at commit https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. Figurine_spawner sprite made using parts found in spawner_icons.dmi from Paradise Station at commit https://github.com/ParadiseSS13/Paradise/commit/813f0a3ae556d86dddd7c4ef93a52880de8d2e37. Head sprites excluding Captain, Medical exluding doctor, non-human excluding queen and slime, and service jobs excluding librarian done by tacobeller and holoclown done by brainfood1183.", "size": { "x": 32, "y": 32 @@ -19,6 +19,9 @@ { "name": "passenger" }, + { + "name": "holoclown" + }, { "name": "passenger_greytide" },