ACCESSICRUSH 0.8.19 BETA
An unofficial, speech-only accessibility mod for Candy Crush Saga on Windows.

SUPPORTED GAME AND REQUIREMENTS
- Candy Crush Saga from Microsoft Store, version 1.3390.1.0, Windows x64.
  This beta checks the exact game executable. Other versions are not supported;
  a Store update may require a new mod build. Game files are not included.
- Windows 10 or Windows 11, 64-bit, with Windows PowerShell and Windows Script Host.
- NVDA running before you start. Tolk and the NVDA controller are included.
- Microsoft Edge WebView2 Runtime for Facebook sign-in. It is normally already
  installed on Windows. If missing, install the Evergreen Runtime from:
  https://developer.microsoft.com/microsoft-edge/webview2/
- Python and the helper's .NET runtime are bundled. You do not need to install them.
  The bundled Python 3.7 runtime is an older compatibility dependency for this
  beta's Frida bridge; it is private to this folder and does not replace Python.

INSTALLATION AND AUTOMATIC START
1. Extract the entire ZIP to a permanent folder you can write to, for example
   Documents\AccessiCrush. Do not launch it from inside the ZIP.
2. Start NVDA. If updating, close the game and run Stop-For-Update.cmd from
   the new download before replacing the old files.
3. Open Install.cmd in the extracted folder. The accessible console reports any
   problems. No administrator access is needed.
4. The installer checks the game version, registers a silent watcher at Windows
   sign-in for your Windows user, starts it now, and creates a desktop shortcut
   named Candy Crush - AccessiCrush Beta.
5. Open Candy Crush normally, or use that shortcut. The watcher attaches when
   Candy Crush is focused. Initial discovery can take several seconds. You hear
   Connecting to Candy Crush, then AccessiCrush ready.

Keep the extracted folder in place. To move it, run Disable-AutoStart.cmd first,
move the folder, and run Install.cmd in its new location. Install does not copy
files elsewhere, patch the game's installed files, or change audio routing.
Only one watcher and one reader run at a time. Replacing an older installation
requires stopping its watcher/reader before starting the new copy.
The idle watcher uses Windows PowerShell, so closing the game releases the
bundled Python runtime. Automatic attachment remains available for the next launch.
For an older installation whose runtime is locked: extract this download into a
separate folder, run its Stop-For-Update.cmd, then replace the old files. Run
Install.cmd from the final location after updating.

ALTERNATIVE LAUNCHERS
- Play-Candy-Crush.vbs: start the watcher and open the game together.
- Start-AccessiCrush.vbs or Watch-AccessiCrush.vbs: start the silent watcher now.
- Attach-Now.vbs: attach once to an already open game, without enabling startup.
- Stop-For-Update.cmd: stop AccessiCrush readers, watchers and login helpers.
- Disable-AutoStart.cmd: remove the sign-in startup entry and stop all mod helpers.
To remove the beta, disable startup, close the game/reader, delete its desktop
shortcut, and delete the extracted folder. Your Candy Crush save is separate.

FIRST LAUNCH, TERMS AND NATIVE ACCOUNT SCREENS
The first-run Terms of Use screen is announced before board/menu discovery.
Windows-native dialogs use stable automation IDs and localized captions for
detection. Game-rendered legal panels use native scene/control names, including
Terms of Use, Privacy Policy, checkboxes and Accept/Continue when present.
Use Tab/Shift+Tab (or arrows on game-rendered panels), then Enter to activate a
control. Accept only if you agree, or close the game. No consent control is
automatically activated. AccessiCrush continues after the dialog closes.
Native account/email screens also use ordinary Tab, Shift+Tab and typing. Do not
hold the NVDA modifier to navigate. The mod never supplies your credentials or
accepts terms/permissions for you.

FACEBOOK SIGN-IN
Choose Continue with Facebook in the game's account screen. The bundled helper
opens an accessible, modern Facebook window automatically, replacing the old
blank sign-in experience for that attempt. Choose your cookie preferences,
enter your credentials yourself, and review Facebook's Continue/permissions
screen. You may need to choose Continue even if you have used this game before.
The helper returns the completed login to the game's existing handler and closes.
Close the helper window to cancel; the game receives cancellation.
The helper checks the callback origin/path and the original state parameter when
present. Credentials, cookies and complete login URLs are never written to mod
logs. The browser uses a temporary isolated profile and attempts to delete it after
exit; a profile still locked by WebView2 can remain under your Windows Temp folder
in AccessiCrush-Facebook. It is not included in this archive.
If an old blank Facebook window was already open before attaching the mod, close
it and choose Continue with Facebook again so the helper can capture a fresh
request. Facebook/King account linking, server sync and friends permissions are
controlled by those services. Check your account and level after signing in;
this mod does not merge accounts or promise that separate saves will be merged.

