Releases: ChrisSc/contact
CONTACT v1.0.0-FINAL
CONTACT v1.0.0-FINAL — 3D Naval Combat
Browser-based 3D Battleship variant. Two players command submarine fleets hidden in a 7×7×7 volumetric grid, firing torpedoes and deploying earned abilities to locate and destroy enemy vessels.
Highlights
- Hot-seat local multiplayer + VS AI mode (Claude Opus 4.6)
- 7×7×7 volumetric Three.js cube with custom orbit controls
- 12 deployable perks (sonar, drones, depth charges, decoys, jammers, and more)
- Synthesized Tone.js audio — no sample files
- Mobile portrait-first responsive layout
- Single-file HTML build (
npm run build:single) - Full JSONL observability logging with battle reports
- Docker-ready (nginx:alpine on port 8080)
Key recent changes
- JSONL log filtering
- Cost/contact, cost/sink, and G-SONAR tracking in battle reports
- Error rate metrics, game mode/model logging
- Opt-in API key browser storage
- Mobile portrait layout and audio overhaul
- Consolidated tool palettes, economy rebalance
v0.7.2 — Mobile Portrait Layout + Audio Overhaul
Mobile Portrait Layout
- Full responsive mobile layout via
mobile.css(portrait breakpoint at 768px) - Setup screen: horizontal scrolling ship roster, stacked tool palette, centered 3D cube
- Combat screen: merged tab strip, bottom-stacked fleet panels, full-width END TURN, full-screen perk store
- Touch-optimized targets (44px minimum), CRT effects lightened for mobile performance
- Portrait-aware camera FOV and responsive orbit centering
Audio Synthesis Overhaul
- All 14 SFX rewritten with richer multi-layer Tone.js synthesis
- Cinema-authentic sonar ping (1500 Hz + reverb + delay echo)
- Click...BOOM depth charge timing, 5-layer catastrophic sunk destruction
- Ambient: hull thermal creaks, distant biological sounds, pink noise texture
- Ambient engine starts on combat mount instead of first player action
Bug Fixes
- Sunk counter shows /7 (fleet size) instead of hardcoded /5
- Action slot checkmarks display correctly after perk consumption
- Fleet panel titles colored amber to match CR/STORE
- Desktop status message repositioned above tool palette
- Cube centering responsive per orientation
v0.7.1
Changes
- Streamlined tool palette: Consolidated 3 scattered UI panels (view modes, depth selector, axis selector) into a single
ToolPalettecomponent at bottom-center. Combat: 2 rows (VIEW/DEPTH). Deployment: 3 rows (VIEW/DEPTH/AXIS). - Improved layout scaling: Repositioned status messages, hints, and fleet panels to prevent overlap and scale better across browser sizes.
- Better searched cell visibility: Brightened wireframes for miss, drone-negative, and sonar-negative cells for readability in well-lit rooms.
- Cleaned up old CSS: Removed scattered
.setup-screen__axis-*,.setup-screen__mode-*,.setup-screen__depth-*,.combat-screen__mode-*,.combat-screen__depth-*styles. - 17 new ToolPalette unit tests; 491 total tests passing.
v0.7.0 — Human vs AI
v0.7.0 — Human vs AI
Highlights
CONTACT now supports Human vs AI mode, powered by Claude. Challenge an AI opponent that reasons about 3D naval tactics in real time using the Anthropic API.
New Features
- Human vs AI game mode — Select "AI" on the title screen, enter your Anthropic API key, and play against Claude (
claude-sonnet-4-6) - AI strategic memory — The AI retains context from its last 3 turns for coherent multi-turn strategy
- AI fleet placement — Automated random fleet + decoy placement for the AI player
- AI tool-use loop — Claude uses structured tools (purchase perks, fire torpedoes, use abilities, end turn) to play complete turns autonomously
- UI lock during AI turns — All controls disabled while the AI is thinking, with a visual indicator
Improvements
- Simulator upgrade — Axis-aware bot intelligence for more realistic automated testing
- Rank test fixes — Corrected rank system tests for edge cases
- CLAUDE.md context updates — Engine and UI documentation updated to reflect the AI subsystem (
ai-briefing,ai-opponent,ai-placement,ai-tools)
Architecture
src/engine/ai/
├── ai-briefing.ts # System prompt + game state serializers
├── ai-opponent.ts # AIOpponent class — browser-side turn executor
├── ai-placement.ts # Random fleet placement (pure logic)
└── ai-tools.ts # Tool definitions + dispatcher for Claude tool use
The AI subsystem lives in src/engine/ai/ with pure game logic separated from the Anthropic SDK integration. ScreenRouter carries aiMode/aiOpponent in context for seamless screen transitions.
v0.6.5
v0.6.0 — Rank System
Rank System with Stalemate Bonus
New difficulty selector on the title screen introduces a dry spell mechanic that awards bonus credits when players go too long without making contact.
Ranks
| Rank | Dry Turn Threshold | Bonus Credits |
|---|---|---|
| Recruit | 10 | +8 |
| Enlisted | 16 | +5 |
| Officer (default) | -- | -- |
What's new
- Rank selector on title screen — choose your difficulty before starting
- Stalemate bonus — when the dry-turn threshold is reached, both players receive bonus credits; counter resets on any contact (torpedo hit, sonar positive, drone contact, depth charge hit, decoy hit)
- Combat HUD — bonus notification banner and DRY counter in bottom bar for non-officer ranks
- Simulator —
--rank recruit|enlisted|officerflag for balance testing
Impact
Simulation testing shows ~34% shorter games at Recruit rank vs Officer, with bonus credits fueling significantly more perk purchases and intel-driven targeting.
Full changelog
See CHANGELOG.md
v0.5.5
Full Changelog: v0.5.1...v0.5.5
v0.5.0 — Game Balance Overhaul
Game Balance Overhaul
Grid Reduction: 8×8×8 → 7×7×7
- Grid shrunk from 512 to 343 cells
- Tighter quarters create more engaging gameplay with faster contact
Expanded Fleet: 5 → 7 Ships
- Narwhal (size 3) and Piranha (size 2) added to the roster
- Total occupied cells: 22/343 (6.4% density, up from 3.3%)
- More sinks → more credits → more perks deployed
Rebalanced Perk Economy
- Sonar Ping reduced from 3×3×3 to 2×2×2 volume (8 → 4 cells scanned)
- Perk costs retuned across the board
- Credit awards adjusted: hit +1, consecutive hit +8, sink +15
- Starting credits: 5
Game Simulation
- New
npm run simulatecommand for bot-vs-bot balance testing - Bots use hunt/target logic with phase-based perk spending strategy
- 1000-game simulation shows ~530 avg turns (down from 800+)
G-SONAR
- Now scans 49 cells per depth layer (was 64)
🤖 Generated with Claude Code