Input Buffering Explained for Non-Fighting Games: Platformers, Action RPGs, and Roguelites

The jump button should feel like a promise, not a courtroom negotiation.

If your platformer, action RPG, or roguelite feels “almost right” but players still miss jumps, drop combos, or shout at the dodge button like it owes them rent, input buffering may be the invisible fix. Today, in about 15 minutes, you’ll understand what it does, when it helps, when it hurts, and how to tune it without turning your game into molasses with a sword. This is a practical guide for designers, developers, producers, and curious players who want responsive controls that feel fair.

What Input Buffering Really Means

Input buffering is a small mercy system. It remembers a player’s input for a short window, then performs the action when the character is allowed to act.

Instead of saying, “You pressed jump four frames too early, begone,” the game says, “I heard you. I’ll jump the moment your feet legally touch the ground.”

That is the whole spell. Store the input. Check whether it is still valid. Execute it when the character state allows it.

I once tested a tiny prototype where the jump worked only if pressed on the exact landing frame. It was not a platformer. It was a tax audit wearing sneakers. Adding a small buffer made the same level feel less hostile without changing a single platform.

Input buffering is not input lag

Input lag means the player presses a button and the game responds late because of delay in hardware, engine timing, display latency, or processing.

Input buffering is intentional memory. It does not make the game slower when tuned well. It makes the game more forgiving at the borders between states.

A bad buffer can feel like lag. A good buffer feels like the game has decent manners.

Input buffering is not auto-play

Buffering does not choose actions for the player. It simply accepts an action the player already asked for.

The difference matters. A buffered jump rewards intent. An auto-jump invents intent. Players can smell that difference from three rooms away.

Takeaway: Input buffering is a short-term memory system for player intent.
  • It stores an input for a limited number of frames or milliseconds.
  • It executes only when the action becomes valid.
  • It should improve fairness, not replace skill.

Apply in 60 seconds: Pick one frustrating action in your game and ask, “Was the player early, or were they wrong?”

Why Non-Fighting Games Need It

Fighting games made input buffers famous, but they are not the only genre with tight timing. Platformers, action RPGs, roguelites, metroidvanias, character action games, and survival games all contain tiny timing gates.

The player lands. The attack animation ends. The dodge cooldown clears. The ladder grab becomes available. The weapon swap finishes. The roll exits recovery. The game says, “Now.” The human hand says, “I pressed one blink ago.”

That blink is where input buffering lives.

The player experiences intent, not frames

Most players do not think in animation states. They think in intention.

“I want to jump as I land.”

“I want to dodge after this swing.”

“I want to heal the second this boss stops turning me into soup.”

When the game ignores that intent, the player often blames the controls, even if the simulation is technically correct. Technical correctness is a cold sandwich. Useful, but rarely beloved.

Non-fighting games have messy states

In a fighting game, input timing often sits inside clearly defined move data. In a platformer or action RPG, the state graph can be more slippery.

A player may be falling, coyote-time eligible, attacking, landing, sliding, grabbing a ledge, touching a moving platform, and leaving a hit-stun state inside the same second. That is not a state machine. That is a dinner party with knives.

Buffering gives the system a sane way to honor player input without letting every action interrupt every other action.

The best buffer is invisible

Players rarely praise input buffering directly. They say the game feels crisp, fair, smooth, readable, or “snappy.”

When buffering is missing, they say the jump is broken, the dodge is fake, the attack chain drops inputs, or the character feels sticky.

That is the designer’s quiet bargain: do careful work so nobody has to name it.

Who This Is For, And Who Should Not Overuse It

This guide is for small studios, solo developers, technical designers, gameplay programmers, UX-minded producers, and advanced players who want vocabulary for why controls feel fair or sour.

It is also for game critics and content creators. Explaining “this game drops inputs during recovery” is more useful than saying, “The vibes are pudding.” Though, to be fair, pudding has had a strong year.

This is for you if...

  • You are making a platformer with jumps, wall jumps, dashes, ledge grabs, or ladders.
  • You are making an action RPG with attack chains, dodges, parries, heals, spells, or weapon swaps.
  • You are making a roguelite where combat, hazards, pickups, and enemies overlap constantly.
  • You have players saying, “I pressed it,” and your logs say, “They did.”
  • Your game feels harder than intended because valid intent gets discarded.