GAMEPLAY KEYS
- Arrow keys: explore one grid cell at a time. Row and column numbers start at 1.
- Space or Enter: select a candy; select an adjacent candy to attempt a swap.
- Shift+Arrow: attempt a direct swap in that direction.
- Backspace: cancel selection. Escape also cancels a selected candy.
- R: repeat the current candy.
- W: read the current row. C: read the current column.
- S: read moves remaining, objective counts, score and moves made.
- A: read the immediate cell above, right, below and left, without moving.
- Shift+A: read up to two cells in each direction. Holes/edges are explicit.
- B / Shift+B: next / previous blocker, starting nearest to your current cell.
- O / Shift+O: next / previous objective-related square, starting nearest.
  B and O report locations without changing your cursor or selected candy.
- H / Shift+H: next / previous supported special-match clue. The clue gives a
  shape, reference row/column and approximate area. It never gives the swap,
  selects candies, ranks moves, or plays a move for you.
- M / Shift+M: next / previous move-area clue, speaking one reference cell
  without revealing the swap. Your cursor and selection stay unchanged.
- F3: open game settings.
- T: optional repeat of the last tutorial text. Tutorials/popups normally speak
  automatically; you do not have to press T to discover them.
- F1: spoken key help. F2: pause/resume mod keyboard controls.
- F5: request background rediscovery if the reader appears stale.
- Ctrl+Alt+F12: stop the reader while Candy Crush is focused.
- Tab during gameplay: describe the current cell.
With no candy selected, Escape uses the current menu's Back/Close action when
available, otherwise it goes to the game normally.

MENUS, TABS, POPUPS AND SLIDERS
- Tab / Shift+Tab: next / previous item. Arrows also navigate menu items.
- Enter / Space: activate the focused item.
- Escape: Back or Close when available.
- R or S: repeat the current menu/popup description and selected item.
- Page Down / Page Up: scroll a list, then use Tab to explore visible items.
  Scrolling uses the native mouse wheel and restores the pointer; no click occurs.
- Left / Right on a slider: adjust it. Up/Down or Tab chooses another item.
- In the player-name editor, Enter begins typing. Tab returns to Save, Shift+Tab
  to Cancel, and Escape cancels editing. Activate Save explicitly to save.

Events, Social and Pins announce that their tab is open. Their item lists omit
map/HUD controls behind the tab. Back to level map and explicit Switch to ... tab
items provide navigation. A popup announces its own title and the underlying tab
when known; only the popup's controls are exposed. Closing it announces Popup
closed and the restored tab. Nested popups expose the innermost detected dialog.
Starting boosters announce descriptions, availability and selection when native
data is available. Activating Play starts a level and may use a life.
Purchases, sending lives, accepting gifts and adding friends are real game
operations. The mod does not automatically confirm them or Store purchases.

NVDA AND ORIGINAL GAME AUDIO
The mod has no visible overlay or console while playing and uses Tolk speech.
The game remains its original window and keeps its original sound. NVDA modifier,
Ctrl, Alt and Windows shortcuts pass through. NVDA+R is an NVDA shortcut, not a
mod key: after it opens a recognition result, arrows and other keys stay with
NVDA until you close that result with Escape. The mod itself does not use OCR.
If you Alt+Tab to another program, its keys are not captured by the mod.

