Weapon handedness: one-handed vs two-handed grip modifiers #33

Open
opened 2026-11-08 16:48:28 +00:00 by muse-lantern · 2 comments
Member

Design (Zach, 2026-11-08, confirmed — no build yet)

Weapons split into two categories, with grip modifiers on recoil and bullet deviation:

  • One Handed, one hand: x1 (baseline).
  • One Handed, two hands on the second grip point: x0.5 recoil, x0.5 deviation.
  • Two Handed, two hands: x1 (baseline).
  • Two Handed, one hand: x2 recoil, x2 deviation.

Both multipliers are fine-tunable per weapon in the weapon spec struct (0.5 / 2.0 are the defaults). The category flag already exists in the spec ("two_handed" in the weapon table; the pistol carries false).

A sidearm's dual grip (palming — support hand onto the primary grip) is the one-handed case where the second grip point sits on the primary grip. If anyone wants different numbers, they can mod it — the tuning lives in the spec.

Notes on the model

  • Deviation is per-shot; recoil is stateful (accumulates, decays by recoil_recovery). So a single shotgun shell goes straight anyway (x2 of ~0 base deviation is still ~0), and the recoil penalty shows on back-to-back shots before the muzzle settles.
  • Engagement: the grab system already records which grip point each hand holds and prefers SECONDARY points for the second hand, so "second hand is on the second grip point" is a real check the gun can make at fire time.

Open

  • Pivot rule: a palmed pistol must keep pivoting at the primary wrist (the midpoint rule would let the support hand steer). A separated second grip (foregrip) wants the midpoint. Proposed rule: let the geometry decide — points on top of each other is a palm (wrist pivot), points apart is a two-hand hold (midpoint pivot) — or make it a flag on the weapon.
  • Spread split: spread_deg currently does double duty as both pellet cone and aim deviation. If the x2 is meant to touch only the deviation and not the cone, those need to be two separate terms in the spec — or one-handed shotgun blasts also open up the cone.
  • Spec field names for the multipliers.
## Design (Zach, 2026-11-08, confirmed — no build yet) Weapons split into two categories, with grip modifiers on recoil and bullet deviation: - One Handed, one hand: x1 (baseline). - One Handed, two hands on the second grip point: x0.5 recoil, x0.5 deviation. - Two Handed, two hands: x1 (baseline). - Two Handed, one hand: x2 recoil, x2 deviation. Both multipliers are fine-tunable per weapon in the weapon spec struct (0.5 / 2.0 are the defaults). The category flag already exists in the spec (`"two_handed"` in the weapon table; the pistol carries `false`). A sidearm's dual grip (palming — support hand onto the primary grip) is the one-handed case where the second grip point sits on the primary grip. If anyone wants different numbers, they can mod it — the tuning lives in the spec. ## Notes on the model - Deviation is per-shot; recoil is stateful (accumulates, decays by `recoil_recovery`). So a single shotgun shell goes straight anyway (x2 of ~0 base deviation is still ~0), and the recoil penalty shows on back-to-back shots before the muzzle settles. - Engagement: the grab system already records which grip point each hand holds and prefers SECONDARY points for the second hand, so "second hand is on the second grip point" is a real check the gun can make at fire time. ## Open - Pivot rule: a palmed pistol must keep pivoting at the primary wrist (the midpoint rule would let the support hand steer). A separated second grip (foregrip) wants the midpoint. Proposed rule: let the geometry decide — points on top of each other is a palm (wrist pivot), points apart is a two-hand hold (midpoint pivot) — or make it a flag on the weapon. - Spread split: `spread_deg` currently does double duty as both pellet cone and aim deviation. If the x2 is meant to touch only the deviation and not the cone, those need to be two separate terms in the spec — or one-handed shotgun blasts also open up the cone. - Spec field names for the multipliers.
Author
Member

Revision — confirmed by Zach 2026-11-08. Resolves the open questions in the filing above, and corrects two points from the earlier discussion: the midpoint pivot for separated grips is replaced, and the two-handed/two-handed multiplier is 1x, not 0.5x.

Pivot (weapons): origin stays at the primary grip. The secondary hand steers pitch/yaw relative to the primary hand only — it does not rotate the weapon by a point-to-point calculation. Primary grip is master control, secondary grip is facing control. This replaces the midpoint rule for weapons; the pistol/palm case is unchanged (same grip point, wrist pivot).

Prefabs — deviation multipliers by hold:

  • generic weapon: 1x one-handed, 1x two-handed
  • weapon_one_handed: 1x / 0.5x
  • weapon_two_handed: 2x / 1x
    Per-item overrides live in the item struct. Declaration is by type-table key: weapon_one_handed / weapon_two_handed extend weapon (weapon + prefab_cfg); plain weapon is generic. Build note: is_type("weapon") is an exact key match today, so the loader/lookup must resolve the extension for a handed table to still count as a weapon.

