One and two players
For two players VORIVOX supports two clear game models without identifying a weapon for every impact: alternating turns or a left/right split target.
1. Alternating turns
The game clearly shows Player 1 or Player 2. An accepted impact, a shot series or a completed round changes the active player according to game rules. Only the active player is expected to shoot, so target.hit does not need a player_id.
let activePlayer = 0;
sdk.on('target.hit', hit => {
if (sdk.sessionState !== 'running') return;
addScore(activePlayer, scoreHit(hit));
activePlayer = activePlayer === 0 ? 1 : 0;
showTurn(activePlayer);
});
2. Split target
The physical plate remains one target, while the scene is split vertically. The left half belongs to Player 1 and the right half to Player 2. With normalized coordinates, nx < 0.5 routes to Player 1 and nx ≥ 0.5 routes to Player 2.
function playerForHit(hit) { return hit.nx < 0.5 ? 0 : 1; }
sdk.on('target.hit', hit => {
if (sdk.sessionState !== 'running') return;
const player = playerForHit(hit);
addScore(player, scoreHalfTarget(player, hit));
});
Game state
Keep two scores, per-player hit counters, current turn/round and an obvious visual indication of the active side. The base session.complete remains an aggregate contract unless the platform defines a separate per-player result path.
Testing
For turns: pause during handoff, last shot and duplicate shot_id. For split target: center-line impacts, both edges, mirrored geometry and readability of both halves.