BOARD DETAILS AND OPTIONAL ASSISTANCE
Boards can have irregular shapes and holes. Adjacent means directly touching
above/below/left/right; a missing cell cannot be selected or swapped into.
Horizontal striped candies announce that they clear a row; vertical striped
candies announce that they clear a column. Special effects can extend much farther
than the two-cell A shortcut.
Blockers and objectives differ. B includes known obstacles and locks, licorice
swirls and waffles; jelly alone is an objective layer. O locates active goals
with positive remaining counts when native position data is available. A layered
objective count may exceed the number of squares. Count-only, unspawned or
unsupported targets are reported as having no located squares; S still reads counts.
H uses the game's cached legal swaps plus local ordinary-candy geometry. It names
four/five in a straight line, the actual length for longer lines, L/T/cross patterns,
and optional square geometry. It checks both orientations. It does not predict
cascades, special-candy combinations or every later-game rule. A missing clue
does not mean there are no legal moves. Wait for the board to settle.
Settings include Announce clears, off by default. Turn it on to hear native clear
counts and known blocker damage. It does not count falling candies as clears.
Include square-pattern clues is also off by default and experimental: finding
2-by-2 geometry does not guarantee that the current game rules award a fish.

BETA LIMITS AND TROUBLESHOOTING
This is a beta for one exact game build. Not every later level, timed event,
server offer, friend-request state or blocker variation has been tested. Menu
scoping was checked against recorded Events/Social/Pins and nested-popup data.
Facebook's corrected modern-browser login worked in a live user test; service
changes can still break it. Startup terms and keyboard handoff have automated
checks, but were not tested by deleting a player's real save or resetting the app.
If nothing speaks: check NVDA is running, focus the game, wait for discovery,
then try Attach-Now.vbs. F2 may have paused controls; F5 can refresh stale data.
Background Windows Store apps may suspend; bring the game to the foreground.
Do not reset/reinstall Candy Crush just to troubleshoot this beta: local boosters
and other device data may be lost. Game sound/device routing is not modified.
BUG REPORTS AND LOG LOCATIONS
Logs are in the extracted AccessiCrush folder, beside Install.cmd and this README,
not inside the runtime folder. Example: Documents\AccessiCrush\gameplay.jsonl.
On an installation at C:\AccessiCrush-Beta they are C:\AccessiCrush-Beta\gameplay.jsonl,
C:\AccessiCrush-Beta\accessicrush.log and C:\AccessiCrush-Beta\autoattach.log.
After reproducing a problem, close Candy Crush so the mod releases its files.
Attach these files to your bug report if present:
- gameplay.jsonl: speech, menus, board state and input diagnostics.
- gameplay.jsonl.1, .2 and .3: older gameplay logs, useful if the event has rotated.
- accessicrush.log: connection and error details.
- autoattach.log: automatic startup, attachment and shutdown details.
Include the mod/game versions, screen or level, approximate time, keys pressed,
what you expected and what you heard. For an unnamed control, leave that screen
open if convenient and report nearby text; a log alone may not identify its action.
Send reports using https://lillaire.net/#contact and its Attach files control.
Attach up to five files totaling 10 MiB; ZIP larger logs or send fewer files.
Logs can contain spoken game text, player names, messages and board data. Review
and redact personal information before sharing. Do not send passwords, login URLs,
save files or your entire runtime folder. No logs are uploaded automatically.
No personal logs, save data, account details, tokens or runtime caches are bundled.

CONTENTS AND CREDITS
Source scripts, native-data bridge, portable Python/Frida, Tolk/NVDA controller,
modern Facebook helper and its .NET runtime, install/startup scripts and licenses
are included. See THIRD-PARTY-NOTICES.txt, LICENSE-Frida.txt, runtime/LICENSE.txt,
speech/ and facebook/ for third-party licensing.
AccessiCrush is unofficial and is not endorsed by King, Meta or Microsoft.

0.8.1 input fix: native-window checks run on a separate background thread.
Refreshing a confirmed game window no longer passes keys through or blocks input.
The arrow-repeat limiter applies to held keys, not separate quick taps.

0.8.2 popup fix: native named unlock/tutorial actions are exposed even when
their control type is not registered as a CButton. Actions use visible native
entity positions through normal mouse input, restoring the pointer afterward;
no OCR or image matching is used. Popup speech takes priority over queued
tutorial speech, and empty menus no longer repeat their description on each key.