Field names so far: one_handed_deviation / two_handed_deviation, in prefab_cfg (deviation only).

spawn_loaded: post-merge cleanup — move under the weapon properties scope. Today it is a sibling properties.spawn_loaded table read by _apply_spawn_loaded. Not a #32 change.

Tier model: bullet/mag/gun tiering now lives in #34 — weapon owns stats + mags/calibers, mag is a FILO container preserving load order, bullet typed by caliber with effect tags.

Still open:

  • Recoil: same prefab fields (one_handed_recoil / two_handed_recoil) or does recoil keep the global pair?
  • Is the two_handed boolean inside the weapon table subsumed by the type key?
  • Non-weapon two-handed grabs: does the midpoint rule still stand there, or is primary-origin now the general rule?
  • Cone vs deviation: do the multipliers touch deviation only, with spread_deg staying the pellet cone?

No build yet — design only until Zach says go. Reference gun systems: Zach will bring examples later.

Revision — confirmed by Zach 2026-11-08. Resolves the open questions in the filing above, and corrects two points from the earlier discussion: the midpoint pivot for separated grips is replaced, and the two-handed/two-handed multiplier is 1x, not 0.5x. **Pivot (weapons):** origin stays at the primary grip. The secondary hand steers pitch/yaw relative to the primary hand only — it does not rotate the weapon by a point-to-point calculation. Primary grip is master control, secondary grip is facing control. This replaces the midpoint rule for weapons; the pistol/palm case is unchanged (same grip point, wrist pivot). **Prefabs — deviation multipliers by hold:** - generic `weapon`: 1x one-handed, 1x two-handed - `weapon_one_handed`: 1x / 0.5x - `weapon_two_handed`: 2x / 1x Per-item overrides live in the item struct. Declaration is by type-table key: `weapon_one_handed` / `weapon_two_handed` extend `weapon` (`weapon + prefab_cfg`); plain `weapon` is generic. Build note: `is_type("weapon")` is an exact key match today, so the loader/lookup must resolve the extension for a handed table to still count as a weapon. Field names so far: `one_handed_deviation` / `two_handed_deviation`, in prefab_cfg (deviation only). **spawn_loaded:** post-merge cleanup — move under the weapon properties scope. Today it is a sibling `properties.spawn_loaded` table read by `_apply_spawn_loaded`. Not a #32 change. **Tier model:** bullet/mag/gun tiering now lives in #34 — weapon owns stats + mags/calibers, mag is a FILO container preserving load order, bullet typed by caliber with effect tags. **Still open:** - Recoil: same prefab fields (`one_handed_recoil` / `two_handed_recoil`) or does recoil keep the global pair? - Is the `two_handed` boolean inside the weapon table subsumed by the type key? - Non-weapon two-handed grabs: does the midpoint rule still stand there, or is primary-origin now the general rule? - Cone vs deviation: do the multipliers touch deviation only, with `spread_deg` staying the pellet cone? No build yet — design only until Zach says go. Reference gun systems: Zach will bring examples later.
Author
Member

Correction to comment 885 — key names: the type-table keys are weapon_one_hand and weapon_two_hand, not weapon_one_handed / weapon_two_handed. Plain weapon stays the generic class (1x/1x, gains none of the handedness quirks — intended opt-out). The prefab table in 885 is otherwise unchanged: weapon_one_hand 1x/0.5x, weapon_two_hand 2x/1x deviation.

Settled since 885:

  • The two_handed boolean inside the weapon table is subsumed by the type key.
  • Non-weapon grabs are one-handed unless the object is specifically designed for two-handed later (postponed; scope stays small).
  • spawn_loaded: current implementation stays as-is; its future direction is a spawn flag / code trigger so loot-table pools can be built around it (metadata injection for later).

Still open: recoil prefab fields, cone vs deviation.

Correction to comment 885 — key names: the type-table keys are `weapon_one_hand` and `weapon_two_hand`, not `weapon_one_handed` / `weapon_two_handed`. Plain `weapon` stays the generic class (1x/1x, gains none of the handedness quirks — intended opt-out). The prefab table in 885 is otherwise unchanged: `weapon_one_hand` 1x/0.5x, `weapon_two_hand` 2x/1x deviation. Settled since 885: - The `two_handed` boolean inside the weapon table is subsumed by the type key. - Non-weapon grabs are one-handed unless the object is specifically designed for two-handed later (postponed; scope stays small). - `spawn_loaded`: current implementation stays as-is; its future direction is a spawn flag / code trigger so loot-table pools can be built around it (metadata injection for later). Still open: recoil prefab fields, cone vs deviation.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
dead-air/engine#33
No description provided.