This is not for you if...

  • You want every action to fire instantly regardless of state rules.
  • You are trying to hide unreadable animation, unclear cooldowns, or poor enemy telegraphs with forgiveness alone.
  • You want a single universal buffer value for every action.
  • Your game’s identity depends on extremely strict, simulation-heavy timing with no forgiveness by design.

I once watched a team raise every buffer to a giant value after one playtest. The game became “helpful” in the way an overexcited dog is helpful with wet laundry. Every delayed attack fired, every queued dodge came out late, and players felt haunted by their own past inputs.

Eligibility Checklist: Should This Action Have a Buffer?

  • High player intent: The action is commonly pressed just before it becomes valid.
  • Clear state gate: The action is blocked by landing, recovery, cooldown, hit-stun, or animation end.
  • Low abuse risk: Buffering does not let the player bypass the core challenge.
  • Readable result: When the action fires later, the player still understands why.
  • Cancel rule exists: The input expires or is cleared when context changes.

Rule of thumb: If a skilled player often presses it slightly early on purpose, test a buffer.

The Simple Model: Press, Store, Release

A clean input buffer does three jobs. It records the press, keeps it alive briefly, and spends it only when the action becomes legal.

Imagine a coffee ticket at a busy café. You order now. The barista makes the drink when the machine is free. But if you leave for 20 minutes, the ticket should not summon a haunted latte. Inputs need expiration dates too.

Step 1: Press

The player presses a button or moves a stick past a threshold. The input system records what happened and when it happened.

For example:

  • Jump pressed at 12.433 seconds.
  • Dodge pressed at frame 8421.
  • Light attack pressed during heavy attack recovery.

Step 2: Store

The game stores the input in a buffer for a short period. This may be measured in milliseconds or frames.

At 60 frames per second, 6 frames is about 100 milliseconds. At 120 frames per second, 12 frames is also about 100 milliseconds. That distinction matters if you do not want the game’s feel to mutate on high-refresh systems like a goblin with a keyboard.

Step 3: Release

Each update, the game checks whether the buffered input can execute.

If yes, it executes and clears the buffer. If no, it keeps waiting until the buffer expires. If the context changes, it may clear early.

Show me the nerdy details

A basic buffer can store action type, press time, priority, consuming rule, and context tags. For example, a jump input may remain valid for 80 to 150 milliseconds while airborne near the ground, but it should be cleared if the player enters hit-stun, opens a menu, grabs a ladder, or triggers a cutscene. A dodge input during attack recovery may be allowed only during specific cancel frames, while a heal input may wait until recovery ends but expire quickly if the player starts another action. In engines with variable frame rate, time-based expiration is often safer than fixed frame counts. In deterministic simulations or rollback netcode contexts, frame-based rules may be easier to reproduce consistently.

Visual Guide: The Input Buffer Loop

1. Player Presses

Record the action, time, and current state.

2. Game Stores

Keep the input alive for a small window.

3. State Opens

Landing, recovery end, cooldown, or cancel frame becomes valid.

4. Action Fires

Execute, consume, and clear the input.

Platformer Buffering That Saves Jumps

Platformers are where input buffering earns its little cape.

The classic case is jump buffering. The player presses jump a few frames before landing. Without buffering, nothing happens. With buffering, the character jumps on landing.

This single feature can turn a brittle platformer into a generous one without making it easy. The player still needs aim, timing, rhythm, and nerve. The game simply stops pretending human thumbs are lab instruments.

Jump buffering

Jump buffering stores a jump press shortly before the character lands.

Common starting values:

  • Precision platformer: 50 to 80 milliseconds.
  • General action platformer: 80 to 120 milliseconds.
  • Accessible or casual platformer: 120 to 180 milliseconds.

These are not sacred numbers. They are tuning pegs. Twist gently. Listen carefully.

Coyote time and buffering are siblings, not twins

Coyote time lets the player jump shortly after leaving a ledge. Jump buffering lets the player jump shortly before landing.

One forgives being late. The other forgives being early. Together, they make platforming feel more human.

A player once told me, “This jump finally feels like my fault when I miss.” That sentence is gold. It means the forgiveness system is doing its work without stealing accountability.

Ledge grabs and wall jumps

Ledge grabs can also use buffering. If the player presses up, jump, or grab just before entering ledge range, a small buffer can make traversal feel cleaner.

