maptool
maptool copied to clipboard
[Feature]: Make Hidden layer a staging area, out of play
Describe the Problem
When preparing an encounter, it would be useful to have all the monsters, etc., ready to go at a moment's notice, but without players being aware of them and without them being a part of the gameplay. I can put these tokens on the Hidden layer so that players don't see them, but various effects from the tokens are still present, e.g., VBL, MBL, terrain modifiers, lights, auras.
The Solution you'd like
I would like the Hidden layer to become a true staging area. A token on the Hidden layer would not be rendered for players (as today), player ownership of the token wouldn't have any effect, and all effects from the token would be ignored. GMs would be able to put anything on this layer without fear of revealing it to the players or impacting the game.
By contrast, Visible to Players would be reduced to only controlling token visibility for players. All effects would be left in place. This would make it align more with Visible to Owners Only while enabling effects without requiring a player-visible token to attach them to.
Long story short, all tokens on the Token, Object, or Background layer would have their effects applied, while all tokens on the Hidden layer would certainly not have their effects applied.
Alternatives that you've considered.
Make a new "Staging" layer that serves this role. But that would leave an ambiguous Hidden layer in place.
Additional Context
Some prior discussion can be found in #4298 and in the Hidden Lights thread on Discord.
I agree. Bouncing between the "visible to players" checkbox and Hidden layer to change visibility has always been odd. And not having a true staging method meant the safest way to stage was to put stuff off map, which is often less desirable because then you're potentially having to setup complex encounters in game that could have been done ahead of time.
That said, one of the benefits of using the Hidden layer is that you can select the layer and do a drag selection to "show" what's visible or look at the Map Explorer. Neither is great, but they were options. If the checkbox becomes the sole method for visibility, then we're stuck with even fewer ways to recognize invisible tokens... and we're back to discussing this again: https://github.com/RPTools/maptool/issues/3347#issue-1111197487
Perhaps also change the name of the layer from "Hidden" to "Staging" to further clarify its intended purpose..
I think this would be useful to implement this for simple doors in MT: Draw VBL, add Door Token, move VBL to this token, hide token from players by toogling "visible to players".
Now you can open and close the door by moving the doortoken to the Hidden-Layer and back again.
We could update the UVTT import to add those token automatically.
Given how long the "Hidden" layer has been around with its current behaviour I don't think we know how changing it might adversely affect some frameworks and functionality. People most certainly use the Hidden layer with current expectations for what it's going to do.
So I think that the current "Hidden" layer should be renamed to "Invisible" (since it mimics the "Visible to Players" checkbox) with the "Hidden" name deprecated so that it will still work with all existing functions. "Invisible" is a more accurate description and gets it inline with the checkbox.
Unfortunately, that would mean that a new "Staging" layer should be added that is truly "hidden" from all of the other effects of the table. Hopefully, it would be an easy layer to implement given how isolated it would be.
And, who knows, maybe once a dev gets into the layer code they can start laying some groundwork for custom layers. ;)
See https://xkcd.com/1172/ :)
IMO the intend that the hidden layer should be a stating area is clear by the GM name. There might me frameworks that set token invisible by calling setLayer("GM")
instead of setVisible(false)
but this could be considered using a bug if effects should be kept. ;)
Simpler changes have been denied because it might adversely affect established long term behavior. That's either a precept of MapTool or it isn't. To this point, it has been.
It's hard to call something like this a bug when it has been working this way for so long. It's even harder to imagine that the Hidden layer, as it is, isn't a pretty heavily used layer in MT... so this isn't sneaky, corner case, behaviour. There may even be discussions on the forums for WHY it works this way (that we may all disagree with now). I won't bother looking that up because I'm not advocating against a change. I agree we need a "better" hidden layer... but I'm just not sure that there is no value in keeping an established "Visibility" layer (which is what the current "Hidden" layer is and has been for more than a decade.)
I, personally, would accept this change with the Hidden layer and don't think it will affect much of my primary framework. I do put "non visible" traps on the hidden layer that are reactive to being touched... and some hidden portals... and have done it with monsters too... so, yeah, some changes would have to be made on my end. I wouldn't cry too much about having to make these changes because I'd like to have a true staging area... but I'm just saying that there are many ways that people are probably using the layer right now that will require a refactoring of their code. I wonder, for example, how Melek's elevation might be using the hidden layer... or how the BoT might be using using it... or JMR's action pads... etc.
@FullBleed has a good point - we need to properly consider upgrade paths. Even though most discussion has been positive about wanting the Hidden layer to be different, there's no way it isn't being used for the effects. And for any such campaign, this change would be a big deal.
Let's say we played it safe and added a new "Staging" layer that behaves how we want, giving us five layers. That would be fine enough, if not ideal. We then could probably hide the Hidden layer in the UI for new campaigns or campaigns that aren't using it. Internally the Hidden layer would still need to be present - because macros - but otherwise it's out of sight, out of mind. A soft-removal of sorts.
My thoughts on layering: make them generic with controllable attributes, such as:
- Token Visibility
- GM Only (Only a GM can see tokens on this layer, useful for a staging area or hidden layer)
- Owners (Can see own tokens on this layer, useful for an invisibility layer, where you can see your own tokens, but not others)
- All (Can see all tokens on this layer, normal token layer behaviour)
- Cross-Layer Visibility (If you're on the "Token" layer, how do tokens on the "Object" layer behave)
- None (Tokens can't be seen on this layer, when focused on a different layer, or by token sight on another layer; useful for invisibility)
- All (Can see all tokens on this layer from all other layers, like current "Object" layer behaviour)
- Do the above but for light sources as well?
- Cross-layer mouseover - Yes/No (when mousing over a visible token on another layer, display it's name and statsheet? useful if you want players to see object names, but otherwise be unable to interact with object layer tokens)
- Cross-layer interaction - Yes/No (can we select, impersonate, and run macros from tokens on this layer when focused on a different layer?)
- Cross-layer movement - Yes/No (can we select and move tokens on this layer despite being focused on another layer?)
- Layer Focusing (can someone switch to this layer with the top right layer selector, selector invisible if no other layers able to be swapped to)
- GM (GMs only)
- With Ownership (WO) (If and only if an owned token is on this layer)
- Yes (Always yes)
The current "Token", "Object", "Hidden", and "Background" could be generalised to:
Layer | T. Visibility | XLayer T. Visibility | XLayer Mouseover | XLayer Interaction | XLayer Movement | Focusing |
---|---|---|---|---|---|---|
Token | All | All | N | N | N | Y |
Object | All | All | Y | Y | N | WO |
Hidden | GM | None | Y | Y | Y | GM |
Background | All | All | N | N | N | GM |
You could then do things like:
Layer | T. Visibility | XLayer T. Visibility | XLayer Mouseover | XLayer Interaction | XLayer Movement | Focusing |
---|---|---|---|---|---|---|
Invisible | Owned | None | N | N | N | WO |
Ethereal | All | None | N | N | N | WO |
Staging | GM | None | Y | Y | Y | GM |
Invisible Layer - you can see your own tokens, but no others. And tokens on this layer can't be seen from other layers. Ethereal Layer - you can see all tokens on this layer, but they can't be seen from other layers - so you need a token with visibility on this layer. Staging - much like hidden, but wouldn't conflict with existing macro/framework usage of the hidden layer.
And you can add/remove as many layers as you happen to need.