mwepon.bin
Junk Shop weapon-upgrade recipes - 12 bytes per weapon upgrade. The retail file holds 33 entries (396 bytes). Entry names are stored separately in mwepon.msg.
| Type | Size | Value |
|---|---|---|
| UInt16 | 2 | Offset of the name inside mwepon.msg |
| UInt8 | 1 | Unused |
| UInt8 | 1 | Price |
| UInt8 | 1 | Item 1 id |
| UInt8 | 1 | Item 1 quantity |
| UInt8 | 1 | Item 2 id |
| UInt8 | 1 | Item 2 quantity |
| UInt8 | 1 | Item 3 id |
| UInt8 | 1 | Item 3 quantity |
| UInt8 | 1 | Item 4 id |
| UInt8 | 1 | Item 4 quantity |
Upgrade Price = Price * 10
Buying an upgrade charges Price * 10 gils and removes each Item quantity from the inventory. An Item id of 0 (Nothing) marks an empty recipe slot and is ignored.
The 2-byte name offset and the 3rd byte (unused padding, always 0 in the retail file) do not affect gameplay; an editor keeps them as-is so the recipe stays byte-perfect.
The game reads each field as a byte from mweaponbinbuffer + 12 * weapon_id. Affordability uses gil >= 10 * price, and both the “can afford” scan and the purchase loop iterate the four item/quantity pairs starting at byte 4.
| Function | Address |
|---|---|
| JunkShop_UpgradeMenuHandler | 0x4EA890 |
| JunkShop_BuildAvailableUpgradeList | 0x4EA770 |