Rained keeps its editable project separate from the files Rain World loads. Save the project outside the packaged mod, render it, and package the generated room text with every camera PNG. The pinned Rained room overview and rendering guide describe this boundary.
flowchart TD A[Rained project] -->|Render| B[Room text] A -->|Render| C[Camera PNGs] B --> D[Mod room folder] C --> D D --> E[World file connection]
Keep gameplay inside the room border
The white border in Rained marks the area exported into the runtime room text. Geometry and editor objects outside it can still appear in a rendered camera image, but they are omitted from the collision and object data. This creates a misleading failure where the room looks complete while the player falls through missing terrain or cannot use an entrance.
Before rendering, check that playable geometry, shortcuts, entrances, and required editor objects lie inside the border. Decorative content and camera framing can extend beyond that gameplay area. Use the rendered PNGs to check presentation and the room text to supply gameplay data. Both outputs belong to the same room revision.
Package the rendered files
Rained’s manual places Arena output under levels/ and region rooms under world/XX-rooms/, relative to either RainWorld_Data/StreamingAssets or a mod root. For a region acronym HA, one rendered room fits this layout:
mod-root/
world/
ha-rooms/
ha_a01.txt
ha_a01_1.png
ha_a01_settings.txt
ha/
world_ha.txt
properties.txt
map_ha.txtThe first camera image is _1.png. A room with more cameras needs the corresponding _2.png, _3.png, and later images produced by the renderer. Keep names consistent with the exported room name.
global::WorldLoader.FindRoomFile(System.String,System.Boolean,System.String,System.Boolean) takes the prefix before the first underscore and first searches world/<prefix>-rooms/. A request for HA_A01 therefore searches the ha-rooms directory for the room text and requested suffix. The installed Outskirts layout uses the same relationship with su_a01.txt, su_a01_1.png, and su_a01_settings.txt.
Connect the room through the world file
Rendering does not add the room to a world graph. global::WorldLoader.MappingRooms() reads connection lines from world_ha.txt. The installed Outskirts data gives this format:
SU_A37 : SU_S04, SU_B04, SU_A63, SU_A39
SU_S04 : SU_A37 : SHELTER
SU_A63 : SU_B12, SU_A37, DISCONNECTEDEach comma-separated position corresponds to the exported exit order. Add the matching return connection in the destination room. Keep an unused position as DISCONNECTED so later exits do not shift. SHELTER assigns a world role. The tag does not verify that the room geometry and placed objects make a working shelter.
Use Rooms and regions for region registration, gates, maps, and the wider world file. A room can render and load while its world connection, spawn data, or campaign access is still wrong.
Treat room text as renderer output
Keep hand edits out of the generated room text when possible. global::WorldLoader.LoadAbstractRoom(global::World,System.String,global::AbstractRoom,global::RainWorldGame.SetupValues) can preprocess room data and write the result back. Render again after changing geometry so the text and camera images stay paired. Room settings are a separate authoring surface covered in Room settings.
Check a packaged room with a fresh load:
- Confirm the room text and every numbered camera PNG are present.
- Cross every connection in both directions and confirm the matching exit-list position.
- Inspect collision near the Rained border and camera boundaries.
- Reload the room after leaving it.
- Start a fresh world and confirm the expected abstract room is created.
These checks are runtime work. The file paths and readers above were verified from build 22785462, but no game session was used to validate a new room package.
Sources
- Rained room overview at commit
efae3c824ee8d8b68d6211ae5b0b4f2d90d2c797 - Rained rendering and deployment at commit
efae3c824ee8d8b68d6211ae5b0b4f2d90d2c797 - Rain World
v1.11.8, Steam build22785462:global::WorldLoader.FindRoomFile(System.String,System.Boolean,System.String,System.Boolean),global::WorldLoader.LoadAbstractRoom(global::World,System.String,global::AbstractRoom,global::RainWorldGame.SetupValues), andglobal::WorldLoader.MappingRooms()in the assembly identified by Runtime reference.