Making stories for Dressmaker

This is a small example. Rose introduces Aster, Aster visits your shop, then sends a pigeon commission. It needs Mod Loader 0.6.24 or newer. Put the folder in Mods, or install its ZIP through Mod Manager. Restart the game.

The first conversation becomes available from level 5, after the opening tutorial. Existing conversations may play first. These are extra commissions; the original story stays there. Save a backup before trying a story pack.

Start with mod.json. Change the pack ID, name, author and version before sharing your own. Keep IDs the same when updating a pack. Saves use them to remember people and quests.

clients
Add a person with id, name and baseCharacter. Use story-reference.json to find the game's character IDs. This example borrows Rose's silhouette, body and portraits. portrait, happyPortrait, sadPortrait and postcard can point to your own PNG or JPG files inside the pack. Transparent PNGs work well for portraits. For more faces, add an expressions object such as {"surprised":"portraits/surprised.png"}, then use <<set_mod_portrait surprised>> in Yarn. This needs a Mod Loader build newer than 0.6.78.

shape is optional. bust, waist and hips are the game's body sliders: 0 is small, 1 is large. These are not centimetres. Leave shape out to use the base character's exact sizing. The measuring room uses this body, and the game resizes its garments normally.

storyDialogues
Each scene has id, client and lines. client can be an original character ID or one of your own client IDs. Each scene plays once and gets remembered in the save.

commissions
Give it id, name, client, summary, budget and requirements. delivery is visit for a front-desk visit, or pigeon for the pigeon list. Pigeon jobs still need the game's pigeon feature unlocked. A commission is offered once and gets the normal measuring, sketchbook, sewing, completion and rewards.
With Mod Loader 0.6.64 or newer, optional measurementsCm sets the commission's bust, waist and hips target in centimetres, for example "measurementsCm": {"bust": 106.68, "waist": 84.02, "hips": 101.44}. The loader matches the client's body to these values when the measuring room opens. The mannequin still starts at its usual size for the player to adjust. Leave measurementsCm out to use the client's normal measured size; shape sets that default body.

availability
minimumLevel and minimumRelationship set when something becomes available. afterQuests lists quests that must have succeeded first. afterDialogues lists scenes that must have played first. All conditions must match. Use local IDs for your own pack, or the full pack ID plus item ID for another pack. Original quest IDs work too.

requirements
A tag rule uses type: tag, tag: Daywear, value: 50. comparison can be AtLeast, Exactly or AtMost; AtLeast is the default.
Other types: quality; fabric with fabricType; color with color; fabricPercentage with fabricType and value; colorPercentage with color and value; accessoryCount with accessoryType and value; trimLength with accessoryType and centimetres in value; accessoryVariety, colorVariety or fabricVariety with a whole number in value; garment with an exact garment ID.
For an allowed palette, use type: color with colors: ["Red", "Black"]. This rejects cut panels using other colors. Add colorPercentage rules if both colors must appear.
Percentages use 0 to 100. Use fabric-reference.json, accessory-reference.json and garment-reference.json for names. story-reference.json lists clients, quests, colors and outcomes.

Dialogue
Simple dialogue goes in lines or in a commission's dialogue.prompt, complete, failed and excelled. Each entry is one line. These can also contain Yarn commands or indented choices. Missing outcome dialogue gets a short default reply.

For more choices, use a .yarn file and list it under yarnFiles. dialogue.yarn shows an example. No compiling needed. The loader uses the game's Yarn compiler.

Node names begin with Mod_ and the pack ID, with dots and hyphens changed to underscores. A commission uses its full ID plus _Prompt, _Complete, _Failed or _Excelled. A story dialogue uses just its full ID. For example: Mod_example_story_starter_rose_daywear_Prompt. A matching node in your Yarn file replaces the simple dialogue for that node. Give custom #line: IDs unique names too.

Yarn variables work during dialogue. For progress across sessions, chain scenes with afterQuests and afterDialogues. Do not depend on arbitrary Yarn variables being saved. This release has no repeatable/random commission generator or visual story editor yet.

Removing a pack
The loader keeps a local story-cache so client and quest references already in your saves can still be read. Removed packs stop offering new jobs, but an already accepted job can still use its retained dialogue. Restore your save backup if you want to undo story progress.

Sharing
ZIP the folder containing mod.json and its images/Yarn files. There is no DLL to compile for your story pack. Keep the loader separate.
