diff --git a/Content.Client/DeltaV/Abilities/Borgs/RandomizedCandyVisualizer.cs b/Content.Client/DeltaV/Abilities/Borgs/RandomizedCandyVisualizer.cs
new file mode 100644
index 0000000000..970af100a6
--- /dev/null
+++ b/Content.Client/DeltaV/Abilities/Borgs/RandomizedCandyVisualizer.cs
@@ -0,0 +1,26 @@
+using Content.Shared.DeltaV.Abilities.Borgs;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.DeltaV.Abilities.Borgs;
+
+///
+/// Responsible for coloring randomized candy.
+///
+public sealed class RandomizedCandyVisualizer : VisualizerSystem
+{
+ protected override void OnAppearanceChange(EntityUid uid, RandomizedCandyComponent component, ref AppearanceChangeEvent args)
+ {
+ if (!TryComp(uid, out var sprite)
+ || !AppearanceSystem.TryGetData(uid, RandomizedCandyVisuals.Color, out var color, args.Component))
+ {
+ return;
+ }
+
+ sprite.LayerSetColor(CandyVisualLayers.Ball, color);
+ }
+}
+
+public enum CandyVisualLayers : byte
+{
+ Ball
+}
diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs
index 47f11ee161..6cddeeb203 100644
--- a/Content.Client/Entry/EntryPoint.cs
+++ b/Content.Client/Entry/EntryPoint.cs
@@ -118,6 +118,7 @@ namespace Content.Client.Entry
_prototypeManager.RegisterIgnore("wireLayout");
_prototypeManager.RegisterIgnore("alertLevels");
_prototypeManager.RegisterIgnore("nukeopsRole");
+ _prototypeManager.RegisterIgnore("candyFlavor"); // Delta-V
_componentFactory.GenerateNetIds();
_adminManager.Initialize();
diff --git a/Content.Server/DeltaV/Abilities/Borgs/CandyFlavorPrototype.cs b/Content.Server/DeltaV/Abilities/Borgs/CandyFlavorPrototype.cs
new file mode 100644
index 0000000000..3b5d2dbe9d
--- /dev/null
+++ b/Content.Server/DeltaV/Abilities/Borgs/CandyFlavorPrototype.cs
@@ -0,0 +1,31 @@
+using Content.Shared.Nutrition;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.DeltaV.Abilities.Borgs;
+
+///
+/// Describes the color and flavor profile of lollipops and gumballs. Yummy!
+///
+[Prototype("candyFlavor")]
+public sealed partial class CandyFlavorPrototype : IPrototype
+{
+ ///
+ [IdDataField]
+ public string ID { get; private set; } = default!;
+
+ ///
+ /// The display name for this candy. Not localized.
+ ///
+ [DataField] public string Name { get; private set; } = "";
+
+ ///
+ /// The color of the candy.
+ ///
+ [DataField] public Color Color { get; private set; } = Color.White;
+
+ ///
+ /// How the candy tastes like.
+ ///
+ [DataField]
+ public HashSet> Flavors { get; private set; } = [];
+}
diff --git a/Content.Server/DeltaV/Abilities/Borgs/RandomizedCandySystem.cs b/Content.Server/DeltaV/Abilities/Borgs/RandomizedCandySystem.cs
new file mode 100644
index 0000000000..e2ad0c2411
--- /dev/null
+++ b/Content.Server/DeltaV/Abilities/Borgs/RandomizedCandySystem.cs
@@ -0,0 +1,83 @@
+using System.Linq;
+using Content.Server.Nutrition.Components;
+using Content.Shared.DeltaV.Abilities.Borgs;
+using Content.Shared.Nutrition;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+using Robust.Shared.Utility;
+
+namespace Content.Server.DeltaV.Abilities.Borgs;
+
+///
+/// Gives things with a a random flavor, with corresponding appearance and
+/// examine text.
+///
+public sealed partial class RandomizedCandySystem : EntitySystem
+{
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly MetaDataSystem _metaData = default!;
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+
+ ///
+ /// Flavors that are masked by the candy.
+ ///
+ private static readonly string[] MaskedReagents = { "Sugar", "Iron" }; // sugar is obvious and iron is "metallic" :(
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnInit);
+ }
+
+ private void OnInit(EntityUid uid, RandomizedCandyComponent candyComp, MapInitEvent args)
+ {
+ // pick a random flavor
+ var flavors = _prototypeManager.EnumeratePrototypes();
+ var candyFlavor = _random.Pick(flavors.ToList());
+
+ // color the candy :3
+ _appearance.SetData(uid, RandomizedCandyVisuals.Color, candyFlavor.Color);
+
+ // flavor the candy! yummy
+ var flavorProfile = EnsureComp(uid);
+ flavorProfile.Flavors.Clear(); // it shouldn't be flavored but clear it anyway
+ foreach (var flavorId in candyFlavor.Flavors)
+ {
+ flavorProfile.Flavors.Add(flavorId);
+ }
+ flavorProfile.IgnoreReagents.UnionWith(MaskedReagents); // otherwise the nom text gets too long
+
+ // update the candy's metadata with fluff
+ var meta = MetaData(uid);
+ if (!string.IsNullOrEmpty(candyFlavor.Name))
+ _metaData.SetEntityName(uid, $"{candyFlavor.Name} {meta.EntityName}", meta);
+ _metaData.SetEntityDescription(uid, $"{meta.EntityDescription} {GetExamineFluff(candyFlavor.Flavors)}");
+ Dirty(uid, meta);
+ }
+
+ // this technically duplicates code from FlavorProfileSystem but what we would need to call
+ // is upstream code in a private method with fixed loc strings and unnecessary sorting, so i don't want to touch it
+ private string GetExamineFluff(HashSet> flavorIds)
+ {
+ var flavors = new List();
+ foreach (var flavorId in flavorIds)
+ {
+ if (_prototypeManager.TryIndex(flavorId, out var flavor) &&
+ Loc.TryGetString(flavor.FlavorDescription, out var flavorText))
+ {
+ flavors.Add(flavorText);
+ }
+ }
+
+ return flavors.Count switch
+ {
+ > 1 => Loc.GetString("candy-flavor-profile-multiple",
+ ("lastFlavor", flavors.Pop()),
+ ("flavors", string.Join(", ", flavors))
+ ),
+ 1 => Loc.GetString("candy-flavor-profile", ("flavor", flavors.Single())),
+ _ => Loc.GetString("candy-flavor-profile-unknown")
+ };
+ }
+}
diff --git a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs
index d0a399c1fe..3654635982 100644
--- a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandyComponent.cs
@@ -1,11 +1,25 @@
+using Robust.Shared.Audio;
+
namespace Content.Server.Abilities.Borgs;
[RegisterComponent]
public sealed partial class FabricateCandyComponent : Component
{
- [DataField("lollipopAction")]
+ [DataField]
public EntityUid? LollipopAction;
- [DataField("gumballAction")]
+ [DataField]
public EntityUid? GumballAction;
+
+ ///
+ /// The sound played when fabricating candy.
+ ///
+ [DataField]
+ public SoundSpecifier FabricationSound = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg")
+ {
+ Params = new AudioParams
+ {
+ Volume = -2f
+ }
+ };
}
diff --git a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs
index 6451c7cbb2..b9c7540d75 100644
--- a/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Borgs/FabricateCandySystem.cs
@@ -1,3 +1,5 @@
+using Robust.Server.Audio;
+using Robust.Shared.Prototypes;
using Content.Shared.Actions;
using Content.Shared.Actions.Events;
@@ -6,6 +8,8 @@ namespace Content.Server.Abilities.Borgs;
public sealed partial class FabricateCandySystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+ [Dependency] private readonly AudioSystem _audioSystem = default!;
+
public override void Initialize()
{
base.Initialize();
@@ -25,13 +29,19 @@ public sealed partial class FabricateCandySystem : EntitySystem
private void OnLollipop(FabricateLollipopActionEvent args)
{
- Spawn("FoodLollipop", Transform(args.Performer).Coordinates);
- args.Handled = true;
+ OnCandy("FoodLollipop", args);
}
private void OnGumball(FabricateGumballActionEvent args)
{
- Spawn("FoodGumball", Transform(args.Performer).Coordinates);
- args.Handled = true;
+ OnCandy("FoodGumball", args);
+ }
+
+ private void OnCandy(EntProtoId proto, BaseActionEvent evt)
+ {
+ Spawn(proto, Transform(evt.Performer).Coordinates);
+ if (TryComp(evt.Performer, out FabricateCandyComponent? comp))
+ _audioSystem.PlayPvs(comp.FabricationSound, evt.Performer);
+ evt.Handled = true;
}
}
diff --git a/Content.Shared/DeltaV/Abilities/Borgs/RandomizedCandyComponent.cs b/Content.Shared/DeltaV/Abilities/Borgs/RandomizedCandyComponent.cs
new file mode 100644
index 0000000000..57719760ee
--- /dev/null
+++ b/Content.Shared/DeltaV/Abilities/Borgs/RandomizedCandyComponent.cs
@@ -0,0 +1,18 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.DeltaV.Abilities.Borgs;
+
+///
+/// Marks this entity as being candy with a random flavor and color.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class RandomizedCandyComponent : Component
+{
+}
+
+[Serializable, NetSerializable]
+public enum RandomizedCandyVisuals : byte
+{
+ Color
+}
diff --git a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl
index 98e04f2818..48f42e641b 100644
--- a/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl
+++ b/Resources/Locale/en-US/deltav/flavors/flavor-profiles.ftl
@@ -27,3 +27,10 @@ flavor-complex-daiquiri = fashionable
flavor-complex-arsonistsbrew = like ash and flame
flavor-complex-healthcodeviolation = ominous
flavor-complex-pumpkin = like pumpkin
+flavor-complex-blellow = like an impossible color
+flavor-complex-candy-strawberry = like strawberries
+flavor-complex-candy-bubblegum = like bubble gum
+
+candy-flavor-profile = This one is supposed to taste {$flavor}.
+candy-flavor-profile-multiple = This one is supposed to taste {$flavors} and {$lastFlavor}.
+candy-flavor-profile-unknown = You have no idea what this one is supposed to taste like.
diff --git a/Resources/Prototypes/DeltaV/Flavors/candyflavors.yml b/Resources/Prototypes/DeltaV/Flavors/candyflavors.yml
new file mode 100644
index 0000000000..66f4bb0af4
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Flavors/candyflavors.yml
@@ -0,0 +1,236 @@
+# Flavors for lollipops and gumballs
+
+- type: candyFlavor
+ id: berry
+ name: berry
+ color: '#800080'
+ flavors:
+ - berry
+
+- type: candyFlavor
+ id: ginger
+ name: ginger
+ color: '#fbdba0'
+ flavors:
+ - gingersoda
+
+- type: candyFlavor
+ id: bananashake
+ name: banana shake
+ color: '#ffe135'
+ flavors:
+ - bananahonk
+
+- type: candyFlavor
+ id: vanilla
+ name: vanilla
+ color: '#f9e5bc'
+ flavors:
+ - creamy
+ - vanilla
+
+- type: candyFlavor
+ id: orange
+ name: orange
+ color: '#fa7000'
+ flavors:
+ - orange
+
+- type: candyFlavor
+ id: watermelon
+ name: watermelon
+ color: '#009345'
+ flavors:
+ - watermelon
+
+- type: candyFlavor
+ id: pineapple
+ name: pineapple
+ color: '#e6ae25'
+ flavors:
+ - pineapple
+
+- type: candyFlavor
+ id: rootbeer
+ name: root beer
+ color: '#290e05'
+ flavors:
+ - rootbeersoda
+
+- type: candyFlavor
+ id: lemon
+ name: lemon
+ color: '#fef250'
+ flavors:
+ - lemondrop
+
+- type: candyFlavor
+ id: cola
+ name: cola
+ color: '#3c3024'
+ flavors:
+ - cola
+
+- type: candyFlavor
+ id: icedtea
+ name: iced tea
+ color: '#e0a779'
+ flavors:
+ - icedtea
+
+- type: candyFlavor
+ id: peppermint
+ name: peppermint
+ color: '#47e7ad'
+ flavors:
+ - minty
+
+- type: candyFlavor
+ id: spearmint
+ name: spearmint
+ color: '#47e75b'
+ flavors:
+ - minty
+
+- type: candyFlavor
+ id: apple
+ name: apple
+ color: '#dd1533'
+ flavors:
+ - apple
+
+- type: candyFlavor
+ id: honey
+ name: honey
+ color: '#e79a3f'
+ flavors:
+ - honey
+
+- type: candyFlavor
+ id: bungo
+ name: bungo
+ color: '#ffe017'
+ flavors:
+ - bungo
+
+- type: candyFlavor
+ id: grape
+ name: grape
+ color: '#6c3461'
+ flavors:
+ - grape
+
+- type: candyFlavor
+ id: bubbletea
+ name: bubble tea
+ color: '#d2b18c'
+ flavors:
+ - bubbletea
+
+- type: candyFlavor
+ id: mystery
+ name: mystery flavor
+ color: '#202020'
+ flavors:
+ - spaceshroom # it's a "mysterious" flavor
+
+- type: candyFlavor
+ id: creamystrawberry
+ name: creamy strawberry
+ color: '#f8d9df'
+ flavors:
+ - creamy
+ - candystrawberry
+
+- type: candyFlavor
+ id: strawberryyogurt
+ name: strawberry yogurt
+ color: '#f8d9df'
+ flavors:
+ - sour
+ - candystrawberry
+ - milk
+
+- type: candyFlavor
+ id: sourapple
+ name: sour apple # mouth-puckering!
+ color: '#68aa2e'
+ flavors:
+ - sour
+ - apple
+
+- type: candyFlavor
+ id: bubblegum
+ name: bubble gum
+ color: '#f988d9'
+ flavors:
+ - candybubblegum
+
+- type: candyFlavor
+ id: chilibungo
+ name: chili bungo # don't ask, i found chili mango lollipops on google, and bungos supposedly taste similar to mango
+ color: '#813c23'
+ flavors:
+ - spicy
+ - bungo
+
+- type: candyFlavor
+ id: tequilasunrise
+ name: tequila sunrise
+ color: '#ffe48c'
+ flavors:
+ - tequilasunrise
+
+- type: candyFlavor
+ id: mime
+ name: mime
+ color: '#eeeeee'
+ flavors:
+ - nothing
+
+- type: candyFlavor
+ id: honeylemonginger
+ name: honey lemon ginger
+ color: '#e6d781'
+ flavors:
+ - sour
+ - honey
+ - gingersoda
+
+# weird flavors below!
+
+- type: candyFlavor
+ id: foof
+ name: foof
+ color: '#ff00ff'
+ flavors:
+ - pinkdrink
+
+- type: candyFlavor
+ id: feline
+ name: cat-flavored
+ color: '#7c4511'
+ flavors:
+ - cat
+
+- type: candyFlavor
+ id: blellow
+ name: blellow
+ color: '#737373'
+ flavors:
+ - blellow
+
+- type: candyFlavor
+ id: stale
+ name: stale
+ color: '#96818e'
+ flavors:
+ - terrible
+ - sadness
+
+- type: candyFlavor
+ id: weh
+ name: weh # sorry, doesn't actually make you weh!
+ color: '#59b23a'
+ flavors:
+ - weh
diff --git a/Resources/Prototypes/DeltaV/Flavors/flavors.yml b/Resources/Prototypes/DeltaV/Flavors/flavors.yml
index 382868db63..b76b0dccd9 100644
--- a/Resources/Prototypes/DeltaV/Flavors/flavors.yml
+++ b/Resources/Prototypes/DeltaV/Flavors/flavors.yml
@@ -115,3 +115,19 @@
id: arsonistsbrew
flavorType: Complex
description: flavor-complex-arsonistsbrew
+
+- type: flavor
+ id: blellow
+ flavorType: Complex
+ description: flavor-complex-blellow
+
+# this is prefixed with "candy" to avoid clashes with potential future strawberries upstream
+- type: flavor
+ id: candystrawberry
+ flavorType: Complex
+ description: flavor-complex-candy-strawberry
+
+- type: flavor
+ id: candybubblegum
+ flavorType: Complex
+ description: flavor-complex-candy-bubblegum
diff --git a/Resources/Prototypes/Nyanotrasen/Actions/types.yml b/Resources/Prototypes/Nyanotrasen/Actions/types.yml
index e6e4bdc5a7..b089568f41 100644
--- a/Resources/Prototypes/Nyanotrasen/Actions/types.yml
+++ b/Resources/Prototypes/Nyanotrasen/Actions/types.yml
@@ -175,5 +175,6 @@
components:
- type: InstantAction
icon: { sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi, state: gumball }
+ iconColor: '#FFAED7'
useDelay: 40
event: !type:FabricateGumballActionEvent
diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/candy.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/candy.yml
index 11eb1fac1c..971748013b 100644
--- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/candy.yml
+++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/candy.yml
@@ -2,7 +2,7 @@
parent: FoodBase
id: FoodLollipop
name: lollipop
- description: For being such a good sport.
+ description: For being such a good sport! It's enriched with potent yet mostly safe-to-eat medicine.
components:
- type: SolutionContainerManager
solutions:
@@ -21,13 +21,23 @@
Quantity: 3
- type: Sprite
sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi
- state: lollipop
+ layers:
+ - state: lollipop-ball
+ map: [ "enum.CandyVisualLayers.Ball" ]
+ - state: lollipop-stickandshine
+ - type: Clothing
+ sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi
+ slots: [ mask ]
+ equippedPrefix: lollipop
+ quickEquip: false # would block eating otherwise
+ - type: Appearance
+ - type: RandomizedCandy
- type: entity
parent: FoodBase
id: FoodGumball
name: gumball
- description: For being such a good sport.
+ description: Try as you might, you can't blow bubbles with it... it's enriched with medicine for minor ailments.
components:
- type: SolutionContainerManager
solutions:
@@ -44,4 +54,9 @@
Quantity: 3
- type: Sprite
sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi
- state: gumball
+ layers:
+ - state: gumball
+ map: [ "enum.CandyVisualLayers.Ball" ]
+ - state: gumball-shine
+ - type: Appearance
+ - type: RandomizedCandy
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball-shine.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball-shine.png
new file mode 100644
index 0000000000..b9251d9778
Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball-shine.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball.png
index 655a614af6..430f9bb895 100644
Binary files a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball.png and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/gumball.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-ball.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-ball.png
new file mode 100644
index 0000000000..61eb3ad0c7
Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-ball.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK-vulpkanin.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK-vulpkanin.png
new file mode 100644
index 0000000000..0e34410352
Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK-vulpkanin.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK.png
new file mode 100644
index 0000000000..bf5c3bac25
Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-equipped-MASK.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-stickandshine.png b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-stickandshine.png
new file mode 100644
index 0000000000..3bd0ee8149
Binary files /dev/null and b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/lollipop-stickandshine.png differ
diff --git a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/meta.json
index a2e6123c15..a81452e8c2 100644
--- a/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/meta.json
+++ b/Resources/Textures/Nyanotrasen/Objects/Consumable/Food/candy.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, made colorable by pissdemon, equip sprites made by pissdemon based on cigarette.rsi taken from tgstation and paradise (see attributions in Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi)",
"size": {
"x": 32,
"y": 32
@@ -10,8 +10,25 @@
{
"name": "gumball"
},
+ {
+ "name": "gumball-shine"
+ },
{
"name": "lollipop"
+ },
+ {
+ "name": "lollipop-ball"
+ },
+ {
+ "name": "lollipop-stickandshine"
+ },
+ {
+ "name": "lollipop-equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "lollipop-equipped-MASK-vulpkanin",
+ "directions": 4
}
]
}