summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs43
-rw-r--r--src/SMAPI.Web/wwwroot/SMAPI.metadata.json37
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs53
3 files changed, 125 insertions, 8 deletions
diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs
index 4d9091b0..0648aa2b 100644
--- a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs
+++ b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs
@@ -5,6 +5,7 @@ using System.Linq;
using Microsoft.Xna.Framework;
using StardewModdingAPI.Mods.ConsoleCommands.Framework.ItemData;
using StardewValley;
+using StardewValley.Menus;
using StardewValley.Objects;
using StardewValley.Tools;
using SObject = StardewValley.Object;
@@ -108,7 +109,10 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework
// spawn main item
SObject item;
{
- SearchableItem main = this.TryCreate(ItemType.Object, id, () => new SObject(id, 1));
+ SearchableItem main = this.TryCreate(ItemType.Object, id, () => id == 812
+ ? new ColoredObject(id, 1, Color.White)
+ : new SObject(id, 1)
+ );
yield return main;
item = main?.Item as SObject;
}
@@ -189,6 +193,43 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework
return honey;
});
}
+
+ // roe and aged roe (derived from FishPond.GetFishProduce)
+ else if (id == 812)
+ {
+ foreach (var pair in Game1.objectInformation)
+ {
+ // get input
+ SObject input = new SObject(pair.Key, 1);
+ if (input.Category != SObject.FishCategory)
+ continue;
+ Color color = TailoringMenu.GetDyeColor(input) ?? Color.Orange;
+
+ // yield roe
+ SObject roe = new ColoredObject(812, 1, color)
+ {
+ name = $"{input.Name} Roe",
+ preserve = { Value = SObject.PreserveType.Roe },
+ preservedParentSheetIndex = { Value = input.ParentSheetIndex }
+ };
+ roe.Price += input.Price / 2;
+ yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 6 + 1, roe);
+
+ // aged roe
+ if (pair.Key != 698) // aged sturgeon roe is caviar, which is a separate item
+ {
+ ColoredObject agedRoe = new ColoredObject(447, 1, color)
+ {
+ name = $"Aged {input.Name} Roe",
+ Category = -27,
+ preserve = { Value = SObject.PreserveType.AgedRoe },
+ preservedParentSheetIndex = { Value = input.ParentSheetIndex },
+ Price = roe.Price * 2
+ };
+ yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 6 + 1, agedRoe);
+ }
+ }
+ }
}
}
diff --git a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
index b508b033..78918bac 100644
--- a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
+++ b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
@@ -126,6 +126,12 @@
"~ | StatusReasonPhrase": "the animal mood bugs were fixed in Stardew Valley 1.2."
},
+ "Bee House Flower Range Fix": {
+ "ID": "kirbylink.beehousefix",
+ "~ | Status": "Obsolete",
+ "~ | StatusReasonPhrase": "the bee house flower range was fixed in Stardew Valley 1.4."
+ },
+
"Colored Chests": {
"ID": "4befde5c-731c-4853-8e4b-c5cdf946805f",
"~ | Status": "Obsolete",
@@ -152,19 +158,44 @@
"~1.1.2 | Status": "AssumeBroken" // crashes game on startup
},
+ "Fix Dice": {
+ "ID": "ashley.fixdice",
+ "~1.1.2 | Status": "AssumeBroken" // crashes game on startup
+ },
+
"Grass Growth": {
"ID": "bcmpinc.GrassGrowth",
- "~1.0 | Status": "AssumeBroken" // runtime Harmony error
+ "~1.0 | Status": "AssumeBroken"
+ },
+
+ "Invite Code Mod": {
+ "ID": "KOREJJamJar.InviteCodeMod",
+ "~1.0.1 | Status": "AssumeBroken"
},
"Loved Labels": {
"ID": "Advize.LovedLabels",
- "~2.2.1-unofficial.2-pathoschild | Status": "AssumeBroken" // runtime reflection errors
+ "~2.2.1-unofficial.2-pathoschild | Status": "AssumeBroken"
+ },
+
+ "Neat Additions": {
+ "ID": "ilyaki.neatadditions",
+ "~1.0.3 | Status": "AssumeBroken"
+ },
+
+ "Remote Fridge Storage": {
+ "ID": "EternalSoap.RemoteFridgeStorage",
+ "~1.5 | Status": "AssumeBroken"
+ },
+
+ "Stack Everything": {
+ "ID": "cat.stackeverything",
+ "~2.15 | Status": "AssumeBroken"
},
"Yet Another Harvest With Scythe Mod": {
"ID": "bcmpinc.HarvestWithScythe",
- "~1.1 | Status": "AssumeBroken" // runtime Harmony error
+ "~1.1 | Status": "AssumeBroken"
},
/*********
diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs
index 9bb9a857..1c0a04f0 100644
--- a/src/SMAPI/Metadata/CoreAssetPropagator.cs
+++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs
@@ -8,6 +8,7 @@ using StardewValley;
using StardewValley.BellsAndWhistles;
using StardewValley.Buildings;
using StardewValley.Characters;
+using StardewValley.GameData.Movies;
using StardewValley.Locations;
using StardewValley.Menus;
using StardewValley.Objects;
@@ -167,10 +168,6 @@ namespace StardewModdingAPI.Metadata
/****
** Animals
****/
- case "animals\\cat":
- return this.ReloadPetOrHorseSprites<Cat>(content, key);
- case "animals\\dog":
- return this.ReloadPetOrHorseSprites<Dog>(content, key);
case "animals\\horse":
return this.ReloadPetOrHorseSprites<Horse>(content, key);
@@ -189,12 +186,14 @@ namespace StardewModdingAPI.Metadata
return true;
case "characters\\farmer\\farmer_base": // Farmer
+ case "characters\\farmer\\farmer_base_bald":
if (Game1.player == null || !Game1.player.IsMale)
return false;
Game1.player.FarmerRenderer = new FarmerRenderer(key, Game1.player);
return true;
case "characters\\farmer\\farmer_girl_base": // Farmer
+ case "characters\\farmer\\farmer_girl_bald":
if (Game1.player == null || Game1.player.IsMale)
return false;
Game1.player.FarmerRenderer = new FarmerRenderer(key, Game1.player);
@@ -208,6 +207,10 @@ namespace StardewModdingAPI.Metadata
FarmerRenderer.hatsTexture = content.Load<Texture2D>(key);
return true;
+ case "characters\\farmer\\pants": // Game1.LoadContent
+ FarmerRenderer.pantsTexture = content.Load<Texture2D>(key);
+ return true;
+
case "characters\\farmer\\shirts": // Game1.LoadContent
FarmerRenderer.shirtsTexture = content.Load<Texture2D>(key);
return true;
@@ -223,6 +226,16 @@ namespace StardewModdingAPI.Metadata
Game1.bigCraftablesInformation = content.Load<Dictionary<int, string>>(key);
return true;
+ case "data\\clothinginformation": // Game1.LoadContent
+ Game1.clothingInformation = content.Load<Dictionary<int, string>>(key);
+ return true;
+
+ case "data\\concessiontastes": // MovieTheater.GetConcessionTasteForCharacter
+ this.Reflection
+ .GetField<List<ConcessionTaste>>(typeof(MovieTheater), "_concessionTastes")
+ .SetValue(content.Load<List<ConcessionTaste>>(key));
+ return true;
+
case "data\\cookingrecipes": // CraftingRecipe.InitShared
CraftingRecipe.cookingRecipes = content.Load<Dictionary<string, string>>(key);
return true;
@@ -234,6 +247,18 @@ namespace StardewModdingAPI.Metadata
case "data\\farmanimals": // FarmAnimal constructor
return this.ReloadFarmAnimalData();
+ case "data\\moviereactions": // MovieTheater.GetMovieReactions
+ this.Reflection
+ .GetField<List<MovieCharacterReaction>>(typeof(MovieTheater), "_genericReactions")
+ .SetValue(content.Load<List<MovieCharacterReaction>>(key));
+ return true;
+
+ case "data\\movies": // MovieTheater.GetMovieData
+ this.Reflection
+ .GetField<Dictionary<string, MovieData>>(typeof(MovieTheater), "_movieData")
+ .SetValue(content.Load<Dictionary<string, MovieData>>(key));
+ return true;
+
case "data\\npcdispositions": // NPC constructor
return this.ReloadNpcDispositions(content, key);
@@ -241,6 +266,10 @@ namespace StardewModdingAPI.Metadata
Game1.NPCGiftTastes = content.Load<Dictionary<string, string>>(key);
return true;
+ case "data\\objectcontexttags": // Game1.LoadContent
+ Game1.objectContextTags = content.Load<Dictionary<string, string>>(key);
+ return true;
+
case "data\\objectinformation": // Game1.LoadContent
Game1.objectInformation = content.Load<Dictionary<int, string>>(key);
return true;
@@ -290,6 +319,14 @@ namespace StardewModdingAPI.Metadata
/****
** Content\LooseSprites
****/
+ case "loosesprites\\birds": // Game1.LoadContent
+ Game1.birdsSpriteSheet = content.Load<Texture2D>(key);
+ return true;
+
+ case "loosesprites\\concessions": // Game1.LoadContent
+ Game1.concessionsSpriteSheet = content.Load<Texture2D>(key);
+ return true;
+
case "loosesprites\\controllermaps": // Game1.LoadContent
Game1.controllerMaps = content.Load<Texture2D>(key);
return true;
@@ -373,6 +410,10 @@ namespace StardewModdingAPI.Metadata
Game1.menuTexture = content.Load<Texture2D>(key);
return true;
+ case "maps\\menutilesuncolored": // Game1.LoadContent
+ Game1.uncoloredMenuTexture = content.Load<Texture2D>(key);
+ return true;
+
case "maps\\springobjects": // Game1.LoadContent
Game1.objectSpriteSheet = content.Load<Texture2D>(key);
return true;
@@ -474,6 +515,10 @@ namespace StardewModdingAPI.Metadata
}
// dynamic textures
+ if (this.KeyStartsWith(key, "animals\\cat"))
+ return this.ReloadPetOrHorseSprites<Cat>(content, key);
+ if (this.KeyStartsWith(key, "animals\\dog"))
+ return this.ReloadPetOrHorseSprites<Dog>(content, key);
if (this.IsInFolder(key, "Animals"))
return this.ReloadFarmAnimalSprites(content, key);