From c34f682f70c318d528368bb76c38858dab1eb2a4 Mon Sep 17 00:00:00 2001 From: Houmgaor Date: Wed, 18 Feb 2026 20:59:58 +0100 Subject: [PATCH] fix(festa): correct reward field version gate from G1 to G3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The extra reward fields (Unk5, Unk6, Unk7) in the InfoFesta response were gated at >= G1, but G1 clients do not expect these 5 extra bytes per reward entry. This caused the entire packet after the rewards section to be misaligned, corrupting MaximumFP, leaderboards, and bonus rates — which broke the festa UI including trial voting. Wii U disassembly of import_festa_info (0x02C470EC, 1068 bytes) confirms G3-Z2 reads these fields. G1 binary analysis shows only 8 festa packets (vs 12 in ZZ), and the intermediate/personal prize systems were not added until G5.2/G7 respectively. --- server/channelserver/handlers_festa.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index 88edf35df..ded92a179 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -311,8 +311,8 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { bf.WriteUint16(reward.ItemType) bf.WriteUint16(reward.Quantity) bf.WriteUint16(reward.ItemID) - // Not confirmed to be G1 but exists in G3 - if _config.ErupeConfig.RealClientMode >= _config.G1 { + // Confirmed present in G3 via Wii U disassembly of import_festa_info + if _config.ErupeConfig.RealClientMode >= _config.G3 { bf.WriteUint16(reward.Unk5) bf.WriteUint16(reward.Unk6) bf.WriteUint8(reward.Unk7)