A deep marriage overhaul for Stardew Valley that makes married life feel alive. Your spouse now has moods, expects to be fed, gets jealous, remembers your anniversary, picks fights when things go wrong, and may even leave you if you neglect them. Every system is fully toggleable and works with vanilla and modded spouses alike.
Eight independent systems, each individually configurable:
Every day is either a cooking day (your spouse handles dinner) or a player-provides day (they expect food left in the fridge). The weekly schedule is generated with a little randomness so it never feels mechanical, and your spouse hints at it in their morning dialogue. Leave food on a provides day for +15 friendship; forget and they go to bed hungry for β40 and a grumpy morning.
When friendship drops below the configured threshold, an argument can break out in the farmhouse in the evening. Each argument is a dialogue tree β good responses recover +50, bad responses cost an extra β80. Every vanilla spouse has at least three unique, in-character argument scenarios that rotate so the same one never repeats back to back.
Let things slide too far and your spouse mails an in-character warning letter. Ignore it and let friendship stay low for several consecutive days, and they will initiate divorce automatically after a personalized farewell scene.
Give a gift to someone your spouse considers a rival and they might notice β losing β15 friendship and giving you an earful the next morning. The odds rise if the gift was a loved item.
Each day your spouse is Happy, Neutral, or Grumpy, based on recent friendship trends, whether they were fed, recent arguments, the weather (most are gloomier in the rain β though Sebastian and Abigail are cheered by it), and a dash of randomness. Mood is expressed entirely through their greeting dialogue β you only know by talking to them, and the spouse's portrait reflects their mood. Neutral days pull from a pool of everyday married-life lines.
Your wedding date is remembered. Each year you get a morning reminder; gift your spouse that day for a +200 bonus and a sweet scene, or forget and face β100 and a disappointed morning.
After an argument you handled badly, your spouse wants to make up. They drop hints about a category of gift (something sweet, something from nature, something homemade). Give the right kind for +150 and a reconciliation. Regular gifts give half friendship until you do.
If you badly neglect your spouse β letting friendship fall below the configurable threshold (default 4 hearts) β they may begin an affair with another single marriage candidate, reveal it in a heartbroken letter, and leave you. Off by a single config toggle if it's too harsh for your game.
A further seventeen optional systems deepen married life, each individually toggleable under the Extended Systems GMCM section: relationship milestones (year 1/3/5 scenes), spouse daily chores, evolving gift preferences, sickness, inside jokes, achievement pride, children interactions, romantic letters, seasonal affection, bad days, a birthday system, town gossip, a honeymoon phase, spouse requests, shared dreams, visitor jealousy, and productivity scaling. All are personalized per vanilla spouse with generic fallbacks for modded ones. See the changelog for details.
Note: vanilla Stardew has no player birthday, so the birthday system uses a configurable date (
PlayerBirthdaySeason/PlayerBirthdayDay; day0disables it).
All systems fall back gracefully to natural, generic behavior for modded spouses (such as those from Stardew Valley Expanded) that don't have personalized content defined. Nothing is hardcoded in a way that breaks when NPC mods are installed.
Out of the box, modded spouses use the generic fallback dialogue. The Custom NPC Framework lets other modders give their own custom NPCs the same personalized treatment the vanilla spouses get β through a plain JSON content pack, no C# or compiling required.
Content resolves in three tiers: vanilla built-in β your registered custom content β generic fallback. Everything is modular: provide only the sections you want, and anything you leave out falls back to the generic pool (per system, and per friendship tier for morning greetings). Vanilla spouses are never affected unless the player opts in.
-
Make a folder in
Stardew Valley/Mods/with amanifest.jsonand acontent.json. -
In the manifest, point
ContentPackForat this mod:{ "Name": "[MO] My Custom NPC", "Author": "Your Name Here", "Version": "1.0.0", "UniqueID": "YourName.MOMyCustomNpc", "ContentPackFor": { "UniqueID": "TitanmasterRy.MarriageOverhaul" } } -
In
content.json, map your NPC's internal name to the sections you want to personalize:{ "Format": "1.0", "NPCs": { "MyCustomNpc": { "Behavior": { "LovesRain": true, "FavoriteSeason": "fall", "LeastSeason": "summer" }, "Morning": { "VeryLow": ["..."], "Low": ["..."], "High": ["..."], "VeryHigh": ["..."] }, "Mood": { "Happy": ["..."], "Neutral": ["..."], "Grumpy": ["..."] }, "Arguments": [ { "Intro": "...", "GoodChoice": "...", "GoodReply": "...", "NeutralChoice": "...", "NeutralReply": "...", "BadChoice": "...", "BadReply": "..." } ], "Anniversary": { "Reminder": "...", "Sweet": "...", "Disappointed": "..." }, "Jealousy": { "Lines": ["..."], "Rivals": ["Npc1", "Npc2"] }, "Makeup": { "Category": "nature", "Hint": "...", "Reconcile": "...", "Resigned": "..." } } } }
That's it β SMAPI discovers the pack automatically and the NPC gets personalized dialogue in-game.
Covered systems: friendship-tiered morning greetings, mood greetings (Happy/Neutral/Grumpy), argument dialogue trees, anniversary lines, jealousy lines + a rival list, makeup-gift hints, and a behavior block (rain mood, favorite/least season). New optional sections can be added in future versions without breaking existing packs.
Translations: pack text is shown verbatim β the framework does not run it through Marriage Overhaul's i18n. Pack authors supply their own strings and handle their own translations (e.g. one pack per language).
π Full author guide: docs/Custom-NPC-Framework.md β every field documented, fallback rules, and the optional C# API.
π¦ Copy-and-edit example: a complete pack for a fictional NPC lives in examples/[MO] Aria Example.
- Stardew Valley 1.6+
- SMAPI 3.18.0 or later
- (Optional) Generic Mod Config Menu for in-game configuration
- Install SMAPI.
- Download this mod and unzip it into your
Stardew Valley/Modsfolder. - Run the game through SMAPI.
Every system can be toggled and tuned. Edit config.json (created after the first run) or use Generic Mod Config Menu, where the options are organized under Systems, Custom NPC Framework, Thresholds, and Jealousy headers with tooltips.
| Option | Default | Description |
|---|---|---|
EnableFeeding |
true |
Fridge-feeding mechanic and cooking/provides schedule. |
EnableArguments |
true |
Evening argument events. |
EnableDivorceWarning |
true |
In-character warning letter when friendship gets low. |
EnableAutoDivorce |
true |
Automatic divorce if things stay broken after the warning. |
EnableJealousy |
true |
Jealousy over gifts to rival NPCs. |
EnableMoodSystem |
true |
Daily Happy/Neutral/Grumpy mood dialogue. |
EnableAnniversary |
true |
Yearly anniversary reminders, bonuses, and penalties. |
EnableMakeupGifts |
true |
Makeup-gift state after a bad argument. |
EnableCheating |
true |
The "ultimate punishment" β a neglected spouse can have an affair and leave you. |
EnableCustomNpcFramework |
true |
Let content packs provide personalized dialogue/behavior for their own custom NPCs (see Custom NPC Framework). |
AllowVanillaOverride |
false |
Allow content packs to override the built-in content for the twelve vanilla spouses. |
ArgumentThresholdHearts |
10 |
Friendship (in hearts) below which arguments can trigger. |
DivorceWarningThresholdHearts |
8 |
Friendship (in hearts) below which the warning letter is sent. |
ConsecutiveDaysBeforeAutoDivorce |
7 |
Days below the warning threshold (after the letter) before divorce. |
CheatingThresholdHearts |
4 |
Friendship (in hearts) below which a neglected spouse may cheat. |
CheatingChance |
0.25 |
Daily chance the spouse cheats while below the cheating threshold. |
JealousyChance |
0.20 |
Chance the spouse notices a gift to a rival. |
JealousyChanceLoved |
0.40 |
Chance the spouse notices when the gift was a loved item. |
EnableDebugCommands |
false |
Register the mo_* testing console commands (see below). |
Set EnableDebugCommands to true (and restart) to register a suite of mo_* console commands for testing β for example mo_status, mo_argue, mo_makeup, mo_hungry, mo_jealousy, mo_warn, mo_anniversary, mo_mood <mood>, mo_hearts <n>, and mo_cheat. These are intended for testing and development and are off by default.
All dialogue is translatable through SMAPI's translation system. The English source lives in
i18n/default.json. To add a language, copy that file to i18n/<locale>.json
(e.g. i18n/es.json for Spanish β see SMAPI's locale codes) and translate the values, leaving the
keys unchanged. Any line you don't translate falls back to English automatically. A few values are
deliberately left as-is because they're identifiers, not dialogue (item names like Pumpkin Pie,
and makeup gift categories) β translating those would break item resolution. Contributions welcome.
See CHANGELOG.md for the full version history.
You are free to use, modify, and learn from this mod.