diff --git a/Content.Server/Puppet/VentriloquistPuppetSystem.cs b/Content.Server/Puppet/VentriloquistPuppetSystem.cs index 68d660fd1ba..ee0ad070333 100644 --- a/Content.Server/Puppet/VentriloquistPuppetSystem.cs +++ b/Content.Server/Puppet/VentriloquistPuppetSystem.cs @@ -5,12 +5,14 @@ using Content.Server.Speech.Muting; using Content.Shared.CombatMode; using Content.Shared.Hands; +using Robust.Shared.Random; namespace Content.Server.Puppet { public sealed class VentriloquistPuppetSystem : SharedVentriloquistPuppetSystem { [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { @@ -36,22 +38,27 @@ private void OnUseInHand(EntityUid uid, VentriloquistPuppetComponent component, if (!RemComp(uid)) { - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.RemoveHand)), uid, args.User); // Frontier + //_popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); MuteDummy(uid, component); return; } // TODO why does this need a combat component??? EnsureComp(uid); - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-insert-hand"), uid, args.User); - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-inserted-hand"), uid, uid); + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.InsertHand)), uid, args.User); // Frontier + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.InsertedHand)), uid, uid); // Frontier + // _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-insert-hand"), uid, args.User); + // _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-inserted-hand"), uid, uid); if (!HasComp(uid)) { AddComp(uid); var ghostRole = EnsureComp(uid); - ghostRole.RoleName = Loc.GetString("ventriloquist-puppet-role-name"); - ghostRole.RoleDescription = Loc.GetString("ventriloquist-puppet-role-description"); + ghostRole.RoleName = Loc.GetString(_random.Pick(component.PuppetRoleName)); // Frontier + ghostRole.RoleDescription = Loc.GetString(_random.Pick(component.PuppetRoleDescription)); // Frontier + //ghostRole.RoleName = Loc.GetString("ventriloquist-puppet-role-name"); + //ghostRole.RoleDescription = Loc.GetString("ventriloquist-puppet-role-description"); } args.Handled = true; @@ -65,7 +72,8 @@ private void OnDropped(EntityUid uid, VentriloquistPuppetComponent component, Dr if (HasComp(uid)) return; - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.RemoveHand)), uid, args.User); // Frontier + //_popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); MuteDummy(uid, component); } @@ -77,7 +85,8 @@ private void OnUnequippedHand(EntityUid uid, VentriloquistPuppetComponent compon if (HasComp(uid)) return; - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.RemoveHand)), uid, args.User); // Frontier + //_popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-remove-hand"), uid, args.User); MuteDummy(uid, component); } @@ -86,7 +95,8 @@ private void OnUnequippedHand(EntityUid uid, VentriloquistPuppetComponent compon /// private void MuteDummy(EntityUid uid, VentriloquistPuppetComponent component) { - _popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-removed-hand"), uid, uid); + _popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.RemovedHand)), uid, uid); // Frontier + //_popupSystem.PopupEntity(Loc.GetString("ventriloquist-puppet-removed-hand"), uid, uid); EnsureComp(uid); RemComp(uid); RemComp(uid); diff --git a/Content.Shared/Puppet/VentriloquistPuppetComponent.cs b/Content.Shared/Puppet/VentriloquistPuppetComponent.cs index 8f9239d50fa..efd2f862969 100644 --- a/Content.Shared/Puppet/VentriloquistPuppetComponent.cs +++ b/Content.Shared/Puppet/VentriloquistPuppetComponent.cs @@ -5,4 +5,21 @@ namespace Content.Shared.Puppet; [RegisterComponent, NetworkedComponent] public sealed partial class VentriloquistPuppetComponent : Component { -} \ No newline at end of file + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List RemoveHand = new (); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List RemovedHand = new(); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List InsertHand = new (); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List InsertedHand = new (); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List PuppetRoleName = new (); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public List PuppetRoleDescription = new (); +} diff --git a/Resources/Locale/en-US/_NF/ventriloquist/ventriloquist.ftl b/Resources/Locale/en-US/_NF/ventriloquist/ventriloquist.ftl new file mode 100644 index 00000000000..6830f5a890f --- /dev/null +++ b/Resources/Locale/en-US/_NF/ventriloquist/ventriloquist.ftl @@ -0,0 +1,7 @@ +ventriloquist-rock-grasp-hand = You firmly grasp the pet rock. +ventriloquist-rock-release-hand = You release your grip on the pet rock. + +ventriloquist-rock-grasped-hand = You have been grasped. +ventriloquist-rock-released-hand = You been released. +ventriloquist-rock-role-name = A pet rock +ventriloquist-rock-role-description = You are a pet mineral. diff --git a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml index d4a730aa179..b16367f79bb 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml @@ -12,7 +12,19 @@ - type: Input context: "human" - type: DoAfter - - type: VentriloquistPuppet + - type: VentriloquistPuppet # Frontier + removeHand: + - ventriloquist-puppet-remove-hand + removedHand: + - ventriloquist-puppet-removed-hand + insertHand: + - ventriloquist-puppet-insert-hand + insertedHand: + - ventriloquist-puppet-inserted-hand + puppetRoleName: + - ventriloquist-puppet-role-name + puppetRoleDescription: + - ventriloquist-puppet-role-description - type: Item size: Normal - type: Muted diff --git a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/cuddlycritter.yml b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/cuddlycritter.yml index b4f677b7dc0..9f8ef8fd7a8 100644 --- a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/cuddlycritter.yml +++ b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/cuddlycritter.yml @@ -30,6 +30,7 @@ WhoopieCushion: 3 MrChips: 1 MrDips: 1 + PetRockCarrier: 1 RevolverCapGun: 2 VehicleUnicycleFolded: 2 ClothingHeadHatMagician: 2 diff --git a/Resources/Prototypes/_NF/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/_NF/Entities/Objects/Fun/toys.yml index 945839581af..9c4738c58a0 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Fun/toys.yml @@ -21,60 +21,35 @@ - type: MeleeWeapon soundHit: path: /Audio/_NF/Items/Toys/wehhelp.ogg -# - type: MarketPrice # TODO fix price -# price: 1000 # TODO fix price + - type: StinkyTrait - type: entity - parent: BasePlushie - id: PlushieVulp - name: vulpkanin plushie - description: A vulpkanin plushie, at least you can hug this one without the risk to get bitten. + parent: [Soap, BasePlushie] + id: PlushieSlips + name: janitor plushie + description: The silent cleaner, the one that you dont hear say "Weh"! components: - type: Sprite sprite: _NF/Objects/Fun/toys.rsi - state: plushie_vulp + state: plushie_slips - type: EmitSoundOnUse sound: - path: /Audio/_NF/Vulpikanin/bark.ogg + path: /Audio/Weapons/tap.ogg - type: EmitSoundOnLand sound: - path: /Audio/_NF/Vulpikanin/bark.ogg + path: /Audio/Weapons/tap.ogg - type: EmitSoundOnActivate sound: - path: /Audio/_NF/Vulpikanin/bark.ogg + path: /Audio/Weapons/tap.ogg - type: MeleeWeapon soundHit: - path: /Audio/_NF/Vulpikanin/bark.ogg - -- type: entity - parent: BaseItem - id: PlushieSlips - name: janitor plushie - description: The silent cleaner, the one that you dont hear say "Weh"! - components: - - type: Sprite - sprite: _NF/Objects/Fun/toys.rsi - state: plushie_slips - - type: PhysicalComposition - materialComposition: - Cloth: 100 - - type: StaticPrice - price: 5 - -- type: entity - parent: PlushieVulp - id: PlushieTrystan - name: office vulp plushie - description: The ones who yeeps! - components: - - type: Sprite - sprite: _NF/Objects/Fun/toys.rsi - state: plushie_trystan + path: /Audio/Weapons/tap.ogg - type: entity parent: ToySword id: DBToySword name: toy double-esword + noSpawn: true # This is just giving security more items to have to beat you up for. components: - type: Sprite sprite: Objects/Weapons/Melee/e_sword_double.rsi @@ -85,39 +60,109 @@ visible: false shader: unshaded map: [ "blade" ] - - type: Item - size: Tiny sprite: Objects/Weapons/Melee/e_sword_double.rsi - type: entity - parent: BaseItem - id: PetRock + id: PetRockCarrier + parent: HappyHonk + name: pet rock carrier + description: Your new and only best friend home! + components: + - type: Sprite + sprite: _NF/Objects/Storage/Happyhonk/rock_carrier.rsi + state: box + - type: Item + sprite: _NF/Objects/Storage/Happyhonk/rock_carrier.rsi + heldPrefix: box + - type: StorageFill + contents: + - id: PetRock + prob: 0.8 + orGroup: Rock + - id: PetRockFred + prob: 0.1 + orGroup: Rock + - id: PetRockRoxie + prob: 0.1 + orGroup: Rock + +- type: entity + parent: [BaseItem, MrChips] + id: BasePetRock name: pet rock description: Your new and only best friend! + abstract: true components: - - type: Sprite - sprite: _NF/Objects/Fun/petrock.rsi - state: rock - type: StaticPrice price: 5 + - type: VentriloquistPuppet # Frontier + removeHand: + - ventriloquist-rock-release-hand + removedHand: + - ventriloquist-rock-released-hand + insertHand: + - ventriloquist-rock-grasp-hand + insertedHand: + - ventriloquist-rock-grasped-hand + puppetRoleName: + - ventriloquist-rock-role-name + puppetRoleDescription: + - ventriloquist-rock-role-description + - type: DamageOnLand + damage: + types: + Blunt: 1 + - type: DamageOtherOnHit + damage: + types: + Blunt: 1 + - type: Damageable + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/break_stone.ogg + - !type:SpawnEntitiesBehavior + spawn: + Ash: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + +- type: entity + parent: BasePetRock + id: PetRock + components: + - type: Sprite + sprite: _NF/Objects/Fun/petrock.rsi + layers: + - state: rock - type: entity - parent: BaseItem + parent: BasePetRock id: PetRockFred name: fred components: - type: Sprite sprite: _NF/Objects/Fun/petrock.rsi - state: fred + layers: + - state: fred - type: entity - parent: BaseItem + parent: BasePetRock id: PetRockRoxie name: roxie components: - type: Sprite sprite: _NF/Objects/Fun/petrock.rsi - state: roxie + layers: + - state: roxie - type: entity parent: BasePlushie @@ -280,7 +325,45 @@ state: black - type: entity - parent: PlushieVulp + parent: BasePlushie + id: BasePlushieVulp + name: vulpkanin plushie + description: A vulpkanin plushie, at least you can hug this one without the risk to get bitten. + abstract: true + components: + - type: EmitSoundOnUse + sound: + path: /Audio/_NF/Vulpikanin/bark.ogg + - type: EmitSoundOnLand + sound: + path: /Audio/_NF/Vulpikanin/bark.ogg + - type: EmitSoundOnActivate + sound: + path: /Audio/_NF/Vulpikanin/bark.ogg + - type: MeleeWeapon + soundHit: + path: /Audio/_NF/Vulpikanin/bark.ogg + +- type: entity + parent: BasePlushieVulp + id: PlushieVulp + components: + - type: Sprite + sprite: _NF/Objects/Fun/toys.rsi + state: plushie_vulp + +- type: entity + parent: BasePlushieVulp + id: PlushieTrystan + name: office vulp plushie + description: The ones who yeeps! + components: + - type: Sprite + sprite: _NF/Objects/Fun/toys.rsi + state: plushie_trystan + +- type: entity + parent: BasePlushieVulp id: PlushieCorgi name: corgi plushie description: The ian plushie edition! @@ -290,7 +373,7 @@ state: corgi - type: entity - parent: PlushieVulp + parent: BasePlushieVulp id: PlushieGirlyCorgi name: girly corgi plushie components: @@ -299,7 +382,7 @@ state: girlycorgi - type: entity - parent: PlushieVulp + parent: BasePlushieVulp id: PlushieRobotCorgi name: robot corgi plushie components: @@ -309,13 +392,9 @@ - type: entity parent: BasePlushie - id: PlushieCatBlack - name: black cat plushie - description: A stuffed toy that resembles a cute kitty! + id: BasePlushieCat + abstract: true components: - - type: Sprite - sprite: _NF/Objects/Fun/catplushie.rsi - state: black - type: EmitSoundOnUse sound: path: /Audio/Nyanotrasen/Voice/Felinid/cat_meow1.ogg @@ -330,7 +409,17 @@ path: /Audio/Nyanotrasen/Voice/Felinid/cat_meow1.ogg - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat + id: PlushieCatBlack + name: black cat plushie + description: A stuffed toy that resembles a cute kitty! + components: + - type: Sprite + sprite: _NF/Objects/Fun/catplushie.rsi + state: black + +- type: entity + parent: BasePlushieCat id: PlushieCatGrey name: grey cat plushie components: @@ -339,7 +428,7 @@ state: grey - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat id: PlushieCatOrange name: orange cat plushie components: @@ -348,7 +437,7 @@ state: orange - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat id: PlushieCatSiames name: siames cat plushie components: @@ -357,7 +446,7 @@ state: siames - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat id: PlushieCatTabby name: tabby cat plushie components: @@ -366,7 +455,7 @@ state: tabby - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat id: PlushieCatTuxedo name: tuxedo cat plushie components: @@ -375,7 +464,7 @@ state: tuxedo - type: entity - parent: PlushieCatBlack + parent: BasePlushieCat id: PlushieCatWhite name: white cat plushie components: diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml index 8004e93820c..ba28f56566e 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml @@ -70,7 +70,6 @@ - CrayonBoxRecipe - CrayonRainbowRecipe - PlushieLampRecipe - - ToySwordRecipe - PlushieAtmosianRecipe - PlushieRounyRecipe - PlushieXenoRecipe @@ -78,18 +77,10 @@ - BoxDonkSoftBoxRecipe - RevolverCapGunRecipe - BoxCartridgeCapRecipe - - HarmonicaInstrumentRecipe - - OcarinaInstrumentRecipe - - RecorderInstrumentRecipe - - GunpetInstrumentRecipe - - BirdToyInstrumentRecipe - ToyAmongPequenoRecipe - FoamCutlassRecipe - - CrazyGlueRecipe - - SingularityToyRecipe - FoamBladeRecipe - ToyRubberDuckRecipe - - PlushieGhostRecipe - ToyMouseRecipe - ToyAiRecipe - ToyGriffinRecipe @@ -107,9 +98,7 @@ - ToyDurandRecipe - ToySkeletonRecipe - FaceHuggerPlushieRecipe - - PetRockRecipe - - PetRockFredRecipe - - PetRockRoxieRecipe + - PetRockCarrierkRecipe - PlushieGnomeRecipe - PlushieLoveableRecipe - PlushieDeerRecipe @@ -141,7 +130,6 @@ - PlushieNukeRecipe - PlushieRGBeeRecipe - BalloonCorgiRecipe - - DBToySwordRecipe - BalloonSynRecipe - ToyNukeRecipe - ToyMaulerRecipe diff --git a/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml b/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml index a7f881bc68d..59619579df5 100644 --- a/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml +++ b/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml @@ -246,14 +246,6 @@ materials: PrizeTicket: 35 -- type: latheRecipe - id: ToySwordRecipe - result: ToySword - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 40 - - type: latheRecipe id: PlushieAtmosianRecipe result: PlushieAtmosian @@ -310,46 +302,6 @@ materials: PrizeTicket: 20 -- type: latheRecipe - id: HarmonicaInstrumentRecipe - result: HarmonicaInstrument - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 20 - -- type: latheRecipe - id: OcarinaInstrumentRecipe - result: OcarinaInstrument - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 20 - -- type: latheRecipe - id: RecorderInstrumentRecipe - result: RecorderInstrument - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 20 - -- type: latheRecipe - id: GunpetInstrumentRecipe - result: GunpetInstrument - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 20 - -- type: latheRecipe - id: BirdToyInstrumentRecipe - result: BirdToyInstrument - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 20 - - type: latheRecipe id: ToyAmongPequenoRecipe result: ToyAmongPequeno @@ -366,22 +318,6 @@ materials: PrizeTicket: 30 -- type: latheRecipe - id: CrazyGlueRecipe - result: CrazyGlue - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 80 - -- type: latheRecipe - id: SingularityToyRecipe - result: SingularityToy - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 100 - - type: latheRecipe id: FoamBladeRecipe result: FoamBlade @@ -398,14 +334,6 @@ materials: PrizeTicket: 10 -- type: latheRecipe - id: PlushieGhostRecipe - result: PlushieGhost - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 50 - - type: latheRecipe id: ToyMouseRecipe result: ToyMouse @@ -543,28 +471,12 @@ PrizeTicket: 50 - type: latheRecipe - id: PetRockRecipe - result: PetRock + id: PetRockCarrierkRecipe + result: PetRockCarrier applyMaterialDiscount: false completetime: 0.1 materials: - PrizeTicket: 5 - -- type: latheRecipe - id: PetRockFredRecipe - result: PetRockFred - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 10 - -- type: latheRecipe - id: PetRockRoxieRecipe - result: PetRockRoxie - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 10 + PrizeTicket: 100 - type: latheRecipe id: PlushieGnomeRecipe @@ -800,14 +712,6 @@ materials: PrizeTicket: 30 -- type: latheRecipe - id: DBToySwordRecipe - result: DBToySword - applyMaterialDiscount: false - completetime: 0.1 - materials: - PrizeTicket: 60 - - type: latheRecipe id: BalloonSynRecipe result: BalloonSyn diff --git a/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-left.png b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-left.png new file mode 100644 index 00000000000..dc458a0a3ff Binary files /dev/null and b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-left.png differ diff --git a/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-right.png b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-right.png new file mode 100644 index 00000000000..49b15d7ac2b Binary files /dev/null and b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-inhand-right.png differ diff --git a/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-open.png b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-open.png new file mode 100644 index 00000000000..46c6bc82135 Binary files /dev/null and b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box-open.png differ diff --git a/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box.png b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box.png new file mode 100644 index 00000000000..645491fe141 Binary files /dev/null and b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/box.png differ diff --git a/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/meta.json b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/meta.json new file mode 100644 index 00000000000..0241de806c0 --- /dev/null +++ b/Resources/Textures/_NF/Objects/Storage/Happyhonk/rock_carrier.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by ghostprince", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "box" + }, + { + "name": "box-open" + }, + { + "name": "box-inhand-left", + "directions": 4 + }, + { + "name": "box-inhand-right", + "directions": 4 + } + ] +}