How to Make a Twin-Stick Shooter with AI

Build a top-down arena that checks independent movement, aim, and firing in two shots.

Seele Editorial TeamUpdated November 11, 2026

Start your twin-stick shooter with one move that points away from the shot. Put the player on a floor tile that is about to activate and place a target off to the side. The player steps clear with one control and aims at the target with another. The shot should come from the new position, even when the player is moving in a different direction.

The fictional test bay below gives you two shots and a short walk to the exit. Use it to check that movement, aim, and firing stay separate before adding moving enemies or faster controls.

A technician stands between two target robots and a marked floor tile in an industrial bay
Give the player room to step away from the marked floor and keep a target visible to the side.

Give movement, aim, and firing separate inputs

Use a five-by-five grid. Count columns from zero to four going east, and rows from zero to four going south. Start the technician at (2, 2) with one health. Put one fixed target at (4, 1) and another at (1, 4). Set the exit at (1, 0) and keep it locked until both targets are gone.

Sample a move direction, an aim direction, and a Fire input each debug tick. For this trial, each direction can be neutral or one of the four cardinal directions. You can use two keyboard direction clusters to check the rules first. If you add an analog controller, map its movement and aim separately and verify those inputs on the device you intend to support.

A technician has a short floor direction marker and a separate aim line toward a robot
Give movement and aim distinct cues. The player should be able to tell where the character is going and where a shot will travel.
PhaseWhat to applyWhat to verify
MoveStep one legal tile or stay. An out-of-bounds move leaves the position unchanged.The aim input cannot move the player.
Aim and fireWith Fire active and a non-neutral aim, trace one shot from the resolved tile to the first live target on that line or the board edge.The shot uses aim independently of the movement direction. Neutral aim produces no shot.
Check the floor and exitAfter the shot, check the tile under the player. On an active tile, lose. Otherwise, crossing into the unlocked exit wins.Hitting a target does not save the player from the floor hazard.

Use a warning marker on tile (2, 2) for tick 1 and tile (2, 1) for tick 2. Those are the two hazard checks in the exercise. Give each target one hit of durability. Keep reloading and enemy attacks out of this room so you can tell whether a miss came from aim or shot origin.

Walk the two simultaneous-input shots

TickMove, aim, and FireExpected outcome
1North, east, Fire activeStep to (2, 1), clear of the active tile. The eastward shot hits the robot at (4, 1).
2West, south, Fire activeStep to (1, 1), clear of the second active tile. The southward shot hits the robot at (1, 4). The exit unlocks.
3North, neutral, Fire inactiveReach the unlocked exit at (1, 0) and win.
The technician fires toward a robot from beside a marked amber floor tile
Draw the firing cue from the player’s new tile. The marked floor shows the position they needed to leave.

The first move changes the row from two to one, so an eastward shot lines up with the first target. The second move changes the column from two to one, so a southward shot lines up with the other. In both cases the movement and aim inputs must survive the same tick. If firing follows the last movement direction, neither shot takes the intended line.

Ask AI for one arena and a step control

SEELE’s AI game maker offers a starting point for a small game with one loop to check. Give it the exact tile and input rules along with the visual setting. Ask for a debug view that shows where each shot starts, so you can tell whether a miss came from aim or action order.

Build a top-down browser twin-stick shooter test bay on a 5-by-5
grid. Use x=0–4 eastward and y=0–4 southward. Start at (2,2) with
one health. Put one-hit targets at (4,1) and (1,4). Put the exit
at (1,0), locked until both targets are gone.

Read independent move, aim, and Fire values each debug tick. Move
and aim can each be neutral or one cardinal direction. Apply one
legal movement step first. Ignore steps outside the grid. Do not
copy the movement direction into aim. With Fire active and aim
non-neutral, trace one shot from the post-move tile. Hit the first
live target in that direction or let the shot leave the board.
Neutral aim produces no shot, even with Fire active.

After the shot, check the floor tile under the player. Tile (2,2)
is active on tick 1 and tile (2,1) on tick 2. Standing on either
active tile at its check fails the attempt. After checking safety,
win on the unlocked exit. No further hazards or target movement.

Show the move and aim values, the shot's start and end, and the
outcome. Add a one-step debug control. Restart restores the player,
health, targets, exit, and initial tick.

Check the inputs separately before running the trace. From a safe test tile, aim with no movement and confirm the position stays fixed. Then hold Fire with aim neutral while moving and confirm there is no shot. Run both worked shots, then swap move and aim on the first tick to verify that the expected hit disappears. Try staying on the first active tile, and check that Restart restores the original targets and locked exit. The guide to checking an AI game in small steps shows how to request a focused fix after a failed check.

Update the preview after the move

Suppose the aim preview uses the tile where the player started the tick. On tick 1 it would point east from (2, 2), along the wrong row. On tick 2 it would point south from (2, 1), down the wrong column. The actual shot already uses the destination tile, so the preview can disagree even when firing works.

Change only the preview origin to the resolved position. In the worksheet, the old preview matches neither shot and the revised preview matches both. The target hits and hazard checks stay the same. In a built version, compare the preview and shot together during fast direction changes before deciding whether the cue reads clearly.

Keep the first arena small enough to diagnose

Build the room around one simultaneous move and shot, then add the second direction pair. Check both the ray and the player’s position before introducing moving threats. Start your twin-stick prototype with SEELE’s AI game maker and use the three-tick trace to see whether the controls stay independent.

Frequently asked questions

Should I test the raw stick values or normalized directions first?

Start with normalized directions, such as north or neutral, so you can repeat the same input on any test setup. Check raw stick values when you add a device adapter. Verify how it turns small movements near the center into neutral without affecting the other stick.

What should happen when the aim returns to neutral?

In this room, hide the aim cue and skip the shot even when Fire is active. That gives you a clear check that aim is separate from movement. If you want aim to persist later, give it its own rule and test how the player clears it.

Do I need visible projectiles for the first shooting test?

A straight trace is enough to verify the shot’s origin and direction. Give it a brief line or hit cue so the player can see what happened. If you later add travel time, test it separately because a target can move after a shot has launched.

When should I add moving threats?

Add one after the player can move and aim independently and explain which direction a shot will take. Give the threat one predictable route at first. That makes it easier to tell whether a missed shot came from a moving target or from the controls.

SEELE AI

Turn this guide into a playable build.

Start with a focused brief, then iterate in the Seele AI Workspace.

Start creating