cyocobo.bin

cyocobo.bin (512 bytes, in the menu archive) is the Chocobo World item conversion table. When the player uses the save-point Chocobo World screen to bring items home, each item collected in Chocobo World is converted into a real FF8 item by a random roll into this table.

Format

A 128 × 4 byte matrix:

Type Size Value Description
Byte[128][4] 512 Item ID item_id = table[4 * roll + rank] with roll = rand() & 0x7F
  • The row (0-127) is a fresh random roll for every single item transferred.
  • The column (0-3) is the Chocobo World item rank (class A/B/C/D of the item won in Chocobo World).

So each column is a 128-entry loot pool for one rank; duplicating an item ID on more rows makes it more likely. In the retail file, column 0 holds 17 distinct high-tier IDs (10 rows each of some), column 3 is dominated by IDs 109/110/111 (~25 rows each), and columns 1/2 spread over 83/76 distinct IDs.

Runtime behavior

The conversion loop (in ChocoboWorld_Prog27Menu_Update, case of the transfer screen) accumulates quantities per item ID with a cap of 100 per ID, then walks IDs 0-198 to build the result list shown to the player. Two special cases while building that list:

  • An awarded ID of 100 also calls the item-award helper with item 123.
  • An awarded ID of 65 is remapped to 110 unless a game flag is set.

A bonus item (one extra unit of ID 65) is added when the transfer includes the special-event flag from the Chocobo World save.

Unlike tkmnmes or m00X, cyocobo.bin has no copy inside mngrp.bin: the standalone file in the menu archive is the one loaded (by MenuReadFiles at boot and again by the Chocobo World menu program init, Menu_ChocoboWorld_Init).

Function addresses

Function Address Description
ChocoboWorld_Prog27Menu_Update 0x4CFCE0 Chocobo World screen update, incl. the item-conversion transfer-screen case
Menu_ChocoboWorld_Init 0x4CFC20 Program 27 init (reloads cyocobo.bin, music)