So I've extracted every XNB file using XNBnode and have been looking through them. I've figured out some of the CraftingRecipe.yaml format: Code: itemID amountRequired / Placement? / ?? / requiredSkill requiredLevel There are also references to the keg in BigCraftablesInformation, but they are almost identical to the loom: Code: 12: "Keg/50/-300/Crafting -9/Place a fruit or vegetable in here. Eventually it will turn into a beverage./true/true/0" #!String 17: "Loom/50/-300/Crafting -9/Turns raw wool into fine cloth./true/true/0" #!String The only difference is the name, description, and lead number. Anyway, so I'm looking into how beer or wine relates to the keg. It doesn't. I've searched every extracted xnb file for references to eggplant juice, not a single one. Curious, I searched for Red Pepper Jelly which I see in the game right now that I extracted the data from. Nothing. Not a single reference in every yaml file. I searched the description "gooey" and found a standard Jelly listed in objectinformation.yaml: Code: Line 259: 344: "Jelly/160/-300/Basic -26/Gooey." #!String So somewhere outside of a yaml file it's telling the game how to create red pepper jelly. Could it be in tbin file possibly? Any nudge in the right direction would be awesome.
Ohh. i think if you're doing this would be cool. I was thinking there should be hella hipster craft beer by adding multiple ingredients to the keg.
Hardcoded in exe. Here how it is made: else if (this.name.Equals("Keg")) { string a; if ((a = dropIn.Name) != null) { if (a == "Wheat") { this.heldObject = new Object(Vector2.Zero, 346, "Beer", false, true, false, false); if (!probe) { this.heldObject.name = "Beer"; Game1.playSound("Ship"); Game1.playSound("bubbles"); this.minutesUntilReady = 1750; who.currentLocation.temporarySprites.Add(new TemporaryAnimatedSprite(Game1.animations, new Rectangle(256, 1856, 64, 128), 80f, 6, 999999, this.tileLocation * (float)Game1.tileSize + new Vector2(0f, (float)(-(float)Game1.tileSize * 2)), false, false, (this.tileLocation.Y + 1f) * (float)Game1.tileSize / 10000f + 0.0001f, 0f, Color.Yellow * 0.75f, 1f, 0f, 0f, 0f, false) { alphaFade = 0.005f }); } return true; } if (a == "Hops") { this.heldObject = new Object(Vector2.Zero, 303, "Pale Ale", false, true, false, false); if (!probe) { this.heldObject.name = "Pale Ale"; Game1.playSound("Ship"); Game1.playSound("bubbles"); this.minutesUntilReady = 2250; who.currentLocation.temporarySprites.Add(new TemporaryAnimatedSprite(Game1.animations, new Rectangle(256, 1856, 64, 128), 80f, 6, 999999, this.tileLocation * (float)Game1.tileSize + new Vector2(0f, (float)(-(float)Game1.tileSize * 2)), false, false, (this.tileLocation.Y + 1f) * (float)Game1.tileSize / 10000f + 0.0001f, 0f, Color.Yellow * 0.75f, 1f, 0f, 0f, 0f, false) { alphaFade = 0.005f }); } return true; } } int category = dropIn.Category; if (category == -79) { this.heldObject = new Object(Vector2.Zero, 348, dropIn.Name + " Wine", false, true, false, false); this.heldObject.Price = dropIn.Price * 3; if (!probe) { this.heldObject.name = dropIn.Name + " Wine"; Game1.playSound("Ship"); Game1.playSound("bubbles"); this.minutesUntilReady = 10000; who.currentLocation.temporarySprites.Add(new TemporaryAnimatedSprite(Game1.animations, new Rectangle(256, 1856, 64, 128), 80f, 6, 999999, this.tileLocation * (float)Game1.tileSize + new Vector2(0f, (float)(-(float)Game1.tileSize * 2)), false, false, (this.tileLocation.Y + 1f) * (float)Game1.tileSize / 10000f + 0.0001f, 0f, Color.Lavender * 0.75f, 1f, 0f, 0f, 0f, false) { alphaFade = 0.005f }); } return true; } if (category == -75) { this.heldObject = new Object(Vector2.Zero, 350, dropIn.Name + " Juice", false, true, false, false); this.heldObject.Price = (int)((double)dropIn.Price * 2.25); if (!probe) { this.heldObject.name = dropIn.Name + " Juice"; Game1.playSound("bubbles"); Game1.playSound("Ship"); this.minutesUntilReady = 6000; who.currentLocation.temporarySprites.Add(new TemporaryAnimatedSprite(Game1.animations, new Rectangle(256, 1856, 64, 128), 80f, 6, 999999, this.tileLocation * (float)Game1.tileSize + new Vector2(0f, (float)(-(float)Game1.tileSize * 2)), false, false, (this.tileLocation.Y + 1f) * (float)Game1.tileSize / 10000f + 0.0001f, 0f, Color.White * 0.75f, 1f, 0f, 0f, 0f, false) { alphaFade = 0.005f }); } return true; } }
Whoa! Thanks for this information, this is extremely helpful! I wonder if the Storm API can access these functions. Going to dig into it tomorrow.