SMAPI
About SMAPI
Modding docs
Tools
Mod compatibility
Log parser
JSON validator
JSON validator
Upload a JSON file
Choose the JSON format:
None
SMAPI: manifest
SMAPI: translations (i18n)
Content Patcher
Drag the file onto this textbox
(or
choose a file
)
:
{ "Format": "2.8.0", "Changes": [ //simple asset changes// { "LogName": "Horse Reskin", "Action": "Load", "Target": "Animals/horse.png", "FromFile": "assets/CKDucatiPersonal.png" }, { "LogName": "Horsehead Reskin", "Action": "EditImage", "Target": "LooseSprites/Cursors", "FromFile": "assets/DucatiIcon.png", "FromArea": { "X": 0, "Y": 0, "Width": 16, "Height": 16 }, "ToArea": { "X": 192, "Y": 192, "Width": 16, "Height": 16 } }, { "LogName": "Flute Reskin", "Action": "EditImage", "Target": "Maps/springobjects", "FromFile": "Assets/DucatiFlute.png", "ToArea": { "X": 368, "Y": 592, "Width": 16, "Height": 16 } }, { "LogName": "Stable PaintMask Reskin", "Action": "Load", "Target": "Buildings/Stable_PaintMask", "FromFile": "assets/BikeShed_PaintMask.png" }, { "LogName": "Stable PaintMask Expansion", "Action": "EditImage", "Target": "Buildings/Stable_PaintMask", "FromFile": "assets/BikeShed_PaintMask.png", "FromArea": { "X": 0, "Y": 0, "Width": 192, "Height": 176 }, "ToArea": { "X": 0, "Y": 0, "Width": 192, "Height": 176 }, "PatchMode": "Replace" }, //engine audio edits// //will go here; can the full tractormod audio features even be done in cp?// //stable to bikeshed conversion// { "LogName": "Stable Reskin", "Action": "Load", "Target": "Buildings/Stable", "FromFile": "assets/BikeShed.png" }, { "LogName": "Stable Tilesheet Expansion", "Action": "EditImage", "Target": "Buildings/Stable", "FromFile": "assets/BikeShed.png", "FromArea": { "X": 0, "Y": 0, "Width": 192, "Height": 176 }, "ToArea": { "X": 0, "Y": 0, "Width": 192, "Height": 176 }, "PatchMode": "Replace" }, //dynamic bikeshed edits// { "LogName": "Spring & Summer Day/Night BikeShed", "Action": "EditImage", "Target": "Buildings/Stable", "FromFile": "assets/BikeShed.png", "FromArea": { "X": 128, "Y": 0, "Width": 64, "Height": 96 }, "ToArea": { "X": 64, "Y": 0, "Width": 64, "Height": 96 }, "When": { "Time": "{{Range: 2000, 2600}}", "Season": "spring, summer" } }, { "LogName": "Fall Day/Night BikeShed", "Action": "EditImage", "Target": "Buildings/Stable", "FromFile": "assets/BikeShed.png", "FromArea": { "X": 128, "Y": 0, "Width": 64, "Height": 96 }, "ToArea": { "X": 64, "Y": 0, "Width": 64, "Height": 96 }, "When": { "Time": "{{Range: 1900, 2600}}", "Season": "fall" } }, { "LogName": "Winter Day/Night BikeShed", "Action": "EditImage", "Target": "Buildings/Stable", "FromFile": "assets/BikeShed.png", "FromArea": { "X": 128, "Y": 0, "Width": 64, "Height": 96 }, "ToArea": { "X": 64, "Y": 0, "Width": 64, "Height": 96 }, "When": { "Time": "{{Range: 1800, 2600}}", "Season": "winter" } }, //bikeshed door implementation// { "LogName": "BikeShed door", "Action": "EditData", "Target": "Data/Buildings", "Entries": { "Stable": { "AnimalDoor": { "X": 2, "Y": 3, "Width": 2, "Height": 3 }, "AnimalDoorOpenDuration": 0.9375, "AnimalDoorOpenSound": "doorCreak", "AnimalDoorCloseDuration": 0.3125, "AnimalDoorCloseSound": "doorCreakReverse", //noninstanced indoorlocation - ??? what do you do for "interior does not exist" ??? // "DrawLayers": [ { "ID": "Default_AnimalDoor", "SourceRect": { "X": 14, "Y": 112, "Width": 36, "Height": 48 }, "DrawPosition": "14, 48", "DrawInBackground": false, "FrameCount": 1, "FrameDuration": 360, "AnimalDoorOffset": { "X": 0, "Y": 0 } }, { "ID": "Default_AnimalDoor_Open", "SourceRect": { "X": 64, "Y": 0, "Width": 64, "Height": 96 }, "DrawPosition": "78, 49", "DrawInBackground": false, "FrameCount": 1, "FrameDuration": 360, "AnimalDoorOffset": { "X": 0, "Y": 0 } } ] } } } ] }
Click this button: