Retail compatibility patches
============================

The stock retail MapEnded(52) handler freezes GameScene, but it does not open
the map loader and disconnect reason 18 does not reconnect this client build.
BattleSpades reloads maps and modes over the existing authenticated connection.
InitialInfo(114) itself opens the stock LoadingMenu through GameClient's
network handler; no client patch is required for this transition trigger.
The optional session_transition_patch.py enters LoadingMenu earlier and
sends ClientInMenu(110), which the server accepts but does not require.
The same patch clears any pending OpenAL error before each ALURE stream call.
Without it the stock client can orphan a music stream when a map changes and
then freeze (Not Responding) on the first menu sound after START; music and
ambience also fail to load with "Existing OpenAL error". Clients running the
older copy of this file need a restart after updating it.

The stock EditBoxControl also has no clipboard keyboard handler. The included
clipboard_input_patch.py adds Unicode Ctrl+V insertion at the current caret,
including the Join by IP field, without polling or background work.

parachute_key_patch.py routes the configured hover key (Z by default) through
the client's existing ClientData action bit when the normal parachute is
equipped. It does not replace Character.update or alter movement prediction.

The stock prefab selector expands each prefab list and then accidentally adds
that list's numeric ID again as a weapon. prefab_menu_patch.py removes those
weapon rows while preserving named prefabs and the optional flare-block tile.

Install in each retail client:

1. Copy session_transition_patch.py, clipboard_input_patch.py, and
   prefab_menu_patch.py beside the client's launcher. Copy
   parachute_key_patch.py into client/aoslib/.
2. In aoslib/run.py, import session_transition_patch before BootClass() creates
   the game manager. Import clipboard_input_patch after aoslib.gui is imported,
   and import prefab_menu_patch after the SelectClass module is available.
3. Immediately after GameManager construction in aoslib/run.py, add:

       from aoslib.parachute_key_patch import install
       install(self.manager)

4. Restart the retail client once.

All hooks are Python 2 compatible. They create no thread, perform no
update-loop file I/O, and open no second connection.
