Weapons built from traits, fashion, Hourglass, About tab, and Ithaca

- Every attack is now assembled from traits on its definition instead
  of per-weapon code: an anchor and path (thrusts, out-and-back, arcs),
  shared flight physics (gravity, drag, acceleration, homing, and one
  wall response: end, burst, stick, crawl, bounce, stop, pass, return,
  latch), and flags like bouncy, drifting, tethered, orbiting, instant
  and arming. Melee are projectiles too.
- Shots have a lifetime and a fade (when damage bottoms out). Range is
  speed times lifetime. Ricochets and the Vacuum wind lifetime back.
- The Vacuum pulls anyone's shots, and its airblast flips them out
  along the aim, claiming enemies' (fading into your colour).
- New trinket: Hourglass, longer projectile lifetime and range. Ropes
  and chains lengthen with it and the Accelerator.
- Fashion: 23 items worn on the head, face or torso, chosen in Profile.
- Flamethrower flames hit continuously, the whip coils and sweeps,
  bouncing shots roll over ramps, and Ricochet relights grenade fuses.
- Profile tab, colour tooltips, option hints on every setting, an
  About tab with credits and links, and the Ithaca font.
- Loadouts lock once readied, tomatoes clear with the match, and the
  round-over pause is 4 seconds.
- CC0 license. Tools and CLAUDE.md are no longer tracked, and the web
  shell moves to web/.
This commit is contained in:
shweet committed 2026-11-10 15:27:12 -05:00
1 parent e55596b276
commit e9d8cac926
101 files changed
+5787 -7148

No files matched your search

+4 -4
View File
@@ -7,7 +7,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# The simulation must run identically on every platform (desktop and web play together), so floating point is kept
# strict: no fusing multiplies and adds (GCC and arm64 Clang do by default), no fast-math reordering. The maths
# library's transcendentals are replaced by src/dmath.h; tools/determinism_check.sh checks it all holds.
# library's transcendentals are replaced by src/dmath.h.
if(MSVC)
add_compile_options(/fp:precise /fp:contract-)
else()
@@ -77,12 +77,12 @@ if(EMSCRIPTEN)
"--preload-file=${CMAKE_SOURCE_DIR}/resources/gfx@/resources/gfx"
"--preload-file=${CMAKE_SOURCE_DIR}/resources/font@/resources/font"
"--preload-file=${CMAKE_SOURCE_DIR}/resources/sfx@/resources/sfx"
"--shell-file=${CMAKE_SOURCE_DIR}/tools/web_shell.html"
"--pre-js=${CMAKE_SOURCE_DIR}/tools/web_pre.js")
"--shell-file=${CMAKE_SOURCE_DIR}/web/web_shell.html"
"--pre-js=${CMAKE_SOURCE_DIR}/web/web_pre.js")
endif()
if(RPG_NODE)
target_link_options(smack_a_brother PRIVATE -sENVIRONMENT=node -sEXIT_RUNTIME=1
"--pre-js=${CMAKE_SOURCE_DIR}/tools/node_pre.js"
"--pre-js=${CMAKE_SOURCE_DIR}/web/node_pre.js"
"--embed-file=${CMAKE_SOURCE_DIR}/resources/gfx@/resources/gfx"
"--embed-file=${CMAKE_SOURCE_DIR}/resources/font@/resources/font")
endif()