Stardew Valley
0 of 0

File information

Last updated

Original upload

Created by

aedenthorn

Uploaded by

aedenthorn

Virus scan

Safe to use

About this mod

Changes the Help Wanted board to display multiple quests, lets you increase number of days to complete quests, optionally require requesters to actually like or even love the items they request, and more!

Requirements
Permissions and credits
Changelogs
Donations
This mod enhances the Help Wanted board in front of the Seed Shop.

Its main functionality is to replace the single "quest of the day" with a list of quest notes stuck to the billboard.

Other features include:

  • Require people to actually like (or even love) the items they request (optional)
  • Ignore the game's restrictions on items to request (only one of the above is set)
  • Set a max price for item requests (default -1 means disabled)
  • Toggle allowing requests for artisan goods (default true)
  • Toggle avoiding posting quests from NPCs with max hearts (default true) - only activates in single player mode
  • Set a custom number of days allowed to complete help wanted quests (default 2)
  • Set the max number of quests per day (default 10)
  • Change the relative chance of receiving any type of quest
  • Customize the default quest notes
  • Add quests via a SMAPI API

Relative quest type chances are relative to each other. Slay monster quests are only available if one has unlocked the mine and played for at least 6 days.

Max number of quests per day is limited by the number of notes that can fit on the board within the configurable overlap parameters.

Custom Quest Notes

To replace the default notepad icon and / or pin (drawn by Lumisteria) target the following paths using Content Patcher:

aedenthorn.HelpWanted/pad
aedenthorn.HelpWanted/pin

An example of a mod that does this is (CP) Help Wanted Pad and Pin Retexture.


Specific Quest Notes

You can also make icons specific to npcs, quest types, or even quest types per NPC by targeting subpaths as follows:

aedenthorn.HelpWanted/pad/NPCNAME
aedenthorn.HelpWanted/pad/QUESTTYPE
aedenthorn.HelpWanted/pad/NPCNAME/QUESTTYPE

aedenthorn.HelpWanted/pin/NPCNAME
aedenthorn.HelpWanted/pin/QUESTTYPE
aedenthorn.HelpWanted/pin/NPCNAME/QUESTTYPE

Replace NPCNAME with the codename of the NPC, e.g.

aedenthorn.HelpWanted/pad/Emily

Replace QUESTTYPE with the quest type, e.g.

aedenthorn.HelpWanted/pad/ItemDelivery

Valid quest types are:

  • ItemDelivery
  • ResourceCollection
  • Fishing
  • SlayMonster


Random Quest Notes

Any of the above paths can be used to provide multiple textures to be chosen at random, by adding a suffix /NUMBER, e.g.:

aedenthorn.HelpWanted/pad/1
aedenthorn.HelpWanted/pad/2
...


aedenthorn.HelpWanted/pin/Emily/ItemDelivery/1
aedenthorn.HelpWanted/pin/Emily/ItemDelivery/2
...

etc.

Numbers must be sequential, starting at 1.


Adding Quests

Quests can be added using either Content Patcher or C#


Content Patcher

To add quests using Content Patcher, you can simply input the quest details as follows:

{
"Action": "EditData",
"Target": "aedenthorn.HelpWanted/dictionary",
"Entries": {
"aedenthorn.TestQuest": {
"percentChance": 100,
"quest": {
"questType": "ItemDelivery",
"target": "Krobus",
"item": "Gold Bar",
"number": 1,
"questDescription": "Gib Gold Bar, Krobus",
"targetMessage": "Tanks bigly.",
"currentObjective": "Give Gold Bar to Krobus."
}
}
}
},

If percentChance is omitted (or set to 100), the quest will show up every day. You can use Content Patcher When conditions to further choose when the quest will be added to the dictionary.

questType can be any of the following:

  • ItemDelivery
  • ResourceCollection
  • Fishing
  • SlayMonster

You can add questTitle to give your quest a custom title.

You can customize the quest board visuals using the complete set of fields, which you can see on GitHub.


SMAPI C#

To add a quest with C#, use SMAPI's mod api system. You will need to create a class that implements the following interface:

    public interface IQuestData
    {
        public Texture2D padTexture { get; set; }
        public Rectangle padTextureSource { get; set; }
        public Color padColor { get; set; }
        public Texture2D pinTexture { get; set; }
        public Rectangle pinTextureSource { get; set; }
        public Color pinColor { get; set; }
        public Texture2D icon { get; set; }
        public Rectangle iconSource { get; set; }
        public Color iconColor { get; set; }
        public float iconScale { get; set; }
        public Point iconOffset { get; set; }
        public Quest quest { get; set; }
    }

You then pass an instance of this class to the API using another interface:

    public interface IHelpWantedAPI
    {
        public void AddQuestToday(IQuestData data);
    }

This should be done in Helper.Events.GameLoop.DayStarted.

Here's an example:

        public override void Entry(IModHelper helper)
        {
            Helper.Events.GameLoop.DayStarted += GameLoop_DayStarted;
        }
        private void GameLoop_DayStarted(object sender, StardewModdingAPI.Events.DayStartedEventArgs e)
        {
            var api = Helper.ModRegistry.GetApi<IHelpWantedAPI>("aedenthorn.HelpWanted");
            if (api != null)
            {
                var d = new MyQuestData()
                {
                    pinTextureSource = new Rectangle(0, 0, 64, 64),
                    padTextureSource = new Rectangle(0, 0, 64, 64),
                    pinTexture = pinTexture,
                    padTexture = padTexture,
                    pinColor = Color.Black,
                    padColor = Color.Gray,
                    icon = Game1.getCharacterFromName("Krobus").Portrait,
                    iconSource = new Rectangle(0, 0, 64, 64),
                    iconColor = new Color(150, 150, 150, 150),
                    iconScale = 1,
                    iconOffset = new Point(32, 64),
                    quest = new ItemDeliveryQuest()
                };
                (d.quest as ItemDeliveryQuest).target.Value = "Krobus";
                (d.quest as ItemDeliveryQuest).item.Value = 305;
                (d.quest as ItemDeliveryQuest).targetMessage = "I can haz void egg? Tanks lots.";
                d.quest.currentObjective = "Gib Krobus void egg.";
                d.quest.questDescription = "Pls gib.";
                api.AddQuestToday(d);
            }
        }



Credits

Thanks to Lumisteria for the unprompted kindness of making the pad / pin icon.


Config

You can customize this mod by editing the config file or using Generic Mod Config Menu.


Technical

Requires SMAPI.

Implements a Generic Mod Config Menu interface to change config settings in-game.

Compatible with Mod Updater for automatic updates.

Code is at https://github.com/aedenthorn/StardewValleyMods.

If you want to complain or ask for help or help me test my mods, you can visit my Discord server.

A list of all my mods for Stardew Valley is available at https://www.nexusmods.com/stardewvalley/articles/895.