The existing handlers produce festo-format responses, which Qubell rejects
(gametop.regist / get_pdata fail with r=7 in the game log and the card login
falls back to guest). This adds a Qubell handler set and routes requests by
the model date: builds older than 2018090000 (prop / Qubell / clan) use the
new handlers, festo is untouched.
Qubell layout follows bemaniutils' bemani/backend/jubeat/qubell.py:
- shopinfo.regist / gametop.get_info: shared info block wrapped in data/info
- gametop.get_pdata / regist: full profile (info, last, item lists, jbox,
digdig, unlock stage list, born, ...). get_pdata creates the profile when
the card is already bound on the CORE side, since Qubell then never calls
gametop.regist and treats status 109 as a login failure.
- gametop.get_mdata: musicdata list with play/clear/fc/ex counts, score,
clear flags and ghost bars; all scores returned on partition 1.
- gameend.regist: parses info counters, last settings, item lists, jbox,
events, digdig/unlock state and result tunes into qubell_profile /
qubell_score collections.
- gameend.final, lobby.check, demodata.get_news / get_hitchart,
recommend.get_recommend: minimal valid responses.
Tested with jubeat Qubell L44:J:B:A:2017062001 on bemanitools: boot, card
registration, login, three-song credit, save and re-login all work.