Debug a new region in file-reader order: registration, resolved paths, room assets, world links, then settings and creatures. Change one layer at a time. A rendered room can be correct while the world file points to a different name, and a correct source file can be hidden by generated merged content.
The region is absent
Check modify/world/regions.txt first. It must contribute the region prefix to the resolved world/regions.txt list. Then check that world/ha/properties.txt and world/ha/world_ha.txt use the same prefix. global::Region.LoadAllRegions(global::SlugcatStats.Timeline,global::RainWorldGame) reads the resolved list, so a folder alone does not register a region.
If a mod set has changed, rebuild its generated content through the game’s normal mod process and inspect the resulting resolved files. global::AssetManager.ResolveFilePath(System.String,System.Boolean,System.Boolean) can choose mergedmods before authored content. Do not edit generated output as the source of a fix. Change the mod file, rebuild, then confirm the resolved copy contains that change.
A room cannot load or has no image
Match the room identifier in world_ha.txt to the room stem under world/ha-rooms. global::WorldLoader.FindRoomFile(System.String,System.Boolean,System.String,System.Boolean) derives that folder from the identifier before its first underscore. HA_A01 therefore needs ha_a01.txt, with ha_a01_1.png for the first camera and later numbered images when the render has more cameras.
Re-render after changing room geometry. Rained writes gameplay data to the text file and one image per camera. A PNG that looks right does not establish that the matching room text has the expected collision or shortcut nodes. Room authoring gives the render checks.
A shortcut goes to the wrong room
Compare the world line against the rendered room’s exit order. The comma-separated entries after : map by position. Restore an omitted unused exit as DISCONNECTED. Do not delete the position. Check the return line in the destination room. Map panel placement is separate data written by global::DevInterface.MapPage.SaveMapConfig(), so moving rooms on the map does not correct an exit list.
Test every changed connection in both directions. If the connection line is right but the room has an unexpected node layout, inspect the current rendered room text rather than an older authoring project.
A placed object or spawn is missing
For a placed object, inspect the room’s _settings.txt file and its PlacedObjects: records. Save the same object type with Dev Tools and compare its >< fields. Also check template inheritance and timeline filters. Placed objects covers the object workflow.
For a creature, inspect the CREATURES block in world_ha.txt. On a fresh spawn with RainWorld.ShowLogs enabled, global::WorldLoader.SpawnerStabilityCheck(global::World.CreatureSpawner) checks the target room and den node. Test with a fresh world state because save data can affect creature state. Creature spawns separates simple spawns from lineages.
Expected result for each stage is narrow: the region appears, the room resolves, each exit returns to its pair, the map reflects the loaded graph, the object reloads, and the spawn references a valid den. Keep a copy of the failing source file and the matching resolved file while comparing them. Region folder layout gives the expected tree.
Sources
- Rain World
v1.11.8, Steam build22785462:global::AssetManager.ResolveFilePath(System.String,System.Boolean,System.Boolean),global::ModManager.GenerateMergedMods(...),global::WorldLoader.FindRoomFile(System.String,System.Boolean,System.String,System.Boolean), andglobal::WorldLoader.SpawnerStabilityCheck(global::World.CreatureSpawner)in the assembly identified by Runtime reference.