Revitalize: Implemented Animation Manager. Need to fix when held and display in menu.

This commit is contained in:
Joshua Navarro 2018-12-21 15:28:52 -08:00
parent 23d964d861
commit e1abeac68b
31 changed files with 563 additions and 98 deletions

View File

@ -1,7 +1,7 @@
{
"Name": "Advanced Save Backup",
"Author": "Alpha_Omegasis",
"Version": "1.5.0",
"Version": "1.6.0",
"Description": "Backs up your save files when loading SMAPI and every in game night when saving.",
"UniqueID": "Omegasis.AdvancedSaveBackup",
"EntryDll": "AdvancedSaveBackup.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Auto Speed",
"Author": "Alpha_Omegasis",
"Version": "1.6.0",
"Version": "1.7.0",
"Description": "Got to go fast!",
"UniqueID": "Omegasis.AutoSpeed",
"EntryDll": "AutoSpeed.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Billboard Anywhere",
"Author": "Alpha_Omegasis",
"Version": "1.6.0",
"Version": "1.7.0",
"Description": "Lets you view the billboard from anywhere.",
"UniqueID": "Omegasis.BillboardAnywhere",
"EntryDll": "BillboardAnywhere.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Build Endurance",
"Author": "Alpha_Omegasis",
"Version": "1.6.0",
"Version": "1.7.0",
"Description": "Increase your health as you play.",
"UniqueID": "Omegasis.BuildEndurance",
"EntryDll": "BuildEndurance.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Build Health",
"Author": "Alpha_Omegasis",
"Version": "1.6.0",
"Version": "1.7.0",
"Description": "Increase your health as you play.",
"UniqueID": "Omegasis.BuildHealth",
"EntryDll": "BuildHealth.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Buy Back Collectables",
"Author": "Alpha_Omegasis",
"Version": "1.5.0",
"Version": "1.6.0",
"Description": "Lets you buy back any obtained collectable.",
"UniqueID": "Omegasis.BuyBackCollectables",
"EntryDll": "BuyBackCollectables.dll",

View File

@ -66,6 +66,8 @@ namespace CustomNPCFramework
/// Keeps track of all of the asets/textures added in by the framework. Also manages all of the asset managers that are the ones actually managing the textures.
/// </summary>
public static AssetPool assetPool;
public static IManifest Manifest;
/// <summary>
/// Ran when loading the SMAPI. Used to initialize data.
@ -75,6 +77,7 @@ namespace CustomNPCFramework
{
ModHelper = this.Helper;
ModMonitor = this.Monitor;
Manifest = ModManifest;
StardewModdingAPI.Events.SaveEvents.AfterLoad += SaveEvents_LoadChar;

View File

@ -66,7 +66,7 @@ namespace CustomNPCFramework.Framework.Graphics
public DirectionalTexture(IModHelper helper ,NamePairings info, string path, Direction direction = Direction.down)
{
new Texture2DExtended(helper, path);
new Texture2DExtended(helper, Class1.Manifest, path);
string leftString= Class1.getShortenedDirectory(Path.Combine(path, info.leftString + ".png")).Remove(0, 1);
string rightString = Class1.getShortenedDirectory(Path.Combine(path, info.rightString + ".png")).Remove(0, 1);
@ -74,10 +74,10 @@ namespace CustomNPCFramework.Framework.Graphics
string downString = Class1.getShortenedDirectory(Path.Combine(path, info.downString + ".png")).Remove(0, 1);
this.leftTexture = new Texture2DExtended(helper, leftString);
this.rightTexture = new Texture2DExtended(helper, rightString);
this.upTexture = new Texture2DExtended(helper, upString);
this.downTexture = new Texture2DExtended(helper, downString);
this.leftTexture = new Texture2DExtended(helper, Class1.Manifest, leftString);
this.rightTexture = new Texture2DExtended(helper, Class1.Manifest, rightString);
this.upTexture = new Texture2DExtended(helper, Class1.Manifest, upString);
this.downTexture = new Texture2DExtended(helper, Class1.Manifest, downString);
if (direction == Direction.left) this.currentTexture = leftTexture;
if (direction == Direction.right) this.currentTexture = rightTexture;

View File

@ -1,7 +1,7 @@
{
"Name": "Daily Quest Anywhere",
"Author": "Alpha_Omegasis",
"Version": "1.5.0",
"Version": "1.6.0",
"Description": "Open the daily quest board from anywhere in the game.",
"UniqueID": "Omegasis.DailyQuestAnywhere",
"EntryDll": "DailyQuestAnywhere.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Fall 28 Snow Day",
"Author": "Alpha_Omegasis",
"Version": "1.5.0",
"Version": "1.6.0",
"Description": "Makes it snow on Fall 28, which makes a good explanation for all the snow on the next day.",
"UniqueID": "Omegasis.Fall28SnowDay",
"EntryDll": "Fall28SnowDay.dll",

View File

@ -95,7 +95,7 @@ namespace Omegasis.HappyBirthday
//Handle normal birthday wishes.
if (!File.Exists(Path.Combine(HappyBirthday.ModHelper.DirectoryPath,path)))
{
HappyBirthday.ModMonitor.Log("Creating Villager Birthday Messages", StardewModdingAPI.LogLevel.Alert);
HappyBirthday.ModHelper.Data.WriteJsonFile<Dictionary<string, string>>(path, defaultBirthdayWishes);
this.birthdayWishes = defaultBirthdayWishes;
}
@ -156,7 +156,7 @@ namespace Omegasis.HappyBirthday
}
else
{
tempBirthdayDict = HappyBirthday.ModHelper.Data.ReadJsonFile<Dictionary<string, string>>(tempSpouseBirthdayFile);
tempSpouseBirthdayDict = HappyBirthday.ModHelper.Data.ReadJsonFile<Dictionary<string, string>>(tempSpouseBirthdayFile);
}
//Set translated birthday info.

View File

@ -1,26 +1,27 @@
Happy Birthday Change Log
~~~~~~~~~~~~~~~~
1.8.0 Changelog
Manifest 1.8.0 Changelog
~~~~~~~~~~~~~~~~
General Changes
General Changes
-NPCs now wish you a happy birthday if you have 2+ hearts with them. (Configurable in config file)
-A language can be set for birthday messages in the Config.json file.
-Added support for birthday messages to be in .json files for easier editing.
-Added support for birthday messages to be in multiple supported languages
-English
-Spanish
-German
-Chinese
-Japanese
-Brazillian Portuguese
-Added in spouse specific birthday dialogue messages which can be selected by the players.
-Added in multiple langages for spouse birthday messages.
-English
-Spanish
-German
-Chinese
-Japanese
-Brazilian Portuguese
-Added in spouse specific birthday dialogue messages which can be created by the players.
-Added in multiple languages for spouse birthday messages.
-Added in birthday gifts to be in .json files.
-Added in a new pool of spouse specific gifts that can be set by the player located in SpouseBirthdayGifts.json
-Added in support for loading legacy birthday gift.xnb info from StardewValley/Content/Data/PossibleBirthdayGifts.xnb
-Added in support for loading legacy birthday messages from StardewValley/Content/Data/BirthdayMessages.xnb
-Added in player portraits to be shown on the callendar.
Multiplayer changes:
-Added in multiplayer portraits to be shown on the callendar.
-Added in multiplayer farmhand portraits to be shown on the callendar.
-Added in a hud message that displays when another player has a birthday.

View File

@ -117,6 +117,9 @@ namespace Omegasis.HappyBirthday
if (File.Exists(Path.Combine(Game1.content.RootDirectory, "Data", "PossibleBirthdayGifts.xnb"))){
HappyBirthday.ModMonitor.Log("Legacy loading detected. Attempting to load from StardewValley/Content/Data/PossibleBirthdayGifts.xnb");
this.defaultBirthdayGifts = Game1.content.Load<Dictionary<string, string>>(Path.Combine("Data", "PossibleBirthdayGifts"));
string villagerGifts = Path.Combine("Content", "Gifts", "BirthdayGifts.json");
HappyBirthday.ModHelper.Data.WriteJsonFile<Dictionary<string, string>>(villagerGifts, this.defaultBirthdayGifts);
}
else
{

View File

@ -127,6 +127,7 @@ namespace Omegasis.HappyBirthday
messages = new BirthdayMessages();
giftManager = new GiftManager();
messages.createBirthdayGreetings();
isDailyQuestBoard = false;
ModHelper.Events.Multiplayer.ModMessageReceived += Multiplayer_ModMessageReceived;
@ -368,7 +369,7 @@ namespace Omegasis.HappyBirthday
this.MigrateLegacyData();
this.PlayerData = this.Helper.Data.ReadJsonFile<PlayerData>(this.DataFilePath) ?? new PlayerData();
messages.createBirthdayGreetings();
;
if (PlayerBirthdayData != null)
{
@ -495,6 +496,7 @@ namespace Omegasis.HappyBirthday
if (Game1.currentSpeaker != null)
{
string name = Game1.currentSpeaker.Name;
if (Game1.player.getFriendshipHeartLevelForNPC(name) <= Config.minNeutralFriendshipGiftLevel) return;
if (this.IsBirthday() && this.VillagerQueue.Contains(name))
{
try

View File

@ -1,16 +1,11 @@
{
"Name": "Happy Birthday",
"Author": "Alpha_Omegasis",
"Version": {
"MajorVersion": 1,
"MinorVersion": 8,
"PatchVersion": 0,
"Build": null
},
"Version": "1.8.0",
"MinimumApiVersion": "1.15",
"Description": "Adds the farmer's birthday to the game.",
"UniqueID": "Omegasis.HappyBirthday",
"EntryDll": "HappyBirthday.dll",
"MinimumApiVersion": "2.0",
"MinimumApiVersion": "2.9",
"UpdateKeys": [ "Nexus:520" ]
}

View File

@ -1,7 +1,7 @@
{
"Name": "More Rain",
"Author": "Alpha_Omegasis",
"Version": "1.6.1",
"Version": "1.7.0",
"Description": "Change how much it rains in the game.",
"UniqueID": "Omegasis.MoreRain",
"EntryDll": "MoreRain.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Museum Rearranger",
"Author": "Alpha_Omegasis",
"Version": "1.6.0",
"Version": "1.7.0",
"Description": "Lets you rearrange the museum without needing to donate something.",
"UniqueID": "Omegasis.MuseumRearranger",
"EntryDll": "MuseumRearranger.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Night Owl",
"Author": "Alpha_Omegasis",
"Version": "1.7.1",
"Version": "1.8.0",
"Description": "Lets you stay up all night.",
"UniqueID": "Omegasis.NightOwl",
"EntryDll": "NightOwl.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "No More Pets",
"Author": "Alpha_Omegasis",
"Version": "1.5.0",
"Version": "1.6.0",
"Description": "Removes all pets from the game.",
"UniqueID": "Omegasis.NoMorePets",
"EntryDll": "NoMorePets.dll",

View File

@ -0,0 +1,80 @@
using Microsoft.Xna.Framework;
using Netcode;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Revitalize.Framework.Graphics.Animations
{
/// <summary>
/// A custom class used to deal with custom animations/
/// </summary>
public class Animation
{
/// <summary>
/// The source rectangle on the texture to display.
/// </summary>
public Rectangle sourceRectangle;
/// <summary>
/// The duration of the frame in length.
/// </summary>
public int frameDuration;
/// <summary>
/// The duration until the next frame.
/// </summary>
public int frameCountUntilNextAnimation;
[XmlIgnore]
public NetFields NetFields { get; } = new NetFields();
public Animation()
{
this.sourceRectangle = new Rectangle(0,0,16,16);
this.frameCountUntilNextAnimation = -1;
this.frameDuration = -1;
}
/// <summary>
/// Constructor that causes the animation frame count to be set to -1; This forces it to never change.
/// </summary>
/// <param name="SourceRectangle">The draw source for this animation.</param>
public Animation(Rectangle SourceRectangle)
{
sourceRectangle = SourceRectangle;
this.frameCountUntilNextAnimation = -1;
frameDuration = -1;
}
/// <summary>
/// Constructor.
/// </summary>
/// <param name="SourceRectangle">The draw source for this animation.</param>
/// <param name="existForXFrames">How many on screen frames this animation stays for. Every draw frame decrements an active animation by 1 frame. Set this to -1 to have it be on the screen infinitely.</param>
public Animation(Rectangle SourceRectangle,int existForXFrames)
{
sourceRectangle = SourceRectangle;
frameDuration = existForXFrames;
}
/// <summary>
/// Decrements the amount of frames this animation is on the screen for by 1.
/// </summary>
public void tickAnimationFrame()
{
frameCountUntilNextAnimation--;
}
/// <summary>
/// This sets the animation frame count to be the max duration. I.E restart the timer.
/// </summary>
public void startAnimation()
{
frameCountUntilNextAnimation = frameDuration;
}
}
}

View File

@ -0,0 +1,290 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using StardewModdingAPI;
using StardewValley;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Revitalize.Framework.Graphics.Animations
{
/// <summary>
/// Used to play animations for Stardust.CoreObject type objects and all objects that extend from it. In draw code of object make sure to use this info instead.
/// </summary>
public class AnimationManager
{
public Dictionary<string, List<Animation>> animations = new SerializableDictionary<string, List<Animation>>();
public string currentAnimationName;
public int currentAnimationListIndex;
public List<Animation> currentAnimationList = new List<Animation>();
private Texture2DExtended objectTexture; ///Might not be necessary if I use the CoreObject texture sheet.
public Animation defaultDrawFrame;
public Animation currentAnimation;
public bool enabled;
public string animationDataString;
public bool IsNull
{
get
{
if (this.defaultDrawFrame == null && this.objectTexture == null) return true;
else return false;
}
}
/// <summary>
/// Empty constructor.
/// </summary>
public AnimationManager()
{
}
/// <summary>
/// Constructor for Animation Manager class.
/// </summary>
/// <param name="ObjectTexture">The texture that will be used for the animation. This is typically the same as the object this class is attached to.</param>
/// <param name="DefaultFrame">This is used if no animations will be available to the animation manager.</param>
/// <param name="EnabledByDefault">Whether or not animations play by default. Default value is true.</param>
public AnimationManager (Texture2DExtended ObjectTexture,Animation DefaultFrame, bool EnabledByDefault=true)
{
currentAnimationListIndex = 0;
this.objectTexture = ObjectTexture;
this.defaultDrawFrame = DefaultFrame;
this.enabled = EnabledByDefault;
currentAnimation = this.defaultDrawFrame;
this.currentAnimationName = "";
this.animationDataString = "";
}
public AnimationManager(Texture2DExtended ObjectTexture,Animation DefaultFrame ,string animationString, string startingAnimationKey, int startingAnimationFrame=0,bool EnabledByDefault=true)
{
currentAnimationListIndex = 0;
this.objectTexture = ObjectTexture;
this.defaultDrawFrame = DefaultFrame;
this.enabled = EnabledByDefault;
this.animationDataString = animationString;
this.animations = parseAnimationsFromXNB(animationString);
bool f = animations.TryGetValue(startingAnimationKey, out currentAnimationList);
if (f == true)
{
setAnimation(startingAnimationKey, startingAnimationFrame);
}
else
{
currentAnimation = this.defaultDrawFrame;
this.currentAnimationName = "";
}
}
public AnimationManager(Texture2DExtended ObjectTexture, Animation DefaultFrame, Dictionary<string,List<Animations.Animation>> animationString, string startingAnimationKey, int startingAnimationFrame = 0, bool EnabledByDefault = true)
{
currentAnimationListIndex = 0;
this.objectTexture = ObjectTexture;
this.defaultDrawFrame = DefaultFrame;
this.enabled = EnabledByDefault;
this.animations = animationString;
bool f = animations.TryGetValue(startingAnimationKey, out currentAnimationList);
if (f == true)
{
setAnimation(startingAnimationKey, startingAnimationFrame);
}
else
{
currentAnimation = this.defaultDrawFrame;
this.currentAnimationName = "";
}
}
/// <summary>
/// Update the animation frame once after drawing the object.
/// </summary>
public void tickAnimation()
{
try
{
if (this.currentAnimation.frameDuration == -1 || this.enabled == false || this.currentAnimation == this.defaultDrawFrame) return; //This is if this is a default animation or the animation stops here.
if (this.currentAnimation.frameCountUntilNextAnimation == 0) getNextAnimation();
this.currentAnimation.tickAnimationFrame();
}
catch(Exception err)
{
ModCore.ModMonitor.Log("An internal error occured when trying to tick the animation.");
ModCore.ModMonitor.Log(err.ToString(), StardewModdingAPI.LogLevel.Error);
}
}
/// <summary>
/// Get the next animation in the list of animations.
/// </summary>
public void getNextAnimation()
{
currentAnimationListIndex++;
if(currentAnimationListIndex==currentAnimationList.Count) //If the animation frame I'm tryting to get is 1 outside my list length, reset the list.
{
currentAnimationListIndex = 0;
}
//Get the next animation from the list and reset it's counter to the starting frame value.
this.currentAnimation = currentAnimationList[currentAnimationListIndex];
this.currentAnimation.startAnimation();
}
/// <summary>
/// Gets the animation from the dictionary of all animations available.
/// </summary>
/// <param name="AnimationName"></param>
/// <param name="StartingFrame"></param>
/// <returns></returns>
public bool setAnimation(string AnimationName, int StartingFrame=0)
{
List<Animation> dummyList = new List<Animation>();
bool f = animations.TryGetValue(AnimationName, out dummyList);
if (f == true)
{
if (dummyList.Count != 0 || StartingFrame>=dummyList.Count)
{
currentAnimationList = dummyList;
currentAnimation = currentAnimationList[StartingFrame];
currentAnimationName = AnimationName;
return true;
}
else
{
if(dummyList.Count==0) ModCore.ModMonitor.Log("Error: Current animation " + AnimationName+ " has no animation frames associated with it.");
if (dummyList.Count > dummyList.Count) ModCore.ModMonitor.Log("Error: Animation frame "+ StartingFrame+ " is outside the range of provided animations. Which has a maximum count of "+ dummyList.Count);
return false;
}
}
else
{
ModCore.ModMonitor.Log("Error setting animation: " + AnimationName + " animation does not exist in list of available animations. Did you make sure to add it in?");
return false;
}
}
/// <summary>
/// Sets the animation manager to an on state, meaning that this animation will update on the draw frame.
/// </summary>
public void enableAnimation()
{
this.enabled = true;
}
/// <summary>
/// Sets the animation manager to an off state, meaning that this animation will no longer update on the draw frame.
/// </summary>
public void disableAnimation()
{
this.enabled = false;
}
public static Dictionary<string, List<Animation>> parseAnimationsFromXNB(string s)
{
string[] array = s.Split('*');
Dictionary<string,List<Animation>> parsedDic = new Dictionary<string, List<Animation>>();
foreach(var v in array)
{
// Log.AsyncC(v);
string[] AnimationArray = v.Split(' ');
if (parsedDic.ContainsKey(AnimationArray[0]))
{
List<Animation> aniList = new List<Animation>();
aniList = parseAnimationFromString(v);
foreach(var ani in aniList) {
parsedDic[AnimationArray[0]].Add(ani);
}
}
else
{
parsedDic.Add(AnimationArray[0], new List<Animation>());
List<Animation> aniList = new List<Animation>();
aniList = parseAnimationFromString(v);
foreach (var ani in aniList)
{
parsedDic[AnimationArray[0]].Add(ani);
}
}
}
return parsedDic;
}
public static List<Animation> parseAnimationFromString(string s)
{
List<Animation> ok = new List<Animation>();
string[] array2 = s.Split('>');
foreach(var q in array2) {
string[] array = q.Split(' ');
try
{
Animation ani = new Animation(new Rectangle(Convert.ToInt32(array[1]), Convert.ToInt32(array[2]), Convert.ToInt32(array[3]), Convert.ToInt32(array[4])), Convert.ToInt32(array[5]));
// ModCore.ModMonitor.Log(ani.sourceRectangle.ToString());
ok.Add(ani);
}
catch(Exception err)
{
err.ToString();
continue;
}
}
return ok;
}
/// <summary>
/// Used to handle general drawing functionality using the animation manager.
/// </summary>
/// <param name="spriteBatch">We need a spritebatch to draw.</param>
/// <param name="texture">The texture to draw.</param>
/// <param name="Position">The onscreen position to draw to.</param>
/// <param name="sourceRectangle">The source rectangle on the texture to draw.</param>
/// <param name="drawColor">The color to draw the thing passed in.</param>
/// <param name="rotation">The rotation of the animation texture being drawn.</param>
/// <param name="origin">The origin of the texture.</param>
/// <param name="scale">The scale of the texture.</param>
/// <param name="spriteEffects">Effects that get applied to the sprite.</param>
/// <param name="LayerDepth">The dept at which to draw the texture.</param>
public void draw(SpriteBatch spriteBatch,Texture2D texture, Vector2 Position, Rectangle? sourceRectangle,Color drawColor, float rotation, Vector2 origin, float scale,SpriteEffects spriteEffects, float LayerDepth)
{
//Log.AsyncC("Animation Manager is working!");
spriteBatch.Draw(texture, Position, sourceRectangle, drawColor, rotation, origin, scale, spriteEffects, LayerDepth);
try
{
this.tickAnimation();
// Log.AsyncC("Tick animation");
}
catch (Exception err)
{
ModCore.ModMonitor.Log(err.ToString());
}
}
public Texture2DExtended getExtendedTexture()
{
return this.objectTexture;
}
public void setExtendedTexture(Texture2DExtended texture)
{
this.objectTexture = texture;
}
public void setEnabled(bool enabled)
{
this.enabled = enabled;
}
public Texture2D getTexture()
{
return this.objectTexture.getTexture();
}
}
}

View File

@ -1,6 +1,7 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using PyTK.CustomElementHandler;
using Revitalize.Framework.Graphics.Animations;
using System;
using System.Collections.Generic;
using System.Linq;
@ -23,6 +24,9 @@ namespace Revitalize.Framework.Objects
public bool canBeSetOutdoors;
public bool isLamp;
public AnimationManager animationManager;
public Vector2 drawPosition;
public BasicItemInformation() : base()
{
name = "";
@ -34,9 +38,12 @@ namespace Revitalize.Framework.Objects
this.edibility = -300;
this.canBeSetIndoors = false;
this.canBeSetOutdoors = false;
this.animationManager = null;
this.drawPosition = Vector2.Zero;
}
public BasicItemInformation(string name, string description, string categoryName, Color categoryColor,int edibility,int fragility,bool isLamp,int price, Vector2 TileLocation,bool canBeSetOutdoors,bool canBeSetIndoors,string id, string data, Texture2D texture, Color color,int tileIndex, bool bigCraftable, Type type, CraftingData craftingData ):base(id,data,texture,color,tileIndex,bigCraftable,type,craftingData)
public BasicItemInformation(string name, string description, string categoryName, Color categoryColor,int edibility,int fragility,bool isLamp,int price, Vector2 TileLocation,bool canBeSetOutdoors,bool canBeSetIndoors,string id, string data, Texture2D texture, Color color,int tileIndex, bool bigCraftable, Type type, CraftingData craftingData, AnimationManager animationManager):base(id,data,texture,color,tileIndex,bigCraftable,type,craftingData)
{
this.name = name;
this.description = description;
@ -51,6 +58,19 @@ namespace Revitalize.Framework.Objects
this.fragility = fragility;
this.isLamp = isLamp;
this.animationManager = animationManager;
if (this.animationManager.IsNull)
{
this.animationManager = new AnimationManager(new Graphics.Texture2DExtended(), new Animation(new Rectangle(0, 0, 16, 16)), false);
this.animationManager.getExtendedTexture().texture = this.texture;
}
else
{
this.texture = this.animationManager.getTexture();
}
this.drawPosition = Vector2.Zero;
recreateDataString();
}
@ -59,5 +79,7 @@ namespace Revitalize.Framework.Objects
this.data=this.name+"/"+this.price+"/"+this.edibility+"/"+"Crafting -9"+"/"+this.description+"/"+this.canBeSetOutdoors+"/"+this.canBeSetIndoors+"/"+this.fragility+"/"+this.isLamp+"/"+this.name;
}
}
}

View File

@ -3,6 +3,7 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using PyTK.CustomElementHandler;
using Revitalize.Framework.Graphics;
using Revitalize.Framework.Graphics.Animations;
using StardewValley;
using StardewValley.Objects;
using System;
@ -21,13 +22,23 @@ namespace Revitalize.Framework.Objects
{
public string id;
public Texture2DExtended texture;
public BasicItemInformation info;
public AnimationManager animationManager
{
get
{
return info.animationManager;
}
}
public Texture2D displayTexture
{
get
{
return texture.texture;
return animationManager.getTexture();
}
}
@ -60,6 +71,10 @@ namespace Revitalize.Framework.Objects
this.setIndoors.Value = true;
this.isLamp.Value = false;
this.fragility.Value = 0;
this.updateDrawPosition();
}
public override bool checkForAction(Farmer who, bool justCheckingForActivity = false)
@ -141,21 +156,88 @@ namespace Revitalize.Framework.Objects
return Game1.parseText(text, smallFont, width);
}
public override bool placementAction(GameLocation location, int x, int y, Farmer who = null)
{
this.updateDrawPosition();
return base.placementAction(location, x, y, who);
}
public virtual void updateDrawPosition()
{
this.info.drawPosition = new Vector2((float)this.boundingBox.X, (float)(this.boundingBox.Y - (this.animationManager.currentAnimation.sourceRectangle.Height * Game1.pixelZoom - this.boundingBox.Height)));
}
public override Item getOne()
{
return new CustomObject((BasicItemInformation)this.data);
}
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1)
public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1f)
{
base.draw(spriteBatch, x, y, alpha);
if (x == -1)
{
spriteBatch.Draw(this.info.animationManager.getTexture(), Game1.GlobalToLocal(Game1.viewport, this.info.drawPosition), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), Color.White * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
}
else
{
//The actual planter box being drawn.
if (animationManager == null)
{
if (this.animationManager.getExtendedTexture() == null)
{
ModCore.ModMonitor.Log("Tex Extended is null???");
}
spriteBatch.Draw(this.displayTexture, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(x * Game1.tileSize), y * Game1.tileSize)), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), Color.White * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
// Log.AsyncG("ANIMATION IS NULL?!?!?!?!");
}
else
{
//Log.AsyncC("Animation Manager is working!");
this.animationManager.draw(spriteBatch, this.displayTexture, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(x * Game1.tileSize), y * Game1.tileSize)), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), Color.White * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
try
{
this.animationManager.tickAnimation();
// Log.AsyncC("Tick animation");
}
catch (Exception err)
{
ModCore.ModMonitor.Log(err.ToString());
}
}
// spriteBatch.Draw(Game1.mouseCursors, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)((double)tileLocation.X * (double)Game1.tileSize + (((double)tileLocation.X * 11.0 + (double)tileLocation.Y * 7.0) % 10.0 - 5.0)) + (float)(Game1.tileSize / 2), (float)((double)tileLocation.Y * (double)Game1.tileSize + (((double)tileLocation.Y * 11.0 + (double)tileLocation.X * 7.0) % 10.0 - 5.0)) + (float)(Game1.tileSize / 2))), new Rectangle?(new Rectangle((int)((double)tileLocation.X * 51.0 + (double)tileLocation.Y * 77.0) % 3 * 16, 128 + this.whichForageCrop * 16, 16, 16)), Color.White, 0.0f, new Vector2(8f, 8f), (float)Game1.pixelZoom, SpriteEffects.None, (float)(((double)tileLocation.Y * (double)Game1.tileSize + (double)(Game1.tileSize / 2) + (((double)tileLocation.Y * 11.0 + (double)tileLocation.X * 7.0) % 10.0 - 5.0)) / 10000.0));
}
}
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1f)
{
base.draw(spriteBatch, xNonTile, yNonTile, layerDepth, alpha);
if (Game1.eventUp && Game1.CurrentEvent.isTileWalkedOn(xNonTile / 64, yNonTile / 64))
return;
if ((int)(this.ParentSheetIndex) != 590 && (int)(this.Fragility) != 2)
spriteBatch.Draw(Game1.shadowTexture, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(xNonTile + 32), (float)(yNonTile + 51 + 4))), new Microsoft.Xna.Framework.Rectangle?(Game1.shadowTexture.Bounds), Color.White * alpha, 0.0f, new Vector2((float)Game1.shadowTexture.Bounds.Center.X, (float)Game1.shadowTexture.Bounds.Center.Y), 4f, SpriteEffects.None, layerDepth - 1E-06f);
SpriteBatch spriteBatch1 = spriteBatch;
Texture2D objectSpriteSheet = Game1.objectSpriteSheet;
Vector2 local = Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(xNonTile + 32 + (this.shakeTimer > 0 ? Game1.random.Next(-1, 2) : 0)), (float)(yNonTile + 32 + (this.shakeTimer > 0 ? Game1.random.Next(-1, 2) : 0))));
Microsoft.Xna.Framework.Rectangle? sourceRectangle = new Microsoft.Xna.Framework.Rectangle?(GameLocation.getSourceRectForObject(this.ParentSheetIndex));
Color color = Color.White * alpha;
double num1 = 0.0;
Vector2 origin = new Vector2(8f, 8f);
Vector2 scale = this.scale;
double num2 = (double)this.scale.Y > 1.0 ? (double)this.getScale().Y : 4.0;
int num3 = (bool)(this.flipped) ? 1 : 0;
double num4 = (double)layerDepth;
spriteBatch1.Draw(this.displayTexture, local, sourceRectangle, color, (float)num1, origin, (float)num2, (SpriteEffects)num3, (float)num4);
}
public override void drawAsProp(SpriteBatch b)
{
base.drawAsProp(b);
@ -166,9 +248,16 @@ namespace Revitalize.Framework.Objects
base.drawAttachments(b, x, y);
}
public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber, Color color, bool drawShadow)
public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber, Color c, bool drawShadow)
{
base.drawInMenu(spriteBatch, location, scaleSize, transparency, layerDepth, drawStackNumber, color, drawShadow);
if (drawStackNumber && this.maximumStackSize() > 1 && ((double)scaleSize > 0.3 && this.Stack != int.MaxValue) && this.Stack > 1)
Utility.drawTinyDigits(this.Stack, spriteBatch, location + new Vector2((float)(Game1.tileSize - Utility.getWidthOfTinyDigitString(this.Stack, 3f * scaleSize)) + 3f * scaleSize, (float)((double)Game1.tileSize - 18.0 * (double)scaleSize + 2.0)), 3f * scaleSize, 1f, Color.White);
if (drawStackNumber && this.Quality > 0)
{
float num = this.Quality < 4 ? 0.0f : (float)((Math.Cos((double)Game1.currentGameTime.TotalGameTime.Milliseconds * Math.PI / 512.0) + 1.0) * 0.0500000007450581);
spriteBatch.Draw(Game1.mouseCursors, location + new Vector2(12f, (float)(Game1.tileSize - 12) + num), new Microsoft.Xna.Framework.Rectangle?(this.Quality < 4 ? new Microsoft.Xna.Framework.Rectangle(338 + (this.Quality - 1) * 8, 400, 8, 8) : new Microsoft.Xna.Framework.Rectangle(346, 392, 8, 8)), Color.White * transparency, 0.0f, new Vector2(4f, 4f), (float)(3.0 * (double)scaleSize * (1.0 + (double)num)), SpriteEffects.None, layerDepth);
}
spriteBatch.Draw(this.displayTexture, location + new Vector2((float)(Game1.tileSize), (float)(Game1.tileSize)), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), Color.White * transparency, 0f, new Vector2((float)(this.animationManager.currentAnimation.sourceRectangle.Width / 2), (float)(this.animationManager.currentAnimation.sourceRectangle.Height)), 1f * 1 * scaleSize * .5f, SpriteEffects.None, layerDepth);
}
public override void drawPlacementBounds(SpriteBatch spriteBatch, GameLocation location)
@ -176,9 +265,29 @@ namespace Revitalize.Framework.Objects
base.drawPlacementBounds(spriteBatch, location);
}
public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f)
public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, StardewValley.Farmer f)
{
base.drawWhenHeld(spriteBatch, objectPosition, f);
if (f.ActiveObject.bigCraftable.Value)
{
spriteBatch.Draw(this.displayTexture, objectPosition, this.animationManager.currentAnimation.sourceRectangle, Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom, SpriteEffects.None, Math.Max(0f, (float)(f.getStandingY() + 2) / 10000f));
return;
}
spriteBatch.Draw(this.displayTexture, objectPosition, this.animationManager.currentAnimation.sourceRectangle, Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom, SpriteEffects.None, Math.Max(0f, (float)(f.getStandingY() + 2) / 10000f));
if (f.ActiveObject != null && f.ActiveObject.Name.Contains("="))
{
spriteBatch.Draw(this.displayTexture, objectPosition + new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize / 2)), this.animationManager.currentAnimation.sourceRectangle, Color.White, 0f, new Vector2((float)(Game1.tileSize / 2), (float)(Game1.tileSize / 2)), (float)Game1.pixelZoom + Math.Abs(Game1.starCropShimmerPause) / 8f, SpriteEffects.None, Math.Max(0f, (float)(f.getStandingY() + 2) / 10000f));
if (Math.Abs(Game1.starCropShimmerPause) <= 0.05f && Game1.random.NextDouble() < 0.97)
{
return;
}
Game1.starCropShimmerPause += 0.04f;
if (Game1.starCropShimmerPause >= 0.8f)
{
Game1.starCropShimmerPause = -0.8f;
}
}
//base.drawWhenHeld(spriteBatch, objectPosition, f);
}

