Space Invaders setup and fidelity notes
Space Invaders is registered in the project database and uses the existing ArcadeGame start, win, loss, and reset events. Open SpaceInvaders.tscn and run the current scene to play, or select the Space Invaders game definition in a cabinet scenario.
Controls and room configuration
- Enter or
arcade_start: start a fresh game, including during the attract/demo loop. - Left/right arrows or
arcade_left/arcade_right: move the laser base. - Space or
arcade_action_1: fire. Holding fire repeats when the previous shot finishes; only one player shot can exist at once. - Cabinet capabilities:
joystick_horizontal,button_1, andstart_button.
Select the scene root to configure Waves To Win (default 1; 0 means endless), Starting Lives (3), Bonus Life Score (1500; 0 disables), Color Overlay, and Sound Enabled. These are scene exports, not run_config overrides. Save the scene after changing them. Existing cabinet scenario assignments were not changed.
Winning the configured number of waves emits game_won. Invasion or loss of the last base emits game_lost. The loss screen returns to attract after five seconds; the room win screen stays visible. A reset returns to attract while keeping the session high score.
Included behavior
The game renders at 224 by 256 pixels, with nearest-neighbor scaling and integer enlargement whenever the available space permits. A screen-space overlay colors the upper band red and lower band green; sprites crossing a band change color at the band boundary. Black margins contain off-screen objects. Disable Color Overlay for monochrome.
There are 55 invaders in five rows. A scan moves one living invader per simulation tick, producing a ripple through the formation and a faster sweep as the population falls. Invaders alternate the two supplied poses on movement, reverse and descend at an edge, and destroy shield sections they overlap. Successive waves start lower. The last invader has a larger horizontal step.
Player shots, enemy shots, and invaders erode four shields. Shield holes affect collisions immediately. Projectiles advance in one-pixel collision substeps so they cannot skip thin remaining shield sections. Enemy fire comes from the lowest surviving invader in a column, with three separately animated shot types; one type aims its launch column toward the player. Opposing projectiles can collide.
The saucer crosses above the fleet, has a shot-count-based score, and displays its award when destroyed. The 15-entry score cycle includes 50, 100, 150, and 300. Invaders award 10, 20, or 30 by type. A single extra life is awarded at the configured score threshold.
Attract mode types the title and score table, includes the inverted-Y repair animation, shows a free-play start screen, then runs a silent gameplay demo. The demo uses the live game simulation but never starts a room run, changes the high score, or emits win/loss events. Start interrupts it and resets the board.
Supplied sound mapping
| File | Use |
|---|---|
| shoot.wav | Player shot |
| invaderkilled.wav | Invader destroyed |
| explosion.wav | Player base destroyed |
| fastinvader1.wav through fastinvader4.wav | Repeating four-note fleet march |
| ufo_lowpitch.wav | Repeating saucer flight sound |
| ufo_highpitch.wav | Saucer hit |
Audio is silent during attract/demo and stops on reset or game completion. The source sprite sheet and WAV files are copied unchanged from the supplied assets. White pixels are extracted into transparent sprite masks at runtime; those same masks are used for sprite hit detection.
Fidelity boundaries
This is a recreation, not ROM emulation. The current cabinet flow is one-player free play; SCORE<2> and CREDIT 00 are visual elements, with no coin accounting or alternating two-player game. There is no persistent high-score storage. Attract choreography and delays are approximated from the reference, and the extra attract skits are not all reproduced. Enemy reload timing and column selection approximate the original rather than reproduce every firing table and hardware interrupt quirk. Shield crater patterns are deterministic approximations. Ship movement, projectile speeds, the final-alien behavior, and sound cadence still benefit from side-by-side arcade tuning.
Reference visuals: supplied gameplay video. The first segment is Space Invaders; the video also contains other games. Fleet processing, alien scores, saucer scoring, and subsequent wave heights were informed by the annotated original program and technical analysis.
Validation and play checklist
Automated checks cover fleet count/ripple/descent, shot limits, shield holes, alien and saucer hits, projectile interception, player death/respawn, invasion, bonus life, wave progression, start/reset, demo event and score isolation, and database registration. They pass with Godot 4.6.1 Compatibility. The project remains configured for 4.7; test in that version before deployment. Desktop title and gameplay renders were inspected. A short uncapped desktop render benchmark completed without a game script error; it is not a Raspberry Pi performance guarantee. The sandbox reports certificate-store and shader-cache access errors during desktop validation.
Run tests/space_invaders/check_space_invaders.gd with Godot's --headless --path . --script options. render_preview.gd generates title/gameplay captures, and benchmark.gd runs a short desktop render check.
- Start during both the title animation and demo; confirm a fresh score, lives, and shields.
- Fire through a shield repeatedly; verify the shot eventually passes through the hole.
- Watch the fleet accelerate and descend as columns disappear.
- Check the four march sounds, firing, deaths, and both saucer sounds at cabinet volume.
- Complete a wave and verify the room event; set Waves To Win to 0 to check continued play.
- Lose the last life or allow invasion; confirm the room loss event and return to attract.
- Resize the game view and inspect equal pixel sizes, overlay bands, and black margins.