The opponents come back to life: the friendly refresh, open string beds, and a steadier chase
Oliver's batch, delivered in dependency order. "The opponents look pretty harsh, almost already pre-zombie" — so BOTH tennis opponents got a new identity: warm skin, human eyes, an easy near-smile, rolled anchor-first so every later sheet inherits the face. The male's bounce pair also ADOPTS the female's palm-out posture (his old crouched receiver stance was the wrong pose for bouncing a ball — her better one is now the shared convention), and the pre-serve ball was re-measured onto the drawn palms: BOUNCE_IDLE's oDx 0.45 -> 0.24 / oApex 0.55 -> 0.72 for his close carry, with her wider reach riding TOURS (oDx 0.48 / oApex 0.73) the same way the player's pair already does. "parts of the body as well as the inner of the racket are solid" — the beds were the cutter's own doing: _fine.key repaints enclosed magenta pale grey (protection against accidental magenta strings), which defeated the beds we now draw magenta ON PURPOSE. key()/main() grow a bed=True switch (the famroll convention, used by _runroll and the refresh cuts); the run cycles' beds went from ~70% to ~44% opaque — strings, not paddles. Enclosed pockets of a roll's off-spec background (one sheet came back on blue) are scrubbed by corner-colour distance too. Both RUN CYCLES re-rolled off the friendly anchors: his landed 8 clean frames (racket +0.05..+0.30, one side); hers took four rolls — the gates caught a white background, a crossing racket, near-dup neighbours — and the keeper drew a 10-frame cycle, from which the best 8 were chosen by maximising the minimum adjacent stride (29.7%, smoother than his 22.7). o_run7/8 return to the SPR list. AND THE CHASE STOPS DITHERING (Oliver: "switching between a left and right movement increasingly faster the nearer the ball comes"): intercept() re-solves every frame and the earliest-reachable point jumps around its solution as the flight shortens, flipping his run direction each time. The CPU now commits to its stored target unless a fresh solve moves it by more than 0.35 m. SPRV 121, main.js v244, 66 tests, every opponent frame verified 200 in the live game. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dd8dbd04e9
commit
80bf6c4cee
41 files changed
+37
-14
No files matched your search
+7
-2
@@ -689,7 +689,8 @@ export const CUP_ROUNDS = [
|
||||
|
||||
export const TOURS = [
|
||||
{ id: 'men', name: "MEN'S SINGLES", tile: 'tour_m', sfx: null },
|
||||
{ id: 'women', name: "WOMEN'S SINGLES", tile: 'tour_w', sfx: '_f', dx: 0.46, apex: 0.78, tossDx: -0.59 },
|
||||
{ id: 'women', name: "WOMEN'S SINGLES", tile: 'tour_w', sfx: '_f', dx: 0.46, apex: 0.78, tossDx: -0.59,
|
||||
oDx: 0.48, oApex: 0.73 },
|
||||
];
|
||||
|
||||
// netW was the singles-stick width (10.06) while the court is drawn to the DOUBLES lines, so the
|
||||
@@ -1137,7 +1138,11 @@ export const POSE_TIME = 0.38;
|
||||
// opponent's ball out by his racket instead of under his palm. Both are FEEL KNOBS measured off the
|
||||
// drawn palm by eye — a skin-detector guess at the hand lands on a knee, so tune these by looking.
|
||||
export const BOUNCE_IDLE = { dx: 0.36, apex: 0.68, tempo: 3.6, // the player, drawn from behind
|
||||
oDx: 0.45, oApex: 0.55 }; // the opponent, drawn from the front
|
||||
// the opponent, drawn from the front. Remeasured 2026-08-14 for the
|
||||
// friendlier anchor art: HIS new palm-out bounce holds the ball close
|
||||
// (palm +0.24 m, 0.83 m up); HER reach stays wide — her pair rides
|
||||
// TOURS like the player's dx/apex already does.
|
||||
oDx: 0.24, oApex: 0.72 };
|
||||
|
||||
// generated sprite sheets: the idle pose is this many pixels tall; all scales derive from it
|
||||
export const SPRITE_H = 224; // 2x remaster (was 112). RES is 3, so the player at the baseline
|
||||
|
||||
Reference in new issue
Block a user