Baileywiki Better Levels

Baileywiki Better Levels

by Baileywiki

Claimed by Baileywiki
v2.1.0
Updated Nov 2, 2026
Install
Project Page
Description

Multi-floor scenes that just work. Built, audited and fixed for you.

New in 2.1: a redesigned Better Levels, and Stairs and Ladders you can draw in seconds.

Any battlemap can have levels, not just the ones designed for them. Foundry's native Scene Levels are powerful, but building a tower, a dungeon with a basement or a ship with a deck below is fiddly and easy to get subtly wrong. Better Levels automates the tedious parts (generating levels, tracing floor surfaces, wiring stairs, naming things) and then continuously audits your scene for the easy-to-miss mistakes that quietly break Levels, with one-click fixes.

It is additive to Foundry. Everything it builds is a real Level, an ordinary Region or an ordinary Tile, so your scenes stay portable and every module you already use keeps working.

What's new in 2.1

A new look

  • Redesigned helper panel with four tabs in the order you build: Levels, Stairs, Vision and Check. Every tool is a tile you click to arm, with a short line telling you what to do next.
  • Four themes: Fantasy, Sci-fi, Modern and Arcane.
  • One Defaults window and a rebuilt Level Manager with a visibility grid for every pair of levels. Nothing changes until you Save.
  • Far fewer pop-ups. Results show in the panel's status line, and every window shares one clean frame with help tips.

Stairs and Ladders

  • Draw a stair as a Rectangle or Paint it square by square. Better Levels draws the treads, base, tint, shadows and landing itself, so Baileywiki Mapping is not needed.
  • Ladders are their own tool: one grid square, wood, metal or no art, trapdoors that face the right way, and a stop on every floor you choose.
  • Look options: tint, landing, treads and stairwell, with an Edit stair window and a live preview.
  • Edit, Lock, Delete and Ctrl+Z on every stair and ladder.
  • Tokens on both levels see each other through the stairwell, with a world setting to turn it off.

Change levels safely

Deleting a level, changing its height, running Generate or dropping a multilevel Mass Edit prefab now opens a review that moves what is on each level instead of deleting it, with Preview and Undo.

Highlights

  • Faux Overhead. Draw a region over artwork that is already painted into a map (a bridge, catwalk, awning or cave mouth) and tokens traveling underneath vanish behind it, as if an overhead tile covered them. No tile needed.
  • Floor Cutout. Carve openings through solid floors for stairwells, balcony openings and trapdoors.
  • Edit region shapes point by point. Drag a vertex to move it, right-click to delete it, drag an edge midpoint to add one.
  • Native roofs. Better Roofs is not required. Fog of war reveal and linked fading are built in, and Better Roofs settings carry over.
  • Auto-Build Levels. Say how many floors and basements, whether to add a roof and the floor height. Better Levels builds the stack and wires visibility: above-ground floors see each other, basements stay sealed.
  • One-click tile setup. Tile HUD buttons mark a tile as Floor, Roof, Basement or Balcony and generate a pixel-true walk-on Surface, assigned to every level that can see it.
  • Live Audit and Self-Repair. Catches the conflicts that break Levels (missing surfaces, see-through floors, one-way stairs, visibility leaks, light tagging, occlusion modes and more), sorted into green, amber and red with Fix All for each. Hover an issue to outline it on the map. Every rule explains the concept behind it, so reading them is a fast education in how v14 Levels works.
  • Build Mode. One toggle that hides overhead tiles and floor surfaces from floors above so you can work on the level you are building.
  • Fix Entity. Select any placeable and press Fix. It works out what it can and asks only what it must.
  • Better token level changes. Core's change level button leaves a token at its old height. Better Levels lands it on the destination floor, up or down, any number of floors.
  • Doors in the dark. Players can see and click a door next to their token without darkvision.
  • Show visible tokens only (experimental, off by default). Keeps a building intact while a token on another floor is seen, drawn on top of its cover with a dashed outline.
  • Tile sorting and filtering. Sort tiles by stacking order, drag to reorder, see thumbnails, and filter to the active level.
  • Vehicles. One click turns a prefab's regions into a Mass Edit Link Token deck, so tokens ride a ship, elevator or moving platform.
  • Backup and Restore. Named restore points, with a confirmation that offers to back up the current state first.
  • Sample scene. A multi-level Tudor building with a basement that audits completely clean.

Compatibility and recommended modules

  • Foundry VTT v14. Works with any game system.
  • Baileywiki Mass Edit (recommended). Pixel-true Surface regions, Vehicle decks and converting older Levels scenes. Everything falls back to a simple rectangle without it.
  • Baileywiki Mapping (optional). Not required for stairs in 2.1. Version 0.5.187 or newer makes level changes on wall-heavy scenes much faster.
  • libWrapper (optional). Used when it is installed.
  • Better Roofs is not required. Its settings carry over if it is installed.

Tutorials

Watch the Better Levels 2.0 walkthrough (it shows the original look; the new panel is described above), or read the How-to Guide for building with Levels.

<div data-youtube-video="">

</div>

Credits

Made by Baileywiki and the Foundry VTT community. Floor Cutout is based on Floor-Cutout by baggydude. Thank you!

Contents not yet indexed.

Releases

v2.1.0
3.8 MBNov 2, 2026Core 14 to 14.369

