[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"mod-rimtest-automated-testing-framework":3,"mods-more-author-rimtest-automated-testing-framework":31,"mods-more-category-rimtest-automated-testing-framework":68,"mods-similar-rimtest-automated-testing-framework":125},{"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":29,"kofiUrl":30,"patreonUrl":30},"e4925783-ff23-4c85-b8ac-26d2c570fc8f","rimtest-automated-testing-framework","RimTest - Automated Testing Framework","Finally unit-testing in rimworld modding!","LaTrissTitude","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2199316917","","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1493460101231479701\u002F2833547A37F3531A8AF467632FE81D846BB2430D\u002F","latrisstitude.rimtest","management",[15,16,17],"mod","1.2","1.3",1178,4.9,"2020-08-16T13:00:19.0000000Z","2022-08-05T02:41:20.0000000Z","\u003Cp>\u003Cimg src=\"https:\u002F\u002Fi.imgur.com\u002F2Q44c8X.png\" alt=\"\" loading=\"lazy\">\r\u003Cbr>\r\u003Cbr>Finally unit-testing in rimworld modding! \r\u003Cbr>\r\u003Cbr>Write tests about how your mod is supposed to behave > Run the game > Check what failed exactly > Fix the bugs > Expand your mod efficiently and never have to retest the same thing twice anymore! \r\u003Cbr>\r\u003Cbr>No need for hours of play testing to find bugs at every change you make, when you can just check everything in seconds!\r\u003Cbr>\r\u003Cbr>Can also be used to detect and efficiently bug fix mod incompatibilities, just load mods and check what broke and how! -- assuming the mods are thoroughly tested of course\r\u003Cbr>\r\u003Cbr>\r\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi.imgur.com\u002FFXNvoCu.png\" alt=\"\" loading=\"lazy\">\r\u003Cbr>\r\u003Cbr>This is a testing framework with no impact on gameplay, this is compatible with everything.\r\u003Cbr>\r\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi.imgur.com\u002FDTCO4in.png\" alt=\"\" loading=\"lazy\">\r\u003Cbr>\r\u003Cbr>First, add the RimTest.dll assembly as a reference for your mod. \r\u003Cbr>\r\u003Cbr>Make sure to load your mod after RimTest in your About.xml:\r\u003Cbr>\u003Ccode>\r\u003Cbr>\t\u003CmodDependencies>\r\u003Cbr>\t\t\u003Cli>\r\u003Cbr>\t\t\t\u003CpackageId>latrisstitude.rimtest\u003C\u002FpackageId>\r\u003Cbr>\t\t\t\u003CdisplayName>RimTest\u003C\u002FdisplayName>\r\u003Cbr>\t\t\t\u003CdownloadUrl>https:\u002F\u002Fgithub.com\u002FLaTrissTitude\u002FRimTest\u002Freleases\u003C\u002FdownloadUrl>\r\u003Cbr>\t\t\t\u003CsteamWorkshopUrl>https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2199316917\u003C\u002FsteamWorkshopUrl>\r\u003Cbr>\t\t\u003C\u002Fli>\r\u003Cbr>\t\u003C\u002FmodDependencies>\r\u003Cbr>\t\u003CloadAfter>\r\u003Cbr>\t\t\u003Cli>latrisstitude.rimtest\u003C\u002Fli>\r\u003Cbr>\t\u003C\u002FloadAfter>\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>\r\u003Cbr>Template Test Suite to get you started:\r\u003Cbr>\u003Ccode>\r\u003Cbr>using RimTest;\r\u003Cbr>using static RimTest.Assertion;\r\u003Cbr>\r\u003Cbr>namespace yourNamespace{\r\u003Cbr>    \r\u003Cbr>    public static class RimTestSetup{\r\u003Cbr>        \r\u003Cbr>        public static void RimTestWorks(){\r\u003Cbr>            Assert(true).Not.To.Be.False();\r\u003Cbr>        }\r\u003Cbr>    }\r\u003Cbr>}\r\u003Cbr>\u003C\u002Fcode>\r\u003Cbr>The framework is documented, here's a cheat sheet to get you started:\r\u003Cbr>\r\u003Cbr>Assert(\u003Cem>value\u003C\u002Fem>) followed as many grammar links you want among the following:\r\u003Cbr>\u003Cul>\u003Cli>.Be\u003C\u002Fli>\u003Cli>.Do\u003C\u002Fli>\u003Cli>.Is\u003C\u002Fli>\u003Cli>.Not *\u003C\u002Fli>\u003Cli>.To\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>* Not also negates your assertion, i.e Assert(\u003Cem>x\u003C\u002Fem>).Not.To.Be.Null() will fail the test if x is null, see below.\r\u003Cbr>\r\u003Cbr>Then concluded by the comparison you want among the following:\r\u003Cbr>\u003Cul>\u003Cli>.BetweenExclusive(\u003Cem>min\u003C\u002Fem>, \u003Cem>max\u003C\u002Fem>) ( \u003Cem>min\u003C\u002Fem> \u003C \u003Cem>value\u003C\u002Fem> \u003C \u003Cem>max\u003C\u002Fem> )\u003C\u002Fli>\u003Cli>.BetweenInclusive(\u003Cem>min\u003C\u002Fem>, \u003Cem>max\u003C\u002Fem>) ( \u003Cem>min\u003C\u002Fem> \u003C= \u003Cem>value\u003C\u002Fem> \u003C= \u003Cem>max\u003C\u002Fem> )\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>\u003Cul>\u003Cli>.EqualTo( \u003Cem>check\u003C\u002Fem> ) ( \u003Cem>value\u003C\u002Fem> == \u003Cem>check\u003C\u002Fem> )\u003C\u002Fli>\u003Cli>.GreaterThan( \u003Cem>check\u003C\u002Fem> ) ( \u003Cem>value\u003C\u002Fem> > \u003Cem>check\u003C\u002Fem> )\u003C\u002Fli>\u003Cli>.LessThan( \u003Cem>check\u003C\u002Fem> ) ( \u003Cem>value\u003C\u002Fem> \u003C \u003Cem>check\u003C\u002Fem> )\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>\u003Cul>\u003Cli>.SameAs( \u003Cem>check\u003C\u002Fem> ) ( \u003Cem>value\u003C\u002Fem>.Equals(\u003Cem>check\u003C\u002Fem>) )\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>\u003Cul>\u003Cli>.False() ( \u003Cem>value\u003C\u002Fem> == \u003Cem>false\u003C\u002Fem> )\u003C\u002Fli>\u003Cli>.Null() ( \u003Cem>value\u003C\u002Fem> == \u003Cem>null\u003C\u002Fem> )\u003C\u002Fli>\u003Cli>.True() ( \u003Cem>value\u003C\u002Fem> == \u003Cem>true\u003C\u002Fem> )\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>\r\u003Cbr>AssertFunc(\u003Cem>function\u003C\u002Fem>) follows the same grammar chain rules but only has access to the following comparison:\r\u003Cbr>\u003Cul>\u003Cli>.Throw() ( fails if \u003Cem>function\u003C\u002Fem> throws an Exception when executed )\u003C\u002Fli>\u003C\u002Ful>\r\u003Cbr>\r\u003Cbr>The GUI is now available as the mod settings screen!\r\u003Cbr>\r\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi.imgur.com\u002FAKYBJLJ.png\" alt=\"\" loading=\"lazy\">\r\u003Cbr>\r\u003Cbr>Q: Why the extra work? By the time I'm testing things I'm usually done with my mod\r\u003Cbr>A: \u003Cem>You don't know what an update or another mod might break, or worse: Your mod could be going completely bonkers without ever crashing or throwing an error. Testing saves a lot of time by ensuring those situations don't happen, or allowing you to find multiple independent problems instantly.\u003C\u002Fem>\r\u003Cbr>\r\u003Cbr>Q: Unit tests don't find anything unexpected!\r\u003Cbr>A: \u003Cem>Of course, you can't detect bugs you were not looking for. However developping your mod around tests instead of the other way around makes it highly unlikely to actually miss bugs. And in the eventual case where you do find an untested bug, that's where you now can write a test to check it doesn't happen anymore! \u003C\u002Fem> :D\r\u003Cbr>\r\u003Cbr>Q: I don't have time to write tests\r\u003Cbr>A: \u003Cem>Then don't write tests for everything, it saves time in the long run, but it you can't test everything, test what you feel might be the most susceptible to break or what takes the most time to test manually.\u003C\u002Fem>\r\u003Cbr>\r\u003Cbr>Thanks to the helpful fellas from the Rimworld discord server and dubwise discord server for their handy help when I had some obscure bugs, you rock guys!\r\u003Cbr>\r\u003Cbr>\r\u003Cbr>Ported to 1.3 by Sakura. This mod is currently unmaintained (I don't have time for modding anymore).\u003C\u002Fp>",84,[25,26,27,28],"https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1493460332678789344\u002F2833547A37F3531A8AF467632FE81D846BB2430D\u002F","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1662351073256455877\u002FA71E916ABAA5535D7C4B8155ED9E11D24C283CA5\u002F","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1662351073256388664\u002F35369F41E9BA059DDD19926E3AE5EB189D693AE0\u002F","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1662351073256418649\u002F3CDCEB3E686C5A557B81AE518959462A9454DBCF\u002F",[],null,[32,45,57],{"id":33,"slug":34,"name":35,"shortDescription":36,"author":8,"workshopUrl":37,"imageKey":10,"thumbnailUrl":38,"packageId":39,"category":13,"tags":40,"downloadCount":42,"rating":19,"publishedAt":43,"updatedAt":44},"ad9ee633-0d8d-4e18-9517-236fc625e26f","save-our-ship-2-heat-statistics","Save our ship 2 - Heat statistics","This mod is currently unmaintained (I don't have time for modding anymore).","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2164286498","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1336956899234160308\u002FB91E6F14CFFA026EF76304971D9F3FD782A4318D\u002F","helldragger.sos2heatstatistics",[15,41,16],"1.1",20744,"2020-07-12T23:40:36.0000000Z","2020-12-18T20:03:49.0000000Z",{"id":46,"slug":47,"name":48,"shortDescription":36,"author":8,"workshopUrl":49,"imageKey":10,"thumbnailUrl":50,"packageId":51,"category":52,"tags":53,"downloadCount":54,"rating":19,"publishedAt":55,"updatedAt":56},"3d51418d-d80b-4297-a781-7d6ea91d83ed","combat-training-forked","Combat Training - Forked","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2196035723","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1493459917357500021\u002F2EA63ADCDA50EDABEB7D02682ACFBCB07F53D3C3\u002F","helldragger.combattrainingforked","combat",[15,16],12704,"2020-08-13T10:46:13.0000000Z","2020-08-17T12:24:49.0000000Z",{"id":58,"slug":59,"name":60,"shortDescription":36,"author":8,"workshopUrl":61,"imageKey":10,"thumbnailUrl":62,"packageId":63,"category":13,"tags":64,"downloadCount":65,"rating":19,"publishedAt":66,"updatedAt":67},"65ffa787-15af-4036-9476-f72013f0e4fa","rimworld-heat-statistics","RimWorld - Heat statistics","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2165849348","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1336957140786783043\u002FEA5C1E33E9024115374162DB3CC294E4461717C5\u002F","helldragger.rimworldheatstatistics",[15,41,16],30986,"2020-07-14T13:32:26.0000000Z","2020-11-11T01:21:34.0000000Z",[69,85,99,112],{"id":70,"slug":71,"name":72,"shortDescription":73,"author":74,"workshopUrl":75,"imageKey":10,"thumbnailUrl":76,"packageId":77,"category":13,"tags":78,"downloadCount":82,"rating":19,"publishedAt":83,"updatedAt":84},"037614b4-3975-4ac3-a20a-9de9aaab0d68","rimhud","RimHUD","RimHUD is a UI mod that displays detailed information about a selected character or creature.","Jaxe","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1508850027","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1687146164330163452\u002F43BA9FD0FD6A3123B367C2FDAC84A663856CC242\u002F","jaxe.rimhud",[15,79,80,81,17,16,41],"1.6","1.5","1.4",2137039,"2018-09-10T17:32:31.0000000Z","2025-08-15T04:32:32.0000000Z",{"id":86,"slug":87,"name":88,"shortDescription":89,"author":90,"workshopUrl":91,"imageKey":10,"thumbnailUrl":92,"packageId":93,"category":13,"tags":94,"downloadCount":96,"rating":19,"publishedAt":97,"updatedAt":98},"e1fa0b06-1dcb-4198-9303-ece406f4de08","camera","Camera+","Camera+ gives RimWorld a better camera for both close detail and wide map control.","Brrainz","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=867467808","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F1469814660532590020\u002F8D6E6E0241F7B496903E751AB72BBBF12ED58B39\u002F","brrainz.cameraplus",[15,79,80,81,17,16,41,95],"1.0",1671998,"2017-02-19T10:34:00.0000000Z","2026-05-29T15:00:36.0000000Z",{"id":100,"slug":101,"name":102,"shortDescription":103,"author":104,"workshopUrl":105,"imageKey":10,"thumbnailUrl":106,"packageId":107,"category":13,"tags":108,"downloadCount":109,"rating":19,"publishedAt":110,"updatedAt":111},"fb38cea7-cd5e-4e01-bb0d-7fe882249074","character-editor","Character Editor","last update: v1.6.3 build on 2025-07-21 for RimWorld v1.6.4523 Editor for humanlike pawns on map and for crashlanding (colonists, enemies, dead pawns) MOD FEATURES • editor for pawns on map and for crashlanding • editable: body, head, hair, skin color, apparel color, gender, name","VOID","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1874644848","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F773980614477157208\u002F2C5650A80F20FF219BE9616E055226061652B57D\u002F","void.charactereditor",[15,79,80,81,17,16,41,95],1593096,"2019-09-28T08:41:55.0000000Z","2025-07-21T15:51:40.0000000Z",{"id":113,"slug":114,"name":115,"shortDescription":116,"author":117,"workshopUrl":118,"imageKey":10,"thumbnailUrl":119,"packageId":120,"category":13,"tags":121,"downloadCount":122,"rating":19,"publishedAt":123,"updatedAt":124},"972d5ddf-acf6-45b6-a8a8-4297ac2b5d21","qualitybuilder","QualityBuilder","With QualityBuilder all buildings that have quality (beds, tables etc) will only be build by the best builder to ensure the best outgoing quality.","Hatti","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=754637870","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F950718995351294794\u002FAB13E9B6A6FB3E4A86D114FB5F20B1A17AD39715\u002F","hatti.qualitybuilder",[15,95,41,16,80,81,17],1343473,"2016-08-29T22:37:15.0000000Z","2024-03-13T22:55:29.0000000Z",[126,139,141,155],{"id":127,"slug":128,"name":129,"shortDescription":130,"author":131,"workshopUrl":132,"imageKey":10,"thumbnailUrl":133,"packageId":134,"category":13,"tags":135,"downloadCount":136,"rating":19,"publishedAt":137,"updatedAt":138},"b746a04b-1ff1-43d3-8c3e-5787adabe60c","edb-prepare-carefully","EdB Prepare Carefully","Customize your RimWorld colonists, choose your gear and prepare carefully for your crash landing!","edbmods","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=735106432","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F449616801431102182\u002F9151C1EEF14E6E55252BF726F8821D520A7625C1\u002F","edb.preparecarefully",[15,79,80,81,17,16,41],2752096,"2016-07-31T17:26:49.0000000Z","2025-08-03T18:17:58.0000000Z",{"id":100,"slug":101,"name":102,"shortDescription":103,"author":104,"workshopUrl":105,"imageKey":10,"thumbnailUrl":106,"packageId":107,"category":13,"tags":140,"downloadCount":109,"rating":19,"publishedAt":110,"updatedAt":111},[15,79,80,81,17,16,41,95],{"id":142,"slug":143,"name":144,"shortDescription":145,"author":146,"workshopUrl":147,"imageKey":10,"thumbnailUrl":148,"packageId":149,"category":150,"tags":151,"downloadCount":152,"rating":19,"publishedAt":153,"updatedAt":154},"6440285d-08ba-4767-81ff-dbb3e796f628","vanilla-furniture-expanded-production","Vanilla Furniture Expanded - Production","1.1.0 (24\u002F02\u002F2020): We are now 1.1 compatible. 1.0.2 (05\u002F10\u002F2019): Now compatible with Dubs: Hygiene. Also, fixed the linkables not connecting to vanilla stoves. 1.0.1 (04\u002F10\u002F2019): Fixed the bills not being worked. 1.0.0 (04\u002F10\u002F2019): Release This module is a part of Vanilla Fur","Oskar Potocki","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=1880253632","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F13641350758078043794\u002FD1D88F9BE584D54AF0680B418135DE55D60B08DA\u002F","vanillaexpanded.vfeproduction","furniture",[15,80,81,79],1595475,"2019-10-04T15:36:52.0000000Z","2025-06-30T11:07:32.0000000Z",{"id":156,"slug":157,"name":158,"shortDescription":159,"author":146,"workshopUrl":160,"imageKey":10,"thumbnailUrl":161,"packageId":162,"category":13,"tags":163,"downloadCount":164,"rating":19,"publishedAt":165,"updatedAt":166},"62f73e39-1314-444b-b55c-878768790ee6","vanilla-textures-expanded","Vanilla Textures Expanded","1.6.0 (16\u002F07\u002F2020): Updated to 1.3. Honestly, we added so many textures (including almost a full retexture of Royalty) I'm not going to bother. 1.5.0 (11\u002F10\u002F2020): Added faction icons in HQ. 1.4.0 (04\u002F09\u002F2020): Added various new textures: Snowmen, Flatscreen TV, Unfinished appare","https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2016436324","https:\u002F\u002Fimages.steamusercontent.com\u002Fugc\u002F11750749957969253050\u002F3BE41DFCAB683CB5175008D156F5FB5D65A0B933\u002F","vanillaexpanded.vtexe",[15,79,80,81],1490912,"2020-03-07T20:55:08.0000000Z","2025-07-20T20:10:41.0000000Z"]