Impossible Intents
Designing a "no" that happens in front of everyone
Company
Hidden Door
Role
Product design, UI, prototyping
Timeline
2023
Team
Only product designer
Collaborators
Game design, art direction, founders
Status
Shipped
Overview
When a player asked for the impossible, the story just ignored them
Hidden Door is a shared, AI-driven storytelling game, played live or asynchronously. Any player can type any action, including ones the world can't allow. When someone entered an impossible intent, like "I destroy the universe", the story engine didn't refuse. It ignored the input and generated something anyway, pulling everyone into a turn nobody chose.
“I tried to kick down the door but… the game just ignored it and now I'm talking to a munchkin instead?”
The player looked confused, tried the action again and got nowhere.
Playtesting kept surfacing it. Players expected the game to acknowledge what they said, or at least answer it. When the story moved on with something they hadn't chosen or done, it broke the promise the whole game rests on: player agency.
My role
I designed how an AI game says no
As the only product designer at Hidden Door, I created the UI and flows and prototyped the interactions in Figma. Our game designer set the strategy, and our art director made the art assets I designed with. Most often, my job was working out how complex, novel game mechanics shaped by AI should look and behave. This was one of those mechanics.
The question wasn't whether to block the action. It was how an AI system refuses an action while keeping people's trust and immersion intact.
Process
A refusal in a multiplayer game is social, not just functional
Being told no in front of other players is a different experience from being told privately. The strongest version protects the player's standing with the group, not only the integrity of the story.
I explored three directions across two axes: how gracefully the refusal reads, and how feasible it is to build.
Exploration
Three ways to say no
Lightweight block
Most feasible
The struck-through intent with an info icon. It meets the safety need, but it hides the why and reads colder.
In-character refusal
My recommendation
The narrator denies the action in voice, strikes the impossible intent and redirects with humor, keeping the moment inside the story instead of breaking it.
Private "why"
Future state
The narrator delivers the reason as a private message, so a player learns the limit without being corrected in front of the group.
The in-character refusal in the full story screen
Outcome
The lightest version shipped, and the richer ones became the path forward
I presented the range and the trade-offs to the founders. We shipped the lightweight block, and I documented the in-character and private-message versions as the path forward.
In the next round of playtests, the moment stopped tripping people up. Players didn't need to see their impossible action play out. They needed to see that the game had heard it and struck it from the record.
Reflection
What I learned
Sometimes the best feedback is silence
The struck-through intent didn't earn praise in playtesting. It just stopped disrupting anyone, and that's how I knew it worked: a fix for frustration succeeds when people stop running into the problem.
Fixing the loudest problem lets you hear the next one
I'd have loved to take this further. But once players stopped getting stuck here, the next round of playtests could surface the bigger questions: how to make the game board compelling, how multiplayer actions should work, and how players can truly collaborate in a game that might be asynchronous.
Next case study
CanWe