Take the contract. Build the crew. Burn the signal. Get out before the city learns your name.
The city sold its nervous system to the highest bidder.
Every camera is awake. Every transit gate keeps a memory. Every corporate district is a sealed machine built to recognize the wrong face at the wrong time. Data brokers trade reputations like ammunition. Private security responds before the law knows a crime happened. Somewhere above the rain, an executive dashboard is turning human movement into risk scores.
You are not here to fix that system.
You are here to rob it.
HexWire is a turn-based cyberpunk strategy tactics game built around small-team infiltration, authored multi-room operations, persistent consequences, and a combat economy where speed creates exposure. You command a crew of specialists across a hex-grid battlefield, spend scarce actions to break hostile positions, extract before the network closes around you, and carry the consequences into the next job.
The fantasy is not invincibility. It is competence under pressure.
A clean mission pays. A loud mission pays faster. A reckless mission changes what the city sends after you next.
A HexWire crew is built from four complementary archetypes. None of them owns the battlefield alone; the game lives in the space between their abilities.
| Runner | Function | Battlefield identity |
|---|---|---|
| Street Samurai | Frontline pressure | Closes distance, absorbs risk, and turns positional advantage into decisive force. |
| Mage | Arcane control | Shapes contested space, punishes clustered threats, and bends the encounter outside ordinary rules. |
| Decker | Signal warfare | Exploits the network, accelerates tactical plays, and makes the fastest path the most dangerous one. |
| Face | Social and support leverage | Keeps the operation coherent, creates openings, and converts preparation into survival. |
The crew moves as a single operational system. Positioning, initiative, room sequencing, damage, extraction, economy, and persistence all feed forward. A mistake in one room becomes the shape of the next.
At the center of HexWire is a pressure loop built around two ways of acting:
Reliable. Controlled. Slow enough to disappear inside the noise.
Street actions resolve without increasing trace. They preserve operational safety but surrender tempo to the opposition.
Fast. Powerful. Visible.
Signal actions create immediate tactical leverage while raising your trace level. Push it too far and the hostile network escalates: enemy awareness hardens, incoming damage increases, and the mission begins charging interest on every shortcut you took.
You can reduce trace, but there is no free reset. Laying low consumes a full turn. The crew survives by deciding when tempo matters more than safety—and when one more aggressive action will turn a winning position into a collapse.
Signal → Power → Trace → Escalation → Lay Low → Tempo Tradeoff
Trace is not a cosmetic alert meter. It is the combat clock the player chooses to wind.
Every operation follows a tactical rhythm:
- Take the contract — enter an authored story mission, side contract, arena, or gauntlet run.
- Read the room — study walls, lanes, enemy positions, initiative, objectives, and extraction conditions.
- Commit the crew — move across the hex grid, attack, cast, hack, support, or sacrifice tempo to reduce exposure.
- Clear forward — move through connected rooms while carrying damage, pressure, and mission state with you.
- Hit the objective — acquire data, eliminate resistance, survive the encounter logic, or satisfy the mission gate.
- Reach extraction — physically move a runner onto the armed extraction tile and resolve the operation.
- Live with it — collect nuyen, preserve progression, alter faction attention, upgrade the crew, and decide what risk comes next.
Victory is not simply killing the final enemy. The job ends when the crew gets out.
HexWire currently contains six machine-certified multi-room story missions, supported by scene-driven interstitial operations and repeatable combat modes.
Each mission is built as a connected room graph with authored enemies, boss or unique slots, objective logic, extraction conditions, payout, defeat handling, replay behavior, and save/resume persistence.
The story campaign is designed to feel deliberate rather than procedurally anonymous: rooms have authored tactical intent, while seeded replay rerolls vary ordinary opposition without replacing bosses, unique encounters, or mission structure.
Between major missions, the campaign shifts format through scene-driven encounters including:
- Mirrorline
- The Drop
- Basement Brawl
- Cold Trace
These sequences widen the fiction beyond the standard combat board while still routing rewards and objectives through the same authoritative progression system.
The campaign is only one layer of the city.
| Mode | What it does |
|---|---|
| Side Contracts | Tiered operations generated from the contract board, built for repeatable risk and progression. |
| Arenas | Twenty validated combat spaces selected through seeded contract generation. |
| Endless Gauntlet | Escalating floors, shifting enemy composition, persistent best-floor tracking, and failure that sends the crew back to floor one. |
| Seeded Replay | Rerolls standard opposition while preserving authored structure, boss identity, positions, and mission logic. |
| New Game+ | Carries the campaign forward into a higher-pressure progression cycle. |
The persistent layer includes nuyen, black-market access, cyberware, faction heat, mission completion, replay state, and campaign scaling. The city remembers both success and attention.
HexWire is built around a specific kind of strategy:
- Turn-based, not twitch-based — the player has time to read the board, but every action changes the pressure state.
- Position-first combat — walls, lanes, movement budgets, room topology, and extraction placement determine what is possible.
- Small-team synergy — runners are designed as interlocking roles rather than isolated damage engines.
- Objective-driven missions — combat is part of the operation, not always the complete operation.
- Persistent consequence — rewards, faction attention, upgrades, campaign progress, and replay state survive beyond the room.
- Deterministic authority — identical inputs and seeded conditions resolve consistently, making tactics testable rather than theatrical.
The intended feeling is a cyberpunk heist collapsing one measured decision at a time.
HexWire is an iOS-native game built with:
| Layer | Technology |
|---|---|
| Application and campaign UI | SwiftUI |
| Tactical battlefield | SpriteKit |
| Core language | Swift 5.9 |
| Project generation | XcodeGen 2.46.0 |
| Minimum deployment target | iOS 17.0 |
| Supported devices | iPhone and iPad |
| Build validation | GitHub Actions on macOS |
The gameplay architecture follows one hard rule:
GameStateis the single gameplay authority.
SwiftUI and SpriteKit do not independently decide outcomes. Presentation surfaces emit intents through the game-intent and combat-flow seams, then render the authoritative result. This prevents animation, touch handling, or scene timing from silently becoming a second rules engine.
flowchart LR
P[Player input] --> I[Game intents]
I --> G[GameState authority]
G --> C[Combat and mission systems]
C --> G
G --> S[SpriteKit battlefield]
G --> U[SwiftUI campaign UI]
G --> V[Persistence and progression]
HexWire is a stabilized vertical slice, not yet a finished App Store release.
The current repository includes:
- Six certified multi-room story missions
- Scene-driven interstitial missions
- Deterministic combat and seeded replay behavior
- Twenty validated arenas
- Side-contract tiers 1–3
- Gauntlet progression across the tested scaling band
- Persistent economy, campaign, and upgrade state
- iPhone and iPad layouts
- Debug and Release simulator builds
- Unsigned release archive generation
- Hosted CI on every pull request and push to
main
Remaining release work is concentrated around the owner’s real-device pass, ship configuration, signing, and App Store metadata. See plans.md for the active release frontier.
- macOS
- Xcode with an iOS 17+ SDK
- XcodeGen 2.46.0
xcodegen generateHexWire.xcodeproj is generated from project.yml. After adding or removing files, regenerate and commit the project. CI rejects project drift.
xcodebuild \
-project HexWire.xcodeproj \
-scheme HexWire \
-destination 'platform=iOS Simulator,name=iPhone 17' \
buildxcodebuild \
-project HexWire.xcodeproj \
-scheme HexWire \
-destination 'platform=iOS Simulator,name=iPhone 17' \
testFor repeated test runs, pre-boot the simulator to avoid cold-launch instability:
xcrun simctl boot <udid> || true
xcrun simctl bootstatus <udid> -bDebug builds honor SR_AUTOSTART_MISSION_ID:
SR_AUTOSTART_MISSION_ID=Mission003Use Mission001 through Mission006 to bypass campaign navigation and enter a mission directly.
HexWire treats gameplay claims as executable obligations.
The hosted hexwire-ci workflow checks:
| Gate | Coverage |
|---|---|
| Repository hygiene | Nested repositories, tracked build output, user state, backup projects, and stray workspaces |
| Mission data | JSON validity and unique mission identifiers |
| Asset safety | Duplicate runtime asset-name detection |
| Project reproducibility | XcodeGen regeneration and drift rejection |
| Deterministic tests | Combat, authority, economy, persistence, missions, replay modes, and player movement semantics |
| Device matrix | Debug and Release builds for iPhone and iPad simulators |
| Archive path | Unsigned generic-iOS Release archive |
| Resource integrity | Missing-resource warning gate |
The authoritative status signal is the live CI badge at the top of this README. Historical documents may contain older test-count snapshots; green CI on main is the current truth surface.
Hexwire/
├── Game/ # Intents, combat flow, authority-facing systems
├── Missions/ # Authored mission JSON
├── Sprites/ # SpriteKit runtime art
├── Assets.xcassets/ # Asset catalog
├── tests/ # Deterministic and certification suites
├── docs/
│ ├── TraceSystem.md # Signal, trace, escalation, and Lay Low loop
│ ├── architecture/ # Extraction and authority architecture
│ ├── audit/ # Build, test, mission, persistence, and repo evidence
│ └── archive/ # Superseded historical material
├── .github/workflows/ # Hosted CI
├── project.yml # Canonical XcodeGen specification
├── AGENTS.md # Contributor and coding-agent rules
└── plans.md # Current verified baseline and next actions
| Document | Purpose |
|---|---|
plans.md |
Current mission, verified baseline, blockers, and next actions |
AGENTS.md |
Repository workflow and authority invariants |
docs/TraceSystem.md |
The Street / Signal / Trace pressure system |
docs/audit/MissionCertificationMatrix.md |
Evidence for missions, arenas, contracts, gauntlet, and extraction semantics |
docs/audit/GameStateAuthorityMutationLedger.md |
Gameplay authority and mutation boundaries |
docs/audit/PersistenceCertificationReport.md |
Save, migration, corruption, and resume evidence |
docs/architecture/StabilizationExtractionMap.md |
Current system decomposition and deferred extraction candidates |
Contributions should preserve four invariants:
GameStateremains the gameplay authority.- Presentation layers emit intents and render results; they do not invent outcomes.
- Mission, replay, progression, and persistence behavior must remain deterministic under controlled seeds.
- No completed claim is accepted without a test, build receipt, runtime evidence, or an explicit
NOT_COMPUTABLEboundary.
Read AGENTS.md before changing combat flow, mission state, persistence, project structure, or generated Xcode files.