Skip to content

Repository files navigation

Arctron

Arctron

Build status License: MIT Latest release

The depths are alive, and they're coming for you. From the center of a shifting geometric arena, waves of enemies erupt outward, closing in with brutal speed. As the lone defender circling the rim, every second counts — track their movement, line up the shot, and cut them down before they break through. Survive one wave, and the arena reshapes itself, sharper and faster, daring you to keep up.

Arctron is a modern vector arcade shooter forged from the intensity and simplicity of classic coin-op games. Master the rhythm of movement and fire, carve out your score through precision under pressure, and hold the line against an assault that never stops climbing. Built with Tauri 2, React/TypeScript, and a high-performance Rust/WASM engine, Arctron delivers relentless arcade action to Android, Linux, Windows, macOS, and the Web.

▶ Play now in your browser

Desktop gameplay

Mobile gameplay

Contents

How to play

Enemies climb out of the tube's center along its lanes. Shoot them before they reach the rim — let too many through and you lose a life. Clear a level's kill quota to advance to the next (reshaped) tube.

Keyboard

Action Key
Move ◀ ▶ or A / D
Fire Space
Zap (screen-clear bomb) Shift
Pause P or Esc

Touch

Action Control
Move Trace an arc around the jog wheel
Fire Target-icon button
Zap ZAP button

Navigation

The start screen has three buttons: SETTINGS (difficulty, Daily Challenge, sound), ACHIEVEMENTS, and HELP. Tap or press fire anywhere else on the start screen to launch a run.

Pausing mid-run (P/Esc, or the header's pause icon) opens RESUME / MENU / QUIT, plus SETTINGS / ACHIEVEMENTS / HELP — reachable mid-run this way, not just from the start screen. MENU abandons the current run back to the start screen, QUIT closes the app (native builds only; a browser tab has no window for the app to close). On desktop, Settings and Help are also one click away directly from the header. On Android, the hardware/gesture back button follows the same hierarchy automatically: it closes whichever menu is open, then pauses an active run, then quits to the start screen, then exits the app.

Every level's tube is one of 12 shapes (circle, box, star, diamond, spike, triangle, hexagon, cross, gear, figure-eight, plus two extra-wide shapes reserved for landscape/desktop), cycling as you clear levels.

Enemies

Name Points Behavior
Talon 150 Climbs a lane, then hunts you along the rim.
Bulwark 100 Splits into two Talons if it reaches the rim unshot.
Lancer 50 Plants a permanent spike hazard in its lane while climbing, then sits at the rim as a stationary target.
Warden 250 Armored — takes two hits to destroy — then hunts like a Talon.
Strider 175 Shifts erratically between adjacent lanes while climbing, then hunts like a Talon once it reaches the rim.

Power-ups

Rare drops from direct kills (not zap kills). Double Fire and Bonus Zap are the most common; Score Surge less so; Shield uncommon; Extra Life rarest of all.

Name Effect
Double Fire Faster fire rate and a higher bullet cap for 6 seconds.
Bonus Zap +1 zap charge.
Score Surge An instant +500 point bonus.
Shield Grants a shield charge (if you don't already have one banked) — absorbs your next hit instead of costing a life.
Extra Life +1 life.

Scoring & tactics

  • Combo multiplier — chaining kills within ~2.5 seconds builds a streak; every 3 kills steps the multiplier up, capping at x5. Taking damage resets it. Zap kills don't build or break a combo.
  • Zap bank bonus — zap clears every enemy on screen instantly but is limited per level; any zaps left unused when you clear a level convert to bonus points instead of being discarded.
  • Energy / Shield — landing direct-fire kills (zap kills don't count) fills an Energy meter; once full, you bank one shield charge that absorbs your next hit instead of costing a life. Energy survives idle periods, but resets if you take a hit with no charge banked.
  • Difficulty changes enemy speed, spawn pacing, starting lives, and zap allotment (see below) — enemy composition itself doesn't change.

Game modes

Difficulty Speed Lives Zaps/level
Casual slower 4 3
Classic standard 3 2
Insane faster 2 1

Daily Challenge seeds every player with the same run for the day (always at Classic tuning), so scores are directly comparable — pick it from Settings.

Achievements

12 local, on-device milestones (no account or network needed) covering first kills, depth of run, combo mastery, clearing a level unscathed or without spending a zap, destroying Wardens, collecting power-ups, high score thresholds, Insane-difficulty survival, and Daily Challenge streaks. Open ACHIEVEMENTS from the start screen to see the full list — locked entries stay hidden until unlocked.

Building from source

Prerequisites

  • Node.js 20+ and npm
  • Rust (stable) via rustup, with the wasm32-unknown-unknown target:
    rustup target add wasm32-unknown-unknown
  • wasm-pack: cargo install wasm-pack
  • Tauri prerequisites for your OS (system webview libraries on Linux, etc.)
  • For an Android build specifically: Android Studio/SDK, an NDK, and rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
npm install

Recommended IDE setup: VS Code + Tauri + rust-analyzer.

Desktop (dev)

npm run tauri dev

Desktop (release build — Linux .deb/.rpm/AppImage, or whatever your OS produces)

npm run tauri build

Bundles land under src-tauri/target/release/bundle/.

Android

npx tauri android init      # first time only, sets up gen/android
npx tauri android build --target aarch64

Produces an APK/AAB under src-tauri/gen/android/app/build/outputs/. Install a debug build to a connected device with:

npx tauri android dev       # live-reload build + install, or:
adb install -r src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apk

Web (PWA)

npm run build       # outputs to dist/
npm run preview     # serve the production build locally

dist/ is a self-contained, installable PWA — deploy it to any static host.

Downloads

Web (PWA): chipcreates.github.io/arctron — no install required, playable directly, and installable as a PWA from the browser's own install prompt. Auto-deployed from main via .github/workflows/pages.yml.

Native builds: Latest release — Linux (.deb/.rpm/AppImage), Windows (NSIS .exe/MSI), macOS (universal .dmg), and Android (.apk/.aab). Cut via .github/workflows/release.yml on every v* tag push. The Android build is signed with the maintainer's release key; Windows/ macOS/Linux builds are unsigned, so expect an OS security prompt (SmartScreen, Gatekeeper, etc.) on first launch.

CI also builds every push to main per-platform as a downloadable workflow artifact (not attached to a Release) — see the Actions tab for the latest in-progress build.

Project layout

  • engine/ — the Rust game engine (tube.rs/entities.rs/game.rs/rng.rs are plain, natively-testable Rust; lib.rs is the only wasm-bindgen boundary). cargo test from inside engine/ runs the full unit-test suite.
  • src/ — the React/TypeScript frontend: canvas rendering, HUD/overlays, input, and the platform abstraction (storage/haptics/app-control) that splits Tauri-native vs. web behavior.
  • src-tauri/ — the Tauri shell (desktop + Android).
  • vortex.html — the original single-file prototype this port is built from.
  • PLAN.md / AGENTS.md — implementation plan and contributor/agent guidelines.
  • documents/ — the full architecture/stack/data-flow documentation system (see below).

Documentation

In-depth architecture, software stack, and data-flow documentation lives in documents/, organized with the Johnny Decimal system. Start at 00.01 Start Here — it's the master index linking to every document, including the system's high-level architecture diagram, the Rust engine's state machine and entity model, the full runtime/persistence data flows, and per-platform build notes.

License

MIT — see LICENSE.

About

A vector arcade tube shooter — Tempest-inspired, built with Tauri 2, React, and Rust/WASM. Play free in the browser.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages