Mods / Room Tools

Tags:
Utility QoL
Author:
Elocrypt
Side:
Both
Created:
May 10th 2025 at 4:11 AM
Last modified:
May 7th at 1:09 AM
Downloads:
13176
Follow Unfollow 206
Recommended download (for Vintage Story 1.22.0 - 1.22.2):
RoomTools_2.0.0_VS1.22.2.zip  1-click install

image

Room Tools lets any player with chat privileges inspect Vintage Story's room system visually - color-coded overlays for cellars, greenhouses, open rooms, and the exact blocks you need to seal to close one up.

The vanilla /debug rooms command requires debug privileges that most server admins won't (and shouldn't) hand out. RoomTools gives builders the same information through ordinary chat commands: highlight the room you're standing in, list every room in the chunk, diagnose farmland cooling, and optionally auto-refresh the overlay as you work. No debug mode, no special permissions - just /rooms show.

Dual-side mod. Requires chat privilege only. Vintage Story 1.22+.


What it does

/rooms show highlights the room at your feet. Enclosed cellars appear in blue, enclosed greenhouses in green, and generic enclosed rooms in yellow. For enclosed rooms, any glass or trapdoors in the walls are highlighted in orange - these blocks leak skylight, which affects greenhouse eligibility and cellar cooling. If the room has exits - holes, missing walls, anything that breaks the seal - the overlay switches to gap-detection mode: magenta marks the exact air blocks where the wall is broken, and orange flags glass or trapdoors that seal the room but affect skylight counts.

/rooms list shows every room VS has registered in your current chunk - type, dimensions, enclosure status, and skylight info at a glance. Pick any room by index with /rooms show [n] to highlight it directly, even if you're not standing inside it.

/rooms info prints the raw stats for the room at your position: dimensions, exit count, cooling wall ratio, skylight tallies, and whether VS considers it a cellar or greenhouse. When skylight counts aren't available (VS doesn't always compute them), the command says so rather than guessing.

/rooms farmland scans nearby farmland tiles and reports each one's internal roomness value - the number VS uses to decide if a crop is getting the greenhouse temperature benefit. If your greenhouse farm isn't working as expected, this is the fastest way to find out whether VS actually sees the farmland as being inside the room.

/rooms auto on keeps the overlay current while you build. Stand still for five seconds and it refreshes automatically - no need to re-run the command after every block you place. Runs silently; no chat spam.

image


Commands

Server-Side
/rooms show Highlight the room at your current position
/rooms show [index] Highlight a specific room by list index
/rooms hide Clear the current overlay
/rooms list List all rooms in your current chunk
/rooms info Print room stats without highlighting
/rooms farmland Check farmland roomness within 5 blocks
/rooms auto on|off Auto-refresh the overlay every 5 seconds while stationary

Permissions: Any player with chat privileges can use it. No debug permissions needed.


Color guide

Blue Enclosed cellar
Yellow Enclosed room
Green Enclosed greenhouse (skylight-dominant)
Magenta Gap - a block that should be solid but isn't
Orange Glass or trapdoor - seals the room but leaks skylight (affects greenhouse/cellar classification)

Use cases

  • Validating a cellar - run /rooms show inside. Blue means it's enclosed. Magenta means there are gaps to seal.
  • Diagnosing farmland in a greenhouse - run /rooms farmland to see the roomness value for each nearby tile. A value above 0 means VS sees it as being inside a valid greenhouse room.
  • Checking a greenhouse - run /rooms info for raw skylight and non-skylight counts. VS doesn't always compute these; the command tells you when data is missing rather than guessing.
  • Troubleshooting enclosure - if a room refuses to close, the gap-detection overlay shows you the exact blocks to fix.
  • Finding a specific room/rooms list to see everything in the chunk, then /rooms show [n] to highlight by index.

