docs: define curated tactical sandbox scope
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
# BattleForge Curated Tactical Sandbox
|
||||
|
||||
## Purpose
|
||||
|
||||
BattleForge's first release will validate its central promise: users can create a
|
||||
small tactical scenario and play it as a complete game. The MVP balances simple
|
||||
creation tools with tactically meaningful combat while avoiding the infrastructure
|
||||
and complexity of a general-purpose game engine.
|
||||
|
||||
The release is intended for early playtesting by people interested in creating
|
||||
and playing lightweight tabletop-style skirmishes.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
The MVP succeeds when a new user can, without developer assistance:
|
||||
|
||||
1. Start from a bundled scenario and complete a local match.
|
||||
2. Create two valid teams from provided unit templates.
|
||||
3. Build and validate a battlefield.
|
||||
4. Save the resulting scenario and start a match from it.
|
||||
5. Complete a match with an unambiguous winner.
|
||||
|
||||
The combat must offer meaningful choices through positioning, terrain, unit
|
||||
roles, and action use. It does not need to support arbitrary user-authored rules.
|
||||
|
||||
## Primary User Flow
|
||||
|
||||
1. Choose a bundled scenario or create a new one.
|
||||
2. Assemble two teams from curated unit archetypes.
|
||||
3. Customize unit names, images, and bounded stats.
|
||||
4. Paint terrain, place objectives, and define deployment zones on a square grid.
|
||||
5. Select a supported victory condition and validate the scenario.
|
||||
6. Begin a local hot-seat match.
|
||||
7. Alternate team turns until the rules engine declares a winner.
|
||||
8. View the result, then replay or return to an editable copy of the scenario.
|
||||
|
||||
## In Scope
|
||||
|
||||
### Curated Content
|
||||
|
||||
- Four distinct unit archetypes: defender, striker, support, and scout.
|
||||
- Three fixed special abilities: healing, area damage, and a temporary buff.
|
||||
- Five terrain types: open ground, forest, rough ground, water, and blocking
|
||||
terrain. Each type has fixed movement and defensive effects.
|
||||
- A bundled top-down or pixel-art asset library for units, structures, and
|
||||
terrain.
|
||||
- Three ready-made scenarios that allow users to play without first using the
|
||||
editors.
|
||||
|
||||
### Team Editor
|
||||
|
||||
- Build exactly two opposing teams of three to six units each.
|
||||
- Add units from curated archetype templates.
|
||||
- Customize unit names and display images.
|
||||
- Adjust health, attack, defense, and speed within enforced limits.
|
||||
- Assign only abilities allowed by the selected archetype.
|
||||
- Validate team size, stat bounds, and required fields before play.
|
||||
|
||||
### Battlefield Editor
|
||||
|
||||
- Create a square-grid battlefield from 8 by 8 through 16 by 16 tiles.
|
||||
- Paint predefined terrain tiles using a drag-and-drop or paint-style interface.
|
||||
- Place one non-overlapping deployment zone for each team.
|
||||
- Place objectives when required by the selected victory condition.
|
||||
- Reject scenarios with invalid deployment zones, inaccessible required
|
||||
objectives, or missing required elements.
|
||||
|
||||
### Scenario Rules
|
||||
|
||||
- Choose one of two victory conditions:
|
||||
- eliminate every opposing unit; or
|
||||
- control a designated objective for a configured number of complete rounds.
|
||||
- Save, load, duplicate, edit, and delete scenarios associated with the current
|
||||
anonymous browser installation. No sign-in or cross-device access is provided.
|
||||
- Start each match from an immutable snapshot of its source scenario so later
|
||||
scenario edits cannot alter an active match.
|
||||
|
||||
### Turn-Based Combat
|
||||
|
||||
- Local hot-seat play for two people sharing one device.
|
||||
- Alternating team turns with a clear handoff screen between players.
|
||||
- Two actions per unit on its team's turn. An action can be spent to move, make a
|
||||
standard attack, or use one curated ability; a unit cannot attack or use an
|
||||
ability more than once per turn.
|
||||
- Grid-based movement and targeting with legal destinations and targets shown in
|
||||
the interface.
|
||||
- Terrain-based movement costs and defensive modifiers.
|
||||
- Health, damage, defeat, temporary effects, round progression, objective
|
||||
control, and victory detection.
|
||||
- Match-scoped resources only. All action allowances and temporary resources
|
||||
reset according to the match rules and never persist between matches.
|
||||
- A result view identifying the winner and satisfied victory condition.
|
||||
|
||||
### User Assets
|
||||
|
||||
- Optional image upload for custom unit art.
|
||||
- Strict server-side checks for allowed image types and maximum file size.
|
||||
- A bundled placeholder is used when an uploaded image is absent or unavailable.
|
||||
|
||||
## Explicitly Out of Scope
|
||||
|
||||
- User accounts, cloud synchronization, or cross-device persistence.
|
||||
- Online multiplayer, invitations, matchmaking, notifications, and spectators.
|
||||
- Leaderboards, rankings, achievements, or social features.
|
||||
- Computer-controlled opponents.
|
||||
- Campaigns, narrative progression, persistent resources, purchases, or unit
|
||||
upgrades between battles.
|
||||
- Arbitrary formulas, scripting, programmable abilities, or a general rules
|
||||
editor.
|
||||
- Public scenario sharing, collaborative editing, an asset marketplace, or
|
||||
moderation systems.
|
||||
- Isometric rendering, animation-heavy presentation, or simultaneous support for
|
||||
multiple visual perspectives.
|
||||
- Dedicated native mobile applications or a mobile-first battle interface.
|
||||
|
||||
These capabilities may be considered after playtesting demonstrates that the
|
||||
creation-to-combat loop is valuable.
|
||||
|
||||
## System Boundaries
|
||||
|
||||
The MVP will be implemented as one web application with four clearly separated
|
||||
modules:
|
||||
|
||||
1. **Content library:** owns curated unit archetypes, abilities, terrain, and
|
||||
bundled asset metadata.
|
||||
2. **Scenario editor:** owns scenario authoring, validation feedback, and local
|
||||
scenario management.
|
||||
3. **Rules engine:** authoritatively validates actions and resolves movement,
|
||||
targeting, combat, effects, turns, objectives, and victory.
|
||||
4. **Battle interface:** renders match state and submits player intent without
|
||||
independently deciding whether an action is legal.
|
||||
|
||||
The rules engine must not depend on browser presentation code. This boundary
|
||||
allows a future online service or AI player to use the same rule behavior without
|
||||
rewriting combat.
|
||||
|
||||
## Data and Action Flow
|
||||
|
||||
1. The editor produces a validated scenario containing team definitions, grid
|
||||
tiles, deployment zones, objectives, and victory settings.
|
||||
2. Starting play creates an immutable match snapshot plus mutable match state.
|
||||
3. The active player selects an action in the battle interface.
|
||||
4. The rules engine validates the action against the authoritative match state.
|
||||
5. A valid action is resolved and recorded in an ordered action log; an invalid
|
||||
action leaves match state unchanged and returns a user-facing reason.
|
||||
6. The rules engine advances unit, team, and round state as required and checks
|
||||
the configured victory condition.
|
||||
7. The interface renders the resulting state or the final match result.
|
||||
|
||||
The action log is part of local match state for debugging and deterministic rule
|
||||
verification. Replay visualization is not required in this MVP.
|
||||
|
||||
## Validation and Failure Handling
|
||||
|
||||
- Editors prevent play until all blocking validation errors are resolved.
|
||||
- Invalid movement, attacks, abilities, and targets are disabled when practical;
|
||||
rejected requests also return a concise explanation.
|
||||
- A rejected action never partially changes match state or consumes resources.
|
||||
- Failure to save a scenario or match is reported without discarding the user's
|
||||
in-memory work.
|
||||
- Missing user images fall back to a bundled placeholder and do not invalidate a
|
||||
scenario.
|
||||
- Corrupt or incompatible saved data is rejected safely and cannot start a
|
||||
partially initialized match.
|
||||
|
||||
## Security and Quality Requirements
|
||||
|
||||
- Every state-changing form or request uses and verifies a nonce before mutation.
|
||||
- All input is sanitized and validated at the application boundary.
|
||||
- All rendered output is escaped for its output context.
|
||||
- Uploaded images are validated by content as well as filename extension and are
|
||||
stored so they cannot execute as application code.
|
||||
- PHP follows the repository PHPCS rules and passes PHPStan at level 6 or higher.
|
||||
- JavaScript passes ESLint using `airbnb/base` and Prettier checks.
|
||||
- Composer configuration passes `composer validate`.
|
||||
|
||||
## Verification Strategy
|
||||
|
||||
- **Unit tests:** movement, range, line and area targeting where applicable,
|
||||
damage and defense, ability effects, terrain modifiers, turn transitions,
|
||||
objective control, and both victory conditions.
|
||||
- **Integration tests:** scenario validation; save/load round trips; match snapshot
|
||||
creation; action validation and state mutation; upload rejection and fallback
|
||||
behavior; nonce verification.
|
||||
- **End-to-end smoke test:** create teams, build a valid battlefield, save the
|
||||
scenario, start a hot-seat match, perform legal actions, and reach a declared
|
||||
winner.
|
||||
- **Manual usability check:** a new tester completes both a bundled match and a
|
||||
custom scenario without developer guidance.
|
||||
|
||||
Lint, static analysis, unit and integration tests, the end-to-end smoke test, and
|
||||
Composer validation are required CI checks. The MVP is releasable only when all
|
||||
checks pass.
|
||||
|
||||
## Release Boundary
|
||||
|
||||
The MVP is complete when every in-scope capability and success criterion is met,
|
||||
the verification suite is green, and no out-of-scope platform capability is
|
||||
required to build or finish a local match. Feedback from this release will decide
|
||||
whether the next investment should deepen combat, expand creation tools, add AI,
|
||||
or introduce asynchronous online play.
|
||||
Reference in New Issue
Block a user