## 2.1.0 (2026-11-02) Better Levels 2.1.0 has a new look and a new way to build stairs and ladders. Your existing scenes, stairs, elevators and settings keep working as they are. ### New look - **Redesigned helper panel.** Four tabs in the order you build: Levels, Stairs, Vision and Check. Every tool is a tile you click to arm, and a short line tells you what to do next. Esc ends the stroke, then the tool, then the newest window. It never closes the panel. - **Four themes.** Fantasy (the default), Sci-fi, Modern or Arcane, in Module Settings. Hover sounds are optional and off by default. - **One Defaults window** for floors and roofs, lights, Faux Overheads, and stairs and ladders, with a single Save. - **Rebuilt Level Manager.** One table with each floor's fields and its "Can see" grid. Nothing changes until you Save. - **Fewer pop-ups.** Routine success messages are gone and results show in the panel's status line. Audit, Backup, Samples, Fix and every dialog share one themed frame, with help in (i) tips. - **The panel remembers each scene.** Open, minimized or closed is saved per scene, so closing it on one scene leaves the others alone. The Auto-show setting opens it only on a scene with two or more levels that you have not closed it on. - **Module Settings are regrouped** into Interface, Building, Vision and tokens, Audit, and Placeables Tab. Your old choices carry over, and settings only a GM can use are hidden from players. ### Stairs and Ladders - **No Baileywiki Mapping needed.** Better Levels draws the treads, base, tint, shadows and landing itself, and existing textured stairs switch over when the scene loads. - **Two ways to draw a stair.** Drag a Rectangle, or Paint it square by square. Each new stair goes to one level, and ladders are the way to connect several floors. Treads are spaced to your grid, have a soft light edge so they show on dark floors, and always draw under tokens. - **Ladders are their own tool.** One grid square, with wood, metal or no art, an optional tint and trapdoors that face the right way. A ladder can stop on every floor on the way. Ladders can go on any square, including against a wall. - **Look options.** Tint, Landing (none, top, bottom or both), Treads on or off, and Stairwell (sink the stair into the floor when seen from above, or draw a regular stair that rises, like an outdoor stair). - **Edit stair window.** Change a stair's destination, climb direction, lock, texture and look, with a live preview. - **Lock, Delete and Undo.** Every stair and ladder has Edit, Lock and Delete icons (GM only). Delete asks first and removes the whole stair in one step. Ctrl+Z (Cmd+Z on Mac) undoes a stair or ladder placement. - **See through the stairwell.** Tokens on the two levels of a stair can see each other through it. Turn this off for the whole world with "Stair cross-level vision". With Basements sealed, a basement stair opens only at the stair itself. - **Smooth level switching.** After a climb, the view follows the token to its new level once, and the stair art for the level you arrive on is drawn right away. - **Draw tools stay clear.** While you draw a stair or ladder, other regions' hatching is dimmed so the one you are placing is easy to see. A button on the armed strip turns the dimming off. - Your existing stairs and elevators keep working. Stairs that stop at several levels keep working until you edit them. ### Change levels safely - **Review before anything moves.** Deleting a level, changing a level's height, Generate, and dropping a multilevel Mass Edit prefab open a review window. It lists what is on each level and moves it, instead of deleting it. Choose Move, Split by height, Untag only or Delete for each group, and Preview first. - **Undo.** Ctrl+Z undoes the last level change, including backgrounds and moved items. "Apply and back up" saves a backup scene first. - **Multi-level items stay put.** A wall that spans two floors stays on both, and when you add a new floor above ground the review offers to share trees, outer walls and roofs with it. - **Audit can recreate a missing level** at the height its items imply, and finds tiles, walls and lights left on a level that no longer exists. ### Mass Edit prefabs - Multilevel prefab drops keep all of their levels, and each placed building keeps its own stairs, surfaces and darkness regions. - With Basements sealed, roofs, chimneys and smoke on the floors above no longer show from the basement after a drop. - Roofs on a freshly dropped prefab fade together right away, and two copies of one building never fade each other. - Mass Edit's see-through placement preview now shows in Build Mode. ### More new things - **Level Manager:** "Use this color for all levels" in the Background window. - **Doors in the dark:** new setting (GM only) so players can see and click a door next to their token without darkvision. Choose Nearby, Any door in line of sight, or Off. - **Audit:** hovering an issue outlines it on the map, with a dashed outline and arrow for other levels. New rules for missing levels, placeables on missing levels, old and new occlusion links that disagree, elevator destinations outside their band, and Mapping floors that reach into a lower level. The Audit window remembers your view. - **Make dark:** a toggle on the tile HUD and in Fix Region that darkens only the floor's own level, not the roofs above. - **After Migrate to v14,** the scene opens on the ground floor, not a basement. - **Controlling a token on another level** switches the view to that level. - **Build Mode** no longer hides roofs over the room while you control a token. - Smaller downloads: new art ships as WEBP. ### Fixes - Faux Overhead Fill now builds on the level you are viewing, not always on the ground floor. - Selecting walls (click or lasso) no longer freezes on big scenes. - The tile HUD Floor, Roof, Basement and Balcony buttons now confirm the change and report an error instead of failing silently. - Roofs shown through fog of war follow the scene lighting, and appear when sight stops at a wall just short of the roof. - Roof tiles another module animates (Tile Scroll, for example) no longer show a second, frozen copy. - Standing on a floor that shares an Occlusion Link with the roof above it no longer fades the floor you stand on. - Elevators converted from old Levels drawings no longer strand a token below the floor it came from. Audit Fix All no longer adds floors an elevator cannot reach. - Mass Edit prefabs spawn exactly as they do with Better Levels off. - dnd5e Falling no longer flickers while a token walks into a floor or roof area. - Generate and the Level Manager no longer trigger Foundry v14 deprecation warnings. ### Recommended - Baileywiki Mapping 0.5.187 or newer makes level changes on wall-heavy scenes much faster. Better Levels works with older versions, only more slowly. - Baileywiki Mass Edit for pixel-true floor surfaces, vehicles and converting old scenes. Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.0.19
2.9 MBOct 25, 2026Core 14 to 14.369

## 2.0.19 (2026-10-25) ### Fixed - **Players can target a token that is ghosted under a Faux Overhead region.** Before, a player could see the faded token but pressing T or clicking it with the Target tool did nothing, in every "Under a Faux Overhead, show" setting except "The token as normal (effect off)". Now only the fully hidden and outline display modes block targeting, and only when the player cannot see the token. A ghosted token, and any token the player has line of sight to, can be targeted. The GM and token owners were never affected.

v2.0.18
2.9 MBOct 20, 2026Core 14 to 14.369

## 2.0.18 (2026-10-20) ### Fixed - **No freeze with stairs or floor cutouts that cut each other.** Fixed a freeze when loading a scene with two or more stairs or floor cutouts that cut each other's floor, such as scenes built in the 2.1.0 beta. Each opening is now cut using the other region's own drawn shape, and a guard stops the shape lookup from ever repeating itself. Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.1.0
Nov 2, 2026

2.1.0 (2026-11-02)

Better Levels 2.1.0 has a new look and a new way to build stairs and ladders. Your existing scenes, stairs, elevators and settings keep working as they are.

New look

  • Redesigned helper panel. Four tabs in the order you build: Levels, Stairs, Vision and Check. Every tool is a tile you click to arm, and a short line tells you what to do next. Esc ends the stroke, then the tool, then the newest window. It never closes the panel.
  • Four themes. Fantasy (the default), Sci-fi, Modern or Arcane, in Module Settings. Hover sounds are optional and off by default.
  • One Defaults window for floors and roofs, lights, Faux Overheads, and stairs and ladders, with a single Save.
  • Rebuilt Level Manager. One table with each floor's fields and its "Can see" grid. Nothing changes until you Save.
  • Fewer pop-ups. Routine success messages are gone and results show in the panel's status line. Audit, Backup, Samples, Fix and every dialog share one themed frame, with help in (i) tips.
  • The panel remembers each scene. Open, minimized or closed is saved per scene, so closing it on one scene leaves the others alone. The Auto-show setting opens it only on a scene with two or more levels that you have not closed it on.
  • Module Settings are regrouped into Interface, Building, Vision and tokens, Audit, and Placeables Tab. Your old choices carry over, and settings only a GM can use are hidden from players.

Stairs and Ladders

  • No Baileywiki Mapping needed. Better Levels draws the treads, base, tint, shadows and landing itself, and existing textured stairs switch over when the scene loads.
  • Two ways to draw a stair. Drag a Rectangle, or Paint it square by square. Each new stair goes to one level, and ladders are the way to connect several floors. Treads are spaced to your grid, have a soft light edge so they show on dark floors, and always draw under tokens.
  • Ladders are their own tool. One grid square, with wood, metal or no art, an optional tint and trapdoors that face the right way. A ladder can stop on every floor on the way. Ladders can go on any square, including against a wall.
  • Look options. Tint, Landing (none, top, bottom or both), Treads on or off, and Stairwell (sink the stair into the floor when seen from above, or draw a regular stair that rises, like an outdoor stair).
  • Edit stair window. Change a stair's destination, climb direction, lock, texture and look, with a live preview.
  • Lock, Delete and Undo. Every stair and ladder has Edit, Lock and Delete icons (GM only). Delete asks first and removes the whole stair in one step. Ctrl+Z (Cmd+Z on Mac) undoes a stair or ladder placement.
  • See through the stairwell. Tokens on the two levels of a stair can see each other through it. Turn this off for the whole world with "Stair cross-level vision". With Basements sealed, a basement stair opens only at the stair itself.
  • Smooth level switching. After a climb, the view follows the token to its new level once, and the stair art for the level you arrive on is drawn right away.
  • Draw tools stay clear. While you draw a stair or ladder, other regions' hatching is dimmed so the one you are placing is easy to see. A button on the armed strip turns the dimming off.
  • Your existing stairs and elevators keep working. Stairs that stop at several levels keep working until you edit them.

