Connect rooms in world/ha/world_ha.txt, using the exit order exported by the room file. The ROOMS block creates the world graph. It does not use room coordinates from map_ha.txt.

ROOMS
HA_A01 : HA_A02, DISCONNECTED
HA_A02 : HA_A01
END ROOMS
CREATURES
END CREATURES

This is a grammar example. It has two rooms and an empty creature block. global::WorldLoader.MappingRooms() reads the lines between ROOMS and END ROOMS, while global::WorldLoader.CreatingAbstractRooms() creates the abstract rooms from that data.

Match the exit position

The entries after : are positional. The first entry applies to the first exported exit in HA_A01, the second to its second exit, and so on. A room with two exits needs two connection positions even if only one is in use. Keep an unused position as DISCONNECTED. Removing it shifts every later destination to the wrong exit.

Write the return connection in the destination room. In the example, HA_A01 reaches HA_A02 through its first exit, and HA_A02 reaches HA_A01 through its first exit. The source reader can identify a missing or mismatched connection as a broken exit, but visual placement in a map does not repair the graph.

The rendered room defines the available node order. Do not infer it from left-to-right screen placement or from the connection list in a neighboring room. After any geometry change that adds, removes, or moves a shortcut entrance, render the room again and inspect its exit order before editing the world file. Room authoring explains why the rendered text and camera images need to stay paired.

Add special room tags carefully

After a room’s connections, a second colon can add a world role. For example:

HA_S01 : HA_A01 : SHELTER

SHELTER marks the room in the world definition. It does not create shelter terrain, a functional door, or a campaign route. Test those parts in a game session. Gate rooms need reciprocal region data and gate-specific assets, so treat them as a separate task from linking ordinary rooms.

CONDITIONAL LINKS and BAT MIGRATION BLOCKAGES are separate named blocks recognized by WorldLoader. Leave them out of an initial two-room test unless the task needs them. A smaller file makes an incorrect room name or exit slot easier to find.

Use the map page after the graph works

The Dev Tools Map page writes map_ha.txt through global::DevInterface.MapPage.SaveMapConfig(). Its room records contain map positions, editor positions, layer, subregion, and room dimensions. It also writes visual map connection records from the loaded world graph. Move panels in the map page after the room links work, then save and inspect the destination file.

Expected result: both rooms appear in the map page with a line between them, and crossing each intended shortcut enters the destination room. Test each direction and each exit position. If the map line is present but travel is wrong, compare the rendered room’s exit order against the comma-separated ROOMS list. If travel works but the map is wrong, inspect map_ha.txt and the Dev Tools save destination.

Region folder layout locates the files. Region troubleshooting gives a check order for missing rooms and broken exits.

Sources

  • Rain World v1.11.8, Steam build 22785462: global::WorldLoader.MappingRooms(), global::WorldLoader.CreatingAbstractRooms(), and global::DevInterface.MapPage.SaveMapConfig() in the assembly identified by Runtime reference.