The hook turns as hard as the geometry needs, or not at all
A slice hooking onto a body two metres to the side flew a closed loop around it forever: 285 frames of the same circuit, never arriving, never falling. A constant turn rate has a constant turn radius (v/w = 2 m), and anything inside that circle cannot be reached however long the ball steers — while the hook pins vy at 0, so nothing else ends it either. A crowd is nothing but close bodies, which made the one place this weapon should shine the one place it hung. The rate is no longer a constant. An arc leaving along the current heading and passing through a body at distance d, bearing a, has radius d/(2 sin a), so the ball needs 2 v sin(a) / d — solved every frame, because the body is walking while the ball travels. sliceTurn stays as the FLOOR, which is what it was always really for: how wide the curl looks when there is room. Turning faster than needed is safe, the aim being re-solved each frame. Two things the maths cannot cover, so they are ruled out instead: a body behind the ball, which no tangent arc reaches at any rate (sliceArc), and a target that walks out of reach mid-hook (sliceHookT, a hard 0.7 s licence to steer). An endless orbit is now impossible by construction rather than by the geometry happening to work out. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99d84b2c9d
commit
e11ad30a63
3 files changed
+42
-11
No files matched your search
@@ -247,8 +247,19 @@ export const TUNE = {
|
||||
sliceHops: 2, // extra bodies one perfect serve hooks to. 2 => TRIPLE KILL is the ceiling
|
||||
sliceR: 6.5, // m the hook reaches for the next body. Wider reads as the game aiming for you;
|
||||
// much narrower and a spread-out crowd never chains at all
|
||||
sliceTurn: 11, // rad/s the ball swings onto the next one, and THE knob for how it looks: past
|
||||
// ~30 it snaps like a ricochet, under ~6 it sails wide before finishing the turn
|
||||
sliceTurn: 11, // rad/s the ball swings onto the next one: a FLOOR, not the rate. It is the knob
|
||||
// for how the shot LOOKS when there is room — past ~30 it snaps like a ricochet,
|
||||
// under ~6 it sails wide. The rate actually used is whatever the geometry needs
|
||||
// (see the hook), because a fixed rate has a fixed turn radius (v/w = 2 m here)
|
||||
// and ANY body inside that circle is unreachable: the ball flew a closed loop
|
||||
// around it forever, never arriving, never falling. A crowd is all close bodies,
|
||||
// so the one place the weapon should shine was the one place it hung.
|
||||
sliceArc: 120, // deg: the widest bearing off the ball's heading that can be hooked at all. No
|
||||
// single tangent arc reaches a body directly BEHIND the ball at any turn rate,
|
||||
// so past this the chain just ends and it plows on
|
||||
sliceHookT: 0.7, // s a hook may steer before it lets go. The geometry above is solved fresh every
|
||||
// frame and still cannot promise an arrival when the target WALKS, so this is the
|
||||
// backstop that makes an endless orbit impossible by construction, not by maths
|
||||
// The schedule calls the DUEL, not the tin: weapons are only ever won, but a duel comes round
|
||||
// on its own so there is always a chance at one. Fires off the next hand-cleared wave.
|
||||
duelFirst: 2, // game after which the first scheduled sudden-death duel is called
|
||||
|
||||
Reference in new issue
Block a user