IN-LEVEL BOOSTER KEYS (0.8.19 BETA)
Top-row 1 through 9 select the corresponding visible booster, ordered left to
right in the game's booster bar, including locked slots. The name, stock and
instructions are spoken. Selection alone does not click or spend a booster.
For Lollipop Hammer and Striped Brush: select its number, explore a square with
ordinary arrows, then press Enter (or Space) to activate and target it.
For Free Switch: select its number; choose the first candy with arrows and Enter,
then an immediately adjacent candy and Enter. Only the final Enter sends input.
For UFO and Party Booster: select its number, then press Enter to use one immediately.
Escape or Backspace cancels selection. Shift+Arrow cannot swap while a booster is
selected. A board or move-count change cancels a pending use. Starting boosters
still use the level briefing controls and are separate from these number keys.
Locked, zero-stock or unknown-stock boosters are not clicked; no shop is opened.
A visible timed-booster clock can permit a timed use without an item count.
First-use instructions can open before targeting. Dismiss that native popup and
resume targeting; an already selected booster is not activated a second time.
Booster controls and targeting use native entities, counts and the game's own
coordinate conversion, followed by ordinary pointer input. No OCR is used.
Selection, target sequencing, empty-stock guards and cancellation passed automated
tests. Exact booster consumption/effects still require live player validation;
the developer did not spend a player's boosters to run the tests.
The out-of-moves dialog now announces extra-move quantity, gold-bar cost and your
balance together. Close, Play on, gold-bar options and progress information have
explicit labels. Closing the offer may lead to a separate game confirmation.

0.8.4: Overlapping popup roots are ranked by their native render-layer depth.
The in-level Candy Shop exposes its Close action, offer contents, cash prices,
gold balance and scrolling, without exposing the disabled extra-moves offer
behind it. Closing the shop restores and announces the underlying dialog.

0.8.5: Shop navigation caches static offer icons and the Close entity for up to
five seconds, invalidating on popup, offer text/control or viewport changes.
Purchase activation still refreshes the shop data. Pointer targeting now uses
physical DPI coordinates and aspect-preserving centered game-area mapping, with
a short press/release interval. This fixes Close and off-center booster targets
in wide windows. A live Close test returned the shop to Out of moves; repeated
isolated shop reads measured about 0.06 seconds on the development machine.

0.8.6: Level selection follows the native loaded episode catalog as you progress,
instead of assuming the first map. Ordinary menu navigation no longer runs full
memory discovery. Level selection keeps its position across map refreshes.

0.8.7: M speaks a reference cell near a legal move, without revealing the swap.
It uses the native game move list. Reverse directions
of the same swap count once. H keeps its less detailed special-pattern clues.
Hints never make a move, use a booster, or predict cascades.

0.8.8: Team details, member cards, Team Clash tabs, ranks and shield counts have
contextual labels. Information and milestone sheets hide the event controls
behind them and use their own Close action. Event-card duplicate Open buttons
are removed. Milestone booster durations are readable; exact booster icon types
are not yet identified on this event sheet.

0.8.9: Team feed request-lives and reaction icons have explicit labels from native
resources. Reactions include the update text. Feed updates are read-only entries;
Enter repeats them without trying to activate a disabled game button.

0.8.10: M and Shift+M cycle forward and backward through move-area clues, like
O/Shift+O and H/Shift+H. F3 opens settings. Clues still reveal only a reference
cell and never move your cursor, select a candy, or make a swap.

0.8.11: Mod navigation labels stay in English across installed game languages.
Native localization keys and caption mappings identify translated controls;
player names and feed messages retain their original text. This is stable-label
support, not a fully translated mod. Unknown server-generated variants can still
require fixes.
Scene changes now trigger bounded background recovery without replaying swaps
or purchases. F5 requests the same background recovery. Stale candy and booster
selections are cleared when the board changes.
First-run legal detection supports localized Windows controls and the native
ServiceLayerPopup/AcceptTerms panels, including links and checkbox state when
exposed. Tests use translated fixtures and simulated first-run states; a fresh
installation has not been live-tested for this release. No save was reset.

Map models created after the reader attaches are tracked automatically. Missing
level lists can recover through the same bounded background discovery.

0.8.12: Startup Play and sign-in controls are exposed after terms; the decorative
logo is excluded. Swaps and booster coordinates no longer require an optional
input proxy that is absent on some installations. The actual native board input
handler receives the same down/move/up sequence. This backend passed simulated
event tests; a live swap on the affected Lenovo installation was not performed.
Closing the game releases the reader/runtime, including when Windows keeps the
game process suspended. The idle watcher uses Windows PowerShell. Install and
Disable-AutoStart stop old helpers; Stop-For-Update is included for locked updates.

