Skip to content

Combat disciplines: complete Archery and Throwing trees #15

Description

@zoeyrose

Important

This issue is implemented in the fresh MIT-licensed Go server under the replacement program. Its gameplay and content-design decisions remain authoritative. C, CPython, classic packet, file-path, and enum details in the preserved specification are historical evidence only; do not copy, translate, or structurally port GPL implementation code.

Replacement implementation contract

Preserve every Archery and Throwing choice. Implement against the common Go action-source, projectile, ammunition, ownership, and transaction contracts.

The server remains authoritative, consumes versioned compiled content, and exposes bounded generated Game Protocol 1 messages. Pure rules may use a specifically approved typed CEL environment. Starlark is not part of this issue unless the separate residual-scripting decision explicitly approves it.

Required verification

  • Preserve every observable rule, balance decision, disclosure boundary, and anti-exploit invariant from the specification below.
  • Add deterministic Go unit/property tests and wrapper-managed scenario coverage at the appropriate integration boundary.
  • Add bounded malformed-input and persistence-failure cases where this feature accepts content, network, or stored data.
  • Add Go/Rust protocol conformance fixtures for every new cross-process field; the client must not reconstruct authoritative rules from prose.
  • Demonstrate that implementation and tests contain no copied GPL source/test material and execute no runtime Python.
Preserved product/design specification and historical implementation notes

Parent and roadmap

Outcome

Complete bow, crossbow, sling, shared marksman, and Throwing branches with one projectile action-source and ammunition policy.

Scope

  • Profile every launcher and thrown-weapon family with explicit rapid, power-draw, reload, penetration, ricochet, stagger, and fan capabilities.
  • Implement bounded bow mobility/volley, crossbow preparation/control, sling ricochet/concussion, marksman fundamentals, and Throwing fan/heavy/precision branches.
  • Refactor delayed projectile ownership and multi-projectile targeting once for all families.
  • Define exact ordinary/special ammunition consumption, preservation, recovery, and no-duplication behavior.

Superseded path / cleanup target

Delete launcher-family XP aliases and any family-specific duplicate projectile ownership/target-selection path.

Acceptance criteria

  • Every launcher/throwing family resolves a valid profile and uses the correct broad discipline.
  • Delayed, fan, through-shot, and ricochet kills retain the initiating action source.
  • Ammunition cannot be duplicated or silently consumed on rejected/partial actions.
  • Approved Archery and Throwing trees are persistent, documented, balanced, and tested.

Validation baseline

Before: families share partial projectile machinery but lack one explicit multi-projectile/action-source contract.

After: ranged and thrown disciplines offer distinct branches on shared safe projectile semantics.

Run projectile ownership, target ordering, ammunition boundary, cooldown, UI/profile, target-dummy, content, and native build tests.

This issue is a bounded child of #27. The parent remains open until every sibling child is complete.

Metadata

Metadata

Assignees

No one assigned

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions