# Safety Rules — USPSA-style stage design

These are non-negotiable. Violating any of them produces stages that are unsafe to shoot, illegal to run as a USPSA match, or destructive to club props.

## 1. The fault-line rule

**Every outer edge of the shooting area must be a fault line or a wall.** Bay berms are NOT boundaries. The rule from the user: *"All shooting areas should be a three-dimensional shape defined on the outside by a fault line, not the bay edge."*

This means a closed polygon of fault lines (plus walls counting as boundaries) must surround the entire shooting area. The shooter's legal walking area is the interior of that polygon.

### Shooting-area shapes (menu of useful polygons)

- **Single rectangle** — simplest. Good for static stages. Four fault lines around the perimeter.
- **Lanes-with-rear-band (U-shape, open at front)** — rear band across the top, lanes advancing down each side. Used in FC-02 v2. Requires fault lines on all outer edges including the front of the rear band and outer sides of the lanes.
- **Frame-with-cutout** — outer rectangle minus inner rectangle. The cutout is downrange terrain (targets + walls go here). Shooter walks around the cutout. Used in FC-02 v3. 8 fault line segments minimum.
- **U-shape with walls as part of perimeter** — what the user prefers (FC-02 v4). Walls can substitute for fault line segments at specific positions, with fault lines bridging the gaps.
- **Multi-area with `leaveShootingArea: yes`** — two or more disjoint polygons. Shooter is allowed to walk between them; explicit brief language required.

### Important: walls as boundary

Walls (6 ft tall vertical surfaces) ARE valid boundaries — shooter physically can't cross them. In the brief, mention which polygon edges are walls vs. fault lines so the setup crew knows what to build.

## 2. The bullet-path rule

**No bullet trajectory may hit a wall, a paper target you don't intend, or a target stand downrange of the intended target.**

When designing, for each (shooter position, target) pair, mentally trace the bullet line PAST the target. It must terminate in a berm.

### Three berm zones in a typical bay

- **Back berm** — at y=0 (downrange edge). Catches bullets traveling SOUTH (any target facing 180° / uprange).
- **Left berm** — at x=0. Catches bullets traveling WEST (targets facing 90° east, shot from the east side).
- **Right berm** — at x=bay_width. Catches bullets traveling EAST (targets facing 270° west, shot from the west side).

### Use angled facings to route bullets safely

- Target facing 180° → bullet south → back berm.
- Target facing 90° → bullet west → left berm.
- Target facing 270° → bullet east → right berm.
- Target facing 135° (NE) → bullet SW after pass-through. Verify the SW vector ends in a berm (left or back).
- Target facing 225° (NW) → bullet SE after pass-through. Verify the SE vector ends in a berm (right or back).

## 3. The pass-through rule

**No paper target may be collinear with another paper target from any reachable shooter position.** A bullet that passes through one paper continues straight; if it hits another paper, the shooter scores a phantom A on a target they didn't intend.

### Verification method

For each target, take the line from a representative shooter position THROUGH the target, then check whether that line crosses any other paper's cardboard plane within the cardboard's x/y extent.

```
Line from shooter (sx, sy) through target (tx, ty), parametric:
  x(t) = sx + t * (tx - sx)
  y(t) = sy + t * (ty - sy)

At t=1, line is at the target. For t > 1, line is past the target.
For each other paper P at (px, py) with cardboard along an axis:
  Find t such that line crosses P's cardboard plane.
  If t > 1 AND line position at that t falls within P's cardboard extent → PASS-THROUGH HAZARD.
```

### Mitigations

- **Alternating y-depth** in a back row (y=1, 3, 1, 3, ...) — a side-angle shot through a y=1 target reaches the y=3 row at a different x than where the y=3 targets are.
- **Stagger x positions** so a deeper target is offset laterally from a shallower one.
- **Increase y-separation** between targets in the same column.

## 4. The no-wall-behind-paper rule

**Never place a paper target with a wall immediately downrange of it.** Bullets pass through cardboard and hit the wall. Walls take repeated hits across a match day, accelerating prop wear and creating splinter hazards.

### Minimum clearance

Aim for 6+ ft of clear bullet path past every paper target before hitting any wall. If the geometry is tight, rotate the target so its pass-through line goes laterally into a berm instead.

## 5. The 5-yard minimum rule

**No target may be closer than 5 yards (15 ft) to any reachable shooter position.** Closer than that, the shooter is too likely to take splatter or hot brass to the face on a fast engagement.

This means: if the fault line is at y=4 and a target is at y=1, the closest shooter position (y=4) is only 3 ft from the target. That's TOO CLOSE for USPSA. Push the fault line further uprange (y=15+) OR push the target further downrange.

For FC-02 the user actually allowed y=4 fault with center targets at y=1-3 — that's a very close engagement (1-3 ft). If the user explicitly wants close engagement, fine, but flag it.

## 6. The 45-degree margin rule

**Targets at the extreme lateral edges of the bay should be positioned so the shooter's muzzle never points within 45° of the bay's side berm.**

USPSA's 180-degree rule says you can't point your muzzle past the side berms (the "180" line perpendicular to downrange). The 45° margin builds in safety so a heavy lean or stretch doesn't accidentally cross the 180.

### Practical implication

For a target at (x=2, y=20) in a 35-ft-wide bay (left berm at x=0), the shooter engaging it from the rear band (e.g., at (15, 30)) points their muzzle at a vector (-13, -10) which is roughly SSW — comfortably away from the 180. ✓

But for a target at (x=0.5, y=20) shot from (5, 25), the muzzle points nearly due south (-4.5, -5) — but if the shooter steps right to engage T2 next, they could swing past 180. ⚠️

## 7. The round-count rule

**Round count = paper × 2 + steel × 1.** Comstock scoring takes the best 2 hits per paper and 1 hit per steel. Min round count drives the brief.

- Short course: ≤ 12 rounds
- Medium course: 13–24 rounds
- Long course (field course): 25–32 rounds, NEVER more than 32

Match the round count to the user's "short / medium / long" answer. For long-course-32, that's 16 paper or some paper+steel mix.

## 8. The freestyle rule

**Field courses (long courses) cannot dictate engagement order or reload locations.** No mandatory reload. No required engagement sequence. The shooter chooses their own plan.

Mandatory reloads are ONLY for short courses (classifier-style), and even then only when the round count makes it physically necessary (e.g., a 12-round stage where shooting from both sides of a barricade requires a reload).

If the user asks for a "field course," do not put in a mandatory reload.

## 9. The targets-outside-the-polygon rule

**Paper, steel, and no-shoots all live in DOWNRANGE TERRAIN — outside the shooter polygon, beyond a fault line.** The shooter walks IN the polygon; targets are what they look AT, never stand among.

### Why it matters

A target INSIDE the shooter area means the shooter can physically be on every side of it — including the back side, which is unscored cardboard. It also creates confusion about whether the shooter can fault by stepping past the target, since the polygon doesn't actually end there.

### How to place each target family correctly

- **Uprange-facing targets (facing 180°)** — place SOUTH of the polygon's front fault. Bullets go south into back berm.
- **East-facing targets (facing 90°)** — place WEST of the polygon's west fault. If the polygon's west edge is at the bay berm (x=0), put targets at x < 0 (impossible — instead, indent the polygon by a couple feet to create a downrange "strip" between berm and fault, then put targets in that strip at x ≈ 0–1.5). OR put targets SOUTH of the polygon's front fault, where lane shooters at higher y can still see them from a NE angle.
- **West-facing targets (facing 270°)** — mirror.
- **Angled targets (facing 135° or 225°)** — same logic. South or west/east downrange strip.

### Example from FC-02 dev session

Initial layout had east-facing T5 at (2, 20–21.5) — INSIDE the left lane (which extends x=0–10, y=20–30). Wrong: the shooter physically walks around T5 in the lane. Corrected: moved T5 to (1, 18–19.5), south of the lane front fault at y=20 → now in southern downrange terrain.

## 10. The no-redundant-collinear-fault rule

**If an inner cutout's edge sits on the same line as an outer-perimeter fault, drop the inner one.** Two fault lines drawn over each other clutter the diagram and read visually as "this is a separate shooting area," which it isn't.

### Example

Polygon outer rectangle has its front fault at y=20, x=0 to x=35. The inner cutout has a south edge at y=20, x=10 to x=25. The cutout south fault is a SUBSET of the outer front fault — every shooter constraint it expresses is already expressed by the outer front. Drop it; the cutout becomes a 3-sided U-shape opening southward into the outer front, with no change to the shooter's legal area.

## 11. The no-shoot-bullet-path rule

**No-shoots have the same shoot-through liability as paper targets — verify them.** When the user asks for "tight no-shoots" or you add no-shoots to ratchet difficulty, trace the bullet line from every reachable shooter position to every nearby target, and check whether the line crosses any no-shoot's cardboard plane within that no-shoot's y/x extent.

### Example from FC-02 dev session

Placed NS1 at (5, 15.5–17), east-facing, to bracket T4 (3, 16). Bullet from rear-band shooter at (10, 32) to T3 (4, 12) crosses x=5 at y=15.33 — just barely south of NS1's bottom edge (15.5), a 2-inch miss. Move the shooter 1 foot east or west and the line crosses inside NS1's range. Result: NS1 was effectively hit on any rear-band shot to T3 from shooter x ≈ 8–10. Had to remove NS1.

**Mitigation patterns**: 
- Position no-shoots PASTED to their paired paper (touching the cardboard side), not standing several feet away in the line of fire.
- OR explicitly verify the bullet line from each "natural" shooter position misses every nearby NS by ≥ 1 ft.
- OR use hardcover on the paper itself instead of adding a separate no-shoot.

## 12. The 4-ft-divisible fault-segment rule

**Clubs build fault lines from 4 ft and 8 ft stock sticks.** Every fault segment in the polygon must be a length that those sticks can assemble cleanly — i.e., a multiple of 4 ft.

### Valid segment lengths

4, 8, 12, 16, 20, 24, 28, 32, 36, 40 ft (and so on).

### Invalid segment lengths

3, 5, 6, 7, 9, 10, 11, 13, 14, 15 ft, etc. A 10-ft fault would require either a 4+4+2 (no 2-ft sticks exist) or 8+2 (same problem). Setup crews end up cutting sticks or improvising — both are bad.

### How to plan a polygon for buildability

When choosing where to put fault lines, locate every vertex on a coordinate grid where each segment between adjacent vertices is divisible by 4. Don't pick `y = 22` for the lane front if it makes the lane outer side 13 ft long; pick `y = 20` or `y = 24` instead.

Bay sizes themselves should be 4-ft-divisible too — 32 × 40, 36 × 40, 40 × 40 work cleanly. 35 × 40 forces awkward sub-segments unless you indent the polygon inside the bay.

### Quick checklist before saving

After laying down the polygon, compute the length of each fault segment and verify it's `% 4 == 0`. If any is off, shift the relevant vertex.

## 13. Wall placement rules

Walls have two different design uses, and each has a strict placement rule.

### Walls WITH ports

A ported wall is one the shooter actually engages targets THROUGH. The shooter places their gun in the port and aims. They must be able to walk right up to the wall and lean against it.

**Rule**: a ported wall must sit ON a fault-line edge of the shooter polygon — adjacent to the shooter's walkable area, not floating in the middle of downrange terrain.

If the wall is 8+ feet downrange of the shooter (e.g., wall at y=12 and shooter polygon ends at y=20), the shooter is firing into the port from a long distance with no platform to brace on. Two failure modes:
1. Bullets that miss the port hit the wall directly — wears out club props fast.
2. The "port" shot becomes an extreme-angle shot through a tiny window from far away, which doesn't play the way you intended (it's not the "lean into the port" experience, it's "thread a needle from across the bay").

**Correct placement**: wall endpoints sit on a fault-line edge. Example: outer front fault is at y=20 spanning x=0–35. A ported wall at y=20 spanning x=10–25 sits directly on that fault — shooter at y=20.1 (just inside the polygon) is touching the wall.

### Walls WITHOUT ports (pure visual blockers)

Solid walls used only to block sight lines (no shooter interaction) CAN sit a few feet downrange of the polygon. They function purely as obstructions in the bullet's-eye view — shooter doesn't touch them, doesn't aim through them.

**Rule**: solid blocker walls can be 2–6 ft downrange of the polygon's nearest fault. Still verify no bullet trajectory hits them (Rule #4) — but their physical location doesn't need to be adjacent to the shooter.

### Quick rule of thumb

> **If the wall has a hole in it, the shooter touches it. If the wall is solid, the shooter looks past it.**

When you put a port in a wall, immediately check: is the wall on a fault-line edge? If not, either move the wall to the edge or remove the port.

### Wall length must be buildable from 2, 4, and 8 ft stock panels

Clubs build walls from stock panels in three sizes: **2 ft, 4 ft, or 8 ft.** A wall longer than 8 ft is built by butting multiple panels end-to-end.

**Valid wall lengths**: any even integer ≥ 2 that decomposes into 2s, 4s, and 8s. Practically that's every even integer ≥ 2:
- 2 (one 2 ft)
- 4 (one 4 ft)
- 6 (4 + 2)
- 8 (one 8 ft)
- 10 (8 + 2)
- 12 (8 + 4)
- 14 (8 + 4 + 2)
- 16 (8 + 8)
- 18 (8 + 8 + 2)
- 20 (8 + 8 + 4)
- 24, 28, 32, ...

Prefer **8s wherever possible** (fewer joints = sturdier wall), use **4s next**, and reserve **2s for edge cases** where a longer panel doesn't fit.

**Invalid wall lengths**: any odd length (5, 7, 9, 11, 13, 15, 17, ...) — cannot be built from 2/4/8 panels.

When you place a wall, double-check `|endpointB - endpointA|` resolves to an even integer ≥ 2. If you need a 15 ft port wall, use 16 ft (8+8) or 14 ft (8+4+2) instead.