Change levels safely

  • Review before anything moves. Deleting a level, changing a level's height, Generate, and dropping a multilevel Mass Edit prefab open a review window. It lists what is on each level and moves it, instead of deleting it. Choose Move, Split by height, Untag only or Delete for each group, and Preview first.
  • Undo. Ctrl+Z undoes the last level change, including backgrounds and moved items. "Apply and back up" saves a backup scene first.
  • Multi-level items stay put. A wall that spans two floors stays on both, and when you add a new floor above ground the review offers to share trees, outer walls and roofs with it.
  • Audit can recreate a missing level at the height its items imply, and finds tiles, walls and lights left on a level that no longer exists.

Mass Edit prefabs

  • Multilevel prefab drops keep all of their levels, and each placed building keeps its own stairs, surfaces and darkness regions.
  • With Basements sealed, roofs, chimneys and smoke on the floors above no longer show from the basement after a drop.
  • Roofs on a freshly dropped prefab fade together right away, and two copies of one building never fade each other.
  • Mass Edit's see-through placement preview now shows in Build Mode.

More new things

  • Level Manager: "Use this color for all levels" in the Background window.
  • Doors in the dark: new setting (GM only) so players can see and click a door next to their token without darkvision. Choose Nearby, Any door in line of sight, or Off.
  • Audit: hovering an issue outlines it on the map, with a dashed outline and arrow for other levels. New rules for missing levels, placeables on missing levels, old and new occlusion links that disagree, elevator destinations outside their band, and Mapping floors that reach into a lower level. The Audit window remembers your view.
  • Make dark: a toggle on the tile HUD and in Fix Region that darkens only the floor's own level, not the roofs above.
  • After Migrate to v14, the scene opens on the ground floor, not a basement.
  • Controlling a token on another level switches the view to that level.
  • Build Mode no longer hides roofs over the room while you control a token.
  • Smaller downloads: new art ships as WEBP.

Fixes

  • Faux Overhead Fill now builds on the level you are viewing, not always on the ground floor.
  • Selecting walls (click or lasso) no longer freezes on big scenes.
  • The tile HUD Floor, Roof, Basement and Balcony buttons now confirm the change and report an error instead of failing silently.
  • Roofs shown through fog of war follow the scene lighting, and appear when sight stops at a wall just short of the roof.
  • Roof tiles another module animates (Tile Scroll, for example) no longer show a second, frozen copy.
  • Standing on a floor that shares an Occlusion Link with the roof above it no longer fades the floor you stand on.
  • Elevators converted from old Levels drawings no longer strand a token below the floor it came from. Audit Fix All no longer adds floors an elevator cannot reach.
  • Mass Edit prefabs spawn exactly as they do with Better Levels off.
  • dnd5e Falling no longer flickers while a token walks into a floor or roof area.
  • Generate and the Level Manager no longer trigger Foundry v14 deprecation warnings.

Recommended

  • Baileywiki Mapping 0.5.187 or newer makes level changes on wall-heavy scenes much faster. Better Levels works with older versions, only more slowly.
  • Baileywiki Mass Edit for pixel-true floor surfaces, vehicles and converting old scenes.

Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.0.19
Oct 25, 2026

2.0.19 (2026-10-25)

Fixed

  • Players can target a token that is ghosted under a Faux Overhead region. Before, a player could see the faded token but pressing T or clicking it with the Target tool did nothing, in every "Under a Faux Overhead, show" setting except "The token as normal (effect off)". Now only the fully hidden and outline display modes block targeting, and only when the player cannot see the token. A ghosted token, and any token the player has line of sight to, can be targeted. The GM and token owners were never affected.
v2.0.18
Oct 20, 2026

2.0.18 (2026-10-20)

Fixed

  • No freeze with stairs or floor cutouts that cut each other. Fixed a freeze when loading a scene with two or more stairs or floor cutouts that cut each other's floor, such as scenes built in the 2.1.0 beta. Each opening is now cut using the other region's own drawn shape, and a guard stops the shape lookup from ever repeating itself.

Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.0.17
Oct 12, 2026

2.0.17 - 2026-10-12

Fixed

  • No false Audit warning after resizing a scene. Foundry 14.369 now moves regions when you resize a scene. Better Levels now updates its record of floor openings it has already copied down, so the Audit no longer asks to copy them again (which would have added duplicate openings).
  • Audit: Balcony check. The Reveal Elevated Surface check added in 2.0.16 now also covers Balcony tiles, not just Roofs.
  • Plainer wording. Messages, tips and Audit text no longer use long dashes.
  • Sample Tudor scene. The smoke on the top floor now uses smoke art included with Better Levels, so it no longer shows a missing-file error.

Changed

  • Verified with Foundry v14 build 14.369.

Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.0.16
Oct 12, 2026

2.0.16 - 2026-10-12

Fixed

  • Roofs visible from the ground. Marking a tile as Roof or Balcony now turns on Reveal Elevated Surface on its surface region, so tokens on the ground outside the building can see the roof. Before, the setting stayed off and roofs were hidden from ground-level tokens.
  • Audit & Fix: new roof check. The Audit now flags roof surfaces that have Reveal Elevated Surface off, and Fix turns it on in one click. Run it once on scenes with roofs made before this version.
  • Sample Tudor scene roofs. The included sample scene's roofs now have Reveal Elevated Surface on.
  • Level Manager infinity sign. The visibility grid showed scrambled characters for a level with no top; it now shows the infinity sign.
  • Cleaner button labels. The helper panel's Create buttons (Faux Overhead and Floor Cutout) no longer show garbled characters.

Floor Cutout is based on Floor-Cutout by baggydude: https://github.com/baggydude/Floor-Cutout. Thank you!

v2.0.15
Oct 11, 2026

2.0.15 - 2026-10-11

Fixed

  • Tokens on another level no longer show up as huge, full-size images. With "Show visible tokens only" on, the artwork drawn under a token's dashed outline could appear at the image's full size after a scene loaded or redrew. It now always matches the real token exactly: same size, mirroring, anchor and rotation.

Credits

v2.0.14
Oct 10, 2026

2.0.14 - 2026-10-10

Changed

  • The Floor/Roof/Basement/Balcony buttons on a tile's right-click menu now appear only while the Better Levels panel is open (GM only). To use them, click the Better Levels button in the scene controls to open the panel, then right-click a tile. Build Mode on its own no longer shows them, and collapsing the panel hides them.
  • The Audit tip for tiles that haven't been marked yet now points to the right place: open the Better Levels panel and right-click the tile, or select the tiles and click Fix.

Credits

v2.0.13
Oct 10, 2026

2.0.13 - 2026-10-10

Changed

  • Floor, Roof, Basement and Balcony buttons are easier to find. Click the Better Levels button in the scene controls, then right-click a tile: the Auto-configure Floor / Roof / Basement / Balcony buttons are in the extra column next to Foundry's own. You no longer need to turn on Build Mode first. (They still show in Build Mode too, and are GM only.)
  • Tiles respond to clicks in the Better Levels group. You can now select and right-click tiles while the Better Levels group is selected, instead of switching to Foundry's Tiles controls first.
  • Clearer stair and elevator messages in the Audit. The message now says what the stair is set to, what it should be (from its lowest floor to its highest floor, top included), and why.
  • "Show toolbar button" setting description fixed. It now says Better Levels has its own group in the scene controls.

Credits

v2.0.12
Oct 9, 2026

2.0.12 - 2026-10-09

Everything new since 2.0.9 (2.0.12 is the stable release of the 2.0.10 and 2.0.11 testing builds).

Fixed

  • Tokens on other levels (dashed outline) work like normal tokens again. You can click to select them, target them with T or the Target tool (hold Shift to add), right-click for the token HUD, and double right-click to target a token you don't own. Their status icons, bars, and target arrows now show on top of the token art instead of being covered by it.
  • GM viewed level detection fixed. With no token selected, a GM now sees the dashed outlines for the level they are viewing, not a level picked from the first token on the scene.

Changed

  • Clearer light messages in Fix and the Audit. The Fix result and the Audit tips for lights now say plainly that a blank Levels field plus an elevation inside the floor's band is the correct setup. Lights stay untagged on purpose so their glow spreads between floors.
  • "Show visible tokens only" setting description updated to match what the feature does.

Credits

v2.0.9
Oct 2, 2026

2.0.9 - 2026-10-02

