# Angry Birds Chrome preservation

This player runs the preserved original Angry Birds Chrome client, version
**2.3.4.4**, developed by Rovio with the original Google Chrome/PlayN team. It is
the original browser edition, using GWT 2.4.0 compiled JavaScript, its original
level data, artwork, physics, and audio. It does not use the Nokia phone emulator.

## Preserved material

- Preservation repository:
  <https://github.com/angrybirds-s4uk/angrybirdschrome-source-html5>
- Pinned commit: `e2ce95b41d3917560a2501f1478d6749e1b92b65`.
- Original port developer's account: <https://j15r.com/projects/angrybirds/>.
- Original GWT client is preserved byte-for-byte as
  `fowl/A7D2865EA92B17405E65BA89B782F73B.cache.js`, copied from the repository's
  `cache-original.js` file, not its modified `cache.js`.
- Original client SHA256:
  `532810aaebed90f3a7113e6054e41bde957b8ec5b823f8e539465d505e699182`.
- The `cors/fowl/`, `images/`, and `css/` resources are copied from that commit.

The game and assets remain proprietary to their owners. Preservation hosting or
availability in a public repository is not a grant of redistribution rights.

## Compatibility adapter

The new `index.html` and `player.js` replace the old surrounding promotional web
page. The GWT bootstrap's `onScriptDownloaded` callback invokes
`AngryBirdsPlayer.prepareSource` before evaluating the original compiled client.
The original client file on disk remains unchanged. The adapter makes these
explicit, limited changes in memory:

1. The startup host check accepts the local library host.
2. Web Audio uses current asynchronous `decodeAudioData`, `start`, `stop`, and
   gain APIs in place of removed 2012 methods. An external gain node implements
   the library's mute control without changing the game's own sound setting.
3. Retired side-banner and cloud-promotion frame functions are omitted. The
   wrapper omits Google Analytics, social widgets, obsolete AppCache helpers,
   and the retired external payment-loader script. Its page policy permits
   resource requests only to local content.
4. A startup notification connects the runtime to the library loading status.
5. The whole original canvas scales to the available screen. The old PlayN
   scene-layer and global mouse/touch coordinate paths both account for that
   display scale. Menus and the slingshot use the latter path.

The adapter does **not** change account state, payment responses, episode gates,
level locks, scores, stars, progression, or the original physics. Retired online
account services are unavailable. The original offline client decides which
content is playable; additional account or purchase content remains locked.

## Controls and saves

Use the mouse to pull the bird back from the slingshot and release it. The
original client's native pointer and keyboard handlers remain in control. The
parent bridge supports `game-status`, `game-mute`, and `game-focus` messages.
It does not invent a key-driven slingshot control.

The original client stores local progress in browser local storage on the
website's origin. No cloud account is emulated. Browser data clearing removes
those local saves.

## Verification

The original core checksum, prepared JavaScript syntax, unchanged account and
episode gates, canvas fitting, and both mouse/touch coordinate paths are covered
by `tests/angry-birds-player.mjs` in the website project. On 2026-10-22 the library
owner manually confirmed the Play menu, Poached Eggs level selection and a
slingshot launch after the global input fix. Automated browser access was blocked
by the browser tool's URL policy during the final check; a saved-score reload was
not separately verified in that final session.
