fix(detector): Recalibrate sparkle click offset to resolve targeting issue with overlapping students

This commit is contained in:
Nik Afiq 2026-07-17 00:14:00 +09:00
parent 027e55f7a9
commit b4bad17813

View File

@ -11,7 +11,37 @@ OCR_SHOT_PATH = os.path.join(config.SCRATCHPAD_DIR, "ocr_live.png")
OCR_UPSCALE = 3 OCR_UPSCALE = 3
SPARKLE_SHOT_PATH = os.path.join(config.SCRATCHPAD_DIR, "cafe_live.png") SPARKLE_SHOT_PATH = os.path.join(config.SCRATCHPAD_DIR, "cafe_live.png")
SPARKLE_CLICK_OFFSET = (75, 47) # Ported byte-for-byte from the original scripts/detect_and_click.py without
# recalibration (see plan.md's Phase 6 writeup) -- (75, 47) was never
# actually re-verified against this project's own real gameplay.
#
# Real-usage bug (2026-07-16, reported live with a screenshot): when two
# students stand close together, (75, 47) overshoots past the intended
# target's own head and lands on a DIFFERENT, closer student's body instead
# -- the click doesn't register as a pat there, so find_cafe_sparkle() just
# matches the same still-showing sparkle again next iteration, repeatedly
# clicking nearly the same point for the rest of the room's budget (confirmed
# live: 13 of 16 "pats" in one run clustered within a ~10px box, all
# ineffective).
#
# First recalibration attempt, (0, 0) (raw template-match center, no
# offset), was also wrong -- reported live ("it is clicking the actual
# sparkle instead of the student head"): a coincidental ambient thought-
# bubble animation at the raw-center test position was misread as a hover
# confirmation, when the raw sparkle position is not actually within the
# character's clickable area.
#
# Properly recalibrated live the same day via numbered candidate-point
# overlays (screenshots with several labeled offset options drawn on a real
# live sparkle, user picked the one actually landing on the head each time)
# against two independent real students in different poses (a sitting
# arcade-cabinet pose and a lying-down couch pose) -- both converged on
# roughly the same small offset, confirmed by the user directly on-screen
# rather than inferred from a single ambiguous signal like the (0,0) attempt
# was. (75, 47) was oversized (the close-together overshoot bug) and (0, 0)
# was undersized (clicks the sparkle glyph itself, not the character) --
# (50, 15) is the empirically-confirmed middle ground.
SPARKLE_CLICK_OFFSET = (51, 15)
SPARKLE_THRESHOLD = 0.97 SPARKLE_THRESHOLD = 0.97
# The cafe camera's zoom level isn't reset before farming, and the sparkle # The cafe camera's zoom level isn't reset before farming, and the sparkle