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

+18 -70
View File
@@ -27,77 +27,25 @@
"layers": [
{"name": "sprite"}
],
"nulls": [
{"name": "Head"},
{"name": "Face"},
{"name": "Torso"}
],
"defaultAnimation": "Idle",
"animations": {
"Idle": {"layers": [{"layer": 0, "frames": [{"region": 0}]}]},
"Walk Left": {
"length": 4,
"layers": [
{
"layer": 0,
"frames": [
{"region": 1, "interpolation": "linear"},
{"region": 2, "interpolation": "linear"},
{"region": 3, "interpolation": "linear"},
{"region": 4, "interpolation": "linear"}
]
}
]
},
"Walk Right": {
"length": 4,
"layers": [
{
"layer": 0,
"frames": [
{"region": 1, "scale": [-100, 100], "interpolation": "linear"},
{"region": 2, "scale": [-100, 100], "interpolation": "linear"},
{"region": 3, "scale": [-100, 100], "interpolation": "linear"},
{"region": 4, "scale": [-100, 100], "interpolation": "linear"}
]
}
]
},
"Preview": {
"length": 16,
"layers": [
{
"layer": 0,
"frames": [
{"region": 1, "scale": [-100, 100], "delay": 4, "interpolation": "linear"},
{"region": 2, "scale": [-100, 100], "delay": 4, "interpolation": "linear"},
{"region": 3, "scale": [-100, 100], "delay": 4, "interpolation": "linear"},
{"region": 4, "scale": [-100, 100], "delay": 4, "interpolation": "linear"}
]
}
]
},
"Jump": {"layers": [{"layer": 0, "frames": [{"region": 5}]}]},
"Fall": {"layers": [{"layer": 0, "frames": [{"region": 6}]}]},
"Slide": {"layers": [{"layer": 0, "frames": [{"region": 7}]}]},
"Kick": {"layers": [{"layer": 0, "frames": [{"region": 8}]}]},
"Hurt": {"layers": [{"layer": 0, "frames": [{"region": 9}]}]},
"Crouch": {"layers": [{"layer": 0, "frames": [{"region": 10}]}]},
"Roll": {"layers": [{"layer": 0, "frames": [{"region": 11}]}]},
"Crawl Left": {
"length": 4,
"layers": [
{"layer": 0, "frames": [{"region": 12}, {"region": 13}, {"region": 14}, {"region": 15}]}
]
},
"Crawl Right": {
"length": 4,
"layers": [
{
"layer": 0,
"frames": [
{"region": 12, "scale": [-100, 100]},
{"region": 13, "scale": [-100, 100]},
{"region": 14, "scale": [-100, 100]},
{"region": 15, "scale": [-100, 100]}
]
}
]
}
"Idle": {"layers": [{"layer": 0, "frames": [{"region": 0}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}]}, {"null": 1, "frames": [{"pos": [0, -19]}]}, {"null": 2, "frames": [{"pos": [0, -11]}]}]},
"Walk Left": {"length": 4, "layers": [{"layer": 0, "frames": [{"region": 1, "interpolation": "linear"}, {"region": 2, "interpolation": "linear"}, {"region": 3, "interpolation": "linear"}, {"region": 4, "interpolation": "linear"}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22], "scale": [-100, 100]}, {"pos": [0, -23], "scale": [-100, 100]}, {"pos": [0, -22], "scale": [-100, 100]}, {"pos": [0, -21], "scale": [-100, 100]}]}, {"null": 1, "frames": [{"pos": [0, -19], "scale": [-100, 100]}, {"pos": [0, -20], "scale": [-100, 100]}, {"pos": [0, -19], "scale": [-100, 100]}, {"pos": [0, -18], "scale": [-100, 100]}]}, {"null": 2, "frames": [{"pos": [0, -11], "scale": [-100, 100]}, {"pos": [0, -11], "scale": [-100, 100]}, {"pos": [0, -11], "scale": [-100, 100]}, {"pos": [0, -10], "scale": [-100, 100]}]}]},
"Walk Right": {"length": 4, "layers": [{"layer": 0, "frames": [{"region": 1, "scale": [-100, 100], "interpolation": "linear"}, {"region": 2, "scale": [-100, 100], "interpolation": "linear"}, {"region": 3, "scale": [-100, 100], "interpolation": "linear"}, {"region": 4, "scale": [-100, 100], "interpolation": "linear"}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}, {"pos": [0, -23]}, {"pos": [0, -22]}, {"pos": [0, -21]}]}, {"null": 1, "frames": [{"pos": [0, -19]}, {"pos": [0, -20]}, {"pos": [0, -19]}, {"pos": [0, -18]}]}, {"null": 2, "frames": [{"pos": [0, -11]}, {"pos": [0, -11]}, {"pos": [0, -11]}, {"pos": [0, -10]}]}]},
"Preview": {"length": 16, "layers": [{"layer": 0, "frames": [{"region": 1, "scale": [-100, 100], "delay": 4, "interpolation": "linear"}, {"region": 2, "scale": [-100, 100], "delay": 4, "interpolation": "linear"}, {"region": 3, "scale": [-100, 100], "delay": 4, "interpolation": "linear"}, {"region": 4, "scale": [-100, 100], "delay": 4, "interpolation": "linear"}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22], "delay": 4}, {"pos": [0, -23], "delay": 4}, {"pos": [0, -22], "delay": 4}, {"pos": [0, -21], "delay": 4}]}, {"null": 1, "frames": [{"pos": [0, -19], "delay": 4}, {"pos": [0, -20], "delay": 4}, {"pos": [0, -19], "delay": 4}, {"pos": [0, -18], "delay": 4}]}, {"null": 2, "frames": [{"pos": [0, -11], "delay": 4}, {"pos": [0, -11], "delay": 4}, {"pos": [0, -11], "delay": 4}, {"pos": [0, -10], "delay": 4}]}]},
"Jump": {"layers": [{"layer": 0, "frames": [{"region": 5}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}]}, {"null": 1, "frames": [{"pos": [0, -19]}]}, {"null": 2, "frames": [{"pos": [0, -12]}]}]},
"Fall": {"layers": [{"layer": 0, "frames": [{"region": 6}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}]}, {"null": 1, "frames": [{"pos": [0, -19]}]}, {"null": 2, "frames": [{"pos": [0, -11]}]}]},
"Slide": {"layers": [{"layer": 0, "frames": [{"region": 7}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}]}, {"null": 1, "frames": [{"pos": [0, -19]}]}, {"null": 2, "frames": [{"pos": [0, -11]}]}]},
"Kick": {"layers": [{"layer": 0, "frames": [{"region": 8}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -22]}]}, {"null": 1, "frames": [{"pos": [0, -19]}]}, {"null": 2, "frames": [{"pos": [0, -11]}]}]},
"Hurt": {"layers": [{"layer": 0, "frames": [{"region": 9}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -10]}]}, {"null": 1, "frames": [{"pos": [0, -7]}]}, {"null": 2, "frames": [{"pos": [0, 0]}]}]},
"Crouch": {"layers": [{"layer": 0, "frames": [{"region": 10}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -15]}]}, {"null": 1, "frames": [{"pos": [0, -13]}]}, {"null": 2, "frames": [{"pos": [0, -8]}]}]},
"Roll": {"layers": [{"layer": 0, "frames": [{"region": 11}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -5]}]}, {"null": 1, "frames": [{"pos": [0, -3]}]}, {"null": 2, "frames": [{"pos": [0, 2]}]}]},
"Crawl Left": {"length": 4, "layers": [{"layer": 0, "frames": [{"region": 12}, {"region": 13}, {"region": 14}, {"region": 15}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -15], "scale": [-100, 100]}, {"pos": [0, -15], "scale": [-100, 100]}, {"pos": [0, -15], "scale": [-100, 100]}, {"pos": [0, -15], "scale": [-100, 100]}]}, {"null": 1, "frames": [{"pos": [0, -13], "scale": [-100, 100]}, {"pos": [0, -13], "scale": [-100, 100]}, {"pos": [0, -13], "scale": [-100, 100]}, {"pos": [0, -13], "scale": [-100, 100]}]}, {"null": 2, "frames": [{"pos": [0, -8], "scale": [-100, 100]}, {"pos": [0, -8], "scale": [-100, 100]}, {"pos": [0, -8], "scale": [-100, 100]}, {"pos": [0, -8], "scale": [-100, 100]}]}]},
"Crawl Right": {"length": 4, "layers": [{"layer": 0, "frames": [{"region": 12, "scale": [-100, 100]}, {"region": 13, "scale": [-100, 100]}, {"region": 14, "scale": [-100, 100]}, {"region": 15, "scale": [-100, 100]}]}], "nulls": [{"null": 0, "frames": [{"pos": [0, -15]}, {"pos": [0, -15]}, {"pos": [0, -15]}, {"pos": [0, -15]}]}, {"null": 1, "frames": [{"pos": [0, -13]}, {"pos": [0, -13]}, {"pos": [0, -13]}, {"pos": [0, -13]}]}, {"null": 2, "frames": [{"pos": [0, -8]}, {"pos": [0, -8]}, {"pos": [0, -8]}, {"pos": [0, -8]}]}]}
}
}