trying to get custom content working - do NOT try to implement cc yet
This commit is contained in:
parent
54faadf7b5
commit
9a32b3afdd
Binary file not shown.
|
@ -4,6 +4,8 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
using StardewValley;
|
||||||
|
using StardewValley.Menus;
|
||||||
|
|
||||||
namespace StardewModdingAPI
|
namespace StardewModdingAPI
|
||||||
{
|
{
|
||||||
|
@ -23,6 +25,14 @@ namespace StardewModdingAPI
|
||||||
public delegate void KeyStateChanged(Keys key);
|
public delegate void KeyStateChanged(Keys key);
|
||||||
public static event KeyStateChanged KeyPressed = delegate { };
|
public static event KeyStateChanged KeyPressed = delegate { };
|
||||||
|
|
||||||
|
public delegate void ClickableMenuChanged(IClickableMenu newMenu);
|
||||||
|
public static event ClickableMenuChanged MenuChanged = delegate { };
|
||||||
|
|
||||||
|
public delegate void GameLocationsChanged(List<GameLocation> newLocations);
|
||||||
|
public static event GameLocationsChanged LocationsChanged = delegate { };
|
||||||
|
|
||||||
|
public delegate void CurrentLocationsChanged(GameLocation newLocation);
|
||||||
|
public static event CurrentLocationsChanged CurrentLocationChanged = delegate { };
|
||||||
|
|
||||||
public static void InvokeGameLoaded()
|
public static void InvokeGameLoaded()
|
||||||
{
|
{
|
||||||
|
@ -86,5 +96,20 @@ namespace StardewModdingAPI
|
||||||
{
|
{
|
||||||
KeyPressed.Invoke(key);
|
KeyPressed.Invoke(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void InvokeMenuChanged(IClickableMenu newMenu)
|
||||||
|
{
|
||||||
|
MenuChanged.Invoke(newMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InvokeLocationsChanged(List<GameLocation> newLocations)
|
||||||
|
{
|
||||||
|
LocationsChanged.Invoke(newLocations);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InvokeCurrentLocationChanged(GameLocation newLocation)
|
||||||
|
{
|
||||||
|
CurrentLocationChanged.Invoke(newLocation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -38,5 +39,15 @@ namespace StardewModdingAPI
|
||||||
{
|
{
|
||||||
return Int32.Parse(s);
|
return Int32.Parse(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int GetHash(this IEnumerable enumerable)
|
||||||
|
{
|
||||||
|
string s = string.Empty;
|
||||||
|
foreach (var v in enumerable)
|
||||||
|
{
|
||||||
|
s += v.GetHashCode();
|
||||||
|
}
|
||||||
|
return s.GetHashCode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.Eventing.Reader;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Reflection.Emit;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using StardewValley;
|
||||||
|
using StardewValley.Menus;
|
||||||
|
|
||||||
|
namespace StardewModdingAPI.Inheritance.Menus
|
||||||
|
{
|
||||||
|
public class SGameMenu : StardewValley.Menus.GameMenu
|
||||||
|
{
|
||||||
|
public GameMenu BaseGameMenu { get; private set; }
|
||||||
|
|
||||||
|
public List<ClickableComponent> tabs
|
||||||
|
{
|
||||||
|
get { return (List<ClickableComponent>)GetBaseFieldInfo("tabs").GetValue(BaseGameMenu); }
|
||||||
|
set { GetBaseFieldInfo("tabs").SetValue(BaseGameMenu, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<IClickableMenu> pages
|
||||||
|
{
|
||||||
|
get { return (List<IClickableMenu>)GetBaseFieldInfo("pages").GetValue(BaseGameMenu); }
|
||||||
|
set { GetBaseFieldInfo("pages").SetValue(BaseGameMenu, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SGameMenu ConstructFromBaseClass(GameMenu baseClass)
|
||||||
|
{
|
||||||
|
SGameMenu s = new SGameMenu();
|
||||||
|
s.BaseGameMenu = baseClass;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void receiveRightClick(int x, int y, bool playSound = true)
|
||||||
|
{
|
||||||
|
if (pages[currentTab] is InventoryPage)
|
||||||
|
{
|
||||||
|
Program.LogInfo("INV SCREEN");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
base.receiveRightClick(x, y, playSound);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldInfo[] GetPrivateFields()
|
||||||
|
{
|
||||||
|
return typeof(GameMenu).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FieldInfo GetBaseFieldInfo(string name)
|
||||||
|
{
|
||||||
|
return typeof(GameMenu).GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using StardewValley;
|
||||||
|
using StardewValley.Menus;
|
||||||
|
|
||||||
|
namespace StardewModdingAPI.Inheritance.Menus
|
||||||
|
{
|
||||||
|
public class SInventoryPage : InventoryPage
|
||||||
|
{
|
||||||
|
public InventoryPage BaseInventoryPage { get; private set; }
|
||||||
|
|
||||||
|
public static SInventoryPage ConstructFromBaseClass(InventoryPage baseClass)
|
||||||
|
{
|
||||||
|
SInventoryPage s = new SInventoryPage(0,0,0,0);
|
||||||
|
s.BaseInventoryPage = baseClass;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SInventoryPage(int x, int y, int width, int height) : base(x, y, width, height)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,15 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
using StardewValley;
|
using StardewValley;
|
||||||
using StardewValley.Menus;
|
using StardewValley.Menus;
|
||||||
|
@ -15,9 +19,14 @@ namespace StardewModdingAPI.Inheritance
|
||||||
{
|
{
|
||||||
public class SGame : Game1
|
public class SGame : Game1
|
||||||
{
|
{
|
||||||
public static FieldInfo[] StaticFields { get { return Thing(); } }
|
public static List<SGameLocation> ModLocations = new List<SGameLocation>();
|
||||||
|
public static SGameLocation CurrentLocation { get; internal set; }
|
||||||
|
public static Dictionary<Int32, SObject> ModItems { get; private set; }
|
||||||
|
public const Int32 LowestModItemID = 1000;
|
||||||
|
|
||||||
public static FieldInfo[] Thing()
|
public static FieldInfo[] StaticFields { get { return GetStaticFields(); } }
|
||||||
|
|
||||||
|
public static FieldInfo[] GetStaticFields()
|
||||||
{
|
{
|
||||||
return typeof(Game1).GetFields();
|
return typeof(Game1).GetFields();
|
||||||
}
|
}
|
||||||
|
@ -33,9 +42,15 @@ namespace StardewModdingAPI.Inheritance
|
||||||
get { return CurrentlyPressedKeys.Where(x => !PreviouslyPressedKeys.Contains(x)).ToArray(); }
|
get { return CurrentlyPressedKeys.Where(x => !PreviouslyPressedKeys.Contains(x)).ToArray(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int PreviousGameLocations { get; private set; }
|
||||||
|
public GameLocation PreviousGameLocation { get; private set; }
|
||||||
|
public IClickableMenu PreviousActiveMenu { get; private set; }
|
||||||
|
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
{
|
{
|
||||||
Program.Log("XNA Initialize");
|
Program.Log("XNA Initialize");
|
||||||
|
ModItems = new Dictionary<Int32, SObject>();
|
||||||
|
PreviouslyPressedKeys = new Keys[0];
|
||||||
Events.InvokeInitialize();
|
Events.InvokeInitialize();
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
}
|
}
|
||||||
|
@ -58,12 +73,33 @@ namespace StardewModdingAPI.Inheritance
|
||||||
if (KStateNow != KStatePrior)
|
if (KStateNow != KStatePrior)
|
||||||
{
|
{
|
||||||
Events.InvokeKeyboardChanged(KStateNow);
|
Events.InvokeKeyboardChanged(KStateNow);
|
||||||
|
KStatePrior = KStateNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Game1.activeClickableMenu != null && Game1.activeClickableMenu != PreviousActiveMenu)
|
||||||
|
{
|
||||||
|
Events.InvokeMenuChanged(Game1.activeClickableMenu);
|
||||||
|
PreviousActiveMenu = Game1.activeClickableMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Game1.locations.GetHash() != PreviousGameLocations)
|
||||||
|
{
|
||||||
|
Events.InvokeLocationsChanged(Game1.locations);
|
||||||
|
PreviousGameLocations = Game1.locations.GetHash();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Game1.currentLocation != PreviousGameLocation)
|
||||||
|
{
|
||||||
|
Events.InvokeCurrentLocationChanged(Game1.currentLocation);
|
||||||
|
PreviousGameLocation = Game1.currentLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentLocation != null)
|
||||||
|
CurrentLocation.update(gameTime);
|
||||||
|
|
||||||
Events.InvokeUpdateTick();
|
Events.InvokeUpdateTick();
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
|
|
||||||
KStatePrior = KStateNow;
|
|
||||||
PreviouslyPressedKeys = CurrentlyPressedKeys;
|
PreviouslyPressedKeys = CurrentlyPressedKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +107,63 @@ namespace StardewModdingAPI.Inheritance
|
||||||
{
|
{
|
||||||
Events.InvokeDrawTick();
|
Events.InvokeDrawTick();
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
|
spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, SamplerState.PointClamp, (DepthStencilState)null, (RasterizerState)null);
|
||||||
|
if (CurrentLocation != null)
|
||||||
|
CurrentLocation.draw(Game1.spriteBatch);
|
||||||
|
spriteBatch.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Int32 RegisterModItem(SObject modItem)
|
||||||
|
{
|
||||||
|
if (modItem.HasBeenRegistered)
|
||||||
|
{
|
||||||
|
Program.LogError("The item {0} has already been registered with ID {1}", modItem.Name, modItem.RegisteredId);
|
||||||
|
return modItem.RegisteredId;
|
||||||
|
}
|
||||||
|
Int32 newId = LowestModItemID;
|
||||||
|
if (ModItems.Count > 0)
|
||||||
|
newId = Math.Max(LowestModItemID, ModItems.OrderBy(x => x.Key).First().Key + 1);
|
||||||
|
ModItems.Add(newId, modItem);
|
||||||
|
modItem.HasBeenRegistered = true;
|
||||||
|
modItem.RegisteredId = newId;
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SObject PullModItemFromDict(Int32 id, bool isIndex)
|
||||||
|
{
|
||||||
|
if (isIndex)
|
||||||
|
{
|
||||||
|
if (ModItems.ElementAtOrDefault(id).Value != null)
|
||||||
|
{
|
||||||
|
return ModItems.ElementAt(id).Value.Clone();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Program.LogError("ModItem Dictionary does not contain index: " + id);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ModItems.ContainsKey(id))
|
||||||
|
{
|
||||||
|
return ModItems[id].Clone();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Program.LogError("ModItem Dictionary does not contain ID: " + id);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SGameLocation GetLocationFromName(String name)
|
||||||
|
{
|
||||||
|
if (ModLocations.Any(x => x.name == name))
|
||||||
|
{
|
||||||
|
return ModLocations[ModLocations.IndexOf(ModLocations.First(x => x.name == name))];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.Eventing.Reader;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using StardewValley;
|
||||||
|
using StardewValley.BellsAndWhistles;
|
||||||
|
|
||||||
|
namespace StardewModdingAPI.Inheritance
|
||||||
|
{
|
||||||
|
public class SGameLocation : GameLocation
|
||||||
|
{
|
||||||
|
public GameLocation BaseGameLocation { get; private set; }
|
||||||
|
|
||||||
|
public SerializableDictionary<Vector2, SObject> ModObjects { get; set; }
|
||||||
|
|
||||||
|
public static SGameLocation ConstructFromBaseClass(GameLocation baseClass)
|
||||||
|
{
|
||||||
|
SGameLocation s = new SGameLocation();
|
||||||
|
s.BaseGameLocation = baseClass;
|
||||||
|
s.ModObjects = new SerializableDictionary<Vector2, SObject>();
|
||||||
|
//s.IsFarm = baseClass.IsFarm;
|
||||||
|
//s.IsOutdoors = baseClass.IsOutdoors;
|
||||||
|
//s.LightLevel = baseClass.LightLevel;
|
||||||
|
//s.Map = baseClass.Map;
|
||||||
|
//s.objects = baseClass.objects;
|
||||||
|
//s.temporarySprites = baseClass.temporarySprites;
|
||||||
|
s.actionObjectForQuestionDialogue = baseClass.actionObjectForQuestionDialogue;
|
||||||
|
s.characters = baseClass.characters;
|
||||||
|
s.critters = (List<Critter>)typeof(GameLocation).GetField("critters", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass);
|
||||||
|
s.currentEvent = baseClass.currentEvent;
|
||||||
|
s.debris = baseClass.debris;
|
||||||
|
s.doorSprites = baseClass.doorSprites;
|
||||||
|
s.doors = baseClass.doors;
|
||||||
|
s.farmers = baseClass.farmers;
|
||||||
|
s.fishSplashAnimation = baseClass.fishSplashAnimation;
|
||||||
|
s.fishSplashPoint = baseClass.fishSplashPoint;
|
||||||
|
s.forceViewportPlayerFollow = baseClass.forceViewportPlayerFollow;
|
||||||
|
s.ignoreDebrisWeather = baseClass.ignoreDebrisWeather;
|
||||||
|
s.ignoreLights = baseClass.ignoreLights;
|
||||||
|
s.ignoreOutdoorLighting = baseClass.ignoreOutdoorLighting;
|
||||||
|
s.isFarm = baseClass.isFarm;
|
||||||
|
s.isOutdoors = baseClass.isOutdoors;
|
||||||
|
s.isStructure = baseClass.isStructure;
|
||||||
|
s.largeTerrainFeatures = baseClass.largeTerrainFeatures;
|
||||||
|
s.lastQuestionKey = baseClass.lastQuestionKey;
|
||||||
|
s.lastTouchActionLocation = baseClass.lastTouchActionLocation;
|
||||||
|
s.lightGlows = baseClass.lightGlows;
|
||||||
|
s.map = baseClass.map;
|
||||||
|
s.name = baseClass.name;
|
||||||
|
s.numberOfSpawnedObjectsOnMap = baseClass.numberOfSpawnedObjectsOnMap;
|
||||||
|
s.objects = baseClass.objects;
|
||||||
|
s.orePanAnimation = baseClass.orePanAnimation;
|
||||||
|
s.orePanPoint = baseClass.orePanPoint;
|
||||||
|
s.projectiles = baseClass.projectiles;
|
||||||
|
s.temporarySprites = baseClass.temporarySprites;
|
||||||
|
s.terrainFeatures = baseClass.terrainFeatures;
|
||||||
|
s.uniqueName = baseClass.uniqueName;
|
||||||
|
s.warps = baseClass.warps;
|
||||||
|
s.wasUpdated = (bool)typeof(GameLocation).GetField("wasUpdated", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(baseClass);
|
||||||
|
s.waterAnimationIndex = baseClass.waterAnimationIndex;
|
||||||
|
s.waterAnimationTimer = baseClass.waterAnimationTimer;
|
||||||
|
s.waterColor = baseClass.waterColor;
|
||||||
|
s.waterTileFlip = baseClass.waterTileFlip;
|
||||||
|
s.waterTiles = baseClass.waterTiles;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<SGameLocation> ConvertGameLocations(List<GameLocation> baseGameLocations)
|
||||||
|
{
|
||||||
|
return baseGameLocations.Select(ConstructFromBaseClass).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void update(GameTime gameTime)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void draw(SpriteBatch b)
|
||||||
|
{
|
||||||
|
foreach (var v in ModObjects)
|
||||||
|
{
|
||||||
|
v.Value.draw(b, (int)v.Key.X, (int)v.Key.Y, -999999, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using StardewValley;
|
||||||
|
using StardewValley.Locations;
|
||||||
|
|
||||||
|
namespace StardewModdingAPI.Inheritance
|
||||||
|
{
|
||||||
|
public class SObject : StardewValley.Object
|
||||||
|
{
|
||||||
|
public override String Name { get; set; }
|
||||||
|
public String Description { get; set; }
|
||||||
|
public Texture2D Texture { get; set; }
|
||||||
|
public String CategoryName { get; set; }
|
||||||
|
public Color CategoryColour { get; set; }
|
||||||
|
public Boolean IsPassable { get; set; }
|
||||||
|
public Boolean IsPlaceable { get; set; }
|
||||||
|
public Boolean HasBeenRegistered { get; set; }
|
||||||
|
public Int32 RegisteredId { get; set; }
|
||||||
|
|
||||||
|
public Int32 MaxStackSize { get; set; }
|
||||||
|
|
||||||
|
public Boolean WallMounted { get; set; }
|
||||||
|
public Vector2 DrawPosition { get; set; }
|
||||||
|
|
||||||
|
public Boolean FlaggedForPickup { get; set; }
|
||||||
|
|
||||||
|
public SObject()
|
||||||
|
{
|
||||||
|
Name = "Modded Item Name";
|
||||||
|
Description = "Modded Item Description";
|
||||||
|
CategoryName = "Modded Item Category";
|
||||||
|
Category = 4163;
|
||||||
|
CategoryColour = Color.White;
|
||||||
|
IsPassable = false;
|
||||||
|
IsPlaceable = false;
|
||||||
|
boundingBox = new Rectangle(0, 0, 64, 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string getDescription()
|
||||||
|
{
|
||||||
|
return Description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
|
||||||
|
{
|
||||||
|
if (Texture != null)
|
||||||
|
spriteBatch.Draw(Texture, new Vector2(x, y), new Color(255, 255, 255, 255f * alpha));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
|
||||||
|
{
|
||||||
|
if (Texture != null)
|
||||||
|
{
|
||||||
|
spriteBatch.Draw(Texture, new Vector2(xNonTile, yNonTile), null, new Color(255, 255, 255, 255f * alpha), 0, Vector2.Zero, 1, SpriteEffects.None, layerDepth);
|
||||||
|
spriteBatch.DrawString(Game1.dialogueFont, "TARG: " + new Vector2(xNonTile, yNonTile), new Vector2(128, 0), Color.Red);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber)
|
||||||
|
{
|
||||||
|
if (this.isRecipe)
|
||||||
|
{
|
||||||
|
transparency = 0.5f;
|
||||||
|
scaleSize *= 0.75f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Texture != null)
|
||||||
|
{
|
||||||
|
int targSize = (int) (64 * scaleSize * 0.9f);
|
||||||
|
int midX = (int) ((location.X) + 32);
|
||||||
|
int midY = (int) ((location.Y) + 32);
|
||||||
|
|
||||||
|
int targX = midX - targSize / 2;
|
||||||
|
int targY = midY - targSize / 2;
|
||||||
|
|
||||||
|
spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, new Color(255, 255, 255, transparency), 0, Vector2.Zero, SpriteEffects.None, layerDepth);
|
||||||
|
}
|
||||||
|
if (drawStackNumber)
|
||||||
|
{
|
||||||
|
float scale = 0.5f + scaleSize;
|
||||||
|
Game1.drawWithBorder(string.Concat(this.stack), Color.Black, Color.White, location + new Vector2((float) Game1.tileSize - Game1.tinyFont.MeasureString(string.Concat(this.stack)).X * scale, (float) Game1.tileSize - (float) ((double) Game1.tinyFont.MeasureString(string.Concat(this.stack)).Y * 3.0f / 4.0f) * scale), 0.0f, scale, 1f, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f)
|
||||||
|
{
|
||||||
|
if (Texture != null)
|
||||||
|
{
|
||||||
|
int targSize = 64;
|
||||||
|
int midX = (int) ((objectPosition.X) + 32);
|
||||||
|
int midY = (int) ((objectPosition.Y) + 32);
|
||||||
|
|
||||||
|
int targX = midX - targSize / 2;
|
||||||
|
int targY = midY - targSize / 2;
|
||||||
|
|
||||||
|
spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, (f.getStandingY() + 2) / 10000f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Color getCategoryColor()
|
||||||
|
{
|
||||||
|
return CategoryColour;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string getCategoryName()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(CategoryName))
|
||||||
|
return "Modded Item";
|
||||||
|
return CategoryName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool isPassable()
|
||||||
|
{
|
||||||
|
return IsPassable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool isPlaceable()
|
||||||
|
{
|
||||||
|
return IsPlaceable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int maximumStackSize()
|
||||||
|
{
|
||||||
|
return MaxStackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SObject Clone()
|
||||||
|
{
|
||||||
|
SObject toRet = new SObject();
|
||||||
|
|
||||||
|
toRet.Name = this.Name;
|
||||||
|
toRet.CategoryName = this.CategoryName;
|
||||||
|
toRet.Description = this.Description;
|
||||||
|
toRet.Texture = this.Texture;
|
||||||
|
toRet.IsPassable = this.IsPassable;
|
||||||
|
toRet.IsPlaceable = this.IsPlaceable;
|
||||||
|
toRet.quality = this.quality;
|
||||||
|
toRet.scale = this.scale;
|
||||||
|
toRet.isSpawnedObject = this.isSpawnedObject;
|
||||||
|
toRet.isRecipe = this.isRecipe;
|
||||||
|
toRet.questItem = this.questItem;
|
||||||
|
toRet.stack = 1;
|
||||||
|
toRet.HasBeenRegistered = this.HasBeenRegistered;
|
||||||
|
toRet.RegisteredId = this.RegisteredId;
|
||||||
|
|
||||||
|
return toRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Item getOne()
|
||||||
|
{
|
||||||
|
return this.Clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
|
||||||
|
{
|
||||||
|
SGameLocation s = SGame.GetLocationFromName(location.name);
|
||||||
|
|
||||||
|
if (s.GetHashCode() != SGame.CurrentLocation.GetHashCode())
|
||||||
|
{
|
||||||
|
Program.LogError("HASH DIFFERENCE: " + s.GetHashCode() + " | " + SGame.ModLocations[SGame.ModLocations.IndexOf(SGame.ModLocations.First(z => z.name == location.name))].GetHashCode() + " | " + SGame.CurrentLocation.GetHashCode());
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Title = (this.GetHashCode() + " PLACEMENT");
|
||||||
|
|
||||||
|
if (s != null)
|
||||||
|
{
|
||||||
|
Vector2 index1 = new Vector2((float)(x / Game1.tileSize), (float)(y / Game1.tileSize));
|
||||||
|
if (!s.ModObjects.ContainsKey(index1))
|
||||||
|
{
|
||||||
|
s.ModObjects.Add(index1, this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Program.LogError("No SGameLocation could be found for the supplied GameLocation!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ using System.ComponentModel;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Reflection.Emit;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -12,6 +13,7 @@ using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
using StardewModdingAPI.Inheritance;
|
using StardewModdingAPI.Inheritance;
|
||||||
|
using StardewModdingAPI.Inheritance.Menus;
|
||||||
using StardewValley;
|
using StardewValley;
|
||||||
using StardewValley.Menus;
|
using StardewValley.Menus;
|
||||||
using StardewValley.Minigames;
|
using StardewValley.Minigames;
|
||||||
|
@ -27,6 +29,7 @@ namespace StardewModdingAPI
|
||||||
public static string ExecutionPath { get; private set; }
|
public static string ExecutionPath { get; private set; }
|
||||||
public static string DataPath = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley"));
|
public static string DataPath = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley"));
|
||||||
public static string ModPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods");
|
public static string ModPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods");
|
||||||
|
public static string ModContentPath = Path.Combine(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods"), "Content");
|
||||||
public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
|
public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
|
||||||
public static string CurrentLog { get; private set; }
|
public static string CurrentLog { get; private set; }
|
||||||
public static StreamWriter LogStream { get; private set; }
|
public static StreamWriter LogStream { get; private set; }
|
||||||
|
@ -59,6 +62,8 @@ namespace StardewModdingAPI
|
||||||
File.Delete(ModPath);
|
File.Delete(ModPath);
|
||||||
if (!Directory.Exists(ModPath))
|
if (!Directory.Exists(ModPath))
|
||||||
Directory.CreateDirectory(ModPath);
|
Directory.CreateDirectory(ModPath);
|
||||||
|
if (!Directory.Exists(ModContentPath))
|
||||||
|
Directory.CreateDirectory(ModContentPath);
|
||||||
|
|
||||||
ExecutionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
ExecutionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
CurrentLog = LogPath + "\\MODDED_ProgramLog_" + System.DateTime.Now.Ticks + ".txt";
|
CurrentLog = LogPath + "\\MODDED_ProgramLog_" + System.DateTime.Now.Ticks + ".txt";
|
||||||
|
@ -75,10 +80,41 @@ namespace StardewModdingAPI
|
||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
Environment.Exit(-4);
|
Environment.Exit(-4);
|
||||||
}
|
}
|
||||||
|
|
||||||
StardewAssembly = Assembly.LoadFile(ExecutionPath + "\\Stardew Valley.exe");
|
StardewAssembly = Assembly.LoadFile(ExecutionPath + "\\Stardew Valley.exe");
|
||||||
StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true);
|
StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true);
|
||||||
StardewGameInfo = StardewProgramType.GetField("gamePtr");
|
StardewGameInfo = StardewProgramType.GetField("gamePtr");
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//HOLY FUCKING SHIT IGNORE THIS I JUST WANTED TO OVERRIDE A NON VIRTUAL METHOD
|
||||||
|
|
||||||
|
|
||||||
|
/*int fieldOffset = 0;
|
||||||
|
foreach (FieldInfo sourceField in sourceFields)
|
||||||
|
{
|
||||||
|
FieldBuilder fieldBuilder
|
||||||
|
= tb.DefineField(
|
||||||
|
sourceField.Name,
|
||||||
|
sourceField.FieldType,
|
||||||
|
FieldAttributes.Public);
|
||||||
|
fieldBuilder.SetOffset(fieldOffset);
|
||||||
|
fieldOffset++;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//Type dynamicType = tb.CreateType();
|
||||||
|
//System.Object dynObj = Activator.CreateInstance(dynamicType);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*foreach (FieldInfo sourceField in sourceFields)
|
||||||
|
{
|
||||||
|
FieldInfo destField
|
||||||
|
= dynObj.GetType().GetField(sourceField.Name);
|
||||||
|
destField.SetValue(dynObj, sourceField.GetValue(sourceObject));
|
||||||
|
}*/
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
LogInfo("Injecting New SDV Version...");
|
LogInfo("Injecting New SDV Version...");
|
||||||
Game1.version += "-Z_MODDED";
|
Game1.version += "-Z_MODDED";
|
||||||
|
|
||||||
|
@ -86,7 +122,7 @@ namespace StardewModdingAPI
|
||||||
LogInfo("Starting SDV...");
|
LogInfo("Starting SDV...");
|
||||||
gameThread.Start();
|
gameThread.Start();
|
||||||
|
|
||||||
SGame.Thing();
|
SGame.GetStaticFields();
|
||||||
|
|
||||||
while (!ready)
|
while (!ready)
|
||||||
{
|
{
|
||||||
|
@ -97,10 +133,14 @@ namespace StardewModdingAPI
|
||||||
|
|
||||||
consoleInputThread = new Thread(ConsoleInputThread);
|
consoleInputThread = new Thread(ConsoleInputThread);
|
||||||
LogInfo("Initializing Console Input Thread...");
|
LogInfo("Initializing Console Input Thread...");
|
||||||
consoleInputThread.Start();
|
RegisterCommands();
|
||||||
|
|
||||||
Events.KeyPressed += Events_KeyPressed;
|
Events.KeyPressed += Events_KeyPressed;
|
||||||
Events.UpdateTick += Events_UpdateTick;
|
Events.UpdateTick += Events_UpdateTick;
|
||||||
|
Events.LoadContent += Events_LoadContent;
|
||||||
|
//Events.MenuChanged += Events_MenuChanged;
|
||||||
|
Events.LocationsChanged += Events_LocationsChanged;
|
||||||
|
Events.CurrentLocationChanged += Events_CurrentLocationChanged;
|
||||||
|
|
||||||
LogInfo("Applying Final SDV Tweaks...");
|
LogInfo("Applying Final SDV Tweaks...");
|
||||||
StardewInvoke(() =>
|
StardewInvoke(() =>
|
||||||
|
@ -110,9 +150,12 @@ namespace StardewModdingAPI
|
||||||
});
|
});
|
||||||
|
|
||||||
LogInfo("Game Loaded");
|
LogInfo("Game Loaded");
|
||||||
LogColour(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage");
|
|
||||||
Events.InvokeGameLoaded();
|
Events.InvokeGameLoaded();
|
||||||
|
|
||||||
|
consoleInputThread.Start();
|
||||||
|
LogColour(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage");
|
||||||
|
|
||||||
|
|
||||||
while (ready)
|
while (ready)
|
||||||
{
|
{
|
||||||
//Check if the game is still running 10 times a second
|
//Check if the game is still running 10 times a second
|
||||||
|
@ -126,7 +169,7 @@ namespace StardewModdingAPI
|
||||||
LogInfo("Shutting Down...");
|
LogInfo("Shutting Down...");
|
||||||
int time = 0;
|
int time = 0;
|
||||||
int step = 100;
|
int step = 100;
|
||||||
int target = 2000;
|
int target = 1000;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
time += step;
|
time += step;
|
||||||
|
@ -205,14 +248,35 @@ namespace StardewModdingAPI
|
||||||
{
|
{
|
||||||
string input = string.Empty;
|
string input = string.Empty;
|
||||||
|
|
||||||
RegisterCommands();
|
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Command.CallCommand(Console.ReadLine());
|
Command.CallCommand(Console.ReadLine());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Events_LoadContent()
|
||||||
|
{
|
||||||
|
LogColour(ConsoleColor.Magenta, "REGISTERING BASE CUSTOM ITEM");
|
||||||
|
SObject so = new SObject();
|
||||||
|
so.Name = "Mario Block";
|
||||||
|
so.CategoryName = "SMAPI Test Mod";
|
||||||
|
so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI.";
|
||||||
|
so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPath + "\\Test.png", FileMode.Open));
|
||||||
|
so.IsPassable = true;
|
||||||
|
so.IsPlaceable = true;
|
||||||
|
LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so));
|
||||||
|
|
||||||
|
LogColour(ConsoleColor.Magenta, "REGISTERING SECOND CUSTOM ITEM");
|
||||||
|
SObject so2 = new SObject();
|
||||||
|
so2.Name = "Mario Painting";
|
||||||
|
so2.CategoryName = "SMAPI Test Mod";
|
||||||
|
so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI.";
|
||||||
|
so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPath + "\\PaintingTest.png", FileMode.Open));
|
||||||
|
so2.IsPassable = true;
|
||||||
|
so2.IsPlaceable = true;
|
||||||
|
LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2));
|
||||||
|
}
|
||||||
|
|
||||||
static void Events_KeyPressed(Keys key)
|
static void Events_KeyPressed(Keys key)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -238,6 +302,27 @@ namespace StardewModdingAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Events_MenuChanged(IClickableMenu newMenu)
|
||||||
|
{
|
||||||
|
LogInfo("NEW MENU: " + newMenu.GetType());
|
||||||
|
if (newMenu is GameMenu)
|
||||||
|
{
|
||||||
|
Game1.activeClickableMenu = SGameMenu.ConstructFromBaseClass(Game1.activeClickableMenu as GameMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Events_LocationsChanged(List<GameLocation> newLocations)
|
||||||
|
{
|
||||||
|
SGame.ModLocations = SGameLocation.ConvertGameLocations(Game1.locations);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Events_CurrentLocationChanged(GameLocation newLocation)
|
||||||
|
{
|
||||||
|
SGame.CurrentLocation = null;
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
SGame.CurrentLocation = SGame.ModLocations.First(x => x.name == newLocation.name);
|
||||||
|
}
|
||||||
|
|
||||||
public static void StardewInvoke(Action a)
|
public static void StardewInvoke(Action a)
|
||||||
{
|
{
|
||||||
StardewForm.Invoke(a);
|
StardewForm.Invoke(a);
|
||||||
|
@ -270,6 +355,7 @@ namespace StardewModdingAPI
|
||||||
Command.RegisterCommand("show", "Shows the game form | show").CommandFired += show_CommandFired;
|
Command.RegisterCommand("show", "Shows the game form | show").CommandFired += show_CommandFired;
|
||||||
|
|
||||||
Command.RegisterCommand("save", "Saves the game? Doesn't seem to work. | save").CommandFired += save_CommandFired;
|
Command.RegisterCommand("save", "Saves the game? Doesn't seem to work. | save").CommandFired += save_CommandFired;
|
||||||
|
Command.RegisterCommand("load", "Shows the load screen | load").CommandFired += load_CommandFired;
|
||||||
|
|
||||||
Command.RegisterCommand("exit", "Closes the game | exit").CommandFired += exit_CommandFired;
|
Command.RegisterCommand("exit", "Closes the game | exit").CommandFired += exit_CommandFired;
|
||||||
Command.RegisterCommand("stop", "Closes the game | stop").CommandFired += exit_CommandFired;
|
Command.RegisterCommand("stop", "Closes the game | stop").CommandFired += exit_CommandFired;
|
||||||
|
@ -292,6 +378,7 @@ namespace StardewModdingAPI
|
||||||
|
|
||||||
Command.RegisterCommand("out_items", "Outputs a list of items | out_items", new[] { "" }).CommandFired += out_items;
|
Command.RegisterCommand("out_items", "Outputs a list of items | out_items", new[] { "" }).CommandFired += out_items;
|
||||||
Command.RegisterCommand("out_melee", "Outputs a list of melee weapons | out_melee", new[] { "" }).CommandFired += out_melee;
|
Command.RegisterCommand("out_melee", "Outputs a list of melee weapons | out_melee", new[] { "" }).CommandFired += out_melee;
|
||||||
|
Command.RegisterCommand("newitem", "Outputs a list of melee weapons | out_melee", new[] { "" }).CommandFired += RegisterNewItem;
|
||||||
|
|
||||||
Command.RegisterCommand("world_settime", "Sets the time to the specified value | world_settime <value>", new[] { "(Int32)<value> The target time [06:00 AM is 600]" }).CommandFired += world_setTime;
|
Command.RegisterCommand("world_settime", "Sets the time to the specified value | world_settime <value>", new[] { "(Int32)<value> The target time [06:00 AM is 600]" }).CommandFired += world_setTime;
|
||||||
Command.RegisterCommand("world_freezetime", "Freezes or thaws time | world_freezetime <value>", new[] { "(0 - 1)<value> Whether or not to freeze time. 0 is thawed, 1 is frozen" }).CommandFired += world_freezeTime;
|
Command.RegisterCommand("world_freezetime", "Freezes or thaws time | world_freezetime <value>", new[] { "(0 - 1)<value> Whether or not to freeze time. 0 is thawed, 1 is frozen" }).CommandFired += world_freezeTime;
|
||||||
|
@ -340,6 +427,11 @@ namespace StardewModdingAPI
|
||||||
StardewValley.SaveGame.Save();
|
StardewValley.SaveGame.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void load_CommandFired(Command cmd)
|
||||||
|
{
|
||||||
|
Game1.activeClickableMenu = new StardewValley.Menus.LoadGameMenu();
|
||||||
|
}
|
||||||
|
|
||||||
static void exit_CommandFired(Command cmd)
|
static void exit_CommandFired(Command cmd)
|
||||||
{
|
{
|
||||||
Application.Exit();
|
Application.Exit();
|
||||||
|
@ -857,6 +949,7 @@ namespace StardewModdingAPI
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Item it = new StardewValley.Object(i, 1);
|
Item it = new StardewValley.Object(i, 1);
|
||||||
|
if (it.Name != "Error Item")
|
||||||
Console.WriteLine(i + "| " + it.Name);
|
Console.WriteLine(i + "| " + it.Name);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -902,6 +995,11 @@ namespace StardewModdingAPI
|
||||||
|
|
||||||
static void blank_command(Command cmd) { }
|
static void blank_command(Command cmd) { }
|
||||||
|
|
||||||
|
static void RegisterNewItem(Command cmd)
|
||||||
|
{
|
||||||
|
Game1.player.addItemToInventory(SGame.PullModItemFromDict(0, true));
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||||
<Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
<Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
||||||
<Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
<Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
||||||
<Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
<Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
||||||
|
@ -64,13 +65,21 @@
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="xTile, Version=2.0.4.0, Culture=neutral, processorArchitecture=x86">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>D:\#Network-Steam\SteamRepo\steamapps\common\Stardew Valley\xTile.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Command.cs" />
|
<Compile Include="Command.cs" />
|
||||||
<Compile Include="Events.cs" />
|
<Compile Include="Events.cs" />
|
||||||
<Compile Include="Extensions.cs" />
|
<Compile Include="Extensions.cs" />
|
||||||
<Compile Include="Inheritance\Menus\SBobberBar.cs" />
|
<Compile Include="Inheritance\Menus\SBobberBar.cs" />
|
||||||
|
<Compile Include="Inheritance\Menus\SGameMenu.cs" />
|
||||||
|
<Compile Include="Inheritance\Menus\SInventoryPage.cs" />
|
||||||
<Compile Include="Inheritance\Minigames\SMinigameBase.cs" />
|
<Compile Include="Inheritance\Minigames\SMinigameBase.cs" />
|
||||||
|
<Compile Include="Inheritance\SGameLocation.cs" />
|
||||||
|
<Compile Include="Inheritance\SObject.cs" />
|
||||||
<Compile Include="Mod.cs" />
|
<Compile Include="Mod.cs" />
|
||||||
<Compile Include="ModItem.cs" />
|
<Compile Include="ModItem.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
|
|
|
@ -33,3 +33,4 @@ C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\
|
||||||
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
|
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
|
||||||
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
|
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
|
||||||
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache
|
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache
|
||||||
|
C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Microsoft.QualityTools.Testing.Fakes.dll
|
||||||
|
|
|
@ -0,0 +1,538 @@
|
||||||
|
0| Weeds
|
||||||
|
2| Stone
|
||||||
|
4| Stone
|
||||||
|
16| Wild Horseradish
|
||||||
|
18| Daffodil
|
||||||
|
20| Leek
|
||||||
|
22| Dandelion
|
||||||
|
24| Parsnip
|
||||||
|
30| Lumber
|
||||||
|
60| Emerald
|
||||||
|
62| Aquamarine
|
||||||
|
64| Ruby
|
||||||
|
66| Amethyst
|
||||||
|
68| Topaz
|
||||||
|
70| Jade
|
||||||
|
72| Diamond
|
||||||
|
74| Prismatic Shard
|
||||||
|
78| Cave Carrot
|
||||||
|
80| Quartz
|
||||||
|
82| Fire Quartz
|
||||||
|
84| Frozen Tear
|
||||||
|
86| Earth Crystal
|
||||||
|
88| Coconut
|
||||||
|
90| Cactus Fruit
|
||||||
|
92| Sap
|
||||||
|
96| Dwarf Scroll I
|
||||||
|
97| Dwarf Scroll II
|
||||||
|
98| Dwarf Scroll III
|
||||||
|
99| Dwarf Scroll IV
|
||||||
|
100| Chipped Amphora
|
||||||
|
101| Arrowhead
|
||||||
|
102| Lost Book
|
||||||
|
103| Ancient Doll
|
||||||
|
104| Elvish Jewelry
|
||||||
|
105| Chewing Stick
|
||||||
|
106| Ornamental Fan
|
||||||
|
107| Dinosaur Egg
|
||||||
|
108| Rare Disc
|
||||||
|
109| Ancient Sword
|
||||||
|
110| Rusty Spoon
|
||||||
|
111| Rusty Spur
|
||||||
|
112| Rusty Cog
|
||||||
|
113| Chicken Statue
|
||||||
|
114| Ancient Seed
|
||||||
|
115| Prehistoric Tool
|
||||||
|
116| Dried Starfish
|
||||||
|
117| Anchor
|
||||||
|
118| Glass Shards
|
||||||
|
119| Bone Flute
|
||||||
|
120| Prehistoric Handaxe
|
||||||
|
121| Dwarvish Helm
|
||||||
|
122| Dwarf Gadget
|
||||||
|
123| Ancient Drum
|
||||||
|
124| Golden Mask
|
||||||
|
125| Golden Relic
|
||||||
|
126| Strange Doll
|
||||||
|
127| Strange Doll
|
||||||
|
128| Pufferfish
|
||||||
|
129| Anchovy
|
||||||
|
130| Tuna
|
||||||
|
131| Sardine
|
||||||
|
132| Bream
|
||||||
|
136| Largemouth Bass
|
||||||
|
137| Smallmouth Bass
|
||||||
|
138| Rainbow Trout
|
||||||
|
139| Salmon
|
||||||
|
140| Walleye
|
||||||
|
141| Perch
|
||||||
|
142| Carp
|
||||||
|
143| Catfish
|
||||||
|
144| Pike
|
||||||
|
145| Sunfish
|
||||||
|
146| Red Mullet
|
||||||
|
147| Herring
|
||||||
|
148| Eel
|
||||||
|
149| Octopus
|
||||||
|
150| Red Snapper
|
||||||
|
151| Squid
|
||||||
|
152| Seaweed
|
||||||
|
153| Green Algae
|
||||||
|
154| Sea Cucumber
|
||||||
|
155| Super Cucumber
|
||||||
|
156| Ghostfish
|
||||||
|
157| White Algae
|
||||||
|
158| Stonefish
|
||||||
|
159| Crimsonfish
|
||||||
|
160| Angler
|
||||||
|
161| Ice Pip
|
||||||
|
162| Lava Eel
|
||||||
|
163| Legend
|
||||||
|
164| Sandfish
|
||||||
|
165| Scorpion Carp
|
||||||
|
166| Treasure Chest
|
||||||
|
167| Joja Cola
|
||||||
|
168| Trash
|
||||||
|
169| Driftwood
|
||||||
|
170| Broken Glasses
|
||||||
|
171| Broken CD
|
||||||
|
172| Soggy Newspaper
|
||||||
|
174| Large Egg
|
||||||
|
176| Egg
|
||||||
|
178| Hay
|
||||||
|
180| Egg
|
||||||
|
182| Large Egg
|
||||||
|
184| Milk
|
||||||
|
186| Large Milk
|
||||||
|
188| Green Bean
|
||||||
|
190| Cauliflower
|
||||||
|
192| Potato
|
||||||
|
194| Fried Egg
|
||||||
|
195| Omelet
|
||||||
|
196| Salad
|
||||||
|
197| Cheese Cauliflower
|
||||||
|
198| Baked Fish
|
||||||
|
199| Parsnip Soup
|
||||||
|
200| Vegetable Medley
|
||||||
|
201| Complete Breakfast
|
||||||
|
202| Fried Calamari
|
||||||
|
203| Strange Bun
|
||||||
|
204| Lucky Lunch
|
||||||
|
205| Fried Mushroom
|
||||||
|
206| Pizza
|
||||||
|
207| Bean Hotpot
|
||||||
|
208| Glazed Yams
|
||||||
|
209| Carp Surprise
|
||||||
|
210| Hashbrowns
|
||||||
|
211| Pancakes
|
||||||
|
212| Salmon Dinner
|
||||||
|
213| Fish Taco
|
||||||
|
214| Crispy Bass
|
||||||
|
215| Pepper Poppers
|
||||||
|
216| Bread
|
||||||
|
218| Tom Kha Soup
|
||||||
|
219| Trout Soup
|
||||||
|
220| Chocolate Cake
|
||||||
|
221| Pink Cake
|
||||||
|
222| Rhubarb Pie
|
||||||
|
223| Cookie
|
||||||
|
224| Spaghetti
|
||||||
|
225| Fried Eel
|
||||||
|
226| Spicy Eel
|
||||||
|
227| Sashimi
|
||||||
|
228| Maki Roll
|
||||||
|
229| Tortilla
|
||||||
|
230| Red Plate
|
||||||
|
231| Eggplant Parmesan
|
||||||
|
232| Rice Pudding
|
||||||
|
233| Ice Cream
|
||||||
|
234| Blueberry Tart
|
||||||
|
235| Autumn's Bounty
|
||||||
|
236| Pumpkin Soup
|
||||||
|
237| Super Meal
|
||||||
|
238| Cranberry Sauce
|
||||||
|
239| Stuffing
|
||||||
|
240| Farmer's Lunch
|
||||||
|
241| Survival Burger
|
||||||
|
242| Dish O' The Sea
|
||||||
|
243| Miner's Treat
|
||||||
|
244| Roots Platter
|
||||||
|
245| Sugar
|
||||||
|
246| Wheat Flour
|
||||||
|
247| Oil
|
||||||
|
248| Garlic
|
||||||
|
250| Kale
|
||||||
|
252| Rhubarb
|
||||||
|
254| Melon
|
||||||
|
256| Tomato
|
||||||
|
257| Morel
|
||||||
|
258| Blueberry
|
||||||
|
259| Fiddlehead Fern
|
||||||
|
260| Hot Pepper
|
||||||
|
262| Wheat
|
||||||
|
264| Radish
|
||||||
|
266| Red Cabbage
|
||||||
|
268| Starfruit
|
||||||
|
270| Corn
|
||||||
|
272| Eggplant
|
||||||
|
274| Artichoke
|
||||||
|
276| Pumpkin
|
||||||
|
278| Bok Choy
|
||||||
|
280| Yam
|
||||||
|
281| Chanterelle
|
||||||
|
282| Cranberries
|
||||||
|
283| Holly
|
||||||
|
284| Beet
|
||||||
|
286| Cherry Bomb
|
||||||
|
287| Bomb
|
||||||
|
288| Mega Bomb
|
||||||
|
290| Stone
|
||||||
|
294| Twig
|
||||||
|
295| Twig
|
||||||
|
296| Salmonberry
|
||||||
|
297| Grass Starter
|
||||||
|
298| Hardwood Fence
|
||||||
|
299| Amaranth Seeds
|
||||||
|
300| Amaranth
|
||||||
|
301| Grape Starter
|
||||||
|
302| Hops Starter
|
||||||
|
303| Pale Ale
|
||||||
|
304| Hops
|
||||||
|
305| Void Egg
|
||||||
|
306| Mayonnaise
|
||||||
|
307| Duck Mayonnaise
|
||||||
|
309| Acorn
|
||||||
|
310| Maple Seed
|
||||||
|
311| Pine Cone
|
||||||
|
313| Weeds
|
||||||
|
314| Weeds
|
||||||
|
315| Weeds
|
||||||
|
316| Weeds
|
||||||
|
317| Weeds
|
||||||
|
318| Weeds
|
||||||
|
319| Weeds
|
||||||
|
320| Weeds
|
||||||
|
321| Weeds
|
||||||
|
322| Wood Fence
|
||||||
|
323| Stone Fence
|
||||||
|
324| Iron Fence
|
||||||
|
325| Gate
|
||||||
|
326| Dwarvish Translation Guide
|
||||||
|
328| Wood Floor
|
||||||
|
329| Stone Floor
|
||||||
|
330| Clay
|
||||||
|
331| Weathered Floor
|
||||||
|
333| Crystal Floor
|
||||||
|
334| Copper Bar
|
||||||
|
335| Iron Bar
|
||||||
|
336| Gold Bar
|
||||||
|
337| Iridium Bar
|
||||||
|
338| Refined Quartz
|
||||||
|
340| Honey
|
||||||
|
341| Tea Set
|
||||||
|
342| Pickles
|
||||||
|
343| Stone
|
||||||
|
344| Jelly
|
||||||
|
346| Beer
|
||||||
|
347| Rare Seed
|
||||||
|
348| Wine
|
||||||
|
349| Energy Tonic
|
||||||
|
350| Juice
|
||||||
|
351| Muscle Remedy
|
||||||
|
368| Basic Fertilizer
|
||||||
|
369| Quality Fertilizer
|
||||||
|
370| Basic Retaining Soil
|
||||||
|
371| Quality Retaining Soil
|
||||||
|
372| Clam
|
||||||
|
373| Golden Pumpkin
|
||||||
|
376| Poppy
|
||||||
|
378| Copper Ore
|
||||||
|
380| Iron Ore
|
||||||
|
382| Coal
|
||||||
|
384| Gold Ore
|
||||||
|
386| Iridium Ore
|
||||||
|
388| Wood
|
||||||
|
390| Stone
|
||||||
|
392| Nautilus Shell
|
||||||
|
393| Coral
|
||||||
|
394| Rainbow Shell
|
||||||
|
395| Coffee
|
||||||
|
396| Spice Berry
|
||||||
|
397| Sea Urchin
|
||||||
|
398| Grape
|
||||||
|
399| Spring Onion
|
||||||
|
400| Strawberry
|
||||||
|
401| Straw Floor
|
||||||
|
402| Sweet Pea
|
||||||
|
403| Field Snack
|
||||||
|
404| Common Mushroom
|
||||||
|
405| Wood Path
|
||||||
|
406| Wild Plum
|
||||||
|
407| Gravel Path
|
||||||
|
408| Hazelnut
|
||||||
|
409| Crystal Path
|
||||||
|
410| Blackberry
|
||||||
|
411| Cobblestone Path
|
||||||
|
412| Winter Root
|
||||||
|
413| Blue Slime Egg
|
||||||
|
414| Crystal Fruit
|
||||||
|
416| Snow Yam
|
||||||
|
417| Sweet Gem Berry
|
||||||
|
418| Crocus
|
||||||
|
419| Vinegar
|
||||||
|
420| Red Mushroom
|
||||||
|
421| Sunflower
|
||||||
|
422| Purple Mushroom
|
||||||
|
423| Rice
|
||||||
|
424| Cheese
|
||||||
|
425| Fairy Seeds
|
||||||
|
426| Goat Cheese
|
||||||
|
427| Tulip Bulb
|
||||||
|
428| Cloth
|
||||||
|
429| Jazz Seeds
|
||||||
|
430| Truffle
|
||||||
|
431| Sunflower Seeds
|
||||||
|
432| Truffle Oil
|
||||||
|
434| Stardrop
|
||||||
|
436| Goat Milk
|
||||||
|
437| Red Slime Egg
|
||||||
|
438| L. Goat Milk
|
||||||
|
439| Purple Slime Egg
|
||||||
|
440| Wool
|
||||||
|
441| Explosive Ammo
|
||||||
|
442| Duck Egg
|
||||||
|
444| Duck Feather
|
||||||
|
446| Rabbit's Foot
|
||||||
|
449| Stone Base
|
||||||
|
450| Stone
|
||||||
|
452| Weeds
|
||||||
|
453| Poppy Seeds
|
||||||
|
454| Ancient Fruit
|
||||||
|
455| Spangle Seeds
|
||||||
|
456| Algae Soup
|
||||||
|
457| Pale Broth
|
||||||
|
458| Bouquet
|
||||||
|
460| Mermaid's Pendant
|
||||||
|
461| Decorative Pot
|
||||||
|
463| Drum Block
|
||||||
|
464| Flute Block
|
||||||
|
465| Speed-Gro
|
||||||
|
466| Deluxe Speed-Gro
|
||||||
|
472| Parsnip Seeds
|
||||||
|
473| Bean Starter
|
||||||
|
474| Cauliflower Seeds
|
||||||
|
475| Potato Seeds
|
||||||
|
476| Garlic Seeds
|
||||||
|
477| Kale Seeds
|
||||||
|
478| Rhubarb Seeds
|
||||||
|
479| Melon Seeds
|
||||||
|
480| Tomato Seeds
|
||||||
|
481| Blueberry Seeds
|
||||||
|
482| Pepper Seeds
|
||||||
|
483| Wheat Seeds
|
||||||
|
484| Radish Seeds
|
||||||
|
485| Red Cabbage Seeds
|
||||||
|
486| Starfruit Seeds
|
||||||
|
487| Corn Seeds
|
||||||
|
488| Eggplant Seeds
|
||||||
|
489| Artichoke Seeds
|
||||||
|
490| Pumpkin Seeds
|
||||||
|
491| Bok Choy Seeds
|
||||||
|
492| Yam Seeds
|
||||||
|
493| Cranberry Seeds
|
||||||
|
494| Beet Seeds
|
||||||
|
495| Spring Seeds
|
||||||
|
496| Summer Seeds
|
||||||
|
497| Fall Seeds
|
||||||
|
498| Winter Seeds
|
||||||
|
499| Ancient Seeds
|
||||||
|
516| Small Glow Ring
|
||||||
|
517| Glow Ring
|
||||||
|
518| Small Magnet Ring
|
||||||
|
519| Magnet Ring
|
||||||
|
520| Slime Charmer Ring
|
||||||
|
521| Warrior Ring
|
||||||
|
522| Vampire Ring
|
||||||
|
523| Savage Ring
|
||||||
|
524| Ring of Yoba
|
||||||
|
525| Sturdy Ring
|
||||||
|
526| Burglar's Ring
|
||||||
|
527| Iridium Band
|
||||||
|
528| Jukebox Ring
|
||||||
|
529| Amethyst Ring
|
||||||
|
530| Topaz Ring
|
||||||
|
531| Aquamarine Ring
|
||||||
|
532| Jade Ring
|
||||||
|
533| Emerald Ring
|
||||||
|
534| Ruby Ring
|
||||||
|
535| Geode
|
||||||
|
536| Frozen Geode
|
||||||
|
537| Magma Geode
|
||||||
|
538| Alamite
|
||||||
|
539| Bixite
|
||||||
|
540| Baryte
|
||||||
|
541| Aerinite
|
||||||
|
542| Calcite
|
||||||
|
543| Dolomite
|
||||||
|
544| Esperite
|
||||||
|
545| Fluorapatite
|
||||||
|
546| Geminite
|
||||||
|
547| Helvite
|
||||||
|
548| Jamborite
|
||||||
|
549| Jagoite
|
||||||
|
550| Kyanite
|
||||||
|
551| Lunarite
|
||||||
|
552| Malachite
|
||||||
|
553| Neptunite
|
||||||
|
554| Lemon Stone
|
||||||
|
555| Nekoite
|
||||||
|
556| Orpiment
|
||||||
|
557| Petrified Slime
|
||||||
|
558| Thunder Egg
|
||||||
|
559| Pyrite
|
||||||
|
560| Ocean Stone
|
||||||
|
561| Ghost Crystal
|
||||||
|
562| Tigerseye
|
||||||
|
563| Jasper
|
||||||
|
564| Opal
|
||||||
|
565| Fire Opal
|
||||||
|
566| Celestine
|
||||||
|
567| Marble
|
||||||
|
568| Sandstone
|
||||||
|
569| Granite
|
||||||
|
570| Basalt
|
||||||
|
571| Limestone
|
||||||
|
572| Soapstone
|
||||||
|
573| Hematite
|
||||||
|
574| Mudstone
|
||||||
|
575| Obsidian
|
||||||
|
576| Slate
|
||||||
|
577| Fairy Stone
|
||||||
|
578| Star Shards
|
||||||
|
579| Prehistoric Scapula
|
||||||
|
580| Prehistoric Tibia
|
||||||
|
581| Prehistoric Skull
|
||||||
|
582| Skeletal Hand
|
||||||
|
583| Prehistoric Rib
|
||||||
|
584| Prehistoric Vertebra
|
||||||
|
585| Skeletal Tail
|
||||||
|
586| Nautilus Shell
|
||||||
|
587| Amphibian Fossil
|
||||||
|
588| Palm Fossil
|
||||||
|
589| Trilobite
|
||||||
|
590| Artifact Spot
|
||||||
|
591| Tulip
|
||||||
|
593| Summer Spangle
|
||||||
|
595| Fairy Rose
|
||||||
|
597| Blue Jazz
|
||||||
|
599| Sprinkler
|
||||||
|
604| Plum Pudding
|
||||||
|
605| Artichoke Dip
|
||||||
|
606| Stir Fry
|
||||||
|
607| Roasted Hazelnuts
|
||||||
|
608| Pumpkin Pie
|
||||||
|
609| Radish Salad
|
||||||
|
610| Fruit Salad
|
||||||
|
611| Blackberry Cobbler
|
||||||
|
612| Cranberry Candy
|
||||||
|
613| Apple
|
||||||
|
618| Bruschetta
|
||||||
|
621| Quality Sprinkler
|
||||||
|
628| Cherry Sapling
|
||||||
|
629| Apricot Sapling
|
||||||
|
630| Orange Sapling
|
||||||
|
631| Peach Sapling
|
||||||
|
632| Pomegranate Sapling
|
||||||
|
633| Apple Sapling
|
||||||
|
634| Apricot
|
||||||
|
635| Orange
|
||||||
|
636| Peach
|
||||||
|
637| Pomegranate
|
||||||
|
638| Cherry
|
||||||
|
645| Iridium Sprinkler
|
||||||
|
648| Coleslaw
|
||||||
|
649| Fiddlehead Risotto
|
||||||
|
651| Poppyseed Muffin
|
||||||
|
668| Stone
|
||||||
|
670| Stone
|
||||||
|
674| Weeds
|
||||||
|
675| Weeds
|
||||||
|
676| Weeds
|
||||||
|
677| Weeds
|
||||||
|
678| Weeds
|
||||||
|
679| Weeds
|
||||||
|
680| Green Slime Egg
|
||||||
|
681| Rain Totem
|
||||||
|
682| Mutant Carp
|
||||||
|
684| Bug Meat
|
||||||
|
685| Bait
|
||||||
|
686| Spinner
|
||||||
|
687| Dressed Spinner
|
||||||
|
688| Warp Totem: Farm
|
||||||
|
689| Warp Totem: Mountains
|
||||||
|
690| Warp Totem: Beach
|
||||||
|
691| Barbed Hook
|
||||||
|
692| Lead Bobber
|
||||||
|
693| Treasure Hunter
|
||||||
|
694| Trap Bobber
|
||||||
|
695| Cork Bobber
|
||||||
|
698| Sturgeon
|
||||||
|
699| Tiger Trout
|
||||||
|
700| Bullhead
|
||||||
|
701| Tilapia
|
||||||
|
702| Chub
|
||||||
|
703| Magnet
|
||||||
|
704| Dorado
|
||||||
|
705| Albacore
|
||||||
|
706| Shad
|
||||||
|
707| Lingcod
|
||||||
|
708| Halibut
|
||||||
|
709| Hardwood
|
||||||
|
710| Crab Pot
|
||||||
|
715| Lobster
|
||||||
|
716| Crayfish
|
||||||
|
717| Crab
|
||||||
|
718| Cockle
|
||||||
|
719| Mussel
|
||||||
|
720| Shrimp
|
||||||
|
721| Snail
|
||||||
|
722| Periwinkle
|
||||||
|
723| Oyster
|
||||||
|
724| Maple Syrup
|
||||||
|
725| Oak Resin
|
||||||
|
726| Pine Tar
|
||||||
|
727| Chowder
|
||||||
|
728| Fish Stew
|
||||||
|
729| Escargot
|
||||||
|
730| Lobster Bisque
|
||||||
|
731| Maple Bar
|
||||||
|
732| Crab Cakes
|
||||||
|
734| Woodskip
|
||||||
|
745| Strawberry Seeds
|
||||||
|
746| Jack-O-Lantern
|
||||||
|
747| Rotten Plant
|
||||||
|
748| Rotten Plant
|
||||||
|
749| Omni Geode
|
||||||
|
750| Weeds
|
||||||
|
751| Stone
|
||||||
|
760| Stone
|
||||||
|
762| Stone
|
||||||
|
764| Stone
|
||||||
|
765| Stone
|
||||||
|
766| Slime
|
||||||
|
767| Bat Wing
|
||||||
|
768| Solar Essence
|
||||||
|
769| Void Essence
|
||||||
|
770| Mixed Seeds
|
||||||
|
771| Fiber
|
||||||
|
772| Oil of Garlic
|
||||||
|
773| Life Elixir
|
||||||
|
774| Wild Bait
|
||||||
|
775| Glacierfish
|
||||||
|
784| Weeds
|
||||||
|
785| Weeds
|
||||||
|
786| Weeds
|
||||||
|
787| Battery Pack
|
||||||
|
788| Lost Axe
|
||||||
|
789| Lucky Purple Shorts
|
||||||
|
790| Berry Basket
|
Loading…
Reference in New Issue