Fixed

  • Floor Cutout no longer punches lower-floor tiles that are only tagged onto the viewing level for mutual visibility. Affect Tiles now punches tiles by elevation band (tiles whose elevation sits in the cutout region's tagged level band(s)), so you can cut a hole in a roof/floor tile and still see the floor below through it.
v2.0.8
Oct 1, 2026

2.0.8 - 2026-10-01

Fixed

  • Faux Overhead "Keep this area lit" no longer punches FOW holes into sealed basement levels. Keep-Lit painted white into the shared vision brightness mask for every faux footprint with no viewed-level gate, so a treetops/surface overhead also cleared fog on basements under the same XY (pheriel / Tech Support). Paint now runs only when the viewed level is mutually visible with the region's elevation band (same sealed-basement rule as surfaces / faux concealment). Repaints on viewedLevel change. Surface / treetops keep-lit unchanged.
v2.0.7
Sep 24, 2026

2.0.7 - 2026-09-24

Fixed

  • Reveal fog of war beneath roofs — whole roof outside, walls still block under-roof. Roofs with Reveal fog of war beneath now show their full footprint through fog when you are outside looking at the building. Under the roof, fog clears only where you have line of sight, so ground walls keep blocking vision (no more punching through interiors).
  • Tile HUD Floor / Roof / Basement / Balcony buttons visible again. The auto-config column was sitting on top of the tile with no offset under Foundry's absolute HUD layout; it now parks one column past the core right column. Still Build Mode + GM only.
v2.0.6
Sep 24, 2026

2.0.6 - 2026-09-23

Changed

  • Orphan remapping for outdoor props matches Configure Tile. Fully-orphaned tiles, drawings, and sounds are no longer pinned to a single best-band level. Same rule as Move Tile / Configure Tile: basement content stays basement-only; above-ground content is tagged to every above-ground level when the scene has basements, or left untagged (visible on all levels) when it does not. Fixes dock boats and similar props that vanished from upper floors after Generate. Walls, regions, and tokens stay single-band so floors/roofs/stairs keep sensible occlusion.

Fixed

  • Generate Levels / Level Manager delete no longer hide the scene. After levels are created or replaced, placeables that still pointed at a dropped level id (the common case: Foundry's default defaultLevel0000 when Generate builds tighter bands like 0|10) are auto-assigned to the best matching new level by elevation, falling back to the first/ground level. Tokens get their singular level rewritten; tagged tiles/regions/walls are remapped; lights stay untagged with elevation snapped into band. Same helper runs after Level Manager Commit when levels are created or deleted.
v2.0.5
Sep 23, 2026

2.0.5 - 2026-09-23

Added

  • Floor Cutout — carve openings through solid floors (Make Transparent / Create Hole). Ported from baggydude’s Floor-Cutout; credit baggydude. Create menu: Floor Cutout – draw.

Changed

  • Floor Cutout, Faux Overhead, and Stair draws no longer inherit Mapping Region presets (clean region only).
  • New stairs leave Change Level movement-actions empty (Foundry “allow all”) instead of listing every type.

Fixed

  • Animated video tiles (WebM/MP4) + Restrict Light: companion depth occluder uses the live video texture so transparent pixels (open door hole) let light through; opaque pixels still block. Works around Foundry video-alpha depth issues.
  • Better Roofs fog coexistence: turning on BL “Reveal fog beneath” (checkbox / auto-roof / Audit fix) clears Better Roofs brMode so the checkboxes stop fighting.
v2.0.3
Sep 16, 2026

2.0.3 - 2026-09-16

Added

  • Helper panel uses labeled menu buttons (Levels, Fix, Create, Backup, Audit, Samples, Settings), styled like the Landing Page helper, and titles itself Better Levels (scene name as a subtitle).
  • Helper panel gear opens Module Settings. Opinionated floor/roof/basement defaults (and light elevation on drop) live in Set Defaults from the top of that settings list.
  • Module Settings are grouped for scanning (Audit, Faux Overhead, Interface, Placeables Tab, and key token/region toggles near the top), with clearer section dividers.
  • Enable scene Audit master switch, plus Audit window toggles for canvas outlines and outlines only in Build Mode.

Changed

  • Placeables-related options (including auto-name tiles from filename) sit under Placeables Tab.
  • Auto-set light elevation on drop moved into Set Defaults (no longer a separate Module Settings row).

Fixed

  • Build Mode switch in the helper panel no longer gets clipped off the edge.
  • Helper panel left-rail icon no longer vanishes when Audit outline toggles were missing their handlers.
v2.0.2
Sep 10, 2026

2.0.2 - 2026-09-10

Fixed

  • Faux Overhead no longer conceals tokens on levels outside the region's enabled levels (for example, sealed basements under a ground-floor bridge). When the region has enabled levels set, only those levels are affected; otherwise it uses levels mutually visible with the region's band.
  • Faux Overhead now refreshes immediately after Level Manager Commit (and when levels are created, updated, or deleted), so enabled-level and visibility changes no longer need a full reload.
v2.0.1
Aug 25, 2026

2.0.1 - 2026-08-25

Fixed

  • Helper panel remembers whether it was open, minimized, or closed, and no longer pops open just because a scene has levels.
  • Audit no longer errors when a roof is missing its surface region (that used to spam the console every time the helper panel redrew).

Added

  • Set Defaults has a link that opens this module's Game Settings.

Changed

  • Show visible tokens only (keeps overhead tiles intact when a token is seen on another floor) now defaults to on. Worlds that already saved it off stay off.
v2.0.0
Aug 24, 2026

2.0.0 - 2026-08-24

Any battlemap can now have levels, not just the ones designed for them.

Draw a region over artwork that is already painted into a map (a bridge, catwalk, awning, or cave mouth) and tokens traveling underneath vanish behind it, exactly as if an overhead tile covered them. No tile needed, and none is added. Anyone who can genuinely see under there still sees a ghost of the token; everyone else sees nothing. This turns a whole category of maps into levels maps with no art surgery.

Edit region shapes point by point

Foundry has no built-in way to move, add, or delete an individual vertex of a region polygon. Select a polygon region with the Regions layer Select tool and every vertex gets a handle: drag a point to move it, right-click a point to delete it, drag an edge midpoint to insert a point, hold Shift to bypass grid snapping. On by default for GMs; toggle it under "Edit region points on the canvas".

Faux Overhead

A region behavior that conceals tokens beneath painted-in overhead art.

  • Per-client display of concealed tokens: hidden, faded ghost, hitbox only, or the token as normal. Each player and the GM pick their own.
  • Per-region concealment override (solid stone vs slatted catwalk). Line of sight always wins: a token you can truly see ghosts rather than vanishing.
  • Partial occlusion: a token on the edge is clipped there, not popped in or out.
  • Concealed tokens hide their nameplate, bars, and elevation badge, and cannot be targeted by someone who cannot see them.
  • Keep this area lit through fog of war, so a walled interior under an overhead reads at the map brightness instead of a black hole (holes stay dark).
  • Make Surface gives an overhead a sight-blocking surface so tokens above and below cannot see through it.
  • Occlude light like a roof (mutually exclusive with Keep Lit).
  • Faux Overhead defaults: set draw-time options once; apply to selected for existing regions.
  • Fill a walled area from the Create menu (click inside a tent, hut, or alcove, or select the walls). Draw is for bridges and anything walls do not enclose. Escape or right-click cancels.

Native roofs (Better Roofs is no longer required)

  • Fog-of-war reveal is native, with a Reveal fog of war checkbox on the tile Overhead tab.
  • Occlusion linking is native: tiles that share an Occlusion Link Id fade together.
  • Existing Better Roofs settings carry over. The old load warning is gone.

Level Manager and audit

  • Per-level backgrounds, with a BG column and a modal for image or color. Deliberate shared artwork is respected by the audit.
  • Audit outlines on the canvas: red and amber outlines on the viewed floor when Build Mode is on or the helper panel is open. Click an outline to Fix or Ignore. GM only.

Also in this release

  • The toolbar is one Better Levels group. Clicking the Better Levels icon opens the helper panel.
  • Lights dropped on a non-ground floor take that floor elevation (the Levels nav selection).
  • v13-to-v14 migration no longer loops on scenes that already have v14 levels. Leftover light and sound flags.levels crumbs can be stripped like any other legacy-flag finding.
  • Hardened the Placeables tile-thumbnail list against a Tiles-tab freeze.
  • A failure building our toolbar buttons can no longer remove other modules tools.
  • Concealment, targeting, and rendering refinements so hidden tokens stay hidden.
v1.8.11
Aug 4, 2026

1.8.11 — 2026-08-04

Fixed

  • Hardened the Placeables tile-thumbnail decorator against locking up the interface, following a report of Foundry crashing whenever the Tile Controls or the Placeables -> Tiles tab were opened. A tab that dies without an exception is a freeze or an out-of-memory, and this code had three ways to cause one:
    • Its MutationObserver watched the same rows it then modified. Alone that settles, but against another module that also rebuilds those rows the two wake each other indefinitely. It now ignores its own writes, coalesces bursts into one pass per animation frame, and stands down permanently — saying so in the console — if it is still being woken 25 times in two seconds.
    • The row scan was querySelectorAll("*") combined with a per-tile substring search, so one pass cost roughly elements x attributes x tiles, and the observer re-ran it on every DOM change. It now scans row-shaped elements only, and the substring fallback is bounded.
    • Every animated tile created its own <video> decoder. Capped, with a static icon beyond it; the number of decorated rows is capped too. If the tab still misbehaves, "Tile thumbnails in the Placeables tab" in the module settings turns this feature off entirely.
  • A failure building our scene-control buttons can no longer damage the rest of the toolbar. Every listener on getSceneControlButtons mutates one shared object, so an exception from ours abandons the chain and removes other modules' tools, or core's — and our tools are injected into the Tiles group, the very menu that was reported crashing. Wrapped: ours failing now costs only ours.
v1.8.10
Aug 3, 2026

1.8.10 — 2026-08-03

Added

  • Setting: "Show the Audit issue badge" (on by default). Turn it off to make Audit & Fix purely on-demand — the button stays exactly where it is and works exactly as before, it just stops putting a red count on the helper panel. For GMs who deliberately build scenes the audit has opinions about, a permanent badge over a deliberate choice is nagging rather than helping. Per-client, so it doesn't change the world for anyone else.
v1.8.9
Jul 31, 2026

1.8.9 — 2026-07-31

Fixed

  • Tokens invisible on a scene built from a flat map image. Generating levels — or adding one in the Level Manager — copied the ground floor's background image onto every new level. In v14 the background belongs to the Level and is painted across the whole canvas at that level's elevation, so a five-level scene drew five opaque copies of the map stacked above the ground floor. Tokens standing there were buried: their artwork vanished while their hitbox, selection border and elevation badge kept drawing, which made it look as though the tokens themselves were broken. New levels now inherit the ground floor's background colour only. The floor below still shows through, via that level's Visible Levels list — which is what the field is for. Scenes whose artwork comes from tiles were never affected, which is why this went unnoticed for so long.

Added

  • Audit rule: "Duplicated level background" — finds levels already damaged by the above and clears the repeated image with one click. Only flags an upper level whose image is identical to the ground floor's, so deliberately different artwork on an upper floor is left alone. Regenerating levels also self-heals.
v1.8.8
Jul 30, 2026

1.8.8 — 2026-07-30

Fixed

  • Closing the helper panel now also leaves Create Stairs mode, for the same reason it leaves Build Mode: the panel is the only place either mode is visible, and with it closed every region you draw would silently become a stair. Both modes switch off on every close path.
v1.8.7
Jul 30, 2026

1.8.7 — 2026-07-30

Fixed

  • Closing the helper panel now leaves Build Mode. Build Mode hides every tile and region above the level you are working on, and the panel was the only thing on screen saying it was switched on — so closing the panel left the scene silently missing its roofs, with no visible control to explain or undo it. Build Mode now switches off on every close path (the panel's own button, the window header, ESC, and the automatic dismissal on scenes without multiple levels), restoring exactly the tiles and regions it had hidden.
v1.8.6
Jul 30, 2026

1.8.6 — 2026-07-29

Fixed

  • The level visibility grid no longer clips its labels. The grid was being compressed to fit its container, so the row and column names overflowed and were cut off — widening the window freed up the first column but never the headers. The grid now keeps its natural size and scrolls sideways if it has to, and column headers read bottom-to-top so a long level name no longer needs a metre of width.

Changed

  • Both axes of the visibility grid now show each level's elevation band alongside its name, so levels whose names only differ near the end ("Level - Castle Deck" / "Level - Castle Keep") can be told apart. The full label is also available on hover.
  • The Level Manager opens slightly wider, so a twelve-level building's grid fits without resizing.
v1.8.5
Jul 28, 2026

1.8.5 — 2026-07-28

Changed

  • The Floor / Roof / Basement / Balcony buttons on the Tile HUD are now toggles, and the active one lights up blue. A tile is exactly one thing, so the four roles behave like radio buttons: the role a tile already carries is highlighted, and clicking a different one switches to it. You can now see what any tile was meant to be at a glance, without opening a dialog.
  • Clicking a tile's current role clears it, the same way the Ignore toggle works. Clearing restores the occlusion, light/weather restrictions, level tags and elevation the tile had before Better Levels first configured it — captured once when the first role is applied, so switching roles never overwrites the original. The Surface region is removed too, but only if Better Levels created it and no other tile is still using it; hand-drawn and shared regions are unlinked and left alone.
v1.8.4
Jul 28, 2026

1.8.4 — 2026-07-28

Fixed

  • The Level Manager now scrolls. On scenes with many levels the window grew past the bottom of the screen — a ten-storey tower put Add Level, Commit and Cancel out of reach with nothing to scroll. The window is now capped to the viewport, the level table and visibility matrix scroll, and the action bar stays pinned at the bottom where it is always clickable. The Backups, Status and Sample Scenes windows got the same ceiling, since their lists can grow without bound for the same reason.
v1.8.3
Jul 28, 2026

1.8.3 — 2026-07-28

Changed

  • The "tiles with no role assigned" notice now identifies each tile by id as well as name. Scenes routinely contain several copies of the same art, so ignoring one copy left an identical-looking finding behind and made the ignore toggle appear broken when it had worked. Each tile is now listed as "name [id]", so duplicates are visibly distinct entities.
v1.8.2
Jul 28, 2026

1.8.2 — 2026-07-28

Fixed

  • "Floor openings carry through" findings no longer come back after being fixed. The fix genuinely worked — the opening really was copied into the surface below — but the audit kept re-reporting it. The check asked "does the lower surface have a hole containing this point?", using the opening's average centre; for a CONCAVE opening (an L-shaped stairwell is the usual case) that centre lies outside the opening's own outline, so the answer was "no" even immediately after it had been copied. Detection is now structural — matching the opening's geometry, plus a record of what's already been carried down — so a fixed opening stays fixed.
  • Findings involving same-named regions are now distinguishable. A scene often has several regions called e.g. "Surface Level 02 (10 | 20)", which produced findings that looked identical; each now carries a short id and the number of openings involved.
v1.8.1
Jul 28, 2026

1.8.1 — 2026-07-28

Fixed

  • Audit findings now name the tile the way the Placeables tab does. Tile findings read "Tile a1b2c3" — an internal id you can't search for — because the label was reading a flag the module never writes. It now uses the tile's actual name, falling back to its texture filename, so a finding can be located immediately in the Placeables list. The "tiles with no role assigned" notice also lists the tiles by name instead of only naming the level.
v1.8.0
Jul 28, 2026

1.8.0 — 2026-07-27

Stable release — rolls up everything since 1.7.5.

Added

  • Ignore a tile, region or light in the Audit. An eye toggle on the Tile HUD, and an "Ignore this entity in the Audit" checkbox in the Fix / Configure dialog, remove that entity from every audit rule that inspects it — so deliberate decoration, backdrops and one-off art stop being reported without switching a whole rule off for the scene. It's reversible from either place, and the Fix dialog reaches entities the HUD can't (Build Mode hides overhead tiles — select them in the Placeables list instead). The default is unchanged and deliberate: an untouched tile is still audited and still reported as having no role assigned, because "untagged" usually means "forgot", not "deliberate".

Changed

  • The sample Tudor scene now audits completely clean. Its structural tiles are tagged and audited; its decoration and backdrop tiles are marked ignored. Importing it shows a finished scene rather than a list of notices, and demonstrates the tag-it / ignore-it decision on every tile.

Fixed

  • "Show visible tokens only" (experimental): hovering a ghosted token no longer wipes the roof above it on the GM view. Core's occlusion mask takes surfaces as well as tokens, and hovering a token nominates the surfaces above it — drawn across their whole footprint. Ghosted tokens are now kept out of hover entirely, and the ghost provides its own highlight and click-to-target. Player-side behaviour can still vary depending on your module set; the feature remains off by default.
v1.7.5
Jul 27, 2026

1.7.5 — 2026-07-27

Stable release — rolls up everything since 1.7.0.

Added

  • New audit rule: "Tiles with no role assigned (unmonitored)." Every floor/roof check — surface region, occlusion, light and weather, fog reveal — only inspects tiles you've marked as Floor, Roof, Basement or Balcony. That meant a half-configured scene could audit completely clean while unmarked tiles went unchecked. The audit now reports, per level, how many tiles are unmonitored and points you at the tile HUD buttons or "Mark selected tiles as Floor". It is deliberately informational with no auto-fix: Better Levels can't tell a floor plate from a rug or a shadow overlay, and guessing would create surface regions your tokens then stand on. It sits in the green (safe) category, and you can switch it off for scenes that are mostly props.

Changed

  • Bulk fixes now post one summary instead of dozens of notifications. Fix All, the per-category Fix All buttons, "Mark selected tiles as Floor" and multi-select Fix Entity previously fired a toast for every tile and region they touched, burying the result. They now report once, with a breakdown of what changed ("Fixed 23 issue(s) — Floor tile has no Define Surface region (8), Stair spans its connected levels (5), …"), and the full detail goes to the console. Warnings and errors are never suppressed.
v1.7.0
Jul 26, 2026

1.7.0 — 2026-07-26

Stable release — rolls up everything since 1.6.0.

Added

  • Show visible tokens only (EXPERIMENTAL, module setting, default off). Brings back the v13 Levels behaviour for cross-level sightlines. In v14, when a token sees a token on another level (through a window or floor opening), core unoccludes every tile above it — exposing its entire surroundings — and can even remove the floor under the viewer. With this on, cross-level tokens no longer trigger tile unocclusion; each seen token is instead drawn on top of its cover as its artwork with a dashed outline, tracking true line of sight per client. Seen tokens stay hoverable and targetable; any number can be revealed at once. Same-level occlusion (a roof fading over your own token) is untouched.
  • Level Manager visibility grid. A matrix showing which levels each level can see (its "Visible Levels"), with click-to-toggle eyes for any pair in either direction, and a "Reset to policy" button. Changes apply on Apply; once you hand-customise visibility, the audit stops overriding it.
  • New audit rules that close real cross-level sight leaks: every roof tile must carry a Define Surface region; every surface must be assigned to its level and every level that can see it (this replaces the old one-level-per-surface model — the audit fix re-tags them); floor/roof openings (stairwells, trapdoors, balconies) must be carried through to the surface of the level below, and the fix copies them down; floor/roof/basement/balcony tiles must occlude light and weather; one-way stairs (top edge not inclusive) are detected and fixed; a level with content but no surface gets one created.
  • Every audit rule now teaches. All rules carry a rewritten "what's wrong → why it matters → what the fix does" explanation, shown on the issue's "Why this change?" expander AND as a hover tooltip on each rule toggle — the Audit doubles as a course in how Foundry v14 Levels works.

Changed

  • Audit window overhaul: results scroll; Red / Amber / Green categories collapse, each with its own "Fix All (n)" button; the Rules list is grouped by the same severities. Fewer, clearer rules: the two region-naming rules merged (surfaces and stairs still named distinctly), the stair-topology rules merged into one, and duplicate "missing surface" reports were eliminated.
  • Build Mode now hides overhead regions as well as overhead tiles, so the level you're working on is the one you can grab — visuals only, occlusion behaviour untouched.
  • Sample Tudor scene rebuilt as a reference: roof surfaces assigned upward, proper floor openings carried through between levels, window walls (sight/light proximity) instead of invisible walls, floor tiles marked as floors, and the whole scene audits clean.

Fixed

  • Changing a token's level now lands it exactly on the destination floor — up or down, including the first change after a scene load. (Previously the elevation correction collided with core's move animation and stopped at the midpoint, showing a stray elevation badge.)
  • Auto-configuring a roof reliably sets Better Roofs' "Reveals Fog of War" (now written via the canonical flag API), both from the HUD and from the audit fix.
  • The audit again catches a level whose surface region was deleted.
v1.6.0
Jul 26, 2026

1.6.0 — 2026-07-25

Stable release — rolls up everything since 1.5.2.

Fixed

  • Cross-level token vision is no longer affected by the Placeables filter. "Sync to Levels Elevation" now filters only the Placeables sidebar list — it never changes what's drawn on the canvas. Previously, with Sync on (the default), tokens standing on other floors could be hidden from view, and from each other's line of sight, so combatants couldn't see one another between levels. If you build multi-level scenes, this is the important one.
  • Build Mode no longer disturbs tile rendering when it's off. It now leaves tile visibility entirely to Foundry unless you're actively using it to build.
  • The "corrupt region shapes — Repair" warning no longer stacks banners on your map. When a scene has broken regions, the Repair action lives on a quiet button in the helper panel instead.

Added

  • Setting: "Sync to Levels Elevation only in Build Mode" (default off). Optionally restrict the placeables-list filtering to Build Mode, so the list shows everything during play.
v1.5.2
Jul 26, 2026

1.5.2 — 2026-07-25

Fixed

  • Changing a token's level via the HUD didn't move its elevation — most visibly going down onto a band boundary. A hook trace showed why: a HUD level change is a move, and core doesn't put level in the incoming preUpdateToken changes — it derives the destination level during processing and only writes it into the committed update. Our handler recorded its target in preUpdateToken gated on "level" in changes, which is never true there, so it never actually ran. What looked like "works going up" was core animating the elevation on its own. The elevation is now set in updateToken, the hook where level genuinely appears, so it fires reliably in both directions and lands the token on the new level's floor. (The follow-up write is elevation-only, so it can't loop.)
v1.5.1
Jul 19, 2026

1.5.1 — 2026-07-18

Fixed

  • "Sync to Levels Elevation" was missing from the level dropdown on most scenes. The menu was identified by looking for the literal text Level (, so it was only recognised on scenes whose levels happen to be named exactly that way. A scene naming its levels Level 01 (0 | 10), Ground Floor or Basement was never matched and never got the entry. The menu is now identified by matching its items against the scene's actual level names, so it works whatever you call your levels.
v1.5.0
Jul 11, 2026

1.5.0 — 2026-07-11

Removed

  • Restack Tiles has been removed — the helper-panel button, the preview window, and the bring-to-front / send-to-back buttons on the Tiles toolbar. Drag-to-reorder in the Placeables tab does the same job in the place you are already working, so this was a second way to do one thing.
  • Unaffected: drag-to-reorder in the Placeables tab (Shift = range, Ctrl/Cmd = toggle), the depth-ordered tile list, and "Mark selected tiles as Floor" on the Tiles toolbar.
v1.4.1
Jul 11, 2026

1.4.1 — 2026-07-11

Changed

  • "Sync to Levels Elevation" is now ON by default. An unfiltered placeables list on a real scene runs to hundreds of rows, so the filtered view is the useful default. Your choice is remembered from the moment you toggle it — including turning it off, which sticks.
v1.4.0
Jul 11, 2026

1.4.0 — 2026-07-11

Fixed

  • A level's FLOOR tiles were appearing in the list of the level below it — which also silently broke group drag-to-reorder, because selecting them produced a group spanning two elevations, which cannot be restacked.

    Neither available signal can say which level owns a tile. levels tags describe visibility, not ownership — in the tavern scene 54 of 86 tiles are tagged to all four levels, so tags would put a tile on every floor. And elevation is ambiguous at a boundary: elevation 10 is both the ceiling of Level (0|10) and the floor of Level (10|20), so a 2nd-floor floor tile genuinely sits inside the 1st floor's band. No test over those two fields can separate them.

    Better Levels now records ownership explicitly: a tile configured with a role (floor/roof/basement/ balcony) is stamped with the level it belongs to, and the Placeables filter and the restack both treat that as authoritative. Tiles Better Levels has not configured behave exactly as before.

    Self-healing: tiles configured before this release still point at their Define Surface region, and that region is tagged to exactly one level — so ownership is recovered from it automatically. No migration, and nothing to re-configure.

v1.3.3
Jul 11, 2026

1.3.3 — 2026-07-11

Fixed

  • Drag worked exactly once, then stopped. The listeners live on the tab's element, and core replaces that markup whenever the tab re-renders — which it does immediately after a drop, since the drop updates tiles. The install guard was a symbol on the application, so once the element and its listeners were replaced, the guard prevented ever re-binding: first drag fine, every drag after it dead until a reload. Binding is now tracked on the element, so a fresh element is always freshly bound.
  • Dragging a group did nothing. control() is a no-op while the Tiles layer is not the active canvas layer, so selecting rows in the sidebar could look selected while canvas.tiles.controlled stayed empty — and the drag quietly degraded to dragging just the row under the cursor. The Tiles layer is now activated before any selection change.
  • A refused drop now says why. Releasing on an illegal target used to do nothing at all, which was indistinguishable from the drag being broken. It now warns — and specifically calls out a selection that spans several elevations, which cannot be restacked together because sort is only compared within one elevation.
v1.3.2
Jul 11, 2026

1.3.2 — 2026-07-11

Fixed

  • Placeables-tab features are now installed independently. They previously ran as four bare calls in a row at init, so a throw in any one of them silently killed every feature registered after it — and drag-to-reorder, being last, was always the first casualty. A failure is now caught, logged loudly by name, and cannot take the others down with it.
v1.3.1
Jul 11, 2026

1.3.1 — 2026-07-11

Fixed

  • The Better Levels panel would not open on 1.3.0. The new "Region is both a Surface and a Stair" audit rule called hasBehavior(), which lives in fix-entity.mjs and was never defined in audit.mjs — so auditScene() threw the moment the panel asked it for an issue count, taking the whole panel down. It now uses audit.mjs's own isSurfaceRegion/isStairRegion.
v1.3.0
Jul 11, 2026

1.3.0 — 2026-07-11

Fixed

  • Stair elevation bands reached into levels the stair does not connect — and the audit was ENFORCING it. A stair's band ran from the lower level's floor to the upper level's ceiling. A level's ceiling is the next level up's floor, so the band swallowed a level too many: in the tavern scene a token standing at elevation 20 (on the 2nd floor) was inside all four ground-floor stairs at once. Worse, the stair-elevation audit rule expected that same wrong band, so every "Fix All" wrote the bug back. Bands now run floor-to-floor — from the lowest connected level's floor to the highest connected level's floor — which still contains the elevation a token stands at on both levels, but reaches no further. Across the tavern's 7 stairs this drops the number containing elevation 20 from 7 to 3 (the 3 that legitimately connect it). It also removes the infinite-top case on the roof stair.
  • A tile could steal another tile's surface region. Two overlapping floor plates both matched the same Define Surface region, so the second silently adopted the first's footprint and ended up with a surface that wasn't its own shape. A region already claimed by another tile is now skipped.

Added

  • Audit rule (red): "Region is both a Surface and a Stair." A region can be a floor you stand on, or a stair that moves you — never both, or standing on it teleports you. Nothing detected the ones that already existed. The fix strips the Change Level behavior and leaves it a Surface.
  • Audit rule (red): "Floor tile has no Define Surface region." Every other surface rule only validated regions that already existed, so a floor that never got one was invisible to the audit — which is exactly how the tavern's floors went un-surfaced and left tokens with nothing to stand on. Also catches a dangling link (region deleted) and a shared link (two tiles, one region).
  • "Mark selected tiles as Floor" on the Tiles toolbar — applies the floor preset and gives each tile its own Define Surface region. Better Levels cannot reliably guess that a tile is a floor, so this is the honest interface: you select, it applies.
v1.2.0
Jul 11, 2026

1.2.0 — 2026-07-11

Removed

  • Stair trigger gating has been removed entirely. Better Levels no longer intercepts the core Change Level behavior, so stairs now behave exactly as Foundry intends — a token changes level on entering the region, with no interference from this module. The "Stairs trigger when" and "Ignore stairs on the far side of a wall" world settings are gone, along with the per-region stairTrigger flag override. The approach proved unreliable in play and was not worth the risk to token movement.
  • Unaffected: Create Stairs mode (new regions become Change Level stairs), the stair audit rules, and everything else stair-related. Only the movement gating is gone.
v1.1.5
Jul 11, 2026

1.1.5 — 2026-07-11

Fixed

  • The drop did nothing. endDrag() cleared the drag state before calling the commit, and the commit read the dragged tile ids from that state — so it always saw an empty list and returned without writing anything. The drag UI worked perfectly and then threw the payload away. The ids are now passed through explicitly.
v1.1.4
Jul 11, 2026

1.1.4 — 2026-07-11

Fixed

  • Drag-to-reorder: the tile thumbnails were eating the drag. An <img> is draggable by default, so pressing on a row's thumbnail started a native image drag — and a native drag swallows every pointer event until it ends. That is why nothing happened during the press, the "N tile(s)" badge only appeared after the mouse was released, and the badges then piled up on screen (the pointerup that cleans them up never arrived). The thumbnails are no longer draggable, and native drag is suppressed outright inside the placeables list.
  • The drag now takes pointer capture, so move/up are delivered even if the row is re-rendered mid-drag, and it cleans up on pointercancel — no more orphaned badges.
v1.1.3
Jul 11, 2026

1.1.3 — 2026-07-11

Fixed

  • Drag-to-reorder now actually drags. Marking the rows draggable was not enough: core calls preventDefault() on the row's pointerdown for its own click handling, and a cancelled default there stops the browser ever raising dragstart. The handlers were installed and simply never invoked — no error, nothing to see. The drag no longer uses HTML5 drag-and-drop at all; it is driven from pointer events in the capture phase, which core cannot cancel out from under us.
  • A press only becomes a drag after the pointer moves ~5px, so a plain click still selects as before. A floating "N tile(s)" badge follows the cursor, the orange line shows where the drop lands, and Escape cancels the drag mid-flight.
v1.1.2
Jul 11, 2026

1.1.2 — 2026-07-11

Fixed

  • Drag-to-reorder did nothing at all. The tile rows never carried draggable="true", and a browser fires no drag events whatsoever on an element without it — so the listeners were live but were never called. Rows are now marked draggable, and re-marked after every re-render (core rebuilds them on search/filter). The drag also guarantees a non-empty dataTransfer, without which the browser cancels the drag the instant it starts.
  • Added game.modules.get("baileywiki-better-levels").api.drag.debug() — reports rows found, how many are draggable, and whether the handlers installed.
v1.1.1
Jul 11, 2026

1.1.1 — 2026-07-11

Added

  • Drag tile rows in the Placeables tab to restack them. An orange line shows exactly where the drop will land (above or below the row you are hovering). Dragging an unselected row drags just that row; dragging a selected one drags the whole selection, preserving its internal order. Dragging a row out onto the canvas still works as before.
  • Dropping reindexes that elevation band with even spacing rather than squeezing a value into a gap — deterministic, collision-free, and it repairs interleaved legacy sort values as a side effect. It reindexes over every tile at that elevation, including ones hidden by a filter, so reordering a filtered list can never scramble what you cannot see.

Fixed

  • Selection modifiers in the Placeables tab were backwards. Shift+click behaved like a toggle and Ctrl+click did nothing. Now: Shift+click selects the whole range between the anchor row and the clicked row (in displayed order), and Ctrl/Cmd+click toggles a single row in or out of the selection. Plain click selects one row and sets the anchor. Selection is the canvas selection, so the sidebar and canvas can never disagree.

Notes

  • Tiles can only be restacked within their own elevation — sort is only ever compared between tiles at the same elevation, so honouring a cross-elevation drag would mean rewriting the tile's elevation, which in a Levels scene silently moves it to another floor. Such a drop is refused and the row is marked in red.
v1.1.0
Jul 11, 2026

1.1.0 — 2026-07-11

Added

  • Tiles in the Placeables tab are now listed by DEPTH, not alphabetically. Top of the list = drawn in front. The comparator is v14's real depth rule (elevation, then sort), so the list and the canvas finally agree, and you can see at a glance that a wall tile is sitting under a floor tile. Can be turned off in Settings.
  • Restack Tiles — select tiles on the canvas and move them above (or below) everything else. Solves the common legacy-scene problem where wall/door tiles are stacked beneath the room floor tiles that cover them. Tiles you did not select keep their exact stacking; only the selection moves, and its own relative order is preserved. Measure against the active level or the whole scene. The window previews every sort change (from -> to) before you commit, and offers a scene backup first. Quick bring to front / send to back buttons are also on the Tiles toolbar.
v1.0.12
Jul 11, 2026

1.0.12 — 2026-07-11

Fixed

  • Sync to Levels Elevation now drives core's own elevation filter — the min/max pair in the Placeables tab's Advanced Filter panel. That is the native mechanism for precisely this job, and it is what makes the feature actually work; the previous attempts reimplemented filtering on top of core's undocumented internals instead of just filling in the fields core already has. Turning Sync on fills Elevation min/max from the active level's band and refills them whenever you change level. A level with an infinite roof sets an OPEN upper bound rather than a literal Infinity, so the top level is not filtered down to nothing. Level assignment is still filtered alongside it.
Machine-readable feed: GET /api/v1/modules/baileywiki-better-levels/changelog?channel=stable

Comments(0)

Sign in to join the discussion.