0.8.13: Discovery has up to two minutes instead of failing after twenty seconds.
A delayed startup speaks one progress notice; accessicrush.log records elapsed
time, memory read and candidate counts every five seconds. Failed initialization
releases its bridge hooks and session before retrying. Automated checks cover
slow discovery, timeout, cancellation and cleanup; the reported affected computer
has not yet been retested. Keep the game focused while connecting.

0.8.14: More verbose discovery diagnostics: Windows/Python/Frida versions, CPU
count, cache rejection reasons, bridge loading/configuration stages, memory-read
failures, scan speed, region properties and counts of objects found. The log
distinguishes a slow scan from empty results or a failure after scanning. These
diagnostics do not establish a cause until the affected PC is retested.

0.8.15: Native age/date-entry forms and generic native editable/modal dialogs
receive keyboard handoff, including before game discovery. Detection uses UI
control types, identifiers and selected localized prompts, never OCR. The player
enters their own age and activates confirmation; nothing is filled or accepted
automatically. Regional age gates passed simulated UI tests but are not live-tested.
Automatic popup, tutorial and gameplay notices queue without requesting speech
interruption; countdown-only popup updates are suppressed. Manual navigation and
Repeat can still interrupt, and the screen reader's own settings still apply.
Native filled-star and sugar-star artwork is read on supported result panels;
empty outlines and unrelated icons are excluded. Tests use native asset rules and
simulated results; a newly completed level has not been live-tested in this update.
On the map, Page Up scrolls toward earlier levels and Page Down toward later ones.
These send the game's normal wheel input and do not unlock or start levels.
Earlier levels is a collapsed group for older loaded map sections: Enter expands,
Enter again or Escape collapses it. Scroll earlier to load sections not present.
Live testing navigated from the level-31 area back to levels 1-10 without playing.
Episode labels are spoken when supplied by native text or identified special
introductory map metadata. Some current map scenes have no exposed episode name;
reused decoration filenames are not treated as episode names.
Exposed narrative localization text is retained and queued even if it disappears
quickly; T can repeat the last narrative when no tutorial is available. No cutscene
is replayed, fabricated, paused or skipped. A level-10 cutscene in this current
Store build has not been confirmed, and textless video is not described.

0.8.16: Daily Stamps introduction is isolated from the screen behind its native
input blocker, so a background chest is no longer offered as an unnamed action.
Added native Daily Stamps scene names from game resources. Chest buttons say
View [tier] chest rewards, matching the game's information-tooltip action rather
than claiming a reward. Reward tooltips have an isolated native Close/back action.
The introduction was checked live without activating Play or the chest; tooltip
navigation was checked with captured/simulated native UI. Unknown-control reports
now include the native control path, kind and position for diagnosis.

0.8.17: Includes the Daily Stamps available-card information screen as well as
the main screen. Chest reward-information actions use validated normal pointer
input, keeping the pointer in place while the tooltip is active and restoring it
when dismissed. Opening and closing the information tooltip was tested live;
no reward was claimed. Durations and quantities are announced as reward previews.
Individual reward types are not exposed by this reader yet and are explicitly
reported as unavailable, rather than guessed from unidentified icon data.

0.8.18: Pointer actions check the real window at the destination before and after
moving the cursor. If another window or the desktop would receive the click, no
button input is sent. Logs include the planned screen point and game geometry.
For the Booster Unlocked Sweet confirmation only, an overlapping Explorer XAML
window can trigger one temporary game-window adjustment. The mod refreshes and
validates the same confirmation, clicks only inside the game, then restores the
original window placement even on error. This can briefly resize the game.
If you switch away during this adjustment, restoration waits until Candy Crush
is focused again, so it does not activate the game over another application.
The same smaller-window confirmation sequence was tested live: Sweet dismissed,
focus stayed in Candy Crush, and the original window placement was restored.
The automatic routing/restoration and no-click guards also passed targeted tests.
No other dialog or purchase uses the temporary-placement fallback.

0.8.19: The Having fun / Rate Candy Crush prompt exposes its native close icon
as Not now. Close rating request, plus Rate Candy Crush, opens the rating screen.
Not now is selected first, and Escape closes the request. The map behind it is
not navigable while this popup is open. The controls were verified against the
live scene and captured-screen tests; no rating action was activated or submitted.
The covered-window fallback can also handle these explicit rating-dialog actions,
with restoration deferred while an external rating screen has focus. It does not
apply to purchases or legal consent. Other occluded clicks remain blocked.
