[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"mod-patch-operation-collection":3,"mods-more-author-patch-operation-collection":27,"mods-more-category-patch-operation-collection":67,"mods-similar-patch-operation-collection":121},{"id":4,"slug":5,"name":6,"shortDescription":7,"author":8,"workshopUrl":9,"imageKey":10,"thumbnailUrl":11,"packageId":12,"category":13,"tags":14,"downloadCount":18,"rating":19,"publishedAt":20,"updatedAt":21,"description":22,"ratingCount":23,"version":10,"gameVersion":10,"images":24,"videos":25,"kofiUrl":26,"patreonUrl":26},"750addbf-445e-40ee-a5e1-1943b504ccfc","patch-operation-collection","Patch Operation Collection","Various patch operations to enable types of patches that would normally not be possible through xml alone.","bradson","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=3418307310","","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F29937711815399268\u002F8DB3A610D480E0DC7CD3F02DE56DF9C83A1AEA7E\u002F","patch.operation.collection","management",[15,16,17],"mod","1.5","1.4",278,4.8,"2025-01-31T20:21:17.0000000Z","2025-03-08T16:11:32.0000000Z","\u003Cp>Various patch operations to enable types of patches that would normally not be possible through xml alone. A couple mods including Adaptive Storage already use this, with assemblies simply included there and no dependency set. Users should only activate this if a mod happens to have the dependency set, and definitely shouldn't just ignore the warning in-game in that situation.\r\u003Cbr>Available on github, with slightly better formatting than on steam: https:\u002F\u002Fgithub.com\u002Fbbradson\u002FPatch-Operation-Collection\r\u003Cbr>  \r\u003Cbr>Included are:  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>GeneratorOperationV2\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>PatchOperations to generate defs and more patch operations.  \r\u003Cbr>  \r\u003Cbr>The two operations to do this are:  \u003Ccode>\r\u003Cbr>GeneratorOperationV2.DefGenerator\r\u003Cbr>\u003C\u002Fcode>which generates a Def from a template in its \u003Cvalue> for each match on its \u003Cxpath> and\u003Ccode>\r\u003Cbr>GeneratorOperationV2.PatchGenerator\r\u003Cbr>\u003C\u002Fcode>which generates a PatchOperation from a template in its \u003Cvalue> for each match on its \u003Cxpath>.  \r\u003Cbr>  \r\u003Cbr>The template takes curly braces as placeholders to replace with the values pointed by their path, within the target the template is generated for. The ExamplePatches folder includes an example with operations to generate lamps for every chunk in the game, including chunks added by mods, and using their color to control lamp glow. CDATA is required to allow use of the special characters these operations look for in the value node. V2 differs from GeneratorOperation by allowing nested braces in the template and accepting direct strings or numbers returned by xpath functions like name(),\r\u003Cbr>instead of only full nodes.    \r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>LanguageOperation\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to conditionally run other operations depending on the selected language.  \r\u003Cbr>  \r\u003Cbr>\u003Ccode>\r\u003Cbr>\u003COperation Class=\"LanguageOperation.Conditional\">\r\u003Cbr>    \u003Cdebug>false\u003C\u002Fdebug>\u003C!-- optional. Can be set to true to log patch behaviour -->\r\u003Cbr>\r\u003Cbr>    \u003Clanguage>LANGUAGE_HERE\u003C\u002Flanguage>\r\u003Cbr>\r\u003Cbr>    \u003Cmatch Class=\"PATCH_OPERATION_HERE\">\r\u003Cbr>        \u003C!-- this runs when the specified language is active -->\r\u003Cbr>    \u003C\u002Fmatch>\r\u003Cbr>\r\u003Cbr>    \u003Cnomatch Class=\"PATCH_OPERATION_HERE\">\r\u003Cbr>        \u003C!-- this runs when the specified language is not active -->\r\u003Cbr>    \u003C\u002Fnomatch>\r\u003Cbr>\u003C\u002FOperation>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>CopyOperation\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>Patch operations to copy nodes that are the target of one xpath into destinations with a different xpath.  \u003Ccode>\r\u003Cbr>Class=\"CopyOperation.Add\"\r\u003Cbr>Class=\"CopyOperation.Insert\"\r\u003Cbr>Class=\"CopyOperation.Replace\"\r\u003Cbr>Class=\"CopyOperation.Set\"\r\u003Cbr>Class=\"CopyOperation.TryAdd\"\r\u003Cbr>\u003Cxpath>\u003C!-- the context xpath that value and destination both get scoped to -->\r\u003Cbr>\u003Cvalue>\u003C!-- the value xpath. It is not required to have both xpath and value defined. Only having\r\u003Cbr>one of the two set works too -->\r\u003Cbr>\u003Cdestination>\u003C!-- the xpath for the destination node to copy into -->\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>DatabaseDump\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to log the full contents of the game's loaded Defs xml at the exact point in time that the operation runs from.  \u003Ccode>\r\u003Cbr>Class=\"DatabaseDump.Operation\"\r\u003Cbr>\u003C!-- no additional arguments. This always logs full database contents. -->\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>DefNameLink\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to link a defName to a def of a different name, intended to handle removal of the def that had its name used as link. This is very similar to the recently released ReplaceLib mod, but using a patch operation instead of def, with support for all def types and optional customization for the phase to establish the link at. \u003Ccode>\r\u003Cbr>Class=\"DefNameLink.Operation\"\r\u003Cbr>\u003CdefName>\u003C!-- the name to have linked to another def -->\r\u003Cbr>\u003CtargetDef>\u003C!-- the def to have fetched for any lookup using the previous name -->\r\u003Cbr>\u003CdefType>\u003C!-- the type of the def, ThingDef by default -->\r\u003Cbr>\u003CgenerationPhase>\u003C!-- The loading step to establish links in. PreResolve by default. Other options\r\u003Cbr>are PreDefGeneration and PostResolve -->\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>PatchOperationSet\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to set a target node to a specified value, similar to PatchOperationReplace, or create the node if it's missing. The depth of node creation here goes up to the first filter predicate.\r\u003Cbr>A target of \u003Ccode>a\u002Fb\u002Fc\u002Fd\u002Fe\u003C\u002Fcode> can have c, d and e created if they're missing, but not a or b.  \u003Ccode>\r\u003Cbr>Class=\"PatchOperationSet.Operation\"\r\u003Cbr>\u003Cxpath>\r\u003Cbr>\u003Cvalue>\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>PatchOperationTryAdd\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to set a value for a target node only if it's missing, and not replace if the target is already there. Just like PatchOperationSet, the Add part of this is capable of adding multiple nodes up to the first filter predicate.  \u003Ccode>\r\u003Cbr>Class=\"PatchOperationTryAdd.Operation\"\r\u003Cbr>\u003Cxpath>\r\u003Cbr>\u003Cvalue>\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>PostInheritanceOperation\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation that runs another patch operation after the game's xml inheritance process. Any def with ParentName attribute will have contents of all its ancestors inserted into it at that point, while keeping the same ParentName.  \u003Ccode>\r\u003Cbr>Class=\"PostInheritanceOperation.Patch\"\r\u003Cbr>\u003Coperation Class=\"PatchOperation\">\u003C!-- the other operation to perform post inheritance -->\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>\u003Ch4>SaveGameCompatibility\u003C\u002Fh4>\r\u003Cbr>\r\u003Cbr>A patch operation to perform conversions for Things on save loading. This can do reassignments between def, stuff and thingClass, from the values the Thing has gotten saved with to new values as set in the patch operation. All nodes are optional, as long as there is at least one valid pair from previous to new. Multiple values set in previous are treated with AND, meaning only defs satisfying all conditions get values reassigned.  \u003Ccode>\r\u003Cbr>Class=\"SaveGameCompatibility.Operation\"\r\u003Cbr>\u003CpreviousDefName>\r\u003Cbr>\u003CpreviousStuff>\r\u003Cbr>\u003CpreviousClassName>\r\u003Cbr>\u003CnewDefName>\r\u003Cbr>\u003CnewStuff>\r\u003Cbr>\u003CnewClassName>\r\u003Cbr>\u003Cdebug>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>  \r\u003Cbr>  \r\u003Cbr>Licensed for the public domain under Creative Commons CC0. To use in a mod, just copy over the assembly. No legal notices required, but a link to github sources is encouraged.\r\u003Cbr>Everyone is entirely free to use, modify, copy and redistribute code and assemblies for any purpose.\r\u003Cbr>GitHub: https:\u002F\u002Fgithub.com\u002Fbbradson\u002FPatch-Operation-Collection  \r\u003Cbr>  \r\u003Cbr>Harmony is required for DefNameLink, PostInheritanceOperation and SaveGameCompatibility. The other operations can technically be used without Harmony too, when extracted separately.\u003C\u002Fp>",22,[],[],null,[28,41,55],{"id":29,"slug":30,"name":31,"shortDescription":32,"author":8,"workshopUrl":33,"imageKey":10,"thumbnailUrl":34,"packageId":35,"category":13,"tags":36,"downloadCount":38,"rating":19,"publishedAt":39,"updatedAt":40},"10fd3d84-a56a-4b0e-8365-a923d26f8555","oversized-apparel-framework","Oversized Apparel Framework","Obsolete with 1.5. To change drawSizes now simply add a \u003CdrawData> with \u003Cscale>1\u003C\u002Fscale> inside of \u003Capparel>. Offsets are set nested inside of \u003CdefaultData>, \u003CdataNorth>, \u003CdataEast>, etc within \u003CdrawData> as \u003Coffset>(x,y,z)\u003C\u002Foffset> nodes now. \u003Cpivot>, \u003Crotation>, \u003CrotationOffset","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2630800313","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1780603077210891933\u002F162625FAD8177142B504EC6153AF376C3E2928A1\u002F","bs.oversizedapparel",[15,17,37],"1.3",62031,"2021-10-17T20:49:23.0000000Z","2022-11-26T12:41:43.0000000Z",{"id":42,"slug":43,"name":44,"shortDescription":45,"author":8,"workshopUrl":46,"imageKey":10,"thumbnailUrl":47,"packageId":48,"category":13,"tags":49,"downloadCount":51,"rating":52,"publishedAt":53,"updatedAt":54},"c489b99b-da1f-488a-9b99-0365c2df5518","xenotype-spawn-control","Xenotype Spawn Control","Diversify the xenotypes in your world!","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2891975564","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1946146966789727803\u002F527B3B360124A099B51B280F3535EE5E8C982651\u002F","bs.xenotypespawncontrol",[15,50,16,17],"1.6",137767,4.9,"2022-11-22T17:58:13.0000000Z","2025-07-13T20:25:45.0000000Z",{"id":56,"slug":57,"name":58,"shortDescription":59,"author":8,"workshopUrl":60,"imageKey":10,"thumbnailUrl":61,"packageId":62,"category":13,"tags":63,"downloadCount":64,"rating":52,"publishedAt":65,"updatedAt":66},"2cbd4559-ce69-420d-9de6-48fd7596f1b4","better-log-fix-your-errors","Better Log - Fix your errors","Enhance your log experience.","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2772559481","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1851547365666714776\u002F6B1BA3CD93F3D40BCEDEA52EA81DA9B3981FF248\u002F","bs.betterlog",[15,16,17,37],62758,"2022-03-04T10:36:09.0000000Z","2024-04-15T09:28:14.0000000Z",[68,81,94,107],{"id":69,"slug":70,"name":71,"shortDescription":72,"author":73,"workshopUrl":74,"imageKey":10,"thumbnailUrl":75,"packageId":76,"category":13,"tags":77,"downloadCount":78,"rating":52,"publishedAt":79,"updatedAt":80},"56cde3aa-2be0-46fc-93bf-286e487320f4","vanilla-apparel-expanded","Vanilla Apparel Expanded","1.2.1 (25\u002F02\u002F2020): Formal wear now counts as royal apparel. 1.2.0 (19\u002F02\u002F2020): This mod is now 1.1 compatible. After a hundred hours playing RimWorld you notice that every pawn wears somewhat the same things. The base game apparel is not really as interesting, unique and variou","Oskar Potocki","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1814987817","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F17914054259451166663\u002F768658D3C5B5ADB2E14188F0B3E249AE7B0E8317\u002F","vanillaexpanded.vappe",[15,50,16,17],1467956,"2019-07-25T17:30:35.0000000Z","2026-01-17T20:36:32.0000000Z",{"id":82,"slug":83,"name":84,"shortDescription":85,"author":86,"workshopUrl":87,"imageKey":10,"thumbnailUrl":88,"packageId":89,"category":13,"tags":90,"downloadCount":91,"rating":52,"publishedAt":92,"updatedAt":93},"2ffbb671-aedc-4e35-9084-1367dcc48d99","interaction-bubbles","Interaction Bubbles","Wouldn't it be great if you could read character interactions?","Jaxe","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1516158345","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1835794279689724818\u002F9E12B4DF24F247D74B368CE56D90528C2B70D3A6\u002F","jaxe.bubbles",[15,16,17,37,50],1796489,"2018-09-18T11:34:38.0000000Z","2025-08-25T17:27:36.0000000Z",{"id":95,"slug":96,"name":97,"shortDescription":98,"author":99,"workshopUrl":100,"imageKey":10,"thumbnailUrl":101,"packageId":102,"category":13,"tags":103,"downloadCount":104,"rating":52,"publishedAt":105,"updatedAt":106},"c78d3bc9-4f6c-4319-b1ec-fc6395769709","vanilla-cooking-expanded","Vanilla Cooking Expanded","Mechanics are simple and intuitive - keeping within the vanilla spirit without unnecessary fluff and production chains.","Sarg Bjornson","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2134308519","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F13142774387753198757\u002F212ECFC6797DA805832331E7A4E6F3D2C76317EC\u002F","vanillaexpanded.vcooke",[15,50,16,17],1337382,"2020-06-18T18:16:45.0000000Z","2026-06-16T14:44:37.0000000Z",{"id":108,"slug":109,"name":110,"shortDescription":111,"author":86,"workshopUrl":112,"imageKey":10,"thumbnailUrl":113,"packageId":114,"category":13,"tags":115,"downloadCount":118,"rating":52,"publishedAt":119,"updatedAt":120},"037614b4-3975-4ac3-a20a-9de9aaab0d68","rimhud","RimHUD","RimHUD is a UI mod that displays detailed information about a selected character or creature.","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1508850027","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1687146164330163452\u002F43BA9FD0FD6A3123B367C2FDAC84A663856CC242\u002F","jaxe.rimhud",[15,50,16,17,37,116,117],"1.2","1.1",2137039,"2018-09-10T17:32:31.0000000Z","2025-08-15T04:32:32.0000000Z",[122,136,149,164],{"id":123,"slug":124,"name":125,"shortDescription":126,"author":127,"workshopUrl":128,"imageKey":10,"thumbnailUrl":129,"packageId":130,"category":13,"tags":131,"downloadCount":132,"rating":133,"publishedAt":134,"updatedAt":135},"7e30d916-26de-4df5-b488-bc6016b94967","smarter-construction","Smarter Construction","Stop your pawns from constantly building themselves into a wall or blocking something that hasn't been built yet.","Hultis","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2202185773","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1485579161693749136\u002FDAC8E9DDF6F2DBE278495305E1327BAE842FD14D\u002F","dhultgren.smarterconstruction",[15,117,116,16,17,37,50],1457892,5,"2020-08-19T08:37:24.0000000Z","2026-08-07T19:16:09.0000000Z",{"id":137,"slug":138,"name":139,"shortDescription":140,"author":141,"workshopUrl":142,"imageKey":10,"thumbnailUrl":143,"packageId":144,"category":13,"tags":145,"downloadCount":146,"rating":52,"publishedAt":147,"updatedAt":148},"46736a72-6b57-4718-b154-25eb5d59a0f8","replace-stuff","Replace Stuff","Place buildings anywhere, on top of existing things, and the game will handle it.","Uuugggg","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1372003680","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F921426876980662243\u002F50B18BF7A9132FB5B01AFD7A5AACA57DF1940771\u002F","uuugggg.replacestuff",[15,117,116,16,17,37],2059514,"2018-04-28T04:53:36.0000000Z","2024-12-31T18:41:04.0000000Z",{"id":150,"slug":151,"name":152,"shortDescription":153,"author":154,"workshopUrl":155,"imageKey":10,"thumbnailUrl":156,"packageId":157,"category":13,"tags":158,"downloadCount":161,"rating":52,"publishedAt":162,"updatedAt":163},"93cefb4e-a79e-46a7-9ad4-d34a60c5b645","humanoid-alien-races","Humanoid Alien Races","A framework for the creation of new alien races in Rimworld If you ever thought that the racial diversity in rimworld is.","erdelf","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=839005762","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1824515621608894853\u002F5AE15295349EE9518F044869E3E60F4D4521D3BB\u002F","erdelf.humanoidalienraces",[15,50,16,17,37,116,117,159,160],"1.0","0.19",1846480,"2017-01-09T22:50:33.0000000Z","2026-07-16T01:25:06.0000000Z",{"id":165,"slug":166,"name":167,"shortDescription":168,"author":73,"workshopUrl":169,"imageKey":10,"thumbnailUrl":170,"packageId":171,"category":13,"tags":172,"downloadCount":173,"rating":52,"publishedAt":174,"updatedAt":175},"8ef9e287-362f-4194-b7f2-644edf3d6e84","vanilla-events-expanded","Vanilla Events Expanded","See changenotes. Vanilla Events Expanded is one of our oldest mods, and I’m honestly shocked it’s holding up so well - it’s pretty resistant to game updates and bugs because of its simplicity. Back when I first made it with Kikohi, we didn’t know much about modding. I just wanted","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1938420742","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F13132919981746529669\u002F634387B0351B8054F777E94EDCDE0619759927FD\u002F","vanillaexpanded.vee",[15,50,16,17],1432419,"2019-12-16T18:08:01.0000000Z","2026-07-22T10:41:12.0000000Z"]