View File

@ -30,7 +30,7 @@ namespace Revitalize
private void GameLoop_SaveLoaded(object sender, StardewModdingAPI.Events.SaveLoadedEventArgs e)
{
CustomObject obj = new CustomObject(new BasicItemInformation("CoreObjectTest","YAY FUN!","Omegasis.Revitalize.CoreObject",Color.Violet,-300,1,false,100,Vector2.Zero,true,true,"Omegasis.bleh", "2048/0/-300/Crafting -9/Play '2048 by Platonymous' at home!/true/true/0/2048", Game1.objectSpriteSheet,Color.White,0,true,typeof(CustomObject),null));
CustomObject obj = new CustomObject(new BasicItemInformation("CoreObjectTest","YAY FUN!","Omegasis.Revitalize.CoreObject",Color.Violet,-300,1,false,100,Vector2.Zero,true,true,"Omegasis.bleh", "2048/0/-300/Crafting -9/Play '2048 by Platonymous' at home!/true/true/0/2048", Game1.objectSpriteSheet,Color.White,0,true,typeof(CustomObject),null,new Framework.Graphics.Animations.AnimationManager()));
new InventoryItem(obj, 100,1).addToNPCShop("Gus");

View File

@ -45,6 +45,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Framework\Graphics\Animations\Animation.cs" />
<Compile Include="Framework\Graphics\Animations\AnimationManager.cs" />
<Compile Include="Framework\Graphics\Texture2DExtended.cs" />
<Compile Include="Framework\Objects\BasicItemInformation.cs" />
<Compile Include="Framework\Objects\CustomObject.cs" />

View File

@ -1,7 +1,7 @@
{
"Name": "Save Anywhere",
"Author": "Alpha_Omegasis",
"Version": "3.0.0",
"Version": "2.10.0",
"Description": "Lets you save almost anywhere.",
"UniqueID": "Omegasis.SaveAnywhere",
"EntryDll": "SaveAnywhere.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Simple Sound Manager",
"Author": "Alpha_Omegasis",
"Version": "2.0.1",
"Version": "2.1.0",
"Description": "A simple framework to play sounds from wave banks and wav files.",
"UniqueID": "Omegasis.SimpleSoundManager",
"EntryDll": "SimpleSoundManager.dll",

View File

@ -13,8 +13,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildHealth", "BuildHealth\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuyBackCollectables", "BuyBackCollectables\BuyBackCollectables.csproj", "{A19025C4-E194-4CAD-B156-4AC00BDD2AA3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomShopsRedux", "CustomShopsRedux\CustomShopsRedux.csproj", "{29F7DE68-4C76-471E-86FB-873794802ADC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DailyQuestAnywhere", "DailyQuestAnywhere\DailyQuestAnywhere.csproj", "{AC4B84F5-31E4-4A55-B13F-A5189C552343}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fall28SnowDay", "Fall28SnowDay\Fall28SnowDay.csproj", "{1DBB583D-4A4F-4A46-8CC5-42017C93D292}"
@ -68,8 +66,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FarmersMarketStall", "Farme
{BB737337-2D82-4245-AA46-F3B82FC6F228} = {BB737337-2D82-4245-AA46-F3B82FC6F228}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DebugSandBoxAndReferences", "DebugSandBoxAndReferences\DebugSandBoxAndReferences.csproj", "{B196EB60-5042-46B9-BEAA-3020E539CB9F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdditionalCropsFramework", "AdditionalCropsFramework\AdditionalCropsFramework.csproj", "{C5F88D48-EA20-40CD-91E2-C8725DC11795}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvancedSaveBackup", "AdvancedSaveBackup\AdvancedSaveBackup.csproj", "{12984468-2B79-4B3B-B045-EE917301DEE0}"
@ -79,8 +75,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocalization", "Vocalizatio
{7B1E9A54-ED9E-47AA-BBAA-98A6E7CB527A} = {7B1E9A54-ED9E-47AA-BBAA-98A6E7CB527A}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AUnifiedSaveCore", "UnifiedSaveCore\AUnifiedSaveCore.csproj", "{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Revitalize", "Revitalize\Revitalize.csproj", "{44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}"
EndProject
Global
@ -153,18 +147,6 @@ Global
{A19025C4-E194-4CAD-B156-4AC00BDD2AA3}.x86|Any CPU.Build.0 = x86|Any CPU
{A19025C4-E194-4CAD-B156-4AC00BDD2AA3}.x86|x86.ActiveCfg = x86|x86
{A19025C4-E194-4CAD-B156-4AC00BDD2AA3}.x86|x86.Build.0 = x86|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.Debug|x86.ActiveCfg = Debug|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.Debug|x86.Build.0 = Debug|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.Release|Any CPU.Build.0 = Release|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.Release|x86.ActiveCfg = Release|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.Release|x86.Build.0 = Release|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.x86|Any CPU.ActiveCfg = x86|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.x86|Any CPU.Build.0 = x86|Any CPU
{29F7DE68-4C76-471E-86FB-873794802ADC}.x86|x86.ActiveCfg = x86|x86
{29F7DE68-4C76-471E-86FB-873794802ADC}.x86|x86.Build.0 = x86|x86
{AC4B84F5-31E4-4A55-B13F-A5189C552343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC4B84F5-31E4-4A55-B13F-A5189C552343}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC4B84F5-31E4-4A55-B13F-A5189C552343}.Debug|x86.ActiveCfg = Debug|x86
@ -357,18 +339,6 @@ Global
{0E37BE57-6B3C-4C79-A134-D16283D5306D}.x86|Any CPU.Build.0 = x86|Any CPU
{0E37BE57-6B3C-4C79-A134-D16283D5306D}.x86|x86.ActiveCfg = x86|x86
{0E37BE57-6B3C-4C79-A134-D16283D5306D}.x86|x86.Build.0 = x86|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Debug|x86.ActiveCfg = Debug|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Debug|x86.Build.0 = Debug|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Release|Any CPU.Build.0 = Release|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Release|x86.ActiveCfg = Release|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.Release|x86.Build.0 = Release|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.x86|Any CPU.ActiveCfg = x86|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.x86|Any CPU.Build.0 = x86|Any CPU
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.x86|x86.ActiveCfg = x86|x86
{B196EB60-5042-46B9-BEAA-3020E539CB9F}.x86|x86.Build.0 = x86|x86
{C5F88D48-EA20-40CD-91E2-C8725DC11795}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5F88D48-EA20-40CD-91E2-C8725DC11795}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5F88D48-EA20-40CD-91E2-C8725DC11795}.Debug|x86.ActiveCfg = Debug|x86
@ -405,18 +375,6 @@ Global
{1651701C-DB36-43C7-B66D-2700171DD9A9}.x86|Any CPU.Build.0 = Release|Any CPU
{1651701C-DB36-43C7-B66D-2700171DD9A9}.x86|x86.ActiveCfg = Release|Any CPU
{1651701C-DB36-43C7-B66D-2700171DD9A9}.x86|x86.Build.0 = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Debug|x86.ActiveCfg = Debug|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Debug|x86.Build.0 = Debug|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Release|Any CPU.Build.0 = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Release|x86.ActiveCfg = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.Release|x86.Build.0 = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.x86|Any CPU.ActiveCfg = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.x86|Any CPU.Build.0 = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.x86|x86.ActiveCfg = Release|Any CPU
{ACAF0BAE-6495-4F1B-8B1F-E34BF7CCF51A}.x86|x86.Build.0 = Release|Any CPU
{44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.Debug|x86.ActiveCfg = Debug|Any CPU

View File

@ -1,7 +1,7 @@
{
"Name": "Stardew Symphony Remastered",
"Author": "Alpha_Omegasis",
"Version": "2.1.7",
"Version": "2.2.0",
"Description": "Adding more music to the game one beep at a time. Now with streaming!",
"UniqueID": "Omegasis.StardewSymphonyRemastered",
"EntryDll": "StardewSymphonyRemastered.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "StardustCore",
"Author": "Alpha_Omegasis",
"Version": "2.0.5",
"Version": "2.1.0",
"Description": "A core mod that allows for other mods of mine to be run.",
"UniqueID": "Omegasis.StardustCore",
"EntryDll": "StardustCore.dll",

View File

@ -1,7 +1,7 @@
{
"Name": "Time Freeze",
"Author": "Alpha_Omegasis",
"Version": "1.5.1",
"Version": "1.6.0",
"Description": "Emulates old Harvest Moon-style games where time is frozen inside.",
"UniqueID": "Omegasis.TimeFreeze",
"EntryDll": "TimeFreeze.dll",