Files

2.1 KiB

Diehammer (Bunch O' Dice)

A SwiftUI dice-rolling app for Warhammer 40k, currently iOS-only. Core structure:

  • Bunch-O--Dice/Model/ — Dice.swift, RollState.swift, Onboarding.swift: dice pool and roll-state logic.
  • Bunch-O--Dice/Views/ — SwiftUI views, split into PortraitVariants/, LandscapeVariants/, and Modals/ (AddToPool, HistoryView, SettingsView).
  • Bunch-O--Dice/ContentView.swift, MainView.swift, DieHammerApp.swift — app entry point and top-level layout.
  • Diehammer - 40k Die Modifier Research.md — reference doc on 40k 11th Edition die modifiers (see below).

Active goals

1. Die modifier support

Warhammer 40k's die-modifier rules (10th → 11th Edition changes, e.g. Cover now applying -1 to hit instead of a save bonus) are documented in Diehammer - 40k Die Modifier Research.md in this repo. Implementation sub-goals:

  • Stacking flat hit/wound modifier input, capped at net ±1.
  • Reroll mode selector: none / reroll 1s / reroll all failed / reroll all.
  • A critical-trigger layer keyed off unmodified natural 6s, for Sustained Hits, Lethal Hits, Devastating Wounds, and Anti-X.
  • An "ignore all modifiers" flag (Psychic).
  • An "auto-success, no roll" flag (Torrent).

2. Clarify roll context in the UI

Currently the app lets you roll to hit, to wound, and armor save, but it's not always visually clear which action is being rolled. Update the graphics so the current roll phase (hit / wound / save) is unambiguous.

3. Android port

Plan: use the official Swift-on-Android toolchain, not a transpiler like Skip.

  • Set up the Swift-on-Android toolchain.
  • Extract the game logic (dice/modifier engine from Model/) into a shared Swift library, decoupled from SwiftUI.
  • Rewrite the UI natively in Jetpack Compose, consuming the shared Swift library.

Task tracking

Day-to-day task tracking for this project lives in the Obsidian vault under 👨🏼‍💻 Professional Development.md, in the "Game Dev: Diehammer" section. This file is meant as durable project context, not a live task list — check Obsidian for current status.