But be careful. If ledge grab buffering is too eager, players may snap to ledges they were trying to pass. The game becomes a magnet with opinions.

Wall jumps need even more caution. Buffering a wall jump can help during fast movement, but it can also cause accidental rebounds when players are trying to slide, cling, or fall.

Comparison Table: Platformer Timing Helpers

Feature Forgives Best Use Danger
Jump buffer Pressing early Landing jumps Unwanted chained jumps
Coyote time Pressing late Ledge exits Floaty edge behavior
Ledge buffer Near-miss grab input Fast traversal Sticky ledges
Wall-jump buffer Early wall input High-speed wall routes Accidental bounce

For related feel work, your internal discussion of frame pacing versus FPS pairs nicely with input buffering. Smooth frame delivery does not replace good input logic, but it keeps the control conversation honest.

Action RPG Buffering for Attacks, Dodges, and Heals

Action RPGs are dangerous territory because every button has emotional weight. Attack means confidence. Dodge means panic wearing shoes. Heal means “please, I have learned humility.”

Input buffering can help all three, but each needs different rules.

Attack buffering

Attack buffering lets the next attack in a chain come out when the current attack reaches its allowed follow-up window.

This is useful when a player commits to a combo rhythm. If the system demands frame-perfect follow-up presses, the combat may feel stiff instead of skillful.

But long attack buffers can make combat feel spammy. The player taps attack three times, regrets it, tries to dodge, and the character keeps swinging like a chandelier in a storm.

Dodge buffering

Dodge buffering is delicate because dodge is often defensive. If the player presses dodge during recovery, should the dodge happen as soon as possible?

Usually, yes, but not always.

If your combat is commitment-heavy, a dodge buffer after a greedy attack can be fair only during late recovery. If dodge always queues from the first frame of any attack, the game may erase the cost of commitment.

That can flatten the combat. The sword has no teeth if every mistake comes with a receipt and refund.

Heal and item buffering

Healing inputs should usually have short buffers, strong context checks, and clear cancellation behavior.

Players often mash heal under stress. If a heal fires one second later after danger has changed, it can feel like betrayal. A stale heal is the gameplay equivalent of sending a heartfelt text to the wrong group chat.

Priority rules matter

When multiple inputs are buffered, the game needs priority rules.

Common priority choices:

  • Dodge beats attack when survival responsiveness is core to the game.
  • Attack chain beats neutral action when combo rhythm is core.
  • Parry beats dodge when precision defense is the advanced skill path.
  • Menu or pause clears combat buffers to prevent surprise actions after UI closes.
Takeaway: Action RPG buffering should protect intent without erasing commitment.
  • Attack buffers support rhythm.
  • Dodge buffers support survival.
  • Heal buffers need short expiration and strict context checks.

Apply in 60 seconds: Write your action priority order on one line: dodge, attack, parry, item, interact.

💡 Read the official game accessibility guidance

Roguelite Buffering Under Chaos

Roguelites often combine high speed, procedural rooms, pickups, hazards, enemy bullets, cooldowns, temporary buffs, and permanent consequences. That is a lot of soup for one spoon.

Input buffering helps when the screen gets loud, but it must avoid stealing agency.

Short buffers fit high replay games

In roguelites, players repeat actions thousands of times. A small annoyance becomes a stone in the shoe. By run twenty, it is not a stone. It is geology.

Short buffers for dash, interact, weapon swap, reload, or ability use can reduce friction across repeated runs.

Context changes happen fast

The danger in roguelites is stale inputs. The player presses interact near a chest, moves away, dodges a bullet, and suddenly the buffered interact opens something later. Bad. The player did not mean that anymore.

For roguelites, buffers should clear aggressively when context changes:

  • The player leaves interact range.
  • The target dies or disappears.
  • The player enters hit-stun.
  • The room transitions.
  • The action would now target a different object.

Procedural content needs consistent rules

If input buffering works in one room but not another, players may blame the procedural system or themselves. Neither is ideal.

Create global rules for common actions, then add local exceptions only when needed. “Every shrine interaction buffers for 100 milliseconds” is easier to learn than “this shrine does, unless it spawned near a door, unless the moon is rude.”

Your article on preventing meta tyranny connects here too. Good buffering keeps skill expression broad. Bad buffering can push players toward only the safest inputs, safest builds, and safest routes.

Timing Values That Feel Human

Input buffering is usually tuned in milliseconds or frames. The right number depends on game speed, animation style, input device, player expectation, and genre promise.

Here is the trick: the player does not perceive your buffer value alone. They perceive buffer plus animation lockout plus frame pacing plus input device plus visual feedback. The number is part of a choir, not a solo violin.

Starting ranges by action type

Tuning Table: Sensible Starting Buffer Windows

Action Starting Window Why It Works
Jump on landing 80–120 ms Catches early landing intent.
Dash or dodge 60–120 ms Supports defense without huge stale inputs.
Combo attack 100–200 ms Supports rhythm and planned chaining.
Parry 0–60 ms Keeps precision identity intact.
Heal or item 50–100 ms Prevents late accidental consumption.
Interact 50–150 ms Helps pickups and doors, but must clear on range exit.

Mini calculator: convert frames to milliseconds

Use this tiny table when discussing timing with designers, programmers, QA testers, and producers. It prevents the classic meeting where everyone says “six frames” and quietly means four different feelings.

Mini Calculator: Frame Window to Time

Frame Rate 3 Frames 6 Frames 10 Frames
30 FPS 100 ms 200 ms 333 ms
60 FPS 50 ms 100 ms 167 ms
120 FPS 25 ms 50 ms 83 ms

Formula: milliseconds = frames ÷ frame rate × 1000.

Use action-specific values

A jump buffer, dodge buffer, attack buffer, and interact buffer should not all use the same value by default.

Each action has different stakes. Jumping early is often harmless. Healing late can waste a precious item. Dodging late can move the player into danger. Attacking late can lock the player into a bad commitment.

I once inherited a project with one global input buffer called “MercyTime.” Lovely name. Terrible idea. It applied to jump, attack, interact, and dialogue skip. The result was a character who could accidentally talk to an NPC after a boss dodge. Poetry, yes. Good UX, no.

Common Mistakes That Make Controls Feel Wrong

Input buffering fails in predictable ways. Most problems come from buffers that last too long, clear too late, ignore priority, or hide deeper feedback issues.

The hard part is that a bad buffer does not always announce itself. It whispers through player complaints: “sticky,” “floaty,” “unresponsive,” “slippery,” “I swear I pressed dodge.”

Mistake 1: Making every buffer too long

A long buffer can make the character act after the player has changed their mind.

This is especially bad for dodges, heals, attacks, and interactions. The longer the buffer, the more likely the game performs an old wish in a new context.

Mistake 2: Not clearing stale inputs

Buffers should clear when the world changes enough that the original input no longer makes sense.

Clear a buffered interact when the target changes. Clear a buffered jump when entering hit-stun. Clear a buffered attack when opening a menu. Clear a buffered heal when the item is unavailable.

Stale inputs are ghosts. Cute in folklore, dreadful in combat.

Mistake 3: Buffering hidden actions with no feedback

If an input is stored, the player should usually receive some feedback or at least get a predictable result quickly.

For example, if a dash is buffered during recovery, the animation should make it clear why the dash is not immediate. Recovery poses, sound cues, cooldown UI, and animation readability all help.

Your piece on readable combat VFX is a natural companion here. A forgiving input system still needs readable enemy attacks, player recovery, and hit confirmation.

Mistake 4: Using buffering to cover bad animation timing

If the attack animation visually ends but the character remains locked for 300 milliseconds, players will press the next action and feel ignored.

You can buffer that input, but the deeper issue is visual honesty. Animation, hitboxes, hurtboxes, cooldowns, and control return should agree as much as possible.

Mistake 5: Letting lower-priority inputs hijack survival

If a buffered light attack fires before a defensive dodge, the player may feel trapped by their own button press.

That can be acceptable in commitment-heavy games, but it must be consistent and readable. Otherwise, the player experiences it as a dropped dodge, not a meaningful mistake.

Takeaway: Bad buffering feels less like help and more like delayed possession.
  • Keep buffers short enough to match active intent.
  • Clear inputs when target, state, or context changes.
  • Use priority rules so old attacks do not steal urgent defense.

Apply in 60 seconds: Add one debug line showing the age of the currently buffered input.

Testing and Tuning With Real Players

You cannot tune input buffering only by staring at code. You need hands, habits, panic, impatience, and the strange little rituals players develop around buttons.

