From 3ce3f57220740868162e12a8d629ddf0543130d3 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 29 Nov 2019 14:22:20 -0800 Subject: [PATCH 01/52] Fixed calendar spelling, updated more rain, retired some mods, and updated more mods to be 1.4 compatible. Starded touching up StardewSymphony. --- .../BillboardAnywhere/Assets/Billboard.png | Bin 0 -> 916 bytes .../BillboardAnywhere/Assets/Quest.png | Bin 0 -> 3394 bytes .../BillboardAnywhere/BillboardAnywhere.cs | 246 +++++++++++++++++- .../BillboardAnywhere.csproj | 8 + .../BillboardAnywhere/Framework/ModConfig.cs | 18 +- GeneralMods/BillboardAnywhere/manifest.json | 4 +- GeneralMods/BuildEndurance/BuildEndurance.cs | 2 +- GeneralMods/BuildEndurance/manifest.json | 4 +- GeneralMods/BuildHealth/BuildHealth.cs | 2 +- GeneralMods/BuildHealth/manifest.json | 4 +- .../Framework/BuyBackMenu.cs | 18 +- GeneralMods/BuyBackCollectables/manifest.json | 4 +- GeneralMods/Fall28SnowDay/manifest.json | 2 +- GeneralMods/MoreRain/Framework/ModConfig.cs | 44 ++++ GeneralMods/MoreRain/MoreRain.cs | 144 +++++++--- GeneralMods/MoreRain/manifest.json | 2 +- .../CustomFurnitureFramework/Class1.cs | 0 .../CustomFurnitureFramework.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../CustomFurnitureFramework/packages.config | 0 .../CustomNPCFramework/Class1.cs | 0 .../CustomNPCFramework.csproj | 0 .../Framework/Enums/AnimationType.cs | 0 .../Framework/Enums/Direction.cs | 0 .../Framework/Enums/Genders.cs | 0 .../Framework/Enums/PartType.cs | 0 .../Framework/Enums/Seasons.cs | 0 .../Framework/Graphics/AssetInfo.cs | 0 .../Framework/Graphics/AssetManager.cs | 0 .../Framework/Graphics/AssetPool.cs | 0 .../Framework/Graphics/AssetSheet.cs | 0 .../Framework/Graphics/DirectionalTexture.cs | 0 .../Framework/Graphics/ExtendedAssetInfo.cs | 0 .../Graphics/TextureGroups/TextureGroup.cs | 0 .../ModularNPCS/AnimatedSpriteCollection.cs | 0 .../ModularNPCS/AnimatedSpriteExtended.cs | 0 .../CharacterAnimationBase.cs | 0 .../StandardCharacterAnimation.cs | 0 .../StandardColorCollection.cs | 0 .../ModularRenderers/AnimationKeys.cs | 0 .../ModularRenderers/BasicRenderer.cs | 0 .../Framework/ModularNPCS/Portrait.cs | 0 .../Framework/ModularNPCS/Sprite.cs | 0 .../CustomNPCFramework/Framework/NPCNames.cs | 0 .../Framework/NPCS/ExtendedNPC.cs | 0 .../Framework/NPCS/MerchantNPC.cs | 0 .../Framework/Utilities/NPCTracker.cs | 0 .../Bodies/FemaleBodyBase/FBodyBaseDown.png | Bin .../Bodies/FemaleBodyBase/FBodyBaseLeft.png | Bin .../FemaleBodyBase/FBodyBaseMovingDown.png | Bin .../FemaleBodyBase/FBodyBaseMovingLeft.png | Bin .../FemaleBodyBase/FBodyBaseMovingRight.png | Bin .../FemaleBodyBase/FBodyBaseMovingUp.png | Bin .../Bodies/FemaleBodyBase/FBodyBaseRight.png | Bin .../Bodies/FemaleBodyBase/FBodyBaseUp.png | Bin .../FemaleBodyBase/VanillaFemaleBodyBase.json | 0 .../Bottoms/Female/GreyPants/DownFacing.png | Bin .../Bottoms/Female/GreyPants/GreyPants.json | 0 .../Bottoms/Female/GreyPants/LeftFacing.png | Bin .../Bottoms/Female/GreyPants/RightFacing.png | Bin .../Bottoms/Female/GreyPants/UpFacing.png | Bin .../BrownEyes/BrownVanillaEyes.json | 0 .../Eyes/VanillaEyes/BrownEyes/EyesDown.png | Bin .../Eyes/VanillaEyes/BrownEyes/EyesLeft.png | Bin .../Eyes/VanillaEyes/BrownEyes/EyesRight.png | Bin .../Eyes/VanillaEyes/BrownEyes/EyesUp.png | Bin .../Hair/VanillaPigtails/DownHairStyle.png | Bin .../Hair/VanillaPigtails/LeftHairStyle.png | Bin .../VanillaPigtails/PigtailsHairStyle.json | 0 .../Hair/VanillaPigtails/RightHairStyle.png | Bin .../Hair/VanillaPigtails/UpHairStyle.png | Bin .../ModularNPCGraphics/Hair/notes.txt | 0 .../Female/VanillaPinkShirt/DownFacing.png | Bin .../Female/VanillaPinkShirt/LeftFacing.png | Bin .../Female/VanillaPinkShirt/RightFacing.png | Bin .../Female/VanillaPinkShirt/UpFacing.png | Bin .../VanillaPinkShirt/VanillaPinkShirt.json | 0 .../Shoes/VanillaBrownShoes/DownMoving.png | Bin .../Shoes/VanillaBrownShoes/DownStanding.png | Bin .../Shoes/VanillaBrownShoes/LeftMoving.png | Bin .../Shoes/VanillaBrownShoes/LeftStanding.png | Bin .../Shoes/VanillaBrownShoes/RightMoving.png | Bin .../Shoes/VanillaBrownShoes/RightStanding.png | Bin .../Shoes/VanillaBrownShoes/UpMoving.png | Bin .../Shoes/VanillaBrownShoes/UpStanding.png | Bin .../VanillaBrownShoes/VanillaBrownShoes.json | 0 .../Properties/AssemblyInfo.cs | 0 .../CustomNPCFramework/manifest.json | 0 .../CustomObjectFramework/App.config | 0 .../CustomObjectFramework.csproj | 0 .../CustomObjectFramework/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../DailyQuestAnywhere/DailyQuestAnywhere.cs | 0 .../DailyQuestAnywhere.csproj | 0 .../DailyQuestAnywhere/Framework/ModConfig.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../DailyQuestAnywhere/README.md | 0 .../DailyQuestAnywhere/manifest.json | 0 .../FarmersMarketStall/Class1.cs | 0 .../FarmersMarketStall.csproj | 0 .../MapEvents/ShopInteractionEvent.cs | 0 .../Framework/MarketStall.cs | 0 .../Framework/Menus/MarketStallMenu.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../FarmersMarketStall/manifest.json | 0 .../MapExampleRF1/Class1.cs | 0 .../MapExampleRF1/MapExampleRF1.csproj | 0 .../MapExampleRF1/Properties/AssemblyInfo.cs | 0 .../MapExampleRF1/manifest.json | 0 .../MapExampleRF1/packages.config | 0 .../ModdedUtilitiesNetworking/Class1.cs | 0 .../Framework/Clients/CustomGalaxyClient.cs | 0 .../Framework/Clients/CustomLidgrenClient.cs | 0 .../Framework/CustomMultiplayer.cs | 0 .../Framework/DataInfo.cs | 0 .../Framework/Delegates/DelegateInfo.cs | 0 .../Framework/Enums/MessageTypes.cs | 0 .../Framework/Extentions/GenericExtentions.cs | 0 .../MessagesExtentions.cs | 0 .../Framework/Extentions/XNAExtentions.cs | 0 .../Features/Stardew/MessageFeatures.cs | 0 .../Framework/Messages/OutgoingMessageBase.cs | 0 .../Framework/Network/NetBufferReadStream.cs | 0 .../Framework/Network/NetBufferWriteStream.cs | 0 .../Framework/Servers/CustomGameServer.cs | 0 .../Framework/Servers/CustomLidgrenServer.cs | 0 .../ModdedUtilitiesNetworking.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../ModdedUtilitiesNetworking/manifest.json | 0 .../ModdedUtilitiesNetworking/packages.config | 0 .../MuseumRearranger/Framework/ModConfig.cs | 0 .../Framework/NewMuseumMenu.cs | 0 .../MuseumRearranger/MuseumRearranger.cs | 0 .../MuseumRearranger/MuseumRearranger.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../MuseumRearranger/ReadMe.md | 0 .../MuseumRearranger/manifest.json | 0 .../NoMorePets/NoMorePets.cs | 0 .../NoMorePets/NoMorePets.csproj | 0 .../NoMorePets/Properties/AssemblyInfo.cs | 0 .../{ => OutDatedMods}/NoMorePets/README.md | 0 .../NoMorePets/manifest.json | 0 .../SundropMapEvents/Class1.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../SundropMapEvents/SundropMapEvents.csproj | 0 .../SundropMapEvents/manifest.json | 0 .../SimpleSoundManager/Framework/XACTSound.cs | 2 +- .../Framework/XactMusicPair.cs | 4 +- GeneralMods/SimpleSoundManager/manifest.json | 2 +- GeneralMods/StardewMods.sln | 46 +--- .../StardewSymphonyRemastered/Config.cs | 18 +- .../Framework/Menus/MusicManagerMenuV2.cs | 49 ++-- .../Framework/V2/MusicManagerV2.cs | 14 +- .../Framework/V2/SongSpecificsV2.cs | 12 +- .../StardewSymphony.cs | 7 +- .../StardewSymphonyRemastered.csproj | 8 +- .../assets/Locations/AbandonedJojaMart.png | Bin 0 -> 420 bytes .../assets/Locations/JojaMart.png | Bin 0 -> 330 bytes .../StardewSymphonyRemastered/manifest.json | 2 +- .../IlluminateFramework/Colors.cs | 2 +- GeneralMods/StardustCore/ModConfig.cs | 2 - .../ComponentsV2/Buttons/ItemDisplayButton.cs | 8 +- .../UIUtilities/TextureManager.cs | 27 +- GeneralMods/StardustCore/manifest.json | 6 +- GeneralMods/TimeFreeze/Framework/ModConfig.cs | 13 +- GeneralMods/TimeFreeze/TimeFreeze.cs | 63 +++-- GeneralMods/TimeFreeze/manifest.json | 6 +- 167 files changed, 601 insertions(+), 192 deletions(-) create mode 100644 GeneralMods/BillboardAnywhere/Assets/Billboard.png create mode 100644 GeneralMods/BillboardAnywhere/Assets/Quest.png rename GeneralMods/{ => OutDatedMods}/CustomFurnitureFramework/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomFurnitureFramework/CustomFurnitureFramework.csproj (100%) rename GeneralMods/{ => OutDatedMods}/CustomFurnitureFramework/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomFurnitureFramework/packages.config (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/CustomNPCFramework.csproj (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Enums/AnimationType.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Enums/Direction.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Enums/Genders.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Enums/PartType.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Enums/Seasons.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/AssetInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/AssetManager.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/AssetPool.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/AssetSheet.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/DirectionalTexture.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/ExtendedAssetInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Graphics/TextureGroups/TextureGroup.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteExtended.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/ColorCollections/StandardColorCollection.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/AnimationKeys.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/Portrait.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/NPCNames.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/NPCS/MerchantNPC.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Framework/Utilities/NPCTracker.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseDown.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseLeft.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingDown.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingLeft.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingRight.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingUp.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseRight.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseUp.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/DownFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/GreyPants.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/LeftFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/RightFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/UpFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/BrownVanillaEyes.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesDown.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesLeft.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesRight.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesUp.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/DownHairStyle.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/LeftHairStyle.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/PigtailsHairStyle.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/RightHairStyle.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/UpHairStyle.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Hair/notes.txt (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/DownFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/LeftFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/RightFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/UpFacing.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/VanillaPinkShirt.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownMoving.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownStanding.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftMoving.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftStanding.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightMoving.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightStanding.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpMoving.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpStanding.png (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/VanillaBrownShoes.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomNPCFramework/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/CustomObjectFramework/App.config (100%) rename GeneralMods/{ => OutDatedMods}/CustomObjectFramework/CustomObjectFramework.csproj (100%) rename GeneralMods/{ => OutDatedMods}/CustomObjectFramework/Program.cs (100%) rename GeneralMods/{ => OutDatedMods}/CustomObjectFramework/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/DailyQuestAnywhere.cs (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/DailyQuestAnywhere.csproj (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/Framework/ModConfig.cs (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/README.md (100%) rename GeneralMods/{ => OutDatedMods}/DailyQuestAnywhere/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/FarmersMarketStall.csproj (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/Framework/MapEvents/ShopInteractionEvent.cs (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/Framework/MarketStall.cs (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/Framework/Menus/MarketStallMenu.cs (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/FarmersMarketStall/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/MapExampleRF1/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/MapExampleRF1/MapExampleRF1.csproj (100%) rename GeneralMods/{ => OutDatedMods}/MapExampleRF1/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/MapExampleRF1/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/MapExampleRF1/packages.config (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Clients/CustomGalaxyClient.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Clients/CustomLidgrenClient.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/DataInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Delegates/DelegateInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Enums/MessageTypes.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Extentions/StrardewValleyExtentions/MessagesExtentions.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Extentions/XNAExtentions.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Features/Stardew/MessageFeatures.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Messages/OutgoingMessageBase.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Network/NetBufferReadStream.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Network/NetBufferWriteStream.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Framework/Servers/CustomLidgrenServer.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/ModdedUtilitiesNetworking.csproj (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/ModdedUtilitiesNetworking/packages.config (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/Framework/ModConfig.cs (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/Framework/NewMuseumMenu.cs (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/MuseumRearranger.cs (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/MuseumRearranger.csproj (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/ReadMe.md (100%) rename GeneralMods/{ => OutDatedMods}/MuseumRearranger/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/NoMorePets/NoMorePets.cs (100%) rename GeneralMods/{ => OutDatedMods}/NoMorePets/NoMorePets.csproj (100%) rename GeneralMods/{ => OutDatedMods}/NoMorePets/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/NoMorePets/README.md (100%) rename GeneralMods/{ => OutDatedMods}/NoMorePets/manifest.json (100%) rename GeneralMods/{ => OutDatedMods}/SundropMapEvents/Class1.cs (100%) rename GeneralMods/{ => OutDatedMods}/SundropMapEvents/Properties/AssemblyInfo.cs (100%) rename GeneralMods/{ => OutDatedMods}/SundropMapEvents/SundropMapEvents.csproj (100%) rename GeneralMods/{ => OutDatedMods}/SundropMapEvents/manifest.json (100%) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AbandonedJojaMart.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/JojaMart.png diff --git a/GeneralMods/BillboardAnywhere/Assets/Billboard.png b/GeneralMods/BillboardAnywhere/Assets/Billboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d068aff19b1a128f0907821c8390b96f8420156c GIT binary patch literal 916 zcmV;F18e+=P)Px&PDw;TRA_DQAqLDb!m0X^W+0ikn=0+lUhus z=5qmej! zZ@09+U)=}9JxdfB?70oVhQcCC`;Eni0r)ZY%Jv_+bMQ>k`RV2<_aBK~H;U2VmQSiQ znh>R+iGz>d0clhv2Tzi5M7g1;!i4(s4VGAxBKg*~8@A(RS~ZPgG$cIE@8i=+J7ijw zdIm-;v5coGMNk#tl+RYxG>Xv>t4hPcrzv&#+p5%F|IKzB`KwkX71dKz?~#1E^Ak)} zN)cCWfj8{jZ0T@X$2d{vJ(kh^&F`Lb`YQ!OI~4&K}umdtKrx--)bD zaAtBGfSkhhw%6B^Yl(*z=4{)&`P!YsqK6c&3FLF z%a5G<%uZXYV4ZgtkmxZ&s)~{ORy@1}K&fXN0P~YSlaABq4FJYt9Et6fRCFGbYAoxQ zT4h{SDXB6%@yRw{?kTgxa^DK2ohYTNdlZ2E`+PuLDJn)W8nhb=buW@`?92oJRlehq zP_yE_*&L~smm4owVxhb(q8O=ODx!$yj}fmEr3jK&m17j6A>jm1$kbz;iBzeM(GNgk zRjTn{w6w12vc`g}OJd)kD$4V>U$yP0dX0)vjE2}=NnQD7iag1V(HGH-Cuw_8Os0t9 zL_w!|nt=FvMu%C)q=>dEWy@ov>co{}Pqx3W(kVstmVmDsfD)y@QH+L!y;8Plsf?^U zQdNS}$(s({iJ{Q&zA|P}C=|fWh0000Px>{7FPXRCt{2n|p9v)qTf5=f3x?)x(l3S(c3re#phd*e;B59MT5TFv%pDamPv8 zp&cNP0+}+Q`GZM3WtuR}bkb%L+9?fgLsJTwxT#6osS70#28;<#Fvei8@k_QP>*ZZ( zU-xp@_d34?pd}_Efc#CHeQSw{hyXMbQmb1< zMoNBzOGDw!0nwn@kO2?~`iFzLX6lNAWyVky?Yv{Mxhx$E1cP~*sf=9Q5@Y=`^F3#9 z-ayeoXmqamI;rOC7|NeOI1!TR1limGP0?<$3!h~p8h73IH6RZ_Nc3`s``!;~$16f0 z1V{uy5R^3xpsE5P#Ej@?ayAkWfT1f`hK4du!}Djqn2dCeM`7vf7{Vo6JWQhZW{zkU@U_Z)6@f}1Z+kOhENlp4k3pAswdJ*;H=Fojr97{B1W=xhGAIA+yrW#qZ{#pR`zcWZ&TZtb8 zxb45qvUq~S2M?kug08EUU`3;q`}RX8GpDGp@s<7Do5OUkyq=M4mZ8NTzwgA3_=}DA6|jOh0O%QQ3yo0+n*|p)r z4z}HM9{^h&hfmz|FnJ@%hLvsn@s}RFXj(hJ{|F!3_F1f0Y{qxQ}(+AvW`F%AxK8f zZ_VmqH0OrCtA@d@@7>K<{tyu~liEP)mkCmN+g^H8-Gs_zO3)bZ+BZKz|+D?~2A z*j_P6SOPDAYF#)1DdF6pAQn++OlSmI6I4)~H0h2kW5eMcT3M?Sa9j`9_d~6oYZL^M zKuY9zo9{48lak|wn&$_2UVxo_3(JUtZ*%%s4n-)GN;!NXIMZw32UdtyWrYer*OYqi zsIDsT{c>MDfzLN=xM>S7?tZGSpM19WCwOQKoZgMW7S@$>(EhOum>(l-&H02Ge=D**QRwE)Sh zd$w10r|&yVD8VW#4@+AUVZ|)R|4e;zRV!8o#mh3OxyHiACkp;~)OIJ*29ucTHkI6<(huMTk{9;;Y6h%dnQ*;e z$|AZjf;xf@B}Z(>3rl=r{L~j$MJE+gDV1`3|J#pn$9?a8r1M^(W6Z3bw2fkN#Ub8_+pcmsdOdT^3diL}zzbp*R1)lkzXJ+g&O^1-% zRGNqs6b(Vyf+Ia_ce-dukjc3u6EW6rx$&|vG#4mlhABChC*libn@qiYej{2p0wCQy zj2x)+*FzA%4I8e#EX>Rm#?JN=$jg)DsR-1UlG7sv06JUCeXcJV7%9|bpsJB6cywGA zR^|?`9Xv$7II|Pq=}-}<6^nEKlTXll>@>~kPD(|aNYo&oImX_HzeV7AxWz&Zfn)u( zee(_7jV3ZVd$(!tTXozfp$Mduq?;Nj6^fvM154-w0k zTvD@U<;p;+t&5|F-ni)T`M@A5oVtg^p}0v1f#-Ro+bq(p7Re@)AdnREC7L@IaohHX z#*@pF?fsB!TC-te&AjS0Kae~>)I@g0Hr`2ZMnFx>A99=WxdK+iL`q5jnL%Rl2$6_| zX&D5*Pa$8#am%NJ6REEE!3hW-*z#e1@`D`&eyyed%$@h5X=O3lp3kp#9zs_Yu3EL8 z+m>BR!c_U`-t9oysD%U?iCPTy50gwu5~)}vHupRaMNx^yA_PceAaUHXB;EJH5r}45 zL}D?bOplfAqFA-9;LgZ8OQN>VgE61 zT+>Y~Vi2iQ2L)40af0&7G)*I<8$8#;vCFyAsbOfn?9+UN?FMy2?2XHtAP5-D=K0Xd zCXA@bzwG`c%NI4X`MRZOYB-7v2~-GyH!jfXOth-0n8Kt~DBw*o>$9ncx)R|BLCxF% zo_PK++iqRY(|h0Hc;5&&U%#Bs-MS9j^(fgM@n~3}HGXI;9%VE$2255o3n3~x!*={o zn+q%d^v?fe|4Xl2HhQJZIfjSNRpwM(9sS80m*Th%U;N}owto0pK7P|`4xJdFF&V|E zljEpLFw60O5-V!e44jDPC#?GfRQ11kz2-7^cbIH%<_blyzEC<5tRX9NS^67_P3UPJ4}<>E}D&ev}8c-;0q*a6bI#v7LNm(^?XX7NP3K1t)*^ z?O)-RTQ;+A-vQRGh~s*a&wuVu`QYzt69H zym3B;&-C&6&;AKlw+in1gD>+>|GtCMM~>3cwxF_#yi$?T-jjUeuXbSfz0JP=c$^mw zW_aZ9{+yo8o2H%2SMK~Ow{B>r*mr=nT?$dFOs{C404 z(~fDipX2-cxZxUuhrjtCK`^;}^`>ra`{)+_`SG8k+XFPj6&5eh%XBVKMwE(a6^>Hz z2*f8B+JeUVJFrHF4xSxhL3?whTL?ic7DY{|9L?oxbmoGz!Ovg%1s`17h@qF?@`}ZA ze)iO3tZElXqTn5+u}$DhNX5&K%-bG9KrEv1yX#v*G;OEW(0RVZG?bd_rlFu#xi0NZ z;RPY(DW2Q)7*{tc2vKVrE(XW@MtF4B%LGz#&(_W8szPHbdVxqu2pq?ybzw`Tkk<2j zG9y`14M{X1kg|5N0>SmyB#nKcK(MjVqT9{o?#%%BxkN!7b{>;tf6`N$N z0e3_aBm|ygbJePCNS>*T6@c8bRH3Umb`hz83%}#{Lw>XxsfIK~$HOvoqzn+_uDh7{ zBjB||y$B(B{+L8Fp`qjknUh2L^U?kPi@^)aMNy#SN?Kx~K>(N#v0?rn4$UDThe mod configuration. private ModConfig Config; + /// + /// The texture for the calendar button. + /// + private Texture2D calendarTexture; + /// + /// The texture for the quest button. + /// + private Texture2D questTexture; + + /// + /// The button for the calendar menu. + /// + public ClickableTextureComponent billboardButton; + /// + /// The button for the quest menu. + /// + public ClickableTextureComponent questButton; /********* ** Public methods @@ -25,9 +46,24 @@ namespace Omegasis.BillboardAnywhere { this.Config = helper.ReadConfig(); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.ReloadConfig", "Reloads the config file for BillboardAnywhere to reposition the button for the inventory menu page.", this.reloadConfig); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetcalendarButtonX", "Sets the x position for the calendar button in the game menu.", this.setcalendarButtonX); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetcalendarButtonY", " Sets the y position for the calendar button in the game menu.", this.setcalendarButtonY); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetcalendarButtonPosition", " Sets the position for the calendar button in the game menu.", this.setcalendarButtonPosition); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetQuestButtonX", "Sets the x position for the quest button in the game menu.", this.setQuestButtonX); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetQuestButtonY", " Sets the y position for the quest button in the game menu.", this.setQuestButtonX); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetQuestButtonPosition", " Sets the position for the quest button in the game menu.", this.setQuestButtonPosition); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetcalendarButtonVisibility", " Sets the visibility for the billboard button in the game menu.", this.setcalendarButtonVisibility); + helper.ConsoleCommands.Add("Omegasis.BillboardAnywhere.SetQuestButtonVisibility", " Sets the visibility for the quest button in the game menu.", this.setQuestButtonVisibility); helper.Events.Input.ButtonPressed += this.OnButtonPressed; - } + helper.Events.Display.RenderedActiveMenu += this.RenderBillboardMenuButton; + helper.Events.Input.ButtonPressed += this.Input_ButtonPressed; + this.calendarTexture = helper.Content.Load(Path.Combine("Assets", "Billboard.png")); + this.questTexture= helper.Content.Load(Path.Combine("Assets", "Quest.png")); + this.billboardButton = new ClickableTextureComponent(new Rectangle((int)this.Config.CalendarOffsetFromMenu.X, (int)this.Config.CalendarOffsetFromMenu.Y, this.calendarTexture.Width, this.calendarTexture.Height), this.calendarTexture, new Rectangle(0, 0, this.calendarTexture.Width, this.calendarTexture.Height), 1f, false); + this.questButton = new ClickableTextureComponent(new Rectangle((int)this.Config.QuestOffsetFromMenu.X, (int)this.Config.QuestOffsetFromMenu.Y, this.questTexture.Width, this.questTexture.Height), this.questTexture, new Rectangle(0, 0, this.questTexture.Width, this.questTexture.Height), 1f, false); + } /********* ** Private methods @@ -38,8 +74,214 @@ namespace Omegasis.BillboardAnywhere public void OnButtonPressed(object sender, ButtonPressedEventArgs e) { // load menu if key pressed - if (Context.IsPlayerFree && e.Button == this.Config.KeyBinding) + if (Context.IsPlayerFree && e.Button == this.Config.CalendarKeyBinding) Game1.activeClickableMenu = new Billboard(); + if (Context.IsPlayerFree && e.Button == this.Config.QuestBoardKeyBinding) + { + Game1.RefreshQuestOfTheDay(); + Game1.activeClickableMenu = new Billboard(true); + } + } + + /// + /// Checks to see if the billboard button is clicked. + /// + /// + /// + private void Input_ButtonPressed(object sender, ButtonPressedEventArgs e) + { + if (Game1.activeClickableMenu == null) return; + if (e.Button == SButton.MouseLeft) + { + if (this.isInventoryPage()) + { + if (this.billboardButton.containsPoint(Game1.getMousePosition().X, Game1.getMousePosition().Y)) + { + if (this.Config.EnableInventoryCalendarButton == false) return; + Game1.activeClickableMenu = new Billboard(false); + } + if (this.questButton.containsPoint(Game1.getMousePosition().X, Game1.getMousePosition().Y)) + { + if (this.Config.EnableInventoryQuestButton == false) return; + Game1.activeClickableMenu = new Billboard(true); + } + } + } + } + + /// + /// Renders the billboard button to the menu. + /// + /// + /// + private void RenderBillboardMenuButton(object sender, RenderedActiveMenuEventArgs e) + { + if (this.isInventoryPage()) + { + this.billboardButton.bounds = new Rectangle(Game1.activeClickableMenu.xPositionOnScreen + (int)this.Config.CalendarOffsetFromMenu.X, Game1.activeClickableMenu.yPositionOnScreen + (int)this.Config.CalendarOffsetFromMenu.Y, this.calendarTexture.Width, this.calendarTexture.Height); + this.questButton.bounds = new Rectangle(Game1.activeClickableMenu.xPositionOnScreen + (int)this.Config.QuestOffsetFromMenu.X, Game1.activeClickableMenu.yPositionOnScreen + (int)this.Config.QuestOffsetFromMenu.Y, this.calendarTexture.Width, this.calendarTexture.Height); + if(this.Config.EnableInventoryQuestButton) this.questButton.draw(Game1.spriteBatch); + if (this.Config.EnableInventoryCalendarButton) this.billboardButton.draw(Game1.spriteBatch); + GameMenu activeMenu = (Game1.activeClickableMenu as GameMenu); + activeMenu.drawMouse(Game1.spriteBatch); + + if (this.billboardButton.containsPoint(Game1.getMousePosition().X, Game1.getMousePosition().Y)) + { + //My deepest appologies for not being able to personally translate more text. + if (Game1.content.GetCurrentLanguage() == LocalizedContentManager.LanguageCode.en) + { + if (this.Config.EnableInventoryCalendarButton == false) return; + IClickableMenu.drawHoverText(Game1.spriteBatch, "Open Billboard Menu", Game1.smallFont); + } + } + + if (this.questButton.containsPoint(Game1.getMousePosition().X, Game1.getMousePosition().Y)) + { + //My deepest appologies once again for not being able to personally translate more text. + if (Game1.content.GetCurrentLanguage() == LocalizedContentManager.LanguageCode.en) + { + if (this.Config.EnableInventoryQuestButton == false) return; + IClickableMenu.drawHoverText(Game1.spriteBatch, "Open Quest Menu", Game1.smallFont); + } + } + } + } + + /// + /// Checks to see if the current active menu is the game menu and the current page is the inventory page. + /// + /// + private bool isInventoryPage() + { + if (Game1.activeClickableMenu == null) return false; + if (Game1.activeClickableMenu is StardewValley.Menus.GameMenu) + { + GameMenu activeMenu = (Game1.activeClickableMenu as GameMenu); + IClickableMenu currentTab = activeMenu.GetCurrentPage(); + if (currentTab is InventoryPage) + { + return true; + } + } + return false; + } + + + /// + /// Reloads the mod's config and repositions the menu button as necessary. + /// + private void reloadConfig(string Name, string[] Params) + { + this.Config = this.Helper.ReadConfig(); + this.billboardButton = new ClickableTextureComponent(new Rectangle((int)this.Config.CalendarOffsetFromMenu.X, (int)this.Config.CalendarOffsetFromMenu.Y, this.calendarTexture.Width, this.calendarTexture.Height), this.calendarTexture, new Rectangle(0, 0, this.calendarTexture.Width, this.calendarTexture.Height), 1f, false); + this.questButton = new ClickableTextureComponent(new Rectangle((int)this.Config.QuestOffsetFromMenu.X, (int)this.Config.QuestOffsetFromMenu.Y, this.questTexture.Width, this.questTexture.Height), this.questTexture, new Rectangle(0, 0, this.questTexture.Width, this.questTexture.Height), 1f, false); + } + + /// + /// Reloads the mod's config and repositions the menu button as necessary. + /// + private void reloadConfig() + { + this.Config = this.Helper.ReadConfig(); + this.billboardButton = new ClickableTextureComponent(new Rectangle((int)this.Config.CalendarOffsetFromMenu.X, (int)this.Config.CalendarOffsetFromMenu.Y, this.calendarTexture.Width, this.calendarTexture.Height), this.calendarTexture, new Rectangle(0, 0, this.calendarTexture.Width, this.calendarTexture.Height), 1f, false); + this.questButton = new ClickableTextureComponent(new Rectangle((int)this.Config.QuestOffsetFromMenu.X, (int)this.Config.QuestOffsetFromMenu.Y, this.questTexture.Width, this.questTexture.Height), this.questTexture, new Rectangle(0, 0, this.questTexture.Width, this.questTexture.Height), 1f, false); + } + + /// + /// Sets the x position of the menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setcalendarButtonX(string Name, string[] Params) + { + this.Config.CalendarOffsetFromMenu = new Vector2(Convert.ToInt32(Params[0]), this.Config.CalendarOffsetFromMenu.Y); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the y position of the menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setcalendarButtonY(string Name, string[] Params) + { + this.Config.CalendarOffsetFromMenu = new Vector2(this.Config.CalendarOffsetFromMenu.X, Convert.ToInt32(Params[0])); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the position of the menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setcalendarButtonPosition(string Name, string[] Params) + { + this.Config.CalendarOffsetFromMenu = new Vector2(Convert.ToInt32(Params[0]), Convert.ToInt32(Params[1])); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + + /// + /// Sets the x position of the quest menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setQuestButtonX(string Name, string[] Params) + { + this.Config.QuestOffsetFromMenu = new Vector2(Convert.ToInt32(Params[0]), this.Config.QuestOffsetFromMenu.Y); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the y position of the quest menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setQuestButtonY(string Name, string[] Params) + { + this.Config.QuestOffsetFromMenu = new Vector2(this.Config.QuestOffsetFromMenu.X, Convert.ToInt32(Params[0])); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the position of the quest menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setQuestButtonPosition(string Name, string[] Params) + { + this.Config.QuestOffsetFromMenu = new Vector2(Convert.ToInt32(Params[0]), Convert.ToInt32(Params[1])); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the visibility and functionality of the billboard menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setcalendarButtonVisibility(string Name, string[] Params) + { + this.Config.EnableInventoryCalendarButton = Convert.ToBoolean(Params[0]); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); + } + + /// + /// Sets the visibility and functionality of the quest menu button. + /// + /// The name of the command. + /// The parameters passed into the command. + private void setQuestButtonVisibility(string Name, string[] Params) + { + this.Config.EnableInventoryQuestButton = Convert.ToBoolean(Params[0]); + this.Helper.WriteConfig(this.Config); + this.reloadConfig(); } } } diff --git a/GeneralMods/BillboardAnywhere/BillboardAnywhere.csproj b/GeneralMods/BillboardAnywhere/BillboardAnywhere.csproj index 36bff343..d608676f 100644 --- a/GeneralMods/BillboardAnywhere/BillboardAnywhere.csproj +++ b/GeneralMods/BillboardAnywhere/BillboardAnywhere.csproj @@ -86,6 +86,14 @@ + + + PreserveNewest + + + PreserveNewest + + \ No newline at end of file diff --git a/GeneralMods/BillboardAnywhere/Framework/ModConfig.cs b/GeneralMods/BillboardAnywhere/Framework/ModConfig.cs index 8f16e667..e33a349a 100644 --- a/GeneralMods/BillboardAnywhere/Framework/ModConfig.cs +++ b/GeneralMods/BillboardAnywhere/Framework/ModConfig.cs @@ -1,3 +1,4 @@ +using Microsoft.Xna.Framework; using StardewModdingAPI; namespace Omegasis.BillboardAnywhere.Framework @@ -6,6 +7,21 @@ namespace Omegasis.BillboardAnywhere.Framework internal class ModConfig { /// The key which shows the billboard menu. - public SButton KeyBinding { get; set; } = SButton.B; + public SButton CalendarKeyBinding { get; set; } = SButton.B; + /// The key which shows the quest menu. + public SButton QuestBoardKeyBinding { get; set; } = SButton.H; + /// The offset for the calendar button from the active menu + public Vector2 CalendarOffsetFromMenu { get; set; } = new Vector2(-100, 0); + /// The offset for the quest button from the active menu + public Vector2 QuestOffsetFromMenu { get; set; } = new Vector2(-200, 0); + + /// + /// If true the calendar button is enabled for the in-game menu. + /// + public bool EnableInventoryCalendarButton { get; set; } = true; + /// + /// If true the quest button is enabled for the in-game menu. + /// + public bool EnableInventoryQuestButton { get; set; } = true; } } diff --git a/GeneralMods/BillboardAnywhere/manifest.json b/GeneralMods/BillboardAnywhere/manifest.json index 8a6fea42..0f3c163f 100644 --- a/GeneralMods/BillboardAnywhere/manifest.json +++ b/GeneralMods/BillboardAnywhere/manifest.json @@ -1,10 +1,10 @@ { "Name": "Billboard Anywhere", "Author": "Alpha_Omegasis", - "Version": "1.8.0", + "Version": "1.10.1", "Description": "Lets you view the billboard from anywhere.", "UniqueID": "Omegasis.BillboardAnywhere", "EntryDll": "BillboardAnywhere.dll", - "MinimumApiVersion": "2.10.1", + "MinimumApiVersion": "3.0.0", "UpdateKeys": [ "Nexus:492" ] } diff --git a/GeneralMods/BuildEndurance/BuildEndurance.cs b/GeneralMods/BuildEndurance/BuildEndurance.cs index 4c8f5a6e..0f44bf65 100644 --- a/GeneralMods/BuildEndurance/BuildEndurance.cs +++ b/GeneralMods/BuildEndurance/BuildEndurance.cs @@ -158,7 +158,7 @@ namespace Omegasis.BuildEndurance if (this.PlayerData.CurrentLevel < this.Config.MaxLevel) { - while (this.PlayerData.CurrentExp >= this.PlayerData.ExpToNextLevel) + while (this.PlayerData.CurrentExp >= this.PlayerData.ExpToNextLevel && this.PlayerData.CurrentLevel= this.PlayerData.ExpToNextLevel) + while (this.PlayerData.CurrentExp >= this.PlayerData.ExpToNextLevel && this.PlayerData.CurrentLevel>()); this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Cooking"), Game1.mouseCursors, new Rectangle(688, 64, 16, 16), Game1.pixelZoom)); this.Collections.Add(BuyBackMenu.CookingTab, new List>()); - this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Achievements"), Game1.mouseCursors, new Rectangle(656, 80, 16, 16), Game1.pixelZoom)); - this.Collections.Add(BuyBackMenu.AchievementsTab, new List>()); + //this.SideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Achievements"), Game1.mouseCursors, new Rectangle(656, 80, 16, 16), Game1.pixelZoom)); + //this.Collections.Add(BuyBackMenu.AchievementsTab, new List>()); this.BackButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + this.height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(352, 495, 12, 11), Game1.pixelZoom); this.ForwardButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + this.width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + this.height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(365, 495, 12, 11), Game1.pixelZoom); int[] array = new int[this.SideTabs.Count]; @@ -155,8 +155,9 @@ namespace Omegasis.BuyBackCollectables.Framework this.Collections[selectedTab].Last().Add(new ClickableTextureComponent(entry.Key + " " + drawShadow, new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), null, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, entry.Key, 16, 16), Game1.pixelZoom, drawShadow)); array[selectedTab]++; } - if (this.Collections[5].Count == 0) - this.Collections[5].Add(new List()); + /* + //if (this.Collections[5].Count == 0) + //this.Collections[5].Add(new List()); foreach (KeyValuePair current2 in Game1.achievements) { bool flag = Game1.player.achievements.Contains(current2.Key); @@ -169,6 +170,7 @@ namespace Omegasis.BuyBackCollectables.Framework array[5]++; } } + */ } @@ -221,9 +223,9 @@ namespace Omegasis.BuyBackCollectables.Framework } foreach (ClickableTextureComponent current2 in this.Collections[this.CurrentTab][this.CurrentPage]) { - if (current2.containsPoint(x, y) && this.NewItem != null && Game1.player.money >= this.Value) + if (current2.containsPoint(x, y) && this.NewItem != null && Game1.player.Money >= this.Value) { - Game1.player.money -= this.Value; + Game1.player.Money -= this.Value; Game1.playSound("coin"); Game1.player.addItemByMenuIfNecessary(this.NewItem); } @@ -236,9 +238,9 @@ namespace Omegasis.BuyBackCollectables.Framework /// Whether to enable sound. public override void receiveRightClick(int x, int y, bool playSound = true) { - if (this.NewItem != null && Game1.player.money >= this.Value) + if (this.NewItem != null && Game1.player.Money >= this.Value) { - Game1.player.money -= this.Value; + Game1.player.Money -= this.Value; Game1.player.addItemByMenuIfNecessary(this.NewItem); Game1.playSound("coin"); } diff --git a/GeneralMods/BuyBackCollectables/manifest.json b/GeneralMods/BuyBackCollectables/manifest.json index 862d6a7a..3db24121 100644 --- a/GeneralMods/BuyBackCollectables/manifest.json +++ b/GeneralMods/BuyBackCollectables/manifest.json @@ -1,10 +1,10 @@ { "Name": "Buy Back Collectables", "Author": "Alpha_Omegasis", - "Version": "1.7.0", + "Version": "1.8.0", "Description": "Lets you buy back any obtained collectable.", "UniqueID": "Omegasis.BuyBackCollectables", "EntryDll": "BuyBackCollectables.dll", - "MinimumApiVersion": "2.10.1", + "MinimumApiVersion": "3.0.0", "UpdateKeys": [ "Nexus:507" ] } diff --git a/GeneralMods/Fall28SnowDay/manifest.json b/GeneralMods/Fall28SnowDay/manifest.json index 0d4bd6b8..dc0b8a6b 100644 --- a/GeneralMods/Fall28SnowDay/manifest.json +++ b/GeneralMods/Fall28SnowDay/manifest.json @@ -1,7 +1,7 @@ { "Name": "Fall 28 Snow Day", "Author": "Alpha_Omegasis", - "Version": "1.7.0", + "Version": "1.7.1", "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", diff --git a/GeneralMods/MoreRain/Framework/ModConfig.cs b/GeneralMods/MoreRain/Framework/ModConfig.cs index 791216b4..35bff545 100644 --- a/GeneralMods/MoreRain/Framework/ModConfig.cs +++ b/GeneralMods/MoreRain/Framework/ModConfig.cs @@ -9,21 +9,65 @@ namespace Omegasis.MoreRain.Framework /// The chance out of 100 that it will storm tomorrow if it's spring. public int SpringThunderChance { get; set; } = 5; + /// + /// Changes the mod's logic to prioritize setting a thunderstorm before checking for just a normal rainy day. + /// False = The mod will try to set a normal rainy day first. + /// True = The mod will try to set a thunderstorm (stormy) day first. + /// Default:False + /// + public bool PrioritizeSpringStorms { get; set; } = false; + /// The chance out of 100 that it will rain tomorrow if it's summer. public int SummerRainChance { get; set; } = 5; /// The chance out of 100 that it will storm tomorrow if it's summer. public int SummerThunderChance { get; set; } = 10; + /// + /// Changes the mod's logic to prioritize setting a thunderstorm before checking for just a normal rainy day. + /// False = The mod will try to set a normal rainy day first. + /// True = The mod will try to set a thunderstorm (stormy) day first. + /// Default:True + /// + public bool PrioritizeSummerStorms { get; set; } = true; + /// The chance out of 100 that it will rain tomorrow if it's fall. public int FallRainChance { get; set; } = 15; /// The chance out of 100 that it will storm tomorrow if it's fall. public int FallThunderChance { get; set; } = 5; + + /// + /// Changes the mod's logic to prioritize setting a thunderstorm before checking for just a normal rainy day. + /// False = The mod will try to set a normal rainy day first. + /// True = The mod will try to set a thunderstorm (stormy) day first. + /// Default:False + /// + public bool PrioritizeFallStorms { get; set; } = false; + + /// + /// If set to true the mod will try to make it snow in fall just for fun. + /// + public bool SnowInFall { get; set; } = false; + + /// + /// The chance amouunt for it to snow in the fall. + /// + public int FallSnowChance { get; set; } = 5; + /// The chance out of 100 that it will snow tomorrow if it's winter. public int WinterSnowChance { get; set; } = 15; + /// + /// If set to true then the mod will check to set rainy days in the winter. Default: False + /// + public bool RainInWinter { get; set; } = false; + /// + /// The chance that it will rain on a winter day. Only checked if the RainInWinter config option is true. + /// + public int WinterRainChance { get; set; } = 10; + /// Whether to suppress verbose logging. public bool SuppressLog { get; set; } = true; } diff --git a/GeneralMods/MoreRain/MoreRain.cs b/GeneralMods/MoreRain/MoreRain.cs index 4194842a..afa27aab 100644 --- a/GeneralMods/MoreRain/MoreRain.cs +++ b/GeneralMods/MoreRain/MoreRain.cs @@ -75,55 +75,130 @@ namespace Omegasis.MoreRain { case "spring": // set rain - if (chance <= this.Config.SpringRainChance) + if (this.Config.PrioritizeSpringStorms) { - Game1.weatherForTomorrow = Game1.weather_rain; - this.VerboseLog("It will rain tomorrow."); - return; + if (chance <= this.Config.SpringThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } + if (chance <= this.Config.SpringRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } } - - if (chance <= this.Config.SpringThunderChance) + else { - Game1.weatherForTomorrow = Game1.weather_lightning; - this.VerboseLog("It will be stormy tomorrow."); - return; + if (chance <= this.Config.SpringRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } + + if (chance <= this.Config.SpringThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } } break; case "summer": // set rain - if (chance <= this.Config.SummerRainChance) + if (this.Config.PrioritizeSummerStorms) { - Game1.weatherForTomorrow = Game1.weather_rain; - this.VerboseLog("It will rain tomorrow."); - return; + if (chance <= this.Config.SummerThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } + if (chance <= this.Config.SummerRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } + } + else + { + if (chance <= this.Config.SummerRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } + if (chance <= this.Config.SummerThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } } - - if (chance <= this.Config.SummerThunderChance) - { - Game1.weatherForTomorrow = Game1.weather_lightning; - this.VerboseLog("It will be stormy tomorrow."); - return; - } break; case "fall": case "autumn": // set rain - if (chance <= this.Config.FallRainChance) + + if (this.Config.PrioritizeFallStorms) { - Game1.weatherForTomorrow = Game1.weather_rain; - this.VerboseLog("It will rain tomorrow."); - return; + if (chance <= this.Config.FallThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } + + if (this.Config.SnowInFall) + { + if (chance <= this.Config.FallSnowChance) + { + Game1.weatherForTomorrow = Game1.weather_snow; + this.VerboseLog("It will snow tomorrow."); + } + } + + if (chance <= this.Config.FallRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } + + } + else + { + if (chance <= this.Config.FallRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will rain tomorrow."); + return; + } + + if (this.Config.SnowInFall) + { + if (chance <= this.Config.FallSnowChance) + { + Game1.weatherForTomorrow = Game1.weather_snow; + this.VerboseLog("It will snow tomorrow."); + } + } + + if (chance <= this.Config.FallThunderChance) + { + Game1.weatherForTomorrow = Game1.weather_lightning; + this.VerboseLog("It will be stormy tomorrow."); + return; + } } - if (chance <= this.Config.FallThunderChance) - { - Game1.weatherForTomorrow = Game1.weather_lightning; - this.VerboseLog("It will be stormy tomorrow."); - return; - } break; case "winter": @@ -133,10 +208,13 @@ namespace Omegasis.MoreRain Game1.weatherForTomorrow = Game1.weather_snow; this.VerboseLog("It will snow tomorrow."); } - else + if (this.Config.RainInWinter) { - //StardewValley.Game1.weatherForTomorrow = StardewValley.Game1.weather_sunny; - this.VerboseLog("It will not snow tomorrow."); + if (chance <= this.Config.WinterRainChance) + { + Game1.weatherForTomorrow = Game1.weather_rain; + this.VerboseLog("It will snow tomorrow."); + } } break; } diff --git a/GeneralMods/MoreRain/manifest.json b/GeneralMods/MoreRain/manifest.json index 55769136..f889c4ea 100644 --- a/GeneralMods/MoreRain/manifest.json +++ b/GeneralMods/MoreRain/manifest.json @@ -1,7 +1,7 @@ { "Name": "More Rain", "Author": "Alpha_Omegasis", - "Version": "1.8.0", + "Version": "1.9.0", "Description": "Change how much it rains in the game.", "UniqueID": "Omegasis.MoreRain", "EntryDll": "MoreRain.dll", diff --git a/GeneralMods/CustomFurnitureFramework/Class1.cs b/GeneralMods/OutDatedMods/CustomFurnitureFramework/Class1.cs similarity index 100% rename from GeneralMods/CustomFurnitureFramework/Class1.cs rename to GeneralMods/OutDatedMods/CustomFurnitureFramework/Class1.cs diff --git a/GeneralMods/CustomFurnitureFramework/CustomFurnitureFramework.csproj b/GeneralMods/OutDatedMods/CustomFurnitureFramework/CustomFurnitureFramework.csproj similarity index 100% rename from GeneralMods/CustomFurnitureFramework/CustomFurnitureFramework.csproj rename to GeneralMods/OutDatedMods/CustomFurnitureFramework/CustomFurnitureFramework.csproj diff --git a/GeneralMods/CustomFurnitureFramework/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/CustomFurnitureFramework/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/CustomFurnitureFramework/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/CustomFurnitureFramework/Properties/AssemblyInfo.cs diff --git a/GeneralMods/CustomFurnitureFramework/packages.config b/GeneralMods/OutDatedMods/CustomFurnitureFramework/packages.config similarity index 100% rename from GeneralMods/CustomFurnitureFramework/packages.config rename to GeneralMods/OutDatedMods/CustomFurnitureFramework/packages.config diff --git a/GeneralMods/CustomNPCFramework/Class1.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Class1.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Class1.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Class1.cs diff --git a/GeneralMods/CustomNPCFramework/CustomNPCFramework.csproj b/GeneralMods/OutDatedMods/CustomNPCFramework/CustomNPCFramework.csproj similarity index 100% rename from GeneralMods/CustomNPCFramework/CustomNPCFramework.csproj rename to GeneralMods/OutDatedMods/CustomNPCFramework/CustomNPCFramework.csproj diff --git a/GeneralMods/CustomNPCFramework/Framework/Enums/AnimationType.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/AnimationType.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Enums/AnimationType.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/AnimationType.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Enums/Direction.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Direction.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Enums/Direction.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Direction.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Enums/Genders.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Genders.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Enums/Genders.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Genders.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Enums/PartType.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/PartType.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Enums/PartType.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/PartType.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Enums/Seasons.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Seasons.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Enums/Seasons.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Enums/Seasons.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetInfo.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetInfo.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/AssetInfo.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetInfo.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetManager.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetManager.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/AssetManager.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetManager.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetPool.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/AssetSheet.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetSheet.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/AssetSheet.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/AssetSheet.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/DirectionalTexture.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/DirectionalTexture.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/DirectionalTexture.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/DirectionalTexture.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/ExtendedAssetInfo.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/ExtendedAssetInfo.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/ExtendedAssetInfo.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/ExtendedAssetInfo.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Graphics/TextureGroups/TextureGroup.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/TextureGroups/TextureGroup.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Graphics/TextureGroups/TextureGroup.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Graphics/TextureGroups/TextureGroup.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteCollection.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteExtended.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteExtended.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteExtended.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/AnimatedSpriteExtended.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/CharacterAnimationBase.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/CharacterAnimationBases/StandardCharacterAnimation.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ColorCollections/StandardColorCollection.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ColorCollections/StandardColorCollection.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ColorCollections/StandardColorCollection.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ColorCollections/StandardColorCollection.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/AnimationKeys.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/AnimationKeys.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/AnimationKeys.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/AnimationKeys.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/ModularRenderers/BasicRenderer.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Portrait.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/Portrait.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Portrait.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/Portrait.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/ModularNPCS/Sprite.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/NPCNames.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCNames.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/NPCNames.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCNames.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCS/ExtendedNPC.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/NPCS/MerchantNPC.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCS/MerchantNPC.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/NPCS/MerchantNPC.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/NPCS/MerchantNPC.cs diff --git a/GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Framework/Utilities/NPCTracker.cs diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseDown.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseDown.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseDown.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseDown.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseLeft.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseLeft.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseLeft.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseLeft.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingDown.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingDown.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingDown.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingDown.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingLeft.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingLeft.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingLeft.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingLeft.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingRight.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingRight.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingRight.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingRight.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingUp.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingUp.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingUp.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseMovingUp.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseRight.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseRight.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseRight.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseRight.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseUp.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseUp.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseUp.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/FBodyBaseUp.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bodies/FemaleBodyBase/VanillaFemaleBodyBase.json diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/DownFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/DownFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/DownFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/DownFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/GreyPants.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/GreyPants.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/GreyPants.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/GreyPants.json diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/LeftFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/LeftFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/LeftFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/LeftFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/RightFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/RightFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/RightFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/RightFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/UpFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/UpFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/UpFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Bottoms/Female/GreyPants/UpFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/BrownVanillaEyes.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/BrownVanillaEyes.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/BrownVanillaEyes.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/BrownVanillaEyes.json diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesDown.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesDown.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesDown.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesDown.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesLeft.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesLeft.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesLeft.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesLeft.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesRight.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesRight.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesRight.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesRight.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesUp.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesUp.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesUp.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Eyes/VanillaEyes/BrownEyes/EyesUp.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/DownHairStyle.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/DownHairStyle.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/DownHairStyle.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/DownHairStyle.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/LeftHairStyle.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/LeftHairStyle.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/LeftHairStyle.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/LeftHairStyle.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/PigtailsHairStyle.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/PigtailsHairStyle.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/PigtailsHairStyle.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/PigtailsHairStyle.json diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/RightHairStyle.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/RightHairStyle.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/RightHairStyle.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/RightHairStyle.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/UpHairStyle.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/UpHairStyle.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/UpHairStyle.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/VanillaPigtails/UpHairStyle.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/notes.txt b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/notes.txt similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Hair/notes.txt rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Hair/notes.txt diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/DownFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/DownFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/DownFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/DownFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/LeftFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/LeftFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/LeftFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/LeftFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/RightFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/RightFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/RightFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/RightFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/UpFacing.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/UpFacing.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/UpFacing.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/UpFacing.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/VanillaPinkShirt.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/VanillaPinkShirt.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/VanillaPinkShirt.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shirts/Female/VanillaPinkShirt/VanillaPinkShirt.json diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownMoving.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownMoving.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownMoving.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownMoving.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownStanding.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownStanding.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownStanding.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/DownStanding.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftMoving.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftMoving.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftMoving.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftMoving.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftStanding.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftStanding.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftStanding.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/LeftStanding.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightMoving.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightMoving.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightMoving.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightMoving.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightStanding.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightStanding.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightStanding.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/RightStanding.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpMoving.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpMoving.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpMoving.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpMoving.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpStanding.png b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpStanding.png similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpStanding.png rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/UpStanding.png diff --git a/GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/VanillaBrownShoes.json b/GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/VanillaBrownShoes.json similarity index 100% rename from GeneralMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/VanillaBrownShoes.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/ModularNPCGraphics/Shoes/VanillaBrownShoes/VanillaBrownShoes.json diff --git a/GeneralMods/CustomNPCFramework/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/CustomNPCFramework/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/CustomNPCFramework/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/CustomNPCFramework/Properties/AssemblyInfo.cs diff --git a/GeneralMods/CustomNPCFramework/manifest.json b/GeneralMods/OutDatedMods/CustomNPCFramework/manifest.json similarity index 100% rename from GeneralMods/CustomNPCFramework/manifest.json rename to GeneralMods/OutDatedMods/CustomNPCFramework/manifest.json diff --git a/GeneralMods/CustomObjectFramework/App.config b/GeneralMods/OutDatedMods/CustomObjectFramework/App.config similarity index 100% rename from GeneralMods/CustomObjectFramework/App.config rename to GeneralMods/OutDatedMods/CustomObjectFramework/App.config diff --git a/GeneralMods/CustomObjectFramework/CustomObjectFramework.csproj b/GeneralMods/OutDatedMods/CustomObjectFramework/CustomObjectFramework.csproj similarity index 100% rename from GeneralMods/CustomObjectFramework/CustomObjectFramework.csproj rename to GeneralMods/OutDatedMods/CustomObjectFramework/CustomObjectFramework.csproj diff --git a/GeneralMods/CustomObjectFramework/Program.cs b/GeneralMods/OutDatedMods/CustomObjectFramework/Program.cs similarity index 100% rename from GeneralMods/CustomObjectFramework/Program.cs rename to GeneralMods/OutDatedMods/CustomObjectFramework/Program.cs diff --git a/GeneralMods/CustomObjectFramework/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/CustomObjectFramework/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/CustomObjectFramework/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/CustomObjectFramework/Properties/AssemblyInfo.cs diff --git a/GeneralMods/DailyQuestAnywhere/DailyQuestAnywhere.cs b/GeneralMods/OutDatedMods/DailyQuestAnywhere/DailyQuestAnywhere.cs similarity index 100% rename from GeneralMods/DailyQuestAnywhere/DailyQuestAnywhere.cs rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/DailyQuestAnywhere.cs diff --git a/GeneralMods/DailyQuestAnywhere/DailyQuestAnywhere.csproj b/GeneralMods/OutDatedMods/DailyQuestAnywhere/DailyQuestAnywhere.csproj similarity index 100% rename from GeneralMods/DailyQuestAnywhere/DailyQuestAnywhere.csproj rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/DailyQuestAnywhere.csproj diff --git a/GeneralMods/DailyQuestAnywhere/Framework/ModConfig.cs b/GeneralMods/OutDatedMods/DailyQuestAnywhere/Framework/ModConfig.cs similarity index 100% rename from GeneralMods/DailyQuestAnywhere/Framework/ModConfig.cs rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/Framework/ModConfig.cs diff --git a/GeneralMods/DailyQuestAnywhere/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/DailyQuestAnywhere/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/DailyQuestAnywhere/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/Properties/AssemblyInfo.cs diff --git a/GeneralMods/DailyQuestAnywhere/README.md b/GeneralMods/OutDatedMods/DailyQuestAnywhere/README.md similarity index 100% rename from GeneralMods/DailyQuestAnywhere/README.md rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/README.md diff --git a/GeneralMods/DailyQuestAnywhere/manifest.json b/GeneralMods/OutDatedMods/DailyQuestAnywhere/manifest.json similarity index 100% rename from GeneralMods/DailyQuestAnywhere/manifest.json rename to GeneralMods/OutDatedMods/DailyQuestAnywhere/manifest.json diff --git a/GeneralMods/FarmersMarketStall/Class1.cs b/GeneralMods/OutDatedMods/FarmersMarketStall/Class1.cs similarity index 100% rename from GeneralMods/FarmersMarketStall/Class1.cs rename to GeneralMods/OutDatedMods/FarmersMarketStall/Class1.cs diff --git a/GeneralMods/FarmersMarketStall/FarmersMarketStall.csproj b/GeneralMods/OutDatedMods/FarmersMarketStall/FarmersMarketStall.csproj similarity index 100% rename from GeneralMods/FarmersMarketStall/FarmersMarketStall.csproj rename to GeneralMods/OutDatedMods/FarmersMarketStall/FarmersMarketStall.csproj diff --git a/GeneralMods/FarmersMarketStall/Framework/MapEvents/ShopInteractionEvent.cs b/GeneralMods/OutDatedMods/FarmersMarketStall/Framework/MapEvents/ShopInteractionEvent.cs similarity index 100% rename from GeneralMods/FarmersMarketStall/Framework/MapEvents/ShopInteractionEvent.cs rename to GeneralMods/OutDatedMods/FarmersMarketStall/Framework/MapEvents/ShopInteractionEvent.cs diff --git a/GeneralMods/FarmersMarketStall/Framework/MarketStall.cs b/GeneralMods/OutDatedMods/FarmersMarketStall/Framework/MarketStall.cs similarity index 100% rename from GeneralMods/FarmersMarketStall/Framework/MarketStall.cs rename to GeneralMods/OutDatedMods/FarmersMarketStall/Framework/MarketStall.cs diff --git a/GeneralMods/FarmersMarketStall/Framework/Menus/MarketStallMenu.cs b/GeneralMods/OutDatedMods/FarmersMarketStall/Framework/Menus/MarketStallMenu.cs similarity index 100% rename from GeneralMods/FarmersMarketStall/Framework/Menus/MarketStallMenu.cs rename to GeneralMods/OutDatedMods/FarmersMarketStall/Framework/Menus/MarketStallMenu.cs diff --git a/GeneralMods/FarmersMarketStall/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/FarmersMarketStall/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/FarmersMarketStall/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/FarmersMarketStall/Properties/AssemblyInfo.cs diff --git a/GeneralMods/FarmersMarketStall/manifest.json b/GeneralMods/OutDatedMods/FarmersMarketStall/manifest.json similarity index 100% rename from GeneralMods/FarmersMarketStall/manifest.json rename to GeneralMods/OutDatedMods/FarmersMarketStall/manifest.json diff --git a/GeneralMods/MapExampleRF1/Class1.cs b/GeneralMods/OutDatedMods/MapExampleRF1/Class1.cs similarity index 100% rename from GeneralMods/MapExampleRF1/Class1.cs rename to GeneralMods/OutDatedMods/MapExampleRF1/Class1.cs diff --git a/GeneralMods/MapExampleRF1/MapExampleRF1.csproj b/GeneralMods/OutDatedMods/MapExampleRF1/MapExampleRF1.csproj similarity index 100% rename from GeneralMods/MapExampleRF1/MapExampleRF1.csproj rename to GeneralMods/OutDatedMods/MapExampleRF1/MapExampleRF1.csproj diff --git a/GeneralMods/MapExampleRF1/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/MapExampleRF1/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/MapExampleRF1/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/MapExampleRF1/Properties/AssemblyInfo.cs diff --git a/GeneralMods/MapExampleRF1/manifest.json b/GeneralMods/OutDatedMods/MapExampleRF1/manifest.json similarity index 100% rename from GeneralMods/MapExampleRF1/manifest.json rename to GeneralMods/OutDatedMods/MapExampleRF1/manifest.json diff --git a/GeneralMods/MapExampleRF1/packages.config b/GeneralMods/OutDatedMods/MapExampleRF1/packages.config similarity index 100% rename from GeneralMods/MapExampleRF1/packages.config rename to GeneralMods/OutDatedMods/MapExampleRF1/packages.config diff --git a/GeneralMods/ModdedUtilitiesNetworking/Class1.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Class1.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Class1.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Class1.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Clients/CustomGalaxyClient.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Clients/CustomGalaxyClient.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Clients/CustomGalaxyClient.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Clients/CustomGalaxyClient.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Clients/CustomLidgrenClient.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Clients/CustomLidgrenClient.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Clients/CustomLidgrenClient.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Clients/CustomLidgrenClient.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Delegates/DelegateInfo.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Delegates/DelegateInfo.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Delegates/DelegateInfo.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Delegates/DelegateInfo.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Enums/MessageTypes.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Enums/MessageTypes.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Enums/MessageTypes.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Enums/MessageTypes.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/StrardewValleyExtentions/MessagesExtentions.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/StrardewValleyExtentions/MessagesExtentions.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/StrardewValleyExtentions/MessagesExtentions.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/StrardewValleyExtentions/MessagesExtentions.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/XNAExtentions.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/XNAExtentions.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/XNAExtentions.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Extentions/XNAExtentions.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Features/Stardew/MessageFeatures.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Features/Stardew/MessageFeatures.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Features/Stardew/MessageFeatures.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Features/Stardew/MessageFeatures.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Messages/OutgoingMessageBase.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Messages/OutgoingMessageBase.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Messages/OutgoingMessageBase.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Messages/OutgoingMessageBase.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferReadStream.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferReadStream.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferReadStream.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferReadStream.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferWriteStream.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferWriteStream.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferWriteStream.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Network/NetBufferWriteStream.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomLidgrenServer.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Servers/CustomLidgrenServer.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomLidgrenServer.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Framework/Servers/CustomLidgrenServer.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/ModdedUtilitiesNetworking.csproj b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/ModdedUtilitiesNetworking.csproj similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/ModdedUtilitiesNetworking.csproj rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/ModdedUtilitiesNetworking.csproj diff --git a/GeneralMods/ModdedUtilitiesNetworking/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/Properties/AssemblyInfo.cs diff --git a/GeneralMods/ModdedUtilitiesNetworking/manifest.json b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/manifest.json similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/manifest.json rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/manifest.json diff --git a/GeneralMods/ModdedUtilitiesNetworking/packages.config b/GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/packages.config similarity index 100% rename from GeneralMods/ModdedUtilitiesNetworking/packages.config rename to GeneralMods/OutDatedMods/ModdedUtilitiesNetworking/packages.config diff --git a/GeneralMods/MuseumRearranger/Framework/ModConfig.cs b/GeneralMods/OutDatedMods/MuseumRearranger/Framework/ModConfig.cs similarity index 100% rename from GeneralMods/MuseumRearranger/Framework/ModConfig.cs rename to GeneralMods/OutDatedMods/MuseumRearranger/Framework/ModConfig.cs diff --git a/GeneralMods/MuseumRearranger/Framework/NewMuseumMenu.cs b/GeneralMods/OutDatedMods/MuseumRearranger/Framework/NewMuseumMenu.cs similarity index 100% rename from GeneralMods/MuseumRearranger/Framework/NewMuseumMenu.cs rename to GeneralMods/OutDatedMods/MuseumRearranger/Framework/NewMuseumMenu.cs diff --git a/GeneralMods/MuseumRearranger/MuseumRearranger.cs b/GeneralMods/OutDatedMods/MuseumRearranger/MuseumRearranger.cs similarity index 100% rename from GeneralMods/MuseumRearranger/MuseumRearranger.cs rename to GeneralMods/OutDatedMods/MuseumRearranger/MuseumRearranger.cs diff --git a/GeneralMods/MuseumRearranger/MuseumRearranger.csproj b/GeneralMods/OutDatedMods/MuseumRearranger/MuseumRearranger.csproj similarity index 100% rename from GeneralMods/MuseumRearranger/MuseumRearranger.csproj rename to GeneralMods/OutDatedMods/MuseumRearranger/MuseumRearranger.csproj diff --git a/GeneralMods/MuseumRearranger/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/MuseumRearranger/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/MuseumRearranger/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/MuseumRearranger/Properties/AssemblyInfo.cs diff --git a/GeneralMods/MuseumRearranger/ReadMe.md b/GeneralMods/OutDatedMods/MuseumRearranger/ReadMe.md similarity index 100% rename from GeneralMods/MuseumRearranger/ReadMe.md rename to GeneralMods/OutDatedMods/MuseumRearranger/ReadMe.md diff --git a/GeneralMods/MuseumRearranger/manifest.json b/GeneralMods/OutDatedMods/MuseumRearranger/manifest.json similarity index 100% rename from GeneralMods/MuseumRearranger/manifest.json rename to GeneralMods/OutDatedMods/MuseumRearranger/manifest.json diff --git a/GeneralMods/NoMorePets/NoMorePets.cs b/GeneralMods/OutDatedMods/NoMorePets/NoMorePets.cs similarity index 100% rename from GeneralMods/NoMorePets/NoMorePets.cs rename to GeneralMods/OutDatedMods/NoMorePets/NoMorePets.cs diff --git a/GeneralMods/NoMorePets/NoMorePets.csproj b/GeneralMods/OutDatedMods/NoMorePets/NoMorePets.csproj similarity index 100% rename from GeneralMods/NoMorePets/NoMorePets.csproj rename to GeneralMods/OutDatedMods/NoMorePets/NoMorePets.csproj diff --git a/GeneralMods/NoMorePets/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/NoMorePets/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/NoMorePets/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/NoMorePets/Properties/AssemblyInfo.cs diff --git a/GeneralMods/NoMorePets/README.md b/GeneralMods/OutDatedMods/NoMorePets/README.md similarity index 100% rename from GeneralMods/NoMorePets/README.md rename to GeneralMods/OutDatedMods/NoMorePets/README.md diff --git a/GeneralMods/NoMorePets/manifest.json b/GeneralMods/OutDatedMods/NoMorePets/manifest.json similarity index 100% rename from GeneralMods/NoMorePets/manifest.json rename to GeneralMods/OutDatedMods/NoMorePets/manifest.json diff --git a/GeneralMods/SundropMapEvents/Class1.cs b/GeneralMods/OutDatedMods/SundropMapEvents/Class1.cs similarity index 100% rename from GeneralMods/SundropMapEvents/Class1.cs rename to GeneralMods/OutDatedMods/SundropMapEvents/Class1.cs diff --git a/GeneralMods/SundropMapEvents/Properties/AssemblyInfo.cs b/GeneralMods/OutDatedMods/SundropMapEvents/Properties/AssemblyInfo.cs similarity index 100% rename from GeneralMods/SundropMapEvents/Properties/AssemblyInfo.cs rename to GeneralMods/OutDatedMods/SundropMapEvents/Properties/AssemblyInfo.cs diff --git a/GeneralMods/SundropMapEvents/SundropMapEvents.csproj b/GeneralMods/OutDatedMods/SundropMapEvents/SundropMapEvents.csproj similarity index 100% rename from GeneralMods/SundropMapEvents/SundropMapEvents.csproj rename to GeneralMods/OutDatedMods/SundropMapEvents/SundropMapEvents.csproj diff --git a/GeneralMods/SundropMapEvents/manifest.json b/GeneralMods/OutDatedMods/SundropMapEvents/manifest.json similarity index 100% rename from GeneralMods/SundropMapEvents/manifest.json rename to GeneralMods/OutDatedMods/SundropMapEvents/manifest.json diff --git a/GeneralMods/SimpleSoundManager/Framework/XACTSound.cs b/GeneralMods/SimpleSoundManager/Framework/XACTSound.cs index a9e6379e..60334621 100644 --- a/GeneralMods/SimpleSoundManager/Framework/XACTSound.cs +++ b/GeneralMods/SimpleSoundManager/Framework/XACTSound.cs @@ -10,7 +10,7 @@ namespace SimpleSoundManager.Framework public string soundName; readonly WaveBank vanillaWaveBank; readonly ISoundBank vanillaSoundBank; - readonly Cue song; + readonly ICue song; /// Make a new Sound Manager to play and manage sounds in a modded wave bank. /// The reference to the wave bank in the mod's asset folder. diff --git a/GeneralMods/SimpleSoundManager/Framework/XactMusicPair.cs b/GeneralMods/SimpleSoundManager/Framework/XactMusicPair.cs index 84129dc1..fafef9bd 100644 --- a/GeneralMods/SimpleSoundManager/Framework/XactMusicPair.cs +++ b/GeneralMods/SimpleSoundManager/Framework/XactMusicPair.cs @@ -19,8 +19,8 @@ namespace SimpleSoundManager wavBankPath = Path.Combine(helper.DirectoryPath, wavBankPath); soundBankPath = Path.Combine(helper.DirectoryPath, soundBankPath); - this.waveBank = new WaveBank(Game1.audioEngine, wavBankPath); - this.soundBank = new SoundBankWrapper(new SoundBank(Game1.audioEngine, soundBankPath)); + this.waveBank = new WaveBank(Game1.audioEngine.Engine, wavBankPath); + this.soundBank = new SoundBankWrapper(new SoundBank(Game1.audioEngine.Engine, soundBankPath)); } } } diff --git a/GeneralMods/SimpleSoundManager/manifest.json b/GeneralMods/SimpleSoundManager/manifest.json index b80f64b4..2ebb0d80 100644 --- a/GeneralMods/SimpleSoundManager/manifest.json +++ b/GeneralMods/SimpleSoundManager/manifest.json @@ -1,7 +1,7 @@ { "Name": "Simple Sound Manager", "Author": "Alpha_Omegasis", - "Version": "2.2.0", + "Version": "2.3.0", "Description": "A simple framework to play sounds from wave banks and wav files.", "UniqueID": "Omegasis.SimpleSoundManager", "EntryDll": "SimpleSoundManager.dll", diff --git a/GeneralMods/StardewMods.sln b/GeneralMods/StardewMods.sln index 0a8bcec3..c6cd0630 100644 --- a/GeneralMods/StardewMods.sln +++ b/GeneralMods/StardewMods.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2036 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29215.179 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoSpeed", "AutoSpeed\AutoSpeed.csproj", "{57E7D17E-C237-448B-A50F-CFB67F9BB146}" EndProject @@ -13,18 +13,12 @@ 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}") = "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}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HappyBirthday", "HappyBirthday\HappyBirthday.csproj", "{A7A4B67B-3CD7-421F-A4A7-2D656F0AB4D9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoreRain", "MoreRain\MoreRain.csproj", "{45721A43-630A-461F-9A50-E47D3D1926D0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MuseumRearranger", "MuseumRearranger\MuseumRearranger.csproj", "{920D74FE-156F-4321-B461-5AC7ED7EF9C9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoMorePets", "NoMorePets\NoMorePets.csproj", "{2D41E7D7-B4B7-420F-ACAF-8F687E876008}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NightOwl", "NightOwl\NightOwl.csproj", "{C7E7043F-C823-4FDD-9F4E-7CC255751246}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaveAnywhere", "SaveAnywhere\SaveAnywhere.csproj", "{E17855AD-DBAF-49BD-B3E2-9899403252F6}" @@ -152,18 +146,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 - {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 - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.Debug|x86.Build.0 = Debug|x86 - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.Release|Any CPU.Build.0 = Release|Any CPU - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.Release|x86.ActiveCfg = Release|x86 - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.Release|x86.Build.0 = Release|x86 - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.x86|Any CPU.ActiveCfg = x86|Any CPU - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.x86|Any CPU.Build.0 = x86|Any CPU - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.x86|x86.ActiveCfg = x86|x86 - {AC4B84F5-31E4-4A55-B13F-A5189C552343}.x86|x86.Build.0 = x86|x86 {1DBB583D-4A4F-4A46-8CC5-42017C93D292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DBB583D-4A4F-4A46-8CC5-42017C93D292}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DBB583D-4A4F-4A46-8CC5-42017C93D292}.Debug|x86.ActiveCfg = Debug|x86 @@ -200,30 +182,6 @@ Global {45721A43-630A-461F-9A50-E47D3D1926D0}.x86|Any CPU.Build.0 = x86|Any CPU {45721A43-630A-461F-9A50-E47D3D1926D0}.x86|x86.ActiveCfg = x86|x86 {45721A43-630A-461F-9A50-E47D3D1926D0}.x86|x86.Build.0 = x86|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Debug|x86.ActiveCfg = Debug|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Debug|x86.Build.0 = Debug|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Release|Any CPU.Build.0 = Release|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Release|x86.ActiveCfg = Release|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.Release|x86.Build.0 = Release|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.x86|Any CPU.ActiveCfg = x86|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.x86|Any CPU.Build.0 = x86|Any CPU - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.x86|x86.ActiveCfg = x86|x86 - {920D74FE-156F-4321-B461-5AC7ED7EF9C9}.x86|x86.Build.0 = x86|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Debug|x86.ActiveCfg = Debug|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Debug|x86.Build.0 = Debug|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Release|Any CPU.Build.0 = Release|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Release|x86.ActiveCfg = Release|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.Release|x86.Build.0 = Release|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.x86|Any CPU.ActiveCfg = x86|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.x86|Any CPU.Build.0 = x86|Any CPU - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.x86|x86.ActiveCfg = x86|x86 - {2D41E7D7-B4B7-420F-ACAF-8F687E876008}.x86|x86.Build.0 = x86|x86 {C7E7043F-C823-4FDD-9F4E-7CC255751246}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7E7043F-C823-4FDD-9F4E-7CC255751246}.Debug|Any CPU.Build.0 = Debug|Any CPU {C7E7043F-C823-4FDD-9F4E-7CC255751246}.Debug|x86.ActiveCfg = Debug|x86 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Config.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Config.cs index 022a16e9..fc5efe0a 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Config.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Config.cs @@ -6,8 +6,11 @@ namespace StardewSymphonyRemastered /// A class that handles all of the config files for this mod. public class Config { - /// Whether to show debug logs in the SMAPI console. - public bool EnableDebugLog { get; set; } = false; + + /// + /// If the current song hasn't finished playing just ignore a music swap until it finishes. + /// + public bool WaitForSongToFinishBeforeMusicSwap { get; set; } = true; /// The minimum delay between songs in milliseconds. public int MinimumDelayBetweenSongsInMilliseconds { get; set; } = 5000; @@ -21,11 +24,12 @@ namespace StardewSymphonyRemastered /// Whether to completely disable the Stardew Valley OST. public bool DisableStardewMusic { get; set; } = false; - public List LocationsToIgnoreWarpMusicChange { get; set; } = new List(); + /// Whether to show debug logs in the SMAPI console. + public bool EnableDebugLog { get; set; } = false; - public Config() - { - this.LocationsToIgnoreWarpMusicChange = new List(); - } + /// + /// Loctions that ignore the warp music change so that the music will continue to play from the previous location. + /// + public SortedDictionary LocationsToIgnoreWarpMusicChange { get; set; } = new SortedDictionary(); } } diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/Menus/MusicManagerMenuV2.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/Menus/MusicManagerMenuV2.cs index 552766ac..63fe34ca 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/Menus/MusicManagerMenuV2.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/Menus/MusicManagerMenuV2.cs @@ -13,6 +13,7 @@ using StardewValley.Menus; using StardustCore.Animations; using StardustCore.UIUtilities; using StardustCore.UIUtilities.MenuComponents; +using StardustCore.UIUtilities.MenuComponents.ComponentsV1; using StardustCore.UIUtilities.MenuComponents.Delegates; using StardustCore.UIUtilities.MenuComponents.Delegates.Functionality; using StardustCore.UIUtilities.SpriteFonts; @@ -115,7 +116,7 @@ namespace StardewSymphonyRemastered.Framework.Menus /// The save button that saves the current options to the song. /// public Button saveButton; - + public Button lastPageButton; public Button nextPageButton; @@ -878,7 +879,7 @@ namespace StardewSymphonyRemastered.Framework.Menus } } - if(this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { int amountToShow = 6; this.updateFancyButtons(); @@ -979,7 +980,7 @@ namespace StardewSymphonyRemastered.Framework.Menus Game1.playSound("shwip"); } - if(this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { if ((this.conditionalViewPageIndex + 1) * 6 >= this.fancyButtons.Count) return; this.conditionalViewPageIndex++; @@ -1163,7 +1164,7 @@ namespace StardewSymphonyRemastered.Framework.Menus if (this.conditionalViewButton.containsPoint(x, y) && this.drawMode == DrawMode.DifferentSelectionTypesModePage) { - this.hoverText = "View all conditions for this song."+Environment.NewLine+"View all the possible conditions for when this song should play."; + this.hoverText = "View all conditions for this song." + Environment.NewLine + "View all the possible conditions for when this song should play."; hoverTextOver = true; } @@ -1185,7 +1186,7 @@ namespace StardewSymphonyRemastered.Framework.Menus } //Display song conditional as hover text - if(this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { int amountToShow = 6; @@ -1221,9 +1222,9 @@ namespace StardewSymphonyRemastered.Framework.Menus { builder.Append(s); builder.Append(Environment.NewLine); - } + } builder.Append(Environment.NewLine); - this.hoverText =builder.ToString(); + this.hoverText = builder.ToString(); hoverTextOver = true; } } @@ -1796,11 +1797,21 @@ namespace StardewSymphonyRemastered.Framework.Menus catch { } } - //Allow 8 songs to be displayed per page. - Texture2DExtended texture = StardewSymphony.textureManager.getTexture("HouseIcon"); - float scale = 1.00f / (texture.getTexture().Width / 64f); - Rectangle srcRect = new Rectangle(0, 0, texture.getTexture().Width, texture.getTexture().Height); - this.fancyButtons.Add(new Button(locName, new Rectangle((int)placement2.X + 25, (int)placement2.Y + ((i % 6) * 100) + 100, 64, 64), texture, locName, srcRect, scale, new Animation(srcRect), Color.White, Color.White, new ButtonFunctionality(null, null, null))); + Texture2DExtended locTexture = StardewSymphony.textureManager.getTexture(locName,false); + if (locTexture != null) + { + float scale = 1.00f / (locTexture.getTexture().Width / 64f); + Rectangle srcRect = new Rectangle(0, 0, locTexture.getTexture().Width, locTexture.getTexture().Height); + this.fancyButtons.Add(new Button(locName, new Rectangle((int)placement2.X + 25, (int)placement2.Y + ((i % 6) * 100) + 100, 64, 64), locTexture, locName, srcRect, scale, new Animation(srcRect), Color.White, Color.White, new ButtonFunctionality(null, null, null))); + } + else + { + //Allow 8 songs to be displayed per page. + Texture2DExtended texture = StardewSymphony.textureManager.getTexture("HouseIcon"); + float scale = 1.00f / (texture.getTexture().Width / 64f); + Rectangle srcRect = new Rectangle(0, 0, texture.getTexture().Width, texture.getTexture().Height); + this.fancyButtons.Add(new Button(locName, new Rectangle((int)placement2.X + 25, (int)placement2.Y + ((i % 6) * 100) + 100, 64, 64), texture, locName, srcRect, scale, new Animation(srcRect), Color.White, Color.White, new ButtonFunctionality(null, null, null))); + } } } @@ -1865,12 +1876,12 @@ namespace StardewSymphonyRemastered.Framework.Menus } } - if(this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { this.fancyButtons.Clear(); //Vector4 placement = new Vector4((Game1.viewport.Width / 3), (Game1.viewport.Height / 4) + 128, this.width, this.height / 2); Vector4 placement2 = new Vector4(this.width * .2f + 400, this.height * .05f, 5 * 100, this.height * .9f); - Dictionary conditionals= this.CurrentMusicPack.SongInformation.songs[this.currentSelectedSong.name].songConditionals; + Dictionary conditionals = this.CurrentMusicPack.SongInformation.songs[this.currentSelectedSong.name].songConditionals; for (int i = 0; i < conditionals.Count; i++) { //Allow 8 songs to be displayed per page. @@ -1891,7 +1902,7 @@ namespace StardewSymphonyRemastered.Framework.Menus { int updateNumber = 20; - if (this.drawMode == DrawMode.AlbumFancySelection || this.drawMode == DrawMode.SongSelectionMode || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.TimeSelection || this.drawMode == DrawMode.ConditionalViewMode || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.EventSelection || this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.AlbumFancySelection || this.drawMode == DrawMode.SongSelectionMode || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.TimeSelection || this.drawMode == DrawMode.ConditionalViewMode || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.EventSelection || this.drawMode == DrawMode.ConditionalViewMode) { if (this.framesSinceLastUpdate == updateNumber) { @@ -2015,7 +2026,7 @@ namespace StardewSymphonyRemastered.Framework.Menus /// public void goBack() { - if (this.drawMode == DrawMode.DaySelection || this.drawMode == DrawMode.EventSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.SeasonSelection || this.drawMode == DrawMode.TimeSelection || this.drawMode == DrawMode.WeatherSelection || this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.DaySelection || this.drawMode == DrawMode.EventSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.SeasonSelection || this.drawMode == DrawMode.TimeSelection || this.drawMode == DrawMode.WeatherSelection || this.drawMode == DrawMode.ConditionalViewMode) { this.drawMode = DrawMode.DifferentSelectionTypesModePage; this.updateFancyButtons(); @@ -2313,7 +2324,7 @@ namespace StardewSymphonyRemastered.Framework.Menus b.DrawString(Game1.smallFont, "Page: " + (this.locationPageIndex + 1) + " of " + ((this.fancyButtons.Count / amountToShow) + ((this.fancyButtons.Count % amountToShow == 0 ? 0 : 1))), this.getFixedPositionFromMenu(pagePlacement), Color.White); } - if(this.drawMode == DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { this.drawDialogueBoxBackground((int)placement.X, (int)placement.Y, (int)placement.Z, (int)placement.W, new Color(new Vector4(this.dialogueBoxBackgroundColor.ToVector3(), 255))); this.drawDialogueBoxBackground((int)placement2.X, (int)placement2.Y, (int)placement2.Z, (int)placement2.W, new Color(new Vector4(this.dialogueBoxBackgroundColor.ToVector3(), 255))); @@ -2389,7 +2400,7 @@ namespace StardewSymphonyRemastered.Framework.Menus if (this.currentlySelectedMenu != null) this.currentlySelectedMenu.draw(b); } - if(this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.ConditionalViewMode) { this.backButton.draw(b); } @@ -2402,7 +2413,7 @@ namespace StardewSymphonyRemastered.Framework.Menus this.conditionalViewButton.draw(b); } - if (this.drawMode == DrawMode.AlbumFancySelection || this.drawMode == DrawMode.EventSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.SongSelectionMode || this.drawMode == DrawMode.TimeSelection || this.drawMode== DrawMode.ConditionalViewMode) + if (this.drawMode == DrawMode.AlbumFancySelection || this.drawMode == DrawMode.EventSelection || this.drawMode == DrawMode.FestivalSelection || this.drawMode == DrawMode.LocationSelection || this.drawMode == DrawMode.MenuSelection || this.drawMode == DrawMode.SongSelectionMode || this.drawMode == DrawMode.TimeSelection || this.drawMode == DrawMode.ConditionalViewMode) { this.lastPageButton.draw(b); this.nextPageButton.draw(b); diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs index 2c79b5b4..78ef0fea 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs @@ -165,7 +165,15 @@ namespace StardewSymphonyRemastered.Framework.V2 public bool selectMusic(string songListKey, bool warpCheck = false) { - if (warpCheck == true && StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.Contains(Game1.player.currentLocation.Name)) + if (this.CurrentMusicPack != null) + { + if (this.CurrentMusicPack.IsPlaying() && StardewSymphony.Config.WaitForSongToFinishBeforeMusicSwap) + { + StardewSymphony.ModMonitor.Log("Waiting for music to finish before playing another song."); + return false; + } + } + if (warpCheck == true && StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.ContainsKey(Game1.player.currentLocation.Name)) { return false; } @@ -201,7 +209,7 @@ namespace StardewSymphonyRemastered.Framework.V2 { if (song.canBePlayed(songListKey)) { - foreach(SongConditionals con in song.songConditionals.Values) + foreach (SongConditionals con in song.songConditionals.Values) { if (con.isLocationSpecific() == false) { @@ -297,7 +305,7 @@ namespace StardewSymphonyRemastered.Framework.V2 //used to swap the music packs and stop the last playing song. this.SwapMusicPacks(musicPackPair.Key.Name); - string songName = musicPackPair.Value; + string songName = musicPackPair.Value; this.CurrentMusicPack.PlaySong(songName); return true; } diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs index 91b79f99..2593c53f 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs @@ -227,11 +227,21 @@ namespace StardewSymphonyRemastered.Framework.V2 foreach (var v in Game1.locations) { locations.Add(v.Name); + + if (StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.ContainsKey(v.Name)==false) + { + StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.Add(v.Name, false); + } + if (StardewSymphony.Config.EnableDebugLog) StardewSymphony.ModMonitor.Log("Adding in song triggers for location: " + v.Name); } - locations.Add("UndergroundMine Floors 1-39"); + StardewSymphony.ModHelper.WriteConfig(StardewSymphony.Config); + + locations.Add("UndergroundMine Floors 1-10"); + locations.Add("UndergroundMine Floors 11-29"); + locations.Add("UndergroundMine Floors 31-39"); locations.Add("UndergroundMine Floors 40-69"); locations.Add("UndergroundMine Floors 70-79"); locations.Add("UndergroundMine Floors 80-120"); diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphony.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphony.cs index d125e17d..1d9de134 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphony.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphony.cs @@ -1,3 +1,4 @@ +using System.IO; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using StardewModdingAPI; @@ -51,6 +52,8 @@ namespace StardewSymphonyRemastered helper.Events.Display.MenuChanged += this.OnMenuChanged; + + musicManager = new MusicManagerV2(); textureManager = new TextureManager("StardewSymphony"); @@ -170,7 +173,7 @@ namespace StardewSymphonyRemastered { Game1.currentSong.Stop(AudioStopOptions.Immediate); //stop the normal songs from playing over the new songs Game1.currentSong.Stop(AudioStopOptions.AsAuthored); - Game1.nextMusicTrack = ""; //same as above line + Game1.requestedMusicTrack = ""; //same as above line } } else @@ -213,6 +216,8 @@ namespace StardewSymphonyRemastered return new Texture2DExtended(this.Helper, this.ModManifest, $"assets/{name}"); } + textureManager.searchForTextures(this.Helper,this.ModManifest,Path.Combine("assets","Locations")); + textureManager.addTexture("SaveIcon", LoadTexture("SaveIcon.png")); textureManager.addTexture("LastPage", LoadTexture("lastPageButton.png")); textureManager.addTexture("NextPage", LoadTexture("nextPageButton.png")); diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index 08c2e6e7..3eb331a5 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -233,6 +233,10 @@ Always + + + PreserveNewest + Always @@ -329,9 +333,7 @@ False - - - + \ No newline at end of file diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AbandonedJojaMart.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AbandonedJojaMart.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5803487332e40d285f98639bd4c3e59e98aa4b GIT binary patch literal 420 zcmV;V0bBlwP)Px$UP(kjR9J;$U>F6XV59>^3=sj%{|p==aBfYECqv7U?IaoM9r%gijkZ05$kl@k zhTP$(`hUD(VEAwyZZ8XlZVnNKnU@bSFfcGMq(^l#Ffjaq^N9hQ>I~qP`!!u)c-+~J zqCZ{N4n;i^Ap=hyJ4dwT~;>6z==2ccQT?y1bcz;l*LNy#zym z6tMM9G=9sm0IE6w<_J;%W+FrficYBf`}=UK!zG6Y5DtO+`w#}hXhkRd4#Or-wgb=s z%%}JFp;`iCrJxdX5TAuMQdB|3C@0?~j!7a$veY#E`{PJ&v(*^rQB*c^xh z1an?sSc@ixJqli5$8G|$II_j)SrCWinrb>2;@Cq#R1;zuHW~(S#V?kSz-2jZ2fzR> z%kfx7iscLp_;LZVh1e{o62R>MT)rj&5b`|(0})L!ngFEsz$h36qW}PU5Qa3-Nj4<_ O0000Px$1W80eR9J;$U>F6XV59>^bOAxlg#YiE1mOJXsRj(0voDZs0lI#{e;*j$Uta*X zmjzwJdnN$}hT47zXWv-{28JsLJ~`mULKOY)n+s8-nF#4$w`vRdmJ^{LBMKO_3;r`$ z$53P`UT|~?1H;t`aC-@c0Ik7*I{+gQVt{00RQ}wvxYgm3!vhG1z}&M4gJE>CF@A?( zlPB8&=m6%^xo1%=fw6JPQ_TTX27}xI*n$uiw73!-x;%ksz@H0{4M4VxP--VZE#YiP z$TDmWBmt1029PaA&w?ZX!XbbQ;EG=oLxOwb%7 literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json index c60dc83a..fdc55b07 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json @@ -1,7 +1,7 @@ { "Name": "Stardew Symphony Remastered", "Author": "Alpha_Omegasis", - "Version": "3.0.1", + "Version": "3.1.0", "Description": "Adding more music to the game one beep at a time. Now with streaming!", "UniqueID": "Omegasis.StardewSymphonyRemastered", "EntryDll": "StardewSymphonyRemastered.dll", diff --git a/GeneralMods/StardustCore/IlluminateFramework/Colors.cs b/GeneralMods/StardustCore/IlluminateFramework/Colors.cs index e0bf28fb..18713cbc 100644 --- a/GeneralMods/StardustCore/IlluminateFramework/Colors.cs +++ b/GeneralMods/StardustCore/IlluminateFramework/Colors.cs @@ -599,7 +599,7 @@ namespace StardustCore.IlluminateFramework { if (colorRandomizer == null) { - colorRandomizer = new Random(Game1.player.money + Game1.tileSize + Game1.dayOfMonth + (int)Game1.stats.stepsTaken); + colorRandomizer = new Random(Game1.player.Money + Game1.tileSize + Game1.dayOfMonth + (int)Game1.stats.stepsTaken); } int r = colorRandomizer.Next(0, 255); int g = colorRandomizer.Next(0, 255); diff --git a/GeneralMods/StardustCore/ModConfig.cs b/GeneralMods/StardustCore/ModConfig.cs index 45f91f72..6d8bbadb 100644 --- a/GeneralMods/StardustCore/ModConfig.cs +++ b/GeneralMods/StardustCore/ModConfig.cs @@ -4,8 +4,6 @@ namespace StardustCore { public bool enableMultiplayerHack { get; set; } = false; public string modularMenuKey { get; set; } = "P"; - - public ModConfig() { } } } diff --git a/GeneralMods/StardustCore/UIUtilities/MenuComponents/ComponentsV2/Buttons/ItemDisplayButton.cs b/GeneralMods/StardustCore/UIUtilities/MenuComponents/ComponentsV2/Buttons/ItemDisplayButton.cs index 729e823f..ce05bdc9 100644 --- a/GeneralMods/StardustCore/UIUtilities/MenuComponents/ComponentsV2/Buttons/ItemDisplayButton.cs +++ b/GeneralMods/StardustCore/UIUtilities/MenuComponents/ComponentsV2/Buttons/ItemDisplayButton.cs @@ -124,7 +124,7 @@ namespace StardustCore.UIUtilities.MenuComponents.ComponentsV2.Buttons if(this.background!=null)this.background.draw(b, this.scale, Depth,Alpha); if (this.item != null) { - this.item.drawInMenu(b, this.position, 1f, Alpha, Depth, this.drawStackNumber, this.drawColor, DrawShadow); + this.item.drawInMenu(b, this.position, 1f, Alpha, Depth, StackDrawType.Draw, this.drawColor, DrawShadow); } } @@ -141,14 +141,14 @@ namespace StardustCore.UIUtilities.MenuComponents.ComponentsV2.Buttons if (this.background != null) this.background.draw(b,Position,this.scale, Depth, Alpha); if (this.item != null) { - this.item.drawInMenu(b, Position, 1f, Alpha, Depth, this.drawStackNumber, this.drawColor, DrawShadow); + this.item.drawInMenu(b, Position, 1f, Alpha, Depth, StackDrawType.Draw, this.drawColor, DrawShadow); } } public void draw(SpriteBatch b,float ItemScale ,float Depth, float Alpha, bool DrawShadow) { this.background.draw(b, this.scale, Depth, Alpha); - if (this.item != null) this.item.drawInMenu(b, this.position, ItemScale, Alpha, Depth, this.drawStackNumber, this.drawColor, DrawShadow); + if (this.item != null) this.item.drawInMenu(b, this.position, ItemScale, Alpha, Depth, StackDrawType.Draw, this.drawColor, DrawShadow); } /// @@ -161,7 +161,7 @@ namespace StardustCore.UIUtilities.MenuComponents.ComponentsV2.Buttons /// Should the shadow be drawn for the item? public void drawJustItem(SpriteBatch b,float Scale,float Depth, float Alpha, bool DrawShadow) { - if (this.item != null) this.item.drawInMenu(b, this.position, Scale, Alpha, Depth, this.drawStackNumber, this.drawColor, DrawShadow); + if (this.item != null) this.item.drawInMenu(b, this.position, Scale, Alpha, Depth, StackDrawType.Draw, this.drawColor, DrawShadow); } public bool receiveLeftClick(int x, int y) diff --git a/GeneralMods/StardustCore/UIUtilities/TextureManager.cs b/GeneralMods/StardustCore/UIUtilities/TextureManager.cs index 24c00499..713da76b 100644 --- a/GeneralMods/StardustCore/UIUtilities/TextureManager.cs +++ b/GeneralMods/StardustCore/UIUtilities/TextureManager.cs @@ -35,14 +35,31 @@ namespace StardustCore.UIUtilities } /// Returns a Texture2DExtended held by the manager. - public Texture2DExtended getTexture(string name) + public Texture2DExtended getTexture(string name,bool ThrowError=true) { - foreach (var v in this.textures) + if (this.textures.ContainsKey(name)) { - if (v.Key == name) - return v.Value.Copy(); + return this.textures[name].Copy(); } - throw new Exception("Error, texture name not found!!!"); + + if (ThrowError) + { + throw new Exception("Error, texture name not found!!!"); + } + else + { + return null; + } + } + + /// + /// Checks if the texture exists + /// + /// + /// + public bool containsTexture(string name) + { + return this.textures.ContainsKey(name); } diff --git a/GeneralMods/StardustCore/manifest.json b/GeneralMods/StardustCore/manifest.json index 901157d5..520808d0 100644 --- a/GeneralMods/StardustCore/manifest.json +++ b/GeneralMods/StardustCore/manifest.json @@ -1,10 +1,10 @@ { "Name": "StardustCore", "Author": "Alpha_Omegasis", - "Version": "2.2.1", + "Version": "2.2.2", "Description": "A core mod that allows for other mods of mine to be run.", "UniqueID": "Omegasis.StardustCore", "EntryDll": "StardustCore.dll", - "MinimumApiVersion": "2.10.1", - "UpdateKeys": [] + "MinimumApiVersion": "3.0.0", + "UpdateKeys": [ "Nexus:2341" ] } diff --git a/GeneralMods/TimeFreeze/Framework/ModConfig.cs b/GeneralMods/TimeFreeze/Framework/ModConfig.cs index f4d1c87e..760e4053 100644 --- a/GeneralMods/TimeFreeze/Framework/ModConfig.cs +++ b/GeneralMods/TimeFreeze/Framework/ModConfig.cs @@ -5,22 +5,13 @@ namespace Omegasis.TimeFreeze.Framework /// The mod configuration. internal class ModConfig { - public List LocationsToIgnoreTimeFreeze { get; set; } = new List(); + //public List LocationsToIgnoreTimeFreeze { get; set; } = new List(); - /// Whether time should be unfrozen while the player is swimming. - public bool PassTimeWhileSwimming { get; set; } = true; + public SortedDictionary freezeTimeInThisLocation { get; set; } = new SortedDictionary(); /// Whether time should be unfrozen while the player is swimming in the vanilla bathhouse. public bool PassTimeWhileSwimmingInBathhouse { get; set; } = true; - /// Whether time passes normally inside the mine. - public bool PassTimeWhileInsideMine { get; set; } = true; - - /// Whether time passes normally inside the skull cavern. - public bool PassTimeWhileInsideSkullCave { get; set; } = true; - - public bool PassTimeWhileInNightMarketSubmarine { get; set; } = true; - /// Checks if just one player meets the conditions to freeze time, and then freeze time. public bool freezeIfEvenOnePlayerMeetsTimeFreezeConditions { get; set; } = false; diff --git a/GeneralMods/TimeFreeze/TimeFreeze.cs b/GeneralMods/TimeFreeze/TimeFreeze.cs index aea713e1..c5225c04 100644 --- a/GeneralMods/TimeFreeze/TimeFreeze.cs +++ b/GeneralMods/TimeFreeze/TimeFreeze.cs @@ -24,8 +24,27 @@ namespace Omegasis.TimeFreeze public override void Entry(IModHelper helper) { this.Config = helper.ReadConfig(); - helper.Events.GameLoop.UpdateTicked += this.OnUpdateTicked; + helper.Events.GameLoop.SaveLoaded += this.GameLoop_SaveLoaded; + } + + private void GameLoop_SaveLoaded(object sender, SaveLoadedEventArgs e) + { + foreach (GameLocation loc in Game1.locations) + { + if (this.Config.freezeTimeInThisLocation.ContainsKey(loc.Name) == false) + { + if (loc.IsOutdoors) + { + this.Config.freezeTimeInThisLocation.Add(loc.Name, false); + } + else + { + this.Config.freezeTimeInThisLocation.Add(loc.Name, true); + } + } + } + this.Helper.WriteConfig(this.Config); } @@ -122,39 +141,35 @@ namespace Omegasis.TimeFreeze /// The location to check. private bool ShouldFreezeTime(Farmer player, GameLocation location) { - if (this.Config.LocationsToIgnoreTimeFreeze.Contains(location.Name)) return false; - - if (this.Config.PassTimeWhileInsideMine) + if (Game1.showingEndOfNightStuff) return false; + if (this.Config.freezeTimeInThisLocation.ContainsKey(location.Name)) { if (location.Name == "Mine" || location.Name.StartsWith("UndergroundMine")) - return false; - } + { + return this.Config.freezeTimeInThisLocation["Mine"]; + } - if (this.Config.PassTimeWhileInsideSkullCave) - { if (location.Name == "SkullCave" || location.Name.StartsWith("SkullCave")) - return false; - } - else - { - if (location.Name == "SkullCave" || location.Name.StartsWith("SkullCave")) - return true; + { + return this.Config.freezeTimeInThisLocation["SkullCave"]; + } + + if (player.swimming.Value) + { + if (this.Config.PassTimeWhileSwimmingInBathhouse && location is BathHousePool) + return false; + } + + return this.Config.freezeTimeInThisLocation[location.Name]; } - if (this.Config.PassTimeWhileInNightMarketSubmarine && location is Submarine) return false; //Pass time in the night market submarine. - + //If for some reason the location wasn't accounted for then just freeze time there by default. if (location.IsOutdoors) return false; - - if (player.swimming.Value) + else { - if (this.Config.PassTimeWhileSwimmingInBathhouse && location is BathHousePool) - return false; - if (this.Config.PassTimeWhileSwimming) - return false; + return true; } - - return true; } } } diff --git a/GeneralMods/TimeFreeze/manifest.json b/GeneralMods/TimeFreeze/manifest.json index 38608f8e..048d885b 100644 --- a/GeneralMods/TimeFreeze/manifest.json +++ b/GeneralMods/TimeFreeze/manifest.json @@ -1,10 +1,10 @@ { "Name": "Time Freeze", "Author": "Alpha_Omegasis", - "Version": "1.8.0", - "Description": "Emulates old Harvest Moon-style games where time is frozen inside.", + "Version": "1.9.0", + "Description": "Emulates old Harvest Moon aka (Story of Seasons) style games where time is frozen inside.", "UniqueID": "Omegasis.TimeFreeze", "EntryDll": "TimeFreeze.dll", - "MinimumApiVersion": "2.10.1", + "MinimumApiVersion": "3.0.0", "UpdateKeys": [ "Nexus:973" ] } From 49267030a5d5eb4df81fbe94fcbadb92e3fe26be Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 29 Nov 2019 14:54:03 -0800 Subject: [PATCH 02/52] Added in more images for locations for SSR. --- .../StardewSymphonyRemastered.csproj | 21 ++++++++++++++++++ .../assets/Locations/AdventureGuild.png | Bin 0 -> 1174 bytes .../assets/Locations/AnimalShop.png | Bin 0 -> 630 bytes .../assets/Locations/ArchaeologyHouse.png | Bin 0 -> 494 bytes .../assets/Locations/BathHouse_Entry.png | Bin 0 -> 535 bytes .../assets/Locations/BathHouse_MensLocker.png | Bin 0 -> 616 bytes .../assets/Locations/BathHouse_Pool.png | Bin 0 -> 535 bytes .../Locations/BathHouse_WomensLocker.png | Bin 0 -> 472 bytes 8 files changed, 21 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AdventureGuild.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AnimalShop.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/ArchaeologyHouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_Entry.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_MensLocker.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_Pool.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_WomensLocker.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index 3eb331a5..f05d5e72 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -234,6 +234,27 @@ Always + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AdventureGuild.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/AdventureGuild.png new file mode 100644 index 0000000000000000000000000000000000000000..13b47a6a47dfbbe868dc4fa3b46204fbb0202ae9 GIT binary patch literal 1174 zcmV;H1Zn$;P)Px(P)S5VR9J=0n89xwRS?F1lR7R&Y3!tSA(SRml}Lgp6&PBj5=5#%969y^2qa8Q z1&2z&KY+MZ^w3g8%>k)!fio8b1qlQVQZ1kjO57sarbJ4e)U^{*yV%Wgc<-%u*SpSc zK!PV_ZO_b`H}k!3=Dm&V9oS*#azzxliN6r(Hh>Yia) zmi-sX-bWS#_@g%15n|u5cnyGs`j9K2%17^MUus+S6~6?aP&nXR;6&MZ_9h?vW#tyiAq*L8$H15i#d18IBL<48 z$!%L*iez6vwUnAzmc_)xgsNVzIDYSpM>8 zi1?u4Jw@N0omLr-X^Uy~k(}!Xph`I~5D_7hNx0-DV`o1Q5iaj|#N(mpLBjHU51D;f znLo@v)xiR;!_Mvz`YQR(oF<31c`LEkWp}w)1t8TQ$FeL^{pxk%leyafy#B&|K=}6D zkM(I7*=V$o@E-R%^Obp3-@Wu9B2rx1aoPp1L6h_^a6*v7E8u8vN8MhxJ3z18JQ#r~dIjYx0B z<>%Fmx;2|j%jLQqxU*9p+NVy}v!8wq!01y0hzO%;Wm78E5a-zu6!2#662YTGpV%31 z*n*eSPXch}=6NO19C#(Y-(K9A(fpb^J7zvtZ`sd2z7D|IpB2wcwoeRpyB5x55_U1# zNVMG-I&fgK{lM$Y_1>{uX^JP)Px%FiAu~R9J=0m%&R^Q5431S0)RBQX6xS+$f3^2?Iv8jB3%cMbkJ`bIh^K^L^(6am%0V z^<{GVpB4~51%&y?Pzr$JdZhty|C?jpXD_)8$2e&(y}uI%VCzJ^tp!A`fRP&?^O=Wt z02sV+4}i~0uLBc2e)<-G3;jI?;A^?s)&kcGMrP=@(OW8f(*4>+cKbHcZLK@ONmoE;)qzlCPR#$?~ zC-5=SISq@G_eXpqCS9OCUl5i{y*Eg1#WCf1(@8z^MX!MGh0a}=56rl+C?U|w>fJNG z3iz0ZDdEfYv*`zcv78&CS72l)W#F(cn-1s#yxxCIh+=D%JpfL38Uygt{a!?`KykeS zz}ZtB24Jn?miA^5XjLMtCbUB?xOoJ^T>hLQSD^J&JZu}ISgHrkbW$4{l3N|8pNqmf zzxII`DbV5r!u;@LWbx%)KLB$t?9brr#3cZxZkGdbxykQ9Yqe|Ug2)v(0O`i!gl8^~ Q%>V!Z07*qoM6N<$f&|$ac>n+a literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/ArchaeologyHouse.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/ArchaeologyHouse.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e1655e443f17f14d6607a416b6041e1e8ffad7 GIT binary patch literal 494 zcmVPx$s7XXYR9J=WmoZDjKorM+kuC;`gDy&4W2Yij5eLCZ9Gp5R3Vs0gV$HL;I3Bc*eB>=ghu~?2|zhjqyHWP_6 zkdX(;+_k0w$fFz^|jGrP^}BvCrF-w zZ|Vo)t6SE4YRm=LgOEG}LFx~KUfVD&1R;3_{<=}mEKCbQNSuLg0Nnsury%YPs6)R8 z^nM};>0v;=`*SM=0L~67K=eL9zXx>aeTAv!)5CydzFOJ`+O@1|ce>707<49ET2c1& zFd&gi=1bOtviRd}Z5;s9_U(=x&yg@W|GWXfOLi({U9qlCL1}r`A8`RFOf2|@fzfCl z>h}OtZY}`W+4HA|Kdyi@F(B$h)#}JqhQo89&4gqEGDgF(dXJ#->30l?GhhskuK|#K kt9SITSVw>6F&(Gi3sp#sQSVQcEdT%j07*qoM6N<$f-aca^8f$< literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_Entry.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BathHouse_Entry.png new file mode 100644 index 0000000000000000000000000000000000000000..f1199fcb991a9116618f8658989550250e24bc4e GIT binary patch literal 535 zcmV+y0_gpTP)Px$(Md!>R9J=0mN8EPK@f%CnQJU5g=nRTR7wGfCGk27t&N)a2P{NmFi~Snq%c@& ztIpXDz&Ge$M(6lo{tI3s) z+D@#@%>w|OM*ZJ(n|{DkVqE~mwPOIlMm`gW>n|AtBvzZSRx>J*lfx%=!ouA)0HC^j z-h48C6#!g0_Q0z_gw{PmBAM~oY1Xgr-LvDIFU6`NQsJ+*iMl+=8kzUT4*+0ib*eA@ z0MOp#R6|v?WJrdD#4{sx-xmpg{evOHiJ{dZlUpC zlJ6~O?QdPx%B1uF+R9J<@m@#YHKorM+S2C3@8I07SV@T#nX9SULa%6nbYBl-#<3#1f-zoyInht5DSPqlBv=AT|Px$b8&pH-mK`ead!<*^= zD0uqykomL#Q4U09fK@qX(?)jSMO`>^$;`;cz=@3A?D4w#6 zr9Xbx!|!?k_y->Tffr8_K6nWLy=uaBG#cP{J^G_TYEZFAR~-QH8DIf98V#)eGD?V3 zuo^u1Q(62{g7N@B|C=d$e>6xzIBtll;~+}f^)ONC$sM6AzPbS7J&svq+FxSb*a}mS zrJ`Qcc^w*at@Tg^KmuVa%=(IO@mRLqX4~tX-XWddp%_BG3zWeFm^Go_75BH#;*jM4 z1QrBl<08pIIRIt7%$y^!$|qq}i1kvSj4$5oy)}l*)PV>f@69%wHh8*u0Oq~J<*Co( z)rA;fy`~i6BiD78&5GlOIPNwO=G?djfZlE?B@%6Ta(-<9tASs3J_4|_`zi%-fBVee z-)GAk>UEXtkSS6+}%bgmHdl3Tz++|4jjHMG64iZ9;)yJi&3d z3l&(s+^7OpOF`6J1BE@lMTNQjsRtnS|9}{v*!}@9+Pbw;904`}0000Px$(Md!>R9J=0mN8EPK@f%CnQJU5g=nRTR7wGfCGk27t&N)a2P{NmFi~Snq%c@& ztIpXDz&Ge$M(6lo{tI3s) z+D@#@%>w|OM*ZJ(n|{DkVqE~mwPOIlMm`gW>n|AtBvzZSRx>J*lfx%=!ouA)0HC^j z-h48C6#!g0_Q0z_gw{PmBAM~oY1Xgr-LvDIFU6`NQsJ+*iMl+=8kzUT4*+0ib*eA@ z0MOp#R6|v?WJrdD#4{sx-xmpg{evOHiJ{dZlUpC zlJ6~O?Qd6P)Px$l1W5CR9J=0mpx0vP!xvWij%l>2+87TkYo@#^gs9m9E2jMyGudnR5}$ZS=?2S zg5X}9`~wvV9TG|$T@o_56jvQ$+9bx@bCR3XXUfOD=e{}Ty&q{nz{T;^mt(u@2Mtk= zHHN9<_Gy&cV~ZY+H#n7TQ3J|KrMk#Kw=F@k@e*fm1n@} z4A33-b45@fO~W+ZaX<6A76C<^E=>Tnt{f_x1+@v-YwwrpU&w?JzNY}w!m|R;hOdYCL zfdCQVX{d?#0Y<6->K@Nove_lrX`KTA4i0yJy Date: Fri, 29 Nov 2019 15:31:39 -0800 Subject: [PATCH 03/52] Added in the beach sprite for SSR locations. --- .../StardewSymphonyRemastered.csproj | 3 +++ .../assets/Locations/Beach.png | Bin 0 -> 572 bytes 2 files changed, 3 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Beach.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index f05d5e72..e87eb300 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -255,6 +255,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Beach.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Beach.png new file mode 100644 index 0000000000000000000000000000000000000000..97210c65fa8a14557799fcb8875fede85260b89e GIT binary patch literal 572 zcmV-C0>k}@P)Px$_DMuRR9J<@RZVKbP!OIxN+5I<3CX@FjvEpprPv)ENo1Y}!&*w`4H#9>JdAex@rv6>A6#;(uXaya2 z+sc{xcf}gXxhb38Xly0vf;BdE8oLAw0N`D92vYzE?Ji;qxTyy$t?sidcg8iE;M%fg zS$-1nM;;7(XI#^^XK0e}lJNckg1|4u*s%XQ1ElOh;8*rdvrwCXwjUHuPRkw){L|So zh&2ISTLR&^1;M~S&x6C9ZvlVLwdTqkV><=#FIeXm3E19fd=`M2;>w-z9$UoyX{GXX zBR=O?002V|$K4isqcI$JTloGmg6SoRIHp{{p^W9EM^ryyq*Q8N6@e5odsc z;wY&REe=D7qeNV}AjI>yXx_*BbK{3dBG4N3ry{r+Ng2-)?^gSXS^$m7t3vM$SBS(E zfahs{UHYLIE{dONEZ(L#O2C^f=LIj9t<*>`?XO|ApOh;XsIfRoPBY*l#K5)|P(hkl zXr^gUcvcdaw}e(h5-W+j(>U|sT%>f?R>Dwcs-9<}4c>&Odzy^*^!ipv1J%VOyfmbg z%bP9dg@*JR;s5}Qc39ewx5115f=e>h;wwXV3qz5Wx8NG)iv0^zT&X<&gMKmq0000< KMNUMnLSTZVhXLvU literal 0 HcmV?d00001 From c3c467b818618a577fa2d742ecda859edd5969eb Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 29 Nov 2019 15:38:56 -0800 Subject: [PATCH 04/52] Added in graphic for beach night market for SSR. --- .../StardewSymphonyRemastered.csproj | 3 +++ .../assets/Locations/BeachNightMarket.png | Bin 0 -> 1401 bytes 2 files changed, 3 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BeachNightMarket.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index e87eb300..db278bac 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -258,6 +258,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BeachNightMarket.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BeachNightMarket.png new file mode 100644 index 0000000000000000000000000000000000000000..2d745d2c9a5fcedf1b11927a456100b02a7d23da GIT binary patch literal 1401 zcmV-<1%~>GP)Px)Gf6~2R9J<@mR(GfR~W~CeOra%6goO9+Tuq=%t~8~gU|sT`yeoe86#UJnQ=F2 zG-h%)GjALub2C|%ctIc-ZV41oKj;6P=i{8C*s*!wZF5#CIge^5iqPMz2J*i$pZ8 z;^cVrc$s{xogHAtb=$oWnWg;pc0GSk`q;Wj>f?=wzLUlW}DZ_TjOaF0K| zOE~nq+=J@JtS1*0iaDCWhSSaRelqH9Ge#0tjq0Gqyv5J zd|RwtRU8#G7S39@fV5ol(oqh#Jzg#$^!s4O%+~Ww^+!Q?Z??6%_|-Y+p^&! zr)$o*UTvX&(j~sP?wdko(^TOcYZ4@xaNPMw+UV65&i-ZsT-Y>Kn57f|n(sTr+5m<` z6OKlZWWwWsSxTY#zJtb*ddiaWqjDr;Ugv@f4Hx)H-d{}e{$hp;{Bb*A%0nUTqQK*X>mB>WSSnQZMGE&7R6o+z%ZM&^QtlcaAmT9BV?=bJjHG~-+INZt! zM@!5Ih>A}%VU|*e7HI%gsIUy}1xe&t&hLRsUM}w~1t6#HjNr-9I+qvjh+b_Go01DK zssm;z1!qJALY>ee@q6=W)|YJ|u>0YuSce$%I9h^HBD@g$CtZ{!<%^uh!n|!L@4hGV zPFVX57x?MPydyZVy1sUNP2NzZYF|2Ui9b zFJvwvVbfHhy&&;TWdne4OcgASi&2e}l{ywReuuqQ!^F%GHG6IXaIk(2$x0pPMja$8 z%bA!NifZp^v!Yl3MdL_4yHfYyggNg7RjdL@R_d54tifIz{7=xnP5INy063(*3u9-n z*OoI?SVQvpgHfI6@{b3P;G}$-?>oZg Date: Fri, 29 Nov 2019 15:51:46 -0800 Subject: [PATCH 05/52] Added in more location graphics for SSR. --- .../StardewSymphonyRemastered.csproj | 9 +++++++++ .../assets/Locations/Blacksmith.png | Bin 0 -> 930 bytes .../assets/Locations/BugLand.png | Bin 0 -> 469 bytes .../assets/Locations/BusStop.png | Bin 0 -> 436 bytes 4 files changed, 9 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Blacksmith.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BugLand.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BusStop.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index db278bac..b5e3b4a0 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -261,6 +261,15 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Blacksmith.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Blacksmith.png new file mode 100644 index 0000000000000000000000000000000000000000..fb79ca50c1ea08ff32f8d90b5c060afe8890251e GIT binary patch literal 930 zcmV;T16}-yP)Px&TuDShR9J=Wmd|SxXBfvnn`*ELPPRD9Ms`A+Xp)VUn8cDyiYt2%%0dnv_K?_? zUZivjIeTsYhCuCAa%c*HTBvxFtv_&A0xpuY*@L^rMB>70nwhab5X1B^JHzbn$(oDc z_crgm^L#(=^E~hS4!qZUy{pnR&C)c@dfPaGcFn`#FaV`eiA*NbRvdticFc#*j1mml z0O4?$awgh>*cX6f?#O{CYqlMLLw+ZIb>(a8!t@jXcOGQj@p1_+w_^@1(w0o7EP(Fd z9v7yk*xvpNfaAwM;?9FC`PIi9TN8-WDgb?br)pv>FJEiw(J%w?_?$I1c9KX$A$|Y0 zYwjq&`k2pNK7n3X`J+g8LIX@jN5=rz+7cCuXarI*m`tWDA$Hy8ix3&Z#aA#`G~NleoKK$3bG z{rD`U?QKG#5SC@JryOJDw=K>_1B8?#bnfbGEu!r|Tu0Mj&x#U|19!{0r9 zy81nox1plQHMI5g{P`ABQ=c+0Fv#re=Ohv{Oke$m#T)j4IHCms7#<$3yZZCzV`Q_r zit!HTWwm5E*boAsSS+HdDv^ldLM+~}=uT+l^LY}98P^yfo6WJb^h-^=Ks-KYMWg*F zicBP;psFgxVv(CSf5+Jc0II6`$dL`^oqzA%U3W)--CN!s2!OriqS5|}KtkvhO?eQi zHiz;#U=PlfcY>YzLSgg30EEyHVzYRk}xD8?$CIbU~?zmqVA@r(e`&_AKUKhZt ziHVuFy6+|FXhUOP01kvC9o?6)VVJ(mp~Y?Jm^XrNH z0q>mo`7eBxu;u?ibu&8hHk;Qt8trF&eZz%VSirKZSKoTSee@{(BVa+39&qTZQ!j*0 zp|Dvq-#gDKg|mQa01wEurWtTb;9YH@uvs@?p|JUb_gR*Mc(3+)8Xu3RngSSxiD8&c zgH%EIo(pycT5gl^@px)qQGMw3YZlkm(ytCW?z^e~0pQ?ly+a}q?*IS*07*qoM6N<$ Ef{>cUF#rGn literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BugLand.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BugLand.png new file mode 100644 index 0000000000000000000000000000000000000000..0c47ad947de6e8fe177232da4fe770a85f27bcca GIT binary patch literal 469 zcmV;`0V@89P)Px$k4Z#9R9J=Wl)p;?aTtf6OHIp!r0a*YBnaYIC^R;fF5womI0XF(wKdh+*yiXK zE=tkTDn)Auf^Cv0S)!FGHk_|=*XdHA&^^;}@8`aEpXa`JU}0flVe#KlP7jU%@OW(i z)L%MX0H6A-3p(fA3PAH+%h@__U9$xxSF5%Gm~noZ-Z*iV1Yqh{kN*eQjm<-mSpb58 zC0#IgQ|Vnq&5W2BzX9V3V>3bC z{jj{zkdf9!L0k7Q06VY=5`kgsa&29)snW)xt< z^N|5q3vL6$o1ULs1F*9nA2~O!V>Eere;b2IG9ZYFVLa4bu~9jh3-Rz)20;EdGGFyB zW?@1M$Z>R3P*5H1EI{SUJ~FR*=Cc4RE`7)9YZ-u2OZx!FZouLj^~R2ID~K*|00000 LNkvXXu0mjf_vFmv literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BusStop.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/BusStop.png new file mode 100644 index 0000000000000000000000000000000000000000..485544fcc6ff362df087fdb625d998be649c306e GIT binary patch literal 436 zcmV;l0ZaagP)Px$Zb?KzR9J=Gm$7QYFc5}+*Ik;$hz^;90wtRV?R}C!9xae5(3j}0!CNTg@SLFt zKY&S>%7`ZI-5D7}|H+7x?$h1rWEBu+*wSI_sy{LIF=0n04|r$o3Z8c`36Ml91xxYsa_9z0Knm8KM%nBb_W31 ze(c0^R4L$;*2W|?kmmcIG`Uv;#ABHA2m;C)$n6|ZL?AksbT>^ZR5jpz17j*S5|cHe zD5Cc6_?Q%lYv4DhTAR@ToYK2u7J#w(KLF|f!Ylw|r3T=NO?whleZZIsA#^OnB%RRO z6^L3k*V<+z1|VuDxr|gbK-7-vc7I6{fg*(NnucBi5kiN>;)#8GN*||y;GLJMEX$(r edq`f$v+4^nJA2qfI!Ai|0000 Date: Fri, 29 Nov 2019 15:55:29 -0800 Subject: [PATCH 06/52] Added in cellar graphic for locations for SSR. --- .../StardewSymphonyRemastered.csproj | 12 ++++++++++++ .../assets/Locations/Cellar.png | Bin 0 -> 804 bytes .../assets/Locations/Cellar2.png | Bin 0 -> 804 bytes .../assets/Locations/Cellar3.png | Bin 0 -> 804 bytes .../assets/Locations/Cellar4.png | Bin 0 -> 804 bytes 5 files changed, 12 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar2.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar3.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar4.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index b5e3b4a0..55a72dc6 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -270,6 +270,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Cellar.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9609a4760b317519979f0e69dd05add61b4689 GIT binary patch literal 804 zcmV+<1Ka$GP)Px%-bqA3R9J=Om(Om~KoEz&ROF9W2})#}L)x^31J_DD@+^G;o`@Idb8xJx5M#%V)Noku#z~`k1HLgAkDc9}Z^tvgb>M%u#=aBIk4{!k{eFFWv)7u| zgU^pnR>OgdFEYZUjW05QM?OFh&8$HV_6=UPk$dpS_eI8V;8tcz+cVqX0FLP3IXPjX zb{i&YjN17c?$~PpF2JfP6O{mfNqd?s=)cH-CcV=xuU{Sl@a@MP;dnjXb8_%n1X1yWEr(Ndbn2+PHW{iI3hz|YUPn%@{%Np>UeB*vTj`2liYQh&8^Kon) zbZ>yNsrReQ5gl{Y&$nS~1<*yf?QaLZpF2!v5A^|DPn-B6!*g=_y>z1;wO@Wdojn*$ zs4}Y}45As}5+>jawYblMY0-{83qFtArX9niUCgNoKvx#S8~+ zh6C3Mq7pzWpd&ga(Ai-Zpa@o0$c!LTuSF@N%k}NezX53ToZJK(xd-%nDPgjP)AbQ1 zE+cn|Oj|&;8e0K`NgGErb}m>B4r=!@?J$v6M}fT*Ph@)wMt4A`*sX?bLb5XQT?+uf z`Dkg{Ya&-nXsRCyiJqWZ_1J6RIXP3iCa4Aoq8YyEBGVQlH)rH7O}e-3e(nHyk` zT>$G|mni8ir+k;C$)ZSq_4#031G>MrKT3AN22sq}A@v={fDxAJMdL!ao(A0uVEx^v zAj-<9{qp^>*C@KChF1_sc?n$jqRaVc32Z8(_LaG&3qC}@^xP+{@-!4p|4RGi;?v4l zzSmbht~~dz0kqj3uQF{J75qLQzpDixkn%E!W*hP<)7D0x>s?ReN)@X``oXdYMbp0u zWC(Bp;ES$-(Ha2|M6m%DP5+9;@5;3+|Gm8GoxUyKC(H27(DN>KjWvO>OTQJsE{H0# i4Q>sv55zvf0sa6UwRr96`WR3E0000Px%-bqA3R9J=Om(Om~KoEz&ROF9W2})#}L)x^31J_DD@+^G;o`@Idb8xJx5M#%V)Noku#z~`k1HLgAkDc9}Z^tvgb>M%u#=aBIk4{!k{eFFWv)7u| zgU^pnR>OgdFEYZUjW05QM?OFh&8$HV_6=UPk$dpS_eI8V;8tcz+cVqX0FLP3IXPjX zb{i&YjN17c?$~PpF2JfP6O{mfNqd?s=)cH-CcV=xuU{Sl@a@MP;dnjXb8_%n1X1yWEr(Ndbn2+PHW{iI3hz|YUPn%@{%Np>UeB*vTj`2liYQh&8^Kon) zbZ>yNsrReQ5gl{Y&$nS~1<*yf?QaLZpF2!v5A^|DPn-B6!*g=_y>z1;wO@Wdojn*$ zs4}Y}45As}5+>jawYblMY0-{83qFtArX9niUCgNoKvx#S8~+ zh6C3Mq7pzWpd&ga(Ai-Zpa@o0$c!LTuSF@N%k}NezX53ToZJK(xd-%nDPgjP)AbQ1 zE+cn|Oj|&;8e0K`NgGErb}m>B4r=!@?J$v6M}fT*Ph@)wMt4A`*sX?bLb5XQT?+uf z`Dkg{Ya&-nXsRCyiJqWZ_1J6RIXP3iCa4Aoq8YyEBGVQlH)rH7O}e-3e(nHyk` zT>$G|mni8ir+k;C$)ZSq_4#031G>MrKT3AN22sq}A@v={fDxAJMdL!ao(A0uVEx^v zAj-<9{qp^>*C@KChF1_sc?n$jqRaVc32Z8(_LaG&3qC}@^xP+{@-!4p|4RGi;?v4l zzSmbht~~dz0kqj3uQF{J75qLQzpDixkn%E!W*hP<)7D0x>s?ReN)@X``oXdYMbp0u zWC(Bp;ES$-(Ha2|M6m%DP5+9;@5;3+|Gm8GoxUyKC(H27(DN>KjWvO>OTQJsE{H0# i4Q>sv55zvf0sa6UwRr96`WR3E0000Px%-bqA3R9J=Om(Om~KoEz&ROF9W2})#}L)x^31J_DD@+^G;o`@Idb8xJx5M#%V)Noku#z~`k1HLgAkDc9}Z^tvgb>M%u#=aBIk4{!k{eFFWv)7u| zgU^pnR>OgdFEYZUjW05QM?OFh&8$HV_6=UPk$dpS_eI8V;8tcz+cVqX0FLP3IXPjX zb{i&YjN17c?$~PpF2JfP6O{mfNqd?s=)cH-CcV=xuU{Sl@a@MP;dnjXb8_%n1X1yWEr(Ndbn2+PHW{iI3hz|YUPn%@{%Np>UeB*vTj`2liYQh&8^Kon) zbZ>yNsrReQ5gl{Y&$nS~1<*yf?QaLZpF2!v5A^|DPn-B6!*g=_y>z1;wO@Wdojn*$ zs4}Y}45As}5+>jawYblMY0-{83qFtArX9niUCgNoKvx#S8~+ zh6C3Mq7pzWpd&ga(Ai-Zpa@o0$c!LTuSF@N%k}NezX53ToZJK(xd-%nDPgjP)AbQ1 zE+cn|Oj|&;8e0K`NgGErb}m>B4r=!@?J$v6M}fT*Ph@)wMt4A`*sX?bLb5XQT?+uf z`Dkg{Ya&-nXsRCyiJqWZ_1J6RIXP3iCa4Aoq8YyEBGVQlH)rH7O}e-3e(nHyk` zT>$G|mni8ir+k;C$)ZSq_4#031G>MrKT3AN22sq}A@v={fDxAJMdL!ao(A0uVEx^v zAj-<9{qp^>*C@KChF1_sc?n$jqRaVc32Z8(_LaG&3qC}@^xP+{@-!4p|4RGi;?v4l zzSmbht~~dz0kqj3uQF{J75qLQzpDixkn%E!W*hP<)7D0x>s?ReN)@X``oXdYMbp0u zWC(Bp;ES$-(Ha2|M6m%DP5+9;@5;3+|Gm8GoxUyKC(H27(DN>KjWvO>OTQJsE{H0# i4Q>sv55zvf0sa6UwRr96`WR3E0000Px%-bqA3R9J=Om(Om~KoEz&ROF9W2})#}L)x^31J_DD@+^G;o`@Idb8xJx5M#%V)Noku#z~`k1HLgAkDc9}Z^tvgb>M%u#=aBIk4{!k{eFFWv)7u| zgU^pnR>OgdFEYZUjW05QM?OFh&8$HV_6=UPk$dpS_eI8V;8tcz+cVqX0FLP3IXPjX zb{i&YjN17c?$~PpF2JfP6O{mfNqd?s=)cH-CcV=xuU{Sl@a@MP;dnjXb8_%n1X1yWEr(Ndbn2+PHW{iI3hz|YUPn%@{%Np>UeB*vTj`2liYQh&8^Kon) zbZ>yNsrReQ5gl{Y&$nS~1<*yf?QaLZpF2!v5A^|DPn-B6!*g=_y>z1;wO@Wdojn*$ zs4}Y}45As}5+>jawYblMY0-{83qFtArX9niUCgNoKvx#S8~+ zh6C3Mq7pzWpd&ga(Ai-Zpa@o0$c!LTuSF@N%k}NezX53ToZJK(xd-%nDPgjP)AbQ1 zE+cn|Oj|&;8e0K`NgGErb}m>B4r=!@?J$v6M}fT*Ph@)wMt4A`*sX?bLb5XQT?+uf z`Dkg{Ya&-nXsRCyiJqWZ_1J6RIXP3iCa4Aoq8YyEBGVQlH)rH7O}e-3e(nHyk` zT>$G|mni8ir+k;C$)ZSq_4#031G>MrKT3AN22sq}A@v={fDxAJMdL!ao(A0uVEx^v zAj-<9{qp^>*C@KChF1_sc?n$jqRaVc32Z8(_LaG&3qC}@^xP+{@-!4p|4RGi;?v4l zzSmbht~~dz0kqj3uQF{J75qLQzpDixkn%E!W*hP<)7D0x>s?ReN)@X``oXdYMbp0u zWC(Bp;ES$-(Ha2|M6m%DP5+9;@5;3+|Gm8GoxUyKC(H27(DN>KjWvO>OTQJsE{H0# i4Q>sv55zvf0sa6UwRr96`WR3E0000 Date: Fri, 29 Nov 2019 15:58:25 -0800 Subject: [PATCH 07/52] Added in club graphic for SSR. --- .../StardewSymphonyRemastered.csproj | 3 +++ .../assets/Locations/Club.png | Bin 0 -> 710 bytes 2 files changed, 3 insertions(+) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Club.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index 55a72dc6..a1b16b0a 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -282,6 +282,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Club.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Club.png new file mode 100644 index 0000000000000000000000000000000000000000..4c037314d1b6a2f39aa512230b5af9466cc1281b GIT binary patch literal 710 zcmV;%0y+JOP)Px%fJsC_R9J=OmoaD)VHC%I>4{(l!9kj#2n{I(hgcAT#HkQM)jC)b3X;jGbEcrd zseytZj^fZM6eJ-9HBdq@Ta*K#Mkthq6O2PTxCmxD&msA)cbB`|cWK1I9~``U_r3f6 z_r34EyMupBNEl%jjUa&ozJ~lqNeT$FXl&#j1PZK`_h%wvP8f+qLOMuhY`u^+>V>rL zs$P(uH30QO+PM4l_0VS1xVO{rT&bA|SXZJ3KwKZVUVlu)0O%-T0N&}EDd^k+)|IG{ z*ERDzmW40G;m4JcC(Ty2PqzXoedJQ2h7d8w42Wgz=a+UG^zzWl5A8`~|H>W!cv*=6 zkfJ|v+{^`ZE2F2Z3@46dhdy5cs;WwtqN=LylUlHzTkUQIP=@w9}N3A6_e+sCXVm&g2*dc7-( zmw;Rn%5ApW2NaWQ()V+gRuJq0%58u^lMCEhv1mNsat}@4wep^A%uGH=1bJOE4=1(q zzH3aNJ>ZsqE7PRHT!F*(v2;+7vC;ypH+Gv~(ltRx37dx#uOA;<3RaTKW~o_A&gpX# s;q^%l;~US)x&IBtOC>1Qe}n& Date: Sun, 1 Dec 2019 16:23:01 -0800 Subject: [PATCH 08/52] Finished making locational assets for specific locations. There are still some that don't exist but it should be fine. --- .../Framework/V2/SongSpecificsV2.cs | 8 +- .../StardewSymphonyRemastered.csproj | 261 +++++++++++++----- .../assets/Locations/CommunityCenter.png | Bin 0 -> 598 bytes .../assets/Locations/Desert.png | Bin 0 -> 1256 bytes .../assets/Locations/FarmCave.png | Bin 0 -> 1038 bytes .../assets/Locations/FishShop.png | Bin 0 -> 780 bytes .../assets/Locations/Forest.png | Bin 0 -> 523 bytes .../assets/Locations/Greenhouse.png | Bin 0 -> 948 bytes .../assets/Locations/Hospital.png | Bin 0 -> 325 bytes .../assets/Locations/MermaidHouse.png | Bin 0 -> 1369 bytes .../assets/Locations/Mine.png | Bin 0 -> 1571 bytes .../assets/Locations/Mountain-export.png | Bin 0 -> 735 bytes .../assets/Locations/Mountain.png | Bin 0 -> 694 bytes .../assets/Locations/Railroad.png | Bin 0 -> 441 bytes .../assets/Locations/Saloon.png | Bin 0 -> 1258 bytes .../assets/Locations/SandyHouse.png | Bin 0 -> 770 bytes .../assets/Locations/ScienceHouse.png | Bin 0 -> 605 bytes .../assets/Locations/SebastianRoom.png | Bin 0 -> 516 bytes .../assets/Locations/SeedShop.png | Bin 0 -> 644 bytes .../assets/Locations/Sewer.png | Bin 0 -> 616 bytes .../assets/Locations/SkullCave.png | Bin 0 -> 1571 bytes .../assets/Locations/Submarine.png | Bin 0 -> 1133 bytes .../assets/Locations/Summit.png | Bin 0 -> 1334 bytes .../assets/Locations/Tent.png | Bin 0 -> 735 bytes .../assets/Locations/Town.png | Bin 0 -> 649 bytes .../assets/Locations/Trailer.png | Bin 0 -> 709 bytes .../assets/Locations/Trailer_Big.png | Bin 0 -> 709 bytes .../Locations/UndergroundMine Floors 1-10.png | Bin 0 -> 1571 bytes .../UndergroundMine Floors 11-29.png | Bin 0 -> 1571 bytes .../UndergroundMine Floors 31-39.png | Bin 0 -> 1571 bytes .../UndergroundMine Floors 40-69.png | Bin 0 -> 1571 bytes .../UndergroundMine Floors 70-79.png | Bin 0 -> 1571 bytes .../UndergroundMine Floors 80-120.png | Bin 0 -> 1571 bytes .../assets/Locations/WitchHut.png | Bin 0 -> 1275 bytes .../assets/Locations/WitchSwamp.png | Bin 0 -> 1275 bytes .../assets/Locations/WitchWarpCave.png | Bin 0 -> 1275 bytes .../assets/Locations/WizardHouse.png | Bin 0 -> 691 bytes .../assets/Locations/WizardHouseBasement.png | Bin 0 -> 691 bytes .../assets/Locations/Woods.png | Bin 0 -> 523 bytes 39 files changed, 192 insertions(+), 77 deletions(-) create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/CommunityCenter.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Desert.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/FarmCave.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/FishShop.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Forest.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Greenhouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Hospital.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/MermaidHouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mine.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mountain-export.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mountain.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Railroad.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Saloon.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SandyHouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/ScienceHouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SebastianRoom.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SeedShop.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Sewer.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SkullCave.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Submarine.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Summit.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Tent.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Town.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Trailer.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Trailer_Big.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 1-10.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 11-29.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 31-39.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 40-69.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 70-79.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/UndergroundMine Floors 80-120.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WitchHut.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WitchSwamp.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WitchWarpCave.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WizardHouse.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WizardHouseBasement.png create mode 100644 GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Woods.png diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs index 2593c53f..48341b1f 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/SongSpecificsV2.cs @@ -385,8 +385,12 @@ namespace StardewSymphonyRemastered.Framework.V2 string splits = locName.Replace("UndergroundMine", ""); StardewSymphony.DebugLog("DEBUG VALUE:" + splits); int number = Convert.ToInt32(splits); - if (number >= 1 && number <= 39) - return "UndergroundMine" + " Floors 1-39"; + if (number >= 1 && number <= 10) + return "UndergroundMine" + " Floors 1-10"; + if (number >= 11 && number <= 29) + return "UndergroundMine" + " Floors 11-29"; + if (number >= 31 && number <= 39) + return "UndergroundMine" + " Floors 31-39"; if (number >= 40 && number <= 69) return "UndergroundMine" + " Floors 40-69"; if (number >= 70 && number <= 79) diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj index a1b16b0a..9228b823 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/StardewSymphonyRemastered.csproj @@ -93,145 +93,145 @@ - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest @@ -285,96 +285,207 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/CommunityCenter.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/CommunityCenter.png new file mode 100644 index 0000000000000000000000000000000000000000..ef275186c1d74a572ee00fd91e45b202320f7e2c GIT binary patch literal 598 zcmV-c0;&CpP)Px%5J^NqR9J<@RxxYBKoou{{siZC>#iUtScEzRH%Wg$oE$pW4i23hGUzX;TR=x8 zn<#V;g@|A_C2smVgzKP}T;fIFnJfL^kbC#;z3=Y6_Y6QvG(o3nW28z>sYU;VL=$vM z_YjPGNj#)t@o1e!3TRlz_z4^45uV#W0fAk83Ozd$+0%syI{sDoW+l9CYMlmm{Yf_8 ztflUzC}x(}sEEZfA-Lf7idE zsKyg}#SNf$@WJ`y^Yxm(<)2r=k#InwyK$S>~0&r^X< zNQglh=Ib@(=W#zwY$??cVo=u|!ou@lHeP|_i~#_^vc92QEr9C|p;&yAIyssEAqK70 zsu5d!&e_l!KoM9jM;g1*h37#jmxEF+cj342yvQD91Q^QI!bKvH4|^I6(tVaIz+D7B z-rFeKpAm4~A}Csoe-N<&0Qmg@WH;Mjj)hdGVx`E$C?e=MV{`>b6JR8+ ktt)H4Ny)DfxV0|AFH)7CHiV`?p8x;=07*qoM6N<$f=;OmwEzGB literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Desert.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Desert.png new file mode 100644 index 0000000000000000000000000000000000000000..726f8de2d31830f146b41270a7f955b4e789c8a5 GIT binary patch literal 1256 zcmVP)Px(qDe$SR9JP(G@aUuvTNBH-OTnd@4flv&D)xM zu<+hD@B6;r_xHUGmG%}(DA=$L4-tuVLP-T1s1BE3Q{GF;he~^kCFMcY{$=R}?=WR?(F;ay2>~THg13MD_*_q8fkh>$MXFr z_;9|nd}T`oo7!*y><5myd;-8{m?^Oi4*>vw{%)i9?N`v6jT3KU0 zVlo<4YGty*gAd+!Yx9>M|HW5dhcG_T6|8!BT^+{pz3YNKFr<~W&s$WdOq!0S*WbeQ zXA++RxPZ>mCQ>kbyn!K2M1{AauF7fIk<3BRfh4ytn*~*IzwrPdc1{aSJJ}c`E0gu= zgbpOy0RUhZeI9d?0r7KQ3RJ~KfcT;!f9D`b5vo$a`ILfHLX;`*1VyA8CRbg<)nOdp z83}k?HWGGG0e~A+jb8T6%4B`Uuid?bYj-c9VRAJfca}Cq;pNuz0eu?XlqEVRXgVah zy5U+hOs*ngoGLx88?N=D!F1_j17I|k1OTjLX2hD)N@fQ1EM2EI91IL;ZkwSNKrH}& z+lgq9VLiJdwIP&rMIT;)WAx}PePorVXEdc;DT3Cxt3=8i? z&=;!5l$HT*UIlJm#gvvoU#K3&+>!t`8cPBN8^?D>L~i8@=cJm5=KKwo0v5)V$5Swp z%czPQ*nW@(oEWA)|4sngE}dX-wigR{27D6(a3WH0eDAtjfT)3G<`FSYg}3F}k=K<@ z!!bD9g4BkCM`Kao!Qa?^-o#Fy;L%tVi#;7k#T_ib1Q7Kpqj!J{#za-z2o4}l{5`Q5^=(y*B_H2Z_tgLZ7TNx1L9$J?cdO08ptT(b@>htWgT`HUFMyZS;BB|1RsA z^CG(6XaUZPNVG@AdHPGVHln+$NyvsudyA#5wFB3SN*%k8pW@S}|3F2F_NWjRMmZI1 zZ2j<;r{}k4-nZutP@xHM{X=b{aK&FUT0BbPVXoBC|4y^JR{TFGtA`pUL+d}R^oAA2 S#?Zh30000Px&$Vo&&R7i=9mdkG&RTPK68IR*fp$Ryk$g*P>Win9~s0doc3T#3Gs;WeE!5Xow zgc^xeRk5hliY1~#tdOYq3y@k^fV+tVR6Il@7E#8Iz;>O7Ds162&G>B=(|a>B9@{;V zXcH*W#3y%hoAm8k~7^dW)w zUS;d*K6CRH!+7QH`eJWownL$!0+5b%X;xLnUhI<11#sFst4V&m`;e8{4qx4Ck)93% zFpO8exb%7tA4^Y%DU|9`#A$_6-Sx~cUK=H-$NK&2u@C^+2Pfi#cnyy^1q&s}K4?gR zmDvu8k>;OYO1@G1@qG@`v95jdX-%D$%>^L$5IqL@isI|Q%c}r82jkLnp`uc#sN^dO zI|t*AXzKEpuPCnC594J9A|ml`3xuSAu;ud&?)?@5Ld;Cn7{x2=nI+dM3dku6aOZxW zwTzBgv@rL|0IX&7z7lzPWj(Xho0+PSo(^;6R;dqi3i{bvMrRlwSV*3^UOfu)_pZjp za~jp7uq=hzc|v|SK;`k_KnG^I%1bZA2lBF2L=+-LyUq-a-dh?!UOEspb8ZyxI{29p zPYmT<8GyY}#Q4tr{745PLqFauS_B@I+t)9iv%B>V^A!IbJz?iy{F%gs4dN@05A7}z zEhtP}FQ0F4<<{WWg3|`^8oE%|^EPhb`;Ao9%O-i!sW0etrDBN@TWR86L6 zr203KpE)bwg7orc(Xw9^lM_J}=8jRd=WMteWpW}2-Kgs|A;i}*I%c_QXVHyfq#`cf zELSm-F(xO1_CBB+<-6baF_JONa+S&FPgAM2F;WpJWR|OPES!j5ryC`|8*m5pG)UzP zN#8@?h$k@j$}T~tiMhtuCO>SP@{<5Kap2b-ehaF{H_7jvmDiV76)s%M4dgZNA~{bf zKVhf19^V9B8_M^c?4pmo{VaqVW1FtI3)gZ(d3h#_Ry9%)b`Hknby_zGHP5<)#W>Wo zo!WaQ;ma#ufB0ta#_ghg(~+vM&p(O+pavAQkVf;kCGV*Lg`c+T+_+uzWzD@Z%J!#k z_kg}s0Y3R)nnk1k(@}_bJ0}e&c&DTHS5!2DEjIqNSj*^KUbR0tem3oIp1*P--kP@~ z2WU6iQdEkM;MMlA{Uzqy{)yfS))(yVam+S&ZWU2S~P0;VEWQi2wiq07*qo IM6N<$f+{HTxBvhE literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/FishShop.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/FishShop.png new file mode 100644 index 0000000000000000000000000000000000000000..7e752f807f4e1bade8d07f3f5c493404bf6c80da GIT binary patch literal 780 zcmV+n1M~ceP)Px%#z{m$R9J<@R`G=D&bfZ0qC@rgVTCo7_RbSb1ml@bU@5d?=KO(0X? z1)Ktb3__qo(jkQ|&+bZSor3TP(TXG)3R*H`>muYjq<6i0-aU<4{J_Dx-`)4!@Atd! z9&2qu7%JBe$pe=Sfdtm5#vFU+SS8vHS@Fizvr5qatT zF)tJ0;U{=gCY@M6|YX;u!8 z`>3^u5X(fj`ij*PW?&rn(oCAExe0LAmq)3v%6@YZ;OusuSk{QW=3wk~9`ONVZJCkr z8#%}5xLcg+KW|1-Cj_1>c;29vtaL(|ka@!GQCb+3ip=23NCtL0_j5nNh!IiZcjw!%`#axbYbkq zZZjc6Ynv=(PS{%J1C$&9I!8NFwRAj{NJ>jY$#o-&8@mnNh(b4_*vRFuZs-_V+vL}e z-@+Q91c6KzUF!@0(6!D`zi6;IDvrkSb3Ak-3IKR-eqdwm>z~qCCcq4?kbI>Ik1xzb zIMZyRK~jk%0+}p4zA*BYDp1Z7KIU(&g%Y&wOICuVy%TL{Z3~%`zJ{_I?{@Ar6Aco` zWR<6(BDPQ_l#~v|{V@*K|smVvHy#_F3&Bw?Z<)R*28k1veJyDQeL zGEC(Iv=RA@-EKj(oR@mRbA3SQ0iHZqJV3B0Zccqbb$Z?hzMh_9BbNj4bT!-dC5CTZ ze1LX2y=pQiR9#UXQ~7{XME#;6q@045L`6Q05B!(c@HtJmaQp#WIF_$E)IX^J0000< KMNUMnLSTX@O=aEy literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Forest.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Forest.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c02f675b514a1cce2dfb740d99ac6760bd390 GIT binary patch literal 523 zcmV+m0`&cfP)Px$#Ysd#R9J=WRxwM%KotHep-Uqj9J;lm;8H9$OQsIRtwINJ6Y5_O2M5PY{sy62 z$q>*@9EwAiv=DG8bnWKgP?{`KtV6l;F1c%7s+;*BO&(c2QRLFwc*kr|kvISn&#EF; zLj_U`s58Ay_^$*oXQi%%$n&Kv8AP6eBAnC$>;3?U^b{EMh$@Uj*sACGL_!igeU^|;aHYztt+*E{gLjI5_mD0qO2G-oecoxlOt|N zbNwi$wqWEg3&uQ5Eu~I)Px&Zb?KzR9J<@mrrXOM;OL`D~(cb4A!D;A{>+0PUDmYQi$3@h$$%qd?=+KLG;u^ zKSN6i`3^ZGm&AvDfd*3wp%x@GheSH~P=a!>pmMNViFHVkq z3A{QQ0l=-5OBn)y^;h1Jk!t~AJM|M>`#ByH778Ku0g&<(O2=>vIjI9V}C z%Uq?)YE$yCIf&UGSb$kAXqOrigYOpe^mg`{a(n#ow9ovOq|>r_`g@Uu5A!Uq?1m%> z_5n|t0ORVMR16eY1-J@2^&Q~^7n&jTIU4SB@wefuz+!LgIaBm zt7SdWtn2Z*5w>@AYx zATtXL@p`QvtlpUc?+roQ5ZanMcxF5LvoxM;k7lwGJ(1}Fg+)R1BddpS^^-7hVPFKB zImSKtP63A8cR{4!L>5=a-!Jgt;Jk z-zd9)PUoazlv)Rb*hg{-3yUXjEvDRF@N9Wym&d;qnX7d9+SB{ReNPj8!yq7k_7W(M z(m9PMO+eCi+iBUf>o#+hZqQ%5*rQ!91!IruC9b~I?>DcUhE8aI=q#ATUdQIkqM}_d zF~23*>)5pGrHDX)H-jS0E2nYidjWAl^b@z^%u;NOzbg5xckE#ASNKrO!(ZV)K#P$V z=6h_rT8I%h{vUB@0Sb!?u1(bq$1a{NpnS!pWx-HbL5Y1Z<_!pcR(zRGlPSPVJYGV_ zcStj?gce#|5)?!~vXxKTA6P)+_VX-l?+u9pj`NU`?17^?lpI8WK9n3EPW*6s;`kps WR)Xo4S_&Qj0000i0Z~J9_47Xm?ZNXIbxYL@9Q!M5so$f4T;ojL7yq)K$!0yT#)0598 zyk%emg8PrXAHF#|?PAKz#_Nni((=Xz5f7)`FMgvEIL#xc=1hTLyNqz4+64gtS=Jkm z=1h=Ey2Rp{$zXX-QX*h6Lu}s-6URx+AC6jXe90)wGuPw*5PaBMA;dL*vpN5AnX9rJ z3Le|ExjvUW{Igp6wc!*j}U7P@V^Qrgfeq2JuvE;eWVy^fV>Qj=^pCS)vSEOE%& z6MU5MMP}0t3w6mI({-1w&??i9?%Hna5R&bBR;lHU+tIbc*&5k`y-k4zTp7F!^7gDN UCT{rp0T>hvp00i_>zopr0FG>axBvhE literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/MermaidHouse.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/MermaidHouse.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6fd27e4c1bceaeace53a0c4056f15a8e7855d2 GIT binary patch literal 1369 zcmV-f1*ZCmP)Px)6G=otR7i=9mVZnWXBfvneR9cVGTh*T;hz9I9#G;8eJr2 z8E%>_WOMsR+!CX6hGouRm@$hrn+yYsn~NJLBOReGz%mdN8=-C#p_EB6K+A4_96fpz z&7S0P_q^}(KHu;2eV)6VN)$!rTS`_@=pqmkt7EaCMLV(-y;kD9VyYB&HI5cvnbpz)a7r#FUYv zNEneEj(=cA_Pcx9r2CzFia0T6yP`1fsf+jr9Yh2c!b>WM&Wpl(>LLKn$P^5|egJfO zBZAJ)3PVyzMIXQ7QTP>SbLj4AL#H=Va3+baBX#uN)so?;&QHLs-y=E9rC*s$y zk`sjQeR(b!)l|6(@Cp~OOch~MH*#gS^r{w|kyNRBtx1j-bG8#EAD(3;Akblt3sK{n z+%I8#2LKTxT?$YY)lx#ra7Nqlcum;Ujaa6NY2ETOOeMiRYcR?8Aea^%0nI&91z@__omi{ zs36;k38kOE8GL;UhOW-M&+5$k0NB)xxLkw4+>l4iKXC1PKT|v0d^%YNtc25vY+SdB zvGbkSYliV3o(B5mgN`$wle&NQgXHU@!(NP`wVn=204RK4Be$ZaPZvTkgn&7Fgr-aR zyfEtv>k=_%4|8Ky@`20-l5cOtKOj|bENK&*oZ!P{KS}|a#ZrZ>^*D1&@OVwsxH{zg zhSmmp(aJ3dnE`Fuw_ukVDhP=HXrsFU4UTiQ0F)*9gp?)(l30kC?m zxpFXPLx)`tz~j4GX>Ya#@@rTc`w;-C6>jR(Ry=(sI_!GP*&}?FU}N8qg+l8F3iR7# z$sOlvIrh&coVg_-(gtkDuklaZ1C&D;Y}&MLh5vQR5U(Gqoa;Bp&xY1|46XI@`g)D@ zwKGmO@mYH3(+NZ^^FB2oV7|$FL@rt>`;K$9>^nIjS3h3`<75*z$1*UqHawMtD%o5p zMkJ4L0Er#qv~+dwYAfcWn28pysc z{R;%DUa#qqp8=e?TV)bX+YnCsyQ+|1vgeCS#l?aaeeA;jbpOYkxmy=pf97fnPTLTH bq5=K`S-KI^|A#p~00000NkvXXu0mjfN7#NK literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mine.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mine.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ac155f5260e595c158521207fd6fa986f17c91 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx%nMp)JR9J<*mp^C|Q5?rVrwOeE!K2U;j$GOlgbpR3aA0Zb;wA_#>JX_==ptm% zp$K(xwPO}H$w5ck;?k)$kq!aHYz|T|MFIiQNz^FkaDB<$B`X5s;q z*Sa&dvk7ogp)nn4*TByD1k28Euj5?ENl|%zYFvM&$DtL0@)|5!zd|1B)iyXO09GHT zy$?^d{Hp_qsy8h^Xy3j_XQ~Au1=v`bVPj>c<9sQDx4PVQEx{kPe5em;=ec-Dd-$)O_nlv2gQyZsS<-O<`-HlT3zP=K@d9&xqPGr z&meLRP-}X#ms-4dEB7IdKz^ZRh+Y@@mgZfgppSY0RRMwu<~s^eueRk6ij<535Db45 zW*iy{APakFTw$iM0s74}=seVhK@F%2Er6&);ncJYT(?c-SW=jZQBg`kzbM$*1c#@S z9G*_Xjhjl&VgbmC&2`(PGxMY~^SBRo{lRG171A(pA(F|?CMaztfzJROFh!xz46TGX zDgQSFBHjy0zx)QrG`b>I5%!yvTWo~K$JqtJI_c`fZv^+rJfLOTU+v7vr# z980mbG}E935PAocNwXN0_X0bcU~ktPYH;t#&+f@MA|SS4*KIR5-5P3eZo1X2g>ltD zF7JN*KyF{h^DNM`ge6*-Y37}qWYw!Q{ZF#pS0et#83-sTNGMCSXj!}vG>)Q<) zCw~S4NXxqU-Sgg@T;+EDJph$skJleB0)GcW+}*su!&^TPukf#`SAcg?fPW*l-s^~R R$Qb|t002ovPDHLkV1iz*N|OKp literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mountain.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Mountain.png new file mode 100644 index 0000000000000000000000000000000000000000..ec544602e6afe2bded73d3c16aa2fb65d443a593 GIT binary patch literal 694 zcmV;n0!jUeP)Px%a7jc#R7i=Pl|g9JP#DMmFKyYZC=HdC5}I@!=!TY{hrmWNFW$V1hf0M(kG<$g zm=~|^*xN4Bz|f1^ZsK9Ag$;VLcM)lkN^pn=L5=V{BrnZN-fKHQ2zmM5mtX$h_r3Q5 zEMO-)1SdOWZrt36ZW91NS^T3{@>pd7VYJc6pk{E;|APe(s2V||k(n7g6V`1`mFU$p zV3jyu+@v+z-(JF|^@oNaW>yKkmt%7GMUp90)@=go+HWp;*!KXd1OV82TBaYKC*MoJ zSoc)T7ybQ=Zn05x{6P*ShN2^|d0>9mK ze|ssRh>b&qL7L%xFhR`#eb@GtrUAfSb+N8ZL7|cWqE`XajxCD-Xj%XU6I#rD4rj$ICb#F9Y}Pi-B>Ntk90*p=_+6Y^=a}eBe9d z=?2e)Z6TSejR*WbE_Ib=O`-$b&j%7H4^@ynQ^dT-@DNH1pvd{X=jy>=S2YGjc!~|ard~f z_~GsdqfdX4x>2}Hf6_JFzV#IV&^x8*yuX4U=M=fTf?VDg&&KT9d!0ft>tXFC!KJGN cZ~J%f4|VPx$b4f%&R9J=WRiSRfFc7^?lLi8&DnBu8l1Y(SCXEI40|NF5i8K`q7gUi_UK&== zqVlltqI^U>qtba`vKMc8n_&ADEc3=I8W)|Pb~7QwR)~+6%R_9%X*UyHX)@uQf^fb7 z;2X8h;#$p%1N|ZL%{MoHb+X$VCKdW<`fD$XYu$MZtm00oxN%V#MpMY*8nUzH+njvrBgDy@V&=IgX#d6RBSjE+;+NU#9(B{ay z@+U}XpuKfj7uv(dak1@u2jtD}%5f1@#t@3Py_$~KHYlG^#nZKpZ{0D jP>cdb0i%FXz$oAg&II0P@Knnl00000NkvXXu0mjfeKf+r literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Saloon.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Saloon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e671272dc08db957ae2682a33dffde4d9d4dc41 GIT binary patch literal 1258 zcmVVl&|00001b5ch_0Itp) z=>Px(q)9|UR7i=vmu+ZMR~*KFNp8E)Hc1nkCTmknI_0hjHZi&?IA~!J2X3&6>+tKo zSQN(CKyV-kGWKyVuuT~KFc^v=;*gCw-R1@ZsjbFtY008}p-o?snl?#WoK4I=+~nrQ z+}2h*AGq9e{%_C!B=KM41<@($M0JM(>*hMED zX8nc|J8K#MID1K3G8e3s21VF1Ro~Y^)eNQfjlsJejii3fF{)2vtu!DM9G>cBTGE?I z0=t)NP(4Fvu>w=w!nz2Ovo&QlXGMZtuQ>5-bHFy>^KmX{(?#-@^kz)D2h=#0dFd@T zHJ6qNEvDDKI#b<(Y6Aelza~oNf^w3~>ZxIwdzS{~LQex_UUIgE(PazV9F=XOdJ87w zLMb^wbj*NBCq0d9dMfU+Mv}7-dRU>bO#z@Sba_ELS?o5erze+qc4kEb%BujO-~_nJ zKgEO%qh1+;%NBbMH0sa<%ni9M4I1uF=2QdrZjW>I_Qoq7monHK>!jiKX%bc!sS;D&Uo928Gm75s)vlXz0BY1vtbvV^!jXTBVTH90#LYr zaei^tglnm<8JHMa(SIb_x+Y=(;ls!am~^8gvwA*m0&As#1kyeJu&8huZ#(s=4q6>8 zV1$7Qh>X+_+V>+jq9V zMqtm|W%iSTmJgzL>G4$YY3%|%u3?~DV3a~50Q_jT!vh$Y7~;zVe@e|vl+_2|ewBqy zO9{ZP+5kT_V6-*oEq|*Q$wL6xeD6NtMhgH(FYd{^E|&%0SUkdwa|(m;y1a|+A6()G zcNHN0@B0Urp13h-4%x(9p@8zI7NZdWe4b%~A!#L3Ev2vE%ke)}E&e2Ex;>5R(w2wI z7Gq?l{+UQt!kV=G|I&ZW<6p1O6IxhVkJqEqkLRiBf5PRb%Nv*FTf35;XMG}e(Mi@P zuB)+v=1+%5OY}eC@*_qg{5I5#7>$r{`4PlugtJjCA`!waKbDbOWPKtLn}s7u3)o<* zPed0C%S8a}VwglqYRocntE7Qg;1g+Zt-rLhkA5zWzdedz>g)udv(v}%{B0IP10}x*^s#O@dQcMsAVuwi5{KfZjF$0s**&r2pNVF=7n*iA$Vv9W$&!YFP{Z19i!+ U*V(6@_y7O^07*qoM6N<$f+k&83;+NC literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SandyHouse.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/SandyHouse.png new file mode 100644 index 0000000000000000000000000000000000000000..b01b23623bfb270dbceb90d8a2e66e6afd2407aa GIT binary patch literal 770 zcmV+d1O5DoP)00001b5ch_0Itp) z=>Px%yh%hsR9J=WmOn@vQ5?rVku-~RI*JZ~L!numLWGod=vlB?3N4|7h=a3*W)!5E z0>X_B&Fm0yXc0Q50UL)(GX$qBDJYRQ#NkGl6q*kAC-0Jb-jNvM(C>1;d++ytzwdqD z@Auxtj#340bil#?L8M) zo;s!gNPBgp*Ym!n=or{Zoq4~i!9L*BjvGf*{qM3;z9+DoOrcBac}V6)>SK5vr0(=F zMVsD-LlU32F@5WXl-eN~+qe zky~81gNZQjXsC8;laXrlTF{m33E(!B94AP**pYUuEc9U#k1{VNBK4>FGmzvk;&Ro? zu!Ke9xPx%7fD1xR9J z=MVeNFXn}R)ZWjM!?o6M&cPUiESsTe8W4%ayqHAjE&%{gN&)EQ2Y@V_p>5x=m=`|J z^VG9tSj-E5*mwSXI{NeJc=h>wI$lLTRgIe@HtX%+fshbS$5%k=9$qAW`fCA+x87bu|!?h0N^FnA|mh?2@X1(u2P5zjFB+L00362R{*^dMX`+P6Hx>> z395*uY0z~SWZ7)^UY0WXCxMJf=A`Rbb=-oe58Q&a7G+uf@&)yYeWrbhp(mssh<0kYF?Ty(lU6}=83KK7t+hi3q{C85FS!qdB!YD@ zlAA@CiagIzRTavzj3P0)4EbSH1u;lcfR`bWAVp$RkYqvt&{~fgF&5D&;A0p!V(KK6 zPx$zDYzuR9J=Wma$F(F&M}Hs4qamKobTNqbxu$H&|oh6EHY*frSMy_YS-V39zuh za)Sd;Kw>zCiwUxziv!6ynBd}E2d@MUxPDcliTYpe+WY70uiv%(3jB4&Ow62f8TH+D zU88saa9}cUp&-Cme51$r=Kvs0L9|BBxl{xD{v3}_4;y{QhbIe9zweMCNEuMGW-JcI z&PZOW_9!OHvd95VyZ|u+p68JRd!Dy@fWdHt!Ej_0c&7jWFrAF?a{nCZNo12qXL3dW zq%{CQJGgUuqxF0VKqql=749m2E5K*<+-Px%K1oDDR9J=8m(NR7Q545NF9M+-7%sF;Zk)l;Y@DKng47En|A1K}MM4Ay1qCgv z*|Z6vg^-I`xCly&T)1p85cCwGpfLM6Bu<-YQ!YX&0>QAwd55}p-kV1n%bqS?1_O0^nJ( zY`kx2YB0v`5Lhm+M)tj3^%s`D0nm3#2+ZHj0Py}ww&p@{-QW%ZmF~GZ?;Kx@{Nu}6 zqn)eblt^4HsN5r2gOwa|u!mOmsUzBG$ zE%X0h7pNYEPDUqWob$zTYOu?Q%Y`IB=GA$U+$FFyX7+D>Se`S%1_0Lw&3LVWQ+;O2 zxV=}oL*QUW?(akX^d?l_0d-GDCmsM$ekfg_wXjfp>G z$`8xAaHAk69)*%IuZr9IFJISAxXA#-Fs)hj68cHj>J|K e=Ui2H0>1$6FU_?incV#V0000Px%B1uF+R9J<*SFvitFc5ty{RYp4LWTx9l+r-5)E^MAp-TcCI(O{Qv2^UvF>{7M zvlJ5O2PlgT2_Zv49Rh*Q`iXQpRhA{$vfaMPcRt-co$pR^3l_xD&B6ArD&~v#maaRt z1@85`O~(g-gH9yFD2{FpWdoVOC%%#-{8G|7eNq6oe)CmeMsa!0p}ds^%4({ z&k#a59qe}-DWA44odIorTR?vIv@;ulsu|GzrpYQ_gs#9k37-tu{2B=qVZYnp_U;~0 zJjghoPR8EdQ;EQ7`x4X1*r@kKB?7&Ex3M{K)QFcFaAtspO|Re03?7ozERbxnQ{~bG z(qtuzjH*{HIu~r~7W0oB2_pg993WZkf0L}+x!T%V1A6*wFxiw@=OiG6KoA5u5=D+_ z$9kI6WM!R_)(n`^R<;IA>!NsI+(4;0Q1mT}Mz`y|vkL&^T8(s3Jdjnbc8qFQCS%Ui zP~Cxk^67TEjjB`a)ogg3hGld`HjSNzK)owjZ30bP$!ZZG622D_D}nuP-%>d^dolfW9E~T7v0KeDr;rZFg8@((VJk!Y-w|Dos8X&z5s{QNB6F$GbN0}O6 zj3Ere!pT&Am` z*GmA9!2!(lzttf<5RoRK1O|W^p#7Yhi2MO&s_+Boy=ka}8EyIi0000Px)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx(CrLy>R9JP6AqHC6q(-?zHr(n5*I6l=Ndy~#qr?N`x431wkG-K$Tl##p+r3i5B;%4BeQ27+KB`%W_+ ztNJBv@~hz`tb%-c27=)TP2Mts;RueJ>ZFSfl|E#1E*IZKW<*%UAQ+B-63PmKnu;7? zb1s)dr4NB>d=v2H(Q9c6P(oQ}+s)|~PM;LvxQ@DTt`5?MpiH(wQcnyY~Y}V?QS)2e`YgnrmQN8Rq=RI(84!f zLIzyh9has1Jaxs~q|rdAAzP6v?R(l5s%p5M|h z$2N;q-H+g8FcqPe(D+f(euT8oWFiv@_in%HxOiC=W88jKxRh=+amU5Wa(qx;-4Qry zs)Q%rXEb{?zIJ)4yUe-#UJftX?uaArkaheMgY9_H?fiE4N=3I zj0w;}kQ*z1qpJ}|OMlvDpAzEzHueSMdoQ0!6G<~5oF{w79W~WNcb~}wQl6i-Ehnq^ zjI`gq$fq7mn%c0q#9Su0lDaT%F5ISyr-T0hfU*XWop!Kd00000NkvXXu0mjfPm3T; literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Summit.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Summit.png new file mode 100644 index 0000000000000000000000000000000000000000..06c883302775fb9d0fbb68c0fcf621ac252eec3e GIT binary patch literal 1334 zcmV-61Px(@JU2LR9J<@mrHNlR20X5z8SNKRA=raGfflMX(XC%x@fB|%El^vY}ky1#8+U? zy5EGaPzfm#I|Qm`iJ%2BJfsLU7`IKDhaE2_iwR>E=RWMTr6N?~O4fMB*Z2I+IsbF+ zo#4YS>YD#?sJBfxuE%WuK4kmpkmGv%PK|#$gw8)1-ragYxYmIVgcmy;u6)Moi?7~^ z;ZMx{D*(s!nB89=NNhSVeQ_cXs}%q@@7(3PZ@&J|hV5`EIIhQRkB993@&Ez|FLgjc zn8+u)5zN8nmg44}yJrG;-B8E%nC+j2?EY-Lo`Z0`!}QsS7!M5QN`+p^K*6ZU&jj)L zCOm9>e+VdNSQ)S95aVld&m3@}f&kK9EOP_7Zr(i`#C>xCsFv5yPY5q{97xlcyH`*g zC5+1a%n(f&Wfyi{n`pF*zl;D0{cwE-!MlS{R_)H~IYjX*mD2=)OfCvBI$WPQ$VYPq z;@;UHRJhjhN>|3XHN0B2qfi4i0nM#KjhVEyCwmPLB`;t-%#Pjj^7h&WYHZF+Nj96J&T$3cs<0+2xeZ8X*WhM zWU|hF1bdN(0JIi}(NXS1u3YUa+4}+KnO*qyESAM}1EQG<18X5zY&<`RoafDSZ2qA@ znH0DvG}O(mEWG*DpW4!H{7Sik%q@zwkcJJqQAl^3oVt?s!e zm84v^YwQ8x^$FA6h9Gy0+7ErrTM(_~nC7a(8Z;Hq%)QOOZRfm39n70 zD(W{wIAv=Q6@yAHyRjYkW>u7l4}ZUM0`(F%<1^er~;mSjw^V<*P5t-#q2i-x#AZZ=DCi z>k|h!eSX69hk0o}hYeNNZKF2#V7BaT?CPIEMX`02qDTbbG(>TfI6b(^SnY`Swp-5p zd(CZmROV2N*LorIr>9aNhU+u0f&GYJ)65r#MPvQ$Y;qt~9FYkMo4*4aE6M s%Bfj`r-trk6kAuNIdvP&$)p(IZ-$wVhEgX{=Kufz07*qoM6N<$g7(sdApigX literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Tent.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Tent.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ed9bf8b3340cf65affb2f239eb7c18c812ab9d GIT binary patch literal 735 zcmV<50wDc~P)Px%nMp)JR9J<*mp^C|Q5?rVrwOeE!K2U;j$GOlgbpR3aA0Zb;wA_#>JX_==ptm% zp$K(xwPO}H$w5ck;?k)$kq!aHYz|T|MFIiQNz^FkaDB<$B`X5s;q z*Sa&dvk7ogp)nn4*TByD1k28Euj5?ENl|%zYFvM&$DtL0@)|5!zd|1B)iyXO09GHT zy$?^d{Hp_qsy8h^Xy3j_XQ~Au1=v`bVPj>c<9sQDx4PVQEx{kPe5em;=ec-Dd-$)O_nlv2gQyZsS<-O<`-HlT3zP=K@d9&xqPGr z&meLRP-}X#ms-4dEB7IdKz^ZRh+Y@@mgZfgppSY0RRMwu<~s^eueRk6ij<535Db45 zW*iy{APakFTw$iM0s74}=seVhK@F%2Er6&);ncJYT(?c-SW=jZQBg`kzbM$*1c#@S z9G*_Xjhjl&VgbmC&2`(PGxMY~^SBRo{lRG171A(pA(F|?CMaztfzJROFh!xz46TGX zDgQSFBHjy0zx)QrG`b>I5%!yvTWo~K$JqtJI_c`fZv^+rJfLOTU+v7vr# z980mbG}E935PAocNwXN0_X0bcU~ktPYH;t#&+f@MA|SS4*KIR5-5P3eZo1X2g>ltD zF7JN*KyF{h^DNM`ge6*-Y37}qWYw!Q{ZF#pS0et#83-sTNGMCSXj!}vG>)Q<) zCw~S4NXxqU-Sgg@T;+EDJph$skJleB0)GcW+}*su!&^TPukf#`SAcg?fPW*l-s^~R R$Qb|t002ovPDHLkV1iz*N|OKp literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Town.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Town.png new file mode 100644 index 0000000000000000000000000000000000000000..efc54f04c90859cb5881d7eff93113e08269921c GIT binary patch literal 649 zcmV;40(Sk0P)Px%LrFwIR9J=0SG!KbKoFcn>0CKTiP9p`q;L_5md5GnBc%L*8w&d)oHj~}B0;_) zH1wo!LBj_`Mgl78qX=uQ&wJ+$0>MZrV&Cn|?cP2N{4qM(g>e`d?b`eI54GK%mN*&> zwKf5iMk~a*fD=b&Cr6MUP&~h)*q3M%BEE>jz;I%2Oap1JOGG0CoSYNq%Y|A%mZT{5 zrRBZSNFr(vByx#3OH$;^1+padip!D|wmn-!_gHd{e7UFzk=_^k62Ld z-DX|cB`@&%PktKGNh-$nSda}@nmPply7;zhd9-o>x42&@!)h`YM^LV#vJfk0f{&=?%_g{}s&CTVx@eU-sTk(_F?Uj4L25;Zw zIX-FGXq^d($QIzc1G~+-swHhRVPi`5jpUlVwu!lo)~VPf!WQC#YoF`8;D3G@xrC_6 j6~t-*wh#@D`8xgtv+m8Rg*QO#00000NkvXXu0mjfdq^v^ literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Trailer.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Trailer.png new file mode 100644 index 0000000000000000000000000000000000000000..83f8966646fc36c07ab0c3d9e6465bb8401fb29b GIT binary patch literal 709 zcmV;$0y_PPP)Px%e@R3^R9J<@R>6+iFc5t~?jK}VO8x?*hMS}8t@55KMXj`-uore0EquZv8Pp5? z15SIYv{sK1xj`kk^%Fp9^9PHd2kPLMILQK~Pl^#S)6XA20RTMDJBNRe*5e%jY`X0(rqk(JoMs4I+84N@R|hY^IWN_rlo}&SjyY@2 zIVh!>xj2qfr|O)EKuw)G1@^EY1PITCdleAPCOtR0RQG47U)% zXlNq5NR}8p^(&RO=XoHeUM_?{uh+|!bvm8Gg*oSGmn_q>eBa;X?MB~yz1hHgGE2wO zW|1rb0Iuz%W7l@l`69TsldS@2tRfta007UoHwcF#MBjfPdHIs+51#q}fcx%4##a4T zH=`5J^a0&@8RnB2zW!Vw?0?HdN48FyRl$N*R=i3_q+ar+wx;%;^1b?HF zhv38eo&HN!R@w=};RxYyg!yEKa5#c}-O9)rW8j?UChQ_v?#=7t$`R22fo)V|Nb~Xs z*ga5$5MYcU*5oy5tfNXRc5MgsX2Yl}t3i?!LhSh}j6hWqWhh$5NZ>6MVG4iVIzk8x zq6qihhaG|WWQKWVcll85i{6>_W+QX)kyBhktJMmGm`_u0L@r}#E|4lMvy{N=3glfr z0sUPx%e@R3^R9J<@R>6+iFc5t~?jK}VO8x?*hMS}8t@55KMXj`-uore0EquZv8Pp5? z15SIYv{sK1xj`kk^%Fp9^9PHd2kPLMILQK~Pl^#S)6XA20RTMDJBNRe*5e%jY`X0(rqk(JoMs4I+84N@R|hY^IWN_rlo}&SjyY@2 zIVh!>xj2qfr|O)EKuw)G1@^EY1PITCdleAPCOtR0RQG47U)% zXlNq5NR}8p^(&RO=XoHeUM_?{uh+|!bvm8Gg*oSGmn_q>eBa;X?MB~yz1hHgGE2wO zW|1rb0Iuz%W7l@l`69TsldS@2tRfta007UoHwcF#MBjfPdHIs+51#q}fcx%4##a4T zH=`5J^a0&@8RnB2zW!Vw?0?HdN48FyRl$N*R=i3_q+ar+wx;%;^1b?HF zhv38eo&HN!R@w=};RxYyg!yEKa5#c}-O9)rW8j?UChQ_v?#=7t$`R22fo)V|Nb~Xs z*ga5$5MYcU*5oy5tfNXRc5MgsX2Yl}t3i?!LhSh}j6hWqWhh$5NZ>6MVG4iVIzk8x zq6qihhaG|WWQKWVcll85i{6>_W+QX)kyBhktJMmGm`_u0L@r}#E|4lMvy{N=3glfr z0sUPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx)-AP12R9JQp^B^UPlr5HTE7s^0)vj4bkc2U3AgEBQ>%pz4juoHu27B4cV<>8j@8#JdP=fq!h{$Nl6^eOc$ejIiy6@jz3^< zIcM&<-#O==bMK)t|5?Z#i)%~`Yb-o%QZ#KchQ?T2V`JNv?|%8zu*OQkW@FoCEUqCS z-u?28ZJS;wnl`GKv{JB{`zRc>(ftq5h48_DQtw1~5_O8CfjWTv?Tx3;2gQrPS*X^7{5W#)gv|fEtzP$c zpq&GiMT1n-0iaY>DTP)6NF7W{rNlK8b?u^@^YP8svLeiXU6As`HIvGsA@y2`bpZ6r zxa4pqexzvHXz`%>*TEr`jp{b+$N259U@`-Csz$luFflkpB;-;*RA_7tF%&bo`oR!; z!>?FcYEe3LSz2oGvhfphAO3>cp-Xu^N-F9|Jttg6uZ%M{+=y|83nybV4dxeUOg7Z$0gLqUHD z!0&GVjqmRKMLI3ZP>{zW>Tzh-DOJX)CIb{|{{=>=>^Zy(qTwc>P^zkAu6cydo;^da zj8nu*Otom*Jow>=?3Dnqh|2X@uRN~L21#5qiH4hGQ${b2Gm%M#0k3+%tF-NMk+1(y zlymgu%@&Dss!XPbkDFwS_W54j2p)U#^HDTy^on=HTTfo|_l*?#ak=W3F34RV|J;%Z zvhdU+oq11k0Z|3wi2wISnuSFJU6c|a$;JC=H{sjDi&{XwFFa9z29S}mytUFU!|Ss_ zx&O zsDL^U1KQD6^Up1crq}sAeB9pecP+VYRO>;$&yN7`@Ntu`X0rhN@}pk^@YQUV%A$cT zi2VD%Q*%h1Q{T&oXt*hFyq%guv0Uf&%`oY`Z}|O~mxQ2rThMJp_gE}@cejAQa=Nj+ z+3GMt=q)@^NJVQHNiQmoURdO<6?EaLH~~+fD+p(ii|@h+FL@ipA}S?Tp*l&a>g84` zv{DvzsUb z6|?Dut$XXbog4d9^9+z7>oNi$+Jk&(u=AP**xf&3FaX&=ZzKKx6E?PO?=BGNbpndp zP!PuxrxU~zAy(H9^rbN5(gnTaPeeXwG93Ak0v40wA@B}=r{>7f4?lT)FmdAPp65jl66aL8R`;j? zd@^yBzVH@J%f@XE&+i26FKSy$UjodHdWT7&Fv_3)2>L*0QnecHsj`1AdW}q>Fv`oA zb{9ab2@pwNz6-}4k*;ksJiPA$n6Dd(`lgvPV%d8;0s9MBlS+Of_0T;b>+h>^coab& zP^9;%sKdS$yjQh$a{~j3`9vr+4^ZAOPx(wMj%lR9J<@mQPGnR}{v7GtNL7m>GvR$qdYkgi^v7(MZQef<{SWf+ePLL82kn z1q-`r7p|>MOl9MyChf{aHxOiF(zsAeSWu%A4WSsZi3G60yjO(=lTw!=>|4*wwvF~6mN^iPZni;Ut7IxOif0(HvEtP zKz;NtAR-4f-Jt*M6_O1q-=En-zOYU-?58Fa`p4v@ViACz?i9D~Jaw%%Il;f3A+_gX z#Ty<3rD9Rmh4@mjNWQSn^6oY?-C%il+otwi0<6XWPWGLq|Lhg=g>_rM*iB6+WZRjV zj7X0GeEt5@E$s(HMYv?HJf3V&0r+uvL>d-zoLI~UY;83eaS=I%+XO7;1MVO!lTVLa zl5I_Q8{ACTA|c4ziM{5zf>6^9=xj&-O#_gwv?{-K$L>}yVRzpsjJ4bcFu${hIAYnP znl$-j3|NC{@2*ctHmFQLze&EZPE9D}@=#BAN*WR+8uk+n`)%X^kFMTetmQs;-zY@G zew){9ho|;j8;4|Z-{WN2699A1|8QMH0Zlj1bTd}OoQD~or-+9cAIHFb1dI6q(XgNCkxNXEU?!g7 z3IQN9S*cirT*au^b-u99Qg)42vM|)i7#Wv%IXD_VAunPR$p{?2=Q z``31!?K=R#vwa7+{TM!J60s6AMf`4xaKa?FLmt5gyWVpRny8%ncR!^h`L&PJaHxrM z->|s|3*w2O=Z3aSL{>b=rCIvy3^l;FN(~%pGKF01<^0VQw+G?NqviatdFr=qND6Si zh5{llh~SEK9p}aPs3ia4!dLVUTqf3a90rG&cv9MO6IO_89oS}`3@(E3VtkZX*Kr04 za3QSGKX93Wg362WQQ|lP6IJQI<4Mxhej0!?cVU=Wtd?elWv3Gu-pI+RJkPpMdx zWY)S@+aoPm}zuV*|Flp_3Mkx&#*1W}U_CTHfi-T88ELl)6?dci4Va%LVi86lns0**u! zsjVvC2t$f;8WMu7WSe29;zOycCiij`fQ5xs(yh&Cx*=~~KoF%{n*o@dnI}y%Jx5b4 zW!IRTnWwR_S{fAwz1;1bvz*&Nsl!GtvZ}D_JGHlZV_{*{<^^XIH#SzI)R`i3FIPS5 zUYMW#Q+na&se*0n!}c%$zV3#qcbfPx(wMj%lR9J<@mQPGnR}{v7GtNL7m>GvR$qdYkgi^v7(MZQef<{SWf+ePLL82kn z1q-`r7p|>MOl9MyChf{aHxOiF(zsAeSWu%A4WSsZi3G60yjO(=lTw!=>|4*wwvF~6mN^iPZni;Ut7IxOif0(HvEtP zKz;NtAR-4f-Jt*M6_O1q-=En-zOYU-?58Fa`p4v@ViACz?i9D~Jaw%%Il;f3A+_gX z#Ty<3rD9Rmh4@mjNWQSn^6oY?-C%il+otwi0<6XWPWGLq|Lhg=g>_rM*iB6+WZRjV zj7X0GeEt5@E$s(HMYv?HJf3V&0r+uvL>d-zoLI~UY;83eaS=I%+XO7;1MVO!lTVLa zl5I_Q8{ACTA|c4ziM{5zf>6^9=xj&-O#_gwv?{-K$L>}yVRzpsjJ4bcFu${hIAYnP znl$-j3|NC{@2*ctHmFQLze&EZPE9D}@=#BAN*WR+8uk+n`)%X^kFMTetmQs;-zY@G zew){9ho|;j8;4|Z-{WN2699A1|8QMH0Zlj1bTd}OoQD~or-+9cAIHFb1dI6q(XgNCkxNXEU?!g7 z3IQN9S*cirT*au^b-u99Qg)42vM|)i7#Wv%IXD_VAunPR$p{?2=Q z``31!?K=R#vwa7+{TM!J60s6AMf`4xaKa?FLmt5gyWVpRny8%ncR!^h`L&PJaHxrM z->|s|3*w2O=Z3aSL{>b=rCIvy3^l;FN(~%pGKF01<^0VQw+G?NqviatdFr=qND6Si zh5{llh~SEK9p}aPs3ia4!dLVUTqf3a90rG&cv9MO6IO_89oS}`3@(E3VtkZX*Kr04 za3QSGKX93Wg362WQQ|lP6IJQI<4Mxhej0!?cVU=Wtd?elWv3Gu-pI+RJkPpMdx zWY)S@+aoPm}zuV*|Flp_3Mkx&#*1W}U_CTHfi-T88ELl)6?dci4Va%LVi86lns0**u! zsjVvC2t$f;8WMu7WSe29;zOycCiij`fQ5xs(yh&Cx*=~~KoF%{n*o@dnI}y%Jx5b4 zW!IRTnWwR_S{fAwz1;1bvz*&Nsl!GtvZ}D_JGHlZV_{*{<^^XIH#SzI)R`i3FIPS5 zUYMW#Q+na&se*0n!}c%$zV3#qcbfPx(wMj%lR9J<@mQPGnR}{v7GtNL7m>GvR$qdYkgi^v7(MZQef<{SWf+ePLL82kn z1q-`r7p|>MOl9MyChf{aHxOiF(zsAeSWu%A4WSsZi3G60yjO(=lTw!=>|4*wwvF~6mN^iPZni;Ut7IxOif0(HvEtP zKz;NtAR-4f-Jt*M6_O1q-=En-zOYU-?58Fa`p4v@ViACz?i9D~Jaw%%Il;f3A+_gX z#Ty<3rD9Rmh4@mjNWQSn^6oY?-C%il+otwi0<6XWPWGLq|Lhg=g>_rM*iB6+WZRjV zj7X0GeEt5@E$s(HMYv?HJf3V&0r+uvL>d-zoLI~UY;83eaS=I%+XO7;1MVO!lTVLa zl5I_Q8{ACTA|c4ziM{5zf>6^9=xj&-O#_gwv?{-K$L>}yVRzpsjJ4bcFu${hIAYnP znl$-j3|NC{@2*ctHmFQLze&EZPE9D}@=#BAN*WR+8uk+n`)%X^kFMTetmQs;-zY@G zew){9ho|;j8;4|Z-{WN2699A1|8QMH0Zlj1bTd}OoQD~or-+9cAIHFb1dI6q(XgNCkxNXEU?!g7 z3IQN9S*cirT*au^b-u99Qg)42vM|)i7#Wv%IXD_VAunPR$p{?2=Q z``31!?K=R#vwa7+{TM!J60s6AMf`4xaKa?FLmt5gyWVpRny8%ncR!^h`L&PJaHxrM z->|s|3*w2O=Z3aSL{>b=rCIvy3^l;FN(~%pGKF01<^0VQw+G?NqviatdFr=qND6Si zh5{llh~SEK9p}aPs3ia4!dLVUTqf3a90rG&cv9MO6IO_89oS}`3@(E3VtkZX*Kr04 za3QSGKX93Wg362WQQ|lP6IJQI<4Mxhej0!?cVU=Wtd?elWv3Gu-pI+RJkPpMdx zWY)S@+aoPm}zuV*|Flp_3Mkx&#*1W}U_CTHfi-T88ELl)6?dci4Va%LVi86lns0**u! zsjVvC2t$f;8WMu7WSe29;zOycCiij`fQ5xs(yh&Cx*=~~KoF%{n*o@dnI}y%Jx5b4 zW!IRTnWwR_S{fAwz1;1bvz*&Nsl!GtvZ}D_JGHlZV_{*{<^^XIH#SzI)R`i3FIPS5 zUYMW#Q+na&se*0n!}c%$zV3#qcbfPx%ZAnByR9J=Wl)q~eVHn3hm$U`FrjZhp*rtKRaF7Iw4Jd+jaOhwuWQw3JLI#Hp z;%F8T#Q&fm4&u~83l1XwnC(z2G*eRz+Cpq7#1K-#ErL0RBq?g=ay#l=cm@Rr0j?=3g~LA;-si zep?k=VQUcq#KVea{IBgPrp2>fUqTAyP2X(q=6mwnHqgn4wx|3fYKq$tHNy5H0!WfJ zbwLW{kwSS!FBOl>>6?LgSkauG2(nu?oy%^SQI`u}z>hEB$LWc*jjJ2P7m)?(p^AE_ zBD-b0las>V3yq+Kqq=Y$2zTH@Ho?KnmM(gBYz$XZyjH7`7@p>v0H4r}jfWL2vU?q; zCjvlXcp894%>M3&m+ViiicpH*f&Hmf-Gp@nZ&DB7s~Dfi2yQ1yFIz`o?7)ePpjNBtzyFI7 zsGn6KKA{l+#KX#RYY`b=0zj!)WHXz+1FQ_pK+A+N&@$8%XHW)ACc413_;C#MG9e@m Z@E1aG(5*x*ar^)P002ovPDHLkV1kFwIF|qb literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WizardHouseBasement.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/WizardHouseBasement.png new file mode 100644 index 0000000000000000000000000000000000000000..ec035ce56024682a423264cbbc8422134bfb27cf GIT binary patch literal 691 zcmV;k0!;mhP)Px%ZAnByR9J=Wl)q~eVHn3hm$U`FrjZhp*rtKRaF7Iw4Jd+jaOhwuWQw3JLI#Hp z;%F8T#Q&fm4&u~83l1XwnC(z2G*eRz+Cpq7#1K-#ErL0RBq?g=ay#l=cm@Rr0j?=3g~LA;-si zep?k=VQUcq#KVea{IBgPrp2>fUqTAyP2X(q=6mwnHqgn4wx|3fYKq$tHNy5H0!WfJ zbwLW{kwSS!FBOl>>6?LgSkauG2(nu?oy%^SQI`u}z>hEB$LWc*jjJ2P7m)?(p^AE_ zBD-b0las>V3yq+Kqq=Y$2zTH@Ho?KnmM(gBYz$XZyjH7`7@p>v0H4r}jfWL2vU?q; zCjvlXcp894%>M3&m+ViiicpH*f&Hmf-Gp@nZ&DB7s~Dfi2yQ1yFIz`o?7)ePpjNBtzyFI7 zsGn6KKA{l+#KX#RYY`b=0zj!)WHXz+1FQ_pK+A+N&@$8%XHW)ACc413_;C#MG9e@m Z@E1aG(5*x*ar^)P002ovPDHLkV1kFwIF|qb literal 0 HcmV?d00001 diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Woods.png b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/assets/Locations/Woods.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c02f675b514a1cce2dfb740d99ac6760bd390 GIT binary patch literal 523 zcmV+m0`&cfP)Px$#Ysd#R9J=WRxwM%KotHep-Uqj9J;lm;8H9$OQsIRtwINJ6Y5_O2M5PY{sy62 z$q>*@9EwAiv=DG8bnWKgP?{`KtV6l;F1c%7s+;*BO&(c2QRLFwc*kr|kvISn&#EF; zLj_U`s58Ay_^$*oXQi%%$n&Kv8AP6eBAnC$>;3?U^b{EMh$@Uj*sACGL_!igeU^|;aHYztt+*E{gLjI5_mD0qO2G-oecoxlOt|N zbNwi$wqWEg3&uQ5Eu~I) Date: Sun, 1 Dec 2019 18:37:36 -0800 Subject: [PATCH 09/52] Updated night owl and fixed a SSR bug. --- GeneralMods/NightOwl/Framework/NightOwlAPI.cs | 59 +++++++++++++++++++ GeneralMods/NightOwl/NightOwl.cs | 45 ++++++++++++-- GeneralMods/NightOwl/NightOwl.csproj | 1 + GeneralMods/NightOwl/manifest.json | 4 +- GeneralMods/StardewMods.sln | 14 ----- .../Framework/V2/MusicManagerV2.cs | 11 +++- .../StardewSymphonyRemastered/manifest.json | 4 +- GeneralMods/StardustCore/manifest.json | 2 +- 8 files changed, 115 insertions(+), 25 deletions(-) create mode 100644 GeneralMods/NightOwl/Framework/NightOwlAPI.cs diff --git a/GeneralMods/NightOwl/Framework/NightOwlAPI.cs b/GeneralMods/NightOwl/Framework/NightOwlAPI.cs new file mode 100644 index 00000000..51100ebe --- /dev/null +++ b/GeneralMods/NightOwl/Framework/NightOwlAPI.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.NightOwl.Framework +{ + public class NightOwlAPI + { + + /// + /// Adds an event that triggers after the player has been warped to their pre-collapse position. + /// + /// The id of the event. + /// The code that triggers. + public void addPostWarpEvent(string ID,Func Action) + { + NightOwl.PostWarpCharacter.Add(ID, Action); + } + + + /// + /// Removes an event that triggers when the player has been warped to their pre-collapse position. + /// + /// + public void removePostWarpEvent(string ID) + { + if (NightOwl.PostWarpCharacter.ContainsKey(ID)) + { + NightOwl.PostWarpCharacter.Remove(ID); + } + } + + /// + /// Adds an event that triggers when the player has stayed up all night until 6:00 A.M. + /// + /// The id of the event. + /// The code that triggers. + public void addPlayerUpLateEvent(string ID, Func Action) + { + NightOwl.OnPlayerStayingUpLate.Add(ID, Action); + } + + /// + /// Removes an event that triggers when the player has stayed up all night. + /// + /// + public void removePlayerUpLateEvent(string ID) + { + if (NightOwl.OnPlayerStayingUpLate.ContainsKey(ID)) + { + NightOwl.OnPlayerStayingUpLate.Remove(ID); + } + } + + + } +} diff --git a/GeneralMods/NightOwl/NightOwl.cs b/GeneralMods/NightOwl/NightOwl.cs index 86aeaa71..2f933810 100644 --- a/GeneralMods/NightOwl/NightOwl.cs +++ b/GeneralMods/NightOwl/NightOwl.cs @@ -20,6 +20,19 @@ namespace Omegasis.NightOwl /// The mod entry point. public class NightOwl : Mod { + + /********* + ** Static Fields + *********/ + /// + /// Events that are handled after the player has warped after they have stayed up late. + /// + public static Dictionary> PostWarpCharacter = new Dictionary>(); + /// + /// Events that are handled when the player has stayed up late and are going to collapse. + /// + public static Dictionary> OnPlayerStayingUpLate = new Dictionary>(); + /********* ** Fields *********/ @@ -71,12 +84,13 @@ namespace Omegasis.NightOwl /// Determines whehther or not to rewarp the player's horse to them. private bool shouldWarpHorse; - /// Event in the night taht simulates the earthquake event that should happen. + /// Event in the night that simulates the earthquake event that should happen. StardewValley.Events.SoundInTheNightEvent eve; private List oldAnimalHappiness; + /********* ** Public methods *********/ @@ -98,6 +112,10 @@ namespace Omegasis.NightOwl this.shouldWarpHorse = false; } + public override object GetApi() + { + return new NightOwlAPI(); + } /********* ** Private methods @@ -117,7 +135,13 @@ namespace Omegasis.NightOwl if (Context.IsWorldReady && this.JustStartedNewDay && this.Config.KeepPositionAfterCollapse) { if (this.PreCollapseMap != null) + { Game1.warpFarmer(this.PreCollapseMap, this.PreCollapseTile.X, this.PreCollapseTile.Y, false); + foreach (var v in PostWarpCharacter) + { + v.Value.Invoke(); + } + } this.PreCollapseMap = null; this.JustStartedNewDay = false; @@ -148,7 +172,7 @@ namespace Omegasis.NightOwl } if (this.Config.KeepMoneyAfterCollapse) - Game1.player.money += collapseFee; + Game1.player.Money += collapseFee; } /// Raised after the player loads a save slot and the world is initialised. @@ -183,7 +207,13 @@ namespace Omegasis.NightOwl if (this.Config.KeepPositionAfterCollapse) { if (!Game1.weddingToday) + { Game1.warpFarmer(this.PreCollapseMap, this.PreCollapseTile.X, this.PreCollapseTile.Y, false); + foreach(var v in PostWarpCharacter) + { + v.Value.Invoke(); + } + } } if (this.horse != null && this.shouldWarpHorse) @@ -196,7 +226,7 @@ namespace Omegasis.NightOwl if (this.isBathing) Game1.player.swimming.Value = true; - //Reflction to ensure that the railroad becomes properly unblocked. + //Reflection to ensure that the railroad becomes properly unblocked. if (Game1.dayOfMonth == 1 && Game1.currentSeason == "summer" && Game1.year == 1) { Mountain mountain = (Mountain)Game1.getLocationFromName("Mountain"); @@ -304,7 +334,7 @@ namespace Omegasis.NightOwl this.PreCollapseMap = Game1.player.currentLocation.Name; this.PreCollapseStamina = Game1.player.stamina; this.PreCollapseHealth = Game1.player.health; - this.PreCollapseMoney = Game1.player.money; + this.PreCollapseMoney = Game1.player.Money; this.isInSwimSuit = Game1.player.bathingClothes.Value; this.isBathing = Game1.player.swimming.Value; @@ -314,7 +344,7 @@ namespace Omegasis.NightOwl if (Game1.activeClickableMenu != null) Game1.activeClickableMenu.exitThisMenu(true); //Exit menus. - Game1.timeOfDay += 2400; //Recalculate for the sake of technically being up a whole day. + //Game1.timeOfDay += 2400; //Recalculate for the sake of technically being up a whole day. Why did I put this here? //Reset animal happiness since it drains over night. for (int i = 0; i < this.oldAnimalHappiness.Count; i++) @@ -322,6 +352,11 @@ namespace Omegasis.NightOwl Game1.getFarm().getAllFarmAnimals()[i].happiness.Value = this.oldAnimalHappiness[i].Value; } + foreach(var v in OnPlayerStayingUpLate) + { + v.Value.Invoke(); + } + Game1.player.startToPassOut(); } } diff --git a/GeneralMods/NightOwl/NightOwl.csproj b/GeneralMods/NightOwl/NightOwl.csproj index 05d47fe6..6a78faa1 100644 --- a/GeneralMods/NightOwl/NightOwl.csproj +++ b/GeneralMods/NightOwl/NightOwl.csproj @@ -78,6 +78,7 @@ + diff --git a/GeneralMods/NightOwl/manifest.json b/GeneralMods/NightOwl/manifest.json index acff5fad..6257c1e6 100644 --- a/GeneralMods/NightOwl/manifest.json +++ b/GeneralMods/NightOwl/manifest.json @@ -1,10 +1,10 @@ { "Name": "Night Owl", "Author": "Alpha_Omegasis", - "Version": "1.9.0", + "Version": "1.10.0", "Description": "Lets you stay up all night.", "UniqueID": "Omegasis.NightOwl", "EntryDll": "NightOwl.dll", - "MinimumApiVersion": "2.10.1", + "MinimumApiVersion": "3.0.0", "UpdateKeys": [ "Nexus:433" ] } diff --git a/GeneralMods/StardewMods.sln b/GeneralMods/StardewMods.sln index c6cd0630..7fc00954 100644 --- a/GeneralMods/StardewMods.sln +++ b/GeneralMods/StardewMods.sln @@ -74,8 +74,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Revitalize", "Revitalize\Re {0756D36A-95C8-480D-8EA6-4584C03010C6} = {0756D36A-95C8-480D-8EA6-4584C03010C6} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MapExampleRF1", "MapExampleRF1\MapExampleRF1.csproj", "{696CDAA9-295F-49F0-97F9-334F626EA137}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -350,18 +348,6 @@ Global {44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.x86|Any CPU.Build.0 = Release|Any CPU {44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.x86|x86.ActiveCfg = Release|Any CPU {44EF6CEC-FBF1-4B45-8135-81D4EBE84DDD}.x86|x86.Build.0 = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Debug|Any CPU.Build.0 = Debug|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Debug|x86.ActiveCfg = Debug|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Debug|x86.Build.0 = Debug|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Release|Any CPU.ActiveCfg = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Release|Any CPU.Build.0 = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Release|x86.ActiveCfg = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.Release|x86.Build.0 = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.x86|Any CPU.ActiveCfg = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.x86|Any CPU.Build.0 = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.x86|x86.ActiveCfg = Release|Any CPU - {696CDAA9-295F-49F0-97F9-334F626EA137}.x86|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs index 78ef0fea..c734215d 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/Framework/V2/MusicManagerV2.cs @@ -173,10 +173,19 @@ namespace StardewSymphonyRemastered.Framework.V2 return false; } } - if (warpCheck == true && StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.ContainsKey(Game1.player.currentLocation.Name)) + if (warpCheck == true) { + if (StardewSymphony.Config.LocationsToIgnoreWarpMusicChange.ContainsKey(Game1.player.currentLocation.Name)) + { + if (StardewSymphony.Config.LocationsToIgnoreWarpMusicChange[Game1.player.currentLocation.Name] == true) + { + return false; + } + } return false; } + + //Prevent generic song changes when running about. SongConditionals conditional = new SongConditionals(songListKey); diff --git a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json index fdc55b07..ac161b15 100644 --- a/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json +++ b/GeneralMods/StardewSymphonyRemastered/StardewSymphonyRemastered/manifest.json @@ -1,11 +1,11 @@ { "Name": "Stardew Symphony Remastered", "Author": "Alpha_Omegasis", - "Version": "3.1.0", + "Version": "3.1.1", "Description": "Adding more music to the game one beep at a time. Now with streaming!", "UniqueID": "Omegasis.StardewSymphonyRemastered", "EntryDll": "StardewSymphonyRemastered.dll", - "MinimumApiVersion": "2.10.1", + "MinimumApiVersion": "3.0.0", "UpdateKeys": [ "Nexus:425" ], "Dependencies": [ { "UniqueID": "Omegasis.StardustCore" } diff --git a/GeneralMods/StardustCore/manifest.json b/GeneralMods/StardustCore/manifest.json index 520808d0..864047c2 100644 --- a/GeneralMods/StardustCore/manifest.json +++ b/GeneralMods/StardustCore/manifest.json @@ -1,7 +1,7 @@ { "Name": "StardustCore", "Author": "Alpha_Omegasis", - "Version": "2.2.2", + "Version": "2.3.0", "Description": "A core mod that allows for other mods of mine to be run.", "UniqueID": "Omegasis.StardustCore", "EntryDll": "StardustCore.dll", From 3d50d2e38a42fe857e2683573aa073b2b5cb9f13 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Sun, 1 Dec 2019 20:47:31 -0800 Subject: [PATCH 10/52] Updates to happy birthday to fix some bugs. Also started making spouse messages. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 181 ++++++++++++-- .../Framework/TranslationInfo.cs | 220 ++++++++++-------- GeneralMods/HappyBirthday/HappyBirthday.cs | 26 ++- 3 files changed, 308 insertions(+), 119 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 31ba55fe..4dc41af7 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -1,6 +1,11 @@ +using System; using System.Collections.Generic; using System.IO; +using System.Text; using Newtonsoft.Json; +using StardewModdingAPI; +using StardewValley; +using static StardewValley.LocalizedContentManager; namespace Omegasis.HappyBirthday { @@ -27,6 +32,8 @@ namespace Omegasis.HappyBirthday ["Penny"] = "", }; + public Dictionary> spouseEnglishGeneratedMessages = new Dictionary>(); + /// Used to contain birthday wishes should the mod not find any available. public Dictionary defaultBirthdayWishes = new Dictionary() { @@ -67,6 +74,18 @@ namespace Omegasis.HappyBirthday public BirthdayMessages() { + this.spouseEnglishGeneratedMessages.Add("Alex", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Elliott", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Harvey", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Sam", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Sebastian", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Shane", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Abigail", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Emily", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Haley", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Leah", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Maru", this.generateSpouseMessage); + this.spouseEnglishGeneratedMessages.Add("Penny", this.generateSpouseMessage); this.createBirthdayGreetings(); this.loadTranslationStrings(); } @@ -142,11 +161,11 @@ namespace Omegasis.HappyBirthday serializer.Formatting = Formatting.Indented; //English logic. - string defaultPath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.currentTranslation); + string defaultPath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(HappyBirthday.Config.translationInfo.CurrentTranslation)); if (!Directory.Exists(defaultPath)) Directory.CreateDirectory(defaultPath); - string birthdayFileDict = HappyBirthday.Config.translationInfo.getjsonForTranslation("BirthdayWishes", HappyBirthday.Config.translationInfo.currentTranslation); - string path = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.currentTranslation, birthdayFileDict); + string birthdayFileDict = HappyBirthday.Config.translationInfo.getJSONForTranslation("BirthdayWishes", HappyBirthday.Config.translationInfo.CurrentTranslation); + string path = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(HappyBirthday.Config.translationInfo.CurrentTranslation), birthdayFileDict); //Handle normal birthday wishes. if (!File.Exists(Path.Combine(HappyBirthday.ModHelper.DirectoryPath, path))) @@ -159,8 +178,8 @@ namespace Omegasis.HappyBirthday this.birthdayWishes = HappyBirthday.ModHelper.Data.ReadJsonFile>(path); //handle spouse birthday wishes. - string spouseBirthdayFileDict = HappyBirthday.Config.translationInfo.getjsonForTranslation("SpouseBirthdayWishes", HappyBirthday.Config.translationInfo.currentTranslation); - string spousePath = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.currentTranslation, spouseBirthdayFileDict); + string spouseBirthdayFileDict = HappyBirthday.Config.translationInfo.getJSONForTranslation("SpouseBirthdayWishes", HappyBirthday.Config.translationInfo.CurrentTranslation); + string spousePath = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(HappyBirthday.Config.translationInfo.CurrentTranslation), spouseBirthdayFileDict); if (!File.Exists(Path.Combine(HappyBirthday.ModHelper.DirectoryPath, spousePath))) { HappyBirthday.ModMonitor.Log("Creating Spouse Messages", StardewModdingAPI.LogLevel.Alert); @@ -171,16 +190,16 @@ namespace Omegasis.HappyBirthday this.spouseBirthdayWishes = HappyBirthday.ModHelper.Data.ReadJsonFile>(spousePath); //Non-english logic for creating templates. - foreach (var translation in HappyBirthday.Config.translationInfo.translationCodes) + foreach (var translation in HappyBirthday.Config.translationInfo.TranslationCodes) { - if (translation.Key == "English") + if (translation.Key == Framework.TranslationInfo.LanguageName.English) continue; - string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", translation.Key); + string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key)); if (!Directory.Exists(basePath)) Directory.CreateDirectory(basePath); - string tempBirthdayFile = Path.Combine("Content", "Dialogue", translation.Key, HappyBirthday.Config.translationInfo.getjsonForTranslation("BirthdayWishes", translation.Key)); - string tempSpouseBirthdayFile = Path.Combine("Content", "Dialogue", translation.Key, HappyBirthday.Config.translationInfo.getjsonForTranslation("SpouseBirthdayWishes", translation.Key)); + string tempBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("BirthdayWishes", translation.Key)); + string tempSpouseBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("SpouseBirthdayWishes", translation.Key)); Dictionary tempBirthdayDict = new Dictionary(); @@ -205,7 +224,7 @@ namespace Omegasis.HappyBirthday tempSpouseBirthdayDict = HappyBirthday.ModHelper.Data.ReadJsonFile>(tempSpouseBirthdayFile); //Set translated birthday info. - if (HappyBirthday.Config.translationInfo.currentTranslation == translation.Key) + if (HappyBirthday.Config.translationInfo.CurrentTranslation == translation.Key) { this.birthdayWishes = tempBirthdayDict; this.spouseBirthdayWishes = tempSpouseBirthdayDict; @@ -216,7 +235,7 @@ namespace Omegasis.HappyBirthday public static string GetTranslatedString(string key) { - StardewValley.LocalizedContentManager.LanguageCode code = HappyBirthday.Config.translationInfo.translationCodes[HappyBirthday.Config.translationInfo.currentTranslation]; + StardewValley.LocalizedContentManager.LanguageCode code = HappyBirthday.Config.translationInfo.TranslationCodes[HappyBirthday.Config.translationInfo.CurrentTranslation]; string value= HappyBirthday.Instance.messages.translatedStrings[code][key]; if (string.IsNullOrEmpty(value)) { @@ -235,15 +254,15 @@ namespace Omegasis.HappyBirthday { //Non-english logic for creating templates. - foreach (var translation in HappyBirthday.Config.translationInfo.translationCodes) + foreach (var translation in HappyBirthday.Config.translationInfo.TranslationCodes) { StardewValley.LocalizedContentManager.LanguageCode code = translation.Value; - string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", translation.Key); + string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key)); if (!Directory.Exists(basePath)) Directory.CreateDirectory(basePath); - string stringsFile = Path.Combine("Content", "Dialogue", translation.Key, HappyBirthday.Config.translationInfo.getjsonForTranslation("TranslatedStrings", translation.Key)); + string stringsFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("TranslatedStrings", translation.Key)); if (!File.Exists(Path.Combine(HappyBirthday.ModHelper.DirectoryPath, stringsFile))) @@ -256,5 +275,137 @@ namespace Omegasis.HappyBirthday } } + public string getAffectionateSpouseWord() + { + + List words = new List(); + if (Game1.player.IsMale) + { + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4507", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4509", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4511", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4514", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4515", HappyBirthday.Config.translationInfo.CurrentTranslation)); + + + } + else + { + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4512", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4513", HappyBirthday.Config.translationInfo.CurrentTranslation)); + + } + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4508", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4510", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4516", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4517", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4518", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4519", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4522", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4523", HappyBirthday.Config.translationInfo.CurrentTranslation)); + return words[Game1.random.Next(0, words.Count - 1)]; + } + + public string getTimeOfDayString() + { + if (Game1.timeOfDay >= 600 && Game1.timeOfDay < 1200) + { + return "morning"; + } + else if (Game1.timeOfDay >= 1200 && Game1.timeOfDay < 600) + { + return "afternoon"; + } + else return "evening"; + } + + + public void generateSpouseBirthdayDialogue(string SpeakerName) + { + this.spouseEnglishGeneratedMessages[SpeakerName].Invoke(SpeakerName); + } + + /// + /// + /// + /// + /// + private string generateSpouseMessage(string SpeakerName) + { + StringBuilder b = new StringBuilder(); + switch (SpeakerName) + { + case ("Alex"): + b.Append("Hey "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("I'm so glad that I married you. You make every day feel like winning a sports match. Happy birthday! $h"); + + break; + case ("Elliott"): + b.Append("Good "); + b.Append(this.getTimeOfDayString()); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("I was just thinking on how you have been a muse for my work. You inspire me every day I spend with you. Happy birthday! $h"); + + break; + case ("Harvey"): + b.Append("Good "); + b.Append(this.getTimeOfDayString()); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("I was just thinking on how invigorated I've felt since marrying you. When I look at you I feel as I'm positively glowing with joy. Happy birthday! $h"); + + break; + case ("Sam"): + b.Append("Good "); + b.Append(this.getTimeOfDayString()); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("You know I never saw myself settling down before I met you, but now that I have I feel like I never want to look back. Happy birthday! $h"); + + break; + case ("Sebastian"): + b.Append("I was never a big celebrater of birthdays but with you, today is special. Happy birthday"); + b.Append(this.getAffectionateSpouseWord()); + b.Append("$h"); + b.Append("."); + + break; + case ("Shane"): + + + break; + case ("Abigail"): + + + break; + case ("Emily"): + + + break; + case ("Haley"): + + + break; + case ("Leah"): + + + break; + case ("Maru"): + + + break; + case ("Penny"): + + + break; + default: + + break; + } + return b.ToString(); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index d534dd4d..2c5e2faf 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -1,5 +1,6 @@ +using System; using System.Collections.Generic; -using System.IO; +using System.Linq; using StardewValley; namespace Omegasis.HappyBirthday.Framework @@ -7,65 +8,85 @@ namespace Omegasis.HappyBirthday.Framework /// A class which deals with handling different translations for Vocalization should other voice teams ever wish to voice act for that language. public class TranslationInfo { - /// The list of all supported translations by this mod. - public List translations; + + public enum LanguageName + { + English, + Spanish, + Chinese, + Japanese, + Russian, + German, + Portuguese, + Italian, + French, + Korean, + Turkish, + Hungarian + } + /********* + ** Accessors + *********/ + /// The language names supported by this mod. + public LanguageName[] LanguageNames { get; } = (from LanguageName language in Enum.GetValues(typeof(LanguageName)) select language).ToArray(); /// The current translation mode for the mod, so that it knows what files to load at the beginning of the game. - public string currentTranslation; + public LanguageName CurrentTranslation { get; set; } = LanguageName.English; /// Holds the info for what translation has what file extension. - public Dictionary translationFileInfo; + public Dictionary TranslationFileExtensions { get; } = new Dictionary(); - public Dictionary translationCodes; + public Dictionary TranslationCodes { get; } = new Dictionary(); - /// Construct an instance.. + + /********* + ** Public methods + *********/ + /// Construct an instance. public TranslationInfo() { - this.translations = new List(); - - this.translationFileInfo = new Dictionary(); - this.translationCodes = new Dictionary(); - this.translations.Add("English"); - this.translations.Add("Spanish"); - this.translations.Add("Chinese"); - this.translations.Add("Japanese"); - this.translations.Add("Russian"); - this.translations.Add("German"); - this.translations.Add("Brazillian Portuguese"); - - this.currentTranslation = "English"; - - this.translationFileInfo.Add("English", ".json"); - this.translationFileInfo.Add("Spanish", ".es-ES.json"); - this.translationFileInfo.Add("Chinese", ".zh-CN.json"); - this.translationFileInfo.Add("Japanese", ".ja-JP.json"); - this.translationFileInfo.Add("Russian", ".ru-RU.json"); - this.translationFileInfo.Add("German", ".de-DE.json"); - this.translationFileInfo.Add("Brazillian Portuguese", ".pt-BR.json"); + this.TranslationFileExtensions.Add(LanguageName.English, ".xnb"); + this.TranslationFileExtensions.Add(LanguageName.Spanish, ".es-ES.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Chinese, ".zh-CN.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Japanese, ".ja-JP.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Russian, ".ru-RU.xnb"); + this.TranslationFileExtensions.Add(LanguageName.German, ".de-DE.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Portuguese, ".pt-BR.xnb"); + //1.3 languages. + this.TranslationFileExtensions.Add(LanguageName.Italian, ".it-IT.xnb"); + this.TranslationFileExtensions.Add(LanguageName.French, ".fr-FR.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Hungarian, ".hu-HU.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Turkish, ".tr-TR.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Korean, ".ko-KR.xnb"); - this.translationCodes.Add("English", LocalizedContentManager.LanguageCode.en); - this.translationCodes.Add("Spanish", LocalizedContentManager.LanguageCode.es); - this.translationCodes.Add("Chinese", LocalizedContentManager.LanguageCode.zh); - this.translationCodes.Add("Japanese", LocalizedContentManager.LanguageCode.ja); - this.translationCodes.Add("Russian", LocalizedContentManager.LanguageCode.ru); - this.translationCodes.Add("German", LocalizedContentManager.LanguageCode.de); - this.translationCodes.Add("Brazillian Portuguese", LocalizedContentManager.LanguageCode.pt); - + this.TranslationCodes.Add(LanguageName.English, LocalizedContentManager.LanguageCode.en); + this.TranslationCodes.Add(LanguageName.Spanish, LocalizedContentManager.LanguageCode.es); + this.TranslationCodes.Add(LanguageName.Chinese, LocalizedContentManager.LanguageCode.zh); + this.TranslationCodes.Add(LanguageName.Japanese, LocalizedContentManager.LanguageCode.ja); + this.TranslationCodes.Add(LanguageName.Russian, LocalizedContentManager.LanguageCode.ru); + this.TranslationCodes.Add(LanguageName.German, LocalizedContentManager.LanguageCode.de); + this.TranslationCodes.Add(LanguageName.Portuguese, LocalizedContentManager.LanguageCode.pt); + //1.3 languages + this.TranslationCodes.Add(LanguageName.Italian, LocalizedContentManager.LanguageCode.it); + this.TranslationCodes.Add(LanguageName.French, LocalizedContentManager.LanguageCode.fr); + this.TranslationCodes.Add(LanguageName.Hungarian, LocalizedContentManager.LanguageCode.hu); + this.TranslationCodes.Add(LanguageName.Turkish, LocalizedContentManager.LanguageCode.tr); + this.TranslationCodes.Add(LanguageName.Korean, LocalizedContentManager.LanguageCode.ko); } - public string getTranslationNameFromPath(string fullPath) + /// Get the language name from a string. + /// The language name. + public string getTranslationName(LanguageName language) { - return Path.GetFileName(fullPath); + return language.ToString(); } - public void changeLocalizedContentManagerFromTranslation(string translation) + public void changeLocalizedContentManagerFromTranslation(LanguageName language) { - string tra = this.getTranslationNameFromPath(translation); - bool f = this.translationCodes.TryGetValue(tra, out LocalizedContentManager.LanguageCode code); - if (!f) LocalizedContentManager.CurrentLanguageCode = LocalizedContentManager.LanguageCode.en; - else LocalizedContentManager.CurrentLanguageCode = code; - return; + LocalizedContentManager.CurrentLanguageCode = !this.TranslationCodes.TryGetValue(language, out LocalizedContentManager.LanguageCode code) + ? LocalizedContentManager.LanguageCode.en + : code; } public void resetLocalizationCode() @@ -74,77 +95,75 @@ namespace Omegasis.HappyBirthday.Framework } /// Gets the proper file extension for the current translation. - /// - public string getFileExtentionForTranslation(string path) + /// The translation language name. + public string getFileExtentionForTranslation(LanguageName language) { - /* - bool f = translationFileInfo.TryGetValue(translation, out string value); - if (!f) return ".json"; - else return value; - */ - string translation = Path.GetFileName(path); try { - return this.translationFileInfo[translation]; + return this.TranslationFileExtensions[language]; } - catch + catch (Exception err) { - HappyBirthday.ModMonitor.Log("WTF SOMETHING IS WRONG!", StardewModdingAPI.LogLevel.Warn); - //Vocalization.ModMonitor.Log(err.ToString()); - //Vocalization.ModMonitor.Log("Attempted to get translation: " + translation); - return ".json"; + + Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log(err.ToString()); + Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log($"Attempted to get translation: {language}"); + return ".xnb"; } } - /// Gets the proper json for Buildings (aka Blueprints) from the data folder. - public string getBuildingjsonForTranslation(string translation) + public string getFileExtentionForDirectory(LanguageName language) + { + try + { + string s=this.TranslationFileExtensions[language]; + s = s.Replace(".xnb", ""); + s = s.Replace(".",""); + return s; + } + catch (Exception err) + { + + Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log(err.ToString()); + Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log($"Attempted to get translation: {language}"); + return ".xnb"; + } + } + + /// Gets the proper XNB for Buildings (aka Blueprints) from the data folder. + public string getBuildingXNBForTranslation(LanguageName language) { string buildings = "Blueprints"; - return buildings + this.getFileExtentionForTranslation(translation); + return buildings + this.getFileExtentionForTranslation(language); } - /// Gets the proper json file for the name passed in. Combines the file name with it's proper translation extension. - /// - /// - public string getjsonForTranslation(string jsonFileName, string translation) + /// Gets the proper XNB file for the name passed in. Combines the file name with it's proper translation extension. + public string getXNBForTranslation(string xnbFileName, LanguageName language) { - return jsonFileName + this.getFileExtentionForTranslation(translation); + return xnbFileName + this.getFileExtentionForTranslation(language); } - - - /// Loads an json file from StardewValley/Content - /// - /// - /// - public string LoadjsonFile(string jsonFileName, string key, string translation) + public string getJSONForTranslation(string FileName,LanguageName language) { - string json = jsonFileName + this.getFileExtentionForTranslation(translation); - Dictionary loadedDict = Game1.content.Load>(json); + return this.getXNBForTranslation(FileName, language); + } - bool f = loadedDict.TryGetValue(key, out string loaded); - if (!f) + /// Loads an XNB file from StardewValley/Content + public string LoadStringFromXNBFile(string xnbFileName, string key, LanguageName language) + { + string xnb = xnbFileName + this.getFileExtentionForTranslation(language); + Dictionary loadedDict = Game1.content.Load>(xnb); + + if (!loadedDict.TryGetValue(key, out string loaded)) { - //Vocalization.ModMonitor.Log("Big issue: Key not found in file:" + json + " " + key); + Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log("Big issue: Key not found in file:" + xnb + " " + key); return ""; } - else return loaded; + return loaded; } - /// Loads a string dictionary from a json file. - /// - /// - public Dictionary LoadJsonFileDictionary(string jsonFileName, string translation) + public virtual string LoadString(string path, LanguageName language, object sub1, object sub2, object sub3) { - string json = jsonFileName + this.getFileExtentionForTranslation(translation); - Dictionary loadedDict = Game1.content.Load>(json); - - return loadedDict; - } - - public virtual string LoadString(string path, string translation, object sub1, object sub2, object sub3) - { - string format = this.LoadString(path, translation); + string format = this.LoadString(path, language); try { return string.Format(format, sub1, sub2, sub3); @@ -154,9 +173,9 @@ namespace Omegasis.HappyBirthday.Framework return format; } - public virtual string LoadString(string path, string translation, object sub1, object sub2) + public virtual string LoadString(string path, LanguageName language, object sub1, object sub2) { - string format = this.LoadString(path, translation); + string format = this.LoadString(path, language); try { return string.Format(format, sub1, sub2); @@ -166,9 +185,9 @@ namespace Omegasis.HappyBirthday.Framework return format; } - public virtual string LoadString(string path, string translation, object sub1) + public virtual string LoadString(string path, LanguageName language, object sub1) { - string format = this.LoadString(path, translation); + string format = this.LoadString(path, language); try { return string.Format(format, sub1); @@ -178,15 +197,16 @@ namespace Omegasis.HappyBirthday.Framework return format; } - public virtual string LoadString(string path, string translation) + public virtual string LoadString(string path, LanguageName language) { this.parseStringPath(path, out string assetName, out string key); - return this.LoadjsonFile(assetName, key, translation); + + return this.LoadStringFromXNBFile(assetName, key, language); } - public virtual string LoadString(string path, string translation, params object[] substitutions) + public virtual string LoadString(string path, LanguageName language, params object[] substitutions) { - string format = this.LoadString(path, translation); + string format = this.LoadString(path, language); if (substitutions.Length != 0) { try diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index f212612c..8bc4921f 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -301,8 +301,11 @@ namespace Omegasis.HappyBirthday if (this.PlayerData.BirthdaySeason.ToLower() == Game1.currentSeason.ToLower()) { int index = this.PlayerData.BirthdayDay; + + string bdayDisplay = Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); Rectangle birthdayRect = new Rectangle(Game1.activeClickableMenu.xPositionOnScreen + 152 + (index - 1) % 7 * 32 * 4, Game1.activeClickableMenu.yPositionOnScreen + 200 + (index - 1) / 7 * 32 * 4, 124, 124); - billboard.calendarDays.Add(new ClickableTextureComponent("", birthdayRect, "", $"{Game1.player.Name}'s Birthday", text, new Rectangle(0, 0, 124, 124), 1f, false)); + billboard.calendarDays.Add(new ClickableTextureComponent("", birthdayRect, "", string.Format(bdayDisplay, Game1.player.Name), text, new Rectangle(0, 0, 124, 124), 1f, false)); + //billboard.calendarDays.Add(new ClickableTextureComponent("", birthdayRect, "", $"{Game1.player.Name}'s Birthday", text, new Rectangle(0, 0, 124, 124), 1f, false)); } } @@ -310,8 +313,10 @@ namespace Omegasis.HappyBirthday { if (pair.Value.BirthdaySeason != Game1.currentSeason.ToLower()) continue; int index = pair.Value.BirthdayDay; + + string bdayDisplay = Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); Rectangle otherBirthdayRect = new Rectangle(Game1.activeClickableMenu.xPositionOnScreen + 152 + (index - 1) % 7 * 32 * 4, Game1.activeClickableMenu.yPositionOnScreen + 200 + (index - 1) / 7 * 32 * 4, 124, 124); - billboard.calendarDays.Add(new ClickableTextureComponent("", otherBirthdayRect, "", $"{Game1.getFarmer(pair.Key).Name}'s Birthday", text, new Rectangle(0, 0, 124, 124), 1f, false)); + billboard.calendarDays.Add(new ClickableTextureComponent("", otherBirthdayRect, "", string.Format(bdayDisplay, Game1.getFarmer(pair.Key).Name), text, new Rectangle(0, 0, 124, 124), 1f, false)); } break; @@ -406,8 +411,22 @@ namespace Omegasis.HappyBirthday { if (this.messages.spouseBirthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) { + if (string.IsNullOrEmpty(this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name])== false){ + d = new Dialogue(this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); + } + else + { + if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) + { - d = new Dialogue(this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); + d = new Dialogue(this.messages.birthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); + } + else + { + d = new Dialogue("Happy Birthday @!", Game1.currentSpeaker); + } + } + } else { @@ -418,7 +437,6 @@ namespace Omegasis.HappyBirthday { if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) { - d = new Dialogue(this.messages.birthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); } else From 059b2d57be0dca4208e6f4d30015625cfd270717 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 2 Dec 2019 19:10:56 -0800 Subject: [PATCH 11/52] HUGE bug fix to Happy Birthday mod. Fixes many bugs from hardcoded strings, to no spouse messages, to cleaning up translation folder. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 383 ++++++++++++++---- .../Chinese/BirthdayWishes.zh-CN.json | 35 -- .../Dialogue/English/BirthdayWishes.json | 35 -- .../BirthdayWishes.de-DE.json | 0 .../SpouseBirthdayWishes.de-DE.json | 0 .../TranslatedStrings.de-DE.json | 0 .../Dialogue/en-US/BirthdayWishes.json | 35 ++ .../SpouseBirthdayWishes.json | 0 .../{English => en-US}/TranslatedStrings.json | 0 .../BirthdayWishes.es-ES.json | 0 .../SpouseBirthdayWishes.es-ES.json | 0 .../TranslatedStrings.es-ES.json | 0 .../BirthdayWishes.fr-FR.json} | 0 .../SpouseBirthdayWishes.fr-FR.json} | 0 .../TranslatedStrings.fr-FR.json} | 0 .../BirthdayWishes.hu-HU.json} | 0 .../SpouseBirthdayWishes.hu-HU.json} | 0 .../TranslatedStrings.hu-HU.json} | 0 .../BirthdayWishes.it-IT.json} | 0 .../SpouseBirthdayWishes.it-IT.json} | 0 .../TranslatedStrings.it-IT.json} | 0 .../Dialogue/ja-JP/BirthdayWishes.ja-JP.json | 35 ++ .../SpouseBirthdayWishes.ja-JP.json} | 0 .../ja-JP/TranslatedStrings.ja-JP.json | 6 + .../Dialogue/ko-KR/BirthdayWishes.ko-KR.json | 35 ++ .../ko-KR/SpouseBirthdayWishes.ko-KR.json | 14 + .../ko-KR/TranslatedStrings.ko-KR.json | 6 + .../Dialogue/pt-BR/BirthdayWishes.pt-BR.json | 35 ++ .../pt-BR/SpouseBirthdayWishes.pt-BR.json | 14 + .../pt-BR/TranslatedStrings.pt-BR.json | 6 + .../Dialogue/ru-RU/BirthdayWishes.ru-RU.json | 35 ++ .../ru-RU/SpouseBirthdayWishes.ru-RU.json | 14 + .../ru-RU/TranslatedStrings.ru-RU.json | 6 + .../Dialogue/tr-TR/BirthdayWishes.tr-TR.json | 35 ++ .../tr-TR/SpouseBirthdayWishes.tr-TR.json | 14 + .../tr-TR/TranslatedStrings.tr-TR.json | 6 + .../Dialogue/zh-CN/BirthdayWishes.zh-CN.json | 35 ++ .../zh-CN/SpouseBirthdayWishes.zh-CN.json | 14 + .../TranslatedStrings.zh-CN.json | 0 .../HappyBirthday/Framework/BirthdayMenu.cs | 8 +- .../Framework/TranslationInfo.cs | 188 ++++----- GeneralMods/HappyBirthday/HappyBirthday.cs | 83 +++- .../HappyBirthday/HappyBirthday.csproj | 67 ++- GeneralMods/HappyBirthday/manifest.json | 2 +- GeneralMods/TimeFreeze/TimeFreeze.cs | 31 +- GeneralMods/TimeFreeze/manifest.json | 2 +- 46 files changed, 883 insertions(+), 296 deletions(-) delete mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/Chinese/BirthdayWishes.zh-CN.json delete mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/English/BirthdayWishes.json rename GeneralMods/HappyBirthday/Content/Dialogue/{German => de-DE}/BirthdayWishes.de-DE.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{German => de-DE}/SpouseBirthdayWishes.de-DE.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{German => de-DE}/TranslatedStrings.de-DE.json (100%) create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json rename GeneralMods/HappyBirthday/Content/Dialogue/{English => en-US}/SpouseBirthdayWishes.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{English => en-US}/TranslatedStrings.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Spanish => es-ES}/BirthdayWishes.es-ES.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Spanish => es-ES}/SpouseBirthdayWishes.es-ES.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Spanish => es-ES}/TranslatedStrings.es-ES.json (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Brazillian Portuguese/BirthdayWishes.pt-BR.json => fr-FR/BirthdayWishes.fr-FR.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Brazillian Portuguese/SpouseBirthdayWishes.pt-BR.json => fr-FR/SpouseBirthdayWishes.fr-FR.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Brazillian Portuguese/TranslatedStrings.pt-BR.json => fr-FR/TranslatedStrings.fr-FR.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Japanese/BirthdayWishes.ja-JP.json => hu-HU/BirthdayWishes.hu-HU.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Chinese/SpouseBirthdayWishes.zh-CN.json => hu-HU/SpouseBirthdayWishes.hu-HU.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Japanese/TranslatedStrings.ja-JP.json => hu-HU/TranslatedStrings.hu-HU.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Russian/BirthdayWishes.ru-RU.json => it-IT/BirthdayWishes.it-IT.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Japanese/SpouseBirthdayWishes.ja-JP.json => it-IT/SpouseBirthdayWishes.it-IT.json} (100%) rename GeneralMods/HappyBirthday/Content/Dialogue/{Russian/TranslatedStrings.ru-RU.json => it-IT/TranslatedStrings.it-IT.json} (100%) create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/BirthdayWishes.ja-JP.json rename GeneralMods/HappyBirthday/Content/Dialogue/{Russian/SpouseBirthdayWishes.ru-RU.json => ja-JP/SpouseBirthdayWishes.ja-JP.json} (100%) create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/BirthdayWishes.ko-KR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/SpouseBirthdayWishes.ko-KR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/BirthdayWishes.pt-BR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/SpouseBirthdayWishes.pt-BR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/BirthdayWishes.ru-RU.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/SpouseBirthdayWishes.ru-RU.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/BirthdayWishes.tr-TR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/SpouseBirthdayWishes.tr-TR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/BirthdayWishes.zh-CN.json create mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/SpouseBirthdayWishes.zh-CN.json rename GeneralMods/HappyBirthday/Content/Dialogue/{Chinese => zh-CN}/TranslatedStrings.zh-CN.json (100%) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 4dc41af7..69e270db 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -32,10 +32,10 @@ namespace Omegasis.HappyBirthday ["Penny"] = "", }; - public Dictionary> spouseEnglishGeneratedMessages = new Dictionary>(); + public Dictionary> spouseEnglishGeneratedMessages = new Dictionary>(); - /// Used to contain birthday wishes should the mod not find any available. - public Dictionary defaultBirthdayWishes = new Dictionary() + /// Used to contain birthday wishes should the mod not find any available. These were written myself, Omegasis. + public Dictionary defaultBirthdayWishesLegacy = new Dictionary() { ["Robin"] = "Hey @, happy birthday! I'm glad you choose this town to move here to. ", ["Demetrius"] = "Happy birthday @! Make sure you take some time off today to enjoy yourself. $h", @@ -72,6 +72,46 @@ namespace Omegasis.HappyBirthday ["Krobus"] = "I have heard that it is tradition to give a gift to others on their birthday. In that case, happy birthday @." }; + /// Used to contain birthday wishes should the mod not find any available. These were written nexus mods user cerreli. + public Dictionary defaultBirthdayWishes = new Dictionary() + { + + ["Robin"] = "Hey, @, happy birthday! I'm really glad you decided to move to the valley. ", + ["Demetrius"] = "Happy birthday, @! Make sure you take some time off today to enjoy yourself. $h", + ["Maru"] = "Happy birthday, @. I tried to make an everlasting candle for you, but sadly that didn't work out. Maybe next year, right? $h", + ["Sebastian"] = "Happy birthday, @. Hope things are going well down at the farm.", + ["Linus"] = "Happy birthday, @. Thanks for visiting me even on your birthday. It makes me really happy. ", + ["Pierre"] = "Hey @, happy birthday! Hopefully this next year will be a great one for you! ", + ["Caroline"] = "Happy birthday, @. Thank you for all that you've done for our community. I'm sure your parents must be proud of you.$h", + ["Abigail"] = "Happy birthday, @! Hopefully this year we can go on even more adventures together $h!", + ["Alex"] = "Yo @, happy birthday! Here's to making this the best year yet!$h", + ["George"] = "When you get to my age, birthdays start to come and go. Still, happy birthday, @.", + ["Evelyn"] = "Happy birthday, @. You have grown into such a fine individual, and I'm sure your grandfather would be proud to see who you've become. ", + ["Lewis"] = "Happy birthday, @! I really appreciate everything you've done for the town. Keep up the good work.", + ["Clint"] = "Hey, happy birthday, @. I'm sure this year is going to be great for you.", + ["Penny"] = "Happy birthday, @. May you enjoy all of life's blessings this year. ", + ["Pam"] = "Happy birthday, kid. We should have a drink to celebrate another year of life for you! $h", + ["Emily"] = "Happy birthday, @! I can see your future shining bright.$h", + ["Haley"] = "Happy birthday, @. Hopefully this year you'll get some good presents!$h", + ["Jas"] = "Happy birthday, @. I'm glad I decided to get to know you.", + ["Vincent"] = "Hey, @, have you come to pl... oh, it's your birthday? Happy birthday! ", + ["Jodi"] = "Hello there, @. Rumor has it that today is your birthday. In that case, happy birthday!$h", + ["Kent"] = "Jodi told me that it was your birthday today, @. Happy birthday, and make sure to cherish every single day.", + ["Sam"] = "Hey @, happy birthday! We'll have to have a birthday jam session for you sometime!$h ", + ["Leah"] = "Hey @, happy birthday! I'm glad to see you're doing well on the farm.$h ", + ["Shane"] = "Happy birthday, @. Keep working hard, and I'm sure this next year will be a great one for you.", + ["Marnie"] = "Hi, @! Everyone is talking about your birthday today, and I wanted to make sure that I wished you a happy birthday as well. So, happy birthday! $h ", + ["Elliott"] = "What a wonderful day, isn't it, @? Though I'm sure it's even lovelier to you, it being your birthday!$h#$b#I was actually in the middle of writing a poem for the occasion, but a 'happy birthday' will have to suffice for now.", + ["Gus"] = "Hey, @, happy birthday! Hopefully you enjoy the rest of the day, and make sure you aren't a stranger at the saloon!", + ["Dwarf"] = "Happy birthday, @. Wait, humans celebrate those, right?", + ["Wizard"] = "Happy birthday, @. Never forget that you alone make your future.#$e#How did I know? Ah, I overheard a few of the locals conferring on what gifts to give you. I think you'll appreciate them.", + ["Harvey"] = "Happy birthday, @. Come in for a checkup sometime, alright? I want to make sure you'll see plenty more.", + ["Sandy"] = "Aww, sweetie, you came all the way out here to see me on your birthday?$h#$b#Well, then, the least I can do is wish you a happy one!~", + ["Willy"] = "Ahoy, @, happy birthday. Looking at you reminds me of the days when I was just a guppy myself. $bEnjoy yours while you can, young'un.$h", + ["Krobus"] = "Happy birthday, @. I still don't quite understand humans, but I'm glad to have met you all the same." + + }; + public BirthdayMessages() { this.spouseEnglishGeneratedMessages.Add("Alex", this.generateSpouseMessage); @@ -93,79 +133,200 @@ namespace Omegasis.HappyBirthday public Dictionary> translatedStrings = new Dictionary>() { - [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() - { - ["Mail:birthdayMom"] = "", - ["Mail:birthdayDad"] = "", - ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "" - }, + [StardewValley.LocalizedContentManager.LanguageCode.en] = new Dictionary() { ["Mail:birthdayMom"] = "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", - ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!" - }, - [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() - { - ["Mail:birthdayMom"] = "", - ["Mail:birthdayDad"] = "", - ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "" + ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] ="Season", + ["Birthday"]="Birthday", + ["Date"]="Date" + }, [StardewValley.LocalizedContentManager.LanguageCode.ja] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "" - }, - [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() - { - ["Mail:birthdayMom"] = "", - ["Mail:birthdayDad"] = "", - ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "" + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.ru] = new Dictionary() { ["Mail:birthdayMom"] = "ƒорогой @,^ — днем рождени¤, мо¤ радость. Ёто были замечательные моменты, когда ты выростал в доброго, трудолюбивого человека. я надеюсь, в твоей жизни будет куча превосходных моментов. ^ — любовью, мама ^ P.S. «десь находить небольшой подарок, который ¤ сделала дл¤ теб¤. %item object 221 1 %%", ["Mail:birthdayDad"] = "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", - ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!" - }, - [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() - { - ["Mail:birthdayMom"] = "", - ["Mail:birthdayDad"] = "", - ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "" + ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.zh] = new Dictionary() { ["Mail:birthdayMom"] = "亲爱的@,^ 生日快乐宝贝。看着你成长成为一个善良努力的人,就如我一直梦想着你成为的样子,我感到十分欣喜。我希望你能继续跟你爱的人制造更多美好的回忆。 ^ 爱你的,妈妈 ^ 附言:这是我给你做的一点小礼物。 %item object 221 1 %%", ["Mail:birthdayDad"] = "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", - ["Happy Birthday: Farmhand Birthday Message"] = "" - } + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.fr] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.ko] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.it] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.tr] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, + [StardewValley.LocalizedContentManager.LanguageCode.hu] = new Dictionary() + { + ["Mail:birthdayMom"] = "", + ["Mail:birthdayDad"] = "", + ["Happy Birthday: Star Message"] = "", + ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Spring"] = "Spring", + ["Summer"] = "Summer", + ["Fall"] = "Fall", + ["Winter"] = "Winter", + ["Season"] = "Season", + ["Birthday"] = "Birthday", + ["Date"] = "Date" + }, }; - - - /// Used to load all of the default birthday greetings. public void createBirthdayGreetings() { var serializer = JsonSerializer.Create(); serializer.Formatting = Formatting.Indented; - //English logic. - string defaultPath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(HappyBirthday.Config.translationInfo.CurrentTranslation)); - if (!Directory.Exists(defaultPath)) Directory.CreateDirectory(defaultPath); - string birthdayFileDict = HappyBirthday.Config.translationInfo.getJSONForTranslation("BirthdayWishes", HappyBirthday.Config.translationInfo.CurrentTranslation); - string path = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(HappyBirthday.Config.translationInfo.CurrentTranslation), birthdayFileDict); + string path = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(Framework.TranslationInfo.LanguageName.English), birthdayFileDict); //Handle normal birthday wishes. if (!File.Exists(Path.Combine(HappyBirthday.ModHelper.DirectoryPath, path))) @@ -197,7 +358,10 @@ namespace Omegasis.HappyBirthday string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key)); if (!Directory.Exists(basePath)) + { Directory.CreateDirectory(basePath); + HappyBirthday.ModMonitor.Log("Create dir1: " + basePath, LogLevel.Info); + } string tempBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("BirthdayWishes", translation.Key)); string tempSpouseBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("SpouseBirthdayWishes", translation.Key)); @@ -236,7 +400,7 @@ namespace Omegasis.HappyBirthday public static string GetTranslatedString(string key) { StardewValley.LocalizedContentManager.LanguageCode code = HappyBirthday.Config.translationInfo.TranslationCodes[HappyBirthday.Config.translationInfo.CurrentTranslation]; - string value= HappyBirthday.Instance.messages.translatedStrings[code][key]; + string value = HappyBirthday.Instance.messages.translatedStrings[code][key]; if (string.IsNullOrEmpty(value)) { return GetEnglishMessageString(key); @@ -260,8 +424,6 @@ namespace Omegasis.HappyBirthday StardewValley.LocalizedContentManager.LanguageCode code = translation.Value; string basePath = Path.Combine(HappyBirthday.ModHelper.DirectoryPath, "Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key)); - if (!Directory.Exists(basePath)) - Directory.CreateDirectory(basePath); string stringsFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("TranslatedStrings", translation.Key)); @@ -275,35 +437,49 @@ namespace Omegasis.HappyBirthday } } + /// + /// Loads some strings from the StringsFromCS file for affectionate spouse words. + /// + /// public string getAffectionateSpouseWord() { List words = new List(); + string dict = Path.Combine("Strings", "StringsFromCSFiles"); if (Game1.player.IsMale) { - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4507", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4509", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4511", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4514", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4515", HappyBirthday.Config.translationInfo.CurrentTranslation)); + + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4507", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4509", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4511", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4514", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4515", HappyBirthday.Config.translationInfo.CurrentTranslation)); } else { - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4512", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4513", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4512", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4513", HappyBirthday.Config.translationInfo.CurrentTranslation)); } - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4508", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4510", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4516", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4517", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4518", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4519", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4522", HappyBirthday.Config.translationInfo.CurrentTranslation)); - words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile("StringsFromCSFiles", "NPC.cs.4523", HappyBirthday.Config.translationInfo.CurrentTranslation)); - return words[Game1.random.Next(0, words.Count - 1)]; + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4508", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4510", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4516", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4517", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4518", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4519", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4522", HappyBirthday.Config.translationInfo.CurrentTranslation)); + words.Add(HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(dict, "NPC.cs.4523", HappyBirthday.Config.translationInfo.CurrentTranslation)); + + if (HappyBirthday.Config.translationInfo.CurrentTranslation == Framework.TranslationInfo.LanguageName.English) + { + words.Add("Pumpkin"); //Because this is cute. + } + + string s = words[Game1.random.Next(0, words.Count - 1)]; + + return s.ToLowerInvariant(); } public string getTimeOfDayString() @@ -319,10 +495,14 @@ namespace Omegasis.HappyBirthday else return "evening"; } - - public void generateSpouseBirthdayDialogue(string SpeakerName) + /// + /// Gets the actual birthday message. + /// + /// + /// + public string generateSpouseBirthdayDialogue(string SpeakerName) { - this.spouseEnglishGeneratedMessages[SpeakerName].Invoke(SpeakerName); + return this.spouseEnglishGeneratedMessages[SpeakerName].Invoke(SpeakerName); } /// @@ -339,69 +519,108 @@ namespace Omegasis.HappyBirthday b.Append("Hey "); b.Append(this.getAffectionateSpouseWord()); b.Append("."); - b.Append("I'm so glad that I married you. You make every day feel like winning a sports match. Happy birthday! $h"); + b.Append("I'm so glad that I married you. You make every day feel like winning a sports match. Happy birthday! $l"); break; case ("Elliott"): b.Append("Good "); b.Append(this.getTimeOfDayString()); + b.Append(" "); b.Append(this.getAffectionateSpouseWord()); b.Append("."); - b.Append("I was just thinking on how you have been a muse for my work. You inspire me every day I spend with you. Happy birthday! $h"); + b.Append("I was just thinking on how you have been a muse for my work. You inspire me every day I spend with you. Happy birthday! $l"); break; case ("Harvey"): b.Append("Good "); b.Append(this.getTimeOfDayString()); + b.Append(" "); b.Append(this.getAffectionateSpouseWord()); b.Append("."); - b.Append("I was just thinking on how invigorated I've felt since marrying you. When I look at you I feel as I'm positively glowing with joy. Happy birthday! $h"); + b.Append("I was just thinking on how invigorated I've felt since marrying you. When I look at you I feel as I'm positively glowing with joy. Happy birthday! $l"); break; case ("Sam"): b.Append("Good "); b.Append(this.getTimeOfDayString()); + b.Append(" "); b.Append(this.getAffectionateSpouseWord()); b.Append("."); - b.Append("You know I never saw myself settling down before I met you, but now that I have I feel like I never want to look back. Happy birthday! $h"); + b.Append("You know I never saw myself settling down before I met you, but now that I have I feel like I never want to look back. Happy birthday! $l"); break; case ("Sebastian"): - b.Append("I was never a big celebrater of birthdays but with you, today is special. Happy birthday"); + b.Append("I was never a big celebrater of birthdays but with you, today is special. Happy birthday "); b.Append(this.getAffectionateSpouseWord()); - b.Append("$h"); b.Append("."); + b.Append("$l"); break; case ("Shane"): - + b.Append("I never though I'd enjoy annything but drinking on birthdays but you have shown me how to live a great life. Happy birthday "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("$l"); break; case ("Abigail"): - - + b.Append("Hey "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("You know every day feels like a great adventure with you! Happy birthday!"); + b.Append("$l"); break; - case ("Emily"): + case ("Emily"): + b.Append("You know whenever I tried to read my fortune I never thought that I'd be as happy as I am with you! Happy birthday "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("!"); + b.Append("$l"); break; case ("Haley"): - + b.Append("You know "); + b.Append(this.getAffectionateSpouseWord()); + b.Append(", "); + b.Append("we have come a long way since we first met but I'm glad we took this journey together. Every day feels picture perfect with you. Happy birthday!"); + b.Append("$l"); break; case ("Leah"): - + b.Append("Hey, "); + b.Append(this.getTimeOfDayString()); + b.Append(" "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("If it wasn't for you who knows what I would be doing right now. I might sculpt wood, but being with you has helped scult my life."); + b.Append("Happy birthday!"); + b.Append("$l"); break; case ("Maru"): - - + b.Append("Happy birthday"); + b.Append(" "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("I always thought I had to look into space to find a shooting star but when I look at you I realize I already have one."); + b.Append("$l"); break; case ("Penny"): - - + b.Append("Happy birthday"); + b.Append(" "); + b.Append(this.getAffectionateSpouseWord()); + b.Append(". "); + b.Append("I always read about happy endings in books but being with you makes me realize that it continues well into the future. Here is to many more years to come."); + b.Append("$l"); break; default: + b.Append("Good "); + b.Append(this.getTimeOfDayString()); + b.Append(" "); + b.Append(this.getAffectionateSpouseWord()); + b.Append("."); + b.Append("I hope we get to spend many more years together. Happy birthday."); + b.Append("$h"); break; } diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Chinese/BirthdayWishes.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/Chinese/BirthdayWishes.zh-CN.json deleted file mode 100644 index e566f0e4..00000000 --- a/GeneralMods/HappyBirthday/Content/Dialogue/Chinese/BirthdayWishes.zh-CN.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Robin": "嘿,@,生日快乐!我很高兴你选择搬到这里来。", - "Demetrius": "生日快乐@!记得偶尔要抽出时间来好好享受一下。$h", - "Maru": "生日快乐@。我本来想给我做个永恒不灭的蜡烛,但是好像行不通。也许明年再给你吧?$h", - "Sebastian": "生日快乐@。又是平静的一年。", - "Linus": "生日快乐@。谢谢你在你生日的这天依旧来看我。这让我很开心。", - "Pierre": "嘿@,生日快乐!希望你的下一年会更好!", - "Caroline": "生日快乐@。谢谢你为这个社区做的一切。我相信你的父母一定都很为你骄傲。$h", - "Abigail": "生日快乐@!希望之后的一年我们可以一起去更多的地方冒险!$h", - "Alex": "哟@,生日快乐!也许这会是你有生以来最棒的一年。$h", - "George": "等你到我的年纪,生日就像其他的日子一样来去匆匆。不过还是祝你生日快乐,@。", - "Evelyn": "生日快乐@。你成长成为了一个优秀的人,我相信你还会继续成长的。", - "Lewis": "生日快乐@!我很感激你为这个小镇做的一切,我相信你爷爷也会为你骄傲的。", - "Clint": "嘿生日快乐@。我相信接下来对你来说会是很棒的一年。", - "Penny": "生日快乐@。希望你这一年都能得到所有的祝福。", - "Pam": "生日快乐孩子。我们应该一起去喝一杯,庆祝你生命的又一年。", - "Emily": "我今天感受到了很多关于你的正能量,所以一定是你的生日到了。生日快乐@!$h", - "Haley": "生日快乐@。希望你今年能收到些很棒的礼物!$h", - "Jas": "生日快乐@。希望你过个愉快的生日。", - "Vincent": "嘿@,你是来玩的……哦今天是你的生日?生日快乐!", - "Jodi": "你好啊@。听说今天是你的生日。既然如此,祝你生日快乐!$h", - "Kent": "乔迪告诉我今天是你的生日,@。生日快乐,记得要珍惜每一天。", - "Sam": "哟@,生日快乐!有机会我们来给你办个生日派对吧!$h", - "Leah": "嘿@,生日快乐!我们今晚去酒吧庆祝一下吧!$h", - "Shane": "生日快乐@。继续努力工作,我相信你接下来的这一年会更好。", - "Marnie": "你好@。今天大家都在谈论你的生日,我也想跟你说一声生日快乐,那么,生日快乐!$h", - "Elliott": "真是美好的一天不是吗,@?尤其今天是你的生日。我本想给你写一首诗,但我觉得简单的才是最好的,生日快乐。$h", - "Gus": "嘿@,生日快乐!希望你今天过得愉快,酒吧永远都欢迎你!", - "Dwarf": "生日快乐@。我希望我给你的东西是人类可以接受的。", - "Wizard": "有精灵告诉我今天是你的生日。这么说,生日快乐@。希望你下一年辉煌灿烂!", - "Harvey": "嘿@,生日快乐!有空记得到我这来做检查,这能让你多活很多年!", - "Sandy": "你好啊@。我听说今天是你的生日,我可不想让你觉得被冷落了。生日快乐!", - "Willy": "哎@,生日快乐。看到你让我想起了我曾经一个人漂在海上的日子。继续享受青春吧年轻人。$h", - "Krobus": "我听说在别人生日的时候送一份礼物是传统。那么,生日快乐@。" -} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/English/BirthdayWishes.json b/GeneralMods/HappyBirthday/Content/Dialogue/English/BirthdayWishes.json deleted file mode 100644 index bc441d22..00000000 --- a/GeneralMods/HappyBirthday/Content/Dialogue/English/BirthdayWishes.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Robin": "Hey @, happy birthday! I'm glad you choose this town to move here to. ", - "Demetrius": "Happy birthday @! Make sure you take some time off today to enjoy yourself. $h", - "Maru": "Happy birthday @. I tried to make you an everlasting candle for you, but sadly that didn't work out. Maybe next year right? $h", - "Sebastian": "Happy birthday @. Here's to another year of chilling. ", - "Linus": "Happy birthday @. Thanks for visiting me even on your birthday. It makes me really happy. ", - "Pierre": "Hey @, happy birthday! Hopefully this next year for you will be a great one! ", - "Caroline": "Happy birthday @. Thank you for all that you've done for our community. I'm sure your parents must be proud of you.$h", - "Abigail": "Happy birthday @! Hopefully this year we can go on even more adventures together $h!", - "Alex": "Yo @, happy birthday! Maybe this will be your best year yet.$h", - "George": "When you get to my age birthdays come and go. Still happy birthday @.", - "Evelyn": "Happy birthday @. You have grown up to be such a fine individual and I'm sure you'll continue to grow. ", - "Lewis": "Happy birthday @! I'm thankful for what you have done for the town and I'm sure your grandfather would be proud of you.", - "Clint": "Hey happy birthday @. I'm sure this year is going to be great for you.", - "Penny": "Happy birthday @. May you enjoy all of life's blessings this year. ", - "Pam": "Happy birthday kid. We should have a drink to celebrate another year of life for you! $h", - "Emily": "I'm sensing a strong positive life energy about you, so it must be your birthday. Happy birthday @!$h", - "Haley": "Happy birthday @. Hopefully this year you'll get some good presents!$h", - "Jas": "Happy birthday @. I hope you have a good birthday.", - "Vincent": "Hey @ have you come to pl...oh it's your birthday? Happy birthday! ", - "Jodi": "Hello there @. Rumor has it that today is your birthday. In that case, happy birthday!$h", - "Kent": "Jodi told me that it was your birthday today @. Happy birthday and make sure to cherish every single day.", - "Sam": "Yo @ happy birthday! We'll have to have a birthday jam session for you some time!$h ", - "Leah": "Hey @ happy birthday! We should go to the saloon tonight and celebrate!$h ", - "Shane": "Happy birthday @. Keep working hard and I'm sure this next year for you will be a great one.", - "Marnie": "Hello there @. Everyone is talking about your birthday today and I wanted to make sure that I wished you a happy birthday as well, so happy birthday! $h ", - "Elliott": "What a wonderful day isn't it @? Especially since today is your birthday. I tried to make you a poem but I feel like the best way of putting it is simply, happy birthday. $h ", - "Gus": "Hey @ happy birthday! Hopefully you enjoy the rest of the day and make sure you aren't a stranger at the saloon!", - "Dwarf": "Happy birthday @. I hope that what I got you is acceptable for humans as well. ", - "Wizard": "The spirits told me that today is your birthday. In that case happy birthday @. May your year shine bright! ", - "Harvey": "Hey @, happy birthday! Make sure to come in for a checkup some time to make sure you live many more years! ", - "Sandy": "Hello there @. I heard that today was your birthday and I didn't want you feeling left out, so happy birthday!", - "Willy": "Aye @ happy birthday. Looking at you reminds me of ye days when I was just a guppy swimming out to sea. Continue to enjoy them youngin.$h", - "Krobus": "I have heard that it is tradition to give a gift to others on their birthday. In that case, happy birthday @." -} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/German/BirthdayWishes.de-DE.json b/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/BirthdayWishes.de-DE.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/German/BirthdayWishes.de-DE.json rename to GeneralMods/HappyBirthday/Content/Dialogue/de-DE/BirthdayWishes.de-DE.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/German/SpouseBirthdayWishes.de-DE.json b/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/SpouseBirthdayWishes.de-DE.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/German/SpouseBirthdayWishes.de-DE.json rename to GeneralMods/HappyBirthday/Content/Dialogue/de-DE/SpouseBirthdayWishes.de-DE.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/German/TranslatedStrings.de-DE.json b/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/German/TranslatedStrings.de-DE.json rename to GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json new file mode 100644 index 00000000..e1dfa037 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json @@ -0,0 +1,35 @@ +{ + "Robin": "Hey, @, happy birthday! I'm really glad you decided to move to the valley. ", + "Demetrius": "Happy birthday, @! Make sure you take some time off today to enjoy yourself. $h", + "Maru": "Happy birthday, @. I tried to make an everlasting candle for you, but sadly that didn't work out. Maybe next year, right? $h", + "Sebastian": "Happy birthday, @. Hope things are going well down at the farm.", + "Linus": "Happy birthday, @. Thanks for visiting me even on your birthday. It makes me really happy. ", + "Pierre": "Hey @, happy birthday! Hopefully this next year will be a great one for you! ", + "Caroline": "Happy birthday, @. Thank you for all that you've done for our community. I'm sure your parents must be proud of you.$h", + "Abigail": "Happy birthday, @! Hopefully this year we can go on even more adventures together $h!", + "Alex": "Yo @, happy birthday! Here's to making this the best year yet!$h", + "George": "When you get to my age, birthdays start to come and go. Still, happy birthday, @.", + "Evelyn": "Happy birthday, @. You have grown into such a fine individual, and I'm sure your grandfather would be proud to see who you've become. ", + "Lewis": "Happy birthday, @! I really appreciate everything you've done for the town. Keep up the good work.", + "Clint": "Hey, happy birthday, @. I'm sure this year is going to be great for you.", + "Penny": "Happy birthday, @. May you enjoy all of life's blessings this year. ", + "Pam": "Happy birthday, kid. We should have a drink to celebrate another year of life for you! $h", + "Emily": "Happy birthday, @! I can see your future shining bright.$h", + "Haley": "Happy birthday, @. Hopefully this year you'll get some good presents!$h", + "Jas": "Happy birthday, @. I'm glad I decided to get to know you.", + "Vincent": "Hey, @, have you come to pl... oh, it's your birthday? Happy birthday! ", + "Jodi": "Hello there, @. Rumor has it that today is your birthday. In that case, happy birthday!$h", + "Kent": "Jodi told me that it was your birthday today, @. Happy birthday, and make sure to cherish every single day.", + "Sam": "Hey @, happy birthday! We'll have to have a birthday jam session for you sometime!$h ", + "Leah": "Hey @, happy birthday! I'm glad to see you're doing well on the farm.$h ", + "Shane": "Happy birthday, @. Keep working hard, and I'm sure this next year will be a great one for you.", + "Marnie": "Hi, @! Everyone is talking about your birthday today, and I wanted to make sure that I wished you a happy birthday as well. So, happy birthday! $h ", + "Elliott": "What a wonderful day, isn't it, @? Though I'm sure it's even lovelier to you, it being your birthday!$h#$b#I was actually in the middle of writing a poem for the occasion, but a 'happy birthday' will have to suffice for now.", + "Gus": "Hey, @, happy birthday! Hopefully you enjoy the rest of the day, and make sure you aren't a stranger at the saloon!", + "Dwarf": "Happy birthday, @. Wait, humans celebrate those, right?", + "Wizard": "Happy birthday, @. Never forget that you alone make your future.#$e#How did I know? Ah, I overheard a few of the locals conferring on what gifts to give you. I think you'll appreciate them.", + "Harvey": "Happy birthday, @. Come in for a checkup sometime, alright? I want to make sure you'll see plenty more.", + "Sandy": "Aww, sweetie, you came all the way out here to see me on your birthday?$h#$b#Well, then, the least I can do is wish you a happy one!~", + "Willy": "Ahoy, @, happy birthday. Looking at you reminds me of the days when I was just a guppy myself. $bEnjoy yours while you can, young'un.$h", + "Krobus": "Happy birthday, @. I still don't quite understand humans, but I'm glad to have met you all the same." +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/English/SpouseBirthdayWishes.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/English/SpouseBirthdayWishes.json rename to GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/English/TranslatedStrings.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/English/TranslatedStrings.json rename to GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Spanish/BirthdayWishes.es-ES.json b/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/BirthdayWishes.es-ES.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Spanish/BirthdayWishes.es-ES.json rename to GeneralMods/HappyBirthday/Content/Dialogue/es-ES/BirthdayWishes.es-ES.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Spanish/SpouseBirthdayWishes.es-ES.json b/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/SpouseBirthdayWishes.es-ES.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Spanish/SpouseBirthdayWishes.es-ES.json rename to GeneralMods/HappyBirthday/Content/Dialogue/es-ES/SpouseBirthdayWishes.es-ES.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Spanish/TranslatedStrings.es-ES.json b/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Spanish/TranslatedStrings.es-ES.json rename to GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/BirthdayWishes.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/BirthdayWishes.fr-FR.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/BirthdayWishes.pt-BR.json rename to GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/BirthdayWishes.fr-FR.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/SpouseBirthdayWishes.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/SpouseBirthdayWishes.fr-FR.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/SpouseBirthdayWishes.pt-BR.json rename to GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/SpouseBirthdayWishes.fr-FR.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/TranslatedStrings.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Brazillian Portuguese/TranslatedStrings.pt-BR.json rename to GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Japanese/BirthdayWishes.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/BirthdayWishes.hu-HU.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Japanese/BirthdayWishes.ja-JP.json rename to GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/BirthdayWishes.hu-HU.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Chinese/SpouseBirthdayWishes.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/SpouseBirthdayWishes.hu-HU.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Chinese/SpouseBirthdayWishes.zh-CN.json rename to GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/SpouseBirthdayWishes.hu-HU.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Japanese/TranslatedStrings.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Japanese/TranslatedStrings.ja-JP.json rename to GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Russian/BirthdayWishes.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/BirthdayWishes.it-IT.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Russian/BirthdayWishes.ru-RU.json rename to GeneralMods/HappyBirthday/Content/Dialogue/it-IT/BirthdayWishes.it-IT.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Japanese/SpouseBirthdayWishes.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/SpouseBirthdayWishes.it-IT.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Japanese/SpouseBirthdayWishes.ja-JP.json rename to GeneralMods/HappyBirthday/Content/Dialogue/it-IT/SpouseBirthdayWishes.it-IT.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Russian/TranslatedStrings.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Russian/TranslatedStrings.ru-RU.json rename to GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/BirthdayWishes.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/BirthdayWishes.ja-JP.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/BirthdayWishes.ja-JP.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Russian/SpouseBirthdayWishes.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/SpouseBirthdayWishes.ja-JP.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Russian/SpouseBirthdayWishes.ru-RU.json rename to GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/SpouseBirthdayWishes.ja-JP.json diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json new file mode 100644 index 00000000..b1aa5c2e --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json @@ -0,0 +1,6 @@ +{ + "Mail:birthdayMom": "", + "Mail:birthdayDad": "", + "Happy Birthday: Star Message": "", + "Happy Birthday: Farmhand Birthday Message": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/BirthdayWishes.ko-KR.json b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/BirthdayWishes.ko-KR.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/BirthdayWishes.ko-KR.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/SpouseBirthdayWishes.ko-KR.json b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/SpouseBirthdayWishes.ko-KR.json new file mode 100644 index 00000000..91388dd7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/SpouseBirthdayWishes.ko-KR.json @@ -0,0 +1,14 @@ +{ + "Alex": "", + "Elliott": "", + "Harvey": "", + "Sam": "", + "Sebastian": "", + "Shane": "", + "Abigail": "", + "Emily": "", + "Haley": "", + "Leah": "", + "Maru": "", + "Penny": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json new file mode 100644 index 00000000..b1aa5c2e --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json @@ -0,0 +1,6 @@ +{ + "Mail:birthdayMom": "", + "Mail:birthdayDad": "", + "Happy Birthday: Star Message": "", + "Happy Birthday: Farmhand Birthday Message": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/BirthdayWishes.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/BirthdayWishes.pt-BR.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/BirthdayWishes.pt-BR.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/SpouseBirthdayWishes.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/SpouseBirthdayWishes.pt-BR.json new file mode 100644 index 00000000..91388dd7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/SpouseBirthdayWishes.pt-BR.json @@ -0,0 +1,14 @@ +{ + "Alex": "", + "Elliott": "", + "Harvey": "", + "Sam": "", + "Sebastian": "", + "Shane": "", + "Abigail": "", + "Emily": "", + "Haley": "", + "Leah": "", + "Maru": "", + "Penny": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json new file mode 100644 index 00000000..b1aa5c2e --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json @@ -0,0 +1,6 @@ +{ + "Mail:birthdayMom": "", + "Mail:birthdayDad": "", + "Happy Birthday: Star Message": "", + "Happy Birthday: Farmhand Birthday Message": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/BirthdayWishes.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/BirthdayWishes.ru-RU.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/BirthdayWishes.ru-RU.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/SpouseBirthdayWishes.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/SpouseBirthdayWishes.ru-RU.json new file mode 100644 index 00000000..91388dd7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/SpouseBirthdayWishes.ru-RU.json @@ -0,0 +1,14 @@ +{ + "Alex": "", + "Elliott": "", + "Harvey": "", + "Sam": "", + "Sebastian": "", + "Shane": "", + "Abigail": "", + "Emily": "", + "Haley": "", + "Leah": "", + "Maru": "", + "Penny": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json new file mode 100644 index 00000000..25a4690e --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json @@ -0,0 +1,6 @@ +{ + "Mail:birthdayMom": "ƒорогой @,^ — днем рождени¤, мо¤ радость. Ёто были замечательные моменты, когда ты выростал в доброго, трудолюбивого человека. я надеюсь, в твоей жизни будет куча превосходных моментов. ^ — любовью, мама ^ P.S. «десь находить небольшой подарок, который ¤ сделала дл¤ теб¤. %item object 221 1 %%", + "Mail:birthdayDad": "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", + "Happy Birthday: Star Message": "Ёто твой день рождени¤! — днем рождени¤!", + "Happy Birthday: Farmhand Birthday Message": "Ёто твой день рождени¤! ѕоздравл¤ю с этим!" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/BirthdayWishes.tr-TR.json b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/BirthdayWishes.tr-TR.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/BirthdayWishes.tr-TR.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/SpouseBirthdayWishes.tr-TR.json b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/SpouseBirthdayWishes.tr-TR.json new file mode 100644 index 00000000..91388dd7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/SpouseBirthdayWishes.tr-TR.json @@ -0,0 +1,14 @@ +{ + "Alex": "", + "Elliott": "", + "Harvey": "", + "Sam": "", + "Sebastian": "", + "Shane": "", + "Abigail": "", + "Emily": "", + "Haley": "", + "Leah": "", + "Maru": "", + "Penny": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json new file mode 100644 index 00000000..986225f0 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json @@ -0,0 +1,6 @@ +{ + "Mail:birthdayMom": "", + "Mail:birthdayDad": "", + "Happy Birthday: Star Message": "", + "Happy Birthday: Farmhand Birthday Message": "" +} diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/BirthdayWishes.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/BirthdayWishes.zh-CN.json new file mode 100644 index 00000000..45c6c1b2 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/BirthdayWishes.zh-CN.json @@ -0,0 +1,35 @@ +{ + "Robin": "", + "Demetrius": "", + "Maru": "", + "Sebastian": "", + "Linus": "", + "Pierre": "", + "Caroline": "", + "Abigail": "", + "Alex": "", + "George": "", + "Evelyn": "", + "Lewis": "", + "Clint": "", + "Penny": "", + "Pam": "", + "Emily": "", + "Haley": "", + "Jas": "", + "Vincent": "", + "Jodi": "", + "Kent": "", + "Sam": "", + "Leah": "", + "Shane": "", + "Marnie": "", + "Elliott": "", + "Gus": "", + "Dwarf": "", + "Wizard": "", + "Harvey": "", + "Sandy": "", + "Willy": "", + "Krobus": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/SpouseBirthdayWishes.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/SpouseBirthdayWishes.zh-CN.json new file mode 100644 index 00000000..91388dd7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/SpouseBirthdayWishes.zh-CN.json @@ -0,0 +1,14 @@ +{ + "Alex": "", + "Elliott": "", + "Harvey": "", + "Sam": "", + "Sebastian": "", + "Shane": "", + "Abigail": "", + "Emily": "", + "Haley": "", + "Leah": "", + "Maru": "", + "Penny": "" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/Chinese/TranslatedStrings.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json similarity index 100% rename from GeneralMods/HappyBirthday/Content/Dialogue/Chinese/TranslatedStrings.zh-CN.json rename to GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs index 9824db59..c1845d22 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs @@ -73,8 +73,10 @@ namespace Omegasis.HappyBirthday.Framework this.DayButtons.Clear(); this.OkButton = new ClickableTextureComponent("OK", new Rectangle(this.xPositionOnScreen + this.width - IClickableMenu.borderWidth - IClickableMenu.spaceToClearSideBorder - Game1.tileSize, this.yPositionOnScreen + this.height - IClickableMenu.borderWidth - IClickableMenu.spaceToClearTopBorder + Game1.tileSize / 4, Game1.tileSize, Game1.tileSize), "", null, Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 46), 1f); - this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 8, 1, 1), "Birthday Season: " + this.BirthdaySeason)); - this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize, Game1.tileSize * 2, Game1.tileSize), "Birthday Date: " + this.BirthdayDay)); + string bdaySeason = HappyBirthday.Config.translationInfo.getTranslatedString("Birthday") + " " + HappyBirthday.Config.translationInfo.getTranslatedString("Season"); + string bdayDay= HappyBirthday.Config.translationInfo.getTranslatedString("Birthday") + " " + HappyBirthday.Config.translationInfo.getTranslatedString("Date"); + this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 8, 1, 1), bdaySeason+": " + this.BirthdaySeason)); + this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize, Game1.tileSize * 2, Game1.tileSize), bdayDay+": " + this.BirthdayDay)); this.SeasonButtons.Add(new ClickableTextureComponent("Spring", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 1 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(188, 438, 32, 9), Game1.pixelZoom)); this.SeasonButtons.Add(new ClickableTextureComponent("Summer", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(220, 438, 32, 8), Game1.pixelZoom)); this.SeasonButtons.Add(new ClickableTextureComponent("Fall", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 5 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.1) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(188, 447, 32, 10), Game1.pixelZoom)); @@ -144,7 +146,7 @@ namespace Omegasis.HappyBirthday.Framework case "Summer": case "Fall": case "Winter": - this.BirthdaySeason = name.ToLower(); + this.BirthdaySeason = HappyBirthday.Config.translationInfo.getTranslatedString(name); this.OnChanged(this.BirthdaySeason, this.BirthdayDay); Game1.activeClickableMenu = new BirthdayMenu(this.BirthdaySeason, this.BirthdayDay, this.OnChanged); break; diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index 2c5e2faf..faa1451b 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -24,6 +24,12 @@ namespace Omegasis.HappyBirthday.Framework Turkish, Hungarian } + + public enum FileType + { + XNB, + JSON + } /********* ** Accessors *********/ @@ -45,19 +51,19 @@ namespace Omegasis.HappyBirthday.Framework /// Construct an instance. public TranslationInfo() { - this.TranslationFileExtensions.Add(LanguageName.English, ".xnb"); - this.TranslationFileExtensions.Add(LanguageName.Spanish, ".es-ES.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Chinese, ".zh-CN.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Japanese, ".ja-JP.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Russian, ".ru-RU.xnb"); - this.TranslationFileExtensions.Add(LanguageName.German, ".de-DE.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Portuguese, ".pt-BR.xnb"); + this.TranslationFileExtensions.Add(LanguageName.English, "en-US"); + this.TranslationFileExtensions.Add(LanguageName.Spanish, "es-ES"); + this.TranslationFileExtensions.Add(LanguageName.Chinese, "zh-CN"); + this.TranslationFileExtensions.Add(LanguageName.Japanese, "ja-JP"); + this.TranslationFileExtensions.Add(LanguageName.Russian, "ru-RU"); + this.TranslationFileExtensions.Add(LanguageName.German, "de-DE"); + this.TranslationFileExtensions.Add(LanguageName.Portuguese, "pt-BR"); //1.3 languages. - this.TranslationFileExtensions.Add(LanguageName.Italian, ".it-IT.xnb"); - this.TranslationFileExtensions.Add(LanguageName.French, ".fr-FR.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Hungarian, ".hu-HU.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Turkish, ".tr-TR.xnb"); - this.TranslationFileExtensions.Add(LanguageName.Korean, ".ko-KR.xnb"); + this.TranslationFileExtensions.Add(LanguageName.Italian, "it-IT"); + this.TranslationFileExtensions.Add(LanguageName.French, "fr-FR"); + this.TranslationFileExtensions.Add(LanguageName.Hungarian, "hu-HU"); + this.TranslationFileExtensions.Add(LanguageName.Turkish, "tr-TR"); + this.TranslationFileExtensions.Add(LanguageName.Korean, "ko-KR"); this.TranslationCodes.Add(LanguageName.English, LocalizedContentManager.LanguageCode.en); @@ -74,33 +80,26 @@ namespace Omegasis.HappyBirthday.Framework this.TranslationCodes.Add(LanguageName.Turkish, LocalizedContentManager.LanguageCode.tr); this.TranslationCodes.Add(LanguageName.Korean, LocalizedContentManager.LanguageCode.ko); } - - /// Get the language name from a string. - /// The language name. - public string getTranslationName(LanguageName language) + /// + /// Gets the current SDV translation code. + /// + /// + public LocalizedContentManager.LanguageCode getCurrrentLanguageCode() { - return language.ToString(); - } - - public void changeLocalizedContentManagerFromTranslation(LanguageName language) - { - LocalizedContentManager.CurrentLanguageCode = !this.TranslationCodes.TryGetValue(language, out LocalizedContentManager.LanguageCode code) - ? LocalizedContentManager.LanguageCode.en - : code; - } - - public void resetLocalizationCode() - { - LocalizedContentManager.CurrentLanguageCode = LocalizedContentManager.LanguageCode.en; + return this.TranslationCodes[this.CurrentTranslation]; } /// Gets the proper file extension for the current translation. /// The translation language name. - public string getFileExtentionForTranslation(LanguageName language) + public string getFileExtentionForTranslation(LanguageName language, FileType File) { try { - return this.TranslationFileExtensions[language]; + if (language == LanguageName.English) + { + return this.getFileExtensionForFileType(File); + } + return this.TranslationFileExtensions[language]+this.getFileExtensionForFileType(File); } catch (Exception err) { @@ -110,14 +109,24 @@ namespace Omegasis.HappyBirthday.Framework return ".xnb"; } } + public string getFileExtensionForFileType(FileType Type) + { + if(Type== FileType.JSON) + { + return ".json"; + } + else + { + return ".xnb"; + } + } + public string getFileExtentionForDirectory(LanguageName language) { try { string s=this.TranslationFileExtensions[language]; - s = s.Replace(".xnb", ""); - s = s.Replace(".",""); return s; } catch (Exception err) @@ -125,32 +134,33 @@ namespace Omegasis.HappyBirthday.Framework Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log(err.ToString()); Omegasis.HappyBirthday.HappyBirthday.ModMonitor.Log($"Attempted to get translation: {language}"); - return ".xnb"; + return ""; } } - /// Gets the proper XNB for Buildings (aka Blueprints) from the data folder. - public string getBuildingXNBForTranslation(LanguageName language) - { - string buildings = "Blueprints"; - return buildings + this.getFileExtentionForTranslation(language); - } - - /// Gets the proper XNB file for the name passed in. Combines the file name with it's proper translation extension. - public string getXNBForTranslation(string xnbFileName, LanguageName language) - { - return xnbFileName + this.getFileExtentionForTranslation(language); - } + /// + /// Gets the json file for the translation. + /// + /// + /// + /// public string getJSONForTranslation(string FileName,LanguageName language) { - return this.getXNBForTranslation(FileName, language); + if(language!= LanguageName.English) + { + return FileName + "." + this.getFileExtentionForTranslation(language, FileType.JSON); + } + else + { + return FileName + this.getFileExtentionForTranslation(language, FileType.JSON); + } } /// Loads an XNB file from StardewValley/Content public string LoadStringFromXNBFile(string xnbFileName, string key, LanguageName language) { - string xnb = xnbFileName + this.getFileExtentionForTranslation(language); + string xnb = xnbFileName + this.getFileExtentionForTranslation(language, FileType.XNB); Dictionary loadedDict = Game1.content.Load>(xnb); if (!loadedDict.TryGetValue(key, out string loaded)) @@ -161,42 +171,6 @@ namespace Omegasis.HappyBirthday.Framework return loaded; } - public virtual string LoadString(string path, LanguageName language, object sub1, object sub2, object sub3) - { - string format = this.LoadString(path, language); - try - { - return string.Format(format, sub1, sub2, sub3); - } - catch { } - - return format; - } - - public virtual string LoadString(string path, LanguageName language, object sub1, object sub2) - { - string format = this.LoadString(path, language); - try - { - return string.Format(format, sub1, sub2); - } - catch { } - - return format; - } - - public virtual string LoadString(string path, LanguageName language, object sub1) - { - string format = this.LoadString(path, language); - try - { - return string.Format(format, sub1); - } - catch { } - - return format; - } - public virtual string LoadString(string path, LanguageName language) { this.parseStringPath(path, out string assetName, out string key); @@ -204,25 +178,43 @@ namespace Omegasis.HappyBirthday.Framework return this.LoadStringFromXNBFile(assetName, key, language); } - public virtual string LoadString(string path, LanguageName language, params object[] substitutions) - { - string format = this.LoadString(path, language); - if (substitutions.Length != 0) - { - try - { - return string.Format(format, substitutions); - } - catch { } - } - return format; - } - private void parseStringPath(string path, out string assetName, out string key) { int length = path.IndexOf(':'); assetName = path.Substring(0, length); key = path.Substring(length + 1, path.Length - length - 1); } + + /// + /// Gets a translated string from the the dictionary with the proper translation; Returns an empty string if this fails somehow. + /// + /// + /// + /// + public string getTranslatedString(LocalizedContentManager.LanguageCode Language, string Key) + { + try + { + return HappyBirthday.Instance.messages.translatedStrings[Language][Key]; + + } + catch(Exception err) + { + return ""; + } + } + + public string getTranslatedString(string Key) + { + try + { + return HappyBirthday.Instance.messages.translatedStrings[this.getCurrrentLanguageCode()][Key]; + + } + catch (Exception err) + { + return ""; + } + } } } diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 8bc4921f..82a56d38 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -89,6 +89,8 @@ namespace Omegasis.HappyBirthday helper.Events.Input.ButtonPressed += this.OnButtonPressed; helper.Events.Display.MenuChanged += this.OnMenuChanged; + + helper.Events.Display.RenderedActiveMenu += this.OnRenderedActiveMenu; helper.Events.Display.RenderedHud += this.OnRenderedHud; //MultiplayerSupport.initializeMultiplayerSupport(); @@ -338,13 +340,36 @@ namespace Omegasis.HappyBirthday string dialogueMessage = ""; if (Game1.player.getSpouse() != null) { - if (this.messages.spouseBirthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) + if (Game1.player.getSpouse().Name.Equals(Game1.currentSpeaker.Name)) { - dialogueMessage = this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name]; + if (this.messages.spouseBirthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) + { + dialogueMessage = this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name]; + if (string.IsNullOrEmpty(dialogueMessage)) + { + dialogueMessage = this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name); + } + } + else + { + dialogueMessage = this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name); + if (string.IsNullOrEmpty(dialogueMessage)) + { + dialogueMessage = "Happy Birthday @!"; + } + } } else { - dialogueMessage = "Happy Birthday @!"; + if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) + { + + dialogueMessage = this.messages.birthdayWishes[Game1.currentSpeaker.Name]; + } + else + { + dialogueMessage = "Happy Birthday @!"; + } } } else @@ -416,15 +441,7 @@ namespace Omegasis.HappyBirthday } else { - if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - - d = new Dialogue(this.messages.birthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); - } - else - { - d = new Dialogue("Happy Birthday @!", Game1.currentSpeaker); - } + d =new Dialogue(this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name),Game1.currentSpeaker); } } @@ -489,6 +506,8 @@ namespace Omegasis.HappyBirthday this.Monitor.Log(ex.ToString(), LogLevel.Error); } this.CheckedForBirthday = false; + + Game1.player.changeFriendship(1000, Game1.getCharacterFromName("Penny", true)); } /// Raised after the player presses a button on the keyboard, controller, or mouse. @@ -526,6 +545,11 @@ namespace Omegasis.HappyBirthday } //this.SeenEvent = false; //this.Dialogue = new Dictionary(); + + + //Game1.player.addItemToInventoryBool(new StardewValley.Object(388, 999)); + //Game1.player.addItemToInventoryBool(new StardewValley.Object(390, 999)); + //Game1.player.Money = 999999; } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -587,17 +611,34 @@ namespace Omegasis.HappyBirthday //Check if npc name is spouse's name. If no spouse then add in generic dialogue. if (this.messages.spouseBirthdayWishes.ContainsKey(npc.Name) && Game1.player.isMarried()) { - //this.Monitor.Log("Spouse Checks out"); - //Check to see if spouse message exists. - if (!string.IsNullOrEmpty(this.messages.spouseBirthdayWishes[npc.Name])) + if (Game1.player.getSpouse().Name.Equals(npc.Name)) { - spouseMessage = true; - Dialogue d = new Dialogue(this.messages.spouseBirthdayWishes[npc.Name], npc); - npc.CurrentDialogue.Push(d); - if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(this.messages.spouseBirthdayWishes[npc.Name]); + //this.Monitor.Log("Spouse Checks out"); + //Check to see if spouse message exists. + if (!string.IsNullOrEmpty(this.messages.spouseBirthdayWishes[npc.Name])) + { + spouseMessage = true; + + string message = this.messages.spouseBirthdayWishes[npc.Name]; + if (string.IsNullOrEmpty(message)) + { + message = this.messages.generateSpouseBirthdayDialogue(npc.Name); + } + Dialogue d = new Dialogue(message, npc); + npc.CurrentDialogue.Push(d); + if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(message); + } + else + { + string message = this.messages.generateSpouseBirthdayDialogue(npc.Name); + Dialogue d = new Dialogue(message, npc); + npc.CurrentDialogue.Push(d); + if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(message); + spouseMessage = true; + this.Monitor.Log("No spouse message???", LogLevel.Warn); + } } - else - this.Monitor.Log("No spouse message???", LogLevel.Warn); + } if (!spouseMessage) { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.csproj b/GeneralMods/HappyBirthday/HappyBirthday.csproj index 4730af0c..e3b15962 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.csproj +++ b/GeneralMods/HappyBirthday/HappyBirthday.csproj @@ -95,46 +95,84 @@ - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + + + PreserveNewest - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + PreserveNewest + + + + + PreserveNewest + + + + + PreserveNewest + + + + + PreserveNewest + + + + + PreserveNewest + + + + PreserveNewest @@ -147,6 +185,7 @@ + \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/manifest.json b/GeneralMods/HappyBirthday/manifest.json index b50b8acd..6cbbae33 100644 --- a/GeneralMods/HappyBirthday/manifest.json +++ b/GeneralMods/HappyBirthday/manifest.json @@ -1,7 +1,7 @@ { "Name": "Happy Birthday", "Author": "Alpha_Omegasis", - "Version": "1.9.1", + "Version": "1.10.0", "Description": "Adds the farmer's birthday to the game.", "UniqueID": "Omegasis.HappyBirthday", "EntryDll": "HappyBirthday.dll", diff --git a/GeneralMods/TimeFreeze/TimeFreeze.cs b/GeneralMods/TimeFreeze/TimeFreeze.cs index c5225c04..899b987c 100644 --- a/GeneralMods/TimeFreeze/TimeFreeze.cs +++ b/GeneralMods/TimeFreeze/TimeFreeze.cs @@ -44,6 +44,13 @@ namespace Omegasis.TimeFreeze } } } + + //Patch in the underground mine shaft. + if (this.Config.freezeTimeInThisLocation.ContainsKey("UndergroundMine") == false) + { + this.Config.freezeTimeInThisLocation.Add("UndergroundMine", true); + } + this.Helper.WriteConfig(this.Config); } @@ -130,7 +137,9 @@ namespace Omegasis.TimeFreeze { Farmer player = Game1.player; if (this.ShouldFreezeTime(player, player.currentLocation)) + { Game1.gameTimeInterval = 0; + } //else // Game1.gameTimeInterval = this.oldInterval; } @@ -141,15 +150,11 @@ namespace Omegasis.TimeFreeze /// The location to check. private bool ShouldFreezeTime(Farmer player, GameLocation location) { + if (Game1.showingEndOfNightStuff) return false; if (this.Config.freezeTimeInThisLocation.ContainsKey(location.Name)) { - if (location.Name == "Mine" || location.Name.StartsWith("UndergroundMine")) - { - return this.Config.freezeTimeInThisLocation["Mine"]; - } - - if (location.Name == "SkullCave" || location.Name.StartsWith("SkullCave")) + if (location.Name.Equals("SkullCave") || location.Name.StartsWith("SkullCave")) { return this.Config.freezeTimeInThisLocation["SkullCave"]; } @@ -163,6 +168,20 @@ namespace Omegasis.TimeFreeze return this.Config.freezeTimeInThisLocation[location.Name]; } + if (location.NameOrUniqueName.StartsWith("UndergroundMine")) + { + return this.Config.freezeTimeInThisLocation["UndergroundMine"]; + } + + //Skull cave check. + if (location.Name.Equals("SkullCave") || location.Name.StartsWith("SkullCave")) + { + return this.Config.freezeTimeInThisLocation["SkullCave"]; + } + + + //this.Monitor.Log(Game1.player.currentLocation.NameOrUniqueName, LogLevel.Info); + //If for some reason the location wasn't accounted for then just freeze time there by default. if (location.IsOutdoors) return false; diff --git a/GeneralMods/TimeFreeze/manifest.json b/GeneralMods/TimeFreeze/manifest.json index 048d885b..8323d87a 100644 --- a/GeneralMods/TimeFreeze/manifest.json +++ b/GeneralMods/TimeFreeze/manifest.json @@ -1,7 +1,7 @@ { "Name": "Time Freeze", "Author": "Alpha_Omegasis", - "Version": "1.9.0", + "Version": "1.9.1", "Description": "Emulates old Harvest Moon aka (Story of Seasons) style games where time is frozen inside.", "UniqueID": "Omegasis.TimeFreeze", "EntryDll": "TimeFreeze.dll", From e7e1ff2de5945d76a058d1cb6681368015f7dc5c Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 2 Dec 2019 19:33:32 -0800 Subject: [PATCH 12/52] Changed a few words to pull from SDV translation files instead of having users provide the translations. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 65 ------------------- .../de-DE/TranslatedStrings.de-DE.json | 4 +- .../Dialogue/en-US/TranslatedStrings.json | 4 +- .../es-ES/TranslatedStrings.es-ES.json | 4 +- .../fr-FR/TranslatedStrings.fr-FR.json | 4 +- .../hu-HU/TranslatedStrings.hu-HU.json | 4 +- .../it-IT/TranslatedStrings.it-IT.json | 4 +- .../ja-JP/TranslatedStrings.ja-JP.json | 4 +- .../ko-KR/TranslatedStrings.ko-KR.json | 4 +- .../pt-BR/TranslatedStrings.pt-BR.json | 4 +- .../ru-RU/TranslatedStrings.ru-RU.json | 4 +- .../tr-TR/TranslatedStrings.tr-TR.json | 6 +- .../zh-CN/TranslatedStrings.zh-CN.json | 4 +- .../Framework/TranslationInfo.cs | 26 ++++++++ 14 files changed, 63 insertions(+), 78 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 69e270db..689cdce2 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -140,12 +140,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] ="Season", - ["Birthday"]="Birthday", ["Date"]="Date" }, @@ -155,12 +150,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.ru] = new Dictionary() @@ -169,12 +159,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.zh] = new Dictionary() @@ -183,12 +168,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() @@ -197,12 +177,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() @@ -211,12 +186,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() @@ -225,12 +195,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() @@ -239,12 +204,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.fr] = new Dictionary() @@ -253,12 +213,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.ko] = new Dictionary() @@ -267,12 +222,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.it] = new Dictionary() @@ -281,12 +231,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.tr] = new Dictionary() @@ -295,12 +240,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, [StardewValley.LocalizedContentManager.LanguageCode.hu] = new Dictionary() @@ -309,12 +249,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", - ["Spring"] = "Spring", - ["Summer"] = "Summer", - ["Fall"] = "Fall", - ["Winter"] = "Winter", ["Season"] = "Season", - ["Birthday"] = "Birthday", ["Date"] = "Date" }, }; diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json b/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/de-DE/TranslatedStrings.de-DE.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json index 03e0814b..d9696017 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", "Mail:birthdayDad": "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", "Happy Birthday: Star Message": "It's your birthday today! Happy birthday!", - "Happy Birthday: Farmhand Birthday Message": "It's @'s birthday! Happy birthday to them!" + "Happy Birthday: Farmhand Birthday Message": "It's @'s birthday! Happy birthday to them!", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json b/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/es-ES/TranslatedStrings.es-ES.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json b/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/fr-FR/TranslatedStrings.fr-FR.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json b/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/hu-HU/TranslatedStrings.hu-HU.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json b/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/it-IT/TranslatedStrings.it-IT.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ja-JP/TranslatedStrings.ja-JP.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ko-KR/TranslatedStrings.ko-KR.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json index b1aa5c2e..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/pt-BR/TranslatedStrings.pt-BR.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json index 25a4690e..9f4c5685 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/ru-RU/TranslatedStrings.ru-RU.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "ƒорогой @,^ — днем рождени¤, мо¤ радость. Ёто были замечательные моменты, когда ты выростал в доброго, трудолюбивого человека. я надеюсь, в твоей жизни будет куча превосходных моментов. ^ — любовью, мама ^ P.S. «десь находить небольшой подарок, который ¤ сделала дл¤ теб¤. %item object 221 1 %%", "Mail:birthdayDad": "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", "Happy Birthday: Star Message": "Ёто твой день рождени¤! — днем рождени¤!", - "Happy Birthday: Farmhand Birthday Message": "Ёто твой день рождени¤! ѕоздравл¤ю с этим!" + "Happy Birthday: Farmhand Birthday Message": "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json index 986225f0..cbf169b8 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/tr-TR/TranslatedStrings.tr-TR.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "", "Mail:birthdayDad": "", "Happy Birthday: Star Message": "", - "Happy Birthday: Farmhand Birthday Message": "" -} + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" +} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json index c3215da2..67eb6f6c 100644 --- a/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json +++ b/GeneralMods/HappyBirthday/Content/Dialogue/zh-CN/TranslatedStrings.zh-CN.json @@ -2,5 +2,7 @@ "Mail:birthdayMom": "亲爱的@,^ 生日快乐宝贝。看着你成长成为一个善良努力的人,就如我一直梦想着你成为的样子,我感到十分欣喜。我希望你能继续跟你爱的人制造更多美好的回忆。 ^ 爱你的,妈妈 ^ 附言:这是我给你做的一点小礼物。 %item object 221 1 %%", "Mail:birthdayDad": "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", "Happy Birthday: Star Message": "今天是你的生日!生日快乐!", - "Happy Birthday: Farmhand Birthday Message": "" + "Happy Birthday: Farmhand Birthday Message": "", + "Season": "Season", + "Date": "Date" } \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index faa1451b..2c66455b 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using StardewValley; @@ -206,6 +207,31 @@ namespace Omegasis.HappyBirthday.Framework public string getTranslatedString(string Key) { + + if (Key.Equals("Birthday")) + { + return Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); + } + if (Key.Equals("Spring")) + { + string file= Path.Combine("Strings", "StringsFromCSFiles"); + return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5680", HappyBirthday.Config.translationInfo.CurrentTranslation); + } + if (Key.Equals("Summer")) + { + string file = Path.Combine("Strings", "StringsFromCSFiles"); + return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5681", HappyBirthday.Config.translationInfo.CurrentTranslation); + } + if (Key.Equals("Fall")) + { + string file = Path.Combine("Strings", "StringsFromCSFiles"); + return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5682", HappyBirthday.Config.translationInfo.CurrentTranslation); + } + if (Key.Equals("Winter")) + { + string file = Path.Combine("Strings", "StringsFromCSFiles"); + return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5683", HappyBirthday.Config.translationInfo.CurrentTranslation); + } try { return HappyBirthday.Instance.messages.translatedStrings[this.getCurrrentLanguageCode()][Key]; From 612bb94cbd8be1b0fa27ba110963d8d2178c9792 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 2 Dec 2019 20:18:43 -0800 Subject: [PATCH 13/52] Finished translation of birthday menu. --- .../HappyBirthday/Framework/BirthdayMenu.cs | 43 +++++++++++++++---- .../Framework/TranslationInfo.cs | 12 +++--- GeneralMods/HappyBirthday/HappyBirthday.cs | 4 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs index c1845d22..6f226e21 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs @@ -77,11 +77,10 @@ namespace Omegasis.HappyBirthday.Framework string bdayDay= HappyBirthday.Config.translationInfo.getTranslatedString("Birthday") + " " + HappyBirthday.Config.translationInfo.getTranslatedString("Date"); this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 8, 1, 1), bdaySeason+": " + this.BirthdaySeason)); this.Labels.Add(new ClickableComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize / 4 + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 + 8, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize, Game1.tileSize * 2, Game1.tileSize), bdayDay+": " + this.BirthdayDay)); - this.SeasonButtons.Add(new ClickableTextureComponent("Spring", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 1 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(188, 438, 32, 9), Game1.pixelZoom)); - this.SeasonButtons.Add(new ClickableTextureComponent("Summer", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(220, 438, 32, 8), Game1.pixelZoom)); - this.SeasonButtons.Add(new ClickableTextureComponent("Fall", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 5 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.1) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(188, 447, 32, 10), Game1.pixelZoom)); - this.SeasonButtons.Add(new ClickableTextureComponent("Winter", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 7 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.1) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, new Rectangle(220, 448, 32, 8), Game1.pixelZoom)); - + this.SeasonButtons.Add(new ClickableTextureComponent("Spring", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 1 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, this.getSpringButton(), Game1.pixelZoom)); + this.SeasonButtons.Add(new ClickableTextureComponent("Summer", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 3 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.10) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, this.getSummerButton(), Game1.pixelZoom)); + this.SeasonButtons.Add(new ClickableTextureComponent("Fall", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 5 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.1) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, this.getFallButton(), Game1.pixelZoom)); + this.SeasonButtons.Add(new ClickableTextureComponent("Winter", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 7 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + (int)(Game1.tileSize * 3.1) - Game1.tileSize / 4, Game1.tileSize * 2, Game1.tileSize), "", "", Game1.mouseCursors, this.getWinterButton(), Game1.pixelZoom)); this.DayButtons.Add(new ClickableTextureComponent("1", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 1 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize * 4 - Game1.tileSize / 4, Game1.tileSize * 1, Game1.tileSize), "", "", Game1.content.Load("LooseSprites\\font_bold"), new Rectangle(8, 16, 8, 12), Game1.pixelZoom)); this.DayButtons.Add(new ClickableTextureComponent("2", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + Game1.tileSize * 2 - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize * 4 - Game1.tileSize / 4, Game1.tileSize * 1, Game1.tileSize), "", "", Game1.content.Load("LooseSprites\\font_bold"), new Rectangle(16, 16, 8, 12), Game1.pixelZoom)); @@ -130,6 +129,7 @@ namespace Omegasis.HappyBirthday.Framework this.DayButtons.Add(new ClickableTextureComponent("27", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + (int)(Game1.tileSize * 6.25) - Game1.tileSize / 3, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize * 7 - Game1.tileSize / 4, Game1.tileSize / 2, Game1.tileSize), "", "", Game1.content.Load("LooseSprites\\font_bold"), new Rectangle(56, 16, 8, 12), Game1.pixelZoom)); this.DayButtons.Add(new ClickableTextureComponent("28", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + (int)(Game1.tileSize * 6.75) - Game1.tileSize / 4, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize * 7 - Game1.tileSize / 4, Game1.tileSize / 2, Game1.tileSize), "", "", Game1.content.Load("LooseSprites\\font_bold"), new Rectangle(16, 16, 8, 12), Game1.pixelZoom)); this.DayButtons.Add(new ClickableTextureComponent("28", new Rectangle(this.xPositionOnScreen + IClickableMenu.spaceToClearSideBorder + IClickableMenu.borderWidth + (int)(Game1.tileSize * 7.25) - Game1.tileSize / 3, this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder + Game1.tileSize * 7 - Game1.tileSize / 4, Game1.tileSize / 2, Game1.tileSize), "", "", Game1.content.Load("LooseSprites\\font_bold"), new Rectangle(64, 16, 8, 12), Game1.pixelZoom)); + } /// Handle a button click. @@ -174,7 +174,7 @@ namespace Omegasis.HappyBirthday.Framework public override void receiveLeftClick(int x, int y, bool playSound = true) { //If the season is not selected then the day buttons can't be clicked. Thanks to @Potato#5266 on the SDV discord for this tip. - if (this.BirthdaySeason == "spring" || this.BirthdaySeason == "summer" || this.BirthdaySeason == "fall" || this.BirthdaySeason == "winter") + if (string.IsNullOrEmpty(this.BirthdaySeason)==false) { foreach (ClickableTextureComponent button in this.DayButtons) { @@ -243,10 +243,11 @@ namespace Omegasis.HappyBirthday.Framework { // draw menu box Game1.drawDialogueBox(this.xPositionOnScreen, this.yPositionOnScreen, this.width, this.height, false, true); - b.Draw(Game1.daybg, new Vector2((this.xPositionOnScreen + Game1.tileSize + Game1.tileSize * 2 / 3 - 2), (this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4)), Color.White); + //b.Draw(Game1.daybg, new Vector2((this.xPositionOnScreen + Game1.tileSize + Game1.tileSize * 2 / 3 - 2), (this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4)), Color.White); + //Game1.player.FarmerSprite.draw(b, new Vector2((this.xPositionOnScreen + Game1.tileSize + Game1.tileSize * 2 / 3 - 2), (this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4)),1f); // draw day buttons - if (this.BirthdaySeason == "spring" || this.BirthdaySeason == "summer" || this.BirthdaySeason == "fall" || this.BirthdaySeason == "winter") + if (string.IsNullOrEmpty(this.BirthdaySeason)==false) { foreach (ClickableTextureComponent button in this.DayButtons) button.draw(b); @@ -283,5 +284,31 @@ namespace Omegasis.HappyBirthday.Framework // draw cursor this.drawMouse(b); } + + public Rectangle getSpringButton() + { + //For some reason turkish and italian don't use translated words for the seasons??? + if (HappyBirthday.Config.translationInfo.CurrentTranslation == TranslationInfo.LanguageName.Chinese) + { + return new Rectangle(188, 437, 32, 9); + } + else + { + return new Rectangle(188, 438, 32, 9); + } + } + + public Rectangle getSummerButton() + { + return new Rectangle(220, 438, 32, 8); + } + public Rectangle getFallButton() + { + return new Rectangle(188, 447, 32, 10); + } + public Rectangle getWinterButton() + { + return new Rectangle(220, 448, 32, 8); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index 2c66455b..3525e7f6 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -210,24 +210,26 @@ namespace Omegasis.HappyBirthday.Framework if (Key.Equals("Birthday")) { - return Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); + string s= Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); + s = s.Split(' ')[0]; + return s; } - if (Key.Equals("Spring")) + if (Key.Equals("Spring") || Key.Equals("spring")) { string file= Path.Combine("Strings", "StringsFromCSFiles"); return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5680", HappyBirthday.Config.translationInfo.CurrentTranslation); } - if (Key.Equals("Summer")) + if (Key.Equals("Summer") || Key.Equals("summer")) { string file = Path.Combine("Strings", "StringsFromCSFiles"); return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5681", HappyBirthday.Config.translationInfo.CurrentTranslation); } - if (Key.Equals("Fall")) + if (Key.Equals("Fall") || Key.Equals("fall")) { string file = Path.Combine("Strings", "StringsFromCSFiles"); return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5682", HappyBirthday.Config.translationInfo.CurrentTranslation); } - if (Key.Equals("Winter")) + if (Key.Equals("Winter") || Key.Equals("winter")) { string file = Path.Combine("Strings", "StringsFromCSFiles"); return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5683", HappyBirthday.Config.translationInfo.CurrentTranslation); diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 82a56d38..0186feee 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -506,8 +506,6 @@ namespace Omegasis.HappyBirthday this.Monitor.Log(ex.ToString(), LogLevel.Error); } this.CheckedForBirthday = false; - - Game1.player.changeFriendship(1000, Game1.getCharacterFromName("Penny", true)); } /// Raised after the player presses a button on the keyboard, controller, or mouse. @@ -710,7 +708,7 @@ namespace Omegasis.HappyBirthday { return this.PlayerData.BirthdayDay == Game1.dayOfMonth - && this.PlayerData.BirthdaySeason == Game1.currentSeason; + && this.PlayerData.BirthdaySeason .Equals(HappyBirthday.Config.translationInfo.getTranslatedString(Game1.currentSeason)); } /// Migrate the legacy settings for the current player. From f4060c8c88699fbc5f1aeb01893749545feb4755 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 2 Dec 2019 20:54:30 -0800 Subject: [PATCH 14/52] Updated happy birthday mod to have all translation issues fixed. Ready for release but I need to add in the secret sauce. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 3 +- .../Framework/TranslationInfo.cs | 31 +++++++++++++------ GeneralMods/HappyBirthday/HappyBirthday.cs | 30 +++++++++--------- 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 689cdce2..312a4d19 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -126,6 +126,7 @@ namespace Omegasis.HappyBirthday this.spouseEnglishGeneratedMessages.Add("Leah", this.generateSpouseMessage); this.spouseEnglishGeneratedMessages.Add("Maru", this.generateSpouseMessage); this.spouseEnglishGeneratedMessages.Add("Penny", this.generateSpouseMessage); + HappyBirthday.Config.translationInfo.setTranslationFromLanguageCode(Game1.content.GetCurrentLanguage()); this.createBirthdayGreetings(); this.loadTranslationStrings(); } @@ -266,7 +267,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.ModMonitor.Log("Creating Villager Birthday Messages", StardewModdingAPI.LogLevel.Alert); HappyBirthday.ModHelper.Data.WriteJsonFile>(path, this.defaultBirthdayWishes); this.birthdayWishes = this.defaultBirthdayWishes; } diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index 3525e7f6..792c51a0 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -90,6 +90,19 @@ namespace Omegasis.HappyBirthday.Framework return this.TranslationCodes[this.CurrentTranslation]; } + public void setTranslationFromLanguageCode(LocalizedContentManager.LanguageCode code) + { + foreach (var v in this.TranslationCodes) + { + if (v.Value.Equals(code)) + { + this.CurrentTranslation = v.Key; + HappyBirthday.ModHelper.WriteConfig(HappyBirthday.Config); + return; + } + } + } + /// Gets the proper file extension for the current translation. /// The translation language name. public string getFileExtentionForTranslation(LanguageName language, FileType File) @@ -100,7 +113,7 @@ namespace Omegasis.HappyBirthday.Framework { return this.getFileExtensionForFileType(File); } - return this.TranslationFileExtensions[language]+this.getFileExtensionForFileType(File); + return this.TranslationFileExtensions[language] + this.getFileExtensionForFileType(File); } catch (Exception err) { @@ -112,7 +125,7 @@ namespace Omegasis.HappyBirthday.Framework } public string getFileExtensionForFileType(FileType Type) { - if(Type== FileType.JSON) + if (Type == FileType.JSON) { return ".json"; } @@ -127,7 +140,7 @@ namespace Omegasis.HappyBirthday.Framework { try { - string s=this.TranslationFileExtensions[language]; + string s = this.TranslationFileExtensions[language]; return s; } catch (Exception err) @@ -146,15 +159,15 @@ namespace Omegasis.HappyBirthday.Framework /// /// /// - public string getJSONForTranslation(string FileName,LanguageName language) + public string getJSONForTranslation(string FileName, LanguageName language) { - if(language!= LanguageName.English) + if (language != LanguageName.English) { return FileName + "." + this.getFileExtentionForTranslation(language, FileType.JSON); } else { - return FileName + this.getFileExtentionForTranslation(language, FileType.JSON); + return FileName + this.getFileExtentionForTranslation(language, FileType.JSON); } } @@ -199,7 +212,7 @@ namespace Omegasis.HappyBirthday.Framework return HappyBirthday.Instance.messages.translatedStrings[Language][Key]; } - catch(Exception err) + catch (Exception err) { return ""; } @@ -210,13 +223,13 @@ namespace Omegasis.HappyBirthday.Framework if (Key.Equals("Birthday")) { - string s= Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); + string s = Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); s = s.Split(' ')[0]; return s; } if (Key.Equals("Spring") || Key.Equals("spring")) { - string file= Path.Combine("Strings", "StringsFromCSFiles"); + string file = Path.Combine("Strings", "StringsFromCSFiles"); return HappyBirthday.Config.translationInfo.LoadStringFromXNBFile(file, "Utility.cs.5680", HappyBirthday.Config.translationInfo.CurrentTranslation); } if (Key.Equals("Summer") || Key.Equals("summer")) diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 0186feee..c988934f 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -78,8 +78,6 @@ namespace Omegasis.HappyBirthday { Instance = this; - - //helper.Content.AssetLoaders.Add(new PossibleGifts()); Config = helper.ReadConfig(); helper.Events.GameLoop.DayStarted += this.OnDayStarted; @@ -88,25 +86,23 @@ namespace Omegasis.HappyBirthday helper.Events.GameLoop.Saving += this.OnSaving; helper.Events.Input.ButtonPressed += this.OnButtonPressed; helper.Events.Display.MenuChanged += this.OnMenuChanged; - - - helper.Events.Display.RenderedActiveMenu += this.OnRenderedActiveMenu; helper.Events.Display.RenderedHud += this.OnRenderedHud; - //MultiplayerSupport.initializeMultiplayerSupport(); + helper.Events.Multiplayer.ModMessageReceived += this.Multiplayer_ModMessageReceived; + helper.Events.Multiplayer.PeerDisconnected += this.Multiplayer_PeerDisconnected; + helper.Events.GameLoop.GameLaunched += this.GameLoop_GameLaunched; ModHelper = this.Helper; ModMonitor = this.Monitor; + this.othersBirthdays = new Dictionary(); + + } + + private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) + { this.messages = new BirthdayMessages(); this.giftManager = new GiftManager(); this.isDailyQuestBoard = false; - - ModHelper.Events.Multiplayer.ModMessageReceived += this.Multiplayer_ModMessageReceived; - - ModHelper.Events.Multiplayer.PeerDisconnected += this.Multiplayer_PeerDisconnected; - - this.othersBirthdays = new Dictionary(); - } /// Get whether this instance can edit the given asset. @@ -181,8 +177,6 @@ namespace Omegasis.HappyBirthday if (this.isDailyQuestBoard || billboard.calendarDays == null) return; - //Game1.player.FarmerRenderer.drawMiniPortrat(Game1.spriteBatch, new Vector2(Game1.activeClickableMenu.xPositionOnScreen + 152 + (index - 1) % 7 * 32 * 4, Game1.activeClickableMenu.yPositionOnScreen + 230 + (index - 1) / 7 * 32 * 4), 1f, 4f, 2, Game1.player); - string hoverText = ""; List texts = new List(); @@ -746,5 +740,11 @@ namespace Omegasis.HappyBirthday } } } + + + private void hmm() + { + Game1.player.currentLocation.currentEvent = new Event(); + } } } From 717900d3e3886bb9f32e22426b621f2344322c46 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 00:03:31 -0800 Subject: [PATCH 15/52] Stared work on event system. --- .../Framework/Events/EventHelper.cs | 655 ++++++++++++++++++ .../Events/Preconditions/EventPrecondition.cs | 12 + .../TimeSpecific/DayOfTheMonth.cs | 47 ++ .../EventDayExclusionPrecondition.cs | 87 +++ .../TimeSpecific/NotAFestivalDay.cs | 27 + .../TimeSpecific/SeasonExclusion.cs | 78 +++ .../TimeSpecific/TimePrecondition.cs | 43 ++ .../TimeSpecific/WeatherPrecondition.cs | 55 ++ .../TimeSpecific/YearPrecondition.cs | 49 ++ 9 files changed, 1053 insertions(+) create mode 100644 GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs new file mode 100644 index 00000000..906ed124 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -0,0 +1,655 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Omegasis.HappyBirthday.Framework.Events.Preconditions; +using Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events +{ + /// + /// Helps in creating events based in code for stardew valley. + /// https://stardewvalleywiki.com/Modding:Event_data + /// + public class EventHelper + { + + /// + /// Nexus user id for Omegasis (aka me). + /// + private const int nexusUserId = 32171640; + + /// + /// Wraps SDV facing direction. + /// + public enum FacingDirection + { + Up, + Right, + Down, + Left + } + + + private bool _precondition_snowWeather; + private bool _precondition_debrisWeather; + private bool _precondition_weddingDayWeather; + private bool _precondition_stormyWeather; + private bool _precondition_festivalWeather; + + + private StringBuilder eventData; + + public EventHelper() + { + + } + + public EventHelper(TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays) + { + this.eventData = new StringBuilder(); + + this.add(Time.ToString()); + this.add(NotTheseDays.ToString()); + + } + + public EventHelper(List Conditions) + { + this.eventData = new StringBuilder(); + foreach(var v in Conditions) + { + if(v is WeatherPrecondition) + { + WeatherPrecondition w = (v as WeatherPrecondition); + if(w.weather== WeatherPrecondition.Weather.Sunny) + { + this.add(w.precondition_sunnyWeather()); + } + else if(w.weather== WeatherPrecondition.Weather.Rainy) + { + this.add(w.precondition_rainyWeather()); + } + else if(w.weather== WeatherPrecondition.Weather.Debris) + { + this._precondition_debrisWeather = true; + } + else if(w.weather== WeatherPrecondition.Weather.Festival) + { + this._precondition_festivalWeather = true; + } + else if(w.weather== WeatherPrecondition.Weather.Snow) + { + this._precondition_snowWeather = true; + } + else if(w.weather== WeatherPrecondition.Weather.Storm) + { + this._precondition_stormyWeather = true; + } + else if(w.weather== WeatherPrecondition.Weather.Wedding) + { + this._precondition_weddingDayWeather = true; + } + continue; + } + + + this.add(v.ToString()); + } + } + + /// + /// Adds in the event data to the string builder and appends seperators as necessary. + /// + /// + public void add(string Data) + { + if (this.eventData.Length > 0) + { + this.eventData.Append(this.getSeperator()); + } + this.eventData.Append(Data); + } + + + /// + /// Converts the direction to enum. + /// + /// + /// + public int getFacingDirectionNumber(FacingDirection Dir) + { + return (int)Dir; + } + + /// + /// Gets the even parsing seperator. + /// + /// + public string getSeperator() + { + return "/"; + } + + /// + /// Gets the starting event numbers based off of my nexus user id. + /// + /// + private string getUniqueEventStartID() + { + string s = nexusUserId.ToString(); + return s.Substring(0, 4); + } + + /// + /// Checks to ensure I don't create a id value that is too big for nexus. + /// + /// + /// + public bool isIdValid(int IDToCheck) + { + if (IDToCheck > 2147483647 || IDToCheck < 0) return false; + else return true; + } + + /// + /// Checks to ensure I don't create a id value that is too big for nexus. + /// + /// + /// + public bool isIdValid(string IDToCheck) + { + if (Convert.ToInt32(IDToCheck) > 2147483647 ||Convert.ToInt32(IDToCheck) < 0) return false; + else return true; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~// + // Preconditions // + //~~~~~~~~~~~~~~~~~~~~~~~~~// + + #region + + /// + /// Quote from SDV wiki. + /// "The special dialogue event with the given ID is not in progress. + /// This can be a custom event ID, but these are the in-game IDs: + /// cc_Begin, cc_Boulder, cc_Bridge, cc_Bus, cc_Complete, cc_Greenhouse, cc_Minecart, dumped_Girls, dumped_Guys, Introduction, joja_Begin, pamHouseUpgrade, pamHouseUpgradeAnonymous, secondChance_Girls, secondChance_Guys, willyCrabs." + /// + /// + /// + public string precondition_EventNotInProgress(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("A "); + b.Append(ID.ToString()); + return b.ToString(); + } + + + + /// + /// Creates a precondition where the event has a specific amount chance to occur. + /// + /// The chance to occur between 0 and 1. .45 would be a 45% chance to occur. + /// + public string precondition_chanceToOccur(float Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("r "); + if (Amount < 0) throw new Exception("Chance amount can't be less than 0!"); + if (Amount > 1) Amount=1; + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// Creates a precondition where the npc is not invisible. (Probably that you can find them in the game world. + /// + /// + /// + public string precondition_npcNotInvisible(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("v "); + b.Append(npc.Name); + return b.ToString(); + } + + + + + /// + /// Creates a precondition that the current player must be dating the current npc. + /// + /// + /// + public string precondition_DatingNPC(NPC NPC) + { + StringBuilder b = new StringBuilder(); + b.Append("D "); + b.Append(NPC.Name); + return b.ToString(); + } + + /// + /// Adds in the precondition that the joja warehouse has been completed. + /// + /// + public string precondition_JojaWarehouseCompleted() + { + StringBuilder b = new StringBuilder(); + b.Append("J"); + return b.ToString(); + } + + + /// + /// Adds in the precondition that the player has atleast this much money. + /// + /// + /// + public string precondition_playerHasThisMuchMoney(int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("M "); + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// Adds in the precondition that the player has this secret note. + /// + /// + /// + public string precondition_playerHasThisSecretNote(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("S "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// Creates the precondition that the player must be standing on this tile. + /// + /// + /// + /// + public string precondition_playerOnThisTile(int x,int y) + { + StringBuilder b = new StringBuilder(); + b.Append("a "); + b.Append(x.ToString()); + b.Append(" "); + b.Append(y.ToString()); + return b.ToString(); + } + + /// + /// Creates the precondition that the player must be standing on this tile. + /// + /// + /// + public string precondition_playerOnThisTile(Vector2 Position) + { + return this.precondition_playerOnThisTile((int)Position.X, (int)Position.Y); + } + + /// + /// Creates the precondition that the player must be standing on this tile. + /// + /// + /// + public string precondition_playerOnThisTile(Point Position) + { + return this.precondition_playerOnThisTile(Position.X, Position.Y); + } + + /// + /// Creates the precondition that the player has reached the bottom of the mines this many times. + /// + /// + /// + public string precondition_playerHasReachedMineBottomXTimes(int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("b "); + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// Creates the precondition that the player has atleast this many inventory slots free for the event. + /// + /// + /// + public string precondition_playerHasInventorySlotsFree(int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("c "); + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// Current player has seen the specified event . + /// + /// + /// + public string precondition_playerHasSeenEvent(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("e "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// Current player has seen the specified events. + /// + /// + /// + public string precondition_playerHasSeenEvents(List IDS) + { + StringBuilder b = new StringBuilder(); + b.Append("e "); + for (int i = 0; i < IDS.Count; i++) + { + b.Append(IDS[i]); + if (i != IDS.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + + /// + /// Gets the amount of friedship points required for this event to occur. + /// + /// + /// + /// + public string precondition_FriendshipRequired(NPC Npc, int Points) + { + StringBuilder b = new StringBuilder(); + b.Append("f "); + b.Append(Npc.Name); + b.Append(" "); + b.Append(Points.ToString()); + return b.ToString(); + } + + /// + /// Gets the amount of hearts required for this event to occur. + /// + /// + /// + /// + public string precondition_FriendshipHeartsRequired(NPC Npc, int Hearts) + { + StringBuilder b = new StringBuilder(); + b.Append("f "); + b.Append(Npc.Name); + b.Append(" "); + int points = Hearts * 250; + b.Append(points.ToString()); + return b.ToString(); + } + + /// + /// The player must be male to view this event. + /// + /// + public string precondition_playerIsMale() + { + StringBuilder b = new StringBuilder(); + b.Append("g "); + b.Append("0"); + return b.ToString(); + } + + /// + /// The player must be female to view this event. + /// + /// + public string precondition_playerIsFemale() + { + StringBuilder b = new StringBuilder(); + b.Append("g "); + b.Append("1"); + return b.ToString(); + } + + /// + /// Condition: The player has no pet and wants a cat. + /// + /// + public string precondition_playerWantsCat() + { + StringBuilder b = new StringBuilder(); + b.Append("h "); + b.Append("cat"); + return b.ToString(); + } + /// + /// Condition: The player has no pet and wants a dog. + /// + /// + public string precondition_playerWantsDog() + { + StringBuilder b = new StringBuilder(); + b.Append("h "); + b.Append("dog"); + return b.ToString(); + } + + /// + /// Player has the item with the given id. Parent sheet index? + /// + /// + /// + public string precondition_playerHasItem(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("i "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// Player has played for atleast this many days. + /// + /// + /// + public string precondition_playerHasPlayedForXDays(int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("j "); + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// The player has not seen the event. + /// + /// + /// + public string precondition_playerHasNotSeenEvent(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("k "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// The player has not seen these events. + /// + /// + /// + public string precondition_playerHasNotSeenEvents(List IDS) + { + StringBuilder b = new StringBuilder(); + b.Append("k "); + for (int i = 0; i < IDS.Count; i++) + { + b.Append(IDS[i]); + if (i != IDS.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + + /// + /// The player has not seen the letter with the given id. + /// + /// + /// + public string precondition_playerHasNotRecievedLetter(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("l "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// Current player has earned at least this much money (regardless of how much they currently have). + /// + /// + /// + public string precondition_playerEarnedMoneyTotal(int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("m "); + b.Append(Amount.ToString()); + return b.ToString(); + } + /// + /// The player has seen the letter with the given id. + /// + /// + /// + public string precondition_playerHasRecievedLetter(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("n "); + b.Append(ID.ToString()); + return b.ToString(); + } + + /// + /// Current player is not married to that NPC. + /// + /// + /// + public string precondition_playerNotMarriedToThisNPC(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("o "); + b.Append(npc.Name); + return b.ToString(); + } + + /// + /// The given npc must be in the same game location as the player. + /// + /// + /// + public string precondition_npcInPlayersLocation(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("p "); + b.Append(npc.Name); + return b.ToString(); + } + /// + /// The player has answered with the dialogue option of this choice. + /// + /// + /// + public string precondition_answeredDialogueOption(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("q "); + b.Append(ID); + return b.ToString(); + } + + /// + /// The player has answered with the dialogue options of these choices. + /// + /// + /// + public string precondition_answeredDialogueOptions(List IDS) + { + StringBuilder b = new StringBuilder(); + b.Append("q "); + for (int i = 0; i < IDS.Count; i++) + { + b.Append(IDS[i]); + if (i != IDS.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + + /// + /// Current player has shipped at least of the specified item. Can specify multiple item and number pairs, in which case all of them must be met. + /// + /// The id of the item. Parent sheet index? + /// The amount shipped. + /// + public string precondition_playerHasShippedItem(int ID, int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("s "); + b.Append(ID); + b.Append(" "); + b.Append(Amount.ToString()); + return b.ToString(); + } + + /// + /// Current player has shipped at least of the specified item. Can specify multiple item and number pairs, in which case all of them must be met. + /// + /// + /// + public string precondition_playerHasShippedTheseItems(List> Pairs) + { + StringBuilder b = new StringBuilder(); + b.Append("s "); + for(int i = 0; i < Pairs.Count; i++) + { + + int ID = Pairs[i].Key; + int Amount = Pairs[i].Value; + b.Append(ID); + b.Append(" "); + b.Append(Amount.ToString()); + + if (i != Pairs.Count - 1) + { + b.Append(" "); + } + } + + + return b.ToString(); + } + + #endregion + + + + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs new file mode 100644 index 00000000..f97ca340 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions +{ + public class EventPrecondition + { + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs new file mode 100644 index 00000000..59ee5b22 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + /// + /// Event occurs on this day of the month. Range 1-28 + /// + /// + public class DayOfTheMonth:EventPrecondition + { + + public int day; + public DayOfTheMonth() + { + + } + + public DayOfTheMonth(int Day) + { + if (Day <= 0) throw new Exception("Day must be in range of 1-28!"); + if (Day > 28) throw new Exception("Day must be in range of 1-28!"); + this.day = Day; + } + + public override string ToString() + { + return this.precondition_occursOnThisDayOfTheMonth(); + } + + /// + /// Event occurs on this day of the month. Range 1-28 + /// + /// The day this can occur on. Range 1-28 + /// + public string precondition_occursOnThisDayOfTheMonth() + { + StringBuilder b = new StringBuilder(); + b.Append("u "); + b.Append(this.day.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs new file mode 100644 index 00000000..005430a7 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + public class EventDayExclusionPrecondition:EventPrecondition + { + + public bool sunday; + public bool monday; + public bool tuesday; + public bool wednesday; + public bool thursday; + public bool friday; + public bool saturday; + + public EventDayExclusionPrecondition() + { + + } + + public EventDayExclusionPrecondition(bool Sunday, bool Monday, bool Tuesday, bool Wednesday, bool Thursday, bool Friday, bool Saturday) + { + this.sunday = Sunday; + this.monday = Monday; + this.tuesday = Tuesday; + this.wednesday = Wednesday; + this.thursday = Thursday; + this.friday = Friday; + this.saturday = Saturday; + } + + /// + /// Gets the event precondition data. + /// + /// + public override string ToString() + { + StringBuilder b = new StringBuilder(); + b.Append("d "); + + List words = new List(); + + if (this.monday) + { + words.Add("Mon"); + } + if (this.tuesday) + { + words.Add("Tue"); + } + if (this.wednesday) + { + words.Add("Wed"); + } + if (this.thursday) + { + words.Add("Thu"); + } + if (this.friday) + { + words.Add("Fri"); + } + if (this.saturday) + { + words.Add("Sat"); + } + if (this.sunday) + { + words.Add("Sun"); + } + + for (int i = 0; i < words.Count; i++) + { + b.Append(words[i]); + if (i != words.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs new file mode 100644 index 00000000..5260edcc --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + /// + /// Precondition that ensures that this event can't happen on a festival day. + /// + /// + public class NotAFestivalDay:EventPrecondition + { + public NotAFestivalDay() + { + + } + + public override string ToString() + { + StringBuilder b = new StringBuilder(); + b.Append("F"); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs new file mode 100644 index 00000000..3f9747e6 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + public class SeasonExclusion:EventPrecondition + { + public bool spring; + public bool summer; + public bool fall; + public bool winter; + + public SeasonExclusion() + { + + } + + public SeasonExclusion(bool Spring, bool Summer, bool Fall, bool Winter) + { + this.spring = Spring; + this.summer = Summer; + this.fall = Fall; + this.winter = Winter; + } + + public override string ToString() + { + return this.precondition_NotThisSeason(); + } + + /// + /// This event will occur in the seasons that aren't these seasons. + /// + /// If true this event won't occur in the spring. + /// If true this event won't occur in the summer. + /// If true this event won't occur in the fall. + /// If true this event won't occur in the winter. + /// + public string precondition_NotThisSeason() + { + StringBuilder b = new StringBuilder(); + b.Append("d "); + + List words = new List(); + + if (this.spring) + { + words.Add("spring"); + } + if (this.summer) + { + words.Add("summer"); + } + if (this.fall) + { + words.Add("fall"); + } + if (this.winter) + { + words.Add("winter"); + } + + for (int i = 0; i < words.Count; i++) + { + b.Append(words[i]); + if (i != words.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs new file mode 100644 index 00000000..d2268abb --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + /// + /// The event will only happen between the given times. + /// + /// + /// + /// + public class TimePrecondition:EventPrecondition + { + public int start; + public int end; + + public TimePrecondition() + { + + } + + public TimePrecondition(int Start, int End) + { + this.start = Start; + this.end = End; + } + + public override string ToString() + { + StringBuilder b = new StringBuilder(); + b.Append("t "); + b.Append(this.start.ToString()); + b.Append(" "); + b.Append(this.end.ToString()); + return b.ToString(); + + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs new file mode 100644 index 00000000..1d786c0e --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + public class WeatherPrecondition:EventPrecondition + { + public enum Weather + { + Sunny, + Rainy, + Debris, + Storm, + Festival, + Snow, + Wedding + } + + public Weather weather; + + public WeatherPrecondition() + { + + } + + /// + /// Creates the prconiditon that it must be sunny for the event to occur. + /// + /// + public string precondition_sunnyWeather() + { + StringBuilder b = new StringBuilder(); + b.Append("w sunny"); + return b.ToString(); + } + + /// + /// Creates the precondition that it must be rainy for the event to occur. + /// + /// + public string precondition_rainyWeather() + { + StringBuilder b = new StringBuilder(); + b.Append("w rainy"); + return b.ToString(); + } + + //Experimental weather checks. May or may not be used when checking for when to use an event. + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs new file mode 100644 index 00000000..e5c0addc --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +{ + /// + /// The event must occur on this year or after it. + /// If year is 1 then the event must occur in the first year. + /// If year is >1 then the year must be that year value atleast. Aka year 2 means the event can occur years 2+. + /// + public class YearPrecondition:EventPrecondition + { + + public int year; + public YearPrecondition() + { + + } + + public YearPrecondition(int Year) + { + this.year = Year; + } + + + public override string ToString() + { + return this.precondition_occursThisYearOrBefore(); + } + + /// + /// The event must occur on this year or after it. + /// If year is 1 then the event must occur in the first year. + /// If year is >1 then the year must be that year value atleast. Aka year 2 means the event can occur years 2+. + /// + /// If is 1, must be in the first year. Otherwise, year must be at least this value. + /// + public string precondition_occursThisYearOrBefore() + { + StringBuilder b = new StringBuilder(); + b.Append("y "); + b.Append(this.year.ToString()); + return b.ToString(); + } + } +} From ac5e291492f31af098e8004d6332b23967198a53 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 01:04:20 -0800 Subject: [PATCH 16/52] Finished moving events to a seperate class for more flexibility. --- .../Framework/Events/EventHelper.cs | 512 +----------------- .../Preconditions/MISC/ChanceToOccur.cs | 44 ++ .../Preconditions/MISC/EventNotInProgress.cs | 44 ++ .../MISC/JojaWarehouseCompleted.cs | 32 ++ .../Preconditions/NPCSpecific/DatingNPC.cs | 39 ++ .../NPCSpecific/FriendshipPointsRequired.cs | 46 ++ .../NPCSpecific/HeartsRequired.cs | 47 ++ .../NPCSpecific/NPCInThisLocation.cs | 45 ++ .../Preconditions/NPCSpecific/NotInvisible.cs | 41 ++ .../Preconditions/NPCSpecific/NotMarriedTo.cs | 44 ++ .../PlayerSpecific/AnsweredDialogueOptions.cs | 54 ++ .../PlayerSpecific/CurrentMoney.cs | 42 ++ .../PlayerSpecific/DaysPlayedFor.cs | 45 ++ .../PlayerSpecific/EmptyInventorySlots.cs | 41 ++ .../Preconditions/PlayerSpecific/Gender.cs | 61 +++ .../Preconditions/PlayerSpecific/HasItem.cs | 44 ++ .../PlayerSpecific/HasNotRecievedLetter.cs | 42 ++ .../PlayerSpecific/HasRecievedLetter.cs | 43 ++ .../PlayerSpecific/MineBottomHit.cs | 42 ++ .../PlayerSpecific/PetPreference.cs | 60 ++ .../PlayerSpecific/PlayerOnThisTile.cs | 61 +++ .../PlayerSpecific/SeenEvents.cs | 55 ++ .../PlayerSpecific/SeenSecretNote.cs | 42 ++ .../PlayerSpecific/ShippedItems.cs | 63 +++ .../PlayerSpecific/TotalMoneyEarned.cs | 42 ++ .../PlayerSpecific/UnseenEvents.cs | 53 ++ .../TimeSpecific/WeatherPrecondition.cs | 15 + 27 files changed, 1198 insertions(+), 501 deletions(-) create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 906ed124..aecbacc5 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -52,8 +52,8 @@ namespace Omegasis.HappyBirthday.Framework.Events { this.eventData = new StringBuilder(); - this.add(Time.ToString()); - this.add(NotTheseDays.ToString()); + this.add(Time); + this.add(NotTheseDays); } @@ -65,13 +65,9 @@ namespace Omegasis.HappyBirthday.Framework.Events if(v is WeatherPrecondition) { WeatherPrecondition w = (v as WeatherPrecondition); - if(w.weather== WeatherPrecondition.Weather.Sunny) + if(w.weather== WeatherPrecondition.Weather.Sunny || w.weather== WeatherPrecondition.Weather.Rainy) { - this.add(w.precondition_sunnyWeather()); - } - else if(w.weather== WeatherPrecondition.Weather.Rainy) - { - this.add(w.precondition_rainyWeather()); + this.add(v); } else if(w.weather== WeatherPrecondition.Weather.Debris) { @@ -97,7 +93,7 @@ namespace Omegasis.HappyBirthday.Framework.Events } - this.add(v.ToString()); + this.add(v); } } @@ -105,13 +101,13 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds in the event data to the string builder and appends seperators as necessary. /// /// - public void add(string Data) + public virtual void add(EventPrecondition Data) { if (this.eventData.Length > 0) { this.eventData.Append(this.getSeperator()); } - this.eventData.Append(Data); + this.eventData.Append(Data.ToString()); } @@ -120,7 +116,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public int getFacingDirectionNumber(FacingDirection Dir) + public virtual int getFacingDirectionNumber(FacingDirection Dir) { return (int)Dir; } @@ -129,7 +125,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Gets the even parsing seperator. /// /// - public string getSeperator() + public virtual string getSeperator() { return "/"; } @@ -149,7 +145,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public bool isIdValid(int IDToCheck) + public virtual bool isIdValid(int IDToCheck) { if (IDToCheck > 2147483647 || IDToCheck < 0) return false; else return true; @@ -160,496 +156,10 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public bool isIdValid(string IDToCheck) + public virtual bool isIdValid(string IDToCheck) { if (Convert.ToInt32(IDToCheck) > 2147483647 ||Convert.ToInt32(IDToCheck) < 0) return false; else return true; } - - //~~~~~~~~~~~~~~~~~~~~~~~~~// - // Preconditions // - //~~~~~~~~~~~~~~~~~~~~~~~~~// - - #region - - /// - /// Quote from SDV wiki. - /// "The special dialogue event with the given ID is not in progress. - /// This can be a custom event ID, but these are the in-game IDs: - /// cc_Begin, cc_Boulder, cc_Bridge, cc_Bus, cc_Complete, cc_Greenhouse, cc_Minecart, dumped_Girls, dumped_Guys, Introduction, joja_Begin, pamHouseUpgrade, pamHouseUpgradeAnonymous, secondChance_Girls, secondChance_Guys, willyCrabs." - /// - /// - /// - public string precondition_EventNotInProgress(string ID) - { - StringBuilder b = new StringBuilder(); - b.Append("A "); - b.Append(ID.ToString()); - return b.ToString(); - } - - - - /// - /// Creates a precondition where the event has a specific amount chance to occur. - /// - /// The chance to occur between 0 and 1. .45 would be a 45% chance to occur. - /// - public string precondition_chanceToOccur(float Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("r "); - if (Amount < 0) throw new Exception("Chance amount can't be less than 0!"); - if (Amount > 1) Amount=1; - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// Creates a precondition where the npc is not invisible. (Probably that you can find them in the game world. - /// - /// - /// - public string precondition_npcNotInvisible(NPC npc) - { - StringBuilder b = new StringBuilder(); - b.Append("v "); - b.Append(npc.Name); - return b.ToString(); - } - - - - - /// - /// Creates a precondition that the current player must be dating the current npc. - /// - /// - /// - public string precondition_DatingNPC(NPC NPC) - { - StringBuilder b = new StringBuilder(); - b.Append("D "); - b.Append(NPC.Name); - return b.ToString(); - } - - /// - /// Adds in the precondition that the joja warehouse has been completed. - /// - /// - public string precondition_JojaWarehouseCompleted() - { - StringBuilder b = new StringBuilder(); - b.Append("J"); - return b.ToString(); - } - - - /// - /// Adds in the precondition that the player has atleast this much money. - /// - /// - /// - public string precondition_playerHasThisMuchMoney(int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("M "); - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// Adds in the precondition that the player has this secret note. - /// - /// - /// - public string precondition_playerHasThisSecretNote(int ID) - { - StringBuilder b = new StringBuilder(); - b.Append("S "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// Creates the precondition that the player must be standing on this tile. - /// - /// - /// - /// - public string precondition_playerOnThisTile(int x,int y) - { - StringBuilder b = new StringBuilder(); - b.Append("a "); - b.Append(x.ToString()); - b.Append(" "); - b.Append(y.ToString()); - return b.ToString(); - } - - /// - /// Creates the precondition that the player must be standing on this tile. - /// - /// - /// - public string precondition_playerOnThisTile(Vector2 Position) - { - return this.precondition_playerOnThisTile((int)Position.X, (int)Position.Y); - } - - /// - /// Creates the precondition that the player must be standing on this tile. - /// - /// - /// - public string precondition_playerOnThisTile(Point Position) - { - return this.precondition_playerOnThisTile(Position.X, Position.Y); - } - - /// - /// Creates the precondition that the player has reached the bottom of the mines this many times. - /// - /// - /// - public string precondition_playerHasReachedMineBottomXTimes(int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("b "); - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// Creates the precondition that the player has atleast this many inventory slots free for the event. - /// - /// - /// - public string precondition_playerHasInventorySlotsFree(int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("c "); - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// Current player has seen the specified event . - /// - /// - /// - public string precondition_playerHasSeenEvent(string ID) - { - StringBuilder b = new StringBuilder(); - b.Append("e "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// Current player has seen the specified events. - /// - /// - /// - public string precondition_playerHasSeenEvents(List IDS) - { - StringBuilder b = new StringBuilder(); - b.Append("e "); - for (int i = 0; i < IDS.Count; i++) - { - b.Append(IDS[i]); - if (i != IDS.Count - 1) - { - b.Append(" "); - } - } - return b.ToString(); - } - - /// - /// Gets the amount of friedship points required for this event to occur. - /// - /// - /// - /// - public string precondition_FriendshipRequired(NPC Npc, int Points) - { - StringBuilder b = new StringBuilder(); - b.Append("f "); - b.Append(Npc.Name); - b.Append(" "); - b.Append(Points.ToString()); - return b.ToString(); - } - - /// - /// Gets the amount of hearts required for this event to occur. - /// - /// - /// - /// - public string precondition_FriendshipHeartsRequired(NPC Npc, int Hearts) - { - StringBuilder b = new StringBuilder(); - b.Append("f "); - b.Append(Npc.Name); - b.Append(" "); - int points = Hearts * 250; - b.Append(points.ToString()); - return b.ToString(); - } - - /// - /// The player must be male to view this event. - /// - /// - public string precondition_playerIsMale() - { - StringBuilder b = new StringBuilder(); - b.Append("g "); - b.Append("0"); - return b.ToString(); - } - - /// - /// The player must be female to view this event. - /// - /// - public string precondition_playerIsFemale() - { - StringBuilder b = new StringBuilder(); - b.Append("g "); - b.Append("1"); - return b.ToString(); - } - - /// - /// Condition: The player has no pet and wants a cat. - /// - /// - public string precondition_playerWantsCat() - { - StringBuilder b = new StringBuilder(); - b.Append("h "); - b.Append("cat"); - return b.ToString(); - } - /// - /// Condition: The player has no pet and wants a dog. - /// - /// - public string precondition_playerWantsDog() - { - StringBuilder b = new StringBuilder(); - b.Append("h "); - b.Append("dog"); - return b.ToString(); - } - - /// - /// Player has the item with the given id. Parent sheet index? - /// - /// - /// - public string precondition_playerHasItem(int ID) - { - StringBuilder b = new StringBuilder(); - b.Append("i "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// Player has played for atleast this many days. - /// - /// - /// - public string precondition_playerHasPlayedForXDays(int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("j "); - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// The player has not seen the event. - /// - /// - /// - public string precondition_playerHasNotSeenEvent(int ID) - { - StringBuilder b = new StringBuilder(); - b.Append("k "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// The player has not seen these events. - /// - /// - /// - public string precondition_playerHasNotSeenEvents(List IDS) - { - StringBuilder b = new StringBuilder(); - b.Append("k "); - for (int i = 0; i < IDS.Count; i++) - { - b.Append(IDS[i]); - if (i != IDS.Count - 1) - { - b.Append(" "); - } - } - return b.ToString(); - } - - /// - /// The player has not seen the letter with the given id. - /// - /// - /// - public string precondition_playerHasNotRecievedLetter(string ID) - { - StringBuilder b = new StringBuilder(); - b.Append("l "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// Current player has earned at least this much money (regardless of how much they currently have). - /// - /// - /// - public string precondition_playerEarnedMoneyTotal(int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("m "); - b.Append(Amount.ToString()); - return b.ToString(); - } - /// - /// The player has seen the letter with the given id. - /// - /// - /// - public string precondition_playerHasRecievedLetter(string ID) - { - StringBuilder b = new StringBuilder(); - b.Append("n "); - b.Append(ID.ToString()); - return b.ToString(); - } - - /// - /// Current player is not married to that NPC. - /// - /// - /// - public string precondition_playerNotMarriedToThisNPC(NPC npc) - { - StringBuilder b = new StringBuilder(); - b.Append("o "); - b.Append(npc.Name); - return b.ToString(); - } - - /// - /// The given npc must be in the same game location as the player. - /// - /// - /// - public string precondition_npcInPlayersLocation(NPC npc) - { - StringBuilder b = new StringBuilder(); - b.Append("p "); - b.Append(npc.Name); - return b.ToString(); - } - /// - /// The player has answered with the dialogue option of this choice. - /// - /// - /// - public string precondition_answeredDialogueOption(string ID) - { - StringBuilder b = new StringBuilder(); - b.Append("q "); - b.Append(ID); - return b.ToString(); - } - - /// - /// The player has answered with the dialogue options of these choices. - /// - /// - /// - public string precondition_answeredDialogueOptions(List IDS) - { - StringBuilder b = new StringBuilder(); - b.Append("q "); - for (int i = 0; i < IDS.Count; i++) - { - b.Append(IDS[i]); - if (i != IDS.Count - 1) - { - b.Append(" "); - } - } - return b.ToString(); - } - - /// - /// Current player has shipped at least of the specified item. Can specify multiple item and number pairs, in which case all of them must be met. - /// - /// The id of the item. Parent sheet index? - /// The amount shipped. - /// - public string precondition_playerHasShippedItem(int ID, int Amount) - { - StringBuilder b = new StringBuilder(); - b.Append("s "); - b.Append(ID); - b.Append(" "); - b.Append(Amount.ToString()); - return b.ToString(); - } - - /// - /// Current player has shipped at least of the specified item. Can specify multiple item and number pairs, in which case all of them must be met. - /// - /// - /// - public string precondition_playerHasShippedTheseItems(List> Pairs) - { - StringBuilder b = new StringBuilder(); - b.Append("s "); - for(int i = 0; i < Pairs.Count; i++) - { - - int ID = Pairs[i].Key; - int Amount = Pairs[i].Value; - b.Append(ID); - b.Append(" "); - b.Append(Amount.ToString()); - - if (i != Pairs.Count - 1) - { - b.Append(" "); - } - } - - - return b.ToString(); - } - - #endregion - - - - } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs new file mode 100644 index 00000000..76770b7e --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +{ + public class ChanceToOccur:EventPrecondition + { + + public float chance; + + public ChanceToOccur() + { + + } + + public ChanceToOccur(float Chance) + { + if (Chance < 0) throw new Exception("Chance amount can't be less than 0!"); + if (Chance > 1) Chance = 1; + this.chance = Chance; + } + + public override string ToString() + { + return this.precondition_chanceToOccur(); + } + + /// + /// Creates a precondition where the event has a specific amount chance to occur. + /// + /// The chance to occur between 0 and 1. .45 would be a 45% chance to occur. + /// + public string precondition_chanceToOccur() + { + StringBuilder b = new StringBuilder(); + b.Append("r "); + b.Append(this.chance.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs new file mode 100644 index 00000000..eaa421ae --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +{ + public class EventNotInProgress:EventPrecondition + { + public string id; + + public EventNotInProgress() + { + + } + + public EventNotInProgress(string ID) + { + this.id = ID; + } + + public override string ToString() + { + return this.precondition_EventNotInProgress(); + } + + /// + /// Quote from SDV wiki. + /// "The special dialogue event with the given ID is not in progress. + /// This can be a custom event ID, but these are the in-game IDs: + /// cc_Begin, cc_Boulder, cc_Bridge, cc_Bus, cc_Complete, cc_Greenhouse, cc_Minecart, dumped_Girls, dumped_Guys, Introduction, joja_Begin, pamHouseUpgrade, pamHouseUpgradeAnonymous, secondChance_Girls, secondChance_Guys, willyCrabs." + /// + /// + /// + public string precondition_EventNotInProgress() + { + StringBuilder b = new StringBuilder(); + b.Append("A "); + b.Append(this.id.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs new file mode 100644 index 00000000..4b30e319 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +{ + public class JojaWarehouseCompleted:EventPrecondition + { + public JojaWarehouseCompleted() + { + + } + + public override string ToString() + { + return this.precondition_JojaWarehouseCompleted(); + } + + /// + /// Adds in the precondition that the joja warehouse has been completed. + /// + /// + public string precondition_JojaWarehouseCompleted() + { + StringBuilder b = new StringBuilder(); + b.Append("J"); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs new file mode 100644 index 00000000..f0825441 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class DatingNPC:EventPrecondition + { + + public NPC npc; + public DatingNPC() + { + + } + public DatingNPC(NPC npc) + { + this.npc = npc; + } + + public override string ToString() + { + return this.precondition_DatingNPC(); + } + /// + /// Creates a precondition that the current player must be dating the current npc. + /// + /// + public string precondition_DatingNPC() + { + StringBuilder b = new StringBuilder(); + b.Append("D "); + b.Append(this.npc.Name); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs new file mode 100644 index 00000000..016997eb --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class FriendshipPointsRequired:EventPrecondition + { + public NPC npc; + public int amount; + + + public FriendshipPointsRequired() + { + + } + + public FriendshipPointsRequired(NPC NPC, int Amount) + { + this.npc = NPC; + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_FriendshipRequired(); + } + + /// + /// Gets the amount of friedship points required for this event to occur. + /// + /// + public string precondition_FriendshipRequired() + { + StringBuilder b = new StringBuilder(); + b.Append("f "); + b.Append(this.npc.Name); + b.Append(" "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs new file mode 100644 index 00000000..f4d71130 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class HeartsRequired:EventPrecondition + { + public NPC npc; + public int amount; + + + public HeartsRequired() + { + + } + + public HeartsRequired(NPC NPC, int Amount) + { + this.npc = NPC; + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_HeartsRequired(); + } + + /// + /// Gets the amount of hearts required for this event to occur. + /// + /// + public string precondition_HeartsRequired() + { + StringBuilder b = new StringBuilder(); + b.Append("f "); + b.Append(this.npc.Name); + b.Append(" "); + int hearts = this.amount * 250; + b.Append(hearts.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs new file mode 100644 index 00000000..9efc48a1 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class NPCInThisLocation + { + + public NPC npc; + + public NPCInThisLocation() + { + + } + + public NPCInThisLocation(NPC NPC) + { + this.npc = NPC; + } + + public override string ToString() + { + return this.precondition_npcInPlayersLocation(); + } + + + /// + /// The given npc must be in the same game location as the player. + /// + /// + /// + public string precondition_npcInPlayersLocation() + { + StringBuilder b = new StringBuilder(); + b.Append("p "); + b.Append(this.npc.Name); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs new file mode 100644 index 00000000..e41fa870 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class NotInvisible:EventPrecondition + { + + public NPC npc; + public NotInvisible() + { + + } + public NotInvisible(NPC npc) + { + this.npc = npc; + } + + public override string ToString() + { + return this.precondition_npcNotInvisible(); + } + + /// + /// Creates a precondition where the npc is not invisible. (Probably that you can find them in the game world. + /// + /// + /// + public string precondition_npcNotInvisible() + { + StringBuilder b = new StringBuilder(); + b.Append("v "); + b.Append(this.npc.Name); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs new file mode 100644 index 00000000..6b77c845 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +{ + public class NotMarriedTo:EventPrecondition + { + + public NPC npc; + + public NotMarriedTo() + { + + } + + public NotMarriedTo(NPC npc) + { + this.npc = npc; + } + + public override string ToString() + { + return this.precondition_playerNotMarriedToThisNPC(); + } + + /// + /// Current player is not married to that NPC. + /// + /// + /// + public string precondition_playerNotMarriedToThisNPC() + { + StringBuilder b = new StringBuilder(); + b.Append("o "); + b.Append(this.npc.Name); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs new file mode 100644 index 00000000..4af64eb5 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class AnsweredDialogueOptions:EventPrecondition + { + public List answeredOptions; + + public AnsweredDialogueOptions() + { + this.answeredOptions = new List(); + } + + public AnsweredDialogueOptions(string Options) + { + this.answeredOptions = new List(); + this.answeredOptions.Add(Options); + } + + public AnsweredDialogueOptions(List Options) + { + this.answeredOptions = Options.ToList(); + } + + public override string ToString() + { + return this.precondition_answeredDialogueOptions(); + } + + /// + /// The player has answered with the dialogue options of these choices. + /// + /// + /// + public string precondition_answeredDialogueOptions() + { + StringBuilder b = new StringBuilder(); + b.Append("q "); + for (int i = 0; i < this.answeredOptions.Count; i++) + { + b.Append(this.answeredOptions[i]); + if (i != this.answeredOptions.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs new file mode 100644 index 00000000..dd1fd629 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class CurrentMoney:EventPrecondition + { + + public int amount; + + public CurrentMoney() + { + + } + + public CurrentMoney(int Amount) + { + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_playerHasThisMuchMoney(); + } + + /// + /// Adds in the precondition that the player has atleast this much money. + /// + /// + /// + public string precondition_playerHasThisMuchMoney() + { + StringBuilder b = new StringBuilder(); + b.Append("M "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs new file mode 100644 index 00000000..0150b349 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class DaysPlayedFor:EventPrecondition + { + /// + /// The minimum amount of days that must be played for this event to occur. + /// + public int amount; + + public DaysPlayedFor() + { + + } + + + public DaysPlayedFor(int Amount) + { + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_playerHasPlayedForXDays(); + } + + /// + /// Player has played for atleast this many days. + /// + /// + /// + public string precondition_playerHasPlayedForXDays() + { + StringBuilder b = new StringBuilder(); + b.Append("j "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs new file mode 100644 index 00000000..ce81005a --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class EmptyInventorySlots:EventPrecondition + { + + public int amount; + + public EmptyInventorySlots() + { + + } + + public EmptyInventorySlots(int Amount) + { + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_playerHasInventorySlotsFree(); + } + + /// + /// Creates the precondition that the player has atleast this many inventory slots free for the event. + /// + /// + public string precondition_playerHasInventorySlotsFree() + { + StringBuilder b = new StringBuilder(); + b.Append("c "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs new file mode 100644 index 00000000..5e2fd150 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class Gender:EventPrecondition + { + public bool isMale; + + + public Gender() + { + + } + + public Gender(bool IsMale) + { + this.isMale = IsMale; + } + + public override string ToString() + { + if (this.isMale) + { + return this.precondition_playerIsMale(); + } + else + { + return this.precondition_playerIsFemale(); + } + } + + /// + /// The player must be male to view this event. + /// + /// + public string precondition_playerIsMale() + { + StringBuilder b = new StringBuilder(); + b.Append("g "); + b.Append("0"); + return b.ToString(); + } + + /// + /// The player must be female to view this event. + /// + /// + public string precondition_playerIsFemale() + { + StringBuilder b = new StringBuilder(); + b.Append("g "); + b.Append("1"); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs new file mode 100644 index 00000000..f51734b9 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class HasItem:EventPrecondition + { + + public int id; + + public HasItem() + { + + } + + public HasItem(int ID) + { + this.id = ID; + } + + + public override string ToString() + { + return this.precondition_playerHasItem(); + } + + + /// + /// Player has the item with the given id. Parent sheet index? + /// + /// + /// + public string precondition_playerHasItem() + { + StringBuilder b = new StringBuilder(); + b.Append("i "); + b.Append(this.id.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs new file mode 100644 index 00000000..9bd38f98 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class HasNotRecievedLetter:EventPrecondition + { + + public string id; + + public HasNotRecievedLetter() + { + + } + + public HasNotRecievedLetter(string ID) + { + this.id = ID; + } + + public override string ToString() + { + return this.precondition_playerHasNotRecievedLetter(); + } + + /// + /// The player has not seen the letter with the given id. + /// + /// + /// + public string precondition_playerHasNotRecievedLetter() + { + StringBuilder b = new StringBuilder(); + b.Append("l "); + b.Append(this.id.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs new file mode 100644 index 00000000..5415c8cc --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class HasRecievedLetter:EventPrecondition + { + public string id; + + + public HasRecievedLetter() + { + + } + + public HasRecievedLetter(string ID) + { + this.id = ID; + } + + public override string ToString() + { + return this.precondition_playerHasRecievedLetter(); + } + + /// + /// The player has seen the letter with the given id. + /// + /// + /// + public string precondition_playerHasRecievedLetter() + { + StringBuilder b = new StringBuilder(); + b.Append("n "); + b.Append(this.id.ToString()); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs new file mode 100644 index 00000000..86856f11 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class MineBottomHit:EventPrecondition + { + public int amount; + + public MineBottomHit() + { + + } + + public MineBottomHit(int Amount) + { + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_playerHasReachedMineBottomXTimes(); + } + + + /// + /// Creates the precondition that the player has reached the bottom of the mines this many times. + /// + /// + /// + public string precondition_playerHasReachedMineBottomXTimes() + { + StringBuilder b = new StringBuilder(); + b.Append("b "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs new file mode 100644 index 00000000..e0f23876 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class PetPreference:EventPrecondition + { + public bool wantsDog; + + public PetPreference() + { + + } + + public PetPreference(bool WantsDog) + { + this.wantsDog = WantsDog; + } + + public override string ToString() + { + if (this.wantsDog) + { + return this.precondition_playerWantsDog(); + } + else + { + return this.precondition_playerWantsCat(); + } + } + + + /// + /// Condition: The player has no pet and wants a cat. + /// + /// + public string precondition_playerWantsCat() + { + StringBuilder b = new StringBuilder(); + b.Append("h "); + b.Append("cat"); + return b.ToString(); + } + /// + /// Condition: The player has no pet and wants a dog. + /// + /// + public string precondition_playerWantsDog() + { + StringBuilder b = new StringBuilder(); + b.Append("h "); + b.Append("dog"); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs new file mode 100644 index 00000000..00c69256 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs @@ -0,0 +1,61 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class PlayerOnThisTile:EventPrecondition + { + public int x; + public int y; + + public PlayerOnThisTile() + { + + } + + public PlayerOnThisTile(int x, int y) + { + this.x = x; + this.y = y; + } + + public PlayerOnThisTile(Vector2 vec) + { + this.x = (int)vec.X; + this.y = (int)vec.Y; + } + + public PlayerOnThisTile(Point Point) + { + this.x = Point.X; + this.y = Point.Y; + } + + public override string ToString() + { + return this.precondition_playerOnThisTile(); + } + + /// + /// Creates the precondition that the player must be standing on this tile. + /// + /// + /// + /// + public string precondition_playerOnThisTile() + { + StringBuilder b = new StringBuilder(); + b.Append("a "); + b.Append(this.x.ToString()); + b.Append(" "); + b.Append(this.y.ToString()); + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs new file mode 100644 index 00000000..1a7ab2f5 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class SeenEvents:EventPrecondition + { + + public List seenEvents; + + public SeenEvents() + { + this.seenEvents = new List(); + } + + public SeenEvents(string ID) + { + this.seenEvents.Add(ID); + } + + public SeenEvents(List IDS) + { + this.seenEvents = IDS.ToList(); + } + + public override string ToString() + { + return this.precondition_playerHasSeenEvents(); + } + + /// + /// Current player has seen the specified events. + /// + /// + /// + public string precondition_playerHasSeenEvents() + { + StringBuilder b = new StringBuilder(); + b.Append("e "); + for (int i = 0; i < this.seenEvents.Count; i++) + { + b.Append(this.seenEvents[i]); + if (i != this.seenEvents.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs new file mode 100644 index 00000000..14ff9463 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class SeenSecretNote:EventPrecondition + { + + public string id; + + public SeenSecretNote() + { + + } + + public SeenSecretNote(string ID) + { + this.id = ID; + } + + public override string ToString() + { + return this.precondition_playerHasThisSecretNote(); + } + + /// + /// Adds in the precondition that the player has this secret note. + /// + /// + /// + public string precondition_playerHasThisSecretNote() + { + StringBuilder b = new StringBuilder(); + b.Append("S "); + b.Append(this.id.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs new file mode 100644 index 00000000..bb0b0ee6 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class ShippedItems:EventPrecondition + { + + public List> shippedItems; + + public ShippedItems() + { + this.shippedItems = new List>(); + } + + public ShippedItems(int id, int amount) + { + this.shippedItems.Add(new KeyValuePair(id, amount)); + } + + public ShippedItems(List> ShippedItems) + { + this.shippedItems = ShippedItems.ToList(); + } + + public override string ToString() + { + return this.precondition_playerHasShippedTheseItems(); + } + + /// + /// Current player has shipped at least of the specified item. Can specify multiple item and number pairs, in which case all of them must be met. + /// + /// + /// + public string precondition_playerHasShippedTheseItems() + { + StringBuilder b = new StringBuilder(); + b.Append("s "); + for (int i = 0; i < this.shippedItems.Count; i++) + { + + int ID = this.shippedItems[i].Key; + int Amount = this.shippedItems[i].Value; + b.Append(ID); + b.Append(" "); + b.Append(Amount.ToString()); + + if (i != this.shippedItems.Count - 1) + { + b.Append(" "); + } + } + + + return b.ToString(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs new file mode 100644 index 00000000..64faff19 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class TotalMoneyEarned:EventPrecondition + { + + public int amount; + + public TotalMoneyEarned() + { + + } + + public TotalMoneyEarned(int Amount) + { + this.amount = Amount; + } + + public override string ToString() + { + return this.precondition_playerEarnedMoneyTotal(); + } + + /// + /// Current player has earned at least this much money (regardless of how much they currently have). + /// + /// + /// + public string precondition_playerEarnedMoneyTotal() + { + StringBuilder b = new StringBuilder(); + b.Append("m "); + b.Append(this.amount.ToString()); + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs new file mode 100644 index 00000000..57a01d51 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +{ + public class UnseenEvents:EventPrecondition + { + public List unseenEvents; + + public UnseenEvents() + { + this.unseenEvents = new List(); + } + + public UnseenEvents(string ID) + { + this.unseenEvents.Add(ID); + } + + public UnseenEvents(List IDS) + { + this.unseenEvents = IDS.ToList(); + } + + public override string ToString() + { + return this.precondition_playerHasNotSeenEvents(); + } + + /// + /// Current player has seen the specified events. + /// + /// + /// + public string precondition_playerHasNotSeenEvents() + { + StringBuilder b = new StringBuilder(); + b.Append("k "); + for (int i = 0; i < this.unseenEvents.Count; i++) + { + b.Append(this.unseenEvents[i]); + if (i != this.unseenEvents.Count - 1) + { + b.Append(" "); + } + } + return b.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs index 1d786c0e..d54a7de4 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs @@ -49,6 +49,21 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific return b.ToString(); } + public override string ToString() + { + if(this.weather== Weather.Sunny) + { + return this.precondition_sunnyWeather(); + } + + if(this.weather== Weather.Rainy) + { + return this.precondition_rainyWeather(); + } + + return ""; + } + //Experimental weather checks. May or may not be used when checking for when to use an event. } From b5b6f500f900b83cce6f187de25f1feb1458525d Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 01:08:29 -0800 Subject: [PATCH 17/52] Added in code to get the sdv event from the event helper. --- .../Framework/Events/EventHelper.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index aecbacc5..3fa9c7fb 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -43,15 +43,17 @@ namespace Omegasis.HappyBirthday.Framework.Events private StringBuilder eventData; + public int eventID; + public EventHelper() { } - public EventHelper(TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays) + public EventHelper(int ID,TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays) { this.eventData = new StringBuilder(); - + this.eventID = ID; this.add(Time); this.add(NotTheseDays); @@ -140,6 +142,11 @@ namespace Omegasis.HappyBirthday.Framework.Events return s.Substring(0, 4); } + private string getEventID() + { + return this.getUniqueEventStartID() + this.eventID.ToString(); + } + /// /// Checks to ensure I don't create a id value that is too big for nexus. /// @@ -161,5 +168,15 @@ namespace Omegasis.HappyBirthday.Framework.Events if (Convert.ToInt32(IDToCheck) > 2147483647 ||Convert.ToInt32(IDToCheck) < 0) return false; else return true; } + + public virtual string getEventString() + { + return this.eventData.ToString(); + } + + public virtual StardewValley.Event getEvent(Farmer PlayerActor=null) + { + return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); + } } } From b550f662338277f4091164325e5927f7fa3c7e67 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 01:33:28 -0800 Subject: [PATCH 18/52] Figured out clean way to do event actions. Yay. --- .../Framework/Events/EventHelper.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 3fa9c7fb..330935eb 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -112,6 +112,16 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventData.Append(Data.ToString()); } + public virtual void add(string Data) + { + + if (this.eventData.Length > 0) + { + this.eventData.Append(this.getSeperator()); + } + this.eventData.Append(Data); + } + /// /// Converts the direction to enum. @@ -178,5 +188,24 @@ namespace Omegasis.HappyBirthday.Framework.Events { return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); } + + + //~~~~~~~~~~~~~~~~// + // Actions // + //~~~~~~~~~~~~~~~~// + + public virtual void addBigProp(int xTile, int yTile, int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("addBigProp "); + b.Append(xTile.ToString()); + b.Append(" "); + b.Append(yTile.ToString()); + b.Append(" "); + b.Append(ID.ToString()); + this.add(b.ToString()); + } + + } } From f450efdcc798fea1759f2e4bb34ab320135e7927 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 13:24:21 -0800 Subject: [PATCH 19/52] Added in precondition checks for events. Also added in special birthday precondition events. --- .../Framework/Events/EventHelper.cs | 193 +++++++++++++---- .../Framework/Events/EventStartData.cs | 204 ++++++++++++++++++ .../Events/Preconditions/EventPrecondition.cs | 6 + .../Preconditions/MISC/ChanceToOccur.cs | 8 + .../Preconditions/MISC/EventNotInProgress.cs | 6 + .../MISC/JojaWarehouseCompleted.cs | 10 + .../Preconditions/NPCSpecific/DatingNPC.cs | 5 + .../NPCSpecific/FriendshipPointsRequired.cs | 5 + .../NPCSpecific/HeartsRequired.cs | 6 + .../NPCSpecific/NPCInThisLocation.cs | 7 +- .../Preconditions/NPCSpecific/NotInvisible.cs | 5 + .../Preconditions/NPCSpecific/NotMarriedTo.cs | 9 +- .../PlayerSpecific/AnsweredDialogueOptions.cs | 20 +- .../PlayerSpecific/CurrentMoney.cs | 6 + .../PlayerSpecific/DaysPlayedFor.cs | 6 + .../PlayerSpecific/EmptyInventorySlots.cs | 6 + .../Preconditions/PlayerSpecific/Gender.cs | 5 + .../Preconditions/PlayerSpecific/HasItem.cs | 10 +- .../PlayerSpecific/HasNotRecievedLetter.cs | 6 + .../PlayerSpecific/HasRecievedLetter.cs | 6 + .../PlayerSpecific/MineBottomHit.cs | 6 + .../PlayerSpecific/PetPreference.cs | 17 ++ .../PlayerSpecific/PlayerOnThisTile.cs | 7 + .../PlayerSpecific/SeenEvents.cs | 22 +- .../PlayerSpecific/SeenSecretNote.cs | 10 +- .../PlayerSpecific/ShippedItems.cs | 12 ++ .../PlayerSpecific/TotalMoneyEarned.cs | 6 + .../PlayerSpecific/UnseenEvents.cs | 18 +- .../TimeSpecific/DayOfTheMonth.cs | 6 + .../EventDayExclusionPrecondition.cs | 43 ++++ .../TimeSpecific/NotAFestivalDay.cs | 6 + .../TimeSpecific/SeasonExclusion.cs | 24 ++- .../TimeSpecific/TimePrecondition.cs | 7 + .../TimeSpecific/WeatherPrecondition.cs | 6 +- .../TimeSpecific/YearPrecondition.cs | 14 ++ .../FarmerBirthdayPrecondition.cs | 30 +++ .../SpouseBirthdayPrecondition.cs | 36 ++++ GeneralMods/HappyBirthday/HappyBirthday.cs | 2 +- 38 files changed, 731 insertions(+), 70 deletions(-) create mode 100644 GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 330935eb..129c448a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -34,84 +34,67 @@ namespace Omegasis.HappyBirthday.Framework.Events } - private bool _precondition_snowWeather; - private bool _precondition_debrisWeather; - private bool _precondition_weddingDayWeather; - private bool _precondition_stormyWeather; - private bool _precondition_festivalWeather; - - private StringBuilder eventData; + private StringBuilder eventPreconditionData; + + + public List eventPreconditions; public int eventID; public EventHelper() { - + this.eventData = new StringBuilder(); + this.eventPreconditionData = new StringBuilder(); + this.eventPreconditions = new List(); } - public EventHelper(int ID,TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays) + public EventHelper(int ID, TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) { this.eventData = new StringBuilder(); + this.eventPreconditionData = new StringBuilder(); this.eventID = ID; this.add(Time); this.add(NotTheseDays); + this.add(StartData.ToString()); + this.eventPreconditions = new List(); + this.eventPreconditions.Add(NotTheseDays); + this.eventPreconditions.Add(Time); } - public EventHelper(List Conditions) + public EventHelper(List Conditions, EventStartData StartData) { this.eventData = new StringBuilder(); - foreach(var v in Conditions) + this.eventPreconditions = new List(); + this.eventPreconditionData = new StringBuilder(); + foreach (var v in Conditions) { - if(v is WeatherPrecondition) - { - WeatherPrecondition w = (v as WeatherPrecondition); - if(w.weather== WeatherPrecondition.Weather.Sunny || w.weather== WeatherPrecondition.Weather.Rainy) - { - this.add(v); - } - else if(w.weather== WeatherPrecondition.Weather.Debris) - { - this._precondition_debrisWeather = true; - } - else if(w.weather== WeatherPrecondition.Weather.Festival) - { - this._precondition_festivalWeather = true; - } - else if(w.weather== WeatherPrecondition.Weather.Snow) - { - this._precondition_snowWeather = true; - } - else if(w.weather== WeatherPrecondition.Weather.Storm) - { - this._precondition_stormyWeather = true; - } - else if(w.weather== WeatherPrecondition.Weather.Wedding) - { - this._precondition_weddingDayWeather = true; - } - continue; - } + this.eventPreconditions.Add(v); this.add(v); } + this.add(StartData.ToString()); } /// - /// Adds in the event data to the string builder and appends seperators as necessary. + /// Adds in the event precondition data to the string builder and appends seperators as necessary. /// /// public virtual void add(EventPrecondition Data) { - if (this.eventData.Length > 0) + if (this.eventPreconditionData.Length > 0) { - this.eventData.Append(this.getSeperator()); + this.eventPreconditionData.Append(this.getSeperator()); } - this.eventData.Append(Data.ToString()); + this.eventPreconditionData.Append(Data.ToString()); } + /// + /// Adds in the data to the event data.Aka what happens during the event. + /// + /// public virtual void add(string Data) { @@ -122,6 +105,15 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventData.Append(Data); } + /// + /// Adds in the data to the event data. Aka what happens during the event. + /// + /// + public virtual void add(StringBuilder Builder) + { + this.add(Builder.ToString()); + } + /// /// Converts the direction to enum. @@ -175,7 +167,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// public virtual bool isIdValid(string IDToCheck) { - if (Convert.ToInt32(IDToCheck) > 2147483647 ||Convert.ToInt32(IDToCheck) < 0) return false; + if (Convert.ToInt32(IDToCheck) > 2147483647 || Convert.ToInt32(IDToCheck) < 0) return false; else return true; } @@ -184,16 +176,35 @@ namespace Omegasis.HappyBirthday.Framework.Events return this.eventData.ToString(); } - public virtual StardewValley.Event getEvent(Farmer PlayerActor=null) + public virtual StardewValley.Event getEvent(Farmer PlayerActor = null) { return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); } + //~~~~~~~~~~~~~~~~// + // Validation // + //~~~~~~~~~~~~~~~~// + + public bool canEventOccur() + { + foreach(EventPrecondition eve in this.eventPreconditions) + { + if (eve.meetsCondition() == false) return false; + } + + return true; + } //~~~~~~~~~~~~~~~~// // Actions // //~~~~~~~~~~~~~~~~// + /// + /// Adds an object at the specified tile from the TileSheets\Craftables.png sprite sheet + /// + /// + /// + /// public virtual void addBigProp(int xTile, int yTile, int ID) { StringBuilder b = new StringBuilder(); @@ -203,9 +214,97 @@ namespace Omegasis.HappyBirthday.Framework.Events b.Append(yTile.ToString()); b.Append(" "); b.Append(ID.ToString()); - this.add(b.ToString()); + this.add(b); } + /// + /// Starts an active dialogue event with the given ID and a length of 4 days. + /// + /// + public virtual void addConversationTopic(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("addBigProp "); + b.Append(ID); + this.add(b); + } + /// + /// Adds the specified cooking recipe to the player. + /// + /// + public virtual void addCookingRecipe(string Recipe) + { + StringBuilder b = new StringBuilder(); + b.Append("addCookingRecipe "); + b.Append(Recipe); + this.add(b); + } + + /// + /// Adds the specified crafting recipe to the player. + /// + /// + public virtual void addCraftingRecipe(string Recipe) + { + StringBuilder b = new StringBuilder(); + b.Append("addCraftingRecipe "); + b.Append(Recipe); + this.add(b); + } + + /// + /// Add a non-solid prop from the current festival texture. Default solid width/height is 1. Default display height is solid height. + /// + public virtual void addFloorProp(int PropIndex, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) + { + StringBuilder b = new StringBuilder(); + b.Append("addFloorProp "); + b.Append(PropIndex.ToString()); + b.Append(" "); + b.Append(XTile.ToString()); + b.Append(" "); + b.Append(YTile.ToString()); + b.Append(" "); + b.Append(SolidWidth.ToString()); + b.Append(" "); + b.Append(SolidHeight.ToString()); + b.Append(" "); + b.Append(DisplayHeight.ToString()); + this.add(b); + } + + /// + /// Adds a glowing temporary sprite at the specified tile from the Maps\springobjects.png sprite sheet. A light radius of 0 just places the sprite. + /// + /// + /// + /// + /// + public virtual void addLantern(int ItemID, int XPosition, int YPosition, float LightRadius) + { + StringBuilder b = new StringBuilder(); + b.Append("addLantern "); + b.Append(ItemID.ToString()); + b.Append(" "); + b.Append(XPosition.ToString()); + b.Append(" "); + b.Append(YPosition.ToString()); + b.Append(" "); + b.Append(LightRadius.ToString()); + this.add(b); + } + + /// + /// Set a letter as received. + /// + /// + public virtual void addMailReceived(string ID) + { + StringBuilder b = new StringBuilder(); + b.Append("addMailReceived "); + b.Append(ID); + this.add(b); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs b/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs new file mode 100644 index 00000000..df16c167 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events +{ + public class EventStartData + { + /// + /// Data pertaining to npcs information necessary for the event. + /// + public class NPCData + { + private NPC npc; + int xPosition; + int yPosition; + EventHelper.FacingDirection direction; + public NPCData() + { + + } + public NPCData(NPC NPC, int XTile, int YTile, EventHelper.FacingDirection Direction) + { + this.npc = NPC; + this.xPosition = XTile; + this.yPosition = YTile; + this.direction = Direction; + } + + public override string ToString() + { + StringBuilder b = new StringBuilder(); + b.Append(this.npc.Name); + b.Append(" "); + b.Append(this.xPosition.ToString()); + b.Append(" "); + b.Append(this.yPosition.ToString()); + b.Append(" "); + b.Append(((int)this.direction).ToString()); + return b.ToString(); + } + } + + /// + /// Data pertaining to the farmer data for the event. + /// + public class FarmerData + { + int xPosition; + int yPosition; + EventHelper.FacingDirection direction; + public FarmerData() + { + + } + public FarmerData(int XTile, int YTile, EventHelper.FacingDirection Direction) + { + this.xPosition = XTile; + this.yPosition = YTile; + this.direction = Direction; + } + + public override string ToString() + { + StringBuilder b = new StringBuilder(); + b.Append("farmer"); + b.Append(" "); + b.Append(this.xPosition.ToString()); + b.Append(" "); + b.Append(this.yPosition.ToString()); + b.Append(" "); + b.Append(((int)this.direction).ToString()); + return b.ToString(); + + } + } + + /// + /// The string builder to output the information. + /// + private StringBuilder builder; + + public enum MusicToPlayType + { + None, + Continue, + } + + + public EventStartData() + { + this.builder = new StringBuilder(); + } + + /// + /// Create the start data necessary for the event. + /// + /// A special type to determine what music is played. None or Continue. + /// The starting xtile for the camera + /// The starting y tile for the camera + /// The farmer data for the event. If null then the farmer won't be in this event. + /// The npc data for the event. If null then no npcs will be in the event. + public EventStartData(MusicToPlayType MusicType, int CameraTileX, int CameraTileY, FarmerData Farmer, List NPCS) + { + this.builder = new StringBuilder(); + if(MusicType== MusicToPlayType.None) + { + this.add("none"); + } + + if(MusicType== MusicToPlayType.Continue) + { + this.add("continue"); + } + + this.add(CameraTileX.ToString()); + this.add(CameraTileY.ToString()); + + + StringBuilder npcData = new StringBuilder(); + if (Farmer != null) + { + npcData.Append(Farmer.ToString()); + } + if (NPCS != null) + { + foreach(var v in NPCS) + { + npcData.Append(v.ToString()); + } + } + this.add(npcData.ToString()); + this.add("skippable"); + + } + + /// + /// Create the start data necessary for the event. + /// + /// The name of the song to play. + /// The starting xtile for the camera + /// The starting y tile for the camera + /// The farmer data for the event. If null then the farmer won't be in this event. + /// The npc data for the event. If null then no npcs will be in the event. + public EventStartData(string SongToPlay, int CameraTileX, int CameraTileY, FarmerData Farmer, List NPCS) + { + this.builder = new StringBuilder(); + this.add(SongToPlay); + this.add(CameraTileX.ToString()); + this.add(CameraTileY.ToString()); + + StringBuilder npcData = new StringBuilder(); + if (Farmer != null) + { + npcData.Append(Farmer.ToString()); + } + if (NPCS != null) + { + foreach (var v in NPCS) + { + npcData.Append(v.ToString()); + } + } + this.add(npcData.ToString()); + this.add("skippable"); + + } + + /// + /// Adds the data to a string builder to seperate out the data. + /// + /// + public virtual void add(string Data) + { + if (this.builder.Length > 0) + { + this.builder.Append(this.getSeperator()); + } + this.builder.Append(Data); + } + + /// + /// The seperator character for events. + /// + /// + public string getSeperator() + { + return "/"; + } + + /// + /// Returns the event data. + /// + /// + public override string ToString() + { + return this.builder.ToString(); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs index f97ca340..27c8c70d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs @@ -8,5 +8,11 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions { public class EventPrecondition { + + + public virtual bool meetsCondition() + { + return false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs index 76770b7e..cdb7a0c5 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC { @@ -40,5 +41,12 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC b.Append(this.chance.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + float check = (float)Game1.random.NextDouble(); + if (this.chance >= check) return true; + else return false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs index eaa421ae..a306481f 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC { @@ -40,5 +41,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC b.Append(this.id.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.activeDialogueEvents.ContainsKey(this.id) == false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs index 4b30e319..e658a79c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC { @@ -28,5 +29,14 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC b.Append("J"); return b.ToString(); } + + /// + /// TODO: Check if this is valid. + /// + /// + public override bool meetsCondition() + { + return (Game1.MasterPlayer.hasCompletedCommunityCenter() && Game1.MasterPlayer.mailReceived.Contains("JojaMember")); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs index f0825441..8a63cdc0 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs @@ -35,5 +35,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific b.Append(this.npc.Name); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.friendshipData[this.npc.Name].IsDating(); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs index 016997eb..9f906338 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs @@ -42,5 +42,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.friendshipData[this.npc.Name].Points >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs index f4d71130..a6b0a0b6 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs @@ -43,5 +43,11 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific b.Append(hearts.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + int hearts = Game1.player.friendshipData[this.npc.Name].Points / 250; + return hearts >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs index 9efc48a1..b3180d3b 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs @@ -7,7 +7,7 @@ using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific { - public class NPCInThisLocation + public class NPCInThisLocation:EventPrecondition { public NPC npc; @@ -41,5 +41,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific return b.ToString(); } + public override bool meetsCondition() + { + return Game1.player.currentLocation.getCharacters().Contains(this.npc); + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs index e41fa870..5d351186 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs @@ -37,5 +37,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific b.Append(this.npc.Name); return b.ToString(); } + + public override bool meetsCondition() + { + return this.npc.IsInvisible == false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs index 6b77c845..545995b9 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs @@ -7,7 +7,7 @@ using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific { - public class NotMarriedTo:EventPrecondition + public class NotMarriedTo : EventPrecondition { public NPC npc; @@ -40,5 +40,12 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific return b.ToString(); } + public override bool meetsCondition() + { + if (Game1.player.getSpouse() == null) return true; + if (Game1.player.getSpouse() == this.npc) return false; + return true; + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs index 4af64eb5..46d406c0 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs @@ -3,25 +3,26 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { public class AnsweredDialogueOptions:EventPrecondition { - public List answeredOptions; + public List answeredOptions; public AnsweredDialogueOptions() { - this.answeredOptions = new List(); + this.answeredOptions = new List(); } - public AnsweredDialogueOptions(string Options) + public AnsweredDialogueOptions(int Options) { - this.answeredOptions = new List(); + this.answeredOptions = new List(); this.answeredOptions.Add(Options); } - public AnsweredDialogueOptions(List Options) + public AnsweredDialogueOptions(List Options) { this.answeredOptions = Options.ToList(); } @@ -50,5 +51,14 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific } return b.ToString(); } + + public override bool meetsCondition() + { + foreach(int i in this.answeredOptions) + { + if (Game1.player.DialogueQuestionsAnswered.Contains(i) == false) return false; + } + return true; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs index dd1fd629..4e85192e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -38,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.Money >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs index 0150b349..7fc666ae 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -41,5 +42,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.stats.DaysPlayed >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs index ce81005a..92fade3c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -37,5 +38,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.freeSpotsInInventory() >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs index 5e2fd150..9e36e44c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -57,5 +58,9 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + public override bool meetsCondition() + { + return this.isMale == Game1.player.IsMale; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs index f51734b9..0f065207 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -10,15 +11,17 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { public int id; + public int amount; public HasItem() { } - public HasItem(int ID) + public HasItem(int ID,int Amount=1) { this.id = ID; + this.amount = Amount; } @@ -40,5 +43,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.id.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.hasItemInInventory(this.id,this.amount); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs index 9bd38f98..013b9679 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -38,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.id.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.hasOrWillReceiveMail(this.id)==false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs index 5415c8cc..7f8fdb1d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -39,5 +40,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + public override bool meetsCondition() + { + return Game1.player.hasOrWillReceiveMail(this.id); + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs index 86856f11..c1ae5fb1 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -38,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.timesReachedMineBottom >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs index e0f23876..475d6b9e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -56,5 +57,21 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + public override bool meetsCondition() + { + //Cat breeds + if (Game1.player.whichPetBreed == 0 || Game1.player.whichPetBreed == 1 || Game1.player.whichPetBreed == 2) + { + if (this.wantsDog == false) return true; + else return false; + } + else + { + //Dog breeds. + if (this.wantsDog == true) return true; + else return false; + } + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs index 00c69256..1da78969 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -57,5 +58,11 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + + public override bool meetsCondition() + { + return (int)Game1.player.getTileLocation().X == this.x && (int)Game1.player.getTileLocation().Y == this.y; + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs index 1a7ab2f5..22be7440 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs @@ -3,25 +3,26 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { - public class SeenEvents:EventPrecondition + public class SeenEvents : EventPrecondition { - public List seenEvents; + public List seenEvents; public SeenEvents() { - this.seenEvents = new List(); + this.seenEvents = new List(); } - public SeenEvents(string ID) + public SeenEvents(int ID) { this.seenEvents.Add(ID); } - public SeenEvents(List IDS) + public SeenEvents(List IDS) { this.seenEvents = IDS.ToList(); } @@ -42,7 +43,7 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append("e "); for (int i = 0; i < this.seenEvents.Count; i++) { - b.Append(this.seenEvents[i]); + b.Append(this.seenEvents[i].ToString()); if (i != this.seenEvents.Count - 1) { b.Append(" "); @@ -51,5 +52,14 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + public override bool meetsCondition() + { + foreach (int v in this.seenEvents) + { + if (Game1.player.eventsSeen.Contains(v) == false) return false; + } + return true; + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs index 14ff9463..76303066 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs @@ -3,20 +3,21 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { public class SeenSecretNote:EventPrecondition { - public string id; + public int id; public SeenSecretNote() { } - public SeenSecretNote(string ID) + public SeenSecretNote(int ID) { this.id = ID; } @@ -38,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.id.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.secretNotesSeen.Contains(this.id); + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs index bb0b0ee6..8061494c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -59,5 +60,16 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific return b.ToString(); } + public override bool meetsCondition() + { + foreach (KeyValuePair pair in this.shippedItems) { + if (Game1.player.basicShipped.ContainsKey(pair.Key)){ + if (Game1.player.basicShipped[pair.Key] <= pair.Value) return false; + } + else return false; + } + return true; + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs index 64faff19..ed4cf6b5 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { @@ -38,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific b.Append(this.amount.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.player.totalMoneyEarned >= this.amount; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs index 57a01d51..8556c5ab 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs @@ -3,24 +3,25 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific { public class UnseenEvents:EventPrecondition { - public List unseenEvents; + public List unseenEvents; public UnseenEvents() { - this.unseenEvents = new List(); + this.unseenEvents = new List(); } - public UnseenEvents(string ID) + public UnseenEvents(int ID) { this.unseenEvents.Add(ID); } - public UnseenEvents(List IDS) + public UnseenEvents(List IDS) { this.unseenEvents = IDS.ToList(); } @@ -49,5 +50,14 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific } return b.ToString(); } + + public override bool meetsCondition() + { + foreach (int v in this.unseenEvents) + { + if (Game1.player.eventsSeen.Contains(v) == true) return false; + } + return true; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs index 59ee5b22..125dcb02 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -43,5 +44,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific b.Append(this.day.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + return Game1.dayOfMonth == this.day; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs index 005430a7..57cacec5 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -83,5 +84,47 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific } return b.ToString(); } + + public override bool meetsCondition() + { + int day = Game1.dayOfMonth; + if (day % 7 == 0) + { + //Sunday + if (this.sunday) return false; + } + if (day % 7 == 1) + { + //Monday + if (this.monday) return false; + } + if (day % 7 == 2) + { + //Tuesday + if (this.tuesday) return false; + } + if (day % 7 == 3) + { + //Wednesday + if (this.wednesday) return false; + } + if (day % 7 == 4) + { + //Thursday + if (this.thursday) return false; + } + if (day % 7 == 5) + { + //Friday + if (this.friday) return false; + } + if (day % 7 == 6) + { + //Saturday + if (this.saturday) return false; + } + + return true; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs index 5260edcc..8d92cc20 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -23,5 +24,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific b.Append("F"); return b.ToString(); } + + public override bool meetsCondition() + { + return string.IsNullOrEmpty(Game1.whereIsTodaysFest) == true; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs index 3f9747e6..fbb28637 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -68,11 +69,32 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific b.Append(words[i]); if (i != words.Count - 1) { - b.Append(" "); + b.Append("/"); } } return b.ToString(); } + public override bool meetsCondition() + { + if (Game1.currentSeason == "spring") + { + if (this.spring) return false; + } + if (Game1.currentSeason == "summer") + { + if (this.summer) return false; + } + if (Game1.currentSeason == "fall") + { + if (this.fall) return false; + } + if (Game1.currentSeason == "winter") + { + if (this.winter) return false; + }return true; + + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs index d2268abb..3a5a5480 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -39,5 +40,11 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific } + public override bool meetsCondition() + { + if (Game1.timeOfDay >= this.start && Game1.timeOfDay <= this.end) return true; + else return false; + } + } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs index d54a7de4..76c26e4f 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs @@ -64,7 +64,11 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific return ""; } - //Experimental weather checks. May or may not be used when checking for when to use an event. + public override bool meetsCondition() + { + if (Game1.weatherIcon == (int)this.weather) return true; + else return false; + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs index e5c0addc..fb5a9a3f 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific { @@ -45,5 +46,18 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific b.Append(this.year.ToString()); return b.ToString(); } + + public override bool meetsCondition() + { + if (this.year == 1) + { + if (Game1.year == 1) return true; + else return false; + } + else + { + return this.year <= Game1.year; + } + } } } diff --git a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs new file mode 100644 index 00000000..165db6c8 --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Omegasis.HappyBirthday.Framework.Events.Preconditions; + +namespace Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions +{ + public class FarmerBirthdayPrecondition:EventPrecondition + { + + + public FarmerBirthdayPrecondition() + { + + } + + public override string ToString() + { + return "Omegasis.HappyBirthday"; + } + + public override bool meetsCondition() + { + return HappyBirthday.Instance.IsBirthday(); + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs new file mode 100644 index 00000000..c167090c --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Omegasis.HappyBirthday.Framework.Events.Preconditions; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions +{ + public class SpouseBirthdayPrecondition:EventPrecondition + { + + + public SpouseBirthdayPrecondition() + { + + } + + public override bool meetsCondition() + { + if (Game1.player.getSpouse() == null) return false; + else + { + NPC spouse = Game1.player.getSpouse(); + if (spouse.isBirthday(Game1.currentSeason, Game1.dayOfMonth)){ + return true; + } + else + { + return false; + } + } + } + } +} diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index c988934f..6912666c 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -698,7 +698,7 @@ namespace Omegasis.HappyBirthday } /// Get whether today is the player's birthday. - private bool IsBirthday() + public bool IsBirthday() { return this.PlayerData.BirthdayDay == Game1.dayOfMonth From 0db4c5452cfe150acef1323f338623c0bf078e7d Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 13:28:50 -0800 Subject: [PATCH 20/52] Added in a location pre-condition for the event. --- .../Preconditions/LocationPrecondition.cs | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs new file mode 100644 index 00000000..c69d011a --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events.Preconditions +{ + public class LocationPrecondition:EventPrecondition + { + private string locationName; + private GameLocation location; + + + public LocationPrecondition() + { + + } + + public LocationPrecondition(GameLocation Location) + { + this.locationName = Location.NameOrUniqueName; + this.location = Location; + } + + /// + /// Constructor. + /// + /// The name of the location. + /// The location is a building on the farm. + public LocationPrecondition(string Location, bool IsStructure=false) + { + this.locationName = Location; + this.location = Game1.getLocationFromName(Location,IsStructure); + } + + public override bool meetsCondition() + { + return Game1.player.currentLocation == this.location; + } + } +} From 71ca6a1938499ba7128794d32de570e0542344e0 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 13:33:38 -0800 Subject: [PATCH 21/52] Finished wrapping all of the event data. Now just need to add in the actions for the event. --- .../Framework/Events/EventHelper.cs | 30 ++++++++++++------- .../Preconditions/LocationPrecondition.cs | 5 ++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 129c448a..9bf8229c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -36,10 +36,7 @@ namespace Omegasis.HappyBirthday.Framework.Events private StringBuilder eventData; private StringBuilder eventPreconditionData; - - public List eventPreconditions; - public int eventID; public EventHelper() @@ -49,18 +46,16 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventPreconditions = new List(); } - public EventHelper(int ID, TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) + public EventHelper(int ID,LocationPrecondition Location ,TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) { this.eventData = new StringBuilder(); this.eventPreconditionData = new StringBuilder(); + this.eventPreconditions = new List(); this.eventID = ID; + this.add(Location); this.add(Time); this.add(NotTheseDays); this.add(StartData.ToString()); - - this.eventPreconditions = new List(); - this.eventPreconditions.Add(NotTheseDays); - this.eventPreconditions.Add(Time); } public EventHelper(List Conditions, EventStartData StartData) @@ -70,9 +65,6 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventPreconditionData = new StringBuilder(); foreach (var v in Conditions) { - this.eventPreconditions.Add(v); - - this.add(v); } this.add(StartData.ToString()); @@ -84,6 +76,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// public virtual void add(EventPrecondition Data) { + this.eventPreconditions.Add(Data); if (this.eventPreconditionData.Length > 0) { this.eventPreconditionData.Append(this.getSeperator()); @@ -181,10 +174,25 @@ namespace Omegasis.HappyBirthday.Framework.Events return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); } + /// + /// Checks to see if all of the event preconditions have been met and starts the event if so. + /// + public virtual void startEventAtLocationifPossible() + { + if (this.canEventOccur()) + { + Game1.player.currentLocation.currentEvent = this.getEvent(); + } + } + //~~~~~~~~~~~~~~~~// // Validation // //~~~~~~~~~~~~~~~~// + /// + /// Checks to see if the event can occur. + /// + /// public bool canEventOccur() { foreach(EventPrecondition eve in this.eventPreconditions) diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs index c69d011a..2ee9b42d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs @@ -39,5 +39,10 @@ namespace Omegasis.HappyBirthday.Framework.Events.Preconditions { return Game1.player.currentLocation == this.location; } + + public override string ToString() + { + return "Location " + this.locationName; + } } } From 7e17ae90a7fd388639e2b8849fb4672edaf4513f Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 13:41:45 -0800 Subject: [PATCH 22/52] Added in protected fields for event helper. --- .../Framework/Events/EventHelper.cs | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 9bf8229c..554418d0 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -20,7 +20,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// Nexus user id for Omegasis (aka me). /// - private const int nexusUserId = 32171640; + protected int nexusUserId = 32171640; /// /// Wraps SDV facing direction. @@ -34,10 +34,10 @@ namespace Omegasis.HappyBirthday.Framework.Events } - private StringBuilder eventData; - private StringBuilder eventPreconditionData; - public List eventPreconditions; - public int eventID; + protected StringBuilder eventData; + protected StringBuilder eventPreconditionData; + protected List eventPreconditions; + protected int eventID; public EventHelper() { @@ -88,7 +88,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds in the data to the event data.Aka what happens during the event. /// /// - public virtual void add(string Data) + protected virtual void add(string Data) { if (this.eventData.Length > 0) @@ -102,7 +102,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds in the data to the event data. Aka what happens during the event. /// /// - public virtual void add(StringBuilder Builder) + protected virtual void add(StringBuilder Builder) { this.add(Builder.ToString()); } @@ -113,7 +113,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual int getFacingDirectionNumber(FacingDirection Dir) + protected virtual int getFacingDirectionNumber(FacingDirection Dir) { return (int)Dir; } @@ -122,7 +122,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Gets the even parsing seperator. /// /// - public virtual string getSeperator() + protected virtual string getSeperator() { return "/"; } @@ -131,13 +131,13 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Gets the starting event numbers based off of my nexus user id. /// /// - private string getUniqueEventStartID() + protected virtual string getUniqueEventStartID() { - string s = nexusUserId.ToString(); + string s = this.nexusUserId.ToString(); return s.Substring(0, 4); } - private string getEventID() + protected virtual string getEventID() { return this.getUniqueEventStartID() + this.eventID.ToString(); } @@ -147,7 +147,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual bool isIdValid(int IDToCheck) + protected virtual bool isIdValid(int IDToCheck) { if (IDToCheck > 2147483647 || IDToCheck < 0) return false; else return true; @@ -158,18 +158,18 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual bool isIdValid(string IDToCheck) + protected virtual bool isIdValid(string IDToCheck) { if (Convert.ToInt32(IDToCheck) > 2147483647 || Convert.ToInt32(IDToCheck) < 0) return false; else return true; } - public virtual string getEventString() + protected virtual string getEventString() { return this.eventData.ToString(); } - public virtual StardewValley.Event getEvent(Farmer PlayerActor = null) + protected virtual StardewValley.Event getEvent(Farmer PlayerActor = null) { return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); } @@ -177,7 +177,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// Checks to see if all of the event preconditions have been met and starts the event if so. /// - public virtual void startEventAtLocationifPossible() + protected virtual void startEventAtLocationifPossible() { if (this.canEventOccur()) { @@ -193,7 +193,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Checks to see if the event can occur. /// /// - public bool canEventOccur() + protected virtual bool canEventOccur() { foreach(EventPrecondition eve in this.eventPreconditions) { @@ -213,7 +213,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual void addBigProp(int xTile, int yTile, int ID) + protected virtual void addBigProp(int xTile, int yTile, int ID) { StringBuilder b = new StringBuilder(); b.Append("addBigProp "); @@ -229,7 +229,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Starts an active dialogue event with the given ID and a length of 4 days. /// /// - public virtual void addConversationTopic(string ID) + protected virtual void addConversationTopic(string ID) { StringBuilder b = new StringBuilder(); b.Append("addBigProp "); @@ -241,7 +241,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds the specified cooking recipe to the player. /// /// - public virtual void addCookingRecipe(string Recipe) + protected virtual void addCookingRecipe(string Recipe) { StringBuilder b = new StringBuilder(); b.Append("addCookingRecipe "); @@ -253,7 +253,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds the specified crafting recipe to the player. /// /// - public virtual void addCraftingRecipe(string Recipe) + protected virtual void addCraftingRecipe(string Recipe) { StringBuilder b = new StringBuilder(); b.Append("addCraftingRecipe "); @@ -264,7 +264,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// Add a non-solid prop from the current festival texture. Default solid width/height is 1. Default display height is solid height. /// - public virtual void addFloorProp(int PropIndex, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) + protected virtual void addFloorProp(int PropIndex, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) { StringBuilder b = new StringBuilder(); b.Append("addFloorProp "); @@ -289,7 +289,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual void addLantern(int ItemID, int XPosition, int YPosition, float LightRadius) + protected virtual void addLantern(int ItemID, int XPosition, int YPosition, float LightRadius) { StringBuilder b = new StringBuilder(); b.Append("addLantern "); @@ -307,12 +307,15 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Set a letter as received. /// /// - public virtual void addMailReceived(string ID) + protected virtual void addMailReceived(string ID) { StringBuilder b = new StringBuilder(); b.Append("addMailReceived "); b.Append(ID); this.add(b); } + + + } } From e190c9e66452a9e6ece41289c8c2035233f70775 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 14:11:38 -0800 Subject: [PATCH 23/52] Added in more event data to the event helper class. --- .../Framework/Events/EventHelper.cs | 280 +++++++++++++++++- 1 file changed, 278 insertions(+), 2 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 554418d0..fc1c6715 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -33,6 +33,15 @@ namespace Omegasis.HappyBirthday.Framework.Events Left } + public enum Layers + { + Back, + Paths, + Buildings, + Front, + AlwaysFront + } + protected StringBuilder eventData; protected StringBuilder eventPreconditionData; @@ -118,6 +127,21 @@ namespace Omegasis.HappyBirthday.Framework.Events return (int)Dir; } + /// + /// Gets the layer string from the Layer enum. + /// + /// + /// + protected virtual string getLayerName(Layers Layer) + { + if (Layer == Layers.AlwaysFront) return "AlwaysFront"; + if (Layer == Layers.Back) return "Back"; + if (Layer == Layers.Buildings) return "Buildings"; + if (Layer == Layers.Front) return "Front"; + if (Layer == Layers.Paths) return "Paths"; + return ""; + } + /// /// Gets the even parsing seperator. /// @@ -181,7 +205,8 @@ namespace Omegasis.HappyBirthday.Framework.Events { if (this.canEventOccur()) { - Game1.player.currentLocation.currentEvent = this.getEvent(); + //Game1.player.currentLocation.currentEvent = this.getEvent(); + Game1.player.currentLocation.startEvent(this.getEvent()); } } @@ -310,11 +335,262 @@ namespace Omegasis.HappyBirthday.Framework.Events protected virtual void addMailReceived(string ID) { StringBuilder b = new StringBuilder(); - b.Append("addMailReceived "); + b.Append("addMailReceived "); b.Append(ID); this.add(b); } + /// + /// Adds a temporary sprite at the specified tile from the Maps\springobjects.png sprite sheet. + /// + /// + /// + /// + /// + protected virtual void addObject(int XTile, int YTile, int ParentSheetIndex, string Layer) + { + StringBuilder b = new StringBuilder(); + b.Append("addObject "); + b.Append(XTile.ToString()); + b.Append(" "); + b.Append(YTile.ToString()); + b.Append(" "); + b.Append(Layer); + this.add(b); + } + + /// + /// Adds a temporary sprite at the specified tile from the Maps\springobjects.png sprite sheet. + /// + /// + /// + /// + /// + protected virtual void addObject(int XTile, int YTile, int ParentSheetIndex, Layers Layer) + { + StringBuilder b = new StringBuilder(); + b.Append("addObject "); + b.Append(XTile.ToString()); + b.Append(" "); + b.Append(YTile.ToString()); + b.Append(" "); + b.Append(this.getLayerName(Layer)); + this.add(b); + } + + /// + /// Add a solid prop from the current festival texture. Default solid width/height is 1. Default display height is solid height. + /// + /// + /// + /// + /// + /// + /// + protected virtual void addProp(int Index, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) + { + StringBuilder b = new StringBuilder(); + b.Append("addProp "); + b.Append(Index.ToString()); + b.Append(" "); + b.Append(XTile.ToString()); + b.Append(" "); + b.Append(YTile.ToString()); + b.Append(" "); + b.Append(SolidWidth.ToString()); + b.Append(" "); + b.Append(SolidHeight.ToString()); + b.Append(" "); + b.Append(DisplayHeight.ToString()); + this.add(b); + } + + /// + /// Add the specified quest to the quest log. + /// + /// + public virtual void addQuest(int QuestID) + { + StringBuilder b = new StringBuilder(); + b.Append("addQuest "); + b.Append(QuestID.ToString()); + this.add(b); + } + + /// + /// Add a temporary actor. 'breather' is boolean. The category determines where the texture will be loaded from, default is Character. Animal name only applies to animal. + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void addTemporaryActor_NPC(NPC npc, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather) + { + StringBuilder b = new StringBuilder(); + b.Append("addTemporaryActor "); + b.Append(npc.Name); + b.Append(" "); + b.Append(SpriteWidth.ToString()); + b.Append(" "); + b.Append(SpriteHeight.ToString()); + b.Append(" "); + b.Append(TileX.ToString()); + b.Append(" "); + b.Append(TileY.ToString()); + b.Append(" "); + b.Append(Direction); + b.Append(" "); + b.Append("Character"); + this.add(b); + } + + /// + /// Add a temporary actor. 'breather' is boolean. The category determines where the texture will be loaded from, default is Character. Animal name only applies to animal. + /// + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void addTemporaryActor_Animal(string character, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather,string AnimalName) + { + StringBuilder b = new StringBuilder(); + b.Append("addTemporaryActor "); + b.Append(character); + b.Append(" "); + b.Append(SpriteWidth.ToString()); + b.Append(" "); + b.Append(SpriteHeight.ToString()); + b.Append(" "); + b.Append(TileX.ToString()); + b.Append(" "); + b.Append(TileY.ToString()); + b.Append(" "); + b.Append(Direction); + b.Append(" "); + b.Append("Animal"); + b.Append(" "); + b.Append(AnimalName); + this.add(b); + } + + /// + /// Add a temporary actor. 'breather' is boolean. The category determines where the texture will be loaded from, default is Character. Animal name only applies to animal. + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void addTemporaryActor_Monster(string character, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather) + { + StringBuilder b = new StringBuilder(); + b.Append("addTemporaryActor "); + b.Append(character); + b.Append(" "); + b.Append(SpriteWidth.ToString()); + b.Append(" "); + b.Append(SpriteHeight.ToString()); + b.Append(" "); + b.Append(TileX.ToString()); + b.Append(" "); + b.Append(TileY.ToString()); + b.Append(" "); + b.Append(Direction); + b.Append(" "); + b.Append("Monster"); + this.add(b); + } + + /// + /// Places on object on the furniture at a position. If the location is FarmHouse, then it will always be placed on the initial table. + /// + /// + /// + /// + public virtual void addToTable(int XPosition, int YPosition, int ObjectParentSheetIndex) + { + StringBuilder b = new StringBuilder(); + b.Append("addToTable "); + b.Append(XPosition); + b.Append(" "); + b.Append(YPosition); + b.Append(" "); + b.Append(ObjectParentSheetIndex); + this.add(b); + } + + /// + /// Adds the Return Scepter to the player's inventory. + /// + public virtual void addTool_ReturnScepter() + { + StringBuilder b = new StringBuilder(); + b.Append("addTool Wand"); + this.add(b); + } + + /// + /// Set multiple movements for an NPC. You can set True to have NPC walk the path continuously. Example: /advancedMove Robin false 0 3 2 0 0 2 -2 0 0 -2 2 0/ + /// + /// + /// + /// + public virtual void advanceMove(NPC npc, bool Loop, List TilePoints) + { + StringBuilder b = new StringBuilder(); + b.Append("advancedMove "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Loop.ToString()); + b.Append(" "); + for(int i = 0; i < TilePoints.Count; i++) + { + b.Append(TilePoints[i].X); + b.Append(" "); + b.Append(TilePoints[i].Y); + if (i != TilePoints.Count - 1) + { + b.Append(" "); + } + } + this.add(b); + } + + /// + /// Modifies the ambient light level, with RGB values from 0 to 255. Note that it works by removing colors from the existing light ambience, so ambientLight 1 80 80 would reduce green and blue and leave the light with a reddish hue. + /// + /// + /// + /// + public virtual void setAmbientLight(int r, int g, int b) + { + StringBuilder builder = new StringBuilder(); + builder.Append("ambientLight "); + builder.Append(r); + builder.Append(" "); + builder.Append(g); + builder.Append(" "); + builder.Append(b); + this.add(builder); + } + + /// + /// Modifies the ambient light level, with RGB values from 0 to 255. Note that it works by removing colors from the existing light ambience, so ambientLight 1 80 80 would reduce green and blue and leave the light with a reddish hue. + /// + /// + public virtual void setAmbientLight(Color color) + { + this.setAmbientLight(color.R, color.G, color.B); + } } From 381c13f67f14a2e57e9d9fd96f713d6c83e68fb4 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 15:12:46 -0800 Subject: [PATCH 24/52] Added more comamnds for events. --- .../Framework/Events/EventHelper.cs | 354 ++++++++++++++++++ 1 file changed, 354 insertions(+) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index fc1c6715..efe5afc0 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -42,6 +42,17 @@ namespace Omegasis.HappyBirthday.Framework.Events AlwaysFront } + public enum FestivalItemType + { + Pan, + Sculpture, + Rod, + Sword, + Hero, + Joja, + SlimeEgg + } + protected StringBuilder eventData; protected StringBuilder eventPreconditionData; @@ -592,6 +603,349 @@ namespace Omegasis.HappyBirthday.Framework.Events this.setAmbientLight(color.R, color.G, color.B); } + //animalNaming + public virtual void animalNaming() + { + StringBuilder b = new StringBuilder(); + b.Append("animalNaming"); + this.add(b); + } + + /// + /// Animate a named actor, using one or more from their sprite sheet, for milliseconds per frame. indicates whether to flip the sprites along the Y axis; indicates whether to repeat the animation until stopAnimation is used. + /// + /// + /// + /// + /// In milliseconds + /// + public virtual void animate(string ActorName,bool Flip, bool Loop, int FrameDuration, List Frames) + { + StringBuilder b = new StringBuilder(); + b.Append("animate "); + b.Append(ActorName); + b.Append(" "); + b.Append(Flip); + b.Append(" "); + b.Append(Loop); + b.Append(" "); + b.Append(FrameDuration); + b.Append(" "); + for (int i = 0; i < Frames.Count; i++) + { + b.Append(Frames[i]); + if (i != Frames.Count - 1) + { + b.Append(" "); + } + } + this.add(b); + } + + /// + /// Attach an actor to the most recent temporary sprite. + /// + /// + public virtual void attachCharacterToTempSprite(string Actor) + { + StringBuilder b = new StringBuilder(); + b.Append("attachCharacterToTempSprite "); + b.Append(Actor); + this.add(b); + } + + /// + /// Awards the festival prize to the winner for the easter egg hunt and ice fishing contest. + /// + public virtual void awardFestivalPrize() + { + StringBuilder b = new StringBuilder(); + b.Append("awardFestivalPrize"); + this.add(b); + } + + /// + /// Awards the specified item to the player. Possible item types are "pan", "sculpture", "rod", "sword", "hero", "joja", and "slimeegg". + /// + /// + public virtual void awardFestivalPrize(FestivalItemType ItemType) + { + StringBuilder b = new StringBuilder(); + b.Append("awardFestivalPrize "); + + if(ItemType== FestivalItemType.Hero) + { + b.Append("hero"); + } + else if(ItemType== FestivalItemType.Joja) + { + b.Append("joja"); + } + else if(ItemType== FestivalItemType.Pan) + { + b.Append("pan"); + } + else if(ItemType== FestivalItemType.Rod) + { + b.Append("rod"); + } + else if (ItemType == FestivalItemType.Sculpture) { + b.Append("sculpture"); + } + else if(ItemType== FestivalItemType.SlimeEgg) + { + b.Append("slimeegg"); + } + else if(ItemType== FestivalItemType.Sword) + { + b.Append("sword"); + } + + this.add(b); + } + + /// + /// Causes the event to be seen by all players when triggered. + /// + public virtual void broadcastEvent() + { + StringBuilder b = new StringBuilder(); + b.Append("broadcastEvent"); + this.add(b); + } + + /// + /// Trigger question about adopting your pet. + /// + public virtual void petAdoptionQuestion() + { + StringBuilder b = new StringBuilder(); + b.Append("catQuestion"); + this.add(b); + } + + /// + /// Trigger the question for the farm cave type. This will work again later, however changing from bats to mushrooms will not remove the mushroom spawning objects. + /// + public virtual void farmCaveTypeQuestion() + { + StringBuilder b = new StringBuilder(); + b.Append("cave"); + this.add(b); + } + + /// + /// Change to another location and run the remaining event script there. + /// + /// + public virtual void changeLocation(GameLocation location) + { + StringBuilder b = new StringBuilder(); + b.Append("changeLocation "); + b.Append(location.NameOrUniqueName); + this.add(b); + } + + + /// + /// Change to another location and run the remaining event script there. + /// + /// + public virtual void changeLocation(string location) + { + StringBuilder b = new StringBuilder(); + b.Append("changeLocation "); + b.Append(location); + this.add(b); + } + + /// + /// Change the specified tile to a particular value. + /// + /// + /// + /// + /// + public virtual void changeMapTile(Layers l, int X, int Y, int TileIndex) + { + StringBuilder b = new StringBuilder(); + b.Append("changeMapTile "); + b.Append(this.getLayerName(l)); + b.Append(" "); + b.Append(X); + b.Append(" "); + b.Append(Y); + b.Append(" "); + b.Append(TileIndex); + this.add(b); + } + + /// + /// Change the NPC's portrait to be from "Portraits/_". + /// + /// + /// + public virtual void changePortrait(string npc, string Portrait) + { + StringBuilder b = new StringBuilder(); + b.Append("changePortrait "); + b.Append(npc); + b.Append(" "); + b.Append(Portrait); + this.add(b); + } + + /// + /// Change the actor's sprite to be from "Characters/_". + /// + /// + /// + public virtual void changeSprite(string npc, string Sprite) + { + StringBuilder b = new StringBuilder(); + b.Append("changeSprite "); + b.Append(npc); + b.Append(" "); + b.Append(Sprite); + this.add(b); + } + + /// + /// Change the location to a temporary one loaded from the map file specified by . The [pan] argument indicates the tile coordinates to pan to (defaults to 0, 0). + /// + /// + public virtual void changeToTemporaryMap(string Map) + { + StringBuilder b = new StringBuilder(); + b.Append("changeToTemporaryMap "); + b.Append(Map); + this.add(b); + } + /// + /// Change the location to a temporary one loaded from the map file specified by . The [pan] argument indicates the tile coordinates to pan to (defaults to 0, 0). + /// + /// + /// + public virtual void changeToTemporaryMap(string Map,Point PanPosition) + { + StringBuilder b = new StringBuilder(); + b.Append("changeToTemporaryMap "); + b.Append(Map); + b.Append(" "); + b.Append(PanPosition.X); + b.Append(" "); + b.Append(PanPosition.Y); + this.add(b); + } + + /// + /// Changes the NPC's vertical texture offset. Example: changeYSourceRectOffset Abigail 96 will offset her sprite sheet, showing her looking left instead of down. This persists for the rest of the event. This is only used in Emily's Clothing Therapy event to display the various outfits properly. + /// + /// + /// + public virtual void changeYSourceRectOffset(string NPC, int YOffset) + { + StringBuilder b = new StringBuilder(); + b.Append("changeYSourceRectOffset "); + b.Append(NPC); + b.Append(" "); + b.Append(YOffset); + this.add(b); + } + + /// + /// Acts as if the player had clicked the specified x/y coordinate and triggers any relevant action. It is commonly used to open doors from inside events, but it can be used for other purposes. If you use it on an NPC you will talk to them, and if the player is holding an item they will give that item as a gift. doAction activates objects in the main game world (their actual location outside of the event), so activating NPCs like this is very tricky, and their reaction varies depending on what the player is holding. + /// + /// + /// + public virtual void doAction(int x, int y) + { + StringBuilder b = new StringBuilder(); + b.Append("doAction "); + b.Append(x); + b.Append(" "); + b.Append(y); + this.add(b); + } + + /// + /// Make the given NPC name perform an emote, which is a little icon shown above the NPC's head. Emotes are stored in Content\TileSheets\emotes.xnb (see list of emotes). + /// + /// + /// + public virtual void emote(string Actor, int EmoteID) + { + StringBuilder b = new StringBuilder(); + b.Append("emote "); + + b.Append(Actor); + b.Append(" "); + b.Append(EmoteID); + this.add(b); + } + + /// + /// Ends the current event by fading out, then resumes the game world and places the player on the square where they entered the zone. All end parameters do this by default unless otherwise stated. + /// + public virtual void end() + { + StringBuilder b = new StringBuilder(); + b.Append("end"); + this.add(b); + } + + /// + /// Same as end, and additionally clears the existing NPC dialogue for the day and replaces it with the line(s) specified at the end of the command. Example usage: end dialogue Abigail "It was fun talking to you today.$h" + /// + /// + /// + public virtual void endDialogue(NPC npc, string Dialogue) + { + StringBuilder b = new StringBuilder(); + b.Append("end dialogue "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Dialogue); + this.add(b); + } + + /// + /// Ends the event, sets npc dialogue, and warps the player out of the location. + /// + /// + /// + public virtual void endDialogueWarpOut(NPC npc, string Dialogue) + { + StringBuilder b = new StringBuilder(); + b.Append("end dialogueWarpOut "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Dialogue); + this.add(b); + } + + /// + /// Same as end, and additionally turns the specified NPC invisible (cannot be interacted with until the next day). + /// + /// + + public virtual void endInvisible(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("end invisible "); + b.Append(npc.Name); + b.Append(" "); + this.add(b); + } + + public virtual void endInvisibleWarpOut(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("end invisibleWarpOut "); + b.Append(npc.Name); + b.Append(" "); + this.add(b); + } } } From ca61342f984cc9481b7820026612921af8f91e93 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 16:05:19 -0800 Subject: [PATCH 25/52] Even more event actions. --- .../Framework/Events/EventHelper.cs | 332 +++++++++++++++++- .../HappyBirthday/HappyBirthday.csproj | 38 ++ 2 files changed, 353 insertions(+), 17 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index efe5afc0..c1a3d95d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -66,7 +66,7 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventPreconditions = new List(); } - public EventHelper(int ID,LocationPrecondition Location ,TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) + public EventHelper(int ID, LocationPrecondition Location, TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) { this.eventData = new StringBuilder(); this.eventPreconditionData = new StringBuilder(); @@ -225,13 +225,13 @@ namespace Omegasis.HappyBirthday.Framework.Events // Validation // //~~~~~~~~~~~~~~~~// - /// - /// Checks to see if the event can occur. - /// - /// + /// + /// Checks to see if the event can occur. + /// + /// protected virtual bool canEventOccur() { - foreach(EventPrecondition eve in this.eventPreconditions) + foreach (EventPrecondition eve in this.eventPreconditions) { if (eve.meetsCondition() == false) return false; } @@ -469,7 +469,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual void addTemporaryActor_Animal(string character, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather,string AnimalName) + public virtual void addTemporaryActor_Animal(string character, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather, string AnimalName) { StringBuilder b = new StringBuilder(); b.Append("addTemporaryActor "); @@ -563,7 +563,7 @@ namespace Omegasis.HappyBirthday.Framework.Events b.Append(" "); b.Append(Loop.ToString()); b.Append(" "); - for(int i = 0; i < TilePoints.Count; i++) + for (int i = 0; i < TilePoints.Count; i++) { b.Append(TilePoints[i].X); b.Append(" "); @@ -620,7 +620,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// In milliseconds /// - public virtual void animate(string ActorName,bool Flip, bool Loop, int FrameDuration, List Frames) + public virtual void animate(string ActorName, bool Flip, bool Loop, int FrameDuration, List Frames) { StringBuilder b = new StringBuilder(); b.Append("animate "); @@ -674,30 +674,31 @@ namespace Omegasis.HappyBirthday.Framework.Events StringBuilder b = new StringBuilder(); b.Append("awardFestivalPrize "); - if(ItemType== FestivalItemType.Hero) + if (ItemType == FestivalItemType.Hero) { b.Append("hero"); } - else if(ItemType== FestivalItemType.Joja) + else if (ItemType == FestivalItemType.Joja) { b.Append("joja"); } - else if(ItemType== FestivalItemType.Pan) + else if (ItemType == FestivalItemType.Pan) { b.Append("pan"); } - else if(ItemType== FestivalItemType.Rod) + else if (ItemType == FestivalItemType.Rod) { b.Append("rod"); } - else if (ItemType == FestivalItemType.Sculpture) { + else if (ItemType == FestivalItemType.Sculpture) + { b.Append("sculpture"); } - else if(ItemType== FestivalItemType.SlimeEgg) + else if (ItemType == FestivalItemType.SlimeEgg) { b.Append("slimeegg"); } - else if(ItemType== FestivalItemType.Sword) + else if (ItemType == FestivalItemType.Sword) { b.Append("sword"); } @@ -827,7 +828,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// /// - public virtual void changeToTemporaryMap(string Map,Point PanPosition) + public virtual void changeToTemporaryMap(string Map, Point PanPosition) { StringBuilder b = new StringBuilder(); b.Append("changeToTemporaryMap "); @@ -947,5 +948,302 @@ namespace Omegasis.HappyBirthday.Framework.Events b.Append(" "); this.add(b); } + + /// + /// Ends both the event and the day (warping player to their bed, saving the game, selling everything in the shipping box, etc). + /// + + public virtual void endNewDay() + { + StringBuilder b = new StringBuilder(); + b.Append("end newDay"); + this.add(b); + } + + /// + /// Same as end, and additionally warps the player to the map coordinates specified in x y. + /// + /// + /// + public virtual void endPosition(int xTile, int yTile) + { + StringBuilder b = new StringBuilder(); + b.Append("end position"); + b.Append(xTile); + b.Append(" "); + b.Append(yTile); + this.add(b); + } + + public virtual void endWarpOut() + { + StringBuilder b = new StringBuilder(); + b.Append("end warpOut"); + this.add(b); + } + + public virtual void playerFaceDirection(FacingDirection Dir) + { + StringBuilder b = new StringBuilder(); + b.Append("faceDirection farmer "); + b.Append(this.getFacingDirectionNumber(Dir).ToString()); + b.Append(" "); + b.Append(true); + this.add(b); + } + + public virtual void npcFaceDirection(NPC NPC, FacingDirection Dir) + { + StringBuilder b = new StringBuilder(); + b.Append("faceDirection "); + b.Append(NPC.Name); + b.Append(" "); + b.Append(this.getFacingDirectionNumber(Dir).ToString()); + b.Append(" "); + b.Append(true); + this.add(b); + } + + /// + /// Fades out the screen. + /// + public virtual void fadeOut() + { + StringBuilder b = new StringBuilder(); + b.Append("fade true"); + this.add(b); + } + + /// + /// Makes the farmer eat an object. + /// + /// + public virtual void farmerEatObject(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("farmerEat "); + b.Append(ID); + this.add(b); + } + + //TODO: Support event forking. + + /// + /// Add the given number of friendship points with the named NPC. (There are 250 points per heart.) + /// + /// + /// + public virtual void addFriendship(NPC NPC, int Amount) + { + StringBuilder b = new StringBuilder(); + b.Append("friendship "); + b.Append(NPC.Name); + b.Append(" "); + b.Append(Amount); + this.add(b); + } + + /// + /// Fade to black at a particular speed (default 0.007). If no speed is specified, the event will continue immediately; otherwise, it will continue after the fade is finished. The fade effect disappears when this command is done; to avoid that, use the viewport command to move the camera off-screen. + /// + /// + public virtual void globalFade(double speed) + { + StringBuilder b = new StringBuilder(); + b.Append("globalFade "); + b.Append(speed); + this.add(b); + } + /// + /// Fade to clear (unfade?) at a particular speed (default 0.007). If no speed is specified, the event will continue immediately; otherwise, it will continue after the fade is finished. + /// + /// + public virtual void globalFadeToClear(double speed) + { + StringBuilder b = new StringBuilder(); + b.Append("globalFadeToClear "); + b.Append(speed); + this.add(b); + } + + /// + /// Make the screen glow once, fading into and out of the values over the course of a second. If is true it will fade to and hold that color until stopGlowing is used. + /// + /// + /// + public virtual void glow(Color color, bool Hold) + { + StringBuilder b = new StringBuilder(); + b.Append("glow "); + b.Append(color.R); + b.Append(" "); + b.Append(color.G); + b.Append(" "); + b.Append(color.B); + b.Append(" "); + b.Append(Hold); + this.add(b); + } + + /// + /// Stops npc movement + /// + public virtual void stopNPCMovement() + { + StringBuilder b = new StringBuilder(); + b.Append("halt"); + this.add(b); + } + /// + /// Stops npc movement. + /// + public virtual void halt() + { + this.stopNPCMovement(); + } + + /// + /// Make a the named NPC jump. The default intensity is 8. + /// + /// + /// + public virtual void actorJump(string ActorName, int Intensity=8) + { + StringBuilder b = new StringBuilder(); + b.Append("jump "); + b.Append(Intensity); + this.add(b); + } + + /// + /// Queue a letter to be received tomorrow (see Content\Data\mail.xnb for available mail). + /// + /// + public virtual void addMailForTomorrow(string LetterID) + { + StringBuilder b = new StringBuilder(); + b.Append("mail "); + b.Append(LetterID); + this.add(b); + } + + /// + /// Show a dialogue box (no speaker). See dialogue format for the format. + /// + /// + public virtual void showMessage(string Message) + { + StringBuilder b = new StringBuilder(); + b.Append("message "); + b.Append('"'); + b.Append(Message); + b.Append('"'); + this.add(b); + } + + /// + /// Make a named NPC move by the given tile offset from their current position (along one axis only), and face the given direction when they're done. To move along multiple axes, you must specify multiple move commands. By default the event pauses while a move command is occurring, but if is set to true the movement is asynchronous and will run simultaneously with other event commands. + /// + /// + /// + /// + /// + /// + public virtual void moveNPC(NPC npc, int xOffset, int yOffset, FacingDirection Dir, bool Continue) + { + StringBuilder b = new StringBuilder(); + b.Append("move "); + b.Append(npc.Name); + b.Append(" "); + b.Append(xOffset); + b.Append(" "); + b.Append(yOffset); + b.Append(" "); + b.Append(this.getFacingDirectionNumber(Dir)); + b.Append(" "); + b.Append(Continue); + this.add(b); + } + + /// + /// Pause the game for the given number of milliseconds. + /// + /// + public virtual void pauseGame(int Milliseconds) + { + StringBuilder b = new StringBuilder(); + b.Append("pause "); + b.Append(Milliseconds); + this.add(b); + } + + /// + /// Play the specified music track ID. If the track is 'samBand', the track played will change depend on certain dialogue answers (76-79). + /// + /// + public virtual void playMusic(string id) + { + StringBuilder b = new StringBuilder(); + b.Append("playMusic "); + b.Append(id); + this.add(b); + } + + /// + /// Play a given sound ID from the game's sound bank. + /// + /// + public virtual void playSound(string id) + { + StringBuilder b = new StringBuilder(); + b.Append("playSound "); + b.Append(id); + this.add(b); + } + + /// + /// Give the player control back. + /// + public virtual void givePlayerControl() + { + StringBuilder b = new StringBuilder(); + b.Append("playSound "); + this.add(b); + } + + /// + /// Offset the position of the named NPC by the given number of pixels. This happens instantly, with no walking animation. + /// + /// + /// + /// + public virtual void positionOffset(string ActorName,int PixelsX, int PixelsY) + { + StringBuilder b = new StringBuilder(); + b.Append("positionOffset "); + b.Append(PixelsX); + b.Append(" "); + b.Append(PixelsY); + this.add(b); + } + + /// + /// Show a dialogue box with some answers and an optional question. When the player chooses an answer, the event script continues with no other effect. + /// + /// + /// + /// + public virtual void questionNoFork(string Question, string Answer1, string Answer2) + { + StringBuilder b = new StringBuilder(); + b.Append("question null "); + b.Append(Question); + b.Append("#"); + b.Append(Answer1); + b.Append("#"); + b.Append(Answer2); + this.add(b); + } + } } diff --git a/GeneralMods/HappyBirthday/HappyBirthday.csproj b/GeneralMods/HappyBirthday/HappyBirthday.csproj index e3b15962..2471572f 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.csproj +++ b/GeneralMods/HappyBirthday/HappyBirthday.csproj @@ -83,6 +83,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 267ed77092207d56b4f4318e334963f979e8fedc Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 16:50:23 -0800 Subject: [PATCH 26/52] Finished adding in what seemed to be important events. --- .../Framework/Events/EventHelper.cs | 425 ++++++++++++++++++ 1 file changed, 425 insertions(+) diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index c1a3d95d..9ca4570e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -11,8 +11,12 @@ using StardewValley; namespace Omegasis.HappyBirthday.Framework.Events { /// + ///TODO: Figure out forked dialogue + /// /// Helps in creating events based in code for stardew valley. /// https://stardewvalleywiki.com/Modding:Event_data + /// + /// A lot of the function comments were taken from the SDV wiki. /// public class EventHelper { @@ -1245,5 +1249,426 @@ namespace Omegasis.HappyBirthday.Framework.Events this.add(b); } + /// + /// Remove the first of an object from a player's inventory. + /// + /// + public virtual void removeItem(int ParentSheetIndex) { + + StringBuilder b = new StringBuilder(); + b.Append("removeItem "); + b.Append(ParentSheetIndex); + this.add(b); + } + /// + /// + /// + /// + /// + public virtual void removeObject(int TileX, int TileY) + { + StringBuilder b = new StringBuilder(); + b.Append("removeObject "); + b.Append(TileX); + b.Append(" "); + b.Append(TileY); + this.add(b); + } + + /// + /// Remove the specified quest from the quest log. + /// + /// + public virtual void removeQuest(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("removeQuest "); + b.Append(ID); + this.add(b); + } + + /// + /// Remove the temporary sprite at a position. + /// + /// + /// + public virtual void removeSprite(int XTile, int YTile) + { + StringBuilder b = new StringBuilder(); + b.Append("removeSprite "); + b.Append(" "); + b.Append(XTile); + b.Append(" "); + b.Append(YTile); + this.add(b); + } + + /// + /// Remove all temporary sprites. + /// + public virtual void removeTemporarySprites() + { + StringBuilder b = new StringBuilder(); + b.Append("removeTemporarySprites"); + this.add(b); + } + + /// + /// Flashes the screen white for an instant. An alpha value from 0 to 1 adjusts the brightness, and values from 1 and out flashes pure white for x seconds. + /// + /// + public virtual void screenFlash(float Alpha) + { + StringBuilder b = new StringBuilder(); + b.Append("screenFlash "); + b.Append(Alpha); + this.add(b); + } + + public virtual void setPlayerRunning() + { + StringBuilder b = new StringBuilder(); + b.Append("setRunning"); + this.add(b); + } + + public virtual void shakeNPC(NPC npc,int Milliseconds) + { + StringBuilder b = new StringBuilder(); + b.Append("shake "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Milliseconds); + this.add(b); + } + + public virtual void shakeFarmer(int Milliseconds) + { + StringBuilder b = new StringBuilder(); + b.Append("shake "); + b.Append("farmer"); + b.Append(" "); + b.Append(Milliseconds); + this.add(b); + } + + /// + /// Set the named NPC's current frame in their Content\Characters\*.xnb spritesheet. Note that setting the farmer's sprite only changes parts of the sprite (some times arms, some times arms and legs and torso but not the head, etc). To rotate the whole sprite, use faceDirection farmer <0/1/2/3> first before modifying the sprite with showFrame. Frame ID starts from 0. If farmer is the one whose frame is being set, "farmer" can be eliminated, i.e. both showFrame farmer and showFrame would work. + /// + /// + /// + public virtual void showNPCFrame(NPC npc, int FrameIndex) + { + StringBuilder b = new StringBuilder(); + b.Append("showFrame "); + b.Append(npc.Name); + b.Append(" "); + b.Append(FrameIndex); + this.add(b); + } + + /// + /// Shows the given frame for the farmer. Forces the farmer to rotate first as specified by the wiki, + /// + /// + /// + public virtual void showFrameFarmer(FacingDirection Direction,int FrameIndex) + { + this.playerFaceDirection(Direction); + StringBuilder b = new StringBuilder(); + b.Append("showFrame "); + b.Append(FrameIndex); + this.add(b); + } + + //Skippable is enabled by default. + + + /// + /// Show dialogue text from a named NPC; see dialogue format. + /// + /// + /// + public virtual void speak(NPC npc, string Message) + { + StringBuilder b = new StringBuilder(); + b.Append("speak "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Message); + this.add(b); + } + + /// + /// Make the player start jittering. + /// + public virtual void playerJitter() + { + StringBuilder b = new StringBuilder(); + b.Append("startJittering"); + this.add(b); + } + + /// + /// Stop movement from advancedMove. + /// + public virtual void stopAdvancedMoves() + { + StringBuilder b = new StringBuilder(); + b.Append("stopAdvancedMoves"); + this.add(b); + } + + /// + /// Stop the farmer's current animation. + /// + public virtual void stopFarmerAnimation() + { + StringBuilder b = new StringBuilder(); + b.Append("stopAnimation farmer"); + this.add(b); + } + + /// + /// Stop the named NPC's current animation. Not applicable to the farmer. + /// + /// + /// + public virtual void stopNPCAnimation(NPC npc, int EndFrame) + { + StringBuilder b = new StringBuilder(); + b.Append("stopAnimation "); + b.Append(npc.Name); + b.Append(" "); + b.Append(EndFrame); + this.add(b); + } + + /// + /// Make the screen stop glowing. + /// + public virtual void stopGlowing() + { + StringBuilder b = new StringBuilder(); + b.Append("stopGlowing"); + this.add(b); + } + + /// + /// Make the player stop jittering. + /// + public virtual void stopJittering() + { + StringBuilder b = new StringBuilder(); + b.Append("stopJittering"); + this.add(b); + } + + /// + /// Stop any currently playing music. + /// + public virtual void stopMusic() + { + StringBuilder b = new StringBuilder(); + b.Append("stopMusic"); + this.add(b); + } + + /// + /// Make the farmer stop running. + /// + public virtual void stopRunning() + { + StringBuilder b = new StringBuilder(); + b.Append("stopRunning"); + this.add(b); + } + + /// + /// Make the farmer stop swimming. + /// + public virtual void stopFarmerSwimming() + { + StringBuilder b = new StringBuilder(); + b.Append("stopSwimming farmer"); + this.add(b); + } + + /// + /// Make the npc stop swimming. + /// + public virtual void stopNPCSwimming(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("stopSwimming "); + b.Append(npc.Name); + this.add(b); + } + + /// + /// Make the farmer start swimming. + /// + public virtual void startFarmerSwimming() + { + StringBuilder b = new StringBuilder(); + b.Append("swimming farmer"); + this.add(b); + } + + + /// + /// Make the npc start swimming. + /// + /// + public virtual void startNPCSwimming(NPC npc) + { + StringBuilder b = new StringBuilder(); + b.Append("swimming "); + b.Append(npc.Name); + this.add(b); + } + + /// + /// Changes the current event (ie. event commands) to another event in the same location. + /// + /// + public virtual void switchEvent(int ID) + { + StringBuilder b = new StringBuilder(); + b.Append("switchEvent "); + b.Append(ID); + this.add(b); + } + + + /// + /// Create a temporary sprite with the given parameters. + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void temporarySprite(int XPos, int YPos, int Index, int AnimationLength, int AnimationInterval, bool Looped, int LoopCount) + { + StringBuilder b = new StringBuilder(); + b.Append("temporarySprite "); + b.Append(XPos); + b.Append(" "); + b.Append(YPos); + b.Append(" "); + b.Append(Index); + b.Append(" "); + b.Append(AnimationLength); + b.Append(" "); + b.Append(AnimationInterval); + b.Append(" "); + b.Append(Looped); + b.Append(" "); + b.Append(LoopCount); + this.add(b); + } + + /// + /// Show a small text bubble over the named NPC's head with the given text; see dialogue format. + /// + /// + /// + public virtual void showSpeechBubble(NPC npc, string Message) + { + StringBuilder b = new StringBuilder(); + b.Append("textAboveHead "); + b.Append(npc.Name); + b.Append(" "); + b.Append(Message); + this.add(b); + } + + /// + /// Pan the the camera in the direction (and with the velocity) defined by x/y for the given duration in milliseconds. Example: "viewport move 2 -1 5000" moves the camera 2 pixels right and 1 pixel up for 5 seconds. + /// + /// + /// + /// + public virtual void panViewport(int XPosition, int YPosition, int Milliseconds) + { + StringBuilder b = new StringBuilder(); + b.Append("viewport move "); + b.Append(XPosition); + b.Append(" "); + b.Append(YPosition); + this.add(b); + } + /// + /// Instantly reposition the camera to center on the given X, Y tile position. TODO: explain other parameters. + /// + /// + /// + public virtual void setViewportPosition(int XPosition, int YPosition) + { + StringBuilder b = new StringBuilder(); + b.Append("viewport "); + b.Append(XPosition); + b.Append(" "); + b.Append(YPosition); + this.add(b); + } + + /// + /// Wait for other players (vanilla MP). + /// + public virtual void waitForAllPlayers() + { + StringBuilder b = new StringBuilder(); + b.Append("waitForOtherPlayers"); + this.add(b); + } + + /// + /// Warp the named NPC to a position to the given X, Y tile coordinate. This can be used to warp characters off-screen. + /// + /// + /// + public virtual void warpPlayer(int x, int y) + { + StringBuilder b = new StringBuilder(); + b.Append("warp farmer "); + b.Append(x); + b.Append(" "); + b.Append(y); + this.add(b); + } + + /// + /// Warp the named NPC to a position to the given X, Y tile coordinate. This can be used to warp characters off-screen. + /// + /// + /// + /// + public virtual void warpActor(string ActorName,int x, int y) + { + StringBuilder b = new StringBuilder(); + b.Append("warp "); + b.Append(ActorName); + b.Append(" "); + b.Append(x); + b.Append(" "); + b.Append(y); + this.add(b); + } + + public virtual void warpNPC(NPC NPC, int x, int y) + { + StringBuilder b = new StringBuilder(); + b.Append("warp "); + b.Append(NPC.Name); + b.Append(" "); + b.Append(x); + b.Append(" "); + b.Append(y); + this.add(b); + } } } From f5db7501f4036a9946b4263eb2a0ccf17ac54021 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 18:14:45 -0800 Subject: [PATCH 27/52] Got the set up for events! Now to make them!. --- GeneralMods/HappyBirthday/BirthdayEvents.cs | 26 ---------- .../HappyBirthday/Framework/BirthdayEvents.cs | 31 ++++++++++++ .../HappyBirthday/Framework/BirthdayMenu.cs | 2 +- .../Framework/Events/EventHelper.cs | 24 ++++++---- .../Framework/Events/EventManager.cs | 48 +++++++++++++++++++ .../Framework/Events/EventStartData.cs | 3 +- .../Framework/TranslationInfo.cs | 2 +- GeneralMods/HappyBirthday/HappyBirthday.cs | 34 +++++++++---- .../HappyBirthday/HappyBirthday.csproj | 3 +- 9 files changed, 125 insertions(+), 48 deletions(-) delete mode 100644 GeneralMods/HappyBirthday/BirthdayEvents.cs create mode 100644 GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs create mode 100644 GeneralMods/HappyBirthday/Framework/Events/EventManager.cs diff --git a/GeneralMods/HappyBirthday/BirthdayEvents.cs b/GeneralMods/HappyBirthday/BirthdayEvents.cs deleted file mode 100644 index 8da384ae..00000000 --- a/GeneralMods/HappyBirthday/BirthdayEvents.cs +++ /dev/null @@ -1,26 +0,0 @@ -using StardewValley; - -namespace Omegasis.HappyBirthday -{ - // TODO: Make all the events - // Resources:https://stardewvalleywiki.com/Modding:Event_data - public class BirthdayEvents - { - public Event communityCenterJunimoEvent; - public Event marriedNoKidsEvent; - public Event surpriseBirthdayPartyEvent; - public Event marriedWithOneKidEvent; - public Event marriedWithTwoKidsEvent; - - public BirthdayEvents() - { - this.initializeEvents(); - } - - public void initializeEvents() - { - Event e = new Event("", -1, Game1.player); - Game1.player.currentLocation.currentEvent = new Event(); - } - } -} diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs new file mode 100644 index 00000000..bc68afdd --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Omegasis.HappyBirthday.Framework.Events; +using Omegasis.HappyBirthday.Framework.Events.Preconditions; +using Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific; +using Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework +{ + public class BirthdayEvents + { + + public static EventHelper CommunityCenterBirthday() + { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); + conditions.Add(new TimePrecondition(600, 2600)); + EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 10, 10, new EventStartData.FarmerData(10, 10, EventHelper.FacingDirection.Up),new List())); + + e.showMessage("Community center birthday here."); + e.end(); + + return e; + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs index 6f226e21..c9931ecf 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs @@ -45,7 +45,7 @@ namespace Omegasis.HappyBirthday.Framework public BirthdayMenu(string season, int day, Action onChanged) : base(Game1.viewport.Width / 2 - (632 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2 - Game1.tileSize, 632 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2 + Game1.tileSize) { - this.BirthdaySeason = season; + this.BirthdaySeason = HappyBirthday.Config.translationInfo.getTranslatedString(season); this.BirthdayDay = day; this.OnChanged = onChanged; this.SetUpPositions(); diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 9ca4570e..1b0440e8 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -63,6 +63,8 @@ namespace Omegasis.HappyBirthday.Framework.Events protected List eventPreconditions; protected int eventID; + public string eventName; + public EventHelper() { this.eventData = new StringBuilder(); @@ -70,8 +72,9 @@ namespace Omegasis.HappyBirthday.Framework.Events this.eventPreconditions = new List(); } - public EventHelper(int ID, LocationPrecondition Location, TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) + public EventHelper(string EventName,int ID, LocationPrecondition Location, TimePrecondition Time, EventDayExclusionPrecondition NotTheseDays, EventStartData StartData) { + this.eventName = EventName; this.eventData = new StringBuilder(); this.eventPreconditionData = new StringBuilder(); this.eventPreconditions = new List(); @@ -82,8 +85,10 @@ namespace Omegasis.HappyBirthday.Framework.Events this.add(StartData.ToString()); } - public EventHelper(List Conditions, EventStartData StartData) + public EventHelper(string EventName,int ID,List Conditions, EventStartData StartData) { + this.eventName = EventName; + this.eventID = ID; this.eventData = new StringBuilder(); this.eventPreconditions = new List(); this.eventPreconditionData = new StringBuilder(); @@ -176,9 +181,9 @@ namespace Omegasis.HappyBirthday.Framework.Events return s.Substring(0, 4); } - protected virtual string getEventID() + public virtual int getEventID() { - return this.getUniqueEventStartID() + this.eventID.ToString(); + return Convert.ToInt32(this.getUniqueEventStartID() + this.eventID.ToString()); } /// @@ -203,7 +208,7 @@ namespace Omegasis.HappyBirthday.Framework.Events else return true; } - protected virtual string getEventString() + public virtual string getEventString() { return this.eventData.ToString(); } @@ -216,7 +221,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// Checks to see if all of the event preconditions have been met and starts the event if so. /// - protected virtual void startEventAtLocationifPossible() + public virtual void startEventAtLocationifPossible() { if (this.canEventOccur()) { @@ -224,6 +229,7 @@ namespace Omegasis.HappyBirthday.Framework.Events Game1.player.currentLocation.startEvent(this.getEvent()); } } + //~~~~~~~~~~~~~~~~// // Validation // @@ -233,7 +239,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Checks to see if the event can occur. /// /// - protected virtual bool canEventOccur() + public virtual bool canEventOccur() { foreach (EventPrecondition eve in this.eventPreconditions) { @@ -1139,9 +1145,9 @@ namespace Omegasis.HappyBirthday.Framework.Events { StringBuilder b = new StringBuilder(); b.Append("message "); - b.Append('"'); + b.Append("\\\""); b.Append(Message); - b.Append('"'); + b.Append("\""); this.add(b); } diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs b/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs new file mode 100644 index 00000000..fe26e0de --- /dev/null +++ b/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Omegasis.HappyBirthday.Framework.Events +{ + public class EventManager + { + + + public Dictionary events; + + + public EventManager() + { + this.events = new Dictionary(); + } + + public void addEvent(EventHelper Event) + { + this.events.Add(Event.eventName, Event); + } + + public EventHelper getEvent(string Name) + { + if (this.events.ContainsKey(Name)) + { + return this.events[Name]; + } + else + { + return null; + } + } + + + public void clearEventFromFarmer(string EventName) + { + + this.events.TryGetValue(EventName, out EventHelper e); + if (e == null) return; + Game1.player.eventsSeen.Remove(e.getEventID()); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs b/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs index df16c167..285e73b2 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs @@ -118,7 +118,8 @@ namespace Omegasis.HappyBirthday.Framework.Events } this.add(CameraTileX.ToString()); - this.add(CameraTileY.ToString()); + this.builder.Append(" "); + this.builder.Append(CameraTileY.ToString()); StringBuilder npcData = new StringBuilder(); diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index 792c51a0..74c6f537 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -113,7 +113,7 @@ namespace Omegasis.HappyBirthday.Framework { return this.getFileExtensionForFileType(File); } - return this.TranslationFileExtensions[language] + this.getFileExtensionForFileType(File); + return "."+this.TranslationFileExtensions[language] + this.getFileExtensionForFileType(File); } catch (Exception err) { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 6912666c..e68ad0bc 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -5,6 +5,7 @@ using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Omegasis.HappyBirthday.Framework; +using Omegasis.HappyBirthday.Framework.Events; using StardewModdingAPI; using StardewModdingAPI.Events; using StardewValley; @@ -69,6 +70,8 @@ namespace Omegasis.HappyBirthday private NPC lastSpeaker; + private EventManager eventManager; + /********* ** Public methods *********/ @@ -91,11 +94,28 @@ namespace Omegasis.HappyBirthday helper.Events.Multiplayer.ModMessageReceived += this.Multiplayer_ModMessageReceived; helper.Events.Multiplayer.PeerDisconnected += this.Multiplayer_PeerDisconnected; helper.Events.GameLoop.GameLaunched += this.GameLoop_GameLaunched; + helper.Events.Player.Warped += this.Player_Warped; ModHelper = this.Helper; ModMonitor = this.Monitor; this.othersBirthdays = new Dictionary(); - + + this.eventManager = new EventManager(); + + } + + private void Player_Warped(object sender, WarpedEventArgs e) + { + if (e.NewLocation == Game1.getLocationFromName("CommunityCenter")) + { + EventHelper eve=this.eventManager.getEvent("CommunityCenterBirthday"); + this.Monitor.Log("Birthday event can occur: " + eve.canEventOccur(), LogLevel.Info); + + + this.Monitor.Log("Birthday event info: " + eve.getEventString(), LogLevel.Info); + + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -103,6 +123,7 @@ namespace Omegasis.HappyBirthday this.messages = new BirthdayMessages(); this.giftManager = new GiftManager(); this.isDailyQuestBoard = false; + } /// Get whether this instance can edit the given asset. @@ -528,20 +549,15 @@ namespace Omegasis.HappyBirthday this.MigrateLegacyData(); this.PlayerData = this.Helper.Data.ReadJsonFile(this.DataFilePath) ?? new PlayerData(); - ; + if (PlayerBirthdayData != null) { ModMonitor.Log("Send all birthday information from " + Game1.player.Name); MultiplayerSupport.SendBirthdayInfoToOtherPlayers(); } - //this.SeenEvent = false; - //this.Dialogue = new Dictionary(); - - //Game1.player.addItemToInventoryBool(new StardewValley.Object(388, 999)); - //Game1.player.addItemToInventoryBool(new StardewValley.Object(390, 999)); - //Game1.player.Money = 999999; + this.eventManager.addEvent(BirthdayEvents.CommunityCenterBirthday()); } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -702,7 +718,7 @@ namespace Omegasis.HappyBirthday { return this.PlayerData.BirthdayDay == Game1.dayOfMonth - && this.PlayerData.BirthdaySeason .Equals(HappyBirthday.Config.translationInfo.getTranslatedString(Game1.currentSeason)); + && this.PlayerData.BirthdaySeason.Equals(Game1.currentSeason); } /// Migrate the legacy settings for the current player. diff --git a/GeneralMods/HappyBirthday/HappyBirthday.csproj b/GeneralMods/HappyBirthday/HappyBirthday.csproj index 2471572f..e9fbded4 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.csproj +++ b/GeneralMods/HappyBirthday/HappyBirthday.csproj @@ -80,9 +80,10 @@ Properties\GlobalAssemblyInfo.cs - + + From 7c8d0bc6bde5c542b62c2d98c4cb202ab3acd7c7 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 22:08:00 -0800 Subject: [PATCH 28/52] Added in fade commands for event helper. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 3 ++- .../Framework/Events/EventHelper.cs | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index bc68afdd..d16ff1d5 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -21,7 +21,8 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 10, 10, new EventStartData.FarmerData(10, 10, EventHelper.FacingDirection.Up),new List())); - + e.setViewportPosition(10, 10); + e.globalFadeIn(); e.showMessage("Community center birthday here."); e.end(); diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 1b0440e8..584b280c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -1024,6 +1024,13 @@ namespace Omegasis.HappyBirthday.Framework.Events this.add(b); } + public virtual void fadeIn() + { + StringBuilder b = new StringBuilder(); + b.Append("fade"); + this.add(b); + } + /// /// Makes the farmer eat an object. /// @@ -1057,13 +1064,21 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Fade to black at a particular speed (default 0.007). If no speed is specified, the event will continue immediately; otherwise, it will continue after the fade is finished. The fade effect disappears when this command is done; to avoid that, use the viewport command to move the camera off-screen. /// /// - public virtual void globalFade(double speed) + public virtual void globalFadeOut(double speed=0.007) { StringBuilder b = new StringBuilder(); b.Append("globalFade "); b.Append(speed); this.add(b); } + + public virtual void globalFadeIn(double speed=0.007) + { + StringBuilder b = new StringBuilder(); + b.Append("globalFadeToClear "); + b.Append(speed); + this.add(b); + } /// /// Fade to clear (unfade?) at a particular speed (default 0.007). If no speed is specified, the event will continue immediately; otherwise, it will continue after the fade is finished. /// @@ -1619,6 +1634,8 @@ namespace Omegasis.HappyBirthday.Framework.Events b.Append(XPosition); b.Append(" "); b.Append(YPosition); + b.Append(" "); + b.Append("true"); this.add(b); } From f11ce9bb2fe4ed2dcf13ba062cddc5f9a20530e8 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Wed, 4 Dec 2019 22:36:53 -0800 Subject: [PATCH 29/52] Made some functions that are a little easier to use for npc and farmer movement. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 4 +- .../Framework/Events/EventHelper.cs | 59 ++++++++++++++++++- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index d16ff1d5..1637a1de 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -20,9 +20,9 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); - EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 10, 10, new EventStartData.FarmerData(10, 10, EventHelper.FacingDirection.Up),new List())); - e.setViewportPosition(10, 10); + EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 22, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); e.globalFadeIn(); + e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); e.showMessage("Community center birthday here."); e.end(); diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs index 584b280c..1a36f5bd 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; using Microsoft.Xna.Framework; using Omegasis.HappyBirthday.Framework.Events.Preconditions; using Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific; @@ -1190,6 +1188,63 @@ namespace Omegasis.HappyBirthday.Framework.Events this.add(b); } + public virtual void moveNPCUp(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection,bool EventDoesntPause) + { + this.moveNPC(npc, 0, -TileAmount, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveNPCDown(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveNPC(npc, 0, TileAmount, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveNPCLeft(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveNPC(npc, TileAmount,0,FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveNPCRight(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveNPC(npc,-TileAmount,0,FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveFarmer(int xOffset, int yOffset, FacingDirection Dir, bool Continue) + { + StringBuilder b = new StringBuilder(); + b.Append("move "); + b.Append("farmer"); + b.Append(" "); + b.Append(xOffset); + b.Append(" "); + b.Append(yOffset); + b.Append(" "); + b.Append(this.getFacingDirectionNumber(Dir)); + b.Append(" "); + b.Append(Continue); + this.add(b); + } + + public virtual void moveFarmerUp(int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveFarmer(0, -TileAmount, FinishingFacingDirection, EventDoesntPause); + } + public virtual void moveFarmerDown(int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveFarmer(0, TileAmount, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveFarmerLeft(int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveFarmer(-TileAmount,0,FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveFarmerRight(int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveFarmer(TileAmount, 0,FinishingFacingDirection, EventDoesntPause); + } + + + /// /// Pause the game for the given number of milliseconds. /// From 1b1b6d227a7f19c3130c5e0012d627849ab5b869 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Thu, 5 Dec 2019 01:25:46 -0800 Subject: [PATCH 30/52] Moved events from HappyBirthday to StardustCore. Wrote extension system for flexibility. Added way to add in custom commands for events. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 13 +- .../FarmerBirthdayPrecondition.cs | 4 +- .../SpouseBirthdayPrecondition.cs | 4 +- .../Framework/Events/EventManager.cs | 48 ------ GeneralMods/HappyBirthday/HappyBirthday.cs | 17 ++- .../HappyBirthday/HappyBirthday.csproj | 44 +----- GeneralMods/HappyBirthday/manifest.json | 5 +- GeneralMods/StardewMods.sln | 3 + .../StardustCore/Events/EventExtensions.cs | 37 +++++ .../Events/EventHelper.cs | 41 +++-- .../Events/EventHelperExtensions.cs | 76 ++++++++++ .../StardustCore/Events/EventManager.cs | 140 ++++++++++++++++++ .../Events/EventStartData.cs | 15 +- .../StardustCore/Events/ExtraEventActions.cs | 68 +++++++++ .../Events/Preconditions/EventPrecondition.cs | 2 +- .../Preconditions/LocationPrecondition.cs | 2 +- .../Preconditions/MISC/ChanceToOccur.cs | 3 +- .../Preconditions/MISC/EventNotInProgress.cs | 2 +- .../MISC/JojaWarehouseCompleted.cs | 2 +- .../Preconditions/NPCSpecific/DatingNPC.cs | 2 +- .../NPCSpecific/FriendshipPointsRequired.cs | 2 +- .../NPCSpecific/HeartsRequired.cs | 2 +- .../NPCSpecific/NPCInThisLocation.cs | 2 +- .../Preconditions/NPCSpecific/NotInvisible.cs | 2 +- .../Preconditions/NPCSpecific/NotMarriedTo.cs | 2 +- .../PlayerSpecific/AnsweredDialogueOptions.cs | 2 +- .../PlayerSpecific/CurrentMoney.cs | 2 +- .../PlayerSpecific/DaysPlayedFor.cs | 2 +- .../PlayerSpecific/EmptyInventorySlots.cs | 2 +- .../Preconditions/PlayerSpecific/Gender.cs | 2 +- .../Preconditions/PlayerSpecific/HasItem.cs | 2 +- .../PlayerSpecific/HasNotRecievedLetter.cs | 2 +- .../PlayerSpecific/HasRecievedLetter.cs | 2 +- .../PlayerSpecific/MineBottomHit.cs | 2 +- .../PlayerSpecific/PetPreference.cs | 2 +- .../PlayerSpecific/PlayerOnThisTile.cs | 2 +- .../PlayerSpecific/SeenEvents.cs | 2 +- .../PlayerSpecific/SeenSecretNote.cs | 2 +- .../PlayerSpecific/ShippedItems.cs | 2 +- .../PlayerSpecific/TotalMoneyEarned.cs | 2 +- .../PlayerSpecific/UnseenEvents.cs | 2 +- .../TimeSpecific/DayOfTheMonth.cs | 2 +- .../EventDayExclusionPrecondition.cs | 2 +- .../TimeSpecific/NotAFestivalDay.cs | 2 +- .../TimeSpecific/SeasonExclusion.cs | 2 +- .../TimeSpecific/TimePrecondition.cs | 2 +- .../TimeSpecific/WeatherPrecondition.cs | 2 +- .../TimeSpecific/YearPrecondition.cs | 2 +- GeneralMods/StardustCore/StardustCore.csproj | 40 +++++ 49 files changed, 474 insertions(+), 150 deletions(-) rename GeneralMods/HappyBirthday/Framework/{Events/SpecialPreconditions => EventPreconditions}/FarmerBirthdayPrecondition.cs (78%) rename GeneralMods/HappyBirthday/Framework/{Events/SpecialPreconditions => EventPreconditions}/SpouseBirthdayPrecondition.cs (84%) delete mode 100644 GeneralMods/HappyBirthday/Framework/Events/EventManager.cs create mode 100644 GeneralMods/StardustCore/Events/EventExtensions.cs rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/EventHelper.cs (98%) create mode 100644 GeneralMods/StardustCore/Events/EventHelperExtensions.cs create mode 100644 GeneralMods/StardustCore/Events/EventManager.cs rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/EventStartData.cs (91%) create mode 100644 GeneralMods/StardustCore/Events/ExtraEventActions.cs rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/EventPrecondition.cs (80%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/LocationPrecondition.cs (94%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/MISC/ChanceToOccur.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/MISC/EventNotInProgress.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/MISC/JojaWarehouseCompleted.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/DatingNPC.cs (92%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs (94%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/HeartsRequired.cs (94%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/NotInvisible.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/NPCSpecific/NotMarriedTo.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/CurrentMoney.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/Gender.cs (94%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/HasItem.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/MineBottomHit.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/PetPreference.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/SeenEvents.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/ShippedItems.cs (96%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/PlayerSpecific/UnseenEvents.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs (94%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs (97%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs (90%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/SeasonExclusion.cs (97%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/TimePrecondition.cs (93%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs (95%) rename GeneralMods/{HappyBirthday/Framework => StardustCore}/Events/Preconditions/TimeSpecific/YearPrecondition.cs (95%) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 1637a1de..b09086b1 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Omegasis.HappyBirthday.Framework.Events; -using Omegasis.HappyBirthday.Framework.Events.Preconditions; -using Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific; -using Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions; +using Omegasis.HappyBirthday.Framework.EventPreconditions; +using StardustCore.Events; +using StardustCore.Events.Preconditions; +using StardustCore.Events.Preconditions.TimeSpecific; using StardewValley; namespace Omegasis.HappyBirthday.Framework @@ -20,10 +20,13 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); - EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 22, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); + EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); e.globalFadeIn(); e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); + e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6); + e.addObjectToPlayersInventory(64, 22,true); e.showMessage("Community center birthday here."); + e.end(); return e; diff --git a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs b/GeneralMods/HappyBirthday/Framework/EventPreconditions/FarmerBirthdayPrecondition.cs similarity index 78% rename from GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs rename to GeneralMods/HappyBirthday/Framework/EventPreconditions/FarmerBirthdayPrecondition.cs index 165db6c8..6600ebcf 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/FarmerBirthdayPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/EventPreconditions/FarmerBirthdayPrecondition.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Omegasis.HappyBirthday.Framework.Events.Preconditions; +using StardustCore.Events.Preconditions; -namespace Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions +namespace Omegasis.HappyBirthday.Framework.EventPreconditions { public class FarmerBirthdayPrecondition:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs b/GeneralMods/HappyBirthday/Framework/EventPreconditions/SpouseBirthdayPrecondition.cs similarity index 84% rename from GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs rename to GeneralMods/HappyBirthday/Framework/EventPreconditions/SpouseBirthdayPrecondition.cs index c167090c..4c817f1a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/SpecialPreconditions/SpouseBirthdayPrecondition.cs +++ b/GeneralMods/HappyBirthday/Framework/EventPreconditions/SpouseBirthdayPrecondition.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Omegasis.HappyBirthday.Framework.Events.Preconditions; +using StardustCore.Events.Preconditions; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.SpecialPreconditions +namespace Omegasis.HappyBirthday.Framework.EventPreconditions { public class SpouseBirthdayPrecondition:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs b/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs deleted file mode 100644 index fe26e0de..00000000 --- a/GeneralMods/HappyBirthday/Framework/Events/EventManager.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using StardewValley; - -namespace Omegasis.HappyBirthday.Framework.Events -{ - public class EventManager - { - - - public Dictionary events; - - - public EventManager() - { - this.events = new Dictionary(); - } - - public void addEvent(EventHelper Event) - { - this.events.Add(Event.eventName, Event); - } - - public EventHelper getEvent(string Name) - { - if (this.events.ContainsKey(Name)) - { - return this.events[Name]; - } - else - { - return null; - } - } - - - public void clearEventFromFarmer(string EventName) - { - - this.events.TryGetValue(EventName, out EventHelper e); - if (e == null) return; - Game1.player.eventsSeen.Remove(e.getEventID()); - } - } -} diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index e68ad0bc..c7416f3e 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -5,7 +5,7 @@ using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Omegasis.HappyBirthday.Framework; -using Omegasis.HappyBirthday.Framework.Events; +using StardustCore.Events; using StardewModdingAPI; using StardewModdingAPI.Events; using StardewValley; @@ -101,7 +101,7 @@ namespace Omegasis.HappyBirthday this.othersBirthdays = new Dictionary(); this.eventManager = new EventManager(); - + this.eventManager.addCustomEventLogic("AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); } private void Player_Warped(object sender, WarpedEventArgs e) @@ -575,8 +575,19 @@ namespace Omegasis.HappyBirthday private void OnUpdateTicked(object sender, UpdateTickedEventArgs e) { - if (!Context.IsWorldReady || Game1.eventUp || Game1.isFestival()) + if (!Context.IsWorldReady || Game1.isFestival()) + { return; + } + + if (Game1.eventUp) + { + if (this.eventManager != null) + { + this.eventManager.update(); + } + return; + } if (!this.HasChosenBirthday && Game1.activeClickableMenu == null && Game1.player.Name.ToLower() != "unnamed farmhand") { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.csproj b/GeneralMods/HappyBirthday/HappyBirthday.csproj index e9fbded4..e707d909 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.csproj +++ b/GeneralMods/HappyBirthday/HappyBirthday.csproj @@ -73,6 +73,9 @@ + + $(GamePath)\Mods\StardustCore\StardustCore.dll + @@ -83,48 +86,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/GeneralMods/HappyBirthday/manifest.json b/GeneralMods/HappyBirthday/manifest.json index 6cbbae33..10511db4 100644 --- a/GeneralMods/HappyBirthday/manifest.json +++ b/GeneralMods/HappyBirthday/manifest.json @@ -6,5 +6,8 @@ "UniqueID": "Omegasis.HappyBirthday", "EntryDll": "HappyBirthday.dll", "MinimumApiVersion": "2.10.1", - "UpdateKeys": [ "Nexus:520" ] + "UpdateKeys": [ "Nexus:520" ], + "Dependencies": [ + { "UniqueID": "Omegasis.StardustCore" }, + ] } diff --git a/GeneralMods/StardewMods.sln b/GeneralMods/StardewMods.sln index 7fc00954..172c70e2 100644 --- a/GeneralMods/StardewMods.sln +++ b/GeneralMods/StardewMods.sln @@ -16,6 +16,9 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fall28SnowDay", "Fall28SnowDay\Fall28SnowDay.csproj", "{1DBB583D-4A4F-4A46-8CC5-42017C93D292}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HappyBirthday", "HappyBirthday\HappyBirthday.csproj", "{A7A4B67B-3CD7-421F-A4A7-2D656F0AB4D9}" + ProjectSection(ProjectDependencies) = postProject + {0756D36A-95C8-480D-8EA6-4584C03010C6} = {0756D36A-95C8-480D-8EA6-4584C03010C6} + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoreRain", "MoreRain\MoreRain.csproj", "{45721A43-630A-461F-9A50-E47D3D1926D0}" EndProject diff --git a/GeneralMods/StardustCore/Events/EventExtensions.cs b/GeneralMods/StardustCore/Events/EventExtensions.cs new file mode 100644 index 00000000..1d5825cc --- /dev/null +++ b/GeneralMods/StardustCore/Events/EventExtensions.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StardustCore.Events +{ + /// + /// Used to parse additional + /// + public static class EventExtensions + { + /// + /// Gets the current command string with all of it's data. + /// + /// + /// + public static string currentCommandString(this StardewValley.Event CurrentEvent) + { + if (CurrentEvent.currentCommand >= CurrentEvent.eventCommands.Length) return ""; + return CurrentEvent.eventCommands.ElementAt(CurrentEvent.currentCommand); + } + + /// + /// Gets the name of the current command string. + /// + /// + /// + public static string currentCommandStringName(this StardewValley.Event CurrentEvent) + { + if (CurrentEvent.currentCommand >= CurrentEvent.eventCommands.Length) return ""; + return CurrentEvent.eventCommands.ElementAt(CurrentEvent.currentCommand).Split(' ')[0]; + } + + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs similarity index 98% rename from GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs rename to GeneralMods/StardustCore/Events/EventHelper.cs index 1a36f5bd..aae99ac9 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -2,11 +2,11 @@ using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; -using Omegasis.HappyBirthday.Framework.Events.Preconditions; -using Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific; +using StardustCore.Events.Preconditions; +using StardustCore.Events.Preconditions.TimeSpecific; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events +namespace StardustCore.Events { /// ///TODO: Figure out forked dialogue @@ -115,7 +115,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds in the data to the event data.Aka what happens during the event. /// /// - protected virtual void add(string Data) + public virtual void add(string Data) { if (this.eventData.Length > 0) @@ -129,7 +129,7 @@ namespace Omegasis.HappyBirthday.Framework.Events /// Adds in the data to the event data. Aka what happens during the event. /// /// - protected virtual void add(StringBuilder Builder) + public virtual void add(StringBuilder Builder) { this.add(Builder.ToString()); } @@ -178,7 +178,10 @@ namespace Omegasis.HappyBirthday.Framework.Events string s = this.nexusUserId.ToString(); return s.Substring(0, 4); } - + /// + /// Gets the id for the event. + /// + /// public virtual int getEventID() { return Convert.ToInt32(this.getUniqueEventStartID() + this.eventID.ToString()); @@ -205,12 +208,19 @@ namespace Omegasis.HappyBirthday.Framework.Events if (Convert.ToInt32(IDToCheck) > 2147483647 || Convert.ToInt32(IDToCheck) < 0) return false; else return true; } - + /// + /// Gets the string representation for the event's data. + /// + /// public virtual string getEventString() { return this.eventData.ToString(); } - + /// + /// Creates the Stardew Valley event from the given event data. + /// + /// + /// protected virtual StardewValley.Event getEvent(Farmer PlayerActor = null) { return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); @@ -1665,18 +1675,21 @@ namespace Omegasis.HappyBirthday.Framework.Events /// /// Pan the the camera in the direction (and with the velocity) defined by x/y for the given duration in milliseconds. Example: "viewport move 2 -1 5000" moves the camera 2 pixels right and 1 pixel up for 5 seconds. /// - /// - /// - /// - public virtual void panViewport(int XPosition, int YPosition, int Milliseconds) + /// + /// + /// + public virtual void panViewport(int xPixelAmount, int yPixelAmount, int MillisecondDuration) { StringBuilder b = new StringBuilder(); b.Append("viewport move "); - b.Append(XPosition); + b.Append(xPixelAmount); b.Append(" "); - b.Append(YPosition); + b.Append(yPixelAmount); + b.Append(" "); + b.Append(MillisecondDuration); this.add(b); } + /// /// Instantly reposition the camera to center on the given X, Y tile position. TODO: explain other parameters. /// diff --git a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs new file mode 100644 index 00000000..8cc04f30 --- /dev/null +++ b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using StardewValley; + +namespace StardustCore.Events +{ + public static class EventHelperExtensions + { + /// + /// Creates the event string to add the object to the player's inventory. + /// + /// + public static void addObjectToPlayersInventory(this EventHelper EventHelper,int ParentSheetIndex, int Amount=1, bool MakeActiveObject=false) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.AddObjectToPlayersInventory "); + b.Append(ParentSheetIndex); + b.Append(" "); + b.Append(Amount); + b.Append(" "); + b.Append(MakeActiveObject); + EventHelper.add(b); + } + + public static void ViewportLerp(this EventHelper EventHelper, Point NewPosition, double Speed) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.ViewportLerp "); + b.Append(NewPosition.X); + b.Append(" "); + b.Append(NewPosition.Y); + b.Append(" "); + b.Append(Speed); + EventHelper.add(b); + + } + + public static void ViewportLerpTile(this EventHelper EventHelper, Point NewTilePosition, double Speed) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.ViewportLerp "); + b.Append(NewTilePosition.X*Game1.tileSize); + b.Append(" "); + b.Append(NewTilePosition.Y*Game1.tileSize); + b.Append(" "); + b.Append(Speed); + EventHelper.add(b); + + } + + /// + /// Lerps the camera an offset tile amount. + /// + /// + /// + /// How many frames (aka update ticks) it takes to finish. Aka 60~=1 second + public static void ViewportLerpTileOffset(this EventHelper EventHelper, Point NewTilePositionOffset, int Frames=60) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.ViewportLerp "); + b.Append((NewTilePositionOffset.X * Game1.tileSize)); + b.Append(" "); + b.Append((NewTilePositionOffset.Y * Game1.tileSize)); + b.Append(" "); + b.Append(Frames); + EventHelper.add(b); + + } + + + } +} diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs new file mode 100644 index 00000000..3109d340 --- /dev/null +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events +{ + public class EventManager + { + /// + /// The list of events that this event manager is holding. + /// + public Dictionary events; + + /// + /// Event logic that occurs when the specialized command appears. + /// + public Dictionary> customEventLogic; + + + public bool eventStarted; + + public EventManager() + { + this.events = new Dictionary(); + this.customEventLogic = new Dictionary>(); + + + this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); + this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); + } + + /// + /// Adds an event to the dictionary of events. + /// + /// + public void addEvent(EventHelper Event) + { + this.events.Add(Event.eventName, Event); + } + + /// + /// Adds in custom code that happens when the game's current event sees the given command name. + /// + /// + /// + public void addCustomEventLogic(string CommandName,Action Function) + { + this.customEventLogic.Add(CommandName, Function); + } + + /// + /// Hooked into the game's update tick. + /// + public virtual void update() + { + if (Game1.CurrentEvent == null) return; + string commandName = this.getGameCurrentEventCommandStringName(); + //HappyBirthday.ModMonitor.Log("Current event command name is: " + commandName, StardewModdingAPI.LogLevel.Info); + if (string.IsNullOrEmpty(commandName)) return; + if (this.customEventLogic.ContainsKey(commandName)){ + this.customEventLogic[commandName].Invoke(this.getGameCurrentEventCommandString()); + } + } + + /// + /// Gets the event from this list of events. + /// + /// + /// + public EventHelper getEvent(string Name) + { + if (this.events.ContainsKey(Name)) + { + return this.events[Name]; + } + else + { + return null; + } + } + /// + /// Starts the event with the given id if possible. + /// + /// + public virtual void startEventAtLocationIfPossible(string EventName) + { + if (this.events.ContainsKey(EventName)) + { + this.events[EventName].startEventAtLocationifPossible(); + } + } + + /// + /// Clears the event from the farmer. + /// + /// + public void clearEventFromFarmer(string EventName) + { + + this.events.TryGetValue(EventName, out EventHelper e); + if (e == null) return; + Game1.player.eventsSeen.Remove(e.getEventID()); + } + + /// + /// Gets the current command and all of it's data. + /// + /// + public virtual string getGameCurrentEventCommandString() + { + if (Game1.CurrentEvent != null) + { + return Game1.CurrentEvent.currentCommandString(); + } + else + { + return ""; + } + } + + /// + /// Gets the name of the action for the current command in the string of event commands. + /// + /// + public virtual string getGameCurrentEventCommandStringName() + { + if (Game1.CurrentEvent != null) + { + return Game1.CurrentEvent.currentCommandStringName(); + } + else + { + return ""; + } + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs b/GeneralMods/StardustCore/Events/EventStartData.cs similarity index 91% rename from GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs rename to GeneralMods/StardustCore/Events/EventStartData.cs index 285e73b2..3434291a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/EventStartData.cs +++ b/GeneralMods/StardustCore/Events/EventStartData.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using Microsoft.Xna.Framework; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events +namespace StardustCore.Events { public class EventStartData { @@ -57,6 +57,12 @@ namespace Omegasis.HappyBirthday.Framework.Events { } + /// + ///Constructor. + /// + /// + /// + /// public FarmerData(int XTile, int YTile, EventHelper.FacingDirection Direction) { this.xPosition = XTile; @@ -64,6 +70,10 @@ namespace Omegasis.HappyBirthday.Framework.Events this.direction = Direction; } + /// + /// Gets a string representation of the farmer's starting data. + /// + /// public override string ToString() { StringBuilder b = new StringBuilder(); @@ -84,6 +94,9 @@ namespace Omegasis.HappyBirthday.Framework.Events /// private StringBuilder builder; + /// + /// A special variable to determined if to continue the music that is already playing or to turn off the music. + /// public enum MusicToPlayType { None, diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs new file mode 100644 index 00000000..b9a5983b --- /dev/null +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using StardewValley; + +namespace StardustCore.Events +{ + /// + /// Contains functions that are used to parse event data and do additional things. + /// + public class ExtraEventActions + { + + private static Point OldViewportPosition; + private static bool StartedLerp; + private static int CurrentViewportLerpAmount; + + /// + /// Adds the item from Game1.ObjectInformation to the player's inventory from the given event string. + /// + /// + public static void addObjectToPlayerInventory(string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + int parentSheetIndex =Convert.ToInt32(splits[1]); + int amount = Convert.ToInt32(splits[2]); + bool makeActiveObject = Convert.ToBoolean(splits[3]); + StardewValley.Object obj = new StardewValley.Object(parentSheetIndex, amount); + Game1.player.addItemToInventoryBool(obj,makeActiveObject); + Game1.CurrentEvent.CurrentCommand++; + } + + public static void ViewportLerp(string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + + int xEndPosition =Convert.ToInt32(splits[1]); + int yEndPosition = Convert.ToInt32(splits[2]); + int frames = Convert.ToInt32(splits[3]); + + if (StartedLerp==false) + { + OldViewportPosition = new Point(Game1.viewport.Location.X,Game1.viewport.Location.Y); + StartedLerp = true; + } + + ++CurrentViewportLerpAmount; + if (CurrentViewportLerpAmount >= frames) + { + Vector2 currentLerp2 = Vector2.Lerp(new Vector2(OldViewportPosition.X, OldViewportPosition.Y), new Vector2(OldViewportPosition.X+xEndPosition, OldViewportPosition.Y+yEndPosition), (float)((float)CurrentViewportLerpAmount/(float)frames)); + Game1.viewport.Location = new xTile.Dimensions.Location((int)currentLerp2.X, (int)currentLerp2.Y); + + OldViewportPosition = new Point(0, 0); + CurrentViewportLerpAmount = 0; + StartedLerp = false; + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + return; + } + Vector2 currentLerp = Vector2.Lerp(new Vector2(OldViewportPosition.X, OldViewportPosition.Y), new Vector2(OldViewportPosition.X + xEndPosition, OldViewportPosition.Y + yEndPosition), (float)((float)CurrentViewportLerpAmount/(float)frames)); + Game1.viewport.Location = new xTile.Dimensions.Location((int)currentLerp.X, (int)currentLerp.Y); + } + } +} diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/EventPrecondition.cs similarity index 80% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/EventPrecondition.cs index 27c8c70d..6092c68a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/EventPrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/EventPrecondition.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions +namespace StardustCore.Events.Preconditions { public class EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/LocationPrecondition.cs similarity index 94% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/LocationPrecondition.cs index 2ee9b42d..7b770293 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/LocationPrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/LocationPrecondition.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions +namespace StardustCore.Events.Preconditions { public class LocationPrecondition:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs b/GeneralMods/StardustCore/Events/Preconditions/MISC/ChanceToOccur.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs rename to GeneralMods/StardustCore/Events/Preconditions/MISC/ChanceToOccur.cs index cdb7a0c5..28b81e21 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/ChanceToOccur.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/MISC/ChanceToOccur.cs @@ -5,11 +5,10 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +namespace StardustCore.Events.Preconditions.MISC { public class ChanceToOccur:EventPrecondition { - public float chance; public ChanceToOccur() diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs b/GeneralMods/StardustCore/Events/Preconditions/MISC/EventNotInProgress.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs rename to GeneralMods/StardustCore/Events/Preconditions/MISC/EventNotInProgress.cs index a306481f..3c5392eb 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/EventNotInProgress.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/MISC/EventNotInProgress.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +namespace StardustCore.Events.Preconditions.MISC { public class EventNotInProgress:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs b/GeneralMods/StardustCore/Events/Preconditions/MISC/JojaWarehouseCompleted.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs rename to GeneralMods/StardustCore/Events/Preconditions/MISC/JojaWarehouseCompleted.cs index e658a79c..29d67cba 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/MISC/JojaWarehouseCompleted.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/MISC/JojaWarehouseCompleted.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.MISC +namespace StardustCore.Events.Preconditions.MISC { public class JojaWarehouseCompleted:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs similarity index 92% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs index 8a63cdc0..2525437a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/DatingNPC.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class DatingNPC:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs similarity index 94% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs index 9f906338..c457ed9a 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/FriendshipPointsRequired.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class FriendshipPointsRequired:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/HeartsRequired.cs similarity index 94% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/HeartsRequired.cs index a6b0a0b6..f97c1849 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/HeartsRequired.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/HeartsRequired.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class HeartsRequired:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs index b3180d3b..016446e9 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NPCInThisLocation.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class NPCInThisLocation:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotInvisible.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotInvisible.cs index 5d351186..1f59f6fb 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotInvisible.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotInvisible.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class NotInvisible:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotMarriedTo.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs rename to GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotMarriedTo.cs index 545995b9..efcdbaae 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/NPCSpecific/NotMarriedTo.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/NotMarriedTo.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.NPCSpecific +namespace StardustCore.Events.Preconditions.NPCSpecific { public class NotMarriedTo : EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs index 46d406c0..a18f592e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/AnsweredDialogueOptions.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class AnsweredDialogueOptions:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CurrentMoney.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CurrentMoney.cs index 4e85192e..705dd94c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/CurrentMoney.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CurrentMoney.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class CurrentMoney:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs index 7fc666ae..e901d23d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/DaysPlayedFor.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class DaysPlayedFor:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs index 92fade3c..7e18c0d7 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/EmptyInventorySlots.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class EmptyInventorySlots:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/Gender.cs similarity index 94% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/Gender.cs index 9e36e44c..b8cb3c7c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/Gender.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/Gender.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class Gender:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasItem.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasItem.cs index 0f065207..a6ac95cf 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasItem.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasItem.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class HasItem:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs index 013b9679..b2dbc666 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasNotRecievedLetter.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class HasNotRecievedLetter:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs index 7f8fdb1d..708294ae 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasRecievedLetter.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class HasRecievedLetter:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/MineBottomHit.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/MineBottomHit.cs index c1ae5fb1..213e624d 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/MineBottomHit.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/MineBottomHit.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class MineBottomHit:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PetPreference.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PetPreference.cs index 475d6b9e..4afa675c 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PetPreference.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PetPreference.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class PetPreference:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs index 1da78969..13fb834e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/PlayerOnThisTile.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using Microsoft.Xna.Framework; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class PlayerOnThisTile:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenEvents.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenEvents.cs index 22be7440..c9102f60 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenEvents.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenEvents.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class SeenEvents : EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs index 76303066..161274fd 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/SeenSecretNote.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class SeenSecretNote:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/ShippedItems.cs similarity index 96% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/ShippedItems.cs index 8061494c..854b23e4 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/ShippedItems.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/ShippedItems.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class ShippedItems:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs index ed4cf6b5..205fd1a2 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/TotalMoneyEarned.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class TotalMoneyEarned:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/UnseenEvents.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs rename to GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/UnseenEvents.cs index 8556c5ab..ca7157d7 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/PlayerSpecific/UnseenEvents.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/UnseenEvents.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.PlayerSpecific +namespace StardustCore.Events.Preconditions.PlayerSpecific { public class UnseenEvents:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs similarity index 94% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs index 125dcb02..fba40011 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/DayOfTheMonth.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { /// /// Event occurs on this day of the month. Range 1-28 diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs similarity index 97% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs index 57cacec5..9fc9f41e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/EventDayExclusionPrecondition.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { public class EventDayExclusionPrecondition:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs similarity index 90% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs index 8d92cc20..0fed366e 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/NotAFestivalDay.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { /// /// Precondition that ensures that this event can't happen on a festival day. diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/SeasonExclusion.cs similarity index 97% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/SeasonExclusion.cs index fbb28637..1bfd8ca6 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/SeasonExclusion.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/SeasonExclusion.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { public class SeasonExclusion:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/TimePrecondition.cs similarity index 93% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/TimePrecondition.cs index 3a5a5480..875d4d70 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/TimePrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/TimePrecondition.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { /// /// The event will only happen between the given times. diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs index 76c26e4f..87cd9793 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/WeatherPrecondition.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { public class WeatherPrecondition:EventPrecondition { diff --git a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/YearPrecondition.cs similarity index 95% rename from GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs rename to GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/YearPrecondition.cs index fb5a9a3f..59771a70 100644 --- a/GeneralMods/HappyBirthday/Framework/Events/Preconditions/TimeSpecific/YearPrecondition.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/TimeSpecific/YearPrecondition.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using StardewValley; -namespace Omegasis.HappyBirthday.Framework.Events.Preconditions.TimeSpecific +namespace StardustCore.Events.Preconditions.TimeSpecific { /// /// The event must occur on this year or after it. diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index fc202b8a..34aa5a8c 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -86,6 +86,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b184c654f4874250e57fa5a1c7d666ffb7ea5403 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Thu, 5 Dec 2019 01:40:29 -0800 Subject: [PATCH 31/52] Added way to run events concurrently so that things like viewport panning can happen at the same time as something else. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 2 +- .../Events/EventHelperExtensions.cs | 4 ++- .../StardustCore/Events/EventManager.cs | 32 ++++++++++++++++--- .../StardustCore/Events/ExtraEventActions.cs | 19 +++++++++-- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index b09086b1..6d248b6f 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -23,7 +23,7 @@ namespace Omegasis.HappyBirthday.Framework EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); e.globalFadeIn(); e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); - e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6); + e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6,true); e.addObjectToPlayersInventory(64, 22,true); e.showMessage("Community center birthday here."); diff --git a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs index 8cc04f30..a242f3e1 100644 --- a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs +++ b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs @@ -58,7 +58,7 @@ namespace StardustCore.Events /// /// /// How many frames (aka update ticks) it takes to finish. Aka 60~=1 second - public static void ViewportLerpTileOffset(this EventHelper EventHelper, Point NewTilePositionOffset, int Frames=60) + public static void ViewportLerpTileOffset(this EventHelper EventHelper, Point NewTilePositionOffset, int Frames=60,bool Concurrent=false) { StringBuilder b = new StringBuilder(); b.Append("Omegasis.EventFramework.ViewportLerp "); @@ -67,6 +67,8 @@ namespace StardustCore.Events b.Append((NewTilePositionOffset.Y * Game1.tileSize)); b.Append(" "); b.Append(Frames); + b.Append(" "); + b.Append(Concurrent); EventHelper.add(b); } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 3109d340..028647e7 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -17,16 +17,18 @@ namespace StardustCore.Events /// /// Event logic that occurs when the specialized command appears. /// - public Dictionary> customEventLogic; + public Dictionary> customEventLogic; + public Dictionary> concurrentEventActions; + public bool eventStarted; public EventManager() { this.events = new Dictionary(); - this.customEventLogic = new Dictionary>(); - + this.customEventLogic = new Dictionary>(); + this.concurrentEventActions = new Dictionary>(); this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); @@ -46,11 +48,17 @@ namespace StardustCore.Events /// /// /// - public void addCustomEventLogic(string CommandName,Action Function) + public void addCustomEventLogic(string CommandName,Action Function) { this.customEventLogic.Add(CommandName, Function); } + public void addConcurrentEvent(string EventData,Action Function) + { + + this.concurrentEventActions.Add(EventData, Function); + } + /// /// Hooked into the game's update tick. /// @@ -59,9 +67,23 @@ namespace StardustCore.Events if (Game1.CurrentEvent == null) return; string commandName = this.getGameCurrentEventCommandStringName(); //HappyBirthday.ModMonitor.Log("Current event command name is: " + commandName, StardewModdingAPI.LogLevel.Info); + + foreach(KeyValuePair> pair in this.concurrentEventActions) + { + pair.Value.Invoke(this,pair.Key); + } + if (string.IsNullOrEmpty(commandName)) return; if (this.customEventLogic.ContainsKey(commandName)){ - this.customEventLogic[commandName].Invoke(this.getGameCurrentEventCommandString()); + this.customEventLogic[commandName].Invoke(this,this.getGameCurrentEventCommandString()); + } + } + + public virtual void finishConcurrentEvent(string Key) + { + if (this.concurrentEventActions.ContainsKey(Key)) + { + this.concurrentEventActions.Remove(Key); } } diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index b9a5983b..d77cc1e1 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -22,7 +22,7 @@ namespace StardustCore.Events /// Adds the item from Game1.ObjectInformation to the player's inventory from the given event string. /// /// - public static void addObjectToPlayerInventory(string EventData) + public static void addObjectToPlayerInventory(EventManager EventManager,string EventData) { string[] splits = EventData.Split(' '); string name = splits[0]; @@ -34,7 +34,7 @@ namespace StardustCore.Events Game1.CurrentEvent.CurrentCommand++; } - public static void ViewportLerp(string EventData) + public static void ViewportLerp(EventManager EventManager,string EventData) { string[] splits = EventData.Split(' '); string name = splits[0]; @@ -42,6 +42,15 @@ namespace StardustCore.Events int xEndPosition =Convert.ToInt32(splits[1]); int yEndPosition = Convert.ToInt32(splits[2]); int frames = Convert.ToInt32(splits[3]); + bool concurrent = Convert.ToBoolean(splits[4]); + if (concurrent) + { + if (EventManager.concurrentEventActions.ContainsKey(EventData)==false) + { + EventManager.addConcurrentEvent(EventData, ViewportLerp); + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + } + } if (StartedLerp==false) { @@ -58,7 +67,11 @@ namespace StardustCore.Events OldViewportPosition = new Point(0, 0); CurrentViewportLerpAmount = 0; StartedLerp = false; - ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + if(concurrent==false)++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + else + { + EventManager.finishConcurrentEvent(EventData); + } return; } Vector2 currentLerp = Vector2.Lerp(new Vector2(OldViewportPosition.X, OldViewportPosition.Y), new Vector2(OldViewportPosition.X + xEndPosition, OldViewportPosition.Y + yEndPosition), (float)((float)CurrentViewportLerpAmount/(float)frames)); From 03e338e279711b0d4b58237a6fee9c2e360626db Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Thu, 5 Dec 2019 02:09:31 -0800 Subject: [PATCH 32/52] Cleaned concurrent actions when starting a new event and if an event finishes. --- GeneralMods/StardustCore/Events/EventManager.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 028647e7..3217e475 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -22,8 +22,6 @@ namespace StardustCore.Events public Dictionary> concurrentEventActions; - public bool eventStarted; - public EventManager() { this.events = new Dictionary(); @@ -55,7 +53,6 @@ namespace StardustCore.Events public void addConcurrentEvent(string EventData,Action Function) { - this.concurrentEventActions.Add(EventData, Function); } @@ -64,7 +61,14 @@ namespace StardustCore.Events /// public virtual void update() { - if (Game1.CurrentEvent == null) return; + if (Game1.CurrentEvent == null) + { + if (this.concurrentEventActions.Count > 0) + { + this.concurrentEventActions.Clear(); + } + return; + } string commandName = this.getGameCurrentEventCommandStringName(); //HappyBirthday.ModMonitor.Log("Current event command name is: " + commandName, StardewModdingAPI.LogLevel.Info); @@ -111,6 +115,7 @@ namespace StardustCore.Events { if (this.events.ContainsKey(EventName)) { + this.concurrentEventActions.Clear(); //Clean all old parallel actions before starting a new event. this.events[EventName].startEventAtLocationifPossible(); } } From b553aff0d2f655880d4a0b57b243762eb2a924a1 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Thu, 5 Dec 2019 17:30:42 -0800 Subject: [PATCH 33/52] Added in a few more preconditions. Time to make events. --- .../CommunityCenterCompleted.cs | 38 +++++++++++++++++++ .../PlayerSpecific/NotDatingAnyone.cs | 36 ++++++++++++++++++ GeneralMods/StardustCore/StardustCore.csproj | 2 + 3 files changed, 76 insertions(+) create mode 100644 GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CommunityCenterCompleted.cs create mode 100644 GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/NotDatingAnyone.cs diff --git a/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CommunityCenterCompleted.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CommunityCenterCompleted.cs new file mode 100644 index 00000000..ea6b00af --- /dev/null +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CommunityCenterCompleted.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events.Preconditions.PlayerSpecific +{ + public class CommunityCenterCompleted: EventPrecondition + { + /// + /// False means the community center doesn't need to be completed. + /// + bool needsToBeCompleted; + + public CommunityCenterCompleted() + { + + } + + public CommunityCenterCompleted(bool NeedsToBeCompleted) + { + this.needsToBeCompleted = NeedsToBeCompleted; + } + + public override string ToString() + { + return "Omegasis.EventFramework.Preconditions.Player.CommunityCenterCompleted?"; + } + + public override bool meetsCondition() + { + return this.needsToBeCompleted == Game1.player.hasCompletedCommunityCenter(); + } + + } +} diff --git a/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/NotDatingAnyone.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/NotDatingAnyone.cs new file mode 100644 index 00000000..68f4383b --- /dev/null +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/NotDatingAnyone.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events.Preconditions.PlayerSpecific +{ + public class NotDatingAnyone: EventPrecondition + { + public NotDatingAnyone() + { + + } + + public override string ToString() + { + return "Omegasis.EventFramework.Precondition.NotDatingAnyone"; + } + + + public override bool meetsCondition() + { + foreach(GameLocation loc in Game1.locations) + { + foreach (NPC npc in loc.getCharacters()) + { + if (Game1.player.friendshipData[npc.Name].IsDating()) return false; + } + } + return true; + } + + } +} diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index 34aa5a8c..6175872e 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -104,6 +104,7 @@ + @@ -112,6 +113,7 @@ + From 2609f3339a6b4689d854459e8423352f7cd0f6ce Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 11:34:58 -0800 Subject: [PATCH 34/52] Fixed continuous events causing an error when finished. Found out code to add in junimos as actors. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 97 ++++++++++++++++++- .../StardustCore/Events/EventHelper.cs | 30 +++++- .../StardustCore/Events/EventManager.cs | 12 ++- .../StardustCore/Events/ExtraEventActions.cs | 6 ++ 4 files changed, 140 insertions(+), 5 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 6d248b6f..cc0219bd 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -16,6 +16,7 @@ namespace Omegasis.HappyBirthday.Framework public static EventHelper CommunityCenterBirthday() { + //TODO Junimos List conditions = new List(); conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); @@ -24,12 +25,104 @@ namespace Omegasis.HappyBirthday.Framework e.globalFadeIn(); e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6,true); - e.addObjectToPlayersInventory(64, 22,true); + //e.addObjectToPlayersInventory(64, 22,true); + + e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); + e.actorJump("Junimo"); e.showMessage("Community center birthday here."); + //Notes + //Add a temporary actor (or sprite) to the screen. + //Use the attachCharacterToTempSprite command to stitch them together? + + /* + * + * + * else if (strArray[index].Equals("Junimo")) + { + List actors = this.actors; + Junimo junimo = new Junimo(new Vector2((float)(Convert.ToInt32(strArray[index + 1]) * 64), (float)(Convert.ToInt32(strArray[index + 2]) * 64 - 32)), Game1.currentLocation.Name.Equals("AbandonedJojaMart") ? 6 : -1, false); + junimo.Name = "Junimo"; + junimo.EventActor = true; + actors.Add((NPC)junimo); + } + + */ e.end(); return e; } + + /* + public static EventHelper DatingBirthday_Penny() + { + + } + public static EventHelper DatingBirthday_Maru() + { + + } + public static EventHelper DatingBirthday_Leah() + { + + } + public static EventHelper DatingBirthday_Abigail() + { + + } + public static EventHelper DatingBirthday_Emily() + { + + } + public static EventHelper DatingBirthday_Haley() + { + + } + public static EventHelper DatingBirthday_Sam() + { + + } + public static EventHelper DatingBirthday_Sebastian() + { + + } + public static EventHelper DatingBirthday_Elliott() + { + + } + public static EventHelper DatingBirthday_Shane() + { + + } + public static EventHelper DatingBirthday_Harvey() + { + + } + + public static EventHelper DatingBirthday_Alex() + { + + } + + public static EventHelper Birthday_Krobus() + { + + } + + + public static EventHelper MarriedBirthday_NoKids() + { + + } + + public static EventHelper MarriedBirthday_OneKids() + { + + } + public static EventHelper MarriedBirthday_TwoKids() + { + + } + */ + } } -} diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index aae99ac9..1762d584 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -470,12 +470,36 @@ namespace StardustCore.Events b.Append(" "); b.Append(TileY.ToString()); b.Append(" "); - b.Append(Direction); + b.Append(this.getFacingDirectionNumber(Direction)); + b.Append(" "); + b.Append(Breather); b.Append(" "); b.Append("Character"); this.add(b); } + + public virtual void addTemporaryActor_NPC(string npc, int SpriteWidth, int SpriteHeight, int TileX, int TileY, FacingDirection Direction, bool Breather) + { + StringBuilder b = new StringBuilder(); + b.Append("addTemporaryActor "); + b.Append(npc); + b.Append(" "); + b.Append(SpriteWidth.ToString()); + b.Append(" "); + b.Append(SpriteHeight.ToString()); + b.Append(" "); + b.Append(TileX.ToString()); + b.Append(" "); + b.Append(TileY.ToString()); + b.Append(" "); + b.Append(this.getFacingDirectionNumber(Direction)); + b.Append(" "); + b.Append(Breather); + b.Append(" "); + b.Append("Character"); + this.add(b); + } /// /// Add a temporary actor. 'breather' is boolean. The category determines where the texture will be loaded from, default is Character. Animal name only applies to animal. /// @@ -503,6 +527,8 @@ namespace StardustCore.Events b.Append(" "); b.Append(Direction); b.Append(" "); + b.Append(Breather); + b.Append(" "); b.Append("Animal"); b.Append(" "); b.Append(AnimalName); @@ -535,6 +561,8 @@ namespace StardustCore.Events b.Append(" "); b.Append(Direction); b.Append(" "); + b.Append(Breather); + b.Append(" "); b.Append("Monster"); this.add(b); } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 3217e475..0566850a 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -21,12 +21,14 @@ namespace StardustCore.Events public Dictionary> concurrentEventActions; + private Dictionary> _concurrentEventActionsGC; public EventManager() { this.events = new Dictionary(); this.customEventLogic = new Dictionary>(); this.concurrentEventActions = new Dictionary>(); + this._concurrentEventActionsGC = new Dictionary>(); this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); @@ -72,7 +74,13 @@ namespace StardustCore.Events string commandName = this.getGameCurrentEventCommandStringName(); //HappyBirthday.ModMonitor.Log("Current event command name is: " + commandName, StardewModdingAPI.LogLevel.Info); - foreach(KeyValuePair> pair in this.concurrentEventActions) + foreach (KeyValuePair> pair in this._concurrentEventActionsGC) + { + this.concurrentEventActions.Remove(pair.Key); + } + this._concurrentEventActionsGC.Clear(); + + foreach (KeyValuePair> pair in this.concurrentEventActions) { pair.Value.Invoke(this,pair.Key); } @@ -87,7 +95,7 @@ namespace StardustCore.Events { if (this.concurrentEventActions.ContainsKey(Key)) { - this.concurrentEventActions.Remove(Key); + this._concurrentEventActionsGC.Remove(Key); } } diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index d77cc1e1..f2a59908 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -34,6 +34,12 @@ namespace StardustCore.Events Game1.CurrentEvent.CurrentCommand++; } + + /// + /// Lerp the camera to a specified position. + /// + /// + /// public static void ViewportLerp(EventManager EventManager,string EventData) { string[] splits = EventData.Split(' '); From 373773906dde1c734588e44deff13dd2643cba49 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 12:09:31 -0800 Subject: [PATCH 35/52] Added in more functionallity for junimos and moving actors in an event. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 17 ++++--- .../StardustCore/Events/EventHelper.cs | 48 ++++++++++++++++++- .../Events/EventHelperExtensions.cs | 27 +++++++++++ .../StardustCore/Events/EventManager.cs | 1 + .../StardustCore/Events/ExtraEventActions.cs | 34 +++++++++++++ .../PlayerSpecific/CanReadJunimo.cs | 29 +++++++++++ GeneralMods/StardustCore/StardustCore.csproj | 1 + 7 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CanReadJunimo.cs diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index cc0219bd..205d7544 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -8,6 +8,7 @@ using StardustCore.Events; using StardustCore.Events.Preconditions; using StardustCore.Events.Preconditions.TimeSpecific; using StardewValley; +using Microsoft.Xna.Framework; namespace Omegasis.HappyBirthday.Framework { @@ -22,14 +23,20 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); + + e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 14), Color.Blue); + e.globalFadeIn(); e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6,true); + + e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); //e.addObjectToPlayersInventory(64, 22,true); - e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); - e.actorJump("Junimo"); + //e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); + e.showMessage("Community center birthday here."); + //Notes //Add a temporary actor (or sprite) to the screen. //Use the attachCharacterToTempSprite command to stitch them together? @@ -39,11 +46,7 @@ namespace Omegasis.HappyBirthday.Framework * * else if (strArray[index].Equals("Junimo")) { - List actors = this.actors; - Junimo junimo = new Junimo(new Vector2((float)(Convert.ToInt32(strArray[index + 1]) * 64), (float)(Convert.ToInt32(strArray[index + 2]) * 64 - 32)), Game1.currentLocation.Name.Equals("AbandonedJojaMart") ? 6 : -1, false); - junimo.Name = "Junimo"; - junimo.EventActor = true; - actors.Add((NPC)junimo); + } */ diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index 1762d584..86f89d9b 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -1202,6 +1202,50 @@ namespace StardustCore.Events this.add(b); } + /// + /// Move the given actor a certain amount of tiles. + /// + /// + /// + /// + /// + /// + public virtual void moveActor(string Actor, int xOffset, int yOffset, FacingDirection Dir, bool Continue) + { + StringBuilder b = new StringBuilder(); + b.Append("move "); + b.Append(Actor); + b.Append(" "); + b.Append(xOffset); + b.Append(" "); + b.Append(yOffset); + b.Append(" "); + b.Append(this.getFacingDirectionNumber(Dir)); + b.Append(" "); + b.Append(Continue); + this.add(b); + } + + public virtual void moveActorUp(string Actor, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveActor(Actor, 0, -TileAmount, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveActorDown(string Actor, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveActor(Actor, 0, TileAmount, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveActorLeft(string Actor, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveActor(Actor, -TileAmount, 0, FinishingFacingDirection, EventDoesntPause); + } + + public virtual void moveActorRight(string Actor, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) + { + this.moveActor(Actor, TileAmount, 0, FinishingFacingDirection, EventDoesntPause); + } + /// /// Make a named NPC move by the given tile offset from their current position (along one axis only), and face the given direction when they're done. To move along multiple axes, you must specify multiple move commands. By default the event pauses while a move command is occurring, but if is set to true the movement is asynchronous and will run simultaneously with other event commands. /// @@ -1238,12 +1282,12 @@ namespace StardustCore.Events public virtual void moveNPCLeft(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) { - this.moveNPC(npc, TileAmount,0,FinishingFacingDirection, EventDoesntPause); + this.moveNPC(npc, -TileAmount,0,FinishingFacingDirection, EventDoesntPause); } public virtual void moveNPCRight(NPC npc, int TileAmount, FacingDirection FinishingFacingDirection, bool EventDoesntPause) { - this.moveNPC(npc,-TileAmount,0,FinishingFacingDirection, EventDoesntPause); + this.moveNPC(npc,TileAmount,0,FinishingFacingDirection, EventDoesntPause); } public virtual void moveFarmer(int xOffset, int yOffset, FacingDirection Dir, bool Continue) diff --git a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs index a242f3e1..7a48ecd8 100644 --- a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs +++ b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework; using StardewValley; +using StardewValley.Characters; namespace StardustCore.Events { @@ -73,6 +74,32 @@ namespace StardustCore.Events } + /// + /// Creates the code to add in a junimo actor at the given location. + /// + /// + /// + /// + /// + public static void AddInJunimoActor(this EventHelper EventHelper,string ActorName,Vector2 Position,Color Color) + { + + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.AddInJunimoActor "); + b.Append(ActorName); + b.Append(" "); + b.Append(Position.X); + b.Append(" "); + b.Append(Position.Y); + b.Append(" "); + b.Append(Color.R); + b.Append(" "); + b.Append(Color.G); + b.Append(" "); + b.Append(Color.B); + EventHelper.add(b); + } + } } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 0566850a..b95759d6 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -32,6 +32,7 @@ namespace StardustCore.Events this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); + this.customEventLogic.Add("Omegasis.EventFramework.AddInJunimoActor", ExtraEventActions.AddInJumimoActorForEvent); } /// diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index f2a59908..ab382ba3 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -4,7 +4,10 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework; +using Netcode; +using StardewModdingAPI; using StardewValley; +using StardewValley.Characters; namespace StardustCore.Events { @@ -83,5 +86,36 @@ namespace StardustCore.Events Vector2 currentLerp = Vector2.Lerp(new Vector2(OldViewportPosition.X, OldViewportPosition.Y), new Vector2(OldViewportPosition.X + xEndPosition, OldViewportPosition.Y + yEndPosition), (float)((float)CurrentViewportLerpAmount/(float)frames)); Game1.viewport.Location = new xTile.Dimensions.Location((int)currentLerp.X, (int)currentLerp.Y); } + + /// + /// Adds in a junimo actor at the current location. Allows for multiple. + /// + /// + /// + public static void AddInJumimoActorForEvent(EventManager EventManager, string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + + string actorName = splits[1]; + int xPos = Convert.ToInt32(splits[2]); + int yPos = Convert.ToInt32(splits[3]); + Color color = new Color(Convert.ToInt32(splits[4]), Convert.ToInt32(splits[5]), Convert.ToInt32(splits[6])); + + List actors = Game1.CurrentEvent.actors; + Junimo junimo = new Junimo(new Vector2(xPos * 64, yPos * 64), -1, false); + junimo.Name = actorName; + junimo.EventActor = true; + + IReflectedField colorF=StardustCore.ModCore.ModHelper.Reflection.GetField(junimo, "color", true); + NetColor c = colorF.GetValue(); + c.R = color.R; + c.G = color.G; + c.B = color.B; + colorF.SetValue(c); + + actors.Add((NPC)junimo); + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + } } } diff --git a/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CanReadJunimo.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CanReadJunimo.cs new file mode 100644 index 00000000..e18f039a --- /dev/null +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/CanReadJunimo.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events.Preconditions.PlayerSpecific +{ + public class CanReadJunimo:EventPrecondition + { + public CanReadJunimo() + { + + } + + public override string ToString() + { + return "StardewVally.Player.CanReadJunimo"; + } + + public override bool meetsCondition() + { + return Game1.player.mailReceived.Contains("canReadJunimoText"); + } + + + } +} diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index 6175872e..1a7541f3 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -104,6 +104,7 @@ + From 69170b6d54d847099088a9697170e8d0093f1fe7 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 13:31:10 -0800 Subject: [PATCH 36/52] Finally fixed concurrent events. Also added in a hex dumper to get all of the sound cues for the sound bank. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 1 + .../Events/ConcurrentEventInformation.cs | 53 +++++++ .../StardustCore/Events/EventManager.cs | 27 ++-- .../StardustCore/Events/ExtraEventActions.cs | 7 +- GeneralMods/StardustCore/ModCore.cs | 12 ++ GeneralMods/StardustCore/StardustCore.csproj | 3 + .../StardustCore/Utilities/HexDumper.cs | 144 ++++++++++++++++++ .../StardustCore/Utilities/Serializer.cs | 143 +++++++++++++++++ 8 files changed, 374 insertions(+), 16 deletions(-) create mode 100644 GeneralMods/StardustCore/Events/ConcurrentEventInformation.cs create mode 100644 GeneralMods/StardustCore/Utilities/HexDumper.cs create mode 100644 GeneralMods/StardustCore/Utilities/Serializer.cs diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 205d7544..9f78c1a0 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -31,6 +31,7 @@ namespace Omegasis.HappyBirthday.Framework e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6,true); e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); + e.playSound("junimoMeep1"); //e.addObjectToPlayersInventory(64, 22,true); //e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); diff --git a/GeneralMods/StardustCore/Events/ConcurrentEventInformation.cs b/GeneralMods/StardustCore/Events/ConcurrentEventInformation.cs new file mode 100644 index 00000000..53a3c1f1 --- /dev/null +++ b/GeneralMods/StardustCore/Events/ConcurrentEventInformation.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StardustCore.Events +{ + public class ConcurrentEventInformation + { + public string id; + public string commandInfo; + public Action functionToRun; + public bool finished; + public EventManager eventManager; + + public ConcurrentEventInformation() + { + + } + + public ConcurrentEventInformation(string ID, string CommandInfo,EventManager EventManager ,Action Function) + { + this.id = ID; + this.commandInfo = CommandInfo; + this.eventManager = EventManager; + this.functionToRun = Function; + } + + public void finish() + { + this.finished = true; + } + + + public void invokeIfNotFinished() + { + if (this.finished) return; + this.functionToRun.Invoke(this.eventManager, this.commandInfo); + } + + public override int GetHashCode() + { + return this.id.GetHashCode(); + } + + public override bool Equals(object obj) + { + return (obj as ConcurrentEventInformation).id.Equals(this.id); + } + + } +} diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index b95759d6..b3f9be88 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -20,15 +20,13 @@ namespace StardustCore.Events public Dictionary> customEventLogic; - public Dictionary> concurrentEventActions; - private Dictionary> _concurrentEventActionsGC; + public Dictionary concurrentEventActions; public EventManager() { this.events = new Dictionary(); this.customEventLogic = new Dictionary>(); - this.concurrentEventActions = new Dictionary>(); - this._concurrentEventActionsGC = new Dictionary>(); + this.concurrentEventActions = new Dictionary(); this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); @@ -54,9 +52,9 @@ namespace StardustCore.Events this.customEventLogic.Add(CommandName, Function); } - public void addConcurrentEvent(string EventData,Action Function) + public void addConcurrentEvent(ConcurrentEventInformation EventInfo) { - this.concurrentEventActions.Add(EventData, Function); + this.concurrentEventActions.Add(EventInfo.id, EventInfo); } /// @@ -75,15 +73,18 @@ namespace StardustCore.Events string commandName = this.getGameCurrentEventCommandStringName(); //HappyBirthday.ModMonitor.Log("Current event command name is: " + commandName, StardewModdingAPI.LogLevel.Info); - foreach (KeyValuePair> pair in this._concurrentEventActionsGC) + List _eventGC = new List(); + foreach (KeyValuePair eventInfo in this.concurrentEventActions) { - this.concurrentEventActions.Remove(pair.Key); + if (eventInfo.Value.finished) + { + _eventGC.Add(eventInfo.Key); + } + eventInfo.Value.invokeIfNotFinished(); } - this._concurrentEventActionsGC.Clear(); - - foreach (KeyValuePair> pair in this.concurrentEventActions) + foreach(string garbage in _eventGC) { - pair.Value.Invoke(this,pair.Key); + this.concurrentEventActions.Remove(garbage); } if (string.IsNullOrEmpty(commandName)) return; @@ -96,7 +97,7 @@ namespace StardustCore.Events { if (this.concurrentEventActions.ContainsKey(Key)) { - this._concurrentEventActionsGC.Remove(Key); + this.concurrentEventActions[Key].finish(); } } diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index ab382ba3..6019652d 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -54,9 +54,9 @@ namespace StardustCore.Events bool concurrent = Convert.ToBoolean(splits[4]); if (concurrent) { - if (EventManager.concurrentEventActions.ContainsKey(EventData)==false) + if (EventManager.concurrentEventActions.ContainsKey(name)==false) { - EventManager.addConcurrentEvent(EventData, ViewportLerp); + EventManager.addConcurrentEvent(new ConcurrentEventInformation(name,EventData,EventManager,ViewportLerp)); ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; } } @@ -70,6 +70,7 @@ namespace StardustCore.Events ++CurrentViewportLerpAmount; if (CurrentViewportLerpAmount >= frames) { + CurrentViewportLerpAmount = frames; Vector2 currentLerp2 = Vector2.Lerp(new Vector2(OldViewportPosition.X, OldViewportPosition.Y), new Vector2(OldViewportPosition.X+xEndPosition, OldViewportPosition.Y+yEndPosition), (float)((float)CurrentViewportLerpAmount/(float)frames)); Game1.viewport.Location = new xTile.Dimensions.Location((int)currentLerp2.X, (int)currentLerp2.Y); @@ -79,7 +80,7 @@ namespace StardustCore.Events if(concurrent==false)++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; else { - EventManager.finishConcurrentEvent(EventData); + EventManager.finishConcurrentEvent(name); } return; } diff --git a/GeneralMods/StardustCore/ModCore.cs b/GeneralMods/StardustCore/ModCore.cs index 72d4496b..b468ad6f 100644 --- a/GeneralMods/StardustCore/ModCore.cs +++ b/GeneralMods/StardustCore/ModCore.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using StardewModdingAPI; +using StardewValley; using StardustCore.UIUtilities; using StardustCore.UIUtilities.SpriteFonts; @@ -38,9 +39,20 @@ namespace StardustCore TextureManager.addTexture("Test3", new Texture2DExtended(ModCore.ModHelper, Manifest,Path.Combine("Content", "Graphics", "MultiTest", "Test3.png"))); TextureManagers.Add(this.ModManifest.UniqueID, TextureManager); + this.Helper.Events.GameLoop.GameLaunched += this.GameLoop_GameLaunched; + this.config = ModHelper.ReadConfig(); } + private void GameLoop_GameLaunched(object sender, StardewModdingAPI.Events.GameLaunchedEventArgs e) + { + string soundbankPath=Path.Combine(Game1.content.RootDirectory, "XACT", "Sound Bank.xsb"); + Directory.CreateDirectory(Path.Combine(this.Helper.DirectoryPath, "ProcessedGameFiles")); + //this.Monitor.Log(Utilities.HexDumper.HexDumpString(soundbankPath), LogLevel.Info); + Utilities.HexDumper.StripSoundCuesToFile(Path.Combine(this.Helper.DirectoryPath, "ProcessedGameFiles", "SoundCues.json"),Utilities.HexDumper.StripSoundCuesFromHex(Utilities.HexDumper.HexDumpString(soundbankPath))); + //Utilities.HexDumper.HexDumpFile(soundbankPath, Path.Combine(this.Helper.DirectoryPath, "ProcessedGameFiles", "SoundCuesRaw.json")); + } + public static void log(string message) { ModMonitor.Log(message); diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index 1a7541f3..4dc41659 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -86,6 +86,7 @@ + @@ -159,6 +160,8 @@ + + diff --git a/GeneralMods/StardustCore/Utilities/HexDumper.cs b/GeneralMods/StardustCore/Utilities/HexDumper.cs new file mode 100644 index 00000000..60743e39 --- /dev/null +++ b/GeneralMods/StardustCore/Utilities/HexDumper.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardustCore.Utilities.Serialization; + +namespace StardustCore.Utilities +{ + public class HexDumper + { + + /// + /// Dumps the contents of a file to a hex file. + /// + /// + /// + public static void HexDumpFile(string InFile, string OutFile) + { + if (File.Exists(InFile)) + { + byte[] buffer = File.ReadAllBytes(InFile); + string hexInfo = HexDump(buffer); + Serializer s = new Serializer(); + s.Serialize(OutFile, buffer); + } + } + + public static string HexDumpString(string InFile) + { + if (File.Exists(InFile)) + { + byte[] buffer = File.ReadAllBytes(InFile); + string hexInfo = HexDump(buffer); + return hexInfo; + } + return ""; + } + + public static void StripSoundCuesToFile(string FileName,List SoundCues) + { + Serializer s = new Serializer(); + s.Serialize(FileName, SoundCues); + } + + public static List StripSoundCuesFromHex(string HexString) + { + string[] lines = HexString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + StringBuilder b = new StringBuilder(); + foreach (string s in lines) + { + try + { + string sub = s.Substring(62, s.Length - 62); //Throw away the first 62 trash characters; + sub = sub.Replace("ÿ", ""); + b.Append(sub); + //ModCore.ModMonitor.Log(sub, StardewModdingAPI.LogLevel.Info); + } + catch(Exception err) + { + //ModCore.ModMonitor.Log("Failed on: "+s, StardewModdingAPI.LogLevel.Info); + } + } + + string ok = b.ToString(); + string[] split1=ok.Split(new string[] { "doorClose" }, StringSplitOptions.None); + string s2 = split1[1]; + string[] split2 = s2.Split('·'); + List hexLess = new List(); + hexLess.Add("doorClose"); + foreach (string cue in split2) + { + if (string.IsNullOrEmpty(cue)) continue; + //ModCore.ModMonitor.Log("Cue is:"+cue, StardewModdingAPI.LogLevel.Info); + hexLess.Add(cue); + } + + return hexLess; + } + + public static string HexDump(byte[] bytes, int bytesPerLine = 16) + { + if (bytes == null) return ""; + int bytesLength = bytes.Length; + + char[] HexChars = "0123456789ABCDEF".ToCharArray(); + + int firstHexColumn = + 8 // 8 characters for the address + + 3; // 3 spaces + + int firstCharColumn = firstHexColumn + + bytesPerLine * 3 // - 2 digit for the hexadecimal value and 1 space + + (bytesPerLine - 1) / 8 // - 1 extra space every 8 characters from the 9th + + 2; // 2 spaces + + int lineLength = firstCharColumn + + bytesPerLine // - characters to show the ascii value + + Environment.NewLine.Length; // Carriage return and line feed (should normally be 2) + + char[] line = (new string(' ', lineLength - Environment.NewLine.Length) + Environment.NewLine).ToCharArray(); + int expectedLines = (bytesLength + bytesPerLine - 1) / bytesPerLine; + StringBuilder result = new StringBuilder(expectedLines * lineLength); + + for (int i = 0; i < bytesLength; i += bytesPerLine) + { + line[0] = HexChars[(i >> 28) & 0xF]; + line[1] = HexChars[(i >> 24) & 0xF]; + line[2] = HexChars[(i >> 20) & 0xF]; + line[3] = HexChars[(i >> 16) & 0xF]; + line[4] = HexChars[(i >> 12) & 0xF]; + line[5] = HexChars[(i >> 8) & 0xF]; + line[6] = HexChars[(i >> 4) & 0xF]; + line[7] = HexChars[(i >> 0) & 0xF]; + + int hexColumn = firstHexColumn; + int charColumn = firstCharColumn; + + for (int j = 0; j < bytesPerLine; j++) + { + if (j > 0 && (j & 7) == 0) hexColumn++; + if (i + j >= bytesLength) + { + line[hexColumn] = ' '; + line[hexColumn + 1] = ' '; + line[charColumn] = ' '; + } + else + { + byte b = bytes[i + j]; + line[hexColumn] = HexChars[(b >> 4) & 0xF]; + line[hexColumn + 1] = HexChars[b & 0xF]; + line[charColumn] = (b < 32 ? '·' : (char)b); + } + hexColumn += 3; + charColumn++; + } + result.Append(line); + } + return result.ToString(); + } + } +} diff --git a/GeneralMods/StardustCore/Utilities/Serializer.cs b/GeneralMods/StardustCore/Utilities/Serializer.cs new file mode 100644 index 00000000..daed554f --- /dev/null +++ b/GeneralMods/StardustCore/Utilities/Serializer.cs @@ -0,0 +1,143 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace StardustCore.Utilities.Serialization +{ + public class Serializer + { + + public static Serializer JSONSerializer; + + private JsonSerializer serializer; + + private JsonSerializerSettings settings; + + /// + /// Constructor. + /// + public Serializer() + { + this.serializer = new JsonSerializer(); + this.serializer.Formatting = Formatting.Indented; + this.serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + this.serializer.NullValueHandling = NullValueHandling.Include; + + this.settings = new JsonSerializerSettings(); + //this.serializer.Converters.Add(new Converters.TilePropertyConverter()); + foreach (JsonConverter converter in this.serializer.Converters) + { + this.settings.Converters.Add(converter); + } + this.settings.Formatting = Formatting.Indented; + this.settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + this.settings.NullValueHandling = NullValueHandling.Include; + } + + /// + /// Adds a new converter to the json serializer. + /// + /// The type of json converter to add to the Serializer. + public void addConverter(JsonConverter converter) + { + this.serializer.Converters.Add(converter); + } + + + /// + /// Deserializes an object from a .json file. + /// + /// The type of object to deserialize into. + /// The path to the file. + /// An object of specified type T. + public T Deserialize(string p) + { + //string json = ""; + //foreach (string line in File.ReadAllLines(p)) + //{ + //json += line; + //} + using (StreamReader sw = new StreamReader(p)) + using (JsonReader reader = new JsonTextReader(sw)) + { + var obj = this.serializer.Deserialize(reader); + return obj; + } + } + + /// + /// Deserializes an object from a .json file. + /// + /// The type of object to deserialize into. + /// The path to the file. + /// An object of specified type T. + public object Deserialize(string p, Type T) + { + /* + string json = ""; + foreach (string line in File.ReadAllLines(p)) + { + json += line; + } + */ + using (StreamReader sw = new StreamReader(p)) + using (JsonReader reader = new JsonTextReader(sw)) + { + object obj = this.serializer.Deserialize(reader, T); + return obj; + } + } + + /// + /// Serializes an object to a .json file. + /// + /// + /// + public void Serialize(string path, object o) + { + using (StreamWriter sw = new StreamWriter(path)) + using (JsonWriter writer = new JsonTextWriter(sw)) + { + this.serializer.Serialize(writer, o); + } + } + + + + /// + /// Converts objects to json form. + /// + /// + /// + public string ToJSONString(object o) + { + return JsonConvert.SerializeObject(o, this.settings); + } + + /// + /// Converts from json form to objects. + /// + /// + /// + /// + public T DeserializeFromJSONString(string info) + { + return JsonConvert.DeserializeObject(info, this.settings); + } + + /// + /// Converts from json form to objects. + /// + /// + /// + /// + public object DeserializeFromJSONString(string info, Type T) + { + return JsonConvert.DeserializeObject(info, T, this.settings); + } + + } +} From aed54a63ff4714e62c116291ebdacd8df2a29659 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 14:05:58 -0800 Subject: [PATCH 37/52] Fixed animation code not working. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 23 ++++++++++++--- .../StardustCore/Events/EventHelper.cs | 4 +-- .../HasUnlockedCommunityCenter.cs | 24 ++++++++++++++++ .../IlluminateFramework/Colors.cs | 28 +++++++++++++++++++ GeneralMods/StardustCore/StardustCore.csproj | 1 + 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasUnlockedCommunityCenter.cs diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 9f78c1a0..0a89754a 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -9,6 +9,7 @@ using StardustCore.Events.Preconditions; using StardustCore.Events.Preconditions.TimeSpecific; using StardewValley; using Microsoft.Xna.Framework; +using StardustCore.Events.Preconditions.PlayerSpecific; namespace Omegasis.HappyBirthday.Framework { @@ -22,20 +23,34 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); + //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); - e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 14), Color.Blue); + e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 14), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni3", new Microsoft.Xna.Framework.Vector2(34, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + + e.globalFadeIn(); e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); - e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0,-6),60*6,true); - e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); + //e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); + e.animate("Juni", true, true, 70, new List() + { + 28, + 29, + 30, + 31 + }); + + // + e.playSound("junimoMeep1"); //e.addObjectToPlayersInventory(64, 22,true); //e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); - + e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0, -6), 60 * 6, false); e.showMessage("Community center birthday here."); //Notes diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index 86f89d9b..ef4747f0 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -672,9 +672,9 @@ namespace StardustCore.Events b.Append("animate "); b.Append(ActorName); b.Append(" "); - b.Append(Flip); + b.Append(Flip.ToString().ToLowerInvariant()); b.Append(" "); - b.Append(Loop); + b.Append(Loop.ToString().ToLowerInvariant()); b.Append(" "); b.Append(FrameDuration); b.Append(" "); diff --git a/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasUnlockedCommunityCenter.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasUnlockedCommunityCenter.cs new file mode 100644 index 00000000..4e108e75 --- /dev/null +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/HasUnlockedCommunityCenter.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events.Preconditions.PlayerSpecific +{ + public class HasUnlockedCommunityCenter:EventPrecondition + { + + + public HasUnlockedCommunityCenter() + { + + } + + public override bool meetsCondition() + { + return Game1.player.eventsSeen.Contains(611439); + } + } +} diff --git a/GeneralMods/StardustCore/IlluminateFramework/Colors.cs b/GeneralMods/StardustCore/IlluminateFramework/Colors.cs index 18713cbc..65a18f44 100644 --- a/GeneralMods/StardustCore/IlluminateFramework/Colors.cs +++ b/GeneralMods/StardustCore/IlluminateFramework/Colors.cs @@ -608,6 +608,34 @@ namespace StardustCore.IlluminateFramework return new Color(r, g, b, a); } + /// + /// Gets a random junimo color from the possible junimo colors. + /// + /// + public static Color getRandomJunimoColor() + { + List colors = new List(); + colors.Add(Color.Red); + colors.Add(Color.Goldenrod); + colors.Add(Color.Yellow); + colors.Add(Color.Lime); + colors.Add(Color.MediumPurple); + colors.Add(Color.Salmon); + colors.Add(Color.White); + colors.Add(Color.LimeGreen); + colors.Add(Color.Orange); + colors.Add(Color.LightGreen); + colors.Add(Color.Tan); + colors.Add(Color.GreenYellow); + colors.Add(Color.LawnGreen); + colors.Add(Color.PaleGreen); + colors.Add(Color.Turquoise); + colors.Add(Color.Gold); + colors.Add(Color.BlanchedAlmond); + colors.Add(new Color(160, 20, 220)); //??? + return colors[Game1.random.Next(0, colors.Count)]; + } + /// Invert the color passed in. public static Color invertColor(Color c, int alpha = 255) { diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index 4dc41659..641f2bdb 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -114,6 +114,7 @@ + From 650bfdc84bc2ba378b6208c3de4e8ec52beba6b9 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 15:04:48 -0800 Subject: [PATCH 38/52] Added in all of the event requirements for the community center birthday event. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 41 ++--- GeneralMods/HappyBirthday/HappyBirthday.cs | 19 ++ .../StardustCore/Events/EventHelper.cs | 167 +++++++++++++++++- .../PlayerSpecific/JojaMember.cs | 37 ++++ GeneralMods/StardustCore/StardustCore.csproj | 2 + .../Utilities/PlayerExtensions.cs | 19 ++ 6 files changed, 259 insertions(+), 26 deletions(-) create mode 100644 GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/JojaMember.cs create mode 100644 GeneralMods/StardustCore/Utilities/PlayerExtensions.cs diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 0a89754a..8781ae56 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -16,13 +16,18 @@ namespace Omegasis.HappyBirthday.Framework public class BirthdayEvents { + /// + /// Creates the junimo birthday party event. + /// + /// public static EventHelper CommunityCenterBirthday() { - //TODO Junimos List conditions = new List(); conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); conditions.Add(new TimePrecondition(600, 2600)); + conditions.Add(new CanReadJunimo()); + conditions.Add(new StardustCore.Events.Preconditions.PlayerSpecific.JojaMember(false)); //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); @@ -30,13 +35,11 @@ namespace Omegasis.HappyBirthday.Framework e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddInJunimoActor("Juni3", new Microsoft.Xna.Framework.Vector2(34, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); - - e.globalFadeIn(); - e.moveFarmerUp(6, EventHelper.FacingDirection.Up, false); + e.moveFarmerUp(6, EventHelper.FacingDirection.Up, true); //e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); - e.animate("Juni", true, true, 70, new List() + e.animate("Juni", true, true, 250, new List() { 28, 29, @@ -47,25 +50,15 @@ namespace Omegasis.HappyBirthday.Framework // e.playSound("junimoMeep1"); - //e.addObjectToPlayersInventory(64, 22,true); - - //e.addTemporaryActor_NPC("Junimo", 16, 16, 32, 14, EventHelper.FacingDirection.Down, false); - e.ViewportLerpTileOffset(new Microsoft.Xna.Framework.Point(0, -6), 60 * 6, false); - e.showMessage("Community center birthday here."); - - //Notes - //Add a temporary actor (or sprite) to the screen. - //Use the attachCharacterToTempSprite command to stitch them together? - - /* - * - * - * else if (strArray[index].Equals("Junimo")) - { - - } - - */ + // + e.emoteFarmer_ExclamationMark(); + e.showMessage("It looks like the junimos wanted to throw you a party!"); //TODO get this from translated strings. NOT hard coded. + e.emoteFarmer_Heart(); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage("It looks like there was some cake left over too!");//TODO get this from translated strings. NOT hard coded. + e.showMessage("That was a fun party. Back to work!");//TODO get this from translated strings. NOT hard coded. + e.addObjectToPlayersInventory(220, 1, false); e.end(); diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index c7416f3e..3ce7cbac 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -12,6 +12,7 @@ using StardewValley; using StardewValley.Characters; using StardewValley.Menus; using StardewValley.Monsters; +using StardustCore.Utilities; namespace Omegasis.HappyBirthday { @@ -144,6 +145,7 @@ namespace Omegasis.HappyBirthday data["birthdayMom"] = momMail; data["birthdayDad"] = dadMail; + data["birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos"; } @@ -558,6 +560,18 @@ namespace Omegasis.HappyBirthday } this.eventManager.addEvent(BirthdayEvents.CommunityCenterBirthday()); + if (Game1.player.mailReceived.Contains("birthdayMom")) + { + Game1.player.mailReceived.Remove("birthdayMom"); + } + if (Game1.player.mailReceived.Contains("birthdayDad")) + { + Game1.player.mailReceived.Remove("birthdayDad"); + } + if (Game1.player.mailReceived.Contains("birthdayJunimos")) + { + Game1.player.mailReceived.Remove("birthdayJunimos"); + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -613,6 +627,11 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayMom"); Game1.player.mailbox.Add("birthdayDad"); + if (Game1.player.CanReadJunimo()) + { + Game1.player.mailbox.Add("birthdayJunimos"); + } + foreach (GameLocation location in Game1.locations) { diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index ef4747f0..73204d21 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -925,13 +925,176 @@ namespace StardustCore.Events { StringBuilder b = new StringBuilder(); b.Append("emote "); - b.Append(Actor); b.Append(" "); - b.Append(EmoteID); + b.Append(EmoteID*4); this.add(b); } + public virtual void emoteFarmer(int EmoteID) + { + this.emote("farmer", EmoteID); + } + + public virtual void emote_Empty(string Actor) + { + this.emote(Actor, 0); + } + + public virtual void emote_NoWater(string Actor) + { + this.emote(Actor, 1); + } + + public virtual void emote_QuestionMark(string Actor) + { + this.emote(Actor, 2); + } + + public virtual void emote_Angry(string Actor) + { + this.emote(Actor, 3); + } + + public virtual void emote_ExclamationMark(string Actor) + { + this.emote(Actor, 4); + } + public virtual void emote_Heart(string Actor) + { + this.emote(Actor, 5); + } + public virtual void emote_Sleeping(string Actor) + { + this.emote(Actor, 6); + } + public virtual void emote_Sad(string Actor) + { + this.emote(Actor, 7); + } + public virtual void emote_Happy(string Actor) + { + this.emote(Actor, 8); + } + public virtual void emote_No(string Actor) + { + this.emote(Actor, 9); + } + public virtual void emote_Pause(string Actor) + { + this.emote(Actor,10); + } + public virtual void emote_Thinking(string Actor) + { + this.emote(Actor, 10); + } + public virtual void emote_Fishing(string Actor) + { + this.emote(Actor, 11); + } + + public virtual void emote_CommunityCenterTablet(string Actor) + { + this.emote(Actor, 12); + } + + public virtual void emote_Gaming(string Actor) + { + this.emote(Actor, 13); + } + public virtual void emote_MusicNote(string Actor) + { + this.emote(Actor, 14); + } + public virtual void emote_Blushing(string Actor) + { + this.emote(Actor, 15); + } + public virtual void emote_Embarrased(string Actor) + { + this.emote_Blushing(Actor); + } + + public virtual void emoteFarmer_Empty() + { + this.emoteFarmer(0); + } + + public virtual void emoteFarmer_NoWater() + { + this.emoteFarmer(1); + } + + public virtual void emoteFarmer_QuestionMark() + { + this.emoteFarmer(2); + } + + public virtual void emoteFarmer_Angry() + { + this.emoteFarmer(3); + } + + public virtual void emoteFarmer_ExclamationMark() + { + this.emoteFarmer(4); + } + public virtual void emoteFarmer_Heart() + { + this.emoteFarmer(5); + } + public virtual void emoteFarmer_Sleeping() + { + this.emoteFarmer(6); + } + public virtual void emoteFarmer_Sad() + { + this.emoteFarmer(7); + } + public virtual void emoteFarmer_Happy() + { + this.emoteFarmer(8); + } + public virtual void emoteFarmer_No() + { + this.emoteFarmer(9); + } + public virtual void emoteFarmer_Pause() + { + this.emoteFarmer(10); + } + public virtual void emoteFarmer_Thinking() + { + this.emoteFarmer_Pause(); + } + public virtual void emoteFarmer_Fishing() + { + this.emoteFarmer(11); + } + + public virtual void emoteFarmer_CommunityCenterTablet() + { + this.emoteFarmer(12); + } + + public virtual void emoteFarmer_Gaming() + { + this.emoteFarmer(13); + } + public virtual void emoteFarmer_MusicNote() + { + this.emoteFarmer(14); + } + public virtual void emoteFarmer_Blushing() + { + this.emoteFarmer(15); + } + public virtual void emote_Embarrased() + { + this.emoteFarmer_Blushing(); + } + + /// /// Ends the current event by fading out, then resumes the game world and places the player on the square where they entered the zone. All end parameters do this by default unless otherwise stated. /// diff --git a/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/JojaMember.cs b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/JojaMember.cs new file mode 100644 index 00000000..46b73b7b --- /dev/null +++ b/GeneralMods/StardustCore/Events/Preconditions/PlayerSpecific/JojaMember.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Events.Preconditions.PlayerSpecific +{ + public class JojaMember:EventPrecondition + { + + public bool isMember; + + public JojaMember() + { + + } + + public JojaMember(bool IsMember) + { + this.isMember = IsMember; + } + + public override bool meetsCondition() + { + if (this.isMember) + { + return Game1.player.mailReceived.Contains("JojaMember") == true; + } + else + { + return Game1.player.mailReceived.Contains("JojaMember") == false; + } + } + } +} diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index 641f2bdb..e276892e 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -115,6 +115,7 @@ + @@ -162,6 +163,7 @@ + diff --git a/GeneralMods/StardustCore/Utilities/PlayerExtensions.cs b/GeneralMods/StardustCore/Utilities/PlayerExtensions.cs new file mode 100644 index 00000000..34a2c72a --- /dev/null +++ b/GeneralMods/StardustCore/Utilities/PlayerExtensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace StardustCore.Utilities +{ + public static class PlayerExtensions + { + public static bool CanReadJunimo(this Farmer Farmer) + { + return Farmer.mailReceived.Contains("canReadJunimoText"); + } + + + } +} From 3da95865a356b51aff1bc6553b78b7223502a590 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 15:18:23 -0800 Subject: [PATCH 39/52] Finished the skeleton of the CC_Junimo birthday event and added in trnaslated string spots for the junimo birthday letter. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 14 +++++++++++++- .../HappyBirthday/Framework/BirthdayEvents.cs | 5 +++-- GeneralMods/HappyBirthday/HappyBirthday.cs | 16 ++++------------ GeneralMods/StardustCore/Events/EventManager.cs | 1 + .../StardustCore/Events/EventStartData.cs | 3 ++- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 312a4d19..134e98d5 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -139,6 +139,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", + ["Mail:birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", ["Season"] ="Season", @@ -149,6 +150,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -158,6 +160,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "ƒорогой @,^ — днем рождени¤, мо¤ радость. Ёто были замечательные моменты, когда ты выростал в доброго, трудолюбивого человека. я надеюсь, в твоей жизни будет куча превосходных моментов. ^ — любовью, мама ^ P.S. «десь находить небольшой подарок, который ¤ сделала дл¤ теб¤. %item object 221 1 %%", ["Mail:birthdayDad"] = "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", ["Season"] = "Season", @@ -167,6 +170,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "亲爱的@,^ 生日快乐宝贝。看着你成长成为一个善良努力的人,就如我一直梦想着你成为的样子,我感到十分欣喜。我希望你能继续跟你爱的人制造更多美好的回忆。 ^ 爱你的,妈妈 ^ 附言:这是我给你做的一点小礼物。 %item object 221 1 %%", ["Mail:birthdayDad"] = "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -176,6 +180,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -185,6 +190,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -194,6 +200,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -203,6 +210,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -212,6 +220,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -221,6 +230,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -230,6 +240,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -239,6 +250,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -248,6 +260,7 @@ namespace Omegasis.HappyBirthday { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", + ["Mail:birthdayJunimos"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", @@ -296,7 +309,6 @@ namespace Omegasis.HappyBirthday if (!Directory.Exists(basePath)) { Directory.CreateDirectory(basePath); - HappyBirthday.ModMonitor.Log("Create dir1: " + basePath, LogLevel.Info); } string tempBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("BirthdayWishes", translation.Key)); string tempSpouseBirthdayFile = Path.Combine("Content", "Dialogue", HappyBirthday.Config.translationInfo.getFileExtentionForDirectory(translation.Key), HappyBirthday.Config.translationInfo.getJSONForTranslation("SpouseBirthdayWishes", translation.Key)); diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 8781ae56..3e4edb98 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -20,7 +20,7 @@ namespace Omegasis.HappyBirthday.Framework /// Creates the junimo birthday party event. /// /// - public static EventHelper CommunityCenterBirthday() + public static EventHelper CommunityCenterJunimoBirthday() { List conditions = new List(); conditions.Add(new FarmerBirthdayPrecondition()); @@ -28,8 +28,9 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new TimePrecondition(600, 2600)); conditions.Add(new CanReadJunimo()); conditions.Add(new StardustCore.Events.Preconditions.PlayerSpecific.JojaMember(false)); + conditions.Add(new CommunityCenterCompleted(false)); //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. - EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData(EventStartData.MusicToPlayType.Continue, 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); + EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData("playful", 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 14), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 3ce7cbac..a9afc6ca 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -110,11 +110,6 @@ namespace Omegasis.HappyBirthday if (e.NewLocation == Game1.getLocationFromName("CommunityCenter")) { EventHelper eve=this.eventManager.getEvent("CommunityCenterBirthday"); - this.Monitor.Log("Birthday event can occur: " + eve.canEventOccur(), LogLevel.Info); - - - this.Monitor.Log("Birthday event info: " + eve.getEventString(), LogLevel.Info); - eve.startEventAtLocationifPossible(); } } @@ -140,12 +135,9 @@ namespace Omegasis.HappyBirthday { IDictionary data = asset.AsDictionary().Data; - string momMail = BirthdayMessages.GetTranslatedString("Mail:birthdayMom"); - string dadMail = BirthdayMessages.GetTranslatedString("Mail:birthdayDad"); - - data["birthdayMom"] = momMail; - data["birthdayDad"] = dadMail; - data["birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos"; + data["birthdayMom"] = BirthdayMessages.GetTranslatedString("Mail:birthdayMom"); + data["birthdayDad"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDad"); + data["birthdayJunimos"] = BirthdayMessages.GetTranslatedString("Mail:birthdayJunimos"); } @@ -559,7 +551,7 @@ namespace Omegasis.HappyBirthday MultiplayerSupport.SendBirthdayInfoToOtherPlayers(); } - this.eventManager.addEvent(BirthdayEvents.CommunityCenterBirthday()); + this.eventManager.addEvent(BirthdayEvents.CommunityCenterJunimoBirthday()); if (Game1.player.mailReceived.Contains("birthdayMom")) { Game1.player.mailReceived.Remove("birthdayMom"); diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index b3f9be88..cff5fe2c 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -125,6 +125,7 @@ namespace StardustCore.Events { if (this.events.ContainsKey(EventName)) { + if (Game1.eventUp == true) return; this.concurrentEventActions.Clear(); //Clean all old parallel actions before starting a new event. this.events[EventName].startEventAtLocationifPossible(); } diff --git a/GeneralMods/StardustCore/Events/EventStartData.cs b/GeneralMods/StardustCore/Events/EventStartData.cs index 3434291a..4d0df18f 100644 --- a/GeneralMods/StardustCore/Events/EventStartData.cs +++ b/GeneralMods/StardustCore/Events/EventStartData.cs @@ -165,7 +165,8 @@ namespace StardustCore.Events this.builder = new StringBuilder(); this.add(SongToPlay); this.add(CameraTileX.ToString()); - this.add(CameraTileY.ToString()); + this.builder.Append(" "); + this.builder.Append(CameraTileY.ToString()); StringBuilder npcData = new StringBuilder(); if (Farmer != null) From fe794e78614e5baf3ac133a1bf7a83880c906e94 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 15:26:16 -0800 Subject: [PATCH 40/52] Made it where birthday events can repeat. --- GeneralMods/HappyBirthday/HappyBirthday.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index a9afc6ca..30c172ad 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -551,7 +551,6 @@ namespace Omegasis.HappyBirthday MultiplayerSupport.SendBirthdayInfoToOtherPlayers(); } - this.eventManager.addEvent(BirthdayEvents.CommunityCenterJunimoBirthday()); if (Game1.player.mailReceived.Contains("birthdayMom")) { Game1.player.mailReceived.Remove("birthdayMom"); @@ -564,6 +563,14 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayJunimos"); } + + + EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); + this.eventManager.addEvent(communityCenterJunimoBirthday); + if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) + { + Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). From e4913d97203aa55a5ddd92ec6786b054d6c29874 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 19:13:30 -0800 Subject: [PATCH 41/52] Got junimos to walk in circles. ._. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 67 ++++++-- .../HappyBirthday/Framework/BirthdayEvents.cs | 42 +++-- .../StardustCore/Events/EventHelper.cs | 75 +++++++-- .../Events/EventHelperExtensions.cs | 86 +++++++++- .../StardustCore/Events/EventManager.cs | 4 + .../StardustCore/Events/ExtraEventActions.cs | 90 +++++++++++ GeneralMods/StardustCore/StardustCore.csproj | 1 + .../Utilities/JunimoAdvanceMoveData.cs | 151 ++++++++++++++++++ 8 files changed, 481 insertions(+), 35 deletions(-) create mode 100644 GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 134e98d5..10c20680 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -142,8 +142,11 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", - ["Season"] ="Season", - ["Date"]="Date" + ["Season"] = "Season", + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "It looks like the junimos wanted to throw you a party!", + ["Event:JunimoBirthdayParty_1"] = "It looks like there was some cake left over too!", + ["Event:JunimoBirthdayParty_2"] = "That was a fun party. Back to work!" }, [StardewValley.LocalizedContentManager.LanguageCode.ja] = new Dictionary() @@ -154,7 +157,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ru] = new Dictionary() { @@ -164,7 +170,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.zh] = new Dictionary() { @@ -174,7 +183,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() { @@ -184,7 +196,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() { @@ -194,7 +209,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() { @@ -204,7 +222,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() { @@ -214,7 +235,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.fr] = new Dictionary() { @@ -224,7 +248,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ko] = new Dictionary() { @@ -234,7 +261,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.it] = new Dictionary() { @@ -244,7 +274,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.tr] = new Dictionary() { @@ -254,7 +287,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.hu] = new Dictionary() { @@ -264,7 +300,10 @@ namespace Omegasis.HappyBirthday ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", - ["Date"] = "Date" + ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "", + ["Event:JunimoBirthdayParty_1"] = "", + ["Event:JunimoBirthdayParty_2"] = "" }, }; diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 3e4edb98..dde74403 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -30,14 +30,36 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.PlayerSpecific.JojaMember(false)); conditions.Add(new CommunityCenterCompleted(false)); //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. - EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData("playful", 32, 16, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); + EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData("playful", 32, 12, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); - e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 14), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); - e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); - e.AddInJunimoActor("Juni3", new Microsoft.Xna.Framework.Vector2(34, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 10), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni3", new Microsoft.Xna.Framework.Vector2(34, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni4", new Microsoft.Xna.Framework.Vector2(26, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni5", new Microsoft.Xna.Framework.Vector2(28, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni6Tank", new Vector2(38, 10), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddJunimoAdvanceMoveTiles(new StardustCore.Utilities.JunimoAdvanceMoveData("Juni6Tank", new List() + { + new Point(38,10), + new Point(38,11), + new Point(39,11), + new Point(40,11), + new Point(41,11), + new Point(42,11), + new Point(42,10), + new Point(41,10), + new Point(40,10), + new Point(39,10), + + }, 60, 1, true)); ; + + e.FlipJunimoActor("Juni5", true); + e.junimoFaceDirection("Juni4", EventHelper.FacingDirection.Right); //Make a junimo face right. + e.junimoFaceDirection("Juni5", EventHelper.FacingDirection.Left); e.globalFadeIn(); - e.moveFarmerUp(6, EventHelper.FacingDirection.Up, true); + + e.moveFarmerUp(10, EventHelper.FacingDirection.Up, true); //e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); e.animate("Juni", true, true, 250, new List() @@ -48,17 +70,17 @@ namespace Omegasis.HappyBirthday.Framework 31 }); - // + e.junimoFaceDirection("Juni4", EventHelper.FacingDirection.Down); + e.junimoFaceDirection("Juni5", EventHelper.FacingDirection.Down); e.playSound("junimoMeep1"); - // e.emoteFarmer_ExclamationMark(); - e.showMessage("It looks like the junimos wanted to throw you a party!"); //TODO get this from translated strings. NOT hard coded. + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_0")); e.emoteFarmer_Heart(); e.globalFadeOut(0.010); e.setViewportPosition(-100, -100); - e.showMessage("It looks like there was some cake left over too!");//TODO get this from translated strings. NOT hard coded. - e.showMessage("That was a fun party. Back to work!");//TODO get this from translated strings. NOT hard coded. + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_1")); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_2")); e.addObjectToPlayersInventory(220, 1, false); e.end(); diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index 73204d21..8fbba693 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -622,6 +622,30 @@ namespace StardustCore.Events this.add(b); } + public virtual void advanceMove(string Actor, bool Loop, List TilePoints) + { + StringBuilder b = new StringBuilder(); + b.Append("advancedMove "); + b.Append(Actor); + b.Append(" "); + b.Append(Loop.ToString()); + b.Append(" "); + for (int i = 0; i < TilePoints.Count; i++) + { + b.Append(TilePoints[i].X); + b.Append(" "); + b.Append(TilePoints[i].Y); + if (i != TilePoints.Count - 1) + { + b.Append(" "); + } + } + + ModCore.ModMonitor.Log(b.ToString(), StardewModdingAPI.LogLevel.Info); + + this.add(b); + } + /// /// Modifies the ambient light level, with RGB values from 0 to 255. Note that it works by removing colors from the existing light ambience, so ambientLight 1 80 80 would reduce green and blue and leave the light with a reddish hue. /// @@ -1192,25 +1216,56 @@ namespace StardustCore.Events } public virtual void playerFaceDirection(FacingDirection Dir) + { + this.actorFaceDirection("farmer",Dir); + } + + public virtual void npcFaceDirection(NPC NPC, FacingDirection Dir) + { + this.actorFaceDirection(NPC.Name, Dir); + } + + public virtual void actorFaceDirection(string Actor, FacingDirection Dir) { StringBuilder b = new StringBuilder(); - b.Append("faceDirection farmer "); + b.Append("faceDirection "); + b.Append(Actor); + b.Append(" "); b.Append(this.getFacingDirectionNumber(Dir).ToString()); b.Append(" "); b.Append(true); this.add(b); } - public virtual void npcFaceDirection(NPC NPC, FacingDirection Dir) + + /// + /// Special code to make junimos face a direction because it doesn't work the same as npcs. + /// + /// The name of the junimo actor. + /// The direction for the junimo to face. + public virtual void junimoFaceDirection(string Actor,FacingDirection Dir) { - StringBuilder b = new StringBuilder(); - b.Append("faceDirection "); - b.Append(NPC.Name); - b.Append(" "); - b.Append(this.getFacingDirectionNumber(Dir).ToString()); - b.Append(" "); - b.Append(true); - this.add(b); + this.actorFaceDirection(Actor, Dir); + int frame = 0; + bool flip = false; + if(Dir.Equals(FacingDirection.Down)) + { + frame = 0; + } + else if(Dir.Equals(FacingDirection.Left)) + { + frame = 16; + flip = true; + } + else if (Dir.Equals(FacingDirection.Right)) + { + frame = 16; + } + else if(Dir.Equals(FacingDirection.Up)) + { + frame = 32; + } + this.animate(Actor, flip, true, 250, new List() { frame, frame }); } /// diff --git a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs index 7a48ecd8..1f8cfdea 100644 --- a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs +++ b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.Xna.Framework; using StardewValley; using StardewValley.Characters; +using StardustCore.Utilities; namespace StardustCore.Events { @@ -81,7 +82,7 @@ namespace StardustCore.Events /// /// /// - public static void AddInJunimoActor(this EventHelper EventHelper,string ActorName,Vector2 Position,Color Color) + public static void AddInJunimoActor(this EventHelper EventHelper,string ActorName,Vector2 Position,Color Color,bool Flipped=false) { StringBuilder b = new StringBuilder(); @@ -97,9 +98,92 @@ namespace StardustCore.Events b.Append(Color.G); b.Append(" "); b.Append(Color.B); + b.Append(" "); + b.Append(Flipped); EventHelper.add(b); } + public static void FlipJunimoActor(this EventHelper EventHelper, string ActorName,bool Flipped = false) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.FlipJunimoActor "); + b.Append(ActorName); + b.Append(" "); + b.Append(Flipped); + EventHelper.add(b); + } + public static void SetUpJunimoAdvanceMove(this EventHelper EventHelper) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.SetUpAdvanceJunimoMovement"); + EventHelper.add(b); + } + + public static void FinishJunimoAdvanceMove(this EventHelper EventHelper) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.FinishAdvanceJunimoMovement"); + EventHelper.add(b); + } + + public static void AddJunimoAdvanceMove(this EventHelper EventHelper, JunimoAdvanceMoveData JunimoData) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.AddInJunimoAdvanceMove "); + + b.Append(JunimoData.junimoActorID); + b.Append(" "); + b.Append(JunimoData.maxFrames); + b.Append(" "); + b.Append(JunimoData.tickSpeed); + b.Append(" "); + b.Append(JunimoData.loop); + b.Append(" "); + for (int i = 0; i < JunimoData.points.Count; i++) + { + b.Append(JunimoData.points[i].X); + b.Append("_"); + b.Append(JunimoData.points[i].Y); + if (i != JunimoData.points.Count - 1) + { + b.Append(" "); + } + } + + EventHelper.add(b); + } + + /// + /// Same as above but allows for smaller tile position numbers instead. + /// + /// + /// + public static void AddJunimoAdvanceMoveTiles(this EventHelper EventHelper, JunimoAdvanceMoveData JunimoData) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.AddInJunimoAdvanceMove "); + + b.Append(JunimoData.junimoActorID); + b.Append(" "); + b.Append(JunimoData.maxFrames); + b.Append(" "); + b.Append(JunimoData.tickSpeed); + b.Append(" "); + b.Append(JunimoData.loop); + b.Append(" "); + for (int i = 0; i < JunimoData.points.Count; i++) + { + b.Append(JunimoData.points[i].X*Game1.tileSize); + b.Append("_"); + b.Append(JunimoData.points[i].Y * Game1.tileSize); + if (i != JunimoData.points.Count - 1) + { + b.Append(" "); + } + } + + EventHelper.add(b); + } } } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index cff5fe2c..207c439a 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -31,6 +31,10 @@ namespace StardustCore.Events this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); this.customEventLogic.Add("Omegasis.EventFramework.AddInJunimoActor", ExtraEventActions.AddInJumimoActorForEvent); + this.customEventLogic.Add("Omegasis.EventFramework.FlipJunimoActor", ExtraEventActions.FlipJunimoActor); + this.customEventLogic.Add("Omegasis.EventFramework.SetUpAdvanceJunimoMovement", ExtraEventActions.SetUpAdvanceJunimoMovement); + this.customEventLogic.Add("Omegasis.EventFramework.FinishAdvanceJunimoMovement", ExtraEventActions.FinishAdvanceJunimoMovement); + this.customEventLogic.Add("Omegasis.EventFramework.AddInJunimoAdvanceMove", ExtraEventActions.AddInJunimoAdvanceMove); } /// diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index 6019652d..cd5e986f 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -8,6 +8,7 @@ using Netcode; using StardewModdingAPI; using StardewValley; using StardewValley.Characters; +using StardustCore.Utilities; namespace StardustCore.Events { @@ -21,6 +22,8 @@ namespace StardustCore.Events private static bool StartedLerp; private static int CurrentViewportLerpAmount; + public static Dictionary junimoLerpData = new Dictionary(); + /// /// Adds the item from Game1.ObjectInformation to the player's inventory from the given event string. /// @@ -102,11 +105,13 @@ namespace StardustCore.Events int xPos = Convert.ToInt32(splits[2]); int yPos = Convert.ToInt32(splits[3]); Color color = new Color(Convert.ToInt32(splits[4]), Convert.ToInt32(splits[5]), Convert.ToInt32(splits[6])); + bool flipped = Convert.ToBoolean(splits[7]); List actors = Game1.CurrentEvent.actors; Junimo junimo = new Junimo(new Vector2(xPos * 64, yPos * 64), -1, false); junimo.Name = actorName; junimo.EventActor = true; + junimo.flip = flipped; IReflectedField colorF=StardustCore.ModCore.ModHelper.Reflection.GetField(junimo, "color", true); NetColor c = colorF.GetValue(); @@ -118,5 +123,90 @@ namespace StardustCore.Events actors.Add((NPC)junimo); ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; } + + /// + /// Flip a given junimo actor. Necessary to make junimos face left. + /// + /// + /// + public static void FlipJunimoActor(EventManager EventManager, string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + string actorName = splits[1]; + bool flipped = Convert.ToBoolean(splits[2]); + NPC junimo=Game1.CurrentEvent.actors.Find(i => i.Name.Equals(actorName)); + junimo.flip = flipped; + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + } + + /// + /// Adds the concurrent event to handle junimo movement. + /// + /// + /// + public static void SetUpAdvanceJunimoMovement(EventManager EventManager, string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + EventManager.addConcurrentEvent(new ConcurrentEventInformation("AdvanceJunimoMove", "", EventManager, AdvanceJunimoMovement)); + } + + /// + /// Finishes handling advvance junimo movement. + /// + /// + /// + public static void FinishAdvanceJunimoMovement(EventManager EventManager, string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + EventManager.finishConcurrentEvent("AdvanceJunimoMove"); + } + + public static void AddInJunimoAdvanceMove(EventManager EventManager, string EventData) + { + + if (EventManager.concurrentEventActions.ContainsKey("Omegasis.EventFramework.SetUpAdvanceJunimoMovement")==false) + { + EventManager.addConcurrentEvent(new ConcurrentEventInformation("AdvanceJunimoMove", "", EventManager, AdvanceJunimoMovement)); + } + string[] splits = EventData.Split(' '); + string name = splits[0]; + + string actorName = splits[1]; + int MaxFrames = Convert.ToInt32(splits[2]); + int Speed = Convert.ToInt32(splits[3]); + bool Loop = Convert.ToBoolean(splits[4]); + + List points = new List(); + for(int i = 5; i < splits.Length; i++) + { + string pointData = splits[i]; + string[] point = pointData.Split('_'); + int x = Convert.ToInt32(point[0]); + int y = Convert.ToInt32(point[1]); + points.Add(new Point(x, y)); + } + + junimoLerpData.Add(actorName, new JunimoAdvanceMoveData(actorName,points,MaxFrames,Speed,Loop)); + + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + } + + /// + /// Updates all of the junimo movement logic. + /// + /// + /// + public static void AdvanceJunimoMovement(EventManager EventManager, string EventData) + { + foreach(KeyValuePair pair in junimoLerpData) + { + pair.Value.update(); + } + } } } diff --git a/GeneralMods/StardustCore/StardustCore.csproj b/GeneralMods/StardustCore/StardustCore.csproj index e276892e..2dd75a66 100644 --- a/GeneralMods/StardustCore/StardustCore.csproj +++ b/GeneralMods/StardustCore/StardustCore.csproj @@ -163,6 +163,7 @@ + diff --git a/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs b/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs new file mode 100644 index 00000000..9e0f4a57 --- /dev/null +++ b/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using StardewValley; +using StardewValley.Characters; + +namespace StardustCore.Utilities +{ + public class JunimoAdvanceMoveData + { + public string junimoActorID; + public int maxFrames; + public int tickSpeed; + public bool loop; + public List points; + + + private int currentIndex; + private int currentFrameAmount; + private bool finished; + + public JunimoAdvanceMoveData() + { + + } + + public JunimoAdvanceMoveData(string Actor, List Points, int FramesToPoint, int tickSpeed = 1,bool Loop=false) + { + this.junimoActorID = Actor; + this.points = Points; + this.maxFrames = FramesToPoint; + + this.tickSpeed = tickSpeed; + this.currentFrameAmount = 0; + this.currentIndex = 0; + this.loop = Loop; + } + + public void update() + { + if (Game1.CurrentEvent == null) return; + else + { + if (this.finished) return; + Junimo junimo=(Junimo)Game1.CurrentEvent.actors.Find(i => i.Name.Equals(this.junimoActorID)); + if (junimo == null) return; + Point nextPoint = this.getNextPoint(); + if (this.finished) return; + + if (nextPoint.X > this.getCurrentPoint().X) + { + junimo.flip = false; + + //junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); + if (junimo.Sprite.CurrentAnimation==null) + { + junimo.Sprite.Animate(Game1.currentGameTime, 16, 7, 50f); + } + } + if (nextPoint.X < this.getCurrentPoint().X) + { + junimo.flip = true; + + //junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); + if (junimo.Sprite.CurrentAnimation== null) + { + junimo.Sprite.Animate(Game1.currentGameTime, 16, 7 , 50f); + } + } + if (nextPoint.Y < this.getCurrentPoint().Y) + { + junimo.flip = false; + + //junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); + if (junimo.Sprite.CurrentAnimation == null) + { + junimo.Sprite.Animate(Game1.currentGameTime, 32, 8, 50f); + } + } + if(nextPoint.Y > this.getCurrentPoint().Y) + { + junimo.flip = false; + + if (junimo.Sprite.CurrentAnimation==null) { + junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); + } + } + + + + junimo.Position= Vector2.Lerp(new Vector2(this.getCurrentPoint().X,this.getCurrentPoint().Y),new Vector2(nextPoint.X,nextPoint.Y),(float)((float)this.currentFrameAmount/(float)this.maxFrames)); + + ++this.currentFrameAmount; + + if (this.currentFrameAmount >= this.maxFrames) + { + this.currentFrameAmount = 0; + this.currentIndex++; + junimo.Sprite.StopAnimation(); + if (this.currentIndex >= this.points.Count) + { + if (this.loop == false) + { + this.finished = true; + } + else + { + this.currentIndex = 0; + } + } + } + } + } + + Point getNextPoint() + { + if (this.currentIndex+1 >= this.points.Count) + { + if (this.loop == false) + { + this.finished=true; + return new Point(0, 0); + } + return this.points[0]; + } + else + { + return this.points[this.currentIndex+1]; + } + + } + + + Point getCurrentPoint() + { + if (this.currentIndex >= this.points.Count) + { + return this.points[0]; + } + else + { + return this.points[this.currentIndex]; + } + + } + + } +} From 765e0860ced43e1502d8d15b8e4e1b1359d241a2 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 19:38:13 -0800 Subject: [PATCH 42/52] Finished the junimo birthday event. --- .../HappyBirthday/Framework/BirthdayEvents.cs | 27 ++++++++++++++----- .../Events/EventHelperExtensions.cs | 10 +++++++ .../StardustCore/Events/EventManager.cs | 1 + .../StardustCore/Events/ExtraEventActions.cs | 18 +++++++++++++ .../Utilities/JunimoAdvanceMoveData.cs | 4 +-- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index dde74403..43e6219b 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -38,6 +38,8 @@ namespace Omegasis.HappyBirthday.Framework e.AddInJunimoActor("Juni4", new Microsoft.Xna.Framework.Vector2(26, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddInJunimoActor("Juni5", new Microsoft.Xna.Framework.Vector2(28, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddInJunimoActor("Juni6Tank", new Vector2(38, 10), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni7", new Vector2(27, 16), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); + e.AddInJunimoActor("Juni8", new Vector2(40, 15), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddJunimoAdvanceMoveTiles(new StardustCore.Utilities.JunimoAdvanceMoveData("Juni6Tank", new List() { new Point(38,10), @@ -56,12 +58,7 @@ namespace Omegasis.HappyBirthday.Framework e.FlipJunimoActor("Juni5", true); e.junimoFaceDirection("Juni4", EventHelper.FacingDirection.Right); //Make a junimo face right. e.junimoFaceDirection("Juni5", EventHelper.FacingDirection.Left); - - e.globalFadeIn(); - - e.moveFarmerUp(10, EventHelper.FacingDirection.Up, true); - - //e.moveActorLeft("Juni", 1, EventHelper.FacingDirection.Down, false); + e.junimoFaceDirection("Juni7", EventHelper.FacingDirection.Down); e.animate("Juni", true, true, 250, new List() { 28, @@ -69,11 +66,29 @@ namespace Omegasis.HappyBirthday.Framework 30, 31 }); + e.animate("Juni7", false, true, 250, new List() + { + 44,45,46,47 + }); + e.animate("Juni8", false, true, 250, new List() + { + 12,13,14,15 + }); + + e.globalFadeIn(); + + e.moveFarmerUp(10, EventHelper.FacingDirection.Up, true); e.junimoFaceDirection("Juni4", EventHelper.FacingDirection.Down); e.junimoFaceDirection("Juni5", EventHelper.FacingDirection.Down); + e.RemoveJunimoAdvanceMove("Juni6Tank"); + e.junimoFaceDirection("Juni6Tank", EventHelper.FacingDirection.Down); + e.junimoFaceDirection("Juni7", EventHelper.FacingDirection.Right); + e.FlipJunimoActor("Juni8",true); + e.junimoFaceDirection("Juni8", EventHelper.FacingDirection.Left); e.playSound("junimoMeep1"); + e.emoteFarmer_ExclamationMark(); e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_0")); e.emoteFarmer_Heart(); diff --git a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs index 1f8cfdea..a20a1928 100644 --- a/GeneralMods/StardustCore/Events/EventHelperExtensions.cs +++ b/GeneralMods/StardustCore/Events/EventHelperExtensions.cs @@ -185,5 +185,15 @@ namespace StardustCore.Events EventHelper.add(b); } + + public static void RemoveJunimoAdvanceMove(this EventHelper EventHelper, string ActorName) + { + StringBuilder b = new StringBuilder(); + b.Append("Omegasis.EventFramework.RemoveJunimoAdvanceMove "); + b.Append(ActorName); + b.Append(" "); + EventHelper.add(b); + } + } } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 207c439a..0f5aac6d 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -35,6 +35,7 @@ namespace StardustCore.Events this.customEventLogic.Add("Omegasis.EventFramework.SetUpAdvanceJunimoMovement", ExtraEventActions.SetUpAdvanceJunimoMovement); this.customEventLogic.Add("Omegasis.EventFramework.FinishAdvanceJunimoMovement", ExtraEventActions.FinishAdvanceJunimoMovement); this.customEventLogic.Add("Omegasis.EventFramework.AddInJunimoAdvanceMove", ExtraEventActions.AddInJunimoAdvanceMove); + this.customEventLogic.Add("Omegasis.EventFramework.RemoveJunimoAdvanceMove", ExtraEventActions.RemoveAdvanceJunimoMovement); } /// diff --git a/GeneralMods/StardustCore/Events/ExtraEventActions.cs b/GeneralMods/StardustCore/Events/ExtraEventActions.cs index cd5e986f..5890bb68 100644 --- a/GeneralMods/StardustCore/Events/ExtraEventActions.cs +++ b/GeneralMods/StardustCore/Events/ExtraEventActions.cs @@ -208,5 +208,23 @@ namespace StardustCore.Events pair.Value.update(); } } + + /// + /// Removes, aka stops the junimo actor from doing their advance movement. + /// + /// + /// + public static void RemoveAdvanceJunimoMovement(EventManager EventManager, string EventData) + { + string[] splits = EventData.Split(' '); + string name = splits[0]; + string actorName = splits[1]; + if (junimoLerpData.ContainsKey(actorName)) + { + junimoLerpData.Remove(actorName); + } + + ++Game1.CurrentEvent.CurrentCommand; //I've been told ++ is more efficient than ++; + } } } diff --git a/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs b/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs index 9e0f4a57..49cd00c3 100644 --- a/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs +++ b/GeneralMods/StardustCore/Utilities/JunimoAdvanceMoveData.cs @@ -57,7 +57,7 @@ namespace StardustCore.Utilities //junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); if (junimo.Sprite.CurrentAnimation==null) { - junimo.Sprite.Animate(Game1.currentGameTime, 16, 7, 50f); + junimo.Sprite.Animate(Game1.currentGameTime, 16, 8, 50f); } } if (nextPoint.X < this.getCurrentPoint().X) @@ -67,7 +67,7 @@ namespace StardustCore.Utilities //junimo.Sprite.Animate(Game1.currentGameTime, 0, 8, 50f); if (junimo.Sprite.CurrentAnimation== null) { - junimo.Sprite.Animate(Game1.currentGameTime, 16, 7 , 50f); + junimo.Sprite.Animate(Game1.currentGameTime, 16, 8, 50f); } } if (nextPoint.Y < this.getCurrentPoint().Y) From 4c4fc7900b448fb0a0371658b946a71353409482 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 6 Dec 2019 20:59:05 -0800 Subject: [PATCH 43/52] Fixed a bunch of npc event issues. Also finished the penny dating party. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 39 ++++++--- .../Dialogue/en-US/BirthdayWishes.json | 35 -------- .../Dialogue/en-US/SpouseBirthdayWishes.json | 14 ---- .../Dialogue/en-US/TranslatedStrings.json | 8 -- .../HappyBirthday/Framework/BirthdayEvents.cs | 55 ++++++++++++- .../Framework/TranslationInfo.cs | 2 +- GeneralMods/HappyBirthday/HappyBirthday.cs | 24 ++++++ .../HappyBirthday/HappyBirthday.csproj | 80 ------------------- .../StardustCore/Events/EventHelper.cs | 2 + .../StardustCore/Events/EventStartData.cs | 11 ++- 10 files changed, 116 insertions(+), 154 deletions(-) delete mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json delete mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json delete mode 100644 GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 10c20680..0d9841dc 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -140,13 +140,14 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayMom"] = "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos", + ["Mail:birthdayDatingPenny"] = "Dear @. ^ My mom and I decided to have a little birthday party for you. Could you come by sometime today?^Sincerly,^ -Penny", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "It looks like the junimos wanted to throw you a party!", ["Event:JunimoBirthdayParty_1"] = "It looks like there was some cake left over too!", - ["Event:JunimoBirthdayParty_2"] = "That was a fun party. Back to work!" + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, [StardewValley.LocalizedContentManager.LanguageCode.ja] = new Dictionary() @@ -154,156 +155,168 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ru] = new Dictionary() { ["Mail:birthdayMom"] = "ƒорогой @,^ — днем рождени¤, мо¤ радость. Ёто были замечательные моменты, когда ты выростал в доброго, трудолюбивого человека. я надеюсь, в твоей жизни будет куча превосходных моментов. ^ — любовью, мама ^ P.S. «десь находить небольшой подарок, который ¤ сделала дл¤ теб¤. %item object 221 1 %%", ["Mail:birthdayDad"] = "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.zh] = new Dictionary() { ["Mail:birthdayMom"] = "亲爱的@,^ 生日快乐宝贝。看着你成长成为一个善良努力的人,就如我一直梦想着你成为的样子,我感到十分欣喜。我希望你能继续跟你爱的人制造更多美好的回忆。 ^ 爱你的,妈妈 ^ 附言:这是我给你做的一点小礼物。 %item object 221 1 %%", ["Mail:birthdayDad"] = "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.fr] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ko] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.it] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.tr] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.hu] = new Dictionary() { ["Mail:birthdayMom"] = "", ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", + ["Mail:birthdayDatingPenny"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", - ["Event:JunimoBirthdayParty_2"] = "" + ["Event:PartyOver"] = "" }, }; diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json deleted file mode 100644 index e1dfa037..00000000 --- a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/BirthdayWishes.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Robin": "Hey, @, happy birthday! I'm really glad you decided to move to the valley. ", - "Demetrius": "Happy birthday, @! Make sure you take some time off today to enjoy yourself. $h", - "Maru": "Happy birthday, @. I tried to make an everlasting candle for you, but sadly that didn't work out. Maybe next year, right? $h", - "Sebastian": "Happy birthday, @. Hope things are going well down at the farm.", - "Linus": "Happy birthday, @. Thanks for visiting me even on your birthday. It makes me really happy. ", - "Pierre": "Hey @, happy birthday! Hopefully this next year will be a great one for you! ", - "Caroline": "Happy birthday, @. Thank you for all that you've done for our community. I'm sure your parents must be proud of you.$h", - "Abigail": "Happy birthday, @! Hopefully this year we can go on even more adventures together $h!", - "Alex": "Yo @, happy birthday! Here's to making this the best year yet!$h", - "George": "When you get to my age, birthdays start to come and go. Still, happy birthday, @.", - "Evelyn": "Happy birthday, @. You have grown into such a fine individual, and I'm sure your grandfather would be proud to see who you've become. ", - "Lewis": "Happy birthday, @! I really appreciate everything you've done for the town. Keep up the good work.", - "Clint": "Hey, happy birthday, @. I'm sure this year is going to be great for you.", - "Penny": "Happy birthday, @. May you enjoy all of life's blessings this year. ", - "Pam": "Happy birthday, kid. We should have a drink to celebrate another year of life for you! $h", - "Emily": "Happy birthday, @! I can see your future shining bright.$h", - "Haley": "Happy birthday, @. Hopefully this year you'll get some good presents!$h", - "Jas": "Happy birthday, @. I'm glad I decided to get to know you.", - "Vincent": "Hey, @, have you come to pl... oh, it's your birthday? Happy birthday! ", - "Jodi": "Hello there, @. Rumor has it that today is your birthday. In that case, happy birthday!$h", - "Kent": "Jodi told me that it was your birthday today, @. Happy birthday, and make sure to cherish every single day.", - "Sam": "Hey @, happy birthday! We'll have to have a birthday jam session for you sometime!$h ", - "Leah": "Hey @, happy birthday! I'm glad to see you're doing well on the farm.$h ", - "Shane": "Happy birthday, @. Keep working hard, and I'm sure this next year will be a great one for you.", - "Marnie": "Hi, @! Everyone is talking about your birthday today, and I wanted to make sure that I wished you a happy birthday as well. So, happy birthday! $h ", - "Elliott": "What a wonderful day, isn't it, @? Though I'm sure it's even lovelier to you, it being your birthday!$h#$b#I was actually in the middle of writing a poem for the occasion, but a 'happy birthday' will have to suffice for now.", - "Gus": "Hey, @, happy birthday! Hopefully you enjoy the rest of the day, and make sure you aren't a stranger at the saloon!", - "Dwarf": "Happy birthday, @. Wait, humans celebrate those, right?", - "Wizard": "Happy birthday, @. Never forget that you alone make your future.#$e#How did I know? Ah, I overheard a few of the locals conferring on what gifts to give you. I think you'll appreciate them.", - "Harvey": "Happy birthday, @. Come in for a checkup sometime, alright? I want to make sure you'll see plenty more.", - "Sandy": "Aww, sweetie, you came all the way out here to see me on your birthday?$h#$b#Well, then, the least I can do is wish you a happy one!~", - "Willy": "Ahoy, @, happy birthday. Looking at you reminds me of the days when I was just a guppy myself. $bEnjoy yours while you can, young'un.$h", - "Krobus": "Happy birthday, @. I still don't quite understand humans, but I'm glad to have met you all the same." -} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json deleted file mode 100644 index 91388dd7..00000000 --- a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/SpouseBirthdayWishes.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Alex": "", - "Elliott": "", - "Harvey": "", - "Sam": "", - "Sebastian": "", - "Shane": "", - "Abigail": "", - "Emily": "", - "Haley": "", - "Leah": "", - "Maru": "", - "Penny": "" -} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json b/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json deleted file mode 100644 index d9696017..00000000 --- a/GeneralMods/HappyBirthday/Content/Dialogue/en-US/TranslatedStrings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Mail:birthdayMom": "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", - "Mail:birthdayDad": "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", - "Happy Birthday: Star Message": "It's your birthday today! Happy birthday!", - "Happy Birthday: Farmhand Birthday Message": "It's @'s birthday! Happy birthday to them!", - "Season": "Season", - "Date": "Date" -} \ No newline at end of file diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 43e6219b..4ecb9768 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -95,7 +95,7 @@ namespace Omegasis.HappyBirthday.Framework e.globalFadeOut(0.010); e.setViewportPosition(-100, -100); e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_1")); - e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_2")); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); e.addObjectToPlayersInventory(220, 1, false); e.end(); @@ -103,11 +103,62 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + public static EventHelper DatingBirthday_Penny() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("Trailer"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC penny = Game1.getCharacterFromName("Penny"); + NPC pam = Game1.getCharacterFromName("Pam"); + + //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(Game1.getCharacterFromName("Penny")); + EventHelper e = new EventHelper("BirthdayDating:Penny", 19951, conditions, new EventStartData("playful", 12, 8, new EventStartData.FarmerData(12, 9, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(penny,12,7, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(pam,15,4, EventHelper.FacingDirection.Down) + })); + + e.globalFadeIn(); + + e.moveFarmerUp(1, EventHelper.FacingDirection.Up, false); + + e.actorFaceDirection("Penny", EventHelper.FacingDirection.Down); + string starting = "Oh, @ you are here just in time!$h"; + //starting = starting.Replace("@", Game1.player.Name); + e.speak(penny, starting); + e.speak(pam, "Come on in kid. The party has just begun!$h"); + e.speak(penny, "I thought it would be nice if we threw you a small party. Granted it's not much but I hope you like it. $l"); + e.speak(pam, "Here, pull up a seat and have a beer to celebrate!"); + e.emote_Angry("Penny"); + e.speak(penny, "Mom!$a"); + e.speak(penny, "*sigh* Well make yourself at home. I'll get the cake out."); + + e.moveActorLeft("Penny", 3, EventHelper.FacingDirection.Up, true); + e.moveFarmerRight(2, EventHelper.FacingDirection.Up, false); + e.moveFarmerUp(3, EventHelper.FacingDirection.Down, false); + e.moveActorRight("Penny", 5, EventHelper.FacingDirection.Up, true); + e.moveActorUp("Penny", 1, EventHelper.FacingDirection.Up, true); + e.speak(pam, "Alright, cheers kid! Happy birthday and here is to another great year! $h"); + e.speak(penny, "Happy birthday @. Here is hoping we get to spend many more birthdays together. $l"); + + e.emoteFarmer_Heart(); + e.emote_Heart("Penny"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage("It was nice celebrating my birthday with Pam and Penny."); + e.showMessage("Looks like there was some leftover cake and beer too!"); + e.addObjectToPlayersInventory(220, 1, false); + e.addObjectToPlayersInventory(346, 1, false); + + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + + e.end(); + + return e; } + /* public static EventHelper DatingBirthday_Maru() { diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index 74c6f537..dd34ed38 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -163,7 +163,7 @@ namespace Omegasis.HappyBirthday.Framework { if (language != LanguageName.English) { - return FileName + "." + this.getFileExtentionForTranslation(language, FileType.JSON); + return FileName + this.getFileExtentionForTranslation(language, FileType.JSON); } else { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 30c172ad..708979f8 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -112,6 +112,12 @@ namespace Omegasis.HappyBirthday EventHelper eve=this.eventManager.getEvent("CommunityCenterBirthday"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("Trailer")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny"); + this.Monitor.Log(eve.getEventString(), LogLevel.Info); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -138,6 +144,7 @@ namespace Omegasis.HappyBirthday data["birthdayMom"] = BirthdayMessages.GetTranslatedString("Mail:birthdayMom"); data["birthdayDad"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDad"); data["birthdayJunimos"] = BirthdayMessages.GetTranslatedString("Mail:birthdayJunimos"); + data["birthdayDatingPenny"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingPenny"); } @@ -563,14 +570,24 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayJunimos"); } + if (Game1.player.mailReceived.Contains("birthdayDatingPenny")) + { + Game1.player.mailReceived.Remove("birthdayDatingPenny"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); + EventHelper birthdayDating_Penny = BirthdayEvents.DatingBirthday_Penny(); this.eventManager.addEvent(communityCenterJunimoBirthday); + this.eventManager.addEvent(birthdayDating_Penny); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Penny.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Penny.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -626,6 +643,13 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayMom"); Game1.player.mailbox.Add("birthdayDad"); + if (Game1.player.friendshipData.ContainsKey("Penny")) + { + if (Game1.player.friendshipData["Penny"].IsDating()){ + Game1.player.mailbox.Add("birthdayDatingPenny"); + } + } + if (Game1.player.CanReadJunimo()) { Game1.player.mailbox.Add("birthdayJunimos"); diff --git a/GeneralMods/HappyBirthday/HappyBirthday.csproj b/GeneralMods/HappyBirthday/HappyBirthday.csproj index e707d909..ea2baec0 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.csproj +++ b/GeneralMods/HappyBirthday/HappyBirthday.csproj @@ -100,86 +100,6 @@ - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - - - - - PreserveNewest - diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index 8fbba693..b111e1a2 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -1771,7 +1771,9 @@ namespace StardustCore.Events b.Append("speak "); b.Append(npc.Name); b.Append(" "); + b.Append('"'); b.Append(Message); + b.Append('"'); this.add(b); } diff --git a/GeneralMods/StardustCore/Events/EventStartData.cs b/GeneralMods/StardustCore/Events/EventStartData.cs index 4d0df18f..9efce4e6 100644 --- a/GeneralMods/StardustCore/Events/EventStartData.cs +++ b/GeneralMods/StardustCore/Events/EventStartData.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework; using StardewValley; +using static StardustCore.Events.EventHelper; namespace StardustCore.Events { @@ -40,11 +41,17 @@ namespace StardustCore.Events b.Append(" "); b.Append(this.yPosition.ToString()); b.Append(" "); - b.Append(((int)this.direction).ToString()); + b.Append(this.getFacingDirectionNumber(this.direction).ToString()); return b.ToString(); } + + protected int getFacingDirectionNumber(FacingDirection Dir) + { + return (int)Dir; + } } + /// /// Data pertaining to the farmer data for the event. /// @@ -144,6 +151,7 @@ namespace StardustCore.Events { foreach(var v in NPCS) { + npcData.Append(" "); npcData.Append(v.ToString()); } } @@ -177,6 +185,7 @@ namespace StardustCore.Events { foreach (var v in NPCS) { + npcData.Append(" "); npcData.Append(v.ToString()); } } From c69c05aa93f166e9ca671558a31eb92a3d7ba0c8 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Sat, 7 Dec 2019 17:09:40 -0800 Subject: [PATCH 44/52] Added in the events for Maru and Sebastian. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 51 ++++ .../HappyBirthday/Framework/BirthdayEvents.cs | 261 ++++++++++++++---- GeneralMods/HappyBirthday/HappyBirthday.cs | 54 +++- .../StardustCore/Events/EventHelper.cs | 68 ++--- .../Preconditions/NPCSpecific/DatingNPC.cs | 8 +- 5 files changed, 330 insertions(+), 112 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 0d9841dc..07309598 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -140,13 +140,64 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayMom"] = "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos", + + ["Mail:birthdayDatingPenny"] = "Dear @. ^ My mom and I decided to have a little birthday party for you. Could you come by sometime today?^Sincerly,^ -Penny", + ["Mail:birthdayDatingMaru"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Maru", + ["Mail:birthdayDatingSebastian"] = "Hey @. ^ Could you come by my place later? My family and I decided to have a birthday party for you to celebrate. ^^ -Sebastian", + + ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", ["Season"] = "Season", ["Date"] = "Date", + ["Event:JunimoBirthdayParty_0"] = "It looks like the junimos wanted to throw you a party!", ["Event:JunimoBirthdayParty_1"] = "It looks like there was some cake left over too!", + + ["Event:DatingPennyBirthday_Pam:0"] = "Come on in kid. The party has just begun!$h", + ["Event:DatingPennyBirthday_Pam:1"] = "Here, pull up a seat and have a beer to celebrate!", + ["Event:DatingPennyBirthday_Pam:2"] = "Alright, cheers kid! Happy birthday and here is to another great year! $h", + ["Event:DatingPennyBirthday_Penny:0"] = "Oh, @ you are here just in time!$h", + ["Event:DatingPennyBirthday_Penny:1"] = "I thought it would be nice if we threw you a small party. Granted it's not much but I hope you like it. $l", + ["Event:DatingPennyBirthday_Penny:2"] = "Mom!$a", + ["Event:DatingPennyBirthday_Penny:3"] = "*sigh* Well make yourself at home. I'll get the cake out.", + ["Event:DatingPennyBirthday_Penny:4"] = "Happy birthday @. Here is hoping we get to spend many more birthdays together. $l", + ["Event:DatingPennyBirthday_Finish:0"] = "It was nice celebrating my birthday with Pam and Penny.", + ["Event:DatingPennyBirthday_Finish:1"] = "Looks like there was some leftover cake and beer too!", + + + ["Event:DatingMaruBirthday_Demetrius:0"] = "Welcome @, come in and make yourself at home.$h", + ["Event:DatingMaruBirthday_Demetrius:1"] = "I agree. I think this party is perfecty wonderful. Besides studies show that your productivity is boosted when you have fun once in a while.$h", + ["Event:DatingMaruBirthday_Maru:0"] = "Ohh @, you are just in time for the party.$h", + ["Event:DatingMaruBirthday_Maru:1"] = "I tried to build you a robot to help you out on your farm as a gift but I ran out of time. Hopefully I'll have it done by next year.", + ["Event:DatingMaruBirthday_Maru:2"] = "Alright, @ make a wish!", + ["Event:DatingMaruBirthday_Maru:3"] = "Happy birthday @. Hopefully this is just the beginning of many more years to come.$l", + ["Event:DatingMaruBirthday_Robin:0"] = "You know I have to agree. I think it's the thought that counts not necessarily the gift.$h", + ["Event:DatingMaruBirthday_Robin:1"] = "Oh I think the cake is ready!", + ["Event:DatingMaruBirthday_Sebastian:0"] = "You know I think just having this party is good enough. No need to go overboard.", + ["Event:DatingMaruBirthday_Sebastian:1"] = "Sweet, let's eat.", + ["Event:DatingMaruBirthday_Finish:0"] = "It was nice celebrating my birthday with Maru and her family.", + ["Event:DatingMaruBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + + + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "I agree. I think this party is perfecty wonderful. Besides studies show that your productivity is boosted when you have fun once in a while.$h", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "Alright, @ go ahead and make a wish!$h", + + ["Event:DatingSebastianBirthday_Maru:0"] = "Happy birthday @. Honestly, I'm a bit surprised that we are having this party. Sebastian never been too keen on celebrations.", + ["Event:DatingSebastianBirthday_Maru:1"] = "Oh sweet we finally get to have some cake! Let me get you the first slice @!$h", + + ["Event:DatingSebastianBirthday_Robin:0"]= "Welcome @, come in and make yourself at home.$h", + ["Event:DatingSebastianBirthday_Robin:1"] = "Hey now, I think that it's great that Sebastian wanted to have a party for @. $h", + ["Event:DatingSebastianBirthday_Robin:2"] = "Oh I think the cake is ready!", + + ["Event:DatingSebastianBirthday_Sebastian:0"] = "Hey @ you are here just in time. Mom is just finishing the cake right now. $h", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "Honestly... and they wonder why I don't do stuff like this more often.", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "Happy Birthday @. I'm glad we got to spend time like this together. $h", + ["Event:DatingSebastianBirthday_Finish:0"] = "It was nice celebrating my birthday with Sebastian and his family.", + ["Event:DatingSebastianBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 4ecb9768..f1a2e6c5 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -30,7 +30,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.PlayerSpecific.JojaMember(false)); conditions.Add(new CommunityCenterCompleted(false)); //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. - EventHelper e = new EventHelper("CommunityCenterBirthday",19950, conditions, new EventStartData("playful", 32, 12, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up),new List())); + EventHelper e = new EventHelper("CommunityCenterBirthday", 19950, conditions, new EventStartData("playful", 32, 12, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up), new List())); e.AddInJunimoActor("Juni", new Microsoft.Xna.Framework.Vector2(32, 10), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); e.AddInJunimoActor("Juni2", new Microsoft.Xna.Framework.Vector2(30, 11), StardustCore.IlluminateFramework.Colors.getRandomJunimoColor()); @@ -84,13 +84,13 @@ namespace Omegasis.HappyBirthday.Framework e.RemoveJunimoAdvanceMove("Juni6Tank"); e.junimoFaceDirection("Juni6Tank", EventHelper.FacingDirection.Down); e.junimoFaceDirection("Juni7", EventHelper.FacingDirection.Right); - e.FlipJunimoActor("Juni8",true); + e.FlipJunimoActor("Juni8", true); e.junimoFaceDirection("Juni8", EventHelper.FacingDirection.Left); e.playSound("junimoMeep1"); e.emoteFarmer_ExclamationMark(); - e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_0")); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:JunimoBirthdayParty_0")); e.emoteFarmer_Heart(); e.globalFadeOut(0.010); e.setViewportPosition(-100, -100); @@ -103,16 +103,23 @@ namespace Omegasis.HappyBirthday.Framework return e; } - + + /// + /// Birthday event for when the player is dating Penny. + /// Status: Completed. + /// + /// public static EventHelper DatingBirthday_Penny() { + + NPC penny = Game1.getCharacterFromName("Penny"); + NPC pam = Game1.getCharacterFromName("Pam"); + List conditions = new List(); conditions.Add(new FarmerBirthdayPrecondition()); conditions.Add(new LocationPrecondition(Game1.getLocationFromName("Trailer"))); conditions.Add(new TimePrecondition(600, 2600)); - - NPC penny = Game1.getCharacterFromName("Penny"); - NPC pam = Game1.getCharacterFromName("Pam"); + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(penny)); //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(Game1.getCharacterFromName("Penny")); EventHelper e = new EventHelper("BirthdayDating:Penny", 19951, conditions, new EventStartData("playful", 12, 8, new EventStartData.FarmerData(12, 9, EventHelper.FacingDirection.Up), new List() { @@ -125,30 +132,29 @@ namespace Omegasis.HappyBirthday.Framework e.moveFarmerUp(1, EventHelper.FacingDirection.Up, false); e.actorFaceDirection("Penny", EventHelper.FacingDirection.Down); - string starting = "Oh, @ you are here just in time!$h"; //starting = starting.Replace("@", Game1.player.Name); - e.speak(penny, starting); - e.speak(pam, "Come on in kid. The party has just begun!$h"); - e.speak(penny, "I thought it would be nice if we threw you a small party. Granted it's not much but I hope you like it. $l"); - e.speak(pam, "Here, pull up a seat and have a beer to celebrate!"); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:0")); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:0")); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:1")); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:1")); e.emote_Angry("Penny"); - e.speak(penny, "Mom!$a"); - e.speak(penny, "*sigh* Well make yourself at home. I'll get the cake out."); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:2")); //penny2 + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:3")); //penny3 e.moveActorLeft("Penny", 3, EventHelper.FacingDirection.Up, true); e.moveFarmerRight(2, EventHelper.FacingDirection.Up, false); e.moveFarmerUp(3, EventHelper.FacingDirection.Down, false); e.moveActorRight("Penny", 5, EventHelper.FacingDirection.Up, true); e.moveActorUp("Penny", 1, EventHelper.FacingDirection.Up, true); - e.speak(pam, "Alright, cheers kid! Happy birthday and here is to another great year! $h"); - e.speak(penny, "Happy birthday @. Here is hoping we get to spend many more birthdays together. $l"); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:2")); //pam2 + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:4"));//penny4 e.emoteFarmer_Heart(); e.emote_Heart("Penny"); e.globalFadeOut(0.010); e.setViewportPosition(-100, -100); - e.showMessage("It was nice celebrating my birthday with Pam and Penny."); - e.showMessage("Looks like there was some leftover cake and beer too!"); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Finish:0")); //penny party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Finish:1"));// penny party finish 1 e.addObjectToPlayersInventory(220, 1, false); e.addObjectToPlayersInventory(346, 1, false); @@ -158,11 +164,74 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + + /// + /// Birthday event for when the player is dating Maru. + /// Finished. + /// + /// public static EventHelper DatingBirthday_Maru() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("ScienceHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC maru = Game1.getCharacterFromName("Maru"); + NPC sebastian = Game1.getCharacterFromName("Sebastian"); + NPC robin = Game1.getCharacterFromName("Robin"); + NPC demetrius = Game1.getCharacterFromName("Demetrius"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(maru)); + + EventHelper e = new EventHelper("BirthdayDating:Maru", 19952, conditions, new EventStartData("playful", 28, 12, new EventStartData.FarmerData(23, 12, EventHelper.FacingDirection.Right), new List() { + new EventStartData.NPCData(maru,27,11, EventHelper.FacingDirection.Down), + new EventStartData.NPCData(sebastian,26,13, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(robin,28,9, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(demetrius,30,11, EventHelper.FacingDirection.Left) + })); + e.globalFadeIn(); + + e.moveFarmerRight(3, EventHelper.FacingDirection.Right, true); + e.npcFaceDirection(maru, EventHelper.FacingDirection.Left); + e.npcFaceDirection(demetrius, EventHelper.FacingDirection.Left); + //Seb is already facing up. + e.npcFaceDirection(robin, EventHelper.FacingDirection.Down); + + //Dialogue goes here. + //Seriously improve dialogue lines. Maru is probably the NPC I know the least about. + e.speak(maru, GetTranslatedString("Event:DatingMaruBirthday_Maru:0")); //maru 0 + e.speak(demetrius, GetTranslatedString("Event:DatingMaruBirthday_Demetrius:0")); //demetrius 0 + e.speak(maru, GetTranslatedString("Event:DatingMaruBirthday_Maru:1"));//Maru 1 //Spoiler she doesn't. + e.speak(sebastian, GetTranslatedString("Event:DatingMaruBirthday_Sebastian:0")); //sebastian 0 + e.speak(robin, GetTranslatedString("Event:DatingMaruBirthday_Robin:0")); //robin 0 + e.speak(demetrius, GetTranslatedString("Event:DatingMaruBirthday_Demetrius:1")); //demetrius 1 + e.emote_ExclamationMark("Robin"); + e.npcFaceDirection(robin, EventHelper.FacingDirection.Up); + e.speak(robin, GetTranslatedString("Event:DatingMaruBirthday_Robin:1")); //robin 1 + e.npcFaceDirection(robin, EventHelper.FacingDirection.Down); + e.moveActorDown("Robin", 1, EventHelper.FacingDirection.Down, false); + e.addObject(27, 12, 220); + + e.speak(maru, GetTranslatedString("Event:DatingMaruBirthday_Maru:2")); //maru 2 + e.emoteFarmer_Thinking(); + e.speak(sebastian, GetTranslatedString("Event:DatingMaruBirthday_Sebastian:1")); //Sebastian 1 + e.speak(maru, GetTranslatedString("Event:DatingMaruBirthday_Maru:3")); //maru 3 + + //Event finish commands. + e.emoteFarmer_Heart(); + e.emote_Heart("Maru"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingMaruBirthday_Finish:0")); //maru party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingMaruBirthday_Finish:1")); //maru party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + /* public static EventHelper DatingBirthday_Leah() { @@ -181,49 +250,119 @@ namespace Omegasis.HappyBirthday.Framework } public static EventHelper DatingBirthday_Sam() { - - } - public static EventHelper DatingBirthday_Sebastian() - { - - } - public static EventHelper DatingBirthday_Elliott() - { - - } - public static EventHelper DatingBirthday_Shane() - { - - } - public static EventHelper DatingBirthday_Harvey() - { - - } - - public static EventHelper DatingBirthday_Alex() - { - - } - - public static EventHelper Birthday_Krobus() - { - - } - - - public static EventHelper MarriedBirthday_NoKids() - { - - } - - public static EventHelper MarriedBirthday_OneKids() - { - - } - public static EventHelper MarriedBirthday_TwoKids() - { - + } */ + /// + /// Event that occurs when the player is dating Sebastian. + /// Status: Finished. + /// + /// + public static EventHelper DatingBirthday_Sebastian() + { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("ScienceHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC maru = Game1.getCharacterFromName("Maru"); + NPC sebastian = Game1.getCharacterFromName("Sebastian"); + NPC robin = Game1.getCharacterFromName("Robin"); + NPC demetrius = Game1.getCharacterFromName("Demetrius"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(sebastian)); + + EventHelper e = new EventHelper("BirthdayDating:Sebastian", 19952, conditions, new EventStartData("playful", 28, 12, new EventStartData.FarmerData(23, 12, EventHelper.FacingDirection.Right), new List() { + new EventStartData.NPCData(maru,27,11, EventHelper.FacingDirection.Down), + new EventStartData.NPCData(sebastian,26,13, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(robin,28,9, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(demetrius,30,11, EventHelper.FacingDirection.Left) + })); + e.globalFadeIn(); + + e.moveFarmerRight(3, EventHelper.FacingDirection.Right, true); + e.npcFaceDirection(maru, EventHelper.FacingDirection.Left); + e.npcFaceDirection(demetrius, EventHelper.FacingDirection.Left); + //Seb is already facing up. + e.npcFaceDirection(robin, EventHelper.FacingDirection.Down); + + //Dialogue goes here. + //Seriously improve dialogue lines. Maru is probably the NPC I know the least about. + e.speak(sebastian, GetTranslatedString("Event:DatingSebastianBirthday_Sebastian:0")); //sebastian 0 + e.speak(robin, GetTranslatedString("Event:DatingSebastianBirthday_Robin:0")); //maru 0 + e.speak(maru, GetTranslatedString("Event:DatingSebastianBirthday_Maru:0"));//Maru 0 + e.speak(robin, GetTranslatedString("Event:DatingSebastianBirthday_Robin:1")); //robin 0 + e.speak(demetrius, GetTranslatedString("Event:DatingSebastianBirthday_Demetrius:0")); //demetrius 0 + e.speak(sebastian, GetTranslatedString("Event:DatingSebastianBirthday_Sebastian:1")); //Sebastian 1 + e.emote_ExclamationMark("Robin"); + e.npcFaceDirection(robin, EventHelper.FacingDirection.Up); + e.speak(robin, GetTranslatedString("Event:DatingSebastianBirthday_Robin:2")); //robin 1 + e.npcFaceDirection(robin, EventHelper.FacingDirection.Down); + e.moveActorDown("Robin", 1, EventHelper.FacingDirection.Down, false); + e.addObject(27, 12, 220); + e.speak(demetrius, GetTranslatedString("Event:DatingSebastianBirthday_Demetrius:1")); //maru 2 + e.emoteFarmer_Thinking(); + e.speak(maru, GetTranslatedString("Event:DatingSebastianBirthday_Maru:1")); //maru 3 + e.speak(sebastian, GetTranslatedString("Event:DatingSebastianBirthday_Sebastian:2")); //Sebastian 1 + + //Event finish commands. + e.emoteFarmer_Heart(); + e.emote_Heart("Sebastian"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingSebastianBirthday_Finish:0")); //maru party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingSebastianBirthday_Finish:1")); //maru party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + + /* + public static EventHelper DatingBirthday_Elliott() + { + + } + public static EventHelper DatingBirthday_Shane() + { + + } + public static EventHelper DatingBirthday_Harvey() + { + + } + + public static EventHelper DatingBirthday_Alex() + { + + } + + public static EventHelper Birthday_Krobus() + { + + } + + + public static EventHelper MarriedBirthday_NoKids() + { + + } + + public static EventHelper MarriedBirthday_OneKids() + { + + } + public static EventHelper MarriedBirthday_TwoKids() + { + + } + */ + + public static string GetTranslatedString(string Key) + { + return HappyBirthday.Config.translationInfo.getTranslatedString(Key); + } + } +} diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 708979f8..ce790af7 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -115,9 +115,16 @@ namespace Omegasis.HappyBirthday if (e.NewLocation == Game1.getLocationFromName("Trailer")) { EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny"); - this.Monitor.Log(eve.getEventString(), LogLevel.Info); eve.startEventAtLocationifPossible(); } + + if (e.NewLocation == Game1.getLocationFromName("ScienceHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Maru"); + eve.startEventAtLocationifPossible(); + EventHelper eve2 = this.eventManager.getEvent("BirthdayDating:Sebastian"); + eve2.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -145,6 +152,8 @@ namespace Omegasis.HappyBirthday data["birthdayDad"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDad"); data["birthdayJunimos"] = BirthdayMessages.GetTranslatedString("Mail:birthdayJunimos"); data["birthdayDatingPenny"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingPenny"); + data["birthdayDatingMaru"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingMaru"); + data["birthdayDatingSebastian"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSebastian"); } @@ -574,12 +583,24 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingPenny"); } + if (Game1.player.mailReceived.Contains("birthdayDatingMaru")) + { + Game1.player.mailReceived.Remove("birthdayDatingMaru"); + } + if (Game1.player.mailReceived.Contains("birthdayDatingSebastian")) + { + Game1.player.mailReceived.Remove("birthdayDatingSebastian"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); EventHelper birthdayDating_Penny = BirthdayEvents.DatingBirthday_Penny(); + EventHelper birthdayDating_Maru = BirthdayEvents.DatingBirthday_Maru(); + EventHelper birthdayDating_Sebastian = BirthdayEvents.DatingBirthday_Sebastian(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); + this.eventManager.addEvent(birthdayDating_Maru); + this.eventManager.addEvent(birthdayDating_Sebastian); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -588,6 +609,14 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Penny.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Maru.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Maru.getEventID()); //Repeat the event. + } + if (Game1.player.eventsSeen.Contains(birthdayDating_Sebastian.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Sebastian.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -650,6 +679,23 @@ namespace Omegasis.HappyBirthday } } + if (Game1.player.friendshipData.ContainsKey("Maru")) + { + if (Game1.player.friendshipData["Maru"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingMaru"); + } + } + + + if (Game1.player.friendshipData.ContainsKey("Sebastian")) + { + if (Game1.player.friendshipData["Sebastian"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingSebastian"); + } + } + if (Game1.player.CanReadJunimo()) { Game1.player.mailbox.Add("birthdayJunimos"); @@ -809,11 +855,5 @@ namespace Omegasis.HappyBirthday } } } - - - private void hmm() - { - Game1.player.currentLocation.currentEvent = new Event(); - } } } diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index b111e1a2..125e6fdd 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -140,31 +140,32 @@ namespace StardustCore.Events /// /// /// - protected virtual int getFacingDirectionNumber(FacingDirection Dir) + public virtual int getFacingDirectionNumber(FacingDirection Dir) { return (int)Dir; } /// - /// Gets the layer string from the Layer enum. + /// Gets the layer string from the Layer enum. Has weird values???/ /// /// /// - protected virtual string getLayerName(Layers Layer) + public virtual int getLayerName(Layers Layer) { - if (Layer == Layers.AlwaysFront) return "AlwaysFront"; - if (Layer == Layers.Back) return "Back"; - if (Layer == Layers.Buildings) return "Buildings"; - if (Layer == Layers.Front) return "Front"; - if (Layer == Layers.Paths) return "Paths"; - return ""; + return 724; + //if (Layer == Layers.AlwaysFront) return "AlwaysFront"; + //if (Layer == Layers.Back) return "Back"; + //if (Layer == Layers.Buildings) return "Buildings"; + //if (Layer == Layers.Front) return "Front"; + //if (Layer == Layers.Paths) return "Paths"; + //return ""; } /// /// Gets the even parsing seperator. /// /// - protected virtual string getSeperator() + public virtual string getSeperator() { return "/"; } @@ -173,7 +174,7 @@ namespace StardustCore.Events /// Gets the starting event numbers based off of my nexus user id. /// /// - protected virtual string getUniqueEventStartID() + public virtual string getUniqueEventStartID() { string s = this.nexusUserId.ToString(); return s.Substring(0, 4); @@ -192,7 +193,7 @@ namespace StardustCore.Events /// /// /// - protected virtual bool isIdValid(int IDToCheck) + public virtual bool isIdValid(int IDToCheck) { if (IDToCheck > 2147483647 || IDToCheck < 0) return false; else return true; @@ -203,7 +204,7 @@ namespace StardustCore.Events /// /// /// - protected virtual bool isIdValid(string IDToCheck) + public virtual bool isIdValid(string IDToCheck) { if (Convert.ToInt32(IDToCheck) > 2147483647 || Convert.ToInt32(IDToCheck) < 0) return false; else return true; @@ -221,7 +222,7 @@ namespace StardustCore.Events /// /// /// - protected virtual StardewValley.Event getEvent(Farmer PlayerActor = null) + public virtual StardewValley.Event getEvent(Farmer PlayerActor = null) { return new StardewValley.Event(this.getEventString(), Convert.ToInt32(this.getEventID()), PlayerActor); } @@ -267,7 +268,7 @@ namespace StardustCore.Events /// /// /// - protected virtual void addBigProp(int xTile, int yTile, int ID) + public virtual void addBigProp(int xTile, int yTile, int ID) { StringBuilder b = new StringBuilder(); b.Append("addBigProp "); @@ -283,7 +284,7 @@ namespace StardustCore.Events /// Starts an active dialogue event with the given ID and a length of 4 days. /// /// - protected virtual void addConversationTopic(string ID) + public virtual void addConversationTopic(string ID) { StringBuilder b = new StringBuilder(); b.Append("addBigProp "); @@ -295,7 +296,7 @@ namespace StardustCore.Events /// Adds the specified cooking recipe to the player. /// /// - protected virtual void addCookingRecipe(string Recipe) + public virtual void addCookingRecipe(string Recipe) { StringBuilder b = new StringBuilder(); b.Append("addCookingRecipe "); @@ -307,7 +308,7 @@ namespace StardustCore.Events /// Adds the specified crafting recipe to the player. /// /// - protected virtual void addCraftingRecipe(string Recipe) + public virtual void addCraftingRecipe(string Recipe) { StringBuilder b = new StringBuilder(); b.Append("addCraftingRecipe "); @@ -318,7 +319,7 @@ namespace StardustCore.Events /// /// Add a non-solid prop from the current festival texture. Default solid width/height is 1. Default display height is solid height. /// - protected virtual void addFloorProp(int PropIndex, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) + public virtual void addFloorProp(int PropIndex, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) { StringBuilder b = new StringBuilder(); b.Append("addFloorProp "); @@ -343,7 +344,7 @@ namespace StardustCore.Events /// /// /// - protected virtual void addLantern(int ItemID, int XPosition, int YPosition, float LightRadius) + public virtual void addLantern(int ItemID, int XPosition, int YPosition, float LightRadius) { StringBuilder b = new StringBuilder(); b.Append("addLantern "); @@ -361,7 +362,7 @@ namespace StardustCore.Events /// Set a letter as received. /// /// - protected virtual void addMailReceived(string ID) + public virtual void addMailReceived(string ID) { StringBuilder b = new StringBuilder(); b.Append("addMailReceived "); @@ -376,7 +377,7 @@ namespace StardustCore.Events /// /// /// - protected virtual void addObject(int XTile, int YTile, int ParentSheetIndex, string Layer) + public virtual void addObject(int XTile, int YTile, int ParentSheetIndex) { StringBuilder b = new StringBuilder(); b.Append("addObject "); @@ -384,26 +385,7 @@ namespace StardustCore.Events b.Append(" "); b.Append(YTile.ToString()); b.Append(" "); - b.Append(Layer); - this.add(b); - } - - /// - /// Adds a temporary sprite at the specified tile from the Maps\springobjects.png sprite sheet. - /// - /// - /// - /// - /// - protected virtual void addObject(int XTile, int YTile, int ParentSheetIndex, Layers Layer) - { - StringBuilder b = new StringBuilder(); - b.Append("addObject "); - b.Append(XTile.ToString()); - b.Append(" "); - b.Append(YTile.ToString()); - b.Append(" "); - b.Append(this.getLayerName(Layer)); + b.Append(ParentSheetIndex); this.add(b); } @@ -416,7 +398,7 @@ namespace StardustCore.Events /// /// /// - protected virtual void addProp(int Index, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) + public virtual void addProp(int Index, int XTile, int YTile, int SolidWidth, int SolidHeight, int DisplayHeight) { StringBuilder b = new StringBuilder(); b.Append("addProp "); diff --git a/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs index 2525437a..d698681d 100644 --- a/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs +++ b/GeneralMods/StardustCore/Events/Preconditions/NPCSpecific/DatingNPC.cs @@ -38,7 +38,13 @@ namespace StardustCore.Events.Preconditions.NPCSpecific public override bool meetsCondition() { - return Game1.player.friendshipData[this.npc.Name].IsDating(); + if (Game1.player.friendshipData.ContainsKey(this.npc.Name)){ + return Game1.player.friendshipData[this.npc.Name].IsDating(); + } + else + { + return false; + } } } } From 50151b2e6989574dcfdb60b9ac8960a2aa3ac1bd Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Sat, 7 Dec 2019 17:54:49 -0800 Subject: [PATCH 45/52] Finished Leah friendship event. Added in some utility command for friendship for Stardust Core. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 19 ++++---- .../HappyBirthday/Framework/BirthdayEvents.cs | 46 ++++++++++++++++++- GeneralMods/HappyBirthday/HappyBirthday.cs | 25 ++++++++++ GeneralMods/StardustCore/ModCore.cs | 18 ++++++++ 4 files changed, 98 insertions(+), 10 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 07309598..29138088 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -140,11 +140,10 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayMom"] = "Dear @,^ Happy birthday sweetheart. It's been amazing watching you grow into the kind, hard working person that I've always dreamed that you would become. I hope you continue to make many more fond memories with the ones you love. ^ Love, Mom ^ P.S. Here's a little something that I made for you. %item object 221 1 %%", ["Mail:birthdayDad"] = "Dear @,^ Happy birthday kiddo. It's been a little quiet around here on your birthday since you aren't around, but your mother and I know that you are making both your grandpa and us proud. We both know that living on your own can be tough but we believe in you one hundred percent, just keep following your dreams.^ Love, Dad ^ P.S. Here's some spending money to help you out on the farm. Good luck! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "Please come to the community center. ^ Sincerly,^ -The Junimos", - - ["Mail:birthdayDatingPenny"] = "Dear @. ^ My mom and I decided to have a little birthday party for you. Could you come by sometime today?^Sincerly,^ -Penny", ["Mail:birthdayDatingMaru"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Maru", ["Mail:birthdayDatingSebastian"] = "Hey @. ^ Could you come by my place later? My family and I decided to have a birthday party for you to celebrate. ^^ -Sebastian", + ["Mail:birthdayDatingLeah"] = "Hey @. ^ Could you come by my place later? I thought it would be nice if we had a small party for you. ^Sincerly,^ -Leah", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", @@ -166,7 +165,6 @@ namespace Omegasis.HappyBirthday ["Event:DatingPennyBirthday_Finish:0"] = "It was nice celebrating my birthday with Pam and Penny.", ["Event:DatingPennyBirthday_Finish:1"] = "Looks like there was some leftover cake and beer too!", - ["Event:DatingMaruBirthday_Demetrius:0"] = "Welcome @, come in and make yourself at home.$h", ["Event:DatingMaruBirthday_Demetrius:1"] = "I agree. I think this party is perfecty wonderful. Besides studies show that your productivity is boosted when you have fun once in a while.$h", ["Event:DatingMaruBirthday_Maru:0"] = "Ohh @, you are just in time for the party.$h", @@ -180,24 +178,27 @@ namespace Omegasis.HappyBirthday ["Event:DatingMaruBirthday_Finish:0"] = "It was nice celebrating my birthday with Maru and her family.", ["Event:DatingMaruBirthday_Finish:1"] = "It looks like there was some leftover cake too!", - - ["Event:DatingSebastianBirthday_Demetrius:0"] = "I agree. I think this party is perfecty wonderful. Besides studies show that your productivity is boosted when you have fun once in a while.$h", ["Event:DatingSebastianBirthday_Demetrius:1"] = "Alright, @ go ahead and make a wish!$h", - ["Event:DatingSebastianBirthday_Maru:0"] = "Happy birthday @. Honestly, I'm a bit surprised that we are having this party. Sebastian never been too keen on celebrations.", ["Event:DatingSebastianBirthday_Maru:1"] = "Oh sweet we finally get to have some cake! Let me get you the first slice @!$h", - - ["Event:DatingSebastianBirthday_Robin:0"]= "Welcome @, come in and make yourself at home.$h", + ["Event:DatingSebastianBirthday_Robin:0"] = "Welcome @, come in and make yourself at home.$h", ["Event:DatingSebastianBirthday_Robin:1"] = "Hey now, I think that it's great that Sebastian wanted to have a party for @. $h", ["Event:DatingSebastianBirthday_Robin:2"] = "Oh I think the cake is ready!", - ["Event:DatingSebastianBirthday_Sebastian:0"] = "Hey @ you are here just in time. Mom is just finishing the cake right now. $h", ["Event:DatingSebastianBirthday_Sebastian:1"] = "Honestly... and they wonder why I don't do stuff like this more often.", ["Event:DatingSebastianBirthday_Sebastian:2"] = "Happy Birthday @. I'm glad we got to spend time like this together. $h", ["Event:DatingSebastianBirthday_Finish:0"] = "It was nice celebrating my birthday with Sebastian and his family.", ["Event:DatingSebastianBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:DatingLeahBirthday_Leah:0"] = "Welcome @! Come in and make yourself at home!$h", + ["Event:DatingLeahBirthday_Leah:1"] = "I knew today was your birthday so I thought we would have a little celebration for you. I event got some cake for us.$h", + ["Event:DatingLeahBirthday_Leah:2"] = "You know I haven't celebrated a birthday with anyone in a few years, but somehow I felt like I really wanted to spend today with you.$l", + ["Event:DatingLeahBirthday_Leah:3"] = "I would have never though I'd change my mind about celebrations like this but I guess being with you has really opened me up again.$l", + ["Event:DatingLeahBirthday_Leah:4"] = "Anyways enough of this embarrasing talk. Happy birthday @. Now shall we have some cake?$h", + ["Event:DatingLeahBirthday_Finish:0"] = "It was nice celebrating my birthday with Leah.", + ["Event:DatingLeahBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index f1a2e6c5..9c6ec081 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -231,11 +231,55 @@ namespace Omegasis.HappyBirthday.Framework e.end(); return e; } - /* + + /// + /// Birthday event for when the player is dating Leah. + /// Finished. + /// + /// public static EventHelper DatingBirthday_Leah() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("LeahHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC leah = Game1.getCharacterFromName("Leah"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(leah)); + + EventHelper e = new EventHelper("BirthdayDating:Leah", 19953, conditions, new EventStartData("playful", 12, 7, new EventStartData.FarmerData(7, 9, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(leah,14,11, EventHelper.FacingDirection.Left), + })); + e.addObject(11, 11, 220); + e.globalFadeIn(); + e.moveFarmerUp(2, EventHelper.FacingDirection.Up, false); + e.moveFarmerRight(5, EventHelper.FacingDirection.Down, false); + e.npcFaceDirection(leah, EventHelper.FacingDirection.Up); + e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:0")); //0 + e.moveFarmerDown(2, EventHelper.FacingDirection.Down, false) ; + e.moveFarmerRight(1, EventHelper.FacingDirection.Down, false); + e.moveFarmerDown(1, EventHelper.FacingDirection.Down, false); + e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:1")); //1 + e.emoteFarmer_Happy(); + e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:2"));//2 + e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:3"));//3 + e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:4"));//4 + + + e.emoteFarmer_Heart(); + e.emote_Heart("Leah"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingLeahBirthday_Finish:0")); //maru party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingLeahBirthday_Finish:1")); //maru party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + + /* public static EventHelper DatingBirthday_Abigail() { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index ce790af7..78e1a627 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -125,6 +125,11 @@ namespace Omegasis.HappyBirthday EventHelper eve2 = this.eventManager.getEvent("BirthdayDating:Sebastian"); eve2.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("LeahHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Leah"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -154,6 +159,7 @@ namespace Omegasis.HappyBirthday data["birthdayDatingPenny"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingPenny"); data["birthdayDatingMaru"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingMaru"); data["birthdayDatingSebastian"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSebastian"); + data["birthdayDatingLeah"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingLeah"); } @@ -591,16 +597,23 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingSebastian"); } + if (Game1.player.mailReceived.Contains("birthdayDatingLeah")) + { + Game1.player.mailReceived.Remove("birthdayDatingLeah"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); EventHelper birthdayDating_Penny = BirthdayEvents.DatingBirthday_Penny(); EventHelper birthdayDating_Maru = BirthdayEvents.DatingBirthday_Maru(); EventHelper birthdayDating_Sebastian = BirthdayEvents.DatingBirthday_Sebastian(); + EventHelper birthdayDating_Leah = BirthdayEvents.DatingBirthday_Leah(); + this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); this.eventManager.addEvent(birthdayDating_Maru); this.eventManager.addEvent(birthdayDating_Sebastian); + this.eventManager.addEvent(birthdayDating_Leah); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -617,6 +630,10 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Sebastian.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Leah.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Leah.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -687,6 +704,14 @@ namespace Omegasis.HappyBirthday } } + if (Game1.player.friendshipData.ContainsKey("Leah")) + { + if (Game1.player.friendshipData["Leah"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingLeah"); + } + } + if (Game1.player.friendshipData.ContainsKey("Sebastian")) { diff --git a/GeneralMods/StardustCore/ModCore.cs b/GeneralMods/StardustCore/ModCore.cs index b468ad6f..087d44d1 100644 --- a/GeneralMods/StardustCore/ModCore.cs +++ b/GeneralMods/StardustCore/ModCore.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using StardewModdingAPI; @@ -41,6 +42,8 @@ namespace StardustCore this.Helper.Events.GameLoop.GameLaunched += this.GameLoop_GameLaunched; + this.Helper.ConsoleCommands.Add("Omegasis.StardustCore.ModdingUtilities.AddFriendship", "Adds a certain amount of friendship to the given npc. ", AddNPCFriendship); + this.config = ModHelper.ReadConfig(); } @@ -57,5 +60,20 @@ namespace StardustCore { ModMonitor.Log(message); } + + + public static void AddNPCFriendship(string ActionName, string[] Params) + { + string npcName = Params[0]; + int amount = Convert.ToInt32(Params[1]); + if (Game1.player.friendshipData.ContainsKey(npcName)){ + Game1.player.friendshipData[npcName].Points += amount; + } + else + { + Game1.player.friendshipData.Add(npcName, new Friendship(amount)); + } + + } } } From 4e0662abe914a3738243d5e5821108f470a14918 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Sat, 7 Dec 2019 18:27:34 -0800 Subject: [PATCH 46/52] Finished abigails party. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 15 ++++- .../HappyBirthday/Framework/BirthdayEvents.cs | 64 ++++++++++++++++--- GeneralMods/HappyBirthday/HappyBirthday.cs | 23 +++++++ 3 files changed, 92 insertions(+), 10 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 29138088..740b8086 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -144,7 +144,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingMaru"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Maru", ["Mail:birthdayDatingSebastian"] = "Hey @. ^ Could you come by my place later? My family and I decided to have a birthday party for you to celebrate. ^^ -Sebastian", ["Mail:birthdayDatingLeah"] = "Hey @. ^ Could you come by my place later? I thought it would be nice if we had a small party for you. ^Sincerly,^ -Leah", - + ["Mail:birthdayDatingAbigail"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Abigail", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -199,6 +199,19 @@ namespace Omegasis.HappyBirthday ["Event:DatingLeahBirthday_Finish:0"] = "It was nice celebrating my birthday with Leah.", ["Event:DatingLeahBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:DatingAbigailBirthday_Abigail:0"] = "Hey @! You are just in time for the party!$h", + ["Event:DatingAbigailBirthday_Abigail:1"] = "Wow this cake looks delicious mom!$h", + ["Event:DatingAbigailBirthday_Abigail:2"] = "Go ahead and make a wish @.", + ["Event:DatingAbigailBirthday_Abigail:3"] = "So @, what did you wish for? Hopefully for some awesome skills!", + ["Event:DatingAbigailBirthday_Abigail:4"] = "Anyways, happy birthday! I hope we get to have many more adventures to come. $l", + ["Event:DatingAbigailBirthday_Caroline:0"] = "Please, I'm sure your customers won't mind if you are gone for a few minutes. Anyways the cake is done.", + ["Event:DatingAbigailBirthday_Caroline:1"] = "*sigh* Honestly.", + ["Event:DatingAbigailBirthday_Caroline:2"] = "Well @ feel free to help yourself to as much as you like.$h", + ["Event:DatingAbigailBirthday_Pierre:0"] = "Make yourself at home @! I can't stay too long since I have to attend to the store but I thought a party would be a good idea!$h", + ["Event:DatingAbigailBirthday_Pierre:1"] = "Well of course it would be. It was made from the *highest* quality ingredients from the store! $h", + ["Event:DatingAbigailBirthday_Finish:0"] = "It was nice celebrating my birthday with Abigail and her family.", + ["Event:DatingAbigailBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 9c6ec081..9efe2936 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -279,11 +279,60 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + public static EventHelper DatingBirthday_Abigail() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("SeedShop"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC abigail = Game1.getCharacterFromName("Abigail"); + NPC pierre = Game1.getCharacterFromName("Pierre"); + NPC caroline = Game1.getCharacterFromName("Caroline"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(abigail)); + + EventHelper e = new EventHelper("BirthdayDating:Abigail", 19953, conditions, new EventStartData("playful", 35, 7, new EventStartData.FarmerData(31,11, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(abigail,36,9, EventHelper.FacingDirection.Left), + new EventStartData.NPCData(pierre,33,6, EventHelper.FacingDirection.Down), + new EventStartData.NPCData(caroline,35,5, EventHelper.FacingDirection.Up), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerUp(2, EventHelper.FacingDirection.Right, false); + e.moveFarmerRight(4, EventHelper.FacingDirection.Right, false); + + e.speak(abigail, GetTranslatedString("Event:DatingAbigailBirthday_Abigail:0")); //abi 0 + + e.npcFaceDirection(caroline, EventHelper.FacingDirection.Down); + + e.speak(pierre, GetTranslatedString("Event:DatingAbigailBirthday_Pierre:0")); //pie 0 + e.speak(caroline, GetTranslatedString("Event:DatingAbigailBirthday_Caroline:0")); //car 0 + e.addObject(35, 5, 220); + e.speak(abigail, GetTranslatedString("Event:DatingAbigailBirthday_Abigail:1")); //abi 1 + e.speak(pierre, GetTranslatedString("Event:DatingAbigailBirthday_Pierre:1")); //pie 1 + e.speak(caroline, GetTranslatedString("Event:DatingAbigailBirthday_Caroline:1")); //car 1 + e.speak(caroline, GetTranslatedString("Event:DatingAbigailBirthday_Caroline:2")); //car 2 + e.speak(abigail, GetTranslatedString("Event:DatingAbigailBirthday_Abigail:2")); //abi 2 + e.emoteFarmer_Thinking(); + e.speak(abigail, GetTranslatedString("Event:DatingAbigailBirthday_Abigail:3"));//abi 3 + e.speak(abigail, GetTranslatedString("Event:DatingAbigailBirthday_Abigail:4"));///abi 4 + + e.emoteFarmer_Heart(); + e.emote_Heart("Abigail"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingAbigailBirthday_Finish:0")); //abi party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingAbigailBirthday_Finish:1")); //abi party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + /* public static EventHelper DatingBirthday_Emily() { @@ -382,22 +431,19 @@ namespace Omegasis.HappyBirthday.Framework } - public static EventHelper Birthday_Krobus() + + public static EventHelper MarriedBirthday() { } - public static EventHelper MarriedBirthday_NoKids() + public static EventHelper CommunityBirthday() { } - - public static EventHelper MarriedBirthday_OneKids() - { - - } - public static EventHelper MarriedBirthday_TwoKids() + + public static EventHelper JojaBirthday() { } diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 78e1a627..1fc359c2 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -130,6 +130,11 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Leah"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("SeedShop")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Abigail"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -160,6 +165,7 @@ namespace Omegasis.HappyBirthday data["birthdayDatingMaru"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingMaru"); data["birthdayDatingSebastian"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSebastian"); data["birthdayDatingLeah"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingLeah"); + data["birthdayDatingAbigail"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingAbigail"); } @@ -601,6 +607,10 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingLeah"); } + if (Game1.player.mailReceived.Contains("birthdayDatingAbigail")) + { + Game1.player.mailReceived.Remove("birthdayDatingAbigail"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); @@ -608,12 +618,14 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Maru = BirthdayEvents.DatingBirthday_Maru(); EventHelper birthdayDating_Sebastian = BirthdayEvents.DatingBirthday_Sebastian(); EventHelper birthdayDating_Leah = BirthdayEvents.DatingBirthday_Leah(); + EventHelper birthdayDating_Abigail = BirthdayEvents.DatingBirthday_Abigail(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); this.eventManager.addEvent(birthdayDating_Maru); this.eventManager.addEvent(birthdayDating_Sebastian); this.eventManager.addEvent(birthdayDating_Leah); + this.eventManager.addEvent(birthdayDating_Abigail); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -634,6 +646,10 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Leah.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Abigail.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Abigail.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -711,6 +727,13 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayDatingLeah"); } } + if (Game1.player.friendshipData.ContainsKey("Abigail")) + { + if (Game1.player.friendshipData["Abigail"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingabigail"); + } + } if (Game1.player.friendshipData.ContainsKey("Sebastian")) From ba00754be18e7f9e40e5ee81143d47152165f87a Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 9 Dec 2019 18:12:29 -0800 Subject: [PATCH 47/52] Finished emily birthday event. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 11 ++++ .../HappyBirthday/Framework/BirthdayEvents.cs | 52 +++++++++++++++++-- GeneralMods/HappyBirthday/HappyBirthday.cs | 25 ++++++++- 3 files changed, 83 insertions(+), 5 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 740b8086..23f281cc 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -145,6 +145,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingSebastian"] = "Hey @. ^ Could you come by my place later? My family and I decided to have a birthday party for you to celebrate. ^^ -Sebastian", ["Mail:birthdayDatingLeah"] = "Hey @. ^ Could you come by my place later? I thought it would be nice if we had a small party for you. ^Sincerly,^ -Leah", ["Mail:birthdayDatingAbigail"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Abigail", + ["Mail:birthdayDatingEmily"] = "Hi @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Emily", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -212,6 +213,16 @@ namespace Omegasis.HappyBirthday ["Event:DatingAbigailBirthday_Finish:0"] = "It was nice celebrating my birthday with Abigail and her family.", ["Event:DatingAbigailBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:DatingEmilyBirthday_Emily:0"] = "Hi, @ you are just in time for the celebration.$h", + ["Event:DatingEmilyBirthday_Emily:1"] = "I thought it would be nice to have a small party in your honor.", + ["Event:DatingEmilyBirthday_Emily:2"] = "Somehow I feel like birthdays are an important reminder for us to live in the moment and live with the harmony of nature.", + ["Event:DatingEmilyBirthday_Emily:3"] = "Anyways I made us some chocolate cake! It's made with all natural ingredients and sweetened with cactus syrup!$h", + ["Event:DatingEmilyBirthday_Emily:4"] = "Make a wish @!$h", + ["Event:DatingEmilyBirthday_Emily:5"] = "Happy birthday @! I feel a strong fortune energy coming from the spirits for you this year. $l", + + ["Event:DatingEmilyBirthday_Finish:0"] = "It was nice celebrating my birthday with Emily.", + ["Event:DatingEmilyBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 9efe2936..55066dc6 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -257,7 +257,7 @@ namespace Omegasis.HappyBirthday.Framework e.moveFarmerRight(5, EventHelper.FacingDirection.Down, false); e.npcFaceDirection(leah, EventHelper.FacingDirection.Up); e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:0")); //0 - e.moveFarmerDown(2, EventHelper.FacingDirection.Down, false) ; + e.moveFarmerDown(2, EventHelper.FacingDirection.Down, false); e.moveFarmerRight(1, EventHelper.FacingDirection.Down, false); e.moveFarmerDown(1, EventHelper.FacingDirection.Down, false); e.speak(leah, GetTranslatedString("Event:DatingLeahBirthday_Leah:1")); //1 @@ -279,7 +279,11 @@ namespace Omegasis.HappyBirthday.Framework return e; } - + /// + /// Birthday event for when the player is dating Abigail. + /// Finished. + /// + /// public static EventHelper DatingBirthday_Abigail() { List conditions = new List(); @@ -293,7 +297,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(abigail)); - EventHelper e = new EventHelper("BirthdayDating:Abigail", 19953, conditions, new EventStartData("playful", 35, 7, new EventStartData.FarmerData(31,11, EventHelper.FacingDirection.Up), new List() { + EventHelper e = new EventHelper("BirthdayDating:Abigail", 19953, conditions, new EventStartData("playful", 35, 7, new EventStartData.FarmerData(31, 11, EventHelper.FacingDirection.Up), new List() { new EventStartData.NPCData(abigail,36,9, EventHelper.FacingDirection.Left), new EventStartData.NPCData(pierre,33,6, EventHelper.FacingDirection.Down), new EventStartData.NPCData(caroline,35,5, EventHelper.FacingDirection.Up), @@ -332,11 +336,51 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + + + public static EventHelper DatingBirthday_Emily() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("HaleyHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC emily = Game1.getCharacterFromName("Emily"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(emily)); + + EventHelper e = new EventHelper("BirthdayDating:Emily", 19953, conditions, new EventStartData("playful", 20, 18, new EventStartData.FarmerData(11, 20, EventHelper.FacingDirection.Right), new List() { + new EventStartData.NPCData(emily,20,17, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerRight(9, EventHelper.FacingDirection.Up, false); + + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:0")); //emi 0 + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:1")); //emi 0 + e.emoteFarmer_Happy(); + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:2")); //emi 0 + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:3")); //emi 0 + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:4")); //emi 0 + e.emoteFarmer_Thinking(); + e.speak(emily, GetTranslatedString("Event:DatingEmilyBirthday_Emily:5")); //emi 0 + + + e.emoteFarmer_Heart(); + e.emote_Heart("Emily"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingEmilyBirthday_Finish:0")); //abi party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingEmilyBirthday_Finish:1")); //abi party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + + /* public static EventHelper DatingBirthday_Haley() { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 1fc359c2..3a9c1b36 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -135,6 +135,11 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Abigail"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("HaleyHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Emily"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -166,6 +171,7 @@ namespace Omegasis.HappyBirthday data["birthdayDatingSebastian"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSebastian"); data["birthdayDatingLeah"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingLeah"); data["birthdayDatingAbigail"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingAbigail"); + data["birthdayDatingEmily"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingEmily"); } @@ -611,6 +617,10 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingAbigail"); } + if (Game1.player.mailReceived.Contains("birthdayDatingEmily")) + { + Game1.player.mailReceived.Remove("birthdayDatingEmily"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); @@ -619,6 +629,7 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Sebastian = BirthdayEvents.DatingBirthday_Sebastian(); EventHelper birthdayDating_Leah = BirthdayEvents.DatingBirthday_Leah(); EventHelper birthdayDating_Abigail = BirthdayEvents.DatingBirthday_Abigail(); + EventHelper birthdayDating_Emily = BirthdayEvents.DatingBirthday_Emily(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); @@ -626,6 +637,7 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Sebastian); this.eventManager.addEvent(birthdayDating_Leah); this.eventManager.addEvent(birthdayDating_Abigail); + this.eventManager.addEvent(birthdayDating_Emily); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -650,6 +662,10 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Abigail.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Emily.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Emily.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -731,10 +747,17 @@ namespace Omegasis.HappyBirthday { if (Game1.player.friendshipData["Abigail"].IsDating()) { - Game1.player.mailbox.Add("birthdayDatingabigail"); + Game1.player.mailbox.Add("birthdayDatingAbigail"); } } + if (Game1.player.friendshipData.ContainsKey("Emily")) + { + if (Game1.player.friendshipData["Emily"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingEmily"); + } + } if (Game1.player.friendshipData.ContainsKey("Sebastian")) { From c4864c3e15afe644b882a9f52c80d30d6ea95896 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Mon, 9 Dec 2019 19:02:24 -0800 Subject: [PATCH 48/52] Harvey party finished. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 18 ++- .../HappyBirthday/Framework/BirthdayEvents.cs | 148 +++++++++++++----- GeneralMods/HappyBirthday/HappyBirthday.cs | 46 +++++- 3 files changed, 175 insertions(+), 37 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 23f281cc..496d32ce 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -146,6 +146,8 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingLeah"] = "Hey @. ^ Could you come by my place later? I thought it would be nice if we had a small party for you. ^Sincerly,^ -Leah", ["Mail:birthdayDatingAbigail"] = "Hey @. ^ My family and I decided to have a birthday party for you at our place. Could you come by our house sometime today?^Sincerly,^ -Abigail", ["Mail:birthdayDatingEmily"] = "Hi @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Emily", + ["Mail:birthdayDatingHaley"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Haley", + ["Mail:birthdayDatingHarvey"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my room on the second floor of the clinic sometime today?^Sincerly,^ -Harvey", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -219,10 +221,24 @@ namespace Omegasis.HappyBirthday ["Event:DatingEmilyBirthday_Emily:3"] = "Anyways I made us some chocolate cake! It's made with all natural ingredients and sweetened with cactus syrup!$h", ["Event:DatingEmilyBirthday_Emily:4"] = "Make a wish @!$h", ["Event:DatingEmilyBirthday_Emily:5"] = "Happy birthday @! I feel a strong fortune energy coming from the spirits for you this year. $l", - ["Event:DatingEmilyBirthday_Finish:0"] = "It was nice celebrating my birthday with Emily.", ["Event:DatingEmilyBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + ["Event:DatingHaleyBirthday_Haley:0"] = "Hey, @ you are just in time for the party!$h", + ["Event:DatingHaleyBirthday_Haley:1"] = "Well I mean it would be a party, but I thought it would be nice to have something with just the two of us. $l", + ["Event:DatingHaleyBirthday_Haley:2"] = "I think birthdays can be pretty fun when you do them right, but I wanted this to be special because... you are special you know?$l", + ["Event:DatingHaleyBirthday_Haley:3"] = "Anyways, I got us some cake to eat too! Make sure to make a wish alright?$h", + ["Event:DatingHaleyBirthday_Haley:4"] = "Happy Birthday @. I'm so glad we got to spend some time together. Let's take a picture to remember this moment. $l", + ["Event:DatingHaleyBirthday_Finish:0"] = "It was nice celebrating my birthday with Haley.", + ["Event:DatingHaleyBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "Hi there, @ you are just in time! Let me clean up a bit.$h", + ["Event:DatingHarveyBirthday_Harvey:1"] = "I though it would be nice to have a small celebration for you so I cooked us something special.$l", + ["Event:DatingHarveyBirthday_Harvey:2"] = "Don't worry about the wine. A little moderation is needed but this is a special day!$h", + ["Event:DatingHarveyBirthday_Harvey:3"] = "Now cheers! Happy Birthday, here is to good health and many more years to come!$l", + ["Event:DatingHarveyBirthday_Finish:0"] = "It was nice celebrating my birthday with Harvey.", + ["Event:DatingHarveyBirthday_Finish:1"] = "It looks like there was some leftover food too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 55066dc6..ab62cbf9 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -248,7 +248,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(leah)); - EventHelper e = new EventHelper("BirthdayDating:Leah", 19953, conditions, new EventStartData("playful", 12, 7, new EventStartData.FarmerData(7, 9, EventHelper.FacingDirection.Up), new List() { + EventHelper e = new EventHelper("BirthdayDating:Leah", 19954, conditions, new EventStartData("playful", 12, 7, new EventStartData.FarmerData(7, 9, EventHelper.FacingDirection.Up), new List() { new EventStartData.NPCData(leah,14,11, EventHelper.FacingDirection.Left), })); e.addObject(11, 11, 220); @@ -297,7 +297,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(abigail)); - EventHelper e = new EventHelper("BirthdayDating:Abigail", 19953, conditions, new EventStartData("playful", 35, 7, new EventStartData.FarmerData(31, 11, EventHelper.FacingDirection.Up), new List() { + EventHelper e = new EventHelper("BirthdayDating:Abigail", 19955, conditions, new EventStartData("playful", 35, 7, new EventStartData.FarmerData(31, 11, EventHelper.FacingDirection.Up), new List() { new EventStartData.NPCData(abigail,36,9, EventHelper.FacingDirection.Left), new EventStartData.NPCData(pierre,33,6, EventHelper.FacingDirection.Down), new EventStartData.NPCData(caroline,35,5, EventHelper.FacingDirection.Up), @@ -338,7 +338,7 @@ namespace Omegasis.HappyBirthday.Framework } - + public static EventHelper DatingBirthday_Emily() { List conditions = new List(); @@ -350,7 +350,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(emily)); - EventHelper e = new EventHelper("BirthdayDating:Emily", 19953, conditions, new EventStartData("playful", 20, 18, new EventStartData.FarmerData(11, 20, EventHelper.FacingDirection.Right), new List() { + EventHelper e = new EventHelper("BirthdayDating:Emily", 19956, conditions, new EventStartData("playful", 20, 18, new EventStartData.FarmerData(11, 20, EventHelper.FacingDirection.Right), new List() { new EventStartData.NPCData(emily,20,17, EventHelper.FacingDirection.Down), })); e.globalFadeIn(); @@ -380,11 +380,49 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + public static EventHelper DatingBirthday_Haley() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("HaleyHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC haley = Game1.getCharacterFromName("Haley"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(haley)); + + EventHelper e = new EventHelper("BirthdayDating:Haley", 19957, conditions, new EventStartData("playful", 20, 18, new EventStartData.FarmerData(11, 20, EventHelper.FacingDirection.Right), new List() { + new EventStartData.NPCData(haley,20,17, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerRight(9, EventHelper.FacingDirection.Up, false); + + e.speak(haley, GetTranslatedString("Event:DatingHaleyBirthday_Haley:0")); + e.speak(haley, GetTranslatedString("Event:DatingHaleyBirthday_Haley:1")); + e.emoteFarmer_Happy(); + e.speak(haley, GetTranslatedString("Event:DatingHaleyBirthday_Haley:2")); + e.speak(haley, GetTranslatedString("Event:DatingHaleyBirthday_Haley:3")); + e.emoteFarmer_Thinking(); + e.speak(haley, GetTranslatedString("Event:DatingHaleyBirthday_Haley:4")); + + + e.emoteFarmer_Heart(); + e.emote_Heart("Haley"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingHaleyBirthday_Finish:0")); //abi party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingHaleyBirthday_Finish:1")); //abi party finish 0 + e.addObjectToPlayersInventory(221, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; + } + /* public static EventHelper DatingBirthday_Sam() { @@ -456,42 +494,82 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* - public static EventHelper DatingBirthday_Elliott() - { - } + /* + public static EventHelper DatingBirthday_Elliott() + { + + } + public static EventHelper DatingBirthday_Shane() { - } - public static EventHelper DatingBirthday_Harvey() - { - - } - - public static EventHelper DatingBirthday_Alex() - { - - } - - - public static EventHelper MarriedBirthday() - { - - } - - - public static EventHelper CommunityBirthday() - { - - } - - public static EventHelper JojaBirthday() - { - } */ + public static EventHelper DatingBirthday_Harvey() + { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("HarveyRoom"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC harvey = Game1.getCharacterFromName("Harvey"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(harvey)); + + EventHelper e = new EventHelper("BirthdayDating:Harvey", 19957, conditions, new EventStartData("playful", 6, 6, new EventStartData.FarmerData(6, 11, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(harvey,3,6, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerUp(5, EventHelper.FacingDirection.Up, false); + e.moveFarmerLeft(2, EventHelper.FacingDirection.Left, false); + e.npcFaceDirection(harvey, EventHelper.FacingDirection.Right); + e.speak(harvey, GetTranslatedString("Event:DatingHarveyBirthday_Harvey:0")); + e.speak(harvey, GetTranslatedString("Event:DatingHarveyBirthday_Harvey:1")); + e.emoteFarmer_QuestionMark(); + e.speak(harvey, GetTranslatedString("Event:DatingHarveyBirthday_Harvey:2")); + e.speak(harvey, GetTranslatedString("Event:DatingHarveyBirthday_Harvey:3")); + + + e.emoteFarmer_Heart(); + e.emote_Heart("Harvey"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingHarveyBirthday_Finish:0")); //abi party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingHarveyBirthday_Finish:1")); //abi party finish 0 + e.addObjectToPlayersInventory(237, 1, false); + e.addObjectToPlayersInventory(348, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; + } + + /* + public static EventHelper DatingBirthday_Alex() + { + + } + + + public static EventHelper MarriedBirthday() + { + + } + + + public static EventHelper CommunityBirthday() + { + + } + + public static EventHelper JojaBirthday() + { + + } + */ + public static string GetTranslatedString(string Key) { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 3a9c1b36..9038c136 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -102,7 +102,7 @@ namespace Omegasis.HappyBirthday this.othersBirthdays = new Dictionary(); this.eventManager = new EventManager(); - this.eventManager.addCustomEventLogic("AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); + } private void Player_Warped(object sender, WarpedEventArgs e) @@ -139,6 +139,13 @@ namespace Omegasis.HappyBirthday { EventHelper eve = this.eventManager.getEvent("BirthdayDating:Emily"); eve.startEventAtLocationifPossible(); + EventHelper eve2 = this.eventManager.getEvent("BirthdayDating:Haley"); + eve2.startEventAtLocationifPossible(); + } + if (e.NewLocation == Game1.getLocationFromName("HarveyRoom")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Harvey"); + eve.startEventAtLocationifPossible(); } } @@ -172,6 +179,8 @@ namespace Omegasis.HappyBirthday data["birthdayDatingLeah"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingLeah"); data["birthdayDatingAbigail"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingAbigail"); data["birthdayDatingEmily"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingEmily"); + data["birthdayDatingHaley"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHaley"); + data["birthdayDatingHarvey"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHarvey"); } @@ -621,6 +630,14 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingEmily"); } + if (Game1.player.mailReceived.Contains("birthdayDatingHaley")) + { + Game1.player.mailReceived.Remove("birthdayDatingHaley"); + } + if (Game1.player.mailReceived.Contains("birthdayDatingHarvey")) + { + Game1.player.mailReceived.Remove("birthdayDatingHarvey"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); @@ -630,6 +647,8 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Leah = BirthdayEvents.DatingBirthday_Leah(); EventHelper birthdayDating_Abigail = BirthdayEvents.DatingBirthday_Abigail(); EventHelper birthdayDating_Emily = BirthdayEvents.DatingBirthday_Emily(); + EventHelper birthdayDating_Haley = BirthdayEvents.DatingBirthday_Haley(); + EventHelper birthdayDating_Harvey = BirthdayEvents.DatingBirthday_Harvey(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); @@ -638,6 +657,8 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Leah); this.eventManager.addEvent(birthdayDating_Abigail); this.eventManager.addEvent(birthdayDating_Emily); + this.eventManager.addEvent(birthdayDating_Haley); + this.eventManager.addEvent(birthdayDating_Harvey); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -666,6 +687,14 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Emily.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Haley.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Haley.getEventID()); //Repeat the event. + } + if (Game1.player.eventsSeen.Contains(birthdayDating_Harvey.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Harvey.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -758,6 +787,13 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayDatingEmily"); } } + if (Game1.player.friendshipData.ContainsKey("Haley")) + { + if (Game1.player.friendshipData["Haley"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingHaley"); + } + } if (Game1.player.friendshipData.ContainsKey("Sebastian")) { @@ -766,6 +802,14 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayDatingSebastian"); } } + if (Game1.player.friendshipData.ContainsKey("Harvey")) + { + if (Game1.player.friendshipData["Harvey"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingHarvey"); + } + } + if (Game1.player.CanReadJunimo()) { From 64ffd48c8d7ed9429ac1168c5febe93192cb7ada Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Tue, 10 Dec 2019 15:08:01 -0800 Subject: [PATCH 49/52] Elliott birthday finished. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 19 +++++++--- .../HappyBirthday/Framework/BirthdayEvents.cs | 35 ++++++++++++++++++- GeneralMods/HappyBirthday/HappyBirthday.cs | 23 ++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 496d32ce..0f3e2798 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -148,6 +148,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingEmily"] = "Hi @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Emily", ["Mail:birthdayDatingHaley"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Haley", ["Mail:birthdayDatingHarvey"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my room on the second floor of the clinic sometime today?^Sincerly,^ -Harvey", + ["Mail:birthdayDatingElliott"] = "Hello @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my humble home later today?^Sincerly,^ -Elloitt", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -199,7 +200,7 @@ namespace Omegasis.HappyBirthday ["Event:DatingLeahBirthday_Leah:2"] = "You know I haven't celebrated a birthday with anyone in a few years, but somehow I felt like I really wanted to spend today with you.$l", ["Event:DatingLeahBirthday_Leah:3"] = "I would have never though I'd change my mind about celebrations like this but I guess being with you has really opened me up again.$l", ["Event:DatingLeahBirthday_Leah:4"] = "Anyways enough of this embarrasing talk. Happy birthday @. Now shall we have some cake?$h", - ["Event:DatingLeahBirthday_Finish:0"] = "It was nice celebrating my birthday with Leah.", + ["Event:DatingLeahBirthday_Finish:0"] = "It was nice celebrating my birthday with just Leah.", ["Event:DatingLeahBirthday_Finish:1"] = "It looks like there was some leftover cake too!", ["Event:DatingAbigailBirthday_Abigail:0"] = "Hey @! You are just in time for the party!$h", @@ -221,7 +222,7 @@ namespace Omegasis.HappyBirthday ["Event:DatingEmilyBirthday_Emily:3"] = "Anyways I made us some chocolate cake! It's made with all natural ingredients and sweetened with cactus syrup!$h", ["Event:DatingEmilyBirthday_Emily:4"] = "Make a wish @!$h", ["Event:DatingEmilyBirthday_Emily:5"] = "Happy birthday @! I feel a strong fortune energy coming from the spirits for you this year. $l", - ["Event:DatingEmilyBirthday_Finish:0"] = "It was nice celebrating my birthday with Emily.", + ["Event:DatingEmilyBirthday_Finish:0"] = "It was nice celebrating my birthday with just Emily.", ["Event:DatingEmilyBirthday_Finish:1"] = "It looks like there was some leftover cake too!", ["Event:DatingHaleyBirthday_Haley:0"] = "Hey, @ you are just in time for the party!$h", @@ -229,16 +230,26 @@ namespace Omegasis.HappyBirthday ["Event:DatingHaleyBirthday_Haley:2"] = "I think birthdays can be pretty fun when you do them right, but I wanted this to be special because... you are special you know?$l", ["Event:DatingHaleyBirthday_Haley:3"] = "Anyways, I got us some cake to eat too! Make sure to make a wish alright?$h", ["Event:DatingHaleyBirthday_Haley:4"] = "Happy Birthday @. I'm so glad we got to spend some time together. Let's take a picture to remember this moment. $l", - ["Event:DatingHaleyBirthday_Finish:0"] = "It was nice celebrating my birthday with Haley.", + ["Event:DatingHaleyBirthday_Finish:0"] = "It was nice celebrating my birthday with just Haley.", ["Event:DatingHaleyBirthday_Finish:1"] = "It looks like there was some leftover cake too!", ["Event:DatingHarveyBirthday_Harvey:0"] = "Hi there, @ you are just in time! Let me clean up a bit.$h", ["Event:DatingHarveyBirthday_Harvey:1"] = "I though it would be nice to have a small celebration for you so I cooked us something special.$l", ["Event:DatingHarveyBirthday_Harvey:2"] = "Don't worry about the wine. A little moderation is needed but this is a special day!$h", ["Event:DatingHarveyBirthday_Harvey:3"] = "Now cheers! Happy Birthday, here is to good health and many more years to come!$l", - ["Event:DatingHarveyBirthday_Finish:0"] = "It was nice celebrating my birthday with Harvey.", + ["Event:DatingHarveyBirthday_Finish:0"] = "It was nice celebrating my birthday with just Harvey.", ["Event:DatingHarveyBirthday_Finish:1"] = "It looks like there was some leftover food too!", + + ["Event:DatingElliottBirthday_Elliott:0"] = "Ahh @, wonderful! You are just in time! $h", + ["Event:DatingElliottBirthday_Elliott:1"] = "I thought it would be splendid if we had a small celebration together in honor of your birthday!$h", + ["Event:DatingElliottBirthday_Elliott:2"] = "I know that birthdays can be quite an ordeal and I'm sure you are quite busy today, but I do appreciate you coming out all this way to spend your special day with me. $l", + ["Event:DatingElliottBirthday_Elliott:3"] = "Alas, I tried writing something for you to express my affection for you but somehow words just couldn't seem to capture every little detail.$l", + ["Event:DatingElliottBirthday_Elliott:4"] = "Alright now how about we have some cake to mark the occassion. Go ahead and make a wish!", + ["Event:DatingElliottBirthday_Elliott:5"] = "Happy birthday @! Here is hoping there are many more stories to be told with your life! $l", + ["Event:DatingElliottBirthday_Finish:0"] = "It was nice celebrating my birthday with just Elliott.", + ["Event:DatingElliottBirthday_Finish:1"] = "It looks like there was some leftover food too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index ab62cbf9..326c997f 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -495,11 +495,44 @@ namespace Omegasis.HappyBirthday.Framework } - /* + public static EventHelper DatingBirthday_Elliott() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("ElliottHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC elliott = Game1.getCharacterFromName("Elliott"); + + //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(elliott)); + + EventHelper e = new EventHelper("BirthdayDating:Elliott", 19957, conditions, new EventStartData("playful", 3, 5, new EventStartData.FarmerData(3, 8, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(elliott,3,5, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerUp(2, EventHelper.FacingDirection.Up, false); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:0")); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:1")); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:2")); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:3")); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:4")); + e.emoteFarmer_Thinking(); + e.speak(elliott, GetTranslatedString("Event:DatingElliottBirthday_Elliott:5")); + e.emoteFarmer_Heart(); + e.emote_Heart("Elliott"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingElliottBirthday_Finish:0")); //abi party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingElliottBirthday_Finish:1")); //abi party finish 0 + e.addObjectToPlayersInventory(220, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + /* public static EventHelper DatingBirthday_Shane() { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 9038c136..2c797647 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -147,6 +147,11 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Harvey"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("ElliottHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Elliott"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -181,6 +186,7 @@ namespace Omegasis.HappyBirthday data["birthdayDatingEmily"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingEmily"); data["birthdayDatingHaley"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHaley"); data["birthdayDatingHarvey"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHarvey"); + data["birthdayDatingElliott"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingElliott"); } @@ -638,6 +644,10 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingHarvey"); } + if (Game1.player.mailReceived.Contains("birthdayDatingElliott")) + { + Game1.player.mailReceived.Remove("birthdayDatingElliott"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); @@ -649,6 +659,7 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Emily = BirthdayEvents.DatingBirthday_Emily(); EventHelper birthdayDating_Haley = BirthdayEvents.DatingBirthday_Haley(); EventHelper birthdayDating_Harvey = BirthdayEvents.DatingBirthday_Harvey(); + EventHelper birthdayDating_Elliott = BirthdayEvents.DatingBirthday_Elliott(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); @@ -659,6 +670,7 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Emily); this.eventManager.addEvent(birthdayDating_Haley); this.eventManager.addEvent(birthdayDating_Harvey); + this.eventManager.addEvent(birthdayDating_Elliott); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -695,6 +707,10 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Harvey.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Elliott.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Elliott.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -809,6 +825,13 @@ namespace Omegasis.HappyBirthday Game1.player.mailbox.Add("birthdayDatingHarvey"); } } + if (Game1.player.friendshipData.ContainsKey("Elliott")) + { + if (Game1.player.friendshipData["Elliott"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingElliott"); + } + } if (Game1.player.CanReadJunimo()) From ad88e5537d0e5f4827db7f6792fbaf99e1f0816c Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Tue, 10 Dec 2019 15:33:41 -0800 Subject: [PATCH 50/52] finished sams event. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 11 ++++- .../HappyBirthday/Framework/BirthdayEvents.cs | 43 ++++++++++++++++--- GeneralMods/HappyBirthday/HappyBirthday.cs | 16 +++++++ 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 0f3e2798..3393a1f1 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -149,6 +149,7 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingHaley"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Haley", ["Mail:birthdayDatingHarvey"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my room on the second floor of the clinic sometime today?^Sincerly,^ -Harvey", ["Mail:birthdayDatingElliott"] = "Hello @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my humble home later today?^Sincerly,^ -Elloitt", + ["Mail:birthdayDatingElliott"] = "Hey @. ^ I thought it would be fun to have a birthday party for you at our place. Could you come by my house sometime today?^^ -Sam", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -240,7 +241,6 @@ namespace Omegasis.HappyBirthday ["Event:DatingHarveyBirthday_Finish:0"] = "It was nice celebrating my birthday with just Harvey.", ["Event:DatingHarveyBirthday_Finish:1"] = "It looks like there was some leftover food too!", - ["Event:DatingElliottBirthday_Elliott:0"] = "Ahh @, wonderful! You are just in time! $h", ["Event:DatingElliottBirthday_Elliott:1"] = "I thought it would be splendid if we had a small celebration together in honor of your birthday!$h", ["Event:DatingElliottBirthday_Elliott:2"] = "I know that birthdays can be quite an ordeal and I'm sure you are quite busy today, but I do appreciate you coming out all this way to spend your special day with me. $l", @@ -248,7 +248,14 @@ namespace Omegasis.HappyBirthday ["Event:DatingElliottBirthday_Elliott:4"] = "Alright now how about we have some cake to mark the occassion. Go ahead and make a wish!", ["Event:DatingElliottBirthday_Elliott:5"] = "Happy birthday @! Here is hoping there are many more stories to be told with your life! $l", ["Event:DatingElliottBirthday_Finish:0"] = "It was nice celebrating my birthday with just Elliott.", - ["Event:DatingElliottBirthday_Finish:1"] = "It looks like there was some leftover food too!", + ["Event:DatingElliottBirthday_Finish:1"] = "It looks like there was some leftover cake too!", + + ["Event:DatingSamBirthday_Sam:0"] = "Hey @ you are just in time. $h", + ["Event:DatingSamBirthday_Sam:1"] = "I thought it would be fun to have a small party for you since it's your birthday. Don't worry my family is busy doing other things so we can just chill. $h", + ["Event:DatingSamBirthday_Sam:2"] = "I got us some pizza and some joja cola. I hope you like it! I would have made you a cake but I never really figured out how to do that sort of thing.$h", + ["Event:DatingSamBirthday_Sam:3"] = "Anyways happy birthday @. I'm super lucky to be with someone like you. $l", + ["Event:DatingSamBirthday_Finish:0"] = "It was nice celebrating my birthday with just Sam.", + ["Event:DatingSamBirthday_Finish:1"] = "It looks like there was some leftover food too!", ["Event:PartyOver"] = "That was a fun party. Back to work!" diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 326c997f..5600733d 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -422,12 +422,45 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + public static EventHelper DatingBirthday_Sam() { - + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("SamHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC sam = Game1.getCharacterFromName("Sam"); + + //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(sam)); + + EventHelper e = new EventHelper("BirthdayDating:Sam", 19959, conditions, new EventStartData("playful", 3, 6, new EventStartData.FarmerData(7, 9, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(sam,3,5, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerUp(4, EventHelper.FacingDirection.Up, false); + e.moveFarmerLeft(3, EventHelper.FacingDirection.Left, false); + e.npcFaceDirection(sam, EventHelper.FacingDirection.Right); + + e.speak(sam, GetTranslatedString("Event:DatingSamBirthday_Sam:0")); + e.speak(sam, GetTranslatedString("Event:DatingSamBirthday_Sam:1")); + e.speak(sam, GetTranslatedString("Event:DatingSamBirthday_Sam:2")); + e.speak(sam, GetTranslatedString("Event:DatingSamBirthday_Sam:3")); + e.emoteFarmer_Heart(); + e.emote_Heart("Sam"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingSamBirthday_Finish:0")); //sam party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingSamBirthday_Finish:1")); //sam party finish 0 + e.addObjectToPlayersInventory(206, 1, false); + e.addObjectToPlayersInventory(167, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } - */ + /// /// Event that occurs when the player is dating Sebastian. /// Status: Finished. @@ -505,9 +538,9 @@ namespace Omegasis.HappyBirthday.Framework NPC elliott = Game1.getCharacterFromName("Elliott"); - //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(elliott)); + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(elliott)); - EventHelper e = new EventHelper("BirthdayDating:Elliott", 19957, conditions, new EventStartData("playful", 3, 5, new EventStartData.FarmerData(3, 8, EventHelper.FacingDirection.Up), new List() { + EventHelper e = new EventHelper("BirthdayDating:Elliott", 19958, conditions, new EventStartData("playful", 3, 5, new EventStartData.FarmerData(3, 8, EventHelper.FacingDirection.Up), new List() { new EventStartData.NPCData(elliott,3,5, EventHelper.FacingDirection.Down), })); e.globalFadeIn(); diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 2c797647..f5b2b772 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -152,6 +152,11 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Elliott"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("SamHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Sam"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -187,6 +192,7 @@ namespace Omegasis.HappyBirthday data["birthdayDatingHaley"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHaley"); data["birthdayDatingHarvey"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHarvey"); data["birthdayDatingElliott"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingElliott"); + data["birthdayDatingSam"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSam"); } @@ -648,6 +654,10 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingElliott"); } + if (Game1.player.mailReceived.Contains("birthdayDatingSam")) + { + Game1.player.mailReceived.Remove("birthdayDatingSam"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); @@ -660,6 +670,7 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Haley = BirthdayEvents.DatingBirthday_Haley(); EventHelper birthdayDating_Harvey = BirthdayEvents.DatingBirthday_Harvey(); EventHelper birthdayDating_Elliott = BirthdayEvents.DatingBirthday_Elliott(); + EventHelper birthdayDating_Sam = BirthdayEvents.DatingBirthday_Sam(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); @@ -671,6 +682,7 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Haley); this.eventManager.addEvent(birthdayDating_Harvey); this.eventManager.addEvent(birthdayDating_Elliott); + this.eventManager.addEvent(birthdayDating_Sam); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -711,6 +723,10 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Elliott.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Sam.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Sam.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). From b4b1f79816fbd668a68e1f39cd239f15b4f66a80 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Tue, 10 Dec 2019 17:16:25 -0800 Subject: [PATCH 51/52] Finished happy birthday update. --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 1538 ++++++++++++++++- .../HappyBirthday/Framework/BirthdayEvents.cs | 193 ++- .../HappyBirthday/Framework/ModConfig.cs | 3 + GeneralMods/HappyBirthday/HappyBirthday.cs | 65 +- 4 files changed, 1777 insertions(+), 22 deletions(-) diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 3393a1f1..4e99d9b7 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -126,7 +126,7 @@ namespace Omegasis.HappyBirthday this.spouseEnglishGeneratedMessages.Add("Leah", this.generateSpouseMessage); this.spouseEnglishGeneratedMessages.Add("Maru", this.generateSpouseMessage); this.spouseEnglishGeneratedMessages.Add("Penny", this.generateSpouseMessage); - HappyBirthday.Config.translationInfo.setTranslationFromLanguageCode(Game1.content.GetCurrentLanguage()); + //HappyBirthday.Config.translationInfo.setTranslationFromLanguageCode(Game1.content.GetCurrentLanguage()); this.createBirthdayGreetings(); this.loadTranslationStrings(); } @@ -149,7 +149,9 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDatingHaley"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at our place. Could you come by my house sometime today?^Sincerly,^ -Haley", ["Mail:birthdayDatingHarvey"] = "Hey @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my room on the second floor of the clinic sometime today?^Sincerly,^ -Harvey", ["Mail:birthdayDatingElliott"] = "Hello @. ^ I thought it would be nice to have a birthday party for you at my place. Could you come by my humble home later today?^Sincerly,^ -Elloitt", - ["Mail:birthdayDatingElliott"] = "Hey @. ^ I thought it would be fun to have a birthday party for you at our place. Could you come by my house sometime today?^^ -Sam", + ["Mail:birthdayDatingSam"] = "Hey @. ^ I thought it would be fun to have a birthday party for you at our place. Could you come by my house sometime today?^^ -Sam", + ["Mail:birthdayDatingAlex"] = "Hey @. ^ I thought it would be fun to have a birthday party for you at our place. Could you come by my house sometime today?^^ -Alex", + ["Mail:birthdayDatingShane"] = "Hey @. ^Could you come by my house sometime today? I thought I'd have a little get together for you.^^ -Alex", ["Happy Birthday: Star Message"] = "It's your birthday today! Happy birthday!", ["Happy Birthday: Farmhand Birthday Message"] = "It's @'s birthday! Happy birthday to them!", @@ -251,12 +253,28 @@ namespace Omegasis.HappyBirthday ["Event:DatingElliottBirthday_Finish:1"] = "It looks like there was some leftover cake too!", ["Event:DatingSamBirthday_Sam:0"] = "Hey @ you are just in time. $h", - ["Event:DatingSamBirthday_Sam:1"] = "I thought it would be fun to have a small party for you since it's your birthday. Don't worry my family is busy doing other things so we can just chill. $h", + ["Event:DatingSamBirthday_Sam:1"] = "I thought it would be fun to have a small party for you since it's your birthday. Don't worry, my family is busy doing other things so we can just chill. $h", ["Event:DatingSamBirthday_Sam:2"] = "I got us some pizza and some joja cola. I hope you like it! I would have made you a cake but I never really figured out how to do that sort of thing.$h", ["Event:DatingSamBirthday_Sam:3"] = "Anyways happy birthday @. I'm super lucky to be with someone like you. $l", ["Event:DatingSamBirthday_Finish:0"] = "It was nice celebrating my birthday with just Sam.", ["Event:DatingSamBirthday_Finish:1"] = "It looks like there was some leftover food too!", + + ["Event:DatingAlexBirthday_Alex:0"] = "Hey @ you are just in time. $h", + ["Event:DatingAlexBirthday_Alex:1"] = "I thought it would be fun to have a small party for you since it's your birthday. It's always a good idea to relax after working out so hard! $h", + ["Event:DatingAlexBirthday_Alex:2"] = "I got us some pizza and some joja cola. I hope you enjoy it! .$h", + ["Event:DatingAlexBirthday_Alex:3"] = "Happy birthday @. I'm super lucky to be with someone like you. $l", + ["Event:DatingAlexBirthday_Finish:0"] = "It was nice celebrating my birthday with just Alex.", + ["Event:DatingAlexBirthday_Finish:1"] = "It looks like there was some leftover food too!", + + + ["Event:DatingShaneBirthday_Shane:0"] = "Hey @ you are just in time. $h", + ["Event:DatingShaneBirthday_Shane:1"] = "I thought it would be good to have a party for you. $h", + ["Event:DatingShaneBirthday_Shane:2"] = "I got us some pizza and some joja cola. I hope you enjoy it! I would have cooked you something like a cake with eggs from the chickens but I wasn't too sure how to do it.$h", + ["Event:DatingShaneBirthday_Shane:3"] = "Anyways, happy birthday @. I'm glad to be with someone like you. $l", + ["Event:DatingShaneBirthday_Finish:0"] = "It was nice celebrating my birthday with just Shane.", + ["Event:DatingShaneBirthday_Finish:1"] = "It looks like there was some leftover food too!", + ["Event:PartyOver"] = "That was a fun party. Back to work!" }, @@ -266,12 +284,142 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", + ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", + + ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", + + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ru] = new Dictionary() @@ -280,12 +428,142 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "ƒорогой @,^ — днем рождени¤, мой ребенок. «десь немного тихо в твой день рождени¤ с тех пор, как ты уехал на ферму, но тво¤ мать и ¤ знаем, что ты со своим дедушкой делаешь нас гордыми. ћы оба знаем, что жить на ферме может быть трудно, но мы верим в теб¤ на все 100%, просто продолжай следовать своим мечтам.^ — любовью папа ^ P.S. “ут есть немного денег, которые помогут тебе на ферме. ”дачи! %item money 5000 5001%%", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", + ["Happy Birthday: Star Message"] = "Ёто твой день рождени¤! — днем рождени¤!", ["Happy Birthday: Farmhand Birthday Message"] = "Ёто твой день рождени¤! ѕоздравл¤ю с этим!", ["Season"] = "Season", ["Date"] = "Date", + + ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", + + + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.zh] = new Dictionary() @@ -294,12 +572,142 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "亲爱的@,^ 生日快乐孩子。你生日的这天没有你,我们这儿还挺寂寞的,但我和你妈妈都知道你让我们和你爷爷感到骄傲。我们知道你一个人生活可能会很艰难,但我们百分百相信你能做到,所以继续追求你的梦想吧。^ 爱你的,爸爸 ^ 附言:这是能在农场上帮到你的一些零用钱。祝你好运! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", + + + ["Happy Birthday: Star Message"] = "今天是你的生日!生日快乐!", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", + + ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", + ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.pt] = new Dictionary() @@ -308,12 +716,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.es] = new Dictionary() @@ -322,12 +854,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.de] = new Dictionary() @@ -336,12 +992,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.th] = new Dictionary() @@ -350,12 +1130,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.fr] = new Dictionary() @@ -364,12 +1268,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.ko] = new Dictionary() @@ -378,26 +1406,274 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.it] = new Dictionary() { - ["Mail:birthdayMom"] = "", - ["Mail:birthdayDad"] = "", + ["Mail:birthdayMom"] = "Caro @,^ Buon compleanno amore. È stato meraviglioso vederti crescere e diventare l'uomo gentile, generoso e lavoratore che abbiamo sempre voluto che tu diventassi. Spero tu possa continuare a creare fantastici ricordi con le persone che ami. ^ Con amore, Mamma ^ P.S. Ho allegato un qualcosina che ti può tornare utile. %item object 221 1 %%", + ["Mail:birthdayDad"] = "Caro @,^ Tanti auguri ragazzo. Qui è tutto molto tranquillo da quando non ci sei, ma tua madre ed io sappiamo che stai rendendo tuo nonno e noi fieri. Sapiamo entrambi che vivere da soli può essere dura ma noi crediamo in te al cento per cento, continua a seguire i tuoi sogni.^ Con amore, Papà ^ P.S. Ti ho allegato un pò di soldi per eaiutarti con la fattoria. Buona fortuna! %item money 5000 5001 %%", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", - ["Happy Birthday: Star Message"] = "", - ["Happy Birthday: Farmhand Birthday Message"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", + ["Happy Birthday: Star Message"] = "Oggi è il tuo compleanno! Buon compleanno!", + ["Happy Birthday: Farmhand Birthday Message"] = "È il compleanno di @! Tanti auguri a loro!", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.tr] = new Dictionary() @@ -406,12 +1682,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, [StardewValley.LocalizedContentManager.LanguageCode.hu] = new Dictionary() @@ -420,12 +1820,136 @@ namespace Omegasis.HappyBirthday ["Mail:birthdayDad"] = "", ["Mail:birthdayJunimos"] = "", ["Mail:birthdayDatingPenny"] = "", + ["Mail:birthdayDatingMaru"] = "", + ["Mail:birthdayDatingSebastian"] = "", + ["Mail:birthdayDatingLeah"] = "", + ["Mail:birthdayDatingAbigail"] = "", + ["Mail:birthdayDatingEmily"] = "", + ["Mail:birthdayDatingHaley"] = "", + ["Mail:birthdayDatingHarvey"] = "", + ["Mail:birthdayDatingElliott"] = "", + ["Mail:birthdayDatingSam"] = "", + ["Mail:birthdayDatingAlex"] = "", + ["Mail:birthdayDatingShane"] = "", ["Happy Birthday: Star Message"] = "", ["Happy Birthday: Farmhand Birthday Message"] = "", ["Season"] = "Season", ["Date"] = "Date", ["Event:JunimoBirthdayParty_0"] = "", ["Event:JunimoBirthdayParty_1"] = "", + ["Event:DatingPennyBirthday_Pam:0"] = "", + ["Event:DatingPennyBirthday_Pam:1"] = "", + ["Event:DatingPennyBirthday_Pam:2"] = "", + ["Event:DatingPennyBirthday_Penny:0"] = "", + ["Event:DatingPennyBirthday_Penny:1"] = "", + ["Event:DatingPennyBirthday_Penny:2"] = "", + ["Event:DatingPennyBirthday_Penny:3"] = "", + ["Event:DatingPennyBirthday_Penny:4"] = "", + ["Event:DatingPennyBirthday_Finish:0"] = "", + ["Event:DatingPennyBirthday_Finish:1"] = "", + + ["Event:DatingMaruBirthday_Demetrius:0"] = "", + ["Event:DatingMaruBirthday_Demetrius:1"] = "", + ["Event:DatingMaruBirthday_Maru:0"] = "", + ["Event:DatingMaruBirthday_Maru:1"] = "", + ["Event:DatingMaruBirthday_Maru:2"] = "", + ["Event:DatingMaruBirthday_Maru:3"] = "", + ["Event:DatingMaruBirthday_Robin:0"] = "", + ["Event:DatingMaruBirthday_Robin:1"] = "", + ["Event:DatingMaruBirthday_Sebastian:0"] = "", + ["Event:DatingMaruBirthday_Sebastian:1"] = "", + ["Event:DatingMaruBirthday_Finish:0"] = "", + ["Event:DatingMaruBirthday_Finish:1"] = "", + + ["Event:DatingSebastianBirthday_Demetrius:0"] = "", + ["Event:DatingSebastianBirthday_Demetrius:1"] = "", + ["Event:DatingSebastianBirthday_Maru:0"] = "", + ["Event:DatingSebastianBirthday_Maru:1"] = "", + ["Event:DatingSebastianBirthday_Robin:0"] = "", + ["Event:DatingSebastianBirthday_Robin:1"] = "", + ["Event:DatingSebastianBirthday_Robin:2"] = "", + ["Event:DatingSebastianBirthday_Sebastian:0"] = "", + ["Event:DatingSebastianBirthday_Sebastian:1"] = "", + ["Event:DatingSebastianBirthday_Sebastian:2"] = "", + ["Event:DatingSebastianBirthday_Finish:0"] = "", + ["Event:DatingSebastianBirthday_Finish:1"] = "", + + ["Event:DatingLeahBirthday_Leah:0"] = "", + ["Event:DatingLeahBirthday_Leah:1"] = "", + ["Event:DatingLeahBirthday_Leah:2"] = "", + ["Event:DatingLeahBirthday_Leah:3"] = "", + ["Event:DatingLeahBirthday_Leah:4"] = "", + ["Event:DatingLeahBirthday_Finish:0"] = "", + ["Event:DatingLeahBirthday_Finish:1"] = "", + + ["Event:DatingAbigailBirthday_Abigail:0"] = "", + ["Event:DatingAbigailBirthday_Abigail:1"] = "", + ["Event:DatingAbigailBirthday_Abigail:2"] = "", + ["Event:DatingAbigailBirthday_Abigail:3"] = "", + ["Event:DatingAbigailBirthday_Abigail:4"] = "", + ["Event:DatingAbigailBirthday_Caroline:0"] = "", + ["Event:DatingAbigailBirthday_Caroline:1"] = "", + ["Event:DatingAbigailBirthday_Caroline:2"] = "", + ["Event:DatingAbigailBirthday_Pierre:0"] = "", + ["Event:DatingAbigailBirthday_Pierre:1"] = "", + ["Event:DatingAbigailBirthday_Finish:0"] = "", + ["Event:DatingAbigailBirthday_Finish:1"] = "", + + ["Event:DatingEmilyBirthday_Emily:0"] = "", + ["Event:DatingEmilyBirthday_Emily:1"] = "", + ["Event:DatingEmilyBirthday_Emily:2"] = "", + ["Event:DatingEmilyBirthday_Emily:3"] = "", + ["Event:DatingEmilyBirthday_Emily:4"] = "", + ["Event:DatingEmilyBirthday_Emily:5"] = "", + ["Event:DatingEmilyBirthday_Finish:0"] = "", + ["Event:DatingEmilyBirthday_Finish:1"] = "", + + ["Event:DatingHaleyBirthday_Haley:0"] = "", + ["Event:DatingHaleyBirthday_Haley:1"] = "", + ["Event:DatingHaleyBirthday_Haley:2"] = "", + ["Event:DatingHaleyBirthday_Haley:3"] = "", + ["Event:DatingHaleyBirthday_Haley:4"] = "", + ["Event:DatingHaleyBirthday_Finish:0"] = "", + ["Event:DatingHaleyBirthday_Finish:1"] = "", + + ["Event:DatingHarveyBirthday_Harvey:0"] = "", + ["Event:DatingHarveyBirthday_Harvey:1"] = "", + ["Event:DatingHarveyBirthday_Harvey:2"] = "", + ["Event:DatingHarveyBirthday_Harvey:3"] = "", + ["Event:DatingHarveyBirthday_Finish:0"] = "", + ["Event:DatingHarveyBirthday_Finish:1"] = "", + + ["Event:DatingElliottBirthday_Elliott:0"] = "", + ["Event:DatingElliottBirthday_Elliott:1"] = "", + ["Event:DatingElliottBirthday_Elliott:2"] = "", + ["Event:DatingElliottBirthday_Elliott:3"] = "", + ["Event:DatingElliottBirthday_Elliott:4"] = "", + ["Event:DatingElliottBirthday_Elliott:5"] = "", + ["Event:DatingElliottBirthday_Finish:0"] = "", + ["Event:DatingElliottBirthday_Finish:1"] = "", + + ["Event:DatingSamBirthday_Sam:0"] = "", + ["Event:DatingSamBirthday_Sam:1"] = "", + ["Event:DatingSamBirthday_Sam:2"] = "", + ["Event:DatingSamBirthday_Sam:3"] = "", + ["Event:DatingSamBirthday_Finish:0"] = "", + ["Event:DatingSamBirthday_Finish:1"] = "", + + + ["Event:DatingAlexBirthday_Alex:0"] = "", + ["Event:DatingAlexBirthday_Alex:1"] = "", + ["Event:DatingAlexBirthday_Alex:2"] = "", + ["Event:DatingAlexBirthday_Alex:3"] = "", + ["Event:DatingAlexBirthday_Finish:0"] = "", + ["Event:DatingAlexBirthday_Finish:1"] = "", + + + ["Event:DatingShaneBirthday_Shane:0"] = "", + ["Event:DatingShaneBirthday_Shane:1"] = "", + ["Event:DatingShaneBirthday_Shane:2"] = "", + ["Event:DatingShaneBirthday_Shane:3"] = "", + ["Event:DatingShaneBirthday_Finish:0"] = "", + ["Event:DatingShaneBirthday_Finish:1"] = "", ["Event:PartyOver"] = "" }, }; diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index 5600733d..e194093e 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -165,6 +165,62 @@ namespace Omegasis.HappyBirthday.Framework return e; } + public static EventHelper DatingBirthday_Penny_BigHome() + { + + NPC penny = Game1.getCharacterFromName("Penny"); + NPC pam = Game1.getCharacterFromName("Pam"); + + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("Trailer_Big"))); + conditions.Add(new TimePrecondition(600, 2600)); + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(penny)); + + //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(Game1.getCharacterFromName("Penny")); + EventHelper e = new EventHelper("BirthdayDating:Penny_BigHome", 19951, conditions, new EventStartData("playful", 14, 8, new EventStartData.FarmerData(12, 11, EventHelper.FacingDirection.Up), new List() { + new EventStartData.NPCData(penny,12,7, EventHelper.FacingDirection.Up), + new EventStartData.NPCData(pam,15,4, EventHelper.FacingDirection.Down) + })); + + e.globalFadeIn(); + + e.moveFarmerUp(3, EventHelper.FacingDirection.Up, false); + + e.actorFaceDirection("Penny", EventHelper.FacingDirection.Down); + //starting = starting.Replace("@", Game1.player.Name); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:0")); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:0")); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:1")); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:1")); + e.emote_Angry("Penny"); + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:2")); //penny2 + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:3")); //penny3 + + e.moveActorLeft("Penny", 3, EventHelper.FacingDirection.Up, true); + e.moveFarmerRight(2, EventHelper.FacingDirection.Up, false); + e.moveFarmerUp(3, EventHelper.FacingDirection.Down, false); + e.moveActorRight("Penny", 5, EventHelper.FacingDirection.Up, true); + e.moveActorUp("Penny", 1, EventHelper.FacingDirection.Up, true); + e.speak(pam, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Pam:2")); //pam2 + e.speak(penny, HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Penny:4"));//penny4 + + e.emoteFarmer_Heart(); + e.emote_Heart("Penny"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Finish:0")); //penny party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingPennyBirthday_Finish:1"));// penny party finish 1 + e.addObjectToPlayersInventory(220, 1, false); + e.addObjectToPlayersInventory(346, 1, false); + + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + + e.end(); + + return e; + } + /// /// Birthday event for when the player is dating Maru. /// Finished. @@ -422,7 +478,7 @@ namespace Omegasis.HappyBirthday.Framework return e; } - + public static EventHelper DatingBirthday_Sam() { List conditions = new List(); @@ -432,7 +488,7 @@ namespace Omegasis.HappyBirthday.Framework NPC sam = Game1.getCharacterFromName("Sam"); - //conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(sam)); + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(sam)); EventHelper e = new EventHelper("BirthdayDating:Sam", 19959, conditions, new EventStartData("playful", 3, 6, new EventStartData.FarmerData(7, 9, EventHelper.FacingDirection.Up), new List() { new EventStartData.NPCData(sam,3,5, EventHelper.FacingDirection.Down), @@ -460,7 +516,7 @@ namespace Omegasis.HappyBirthday.Framework e.end(); return e; } - + /// /// Event that occurs when the player is dating Sebastian. /// Status: Finished. @@ -528,7 +584,7 @@ namespace Omegasis.HappyBirthday.Framework } - + public static EventHelper DatingBirthday_Elliott() { List conditions = new List(); @@ -565,13 +621,48 @@ namespace Omegasis.HappyBirthday.Framework e.end(); return e; } - /* - - public static EventHelper DatingBirthday_Shane() - { - } - */ + + public static EventHelper DatingBirthday_Shane() + { + + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("AnimalShop"))); + conditions.Add(new TimePrecondition(600, 2600)); + + NPC shane = Game1.getCharacterFromName("Shane"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(shane)); + + EventHelper e = new EventHelper("BirthdayDating:Shane", 19960, conditions, new EventStartData("playful", 26, 15, new EventStartData.FarmerData(19, 18, EventHelper.FacingDirection.Left), new List() { + new EventStartData.NPCData(shane,3,19, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerRight(3, EventHelper.FacingDirection.Right, false); + e.moveFarmerUp(2, EventHelper.FacingDirection.Up, false); + e.moveFarmerRight(2, EventHelper.FacingDirection.Right, false); + e.npcFaceDirection(shane, EventHelper.FacingDirection.Left); + + e.speak(shane, GetTranslatedString("Event:DatingShaneBirthday_Shane:0")); + e.speak(shane, GetTranslatedString("Event:DatingShaneBirthday_Shane:1")); + e.speak(shane, GetTranslatedString("Event:DatingShaneBirthday_Shane:2")); + e.speak(shane, GetTranslatedString("Event:DatingShaneBirthday_Shane:3")); + e.emoteFarmer_Heart(); + e.emote_Heart("Shane"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingShaneBirthday_Finish:0")); //sam party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingShaneBirthday_Finish:1")); //sam party finish 0 + e.addObjectToPlayersInventory(206, 1, false); + e.addObjectToPlayersInventory(167, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; + } + public static EventHelper DatingBirthday_Harvey() { List conditions = new List(); @@ -612,23 +703,97 @@ namespace Omegasis.HappyBirthday.Framework return e; } - /* + public static EventHelper DatingBirthday_Alex() { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("JoshHouse"))); + conditions.Add(new TimePrecondition(600, 2600)); + NPC alex = Game1.getCharacterFromName("Alex"); + + conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(alex)); + + EventHelper e = new EventHelper("BirthdayDating:Alex", 19959, conditions, new EventStartData("playful", 3, 20, new EventStartData.FarmerData(7, 19, EventHelper.FacingDirection.Left), new List() { + new EventStartData.NPCData(alex,3,19, EventHelper.FacingDirection.Down), + })); + e.globalFadeIn(); + + //Dialogue here. + e.moveFarmerLeft(3, EventHelper.FacingDirection.Left, false); + e.npcFaceDirection(alex, EventHelper.FacingDirection.Right); + + e.speak(alex, GetTranslatedString("Event:DatingAlexBirthday_Alex:0")); + e.speak(alex, GetTranslatedString("Event:DatingAlexBirthday_Alex:1")); + e.speak(alex, GetTranslatedString("Event:DatingAlexBirthday_Alex:2")); + e.speak(alex, GetTranslatedString("Event:DatingAlexBirthday_Alex:3")); + e.emoteFarmer_Heart(); + e.emote_Heart("Alex"); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingAlexBirthday_Finish:0")); //sam party finish 0 + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:DatingAlexBirthday_Finish:1")); //sam party finish 0 + e.addObjectToPlayersInventory(206, 1, false); + e.addObjectToPlayersInventory(167, 1, false); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.end(); + return e; } + /// + /// Todo: Finish this. + /// + /// + public static EventHelper CommunityBirthday() + { + List conditions = new List(); + conditions.Add(new FarmerBirthdayPrecondition()); + conditions.Add(new LocationPrecondition(Game1.getLocationFromName("CommunityCenter"))); + conditions.Add(new TimePrecondition(600, 2600)); + conditions.Add(new StardustCore.Events.Preconditions.PlayerSpecific.JojaMember(false)); + conditions.Add(new CommunityCenterCompleted(true)); + //conditions.Add(new HasUnlockedCommunityCenter()); //Infered by the fact that you must enter the community center to trigger this event anyways. + EventHelper e = new EventHelper("CommunityCenterBirthday", 19961, conditions, new EventStartData("playful", -100, -100, new EventStartData.FarmerData(32, 22, EventHelper.FacingDirection.Up), new List() + { + new EventStartData.NPCData(Game1.getCharacterFromName("Lewis"),32,12, EventHelper.FacingDirection.Down), + + + })); + + e.globalFadeIn(); + + e.moveFarmerUp(10, EventHelper.FacingDirection.Up, true); + + e.showMessage("Shhh. I think they are here."); + e.showMessage("Somebody turn on the lights."); + e.setViewportPosition(32, 12); + + + e.emoteFarmer_ExclamationMark(); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:CommunityBirthdayParty_0")); + e.emoteFarmer_Heart(); + e.globalFadeOut(0.010); + e.setViewportPosition(-100, -100); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:CommunityBirthdayParty_1")); + e.showMessage(HappyBirthday.Config.translationInfo.getTranslatedString("Event:PartyOver")); + e.addObjectToPlayersInventory(220, 1, false); + + e.end(); + + return e; + } + + /* + public static EventHelper MarriedBirthday() { } - public static EventHelper CommunityBirthday() - { - } public static EventHelper JojaBirthday() { diff --git a/GeneralMods/HappyBirthday/Framework/ModConfig.cs b/GeneralMods/HappyBirthday/Framework/ModConfig.cs index a4d9b010..880103fe 100644 --- a/GeneralMods/HappyBirthday/Framework/ModConfig.cs +++ b/GeneralMods/HappyBirthday/Framework/ModConfig.cs @@ -28,12 +28,15 @@ namespace Omegasis.HappyBirthday.Framework /// The minimum amount of friendship needed to get a happy birthday greeting from an npc. public int minimumFriendshipLevelForBirthdayWish = 2; + public bool autoSetTranslation { get; set; } = true; + /// Handles different translations of files. public TranslationInfo translationInfo; /// Whether or not to load from the old BirthdayGifts.xnb located in StardewValley/Data or from the new BirthdayGifts.json located in the mod directory. public bool useLegacyBirthdayFiles; + /// Construct an instance. public ModConfig() { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index f5b2b772..5cdca360 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -117,6 +117,11 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("Trailer_Big")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny_BigHome"); + eve.startEventAtLocationifPossible(); + } if (e.NewLocation == Game1.getLocationFromName("ScienceHouse")) { @@ -157,6 +162,16 @@ namespace Omegasis.HappyBirthday EventHelper eve = this.eventManager.getEvent("BirthdayDating:Sam"); eve.startEventAtLocationifPossible(); } + if (e.NewLocation == Game1.getLocationFromName("JoshHouse")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Alex"); + eve.startEventAtLocationifPossible(); + } + if (e.NewLocation == Game1.getLocationFromName("AnimalShop")) + { + EventHelper eve = this.eventManager.getEvent("BirthdayDating:Shane"); + eve.startEventAtLocationifPossible(); + } } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -193,6 +208,8 @@ namespace Omegasis.HappyBirthday data["birthdayDatingHarvey"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingHarvey"); data["birthdayDatingElliott"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingElliott"); data["birthdayDatingSam"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingSam"); + data["birthdayDatingAlex"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingAlex"); + data["birthdayDatingShane"] = BirthdayMessages.GetTranslatedString("Mail:birthdayDatingShane"); } @@ -598,7 +615,10 @@ namespace Omegasis.HappyBirthday this.MigrateLegacyData(); this.PlayerData = this.Helper.Data.ReadJsonFile(this.DataFilePath) ?? new PlayerData(); - + if (HappyBirthday.Config.autoSetTranslation) + { + HappyBirthday.Config.translationInfo.setTranslationFromLanguageCode(Game1.content.GetCurrentLanguage()); + } if (PlayerBirthdayData != null) { @@ -658,10 +678,19 @@ namespace Omegasis.HappyBirthday { Game1.player.mailReceived.Remove("birthdayDatingSam"); } + if (Game1.player.mailReceived.Contains("birthdayDatingAlex")) + { + Game1.player.mailReceived.Remove("birthdayDatingAlex"); + } + if (Game1.player.mailReceived.Contains("birthdayDatingShane")) + { + Game1.player.mailReceived.Remove("birthdayDatingShane"); + } EventHelper communityCenterJunimoBirthday = BirthdayEvents.CommunityCenterJunimoBirthday(); EventHelper birthdayDating_Penny = BirthdayEvents.DatingBirthday_Penny(); + EventHelper birthdayDating_Penny_Big = BirthdayEvents.DatingBirthday_Penny_BigHome(); EventHelper birthdayDating_Maru = BirthdayEvents.DatingBirthday_Maru(); EventHelper birthdayDating_Sebastian = BirthdayEvents.DatingBirthday_Sebastian(); EventHelper birthdayDating_Leah = BirthdayEvents.DatingBirthday_Leah(); @@ -671,9 +700,12 @@ namespace Omegasis.HappyBirthday EventHelper birthdayDating_Harvey = BirthdayEvents.DatingBirthday_Harvey(); EventHelper birthdayDating_Elliott = BirthdayEvents.DatingBirthday_Elliott(); EventHelper birthdayDating_Sam = BirthdayEvents.DatingBirthday_Sam(); + EventHelper birthdayDating_Alex = BirthdayEvents.DatingBirthday_Alex(); + EventHelper birthdayDating_Shane = BirthdayEvents.DatingBirthday_Shane(); this.eventManager.addEvent(communityCenterJunimoBirthday); this.eventManager.addEvent(birthdayDating_Penny); + this.eventManager.addEvent(birthdayDating_Penny_Big); this.eventManager.addEvent(birthdayDating_Maru); this.eventManager.addEvent(birthdayDating_Sebastian); this.eventManager.addEvent(birthdayDating_Leah); @@ -683,6 +715,7 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Harvey); this.eventManager.addEvent(birthdayDating_Elliott); this.eventManager.addEvent(birthdayDating_Sam); + this.eventManager.addEvent(birthdayDating_Shane); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. @@ -727,6 +760,14 @@ namespace Omegasis.HappyBirthday { Game1.player.eventsSeen.Remove(birthdayDating_Sam.getEventID()); //Repeat the event. } + if (Game1.player.eventsSeen.Contains(birthdayDating_Alex.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Alex.getEventID()); //Repeat the event. + } + if (Game1.player.eventsSeen.Contains(birthdayDating_Shane.getEventID())) + { + Game1.player.eventsSeen.Remove(birthdayDating_Shane.getEventID()); //Repeat the event. + } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -849,6 +890,28 @@ namespace Omegasis.HappyBirthday } } + if (Game1.player.friendshipData.ContainsKey("Sam")) + { + if (Game1.player.friendshipData["Sam"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingSam"); + } + } + if (Game1.player.friendshipData.ContainsKey("Alex")) + { + if (Game1.player.friendshipData["Alex"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingAlex"); + } + } + if (Game1.player.friendshipData.ContainsKey("Shane")) + { + if (Game1.player.friendshipData["Shane"].IsDating()) + { + Game1.player.mailbox.Add("birthdayDatingShane"); + } + } + if (Game1.player.CanReadJunimo()) { From 1453812b50a7c7caec32b04524566060d07d04d4 Mon Sep 17 00:00:00 2001 From: JoshuaNavarro Date: Fri, 13 Dec 2019 16:00:06 -0800 Subject: [PATCH 52/52] Finished all of the updates for the SDV 1.4 update! --- GeneralMods/HappyBirthday/BirthdayMessages.cs | 43 +++ .../HappyBirthday/Framework/BirthdayEvents.cs | 2 +- .../HappyBirthday/Framework/BirthdayMenu.cs | 19 +- .../Framework/TranslationInfo.cs | 5 +- GeneralMods/HappyBirthday/HappyBirthday.cs | 212 ++---------- GeneralMods/HappyBirthday/manifest.json | 2 +- .../SaveAnywhere/Framework/NPCExtensions.cs | 239 +++++++++++++ .../SaveAnywhere/Framework/SaveAnywhereAPI.cs | 30 ++ .../SaveAnywhere/Framework/SaveManager.cs | 39 ++- .../Framework/SchedulePathInfo.cs | 64 ++++ GeneralMods/SaveAnywhere/SaveAnywhere.cs | 318 ++++++------------ GeneralMods/SaveAnywhere/SaveAnywhere.csproj | 3 + GeneralMods/SaveAnywhere/manifest.json | 3 +- GeneralMods/StardustCore/manifest.json | 2 +- 14 files changed, 548 insertions(+), 433 deletions(-) create mode 100644 GeneralMods/SaveAnywhere/Framework/NPCExtensions.cs create mode 100644 GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs create mode 100644 GeneralMods/SaveAnywhere/Framework/SchedulePathInfo.cs diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 4e99d9b7..d5b04aea 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -2260,5 +2260,48 @@ namespace Omegasis.HappyBirthday } return b.ToString(); } + + + public string getBirthdayMessage(string NPC) + { + if (Game1.player.friendshipData.ContainsKey(NPC)) + { + if (Game1.player.getSpouse() != null) { + if (Game1.player.getSpouse().Name.Equals(NPC)) + { + if (string.IsNullOrEmpty(this.spouseBirthdayWishes[NPC])) + { + return this.generateSpouseBirthdayDialogue(NPC); + } + else + { + return this.spouseBirthdayWishes[NPC]; + } + } + else + { + if (this.birthdayWishes.ContainsKey(NPC)) + { + return this.birthdayWishes[NPC]; + } + } + } + + } + else + { + if (this.birthdayWishes.ContainsKey(NPC)) + { + return this.birthdayWishes[NPC]; + } + else + { + return "Happy birthday @!"; + } + } + return "Happy birthday @!"; + } } } + + diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs index e194093e..1a231883 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayEvents.cs @@ -636,7 +636,7 @@ namespace Omegasis.HappyBirthday.Framework conditions.Add(new StardustCore.Events.Preconditions.NPCSpecific.DatingNPC(shane)); EventHelper e = new EventHelper("BirthdayDating:Shane", 19960, conditions, new EventStartData("playful", 26, 15, new EventStartData.FarmerData(19, 18, EventHelper.FacingDirection.Left), new List() { - new EventStartData.NPCData(shane,3,19, EventHelper.FacingDirection.Down), + new EventStartData.NPCData(shane,25,16, EventHelper.FacingDirection.Down), })); e.globalFadeIn(); diff --git a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs index c9931ecf..4a36ea51 100644 --- a/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs +++ b/GeneralMods/HappyBirthday/Framework/BirthdayMenu.cs @@ -27,6 +27,7 @@ namespace Omegasis.HappyBirthday.Framework /// The player's current birthday season. private string BirthdaySeason; + private string seasonName; /// The player's current birthday day. private int BirthdayDay; @@ -46,6 +47,7 @@ namespace Omegasis.HappyBirthday.Framework : base(Game1.viewport.Width / 2 - (632 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2 - Game1.tileSize, 632 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2 + Game1.tileSize) { this.BirthdaySeason = HappyBirthday.Config.translationInfo.getTranslatedString(season); + this.seasonName = season; this.BirthdayDay = day; this.OnChanged = onChanged; this.SetUpPositions(); @@ -147,8 +149,9 @@ namespace Omegasis.HappyBirthday.Framework case "Fall": case "Winter": this.BirthdaySeason = HappyBirthday.Config.translationInfo.getTranslatedString(name); - this.OnChanged(this.BirthdaySeason, this.BirthdayDay); - Game1.activeClickableMenu = new BirthdayMenu(this.BirthdaySeason, this.BirthdayDay, this.OnChanged); + this.seasonName = name; + this.OnChanged(this.seasonName, this.BirthdayDay); + Game1.activeClickableMenu = new BirthdayMenu(this.seasonName, this.BirthdayDay, this.OnChanged); break; // OK button @@ -160,8 +163,8 @@ namespace Omegasis.HappyBirthday.Framework default: this.BirthdayDay = Convert.ToInt32(name); - this.OnChanged(this.BirthdaySeason, this.BirthdayDay); - Game1.activeClickableMenu = new BirthdayMenu(this.BirthdaySeason, this.BirthdayDay, this.OnChanged); + this.OnChanged(this.seasonName, this.BirthdayDay); + Game1.activeClickableMenu = new BirthdayMenu(this.seasonName, this.BirthdayDay, this.OnChanged); break; } Game1.playSound("coin"); @@ -174,7 +177,7 @@ namespace Omegasis.HappyBirthday.Framework public override void receiveLeftClick(int x, int y, bool playSound = true) { //If the season is not selected then the day buttons can't be clicked. Thanks to @Potato#5266 on the SDV discord for this tip. - if (string.IsNullOrEmpty(this.BirthdaySeason)==false) + if (string.IsNullOrEmpty(this.seasonName)==false) { foreach (ClickableTextureComponent button in this.DayButtons) { @@ -199,7 +202,7 @@ namespace Omegasis.HappyBirthday.Framework if (this.OkButton.containsPoint(x, y)) { - if (this.BirthdaySeason == "" || this.BirthdayDay == 0) return; + if (this.seasonName == "" || this.BirthdayDay == 0) return; this.HandleButtonClick(this.OkButton.name); this.OkButton.scale -= 0.25f; this.OkButton.scale = Math.Max(0.75f, this.OkButton.scale); @@ -247,7 +250,7 @@ namespace Omegasis.HappyBirthday.Framework //Game1.player.FarmerSprite.draw(b, new Vector2((this.xPositionOnScreen + Game1.tileSize + Game1.tileSize * 2 / 3 - 2), (this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4)),1f); // draw day buttons - if (string.IsNullOrEmpty(this.BirthdaySeason)==false) + if (string.IsNullOrEmpty(this.seasonName)==false) { foreach (ClickableTextureComponent button in this.DayButtons) button.draw(b); @@ -273,7 +276,7 @@ namespace Omegasis.HappyBirthday.Framework } // draw OK button - if (this.BirthdayDay != 0 && this.BirthdaySeason != "") + if (this.BirthdayDay != 0 && this.seasonName != "") this.OkButton.draw(b); else { diff --git a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs index dd34ed38..0464279f 100644 --- a/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs +++ b/GeneralMods/HappyBirthday/Framework/TranslationInfo.cs @@ -220,11 +220,10 @@ namespace Omegasis.HappyBirthday.Framework public string getTranslatedString(string Key) { - + if (string.IsNullOrEmpty(Key)) return ""; if (Key.Equals("Birthday")) { - string s = Game1.content.LoadString("Strings\\UI:Billboard_Birthday"); - s = s.Split(' ')[0]; + string s = Game1.content.LoadString("Strings\\UI:Profile_Birthday"); return s; } if (Key.Equals("Spring") || Key.Equals("spring")) diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 5cdca360..425f2c2b 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -96,6 +96,7 @@ namespace Omegasis.HappyBirthday helper.Events.Multiplayer.PeerDisconnected += this.Multiplayer_PeerDisconnected; helper.Events.GameLoop.GameLaunched += this.GameLoop_GameLaunched; helper.Events.Player.Warped += this.Player_Warped; + helper.Events.GameLoop.ReturnedToTitle += this.GameLoop_ReturnedToTitle; ModHelper = this.Helper; ModMonitor = this.Monitor; @@ -105,6 +106,11 @@ namespace Omegasis.HappyBirthday } + private void GameLoop_ReturnedToTitle(object sender, ReturnedToTitleEventArgs e) + { + this.eventManager = new EventManager(); + } + private void Player_Warped(object sender, WarpedEventArgs e) { if (e.NewLocation == Game1.getLocationFromName("CommunityCenter")) @@ -416,132 +422,8 @@ namespace Omegasis.HappyBirthday if ((Game1.player.getFriendshipHeartLevelForNPC(Game1.currentSpeaker.Name) < Config.minimumFriendshipLevelForBirthdayWish)) return; if (Game1.activeClickableMenu is StardewValley.Menus.DialogueBox && this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayWish==false && (Game1.player.getFriendshipHeartLevelForNPC(Game1.currentSpeaker.Name) >= Config.minimumFriendshipLevelForBirthdayWish)) { - IReflectedField < Dialogue > cDialogue= this.Helper.Reflection.GetField((Game1.activeClickableMenu as DialogueBox), "characterDialogue", true); - IReflectedField> dialogues = this.Helper.Reflection.GetField>((Game1.activeClickableMenu as DialogueBox), "dialogues", true); - string dialogueMessage = ""; - if (Game1.player.getSpouse() != null) - { - if (Game1.player.getSpouse().Name.Equals(Game1.currentSpeaker.Name)) - { - if (this.messages.spouseBirthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - dialogueMessage = this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name]; - if (string.IsNullOrEmpty(dialogueMessage)) - { - dialogueMessage = this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name); - } - } - else - { - dialogueMessage = this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name); - if (string.IsNullOrEmpty(dialogueMessage)) - { - dialogueMessage = "Happy Birthday @!"; - } - } - } - else - { - if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - - dialogueMessage = this.messages.birthdayWishes[Game1.currentSpeaker.Name]; - } - else - { - dialogueMessage = "Happy Birthday @!"; - } - } - } - else - { - if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - - dialogueMessage = this.messages.birthdayWishes[Game1.currentSpeaker.Name]; - } - else - { - dialogueMessage = "Happy Birthday @!"; - } - } - dialogueMessage = dialogueMessage.Replace("@", Game1.player.Name); - - - if (dialogues.GetValue().Contains(dialogueMessage)) - { - string name = Game1.currentSpeaker.Name; - this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayWish = true; - /* - if (this.IsBirthday() && this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayGift==false && Game1.player.getFriendshipHeartLevelForNPC(name) >= Config.minNeutralFriendshipGiftLevel) - { - try - { - this.giftManager.SetNextBirthdayGift(Game1.currentSpeaker.Name); - this.Monitor.Log("Setting next birthday gift."); - } - catch (Exception ex) - { - this.Monitor.Log(ex.ToString(), LogLevel.Error); - } - } - */ - return; - } - if (cDialogue.GetValue() != null) - { - if (cDialogue.GetValue().getCurrentDialogue() == dialogueMessage) - { - string name = Game1.currentSpeaker.Name; - this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayWish = true; - - if (this.IsBirthday() && this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayGift == false && Game1.player.getFriendshipHeartLevelForNPC(name) >= Config.minNeutralFriendshipGiftLevel) - { - try - { - this.giftManager.SetNextBirthdayGift(Game1.currentSpeaker.Name); - this.Monitor.Log("Setting next birthday gift. 3"); - } - catch (Exception ex) - { - this.Monitor.Log(ex.ToString(), LogLevel.Error); - } - } - - - return; - } - } - Dialogue d; - if (Game1.player.getSpouse() != null) - { - if (this.messages.spouseBirthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - if (string.IsNullOrEmpty(this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name])== false){ - d = new Dialogue(this.messages.spouseBirthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); - } - else - { - d =new Dialogue(this.messages.generateSpouseBirthdayDialogue(Game1.currentSpeaker.Name),Game1.currentSpeaker); - } - - } - else - { - d = new Dialogue("Happy Birthday @!", Game1.currentSpeaker); - } - } - else - { - if (this.messages.birthdayWishes.ContainsKey(Game1.currentSpeaker.Name)) - { - d = new Dialogue(this.messages.birthdayWishes[Game1.currentSpeaker.Name], Game1.currentSpeaker); - } - else - { - d = new Dialogue("Happy Birthday @!", Game1.currentSpeaker); - } - } + //IReflectedField < Dialogue > cDialogue= this.Helper.Reflection.GetField((Game1.activeClickableMenu as DialogueBox), "characterDialogue", true); + //IReflectedField> dialogues = this.Helper.Reflection.GetField>((Game1.activeClickableMenu as DialogueBox), "dialogues", true); Game1.currentSpeaker.resetCurrentDialogue(); Game1.currentSpeaker.resetSeasonalDialogue(); this.Helper.Reflection.GetMethod(Game1.currentSpeaker, "loadCurrentDialogue", true).Invoke(); @@ -558,7 +440,8 @@ namespace Omegasis.HappyBirthday this.Monitor.Log(ex.ToString(), LogLevel.Error); } } - Game1.activeClickableMenu = new DialogueBox(d); + + Game1.activeClickableMenu = new DialogueBox(new Dialogue(this.messages.getBirthdayMessage(Game1.currentSpeaker.Name),Game1.currentSpeaker)); this.VillagerQueue[Game1.currentSpeaker.Name].hasGivenBirthdayWish = true; // Set birthday gift for the player to recieve from the npc they are currently talking with. @@ -612,7 +495,8 @@ namespace Omegasis.HappyBirthday this.CheckedForBirthday = false; // load settings - this.MigrateLegacyData(); + // + //this.MigrateLegacyData(); this.PlayerData = this.Helper.Data.ReadJsonFile(this.DataFilePath) ?? new PlayerData(); if (HappyBirthday.Config.autoSetTranslation) @@ -622,7 +506,7 @@ namespace Omegasis.HappyBirthday if (PlayerBirthdayData != null) { - ModMonitor.Log("Send all birthday information from " + Game1.player.Name); + //ModMonitor.Log("Send all birthday information from " + Game1.player.Name); MultiplayerSupport.SendBirthdayInfoToOtherPlayers(); } @@ -715,6 +599,7 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Harvey); this.eventManager.addEvent(birthdayDating_Elliott); this.eventManager.addEvent(birthdayDating_Sam); + this.eventManager.addEvent(birthdayDating_Alex); this.eventManager.addEvent(birthdayDating_Shane); if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) { @@ -815,7 +700,7 @@ namespace Omegasis.HappyBirthday string starMessage = BirthdayMessages.GetTranslatedString("Happy Birthday: Star Message"); - ModMonitor.Log(starMessage); + //ModMonitor.Log(starMessage); Messages.ShowStarMessage(starMessage); MultiplayerSupport.SendBirthdayMessageToOtherPlayers(); @@ -912,7 +797,6 @@ namespace Omegasis.HappyBirthday } } - if (Game1.player.CanReadJunimo()) { Game1.player.mailbox.Add("birthdayJunimos"); @@ -925,64 +809,10 @@ namespace Omegasis.HappyBirthday { if (npc is Child || npc is Horse || npc is Junimo || npc is Monster || npc is Pet) continue; - - //Add in birthday dialogues for npc. - try - { - if (Game1.player.getFriendshipHeartLevelForNPC(npc.Name) >= Config.minimumFriendshipLevelForBirthdayWish) - { - bool spouseMessage = false; //Used to determine if there is a valid spouse message for the player. If false load in the generic birthday wish. - //Check if npc name is spouse's name. If no spouse then add in generic dialogue. - if (this.messages.spouseBirthdayWishes.ContainsKey(npc.Name) && Game1.player.isMarried()) - { - if (Game1.player.getSpouse().Name.Equals(npc.Name)) - { - //this.Monitor.Log("Spouse Checks out"); - //Check to see if spouse message exists. - if (!string.IsNullOrEmpty(this.messages.spouseBirthdayWishes[npc.Name])) - { - spouseMessage = true; - - string message = this.messages.spouseBirthdayWishes[npc.Name]; - if (string.IsNullOrEmpty(message)) - { - message = this.messages.generateSpouseBirthdayDialogue(npc.Name); - } - Dialogue d = new Dialogue(message, npc); - npc.CurrentDialogue.Push(d); - if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(message); - } - else - { - string message = this.messages.generateSpouseBirthdayDialogue(npc.Name); - Dialogue d = new Dialogue(message, npc); - npc.CurrentDialogue.Push(d); - if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(message); - spouseMessage = true; - this.Monitor.Log("No spouse message???", LogLevel.Warn); - } - } - - } - if (!spouseMessage) - { - //Load in - Dialogue d = new Dialogue(this.messages.birthdayWishes[npc.Name], npc); - npc.CurrentDialogue.Push(d); - if (npc.CurrentDialogue.Peek() != d) npc.setNewDialogue(this.messages.birthdayWishes[npc.Name]); - } - } - } - catch - { - if (Game1.player.getFriendshipHeartLevelForNPC(npc.Name) >= Config.minimumFriendshipLevelForBirthdayWish) - { - Dialogue d = new Dialogue("Happy Birthday @!", npc); - npc.CurrentDialogue.Push(d); - if (npc.CurrentDialogue.Peek() != d) - npc.setNewDialogue("Happy Birthday @!"); - } - } + string message = this.messages.getBirthdayMessage(npc.Name); + Dialogue d = new Dialogue(message, npc); + npc.CurrentDialogue.Push(d); + if (npc.CurrentDialogue.ElementAt(0) != d) npc.setNewDialogue(message); } } } @@ -1034,9 +864,10 @@ namespace Omegasis.HappyBirthday { return this.PlayerData.BirthdayDay == Game1.dayOfMonth - && this.PlayerData.BirthdaySeason.Equals(Game1.currentSeason); + && this.PlayerData.BirthdaySeason.ToLower().Equals(Game1.currentSeason.ToLower()); } + /* /// Migrate the legacy settings for the current player. private void MigrateLegacyData() { @@ -1072,5 +903,6 @@ namespace Omegasis.HappyBirthday } } } + */ } } diff --git a/GeneralMods/HappyBirthday/manifest.json b/GeneralMods/HappyBirthday/manifest.json index 10511db4..6a20a114 100644 --- a/GeneralMods/HappyBirthday/manifest.json +++ b/GeneralMods/HappyBirthday/manifest.json @@ -1,7 +1,7 @@ { "Name": "Happy Birthday", "Author": "Alpha_Omegasis", - "Version": "1.10.0", + "Version": "1.10.4", "Description": "Adds the farmer's birthday to the game.", "UniqueID": "Omegasis.HappyBirthday", "EntryDll": "HappyBirthday.dll", diff --git a/GeneralMods/SaveAnywhere/Framework/NPCExtensions.cs b/GeneralMods/SaveAnywhere/Framework/NPCExtensions.cs new file mode 100644 index 00000000..f4b11ec9 --- /dev/null +++ b/GeneralMods/SaveAnywhere/Framework/NPCExtensions.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using StardewValley; + +namespace Omegasis.SaveAnywhere.Framework +{ + public static class NPCExtensions + { + /// + /// Fill in the npcs schedule with a billion end points and hope they find their way again? + /// + /// + public static void fillInSchedule(this NPC npc) + { + if (npc.Schedule == null) return; + + + + IDictionary rawSchedule = GetRawSchedule(npc.Name); + if (rawSchedule == null) + return; + string schedulekey = GetScheduleKey(npc); + rawSchedule.TryGetValue(schedulekey, out string scheduleForTheDay); + + if (string.IsNullOrEmpty(scheduleForTheDay)) + { + return; + } + + + // parse entries + string[] entries = scheduleForTheDay.Split('/'); + //make a class to get all of the schedule info..... + + + int scheduleIndex = 0; + + SortedDictionary actualScheduleData = new SortedDictionary(); //time of day and the the path info. + + for (int i = 0; i < entries.Length; i++) + { + + + string[] fields = entries[i].Split(' '); + + // handle GOTO command + if (fields[0].Equals("GOTO")) + { + rawSchedule.TryGetValue(fields[1], out scheduleForTheDay); + entries = scheduleForTheDay.Split('/'); + i = -1; + } + + + SchedulePathInfo info2 = new SchedulePathInfo(entries[i]); + if (info2.timeToGoTo == 0) continue; + + else + { + actualScheduleData.Add(info2.timeToGoTo, info2); + } + + } + + int index = 0; + List> scheduleData = actualScheduleData.ToList(); + scheduleData.OrderBy(i => i.Key); + + for (int time = 600; time <= 2600; time += 10) + { + + if (index >= scheduleData.Count) + { + if (actualScheduleData.ContainsKey(time) == false) + { + actualScheduleData.Add(time, scheduleData[scheduleData.Count-1].Value); + continue; + } + } + + if (index == scheduleData.Count - 1) + { + if (actualScheduleData.ContainsKey(time)==false) + { + actualScheduleData.Add(time, scheduleData[index].Value); + } + } + else + { + if (time == scheduleData[index + 1].Key) + { + index++; + continue; + } + else + { + if (actualScheduleData.ContainsKey(time) == false) + { + actualScheduleData.Add(time, scheduleData[index].Value); + } + } + } + } + + //SaveAnywhere.ModMonitor.Log("Count of schedule size is: " + npc.Name + " " + actualScheduleData.Count, StardewModdingAPI.LogLevel.Info); + //npc.checkSchedule(Game1.timeOfDay); + + + + SchedulePathInfo info = actualScheduleData[Game1.timeOfDay]; + + SchedulePathDescription schedulePathDescription; + schedulePathDescription = SaveAnywhere.ModHelper.Reflection + .GetMethod(npc, "pathfindToNextScheduleLocation") + .Invoke(npc.currentLocation.Name, npc.getTileX(), npc.getTileY(), info.endMap, info.endX, info.endY, info.endDirection, info.endBehavior, info.endMessage); + + npc.DirectionsToNewLocation = schedulePathDescription; + npc.controller = new PathFindController(npc.DirectionsToNewLocation.route, npc, Utility.getGameLocationOfCharacter(npc)) + { + finalFacingDirection = npc.DirectionsToNewLocation.facingDirection, + endBehaviorFunction = null + }; + + + } + + /// Get an NPC's raw schedule data from the XNB files. + /// The NPC name whose schedules to read. + /// Returns the NPC schedule if found, else null. + private static IDictionary GetRawSchedule(string npcName) + { + try + { + return Game1.content.Load>($"Characters\\schedules\\{npcName}"); + } + catch + { + return null; + } + } + + private static string GetScheduleKey(NPC npc) + { + string str = Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); + string scheduleKey = ""; + if (npc.Name.Equals("Penny") && (str.Equals("Tue") || str.Equals("Wed") || str.Equals("Fri")) || (npc.Name.Equals("Maru") && (str.Equals("Tue") || str.Equals("Thu")) || npc.Name.Equals("Harvey") && (str.Equals("Tue") || str.Equals("Thu")))) + { + scheduleKey = "marriageJob"; + } + if (!Game1.isRaining && npc.hasMasterScheduleEntry("marriage_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) + { + scheduleKey = "marriage_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); + } + if (npc.hasMasterScheduleEntry(Game1.currentSeason + "_" + Game1.dayOfMonth.ToString())) + { + scheduleKey = Game1.currentSeason + "_" + Game1.dayOfMonth.ToString(); + } + + int playerFriendshipLevel1 = Utility.GetAllPlayerFriendshipLevel(npc); + if (playerFriendshipLevel1 >= 0) + playerFriendshipLevel1 /= 250; + for (; playerFriendshipLevel1 > 0; --playerFriendshipLevel1) + { + if (npc.hasMasterScheduleEntry(Game1.dayOfMonth.ToString() + "_" + (object)playerFriendshipLevel1)) + scheduleKey = Game1.dayOfMonth.ToString() + "_" + (object)playerFriendshipLevel1; + } + if (npc.hasMasterScheduleEntry(Game1.dayOfMonth.ToString())) + scheduleKey = Game1.dayOfMonth.ToString(); + if (npc.Name.Equals("Pam") && Game1.player.mailReceived.Contains("ccVault")) + scheduleKey = "bus"; + + if (Game1.isRaining) + { + if (Game1.random.NextDouble() < 0.5 && npc.hasMasterScheduleEntry("rain2")) + scheduleKey = "rain2"; + if (npc.hasMasterScheduleEntry("rain")) + scheduleKey = "rain"; + } + + List stringList = new List() + { + Game1.currentSeason, + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth) + }; + int playerFriendshipLevel2 = Utility.GetAllPlayerFriendshipLevel(npc); + if (playerFriendshipLevel2 >= 0) + playerFriendshipLevel2 /= 250; + while (playerFriendshipLevel2 > 0) + { + stringList.Add(string.Empty + (object)playerFriendshipLevel2); + if (npc.hasMasterScheduleEntry(string.Join("_", (IEnumerable)stringList))) + { + scheduleKey = string.Join("_", (IEnumerable)stringList); + break; + } + --playerFriendshipLevel2; + stringList.RemoveAt(stringList.Count - 1); + } + if (npc.hasMasterScheduleEntry(string.Join("_", (IEnumerable)stringList))) + scheduleKey = string.Join("_", (IEnumerable)stringList); + if (npc.hasMasterScheduleEntry(Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) + scheduleKey = Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); + if (npc.hasMasterScheduleEntry(Game1.currentSeason)) + scheduleKey = Game1.currentSeason; + if (npc.hasMasterScheduleEntry("spring_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) + scheduleKey = "spring_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); + + stringList.RemoveAt(stringList.Count - 1); + stringList.Add("spring"); + int playerFriendshipLevel3 = Utility.GetAllPlayerFriendshipLevel(npc); + if (playerFriendshipLevel3 >= 0) + playerFriendshipLevel3 /= 250; + while (playerFriendshipLevel3 > 0) + { + stringList.Add(string.Empty + (object)playerFriendshipLevel3); + if (npc.hasMasterScheduleEntry(string.Join("_", (IEnumerable)stringList))) + scheduleKey = string.Join("_", (IEnumerable)stringList); + --playerFriendshipLevel3; + stringList.RemoveAt(stringList.Count - 1); + } + if (npc.hasMasterScheduleEntry("spring")) + scheduleKey = "spring"; + else + { + scheduleKey = ""; + } + return scheduleKey; + + } + } + + +} + + diff --git a/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs b/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs new file mode 100644 index 00000000..2c105023 --- /dev/null +++ b/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.SaveAnywhere.Framework +{ + public class SaveAnywhereAPI + { + public SaveAnywhereAPI() + { + + } + + public void addBeforeSaveEvent(string ID, Action BeforeSave) + { + SaveAnywhere.Instance.SaveManager.beforeCustomSavingBegins.Add(ID, BeforeSave); + } + public void addAfterSaveEvent(string ID, Action BeforeSave) + { + SaveAnywhere.Instance.SaveManager.afterCustomSavingCompleted.Add(ID, BeforeSave); + } + public void addAfterLoadEvent(string ID, Action BeforeSave) + { + SaveAnywhere.Instance.SaveManager.afterSaveLoaded.Add(ID, BeforeSave); + } + + } +} diff --git a/GeneralMods/SaveAnywhere/Framework/SaveManager.cs b/GeneralMods/SaveAnywhere/Framework/SaveManager.cs index a26bc946..0fe7aaad 100644 --- a/GeneralMods/SaveAnywhere/Framework/SaveManager.cs +++ b/GeneralMods/SaveAnywhere/Framework/SaveManager.cs @@ -36,6 +36,9 @@ namespace Omegasis.SaveAnywhere.Framework private NewSaveGameMenu currentSaveMenu; + public Dictionary beforeCustomSavingBegins; + public Dictionary afterCustomSavingCompleted; + public Dictionary afterSaveLoaded; /********* ** Public methods @@ -50,6 +53,10 @@ namespace Omegasis.SaveAnywhere.Framework this.Reflection = reflection; this.OnLoaded = onLoaded; + this.beforeCustomSavingBegins = new Dictionary(); + this.afterCustomSavingCompleted = new Dictionary(); + this.afterSaveLoaded = new Dictionary(); + } private void empty(object o, EventArgs args) { } @@ -74,7 +81,12 @@ namespace Omegasis.SaveAnywhere.Framework { this.currentSaveMenu.SaveComplete -= this.CurrentSaveMenu_SaveComplete; this.currentSaveMenu = null; + SaveAnywhere.RestoreMonsters(); //AfterSave.Invoke(this, EventArgs.Empty); + foreach (var v in this.afterCustomSavingCompleted) + { + v.Value.Invoke(); + } } /// Clear saved data. @@ -87,16 +99,31 @@ namespace Omegasis.SaveAnywhere.Framework this.RemoveLegacyDataForThisPlayer(); } + /// + /// Checks to see if a custom save file exists for the player. + /// + /// + public bool saveDataExists() + { + return File.Exists(Path.Combine(this.Helper.DirectoryPath, this.RelativeDataPath)); + } + /// Initiate a game save. public void BeginSaveData() { + + foreach(var v in this.beforeCustomSavingBegins) + { + v.Value.Invoke(); + } + // save game data Farm farm = Game1.getFarm(); - if (farm.shippingBin.Any()) + if (farm.getShippingBin(Game1.player)!=null) { - Game1.activeClickableMenu = new NewShippingMenu(farm.shippingBin, this.Reflection); - farm.shippingBin.Clear(); + Game1.activeClickableMenu = new NewShippingMenu(farm.getShippingBin(Game1.player), this.Reflection); + farm.getShippingBin(Game1.player).Clear(); farm.lastItemShipped = null; this.WaitingToSave = true; } @@ -134,6 +161,10 @@ namespace Omegasis.SaveAnywhere.Framework this.ResumeSwimming(data); this.SetPositions(data.Characters); this.OnLoaded?.Invoke(); + foreach (var v in this.afterSaveLoaded) + { + v.Value.Invoke(); + } // Notify other mods that load is complete //AfterLoad.Invoke(this, EventArgs.Empty); @@ -197,7 +228,7 @@ namespace Omegasis.SaveAnywhere.Framework { // player { - CharacterData data = positions.FirstOrDefault(p => p.Type == CharacterType.Player && p.Name == Game1.player.Name); + CharacterData data = positions.FirstOrDefault(p => p.Type == CharacterType.Player && p.Name.Equals(Game1.player.Name)); if (data != null) { Game1.player.previousLocationName = Game1.player.currentLocation.Name; diff --git a/GeneralMods/SaveAnywhere/Framework/SchedulePathInfo.cs b/GeneralMods/SaveAnywhere/Framework/SchedulePathInfo.cs new file mode 100644 index 00000000..c3724441 --- /dev/null +++ b/GeneralMods/SaveAnywhere/Framework/SchedulePathInfo.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Omegasis.SaveAnywhere.Framework +{ + public class SchedulePathInfo + { + public int timeToGoTo; + public int endX; + public int endY; + public string endMap; + public int endDirection; + public string endBehavior; + public string endMessage; + + public SchedulePathInfo() + { + + } + + public SchedulePathInfo(string RawData) + { + string[] fields = RawData.Split(' '); + try + { + this.timeToGoTo = Convert.ToInt32(fields[0]); + } + catch(Exception err) + { + + + return; + } + this.endMap = fields[1]; + this.endX =Convert.ToInt32(fields[2]); + this.endY =Convert.ToInt32(fields[3]); + this.endDirection =Convert.ToInt32(fields[4]); + if (fields.Length >= 6) + { + if (fields[5][0] == '"') + { + this.endMessage = fields[5].Substring(fields[5].IndexOf('"')); + } + } + if (fields.Length >= 7) + { + + if (fields[5][0] == '"') + { + this.endBehavior = fields[5]; + } + else + { + this.endMessage = fields[6].Substring(fields[6].IndexOf('"')); + } + + } + } + + } +} diff --git a/GeneralMods/SaveAnywhere/SaveAnywhere.cs b/GeneralMods/SaveAnywhere/SaveAnywhere.cs index 6d6620cf..e078836f 100644 --- a/GeneralMods/SaveAnywhere/SaveAnywhere.cs +++ b/GeneralMods/SaveAnywhere/SaveAnywhere.cs @@ -13,6 +13,8 @@ namespace Omegasis.SaveAnywhere /// The mod entry point. public class SaveAnywhere : Mod { + + public static SaveAnywhere Instance; /********* ** Fields *********/ @@ -20,7 +22,8 @@ namespace Omegasis.SaveAnywhere private ModConfig Config; /// Provides methods for saving and loading game data. - private SaveManager SaveManager; + public SaveManager SaveManager; + /// The parsed schedules by NPC name. private readonly IDictionary NpcSchedules = new Dictionary(); @@ -29,7 +32,7 @@ namespace Omegasis.SaveAnywhere private bool ShouldResetSchedules; /// Whether we're performing a non-vanilla save (i.e. not by sleeping in bed). - private bool IsCustomSaving; + public bool IsCustomSaving; /// Used to access the Mod's helper from other files associated with the mod. public static IModHelper ModHelper; @@ -37,10 +40,12 @@ namespace Omegasis.SaveAnywhere /// Used to access the Mod's monitor to allow for debug logging in other files associated with the mod. public static IMonitor ModMonitor; - private List monsters; + private Dictionary> monsters; private bool customMenuOpen; + private bool firstLoad; + /********* ** Public methods @@ -54,14 +59,27 @@ namespace Omegasis.SaveAnywhere this.SaveManager = new SaveManager(this.Helper, this.Helper.Reflection, onLoaded: () => this.ShouldResetSchedules = true); helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded; - helper.Events.GameLoop.Saved += this.OnSaved; helper.Events.GameLoop.UpdateTicked += this.OnUpdateTicked; helper.Events.GameLoop.DayStarted += this.OnDayStarted; helper.Events.Input.ButtonPressed += this.OnButtonPressed; + helper.Events.GameLoop.ReturnedToTitle += this.GameLoop_ReturnedToTitle; + helper.Events.GameLoop.TimeChanged += this.GameLoop_TimeChanged; ModHelper = helper; ModMonitor = this.Monitor; this.customMenuOpen = false; + Instance = this; + this.firstLoad = false; + } + + private void GameLoop_TimeChanged(object sender, TimeChangedEventArgs e) + { + //throw new NotImplementedException(); + } + + private void GameLoop_ReturnedToTitle(object sender, ReturnedToTitleEventArgs e) + { + this.firstLoad = false; } @@ -74,32 +92,20 @@ namespace Omegasis.SaveAnywhere private void OnSaveLoaded(object sender, SaveLoadedEventArgs e) { // reset state - this.IsCustomSaving = false; this.ShouldResetSchedules = false; - // load positions this.SaveManager.LoadData(); + //this.SaveManager.ClearData(); + } - /// Raised after the game finishes writing data to the save file (except the initial save creation). - /// The event sender. - /// The event arguments. - private void OnSaved(object sender, SavedEventArgs e) - { - // clear custom data after a normal save (to avoid restoring old state) - if (!this.IsCustomSaving) - this.SaveManager.ClearData(); - else - { - this.IsCustomSaving = false; - } - } /// Raised after the game state is updated (≈60 times per second). /// The event sender. /// The event arguments. private void OnUpdateTicked(object sender, UpdateTickedEventArgs e) { + // let save manager run background logic if (Context.IsWorldReady) { @@ -107,17 +113,16 @@ namespace Omegasis.SaveAnywhere this.SaveManager.Update(); } - // reset NPC schedules - if (Context.IsWorldReady && this.ShouldResetSchedules) + + + if (Game1.activeClickableMenu == null && Context.IsWorldReady) { - this.ShouldResetSchedules = false; - this.ApplySchedules(); + this.IsCustomSaving = false; } if (Game1.activeClickableMenu == null && !this.customMenuOpen) return; if (Game1.activeClickableMenu == null && this.customMenuOpen) { - this.restoreMonsters(); this.customMenuOpen = false; return; } @@ -133,27 +138,37 @@ namespace Omegasis.SaveAnywhere /// Saves all monsters from the game world. private void cleanMonsters() { - this.monsters = new List(); + this.monsters = new Dictionary>(); - foreach (var npc in Game1.player.currentLocation.characters) + foreach (GameLocation loc in Game1.locations) { - try + this.monsters.Add(loc, new List()); + foreach (var npc in loc.characters) { if (npc is Monster monster) - this.monsters.Add(monster); + { + this.Monitor.Log(npc.Name); + this.monsters[loc].Add(monster); + } } - catch { } + foreach (var monster in this.monsters[loc]) + loc.characters.Remove(monster); } - foreach (var monster in this.monsters) - Game1.player.currentLocation.characters.Remove(monster); + } /// Adds all saved monster back into the game world. - private void restoreMonsters() + public static void RestoreMonsters() { - foreach (var monster in this.monsters) - Game1.player.currentLocation.characters.Add(monster); + foreach (var pair in SaveAnywhere.Instance.monsters) + { + foreach (Monster m in pair.Value) + { + pair.Key.addCharacter(m); + } + } + SaveAnywhere.Instance.monsters.Clear(); } /// Raised after the game begins a new day (including when the player loads a save). @@ -161,15 +176,41 @@ namespace Omegasis.SaveAnywhere /// The event arguments. private void OnDayStarted(object sender, DayStartedEventArgs e) { - // reload NPC schedules - this.ShouldResetSchedules = true; + //this.Monitor.Log("On day started called.", LogLevel.Info); - // update NPC schedules - this.NpcSchedules.Clear(); - foreach (NPC npc in Utility.getAllCharacters()) + if (this.IsCustomSaving == false) { - if (!this.NpcSchedules.ContainsKey(npc.Name)) - this.NpcSchedules.Add(npc.Name, this.ParseSchedule(npc)); + if (this.firstLoad == false) + { + this.firstLoad = true; + if (this.SaveManager.saveDataExists()) + { + this.ShouldResetSchedules = false; + this.ApplySchedules(); + } + } + else if (this.firstLoad == true) + { + + this.SaveManager.ClearData(); //Clean the save state on consecutive days to ensure save files aren't lost inbetween incase the player accidently quits. + } + + //this.Monitor.Log("Cleaning old save file.", LogLevel.Info); + + // reload NPC schedules + this.ShouldResetSchedules = true; + + // reset NPC schedules + + /* + // update NPC schedules + this.NpcSchedules.Clear(); + foreach (NPC npc in Utility.getAllCharacters()) + { + if (!this.NpcSchedules.ContainsKey(npc.Name)) + this.NpcSchedules.Add(npc.Name, this.ParseSchedule(npc)); + } + */ } } @@ -184,6 +225,9 @@ namespace Omegasis.SaveAnywhere // initiate save (if valid context) if (e.Button == this.Config.SaveKey) { + + if (Game1.eventUp) return; + if (Game1.isFestival()) return; if (Game1.client == null) { this.cleanMonsters(); @@ -213,199 +257,25 @@ namespace Omegasis.SaveAnywhere return; // apply for each NPC - foreach (NPC npc in Utility.getAllCharacters()) + foreach (GameLocation loc in Game1.locations) { - if (npc.DirectionsToNewLocation != null || npc.isMoving() || npc.Schedule == null || npc.controller != null || npc is Horse) - continue; - - // get raw schedule from XNBs - IDictionary rawSchedule = this.GetRawSchedule(npc.Name); - if (rawSchedule == null) - continue; - - // get schedule data - if (!this.NpcSchedules.TryGetValue(npc.Name, out string scheduleData) || string.IsNullOrEmpty(scheduleData)) + foreach (NPC npc in loc.characters) { - //this.Monitor.Log("THIS IS AWKWARD"); - continue; - } - - // get schedule script - if (!rawSchedule.TryGetValue(scheduleData, out string script)) - continue; - - // parse entries - string[] entries = script.Split('/'); - int index = 0; - foreach (string _ in entries) - { - string[] fields = entries[index].Split(' '); - - // handle GOTO command - if (fields.Contains("GOTO")) - { - for (int i = 0; i < fields.Length; i++) - { - string s = fields[i]; - if (s == "GOTO") - { - rawSchedule.TryGetValue(fields[i + 1], out script); - string[] newEntries = script.Split('/'); - fields = newEntries[0].Split(' '); - } - } - } - - // parse schedule script - SchedulePathDescription schedulePathDescription; - try - { - if (Convert.ToInt32(fields[0]) > Game1.timeOfDay) break; - string endMap = Convert.ToString(fields[1]); - int x = Convert.ToInt32(fields[2]); - int y = Convert.ToInt32(fields[3]); - int endFacingDir = Convert.ToInt32(fields[4]); - - schedulePathDescription = this.Helper.Reflection - .GetMethod(npc, "pathfindToNextScheduleLocation") - .Invoke(npc.currentLocation.Name, npc.getTileX(), npc.getTileY(), endMap, x, y, endFacingDir, null, null); - index++; - } - catch - { + if (npc.isVillager() == false) continue; - } - npc.DirectionsToNewLocation = schedulePathDescription; - npc.controller = new PathFindController(npc.DirectionsToNewLocation.route, npc, Utility.getGameLocationOfCharacter(npc)) - { - finalFacingDirection = npc.DirectionsToNewLocation.facingDirection, - endBehaviorFunction = null - }; + npc.fillInSchedule(); + continue; } + } + } - /// Get an NPC's raw schedule data from the XNB files. - /// The NPC name whose schedules to read. - /// Returns the NPC schedule if found, else null. - private IDictionary GetRawSchedule(string npcName) + public override object GetApi() { - try - { - return Game1.content.Load>($"Characters\\schedules\\{npcName}"); - } - catch - { - return null; - } - } - /// Load the raw schedule data for an NPC. - /// The NPC whose schedule to read. - private string ParseSchedule(NPC npc) - { - // set flags - if (npc.Name.Equals("Robin") || Game1.player.currentUpgrade != null) - npc.IsInvisible = false; - if (npc.Name.Equals("Willy") && Game1.stats.DaysPlayed < 2u) - npc.IsInvisible = true; - else if (npc.Schedule != null) - npc.followSchedule = true; - - // read schedule data - IDictionary schedule = this.GetRawSchedule(npc.Name); - if (schedule == null) - return ""; - - // do stuff - if (npc.isMarried()) - { - string dayName = Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); - if ((npc.Name.Equals("Penny") && (dayName.Equals("Tue") || dayName.Equals("Wed") || dayName.Equals("Fri"))) || (npc.Name.Equals("Maru") && (dayName.Equals("Tue") || dayName.Equals("Thu"))) || (npc.Name.Equals("Harvey") && (dayName.Equals("Tue") || dayName.Equals("Thu")))) - { - this.Helper.Reflection - .GetField(npc, "nameOfTodaysSchedule") - .SetValue("marriageJob"); - return "marriageJob"; - } - if (!Game1.isRaining && schedule.ContainsKey("marriage_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) - { - this.Helper.Reflection - .GetField(npc, "nameOfTodaysSchedule") - .SetValue("marriage_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth)); - return "marriage_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); - } - npc.followSchedule = false; - return null; - } - else - { - if (schedule.ContainsKey(Game1.currentSeason + "_" + Game1.dayOfMonth)) - return Game1.currentSeason + "_" + Game1.dayOfMonth; - int i; - Game1.player.friendshipData.TryGetValue(npc.Name, out Friendship f); - for (i = (Game1.player.friendshipData.ContainsKey(npc.Name) ? (f.Points / 250) : -1); i > 0; i--) - { - if (schedule.ContainsKey(Game1.dayOfMonth + "_" + i)) - return Game1.dayOfMonth + "_" + i; - } - if (schedule.ContainsKey(string.Empty + Game1.dayOfMonth)) - return string.Empty + Game1.dayOfMonth; - if (npc.Name.Equals("Pam") && Game1.player.mailReceived.Contains("ccVault")) - return "bus"; - if (Game1.isRaining) - { - if (Game1.random.NextDouble() < 0.5 && schedule.ContainsKey("rain2")) - return "rain2"; - if (schedule.ContainsKey("rain")) - return "rain"; - } - List list = new List { Game1.currentSeason, Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth) }; - Game1.player.friendshipData.TryGetValue(npc.Name, out Friendship friendship); - i = (Game1.player.friendshipData.ContainsKey(npc.Name) ? (friendship.Points / 250) : -1); - while (i > 0) - { - list.Add(string.Empty + i); - if (schedule.ContainsKey(string.Join("_", list))) - { - return string.Join("_", list); - } - i--; - list.RemoveAt(list.Count - 1); - } - if (schedule.ContainsKey(string.Join("_", list))) - { - return string.Join("_", list); - } - if (schedule.ContainsKey(Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) - { - return Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); - } - if (schedule.ContainsKey(Game1.currentSeason)) - { - return Game1.currentSeason; - } - if (schedule.ContainsKey("spring_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth))) - { - return "spring_" + Game1.shortDayNameFromDayOfSeason(Game1.dayOfMonth); - } - list.RemoveAt(list.Count - 1); - list.Add("spring"); - Game1.player.friendshipData.TryGetValue(npc.Name, out Friendship friendship2); - i = (Game1.player.friendshipData.ContainsKey(npc.Name) ? (friendship2.Points / 250) : -1); - while (i > 0) - { - list.Add(string.Empty + i); - if (schedule.ContainsKey(string.Join("_", list))) - return string.Join("_", list); - i--; - list.RemoveAt(list.Count - 1); - } - return schedule.ContainsKey("spring") - ? "spring" - : null; - } + return new SaveAnywhereAPI(); } } } diff --git a/GeneralMods/SaveAnywhere/SaveAnywhere.csproj b/GeneralMods/SaveAnywhere/SaveAnywhere.csproj index 9e2f201d..cec68590 100644 --- a/GeneralMods/SaveAnywhere/SaveAnywhere.csproj +++ b/GeneralMods/SaveAnywhere/SaveAnywhere.csproj @@ -84,7 +84,10 @@ + + + diff --git a/GeneralMods/SaveAnywhere/manifest.json b/GeneralMods/SaveAnywhere/manifest.json index ce472d68..394cd544 100644 --- a/GeneralMods/SaveAnywhere/manifest.json +++ b/GeneralMods/SaveAnywhere/manifest.json @@ -1,11 +1,12 @@ { "Name": "Save Anywhere", "Author": "Alpha_Omegasis", - "Version": "2.11.0", + "Version": "2.12.0", "Description": "Lets you save almost anywhere.", "UniqueID": "Omegasis.SaveAnywhere", "EntryDll": "SaveAnywhere.dll", "MinimumApiVersion": "2.10.1", + "UpdateKeys": [ "Nexus:444" ], "Dependencies": [ ] } diff --git a/GeneralMods/StardustCore/manifest.json b/GeneralMods/StardustCore/manifest.json index 864047c2..2abd5ea3 100644 --- a/GeneralMods/StardustCore/manifest.json +++ b/GeneralMods/StardustCore/manifest.json @@ -1,7 +1,7 @@ { "Name": "StardustCore", "Author": "Alpha_Omegasis", - "Version": "2.3.0", + "Version": "2.4.0", "Description": "A core mod that allows for other mods of mine to be run.", "UniqueID": "Omegasis.StardustCore", "EntryDll": "StardustCore.dll",