Summary
Players have reported that "guild tickets" are no longer usable/purchasable
anywhere. Investigation shows this isn't a regression — the whole subsystem
was never implemented in Erupe.
In plain terms: guild members earn a "Ryoudan Ticket" item by playing Diva
Defense (interception quests), then spend it at a shop screen that turns out
to be physically anchored at the guild's dinner table — which is why players
describe it as tied to clan cooking (cuisine de clan). See the sections
below for how each part was confirmed.
What the ticket actually is (confirmed via Wii U ground-truth decompilation)
Item 1026 (猟団チケット / Ryoudan Ticket) is spent as currency in a
dedicated shop screen. Decompiling lb_ticket_getItem in the Wii U build
(MHF G Z2 v2064, real debug symbols, not guessed names) shows:
Lb_itemUse_expage(0x402, iVar5); // 0x402 == 1026 == Ryoudan Ticket
...
MhfItem_buyItem(uVar1, *(undefined4 *)(param_1 + 0x60), -iVar5);
iVar5 is a price computed from a per-context price table
(lb_shop_get_ticket_price_id, Lb_get_itemPrice) and uVar1 is the item ID
read from a shop catalog buffer populated by lb_shop_ticketPageInit.
Tickets themselves are earned via Diva Defense (interception) play —
Lb_get_ryoudan_ticket sums Ud_item_num_ck + Ud_stock_item_num_ck3 +
Ud_stock_item_num_ck3_expage (all UD/interception stock counters).
Why the shop is associated with cooking (not a mistranslation)
lb_shop_ticketPageInit's price/catalog lookup reuses the same three
"where is the player standing" values (0xca / 0xcb / 0xcc) as
lb_ryoudan_dinner_table_find_entry_id_by_stage — the function that detects
whether the player is standing next to the guild room's dinner table. Sharing
those values means the ticket shop can only be opened from that same
location, i.e. the shop UI is triggered at the dinner table. That's the
mechanical reason players associate "guild tickets" with clan cooking, even
though spending them doesn't involve cooking mechanics itself.
What's missing server-side
- No handler consumes item 1026 to grant a real item —
handleMsgMhfUseUdShopCoin
is a documented stub (docs/unimplemented.md).
server/channelserver/handlers_guild_cooking.go (the guild dinner/meal
registration system) has no ticket-shop-adjacent logic at all.
- The actual catalog contents (which items are purchasable, at what ticket
price) live in a data structure (SHOP_TBL_DATA2) that hasn't been mapped
yet — lb_shop_tbl_data_get is a large multi-branch dispatcher shared by
many unrelated shop screens, and the ticket-shop-specific branch/data still
needs isolating.
Next steps
These are three separable tasks, not one:
- Map the
SHOP_TBL_DATA2 structure and isolate the ticket-shop-specific
catalog entries (item IDs + ticket prices). Pure RE work.
- Implement
handleMsgMhfUseUdShopCoin (or whatever the real ticket-spend
packet turns out to be) against that catalog. Depends on (1).
- Decide whether/how to expose this via the existing
shop_items table
(a new shop_type?) or a dedicated table. A schema/architecture call that
doesn't strictly depend on (1) or (2).
Summary
Players have reported that "guild tickets" are no longer usable/purchasable
anywhere. Investigation shows this isn't a regression — the whole subsystem
was never implemented in Erupe.
In plain terms: guild members earn a "Ryoudan Ticket" item by playing Diva
Defense (interception quests), then spend it at a shop screen that turns out
to be physically anchored at the guild's dinner table — which is why players
describe it as tied to clan cooking (
cuisine de clan). See the sectionsbelow for how each part was confirmed.
What the ticket actually is (confirmed via Wii U ground-truth decompilation)
Item 1026 (
猟団チケット/ Ryoudan Ticket) is spent as currency in adedicated shop screen. Decompiling
lb_ticket_getItemin the Wii U build(
MHF G Z2 v2064, real debug symbols, not guessed names) shows:iVar5is a price computed from a per-context price table(
lb_shop_get_ticket_price_id,Lb_get_itemPrice) anduVar1is the item IDread from a shop catalog buffer populated by
lb_shop_ticketPageInit.Tickets themselves are earned via Diva Defense (interception) play —
Lb_get_ryoudan_ticketsumsUd_item_num_ck+Ud_stock_item_num_ck3+Ud_stock_item_num_ck3_expage(all UD/interception stock counters).Why the shop is associated with cooking (not a mistranslation)
lb_shop_ticketPageInit's price/catalog lookup reuses the same three"where is the player standing" values (
0xca/0xcb/0xcc) aslb_ryoudan_dinner_table_find_entry_id_by_stage— the function that detectswhether the player is standing next to the guild room's dinner table. Sharing
those values means the ticket shop can only be opened from that same
location, i.e. the shop UI is triggered at the dinner table. That's the
mechanical reason players associate "guild tickets" with clan cooking, even
though spending them doesn't involve cooking mechanics itself.
What's missing server-side
handleMsgMhfUseUdShopCoinis a documented stub (
docs/unimplemented.md).server/channelserver/handlers_guild_cooking.go(the guild dinner/mealregistration system) has no ticket-shop-adjacent logic at all.
price) live in a data structure (
SHOP_TBL_DATA2) that hasn't been mappedyet —
lb_shop_tbl_data_getis a large multi-branch dispatcher shared bymany unrelated shop screens, and the ticket-shop-specific branch/data still
needs isolating.
Next steps
These are three separable tasks, not one:
SHOP_TBL_DATA2structure and isolate the ticket-shop-specificcatalog entries (item IDs + ticket prices). Pure RE work.
handleMsgMhfUseUdShopCoin(or whatever the real ticket-spendpacket turns out to be) against that catalog. Depends on (1).
shop_itemstable(a new
shop_type?) or a dedicated table. A schema/architecture call thatdoesn't strictly depend on (1) or (2).