Important notes

Introduction

Chocobo Races occur in Chocobo Circuit, a zone reachable for multiple towns. Players located in the grandstands (after paying 50g or using a pass) are automatically enrolled into the race cutscenes. Players can bet on upcoming races.

Mechanisms involved in playing a Chocobo Race

sequenceDiagram
      participant S as Server
      participant C as Client   
      S->>C: 1 · Push the whole race in one burst (0x069) -> client buffers it
      S->>C: 2 · Start the event
      Note over C: 3 · Client plays the race from its buffer
      C->>S: pings at each phase (intro · names · start · results)
      S-->>C: answers those (names, payout)

Chocobo Racing packets (0x069)

A polymorphic packet is sent in one batch before the actual race. The packet has 5 documented modes:

The client will memcpy the content of the payload into global Chocobo Race structs and exit. Nothing special will occur at that point.

// Packet handler feeds this struct
struct ChocoboRacingSys      // at pGlobalNowZone + 245112
  {
      uint32_t     DownloadFlg;        // Modes 1-4 clear, Mode 5 sets 1
      uint32_t     RaceParams[2];      // [0]=weather (id<<5)+8, [1]=counter
      ChocoboParam ChocoboParams[8];   // 
      SectionParam SectionParams[32];  // 
      uint8_t      ResultParams[4];    //
  };