Installation

  1. Place the compiled mod .zip or /RoomTools/ folder into your VintagestoryData/Mods directory.
  2. Make sure the server and all clients have the mod installed (it's a dual mod).
  3. Launch the game and use /rooms show in chat!

FAQ

Why does the overlay show magenta instead of highlighting the actual missing block?
RoomTools highlights the air blocks where the wall should be - those are the positions you need to fill. The magenta marks the gap itself, not the surrounding wall. Walk up to a magenta block, place a solid block there, and re-run /rooms show to confirm it sealed.

My room shows as enclosed but /rooms info says skylight counts are zero.
VS only computes skylight tallies for rooms it internally considers greenhouse-eligible. If both counts are zero, the game didn't populate them for your room - this is a VS limitation, not a mod bug. The raw skylight data is surfaced so you can see exactly what VS knows.

Does this work with chiseled blocks?
Yes. RoomTools explicitly recognizes chiseled and microblock code paths as room seals, even though they don't report solid faces through the standard block API.

Does auto-refresh work on multiplayer?
Yes. Auto-refresh state is per-player and server-authoritative. One player's overlay never interferes with another's, and the auto-refresh tick runs entirely server-side with no chat spam.

I'm on VS 1.21 or earlier and 2.x doesn't load.
The 2.x rewrite is for VS 1.22+. The 1.x releases (v1.4.0 and earlier) are still available in the Files tab for older VS versions.


Source & support

Source is on GitHub under MIT. Bug reports and feature requests are welcome via the issue tracker - please include your VS version and any room-related mods you have installed.

If you'd like to support continued development, I have a Ko-fi. The mod is and will always be free.

Discord Widget

RoomTools by Elocrypt.

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
2.0.0 roomtools
1.22.0 - 1.22.2
1595 May 7th at 1:09 AM RoomTools_2.0.0_VS1.22.2.zip 1-click install

2.0.0 is a complete rewrite. Targets Vintage Story 1.22.0 on .NET 10.
Per-player state, command feedback, auto-refresh, and the color pipeline are all new.
No data migrates from 1.x - no settings or state were persisted by earlier versions.

Added

  • /rooms info - prints room dimensions, exit count, IsSmallRoom, cooling wall counts, and raw skylight/non-skylight tallies without triggering a visual highlight. Explicitly reports when skylight counts are unavailable rather than silently misreporting greenhouse status.
  • /rooms farmland - scans a 5-block radius for BlockEntityFarmland and reports each farmland tile's roomness value, making it easy to confirm whether VS sees the farmland as being inside a valid greenhouse.
  • Per-player overlay cache (PerPlayerRoomState.OverlayCache) - delta-checks block positions and colors before sending, avoiding redundant highlight calls on repeated show/auto-refresh.

Changed

  • Architecture split: the single monolithic RoomToolsModSystem.cs is broken into focused files - RoomInspector.csRoomHighlighter.csRoomCommands.csPerPlayerRoomState.csRoomColorHelper.cs, and FarmlandHelper.cs. The mod is server-only; highlights are delivered to clients via VS's built-in HighlightBlocks API.
  • Reflection cached at startupFieldInfo for roomsByChunkIndex and MethodInfo for FindRoomForPosition are static readonly fields resolved once. Both are null-checked at every call site; a Logger.Warning is emitted at startup if either is null (signals a VS version mismatch).
  • Per-player state: the single lastOverlayCache instance field is replaced by a ConcurrentDictionary<string, PerPlayerRoomState> keyed by PlayerUID. Entries are created on PlayerJoin and removed on PlayerDisconnect. Multiplayer correctness is no longer dependent on one player using the mod at a time.
  • Log flood fixed: the per-block Logger.Notification inside the highlight loop is replaced by a single summary line emitted after the loop - [RoomTools] {location} - {n} problem block(s) in highlight.
  • Highlight ID: changed from 9999 to 50001 to avoid collision with VS internal debug highlight IDs. VS's own /debug rooms uses ID 50; IDs above 50000 are documented as safe for mods.
  • Room feedback/rooms show now always tells the player what it found - enclosed cellar in blue, enclosed greenhouse in green, enclosed room in yellow, or an open room with the exit count and what the colors mean. The previous silent "Room overlay shown." response is gone.
  • Open room gap detection rewritten: instead of coloring all non-seal blocks identically, the highlighter uses a PosInRoom bit scan + opposite-axis-pair heuristic to locate the specific positions that are air but have wall neighbors on a shared axis. True gaps (holes, missing blocks) appear in magenta; glass and trapdoors that let light through appear in orange. (Orange highlighting still isn't perfect)
  • Room selection improvedTryFindContainingRoom now tries GetRoomForPosition first (which VS already biases toward enclosed rooms), falls back to a few positions above foot level, and finally scans the chunk room list by bounding-box containment. FreshRoomAtPosition uses the reflected FindRoomForPosition for a full BFS when the player runs /rooms show manually, ensuring post-build state is reflected rather than a stale cache entry.
  • Color constants centralized: all ARGB values live in RoomColorHelper as named static readonly int fields. No ColorUtil.ColorFromRgba calls exist outside that class.

Fixed

  • Everything turns red on open rooms (reported by Frozen_Baguette, CleverMagpie, Zephyr_Crow): the PosInRoom bit-index formula is now the single verified layout - (dy * sizez + dz) * sizex + dx - with a source-cited comment. The old code had two inconsistent formulas; the wrong one caused misaligned bit reads that made wall blocks appear interior and random interior positions appear as walls.
  • Room never identified as cellar or greenhouse (Zephyr_Crow): downstream of the formula fix; IsSmallRoom and skylight counts now reflect the room the player is actually standing in.
  • Log flooding (Kyoku): per-block logging replaced with a single post-loop summary.
  • Auto-refresh produced visible chat entries (general): replaced SendChatMessage("/rooms show") with a server-side tick that calls ShowRoomForPlayer directly when the player has been stationary for 5+ seconds. No packets, no chat pipeline, no visible feedback unless the player asked for it.
  • Color coding showed vanilla green instead of custom colors (QuickdrawMcGraw): highlight ID changed from 9999 to 50001; the vanilla debug tool no longer overwrites the overlay.
  • Chiseled blocks not detected as seals (ChaoticNox): IsLikelyRoomSeal now includes an explicit allowlist check for chiseledblock and microblock code path prefixes, applied before the Replaceable / SideSolid checks.
  • Greenhouse detection unreliable: the SkylightCount > NonSkylightCount check is retained where VS populates the counts, but /rooms info now explicitly reports when both counts are zero rather than silently claiming a room is not a greenhouse. The raw counts are always surfaced so the player can judge.
  • Orange highlight for glass/trapdoors was unreachable: the old code tried to highlight glass and trapdoor blocks in orange within the open-room gap scan, but those blocks are walls (PosInRoom=0) and never enter the interior-only loop. Moved the orange highlight to the enclosed-room scan instead, where it now highlights wall blocks adjacent to the room interior that leak skylight - useful for diagnosing why a cellar has reduced cooling (skylight leaking in) or confirming which blocks contribute to a greenhouse's skylight ratio. (Orange highlight still isn't perfect, may not show when it should)

Removed

  • Per-call typeof(RoomRegistry).GetField(...) / .GetMethod(...) - replaced by static cached fields.
  • autoRefreshEnabled as a client-side field driving SendChatMessage - replaced by server-side PerPlayerRoomState and a server tick.
  • RoomOverlayClient.csRoomOverlayMessage.csRoomOverlayRequest.cs - the custom packet layer was unnecessary; VS's built-in HighlightBlocks handles server->client rendering natively.
  • Single shared lastOverlayCache on the ModSystem - replaced by per-player state.
  • Per-block Logger.Notification in the highlight loop.
1.4.0 roomtools 6917 Sep 17th 2025 at 3:28 AM RoomTools_v1.4.0.zip 1-click install

- Updated for 1.21.* -

1.3.1 roomtools 2072 May 20th 2025 at 4:57 AM RoomTools_v1.3.1.zip 1-click install

Added

 

  • Can now highlight valid greenhouses
  • Some form of validation for problemed blocks/holes that highlight grey (this isn't great not that accurate, might remove)

 

Notes:

Some weird edgecases:

  • If you have issues with it highlighting red incorrectly scanning a different room, relogging, sometimes hugging the wall will fix it if its supposed to be a valid room. The engine is weird and it lazy loads.. im trying.  
  • Sometimes invalid rooms also might stay as a valid room when a single block is removed, break another next to it and it should be properly invalid red... 
  • Some blocks might be grey in an invalid room, its supposed to highlight problematic blocks like trapdoors and such, but as I said above its not very accurate.

    Please consider Heart Support Sticker by Ko-fi

    Report bugs/problems in the comments for now until I have properly opened up a discord page for this mod, thank you.

 

1.2.0 roomtools 2430 May 10th 2025 at 12:30 PM RoomTools_v1.2.0.zip 1-click install
  • Added /rooms list to display all rooms in the current chunk.

  • Added /rooms show [index] to allow selection of a specific room to highlight by index.

  • Rooms are color-coded based on properties:

    • 🔵 Blue: Small room with no exits (valid cellar)

    • 🟡 Yellow: Large room with no exits (too big to be a cellar)

    • 🔴 Red: Room with exits (open space)

  • Added /rooms auto on|off toggle (client-side) to enable automatic re-highlighting every 5 seconds while idle.

  • Greatly improved stability and validation of overlay drawing to prevent index errors or invalid highlighting.

1.0.0 roomtools 162 May 10th 2025 at 5:04 AM RoomTools_v1.0.0.zip 1-click install

Initial Release


20 Comments (oldest first | newest first) (threaded | flat)

ChaoticNox, Mar 9th at 11:42 AM

It seems the mod isn't working with the chiseled block retention mod, it doesn't detect chiseled blocks as actual blocks.

EAve, Feb 4th at 10:18 AM

mod makes it where players cant pick up items after dropped/mined. dont know if its the mod itself or bc its conflicting with the other 90+ mods.

QuickdrawMcGraw, Jan 27th at 11:29 PM

I am not getting the color coding shown off in the screenshots, just the same green as the vanilla debug tool. Anyone have any idea why?

CleverMagpie, Jan 15th at 8:12 PM

I'm not sure if this is a user error on our parts but I have the same issue as Zephyr_Crow and Frozen_Baguette in that the entire room will highlight red when there's a whole in the room. Works otherwise cuz once I finall trial and error my way through troubleshooting the build, the tool will show yellow once I've plugged the hole

Frozen_Baguette, Jan 11th at 5:28 PM (modified Jan 11th at 5:31 PM)

I have the same issue as Zephyr_Crow where my room just tells me I have exits, then it says it highlights the issue, but it just highlight every full block in red, and then anything else (ladder, trapdoors, slabs, chests, bookcases, etc.) in grey.

Zephyr_Crow, Dec 28th 2025 at 9:35 PM

Mine always just tells me that the room has exits, and doesn't say if it's a valid cellar, greenhouse, or room.

Kyokui, Dec 15th 2025 at 9:22 PM

For some reason this mod absolutely floods the console when used. It sends an individual console message for every block in a chunk when doing scans, which makes logs unreadable and rate limits my console lmao

BiggBenn, Sep 17th 2025 at 1:28 PM

Thank you for making the repo public! From what I can tell, I think this should work with changed room size values. Thank you so much for your work! :)

LastHazzerd, Sep 17th 2025 at 3:37 AM

oh, thank you very much for this tool

Elocrypt , Sep 17th 2025 at 3:30 AM

BiggBenn
Should be public now, if you use anything please give credit <3

 

BiggBenn, Sep 16th 2025 at 8:55 PM (modified Sep 16th 2025 at 8:55 PM)

Hey, the source link (https://github.com/Elocrypt/roomtools) doesn't seem to work. Wanted to peek under the hood, to see if this works with the configurable room size mod :)
Thanks for your work!

AilurusHush, May 20th 2025 at 9:00 PM

egocarib agreed! I'm having this issue with my home right now - It's driving me nuts.
It registered as green right after I filled in the windows and ran the [/debug rooms hi] command, then I started moving my baskets and items into it thinking Everything was fine... Now it's red again, no clue why.
I've went over everyblock face to make sure it's solid and insulated.. tore down and re-did areasa to just confirm they were solid. Forever red :(

egocarib, May 16th 2025 at 8:55 PM

The one feature I would love to see in a mod like this is some feedback to help you troubleshoot what is wrong with your room. For example, point out any sleek doors, grated trapdoors, or just plain old holes that might be causing the room to fail to be recognized. Probably tricky to do, but if someone can pull it off it would make the mod an essential!

Bone_D, May 16th 2025 at 8:28 PM

Dude thank you, have been looking for something like this for a while!

Elocrypt , May 11th 2025 at 12:59 AM

DilanRona
I would love to add that, but I cannot accurately get the game to highlight greenhouses. I have been battling the game and it simply will not give me the result I want.
The closest to getting greenhouses to be highlighted was getting the farmland the player is standing on to be highlighted as a valid greenhouse and only that single block.. 

I have had enough attempting today, but I may achieve this in the future I really hope.

DilanRona, May 10th 2025 at 3:14 PM

I know it says it can validate rooms and cellars. What about greenhouses though?