One tester will tap jump like a pianist. Another will hold it like a doorbell. A third will mash dodge with the solemn conviction of a person filing insurance paperwork during a dragon attack.

Record input logs

Log these events during playtests:

  • Input pressed time.
  • Current character state.
  • Whether input was accepted, buffered, ignored, or expired.
  • Execution time if buffered.
  • Input age at execution.
  • Reason for clearing if discarded.

When a tester says, “The game ate my input,” your log can tell you whether the input was missing, buffered too briefly, blocked by state, overwritten by another input, or executed late.

Watch for three complaint types

Risk Scorecard: What Player Complaints Usually Mean

Complaint Likely Cause Buffer Fix
“It ignored me.” No buffer or too short Add or slightly extend buffer.
“It acted too late.” Buffer too long or poor clearing Shorten and clear on context change.
“It did the wrong thing.” Priority conflict or target shift Add priority and target validation.
“It feels mushy.” Animation, frame pacing, or long recovery Check more than the buffer.

A/B test carefully

Try values in small steps. For a jump buffer, test 60, 90, 120, and 150 milliseconds. For dodge, test 50, 80, and 110 milliseconds. For attacks, test by weapon type or animation family.

Do not ask only, “Which feels best?” Ask players what happened when they failed.

If they can explain their failure clearly, your system is readable. If they shrug and blame the controller, the smoke alarm is ringing.

Use slow-motion review

Record test footage with input display. Slow it down. Watch when the player pressed, when the character became eligible, and when the action fired.

This removes argument from the room. It also saves friendships. Few things age faster than four developers debating whether someone “really pressed jump.”

Accessibility, Fairness, and Player Trust

Input buffering is not only about difficulty. It is also about human variation.

Players have different controllers, displays, motor timing, reaction speed, fatigue levels, and comfort with genre conventions. The International Game Developers Association and Game Accessibility Guidelines both encourage thinking about control demands as part of player access. The W3C’s work on accessibility also reminds designers that interaction timing can create barriers when systems are too strict.

That does not mean every game must become easy. It means difficulty should come from designed challenges, not accidental rejection of valid intent.

Fairness means the rules match the fantasy

If your game promises surgical precision, a smaller buffer may fit. If it promises flowing action, a larger buffer may fit. If it promises tactical commitment, buffers should support deliberate choices while preserving consequences.

A cozy platformer and a brutal boss rush should not share the same input philosophy. One is a warm kitchen. The other is a knife drawer with music.

Options can help, but defaults matter

You can expose control assistance options, such as input leniency, hold-to-repeat actions, or alternate control modes.

But most players never visit every settings page. Your default tuning carries the first impression.

If your default controls feel harsh, many players will leave before discovering the mercy switch hiding under “Advanced Gameplay Behavior.” That menu title sounds like a cabinet where tax forms go to molt.

Trust is built at failure edges

Players forgive hard games when failure feels legible. They resent games when the controls feel inconsistent.

Input buffering helps create a cleaner border between “I failed” and “the game ignored me.” That border is where trust grows.

Takeaway: Good buffering turns difficulty into a readable contract.
  • Use stricter buffers for precision identity.
  • Use gentler buffers for flow, traversal, and repeated actions.
  • Offer options when timing strictness blocks access.

Apply in 60 seconds: Write one sentence defining what your game’s controls should feel like under pressure.

💡 Read the official game accessibility resources

When to Seek Help From a Systems Designer

Input buffering sounds small until it touches animation canceling, cooldowns, combat priority, state machines, accessibility, QA tooling, and player psychology. Then it becomes a little octopus in a blazer.

You do not always need a specialist. But some problems deserve experienced eyes.

Seek help when complaints conflict

If half your testers say the controls ignore inputs and half say actions happen too late, your buffer may not be the only issue.

You may have animation mismatch, frame pacing problems, platform-specific latency, unclear UI, or inconsistent state rules.

Seek help when your state machine has become folklore

If nobody on the team can explain which actions cancel which other actions, the input buffer will inherit the confusion.

Before tuning buffer values, map the action states. Draw idle, move, jump, fall, land, attack, recovery, dodge, hit-stun, interact, menu, and death. Then mark which buffered inputs each state accepts.

Yes, death should clear the buffer. I mention this because somewhere, in a build folder, a ghost is still trying to reload.

Seek help before late production panic

Input feel should be tested early. If you wait until content lock, every change becomes risky because enemies, levels, animations, and tutorials have already grown around the old behavior.

For game teams thinking beyond feel and into production planning, game design document examples can help turn input rules into something future teammates can actually find.

Decision Card: Fix It Yourself or Bring Help?

Fix it yourself if the issue affects one action, has clear logs, and testers agree on the problem.

Bring in a systems designer if multiple actions conflict, priority rules are unclear, or tuning one buffer breaks three other systems.

Bring in gameplay QA if you need repeatable test cases across devices, frame rates, controllers, and difficulty modes.

Bring in accessibility review if timing strictness is central to the game and you want optional assistance without breaking identity.

Short Story: The Door That Remembered Too Much

In one early action roguelite build, the team added an interact buffer to make pickups feel smoother. It worked beautifully for coins, keys, and shrines. Then testers reached a room with a locked door beside a healing fountain. During combat, one player mashed interact near the fountain, dodged away, killed the last enemy, and watched the buffered input open the door instead. The room transition began before they healed. Everyone laughed, then the laughter made a small funeral procession for the run. The fix was not removing the buffer. The fix was target validation. If the buffered input was created for the fountain, it could only fire on that same fountain. If the player left range, the input expired. The lesson was simple: a buffer should remember intent, not merely a button.

💡 Read the official accessibility fundamentals guidance

FAQ

What is input buffering in games?

Input buffering is a system that stores a player’s button press for a short time, then performs the action when it becomes valid. For example, a platformer may remember a jump press just before landing and jump on the first valid landing frame.

Is input buffering the same as input lag?

No. Input lag is unwanted delay between pressing a button and seeing a response. Input buffering is intentional short-term input memory. A well-tuned buffer should make the game feel more responsive, not slower.

Why do platformers use jump buffering?

Platformers use jump buffering because players often press jump slightly before landing. Without a buffer, the game ignores that early press. With a small buffer, the jump happens on landing, which makes movement feel fairer and more fluid.

How much input buffer should a game have?

Many non-fighting games start around 50 to 150 milliseconds depending on the action. Jumping may tolerate a slightly larger buffer. Parrying may need a tiny buffer or none. Healing and item use usually need short buffers to avoid accidental late actions.

Can input buffering make a game too easy?

Yes, if it is too generous or attached to the wrong actions. Buffering should preserve player intent, not remove decision cost. A dodge buffer that activates after every bad attack can weaken commitment-based combat, while a small jump buffer may simply reduce frustration.

What actions should not be heavily buffered?

Actions with high regret risk should not have long buffers. These include healing, item consumption, committing to long attacks, interacting with doors, confirming purchases, and anything that changes the player’s route or resources.

How do I know if my game is dropping inputs?

Add input logs and test with an input display. Record when the player pressed, what state the character was in, whether the input was buffered, and why it expired. This turns vague complaints into useful evidence.

Should input buffers be measured in frames or milliseconds?

Either can work, but milliseconds are often clearer across different frame rates. Frame-based values can change feel across 30, 60, and 120 FPS if not handled carefully. Deterministic systems may still prefer frame-based rules for consistency.

Does input buffering matter for roguelites?

Yes. Roguelites repeat actions constantly under pressure. Small buffers for dash, attack, interact, and ability use can reduce friction, but stale inputs must clear quickly when targets, rooms, or combat states change.

What is the biggest input buffering mistake?

The biggest mistake is letting old inputs fire in a new context. If the player pressed interact near a chest, that input should not later open a door. Good buffers remember intent, target, timing, and validity.

Conclusion: Make the Button Feel Remembered

The opening problem was simple: the player pressed the button, but the game did not seem to care.

Input buffering is how a game listens at the edges. Before landing. During recovery. Just before a cooldown clears. In the tiny human gap between intention and permission.

Used well, it does not make a platformer soft, an action RPG sloppy, or a roguelite automatic. It makes the rules feel honest. It lets failure come from choices, timing, positioning, and risk, not from a system that discards reasonable intent like an unread memo.

Your next 15-minute step: choose one action in your game, such as jump, dodge, attack, heal, or interact. Add a temporary debug display showing pressed, buffered, executed, expired, and cleared. Then play one hard room and watch what your controls are really saying back to the player.

Last reviewed: 2026-05