Difference between revisions of "Nintendo Badge Arcade/PrizeCollection"

From 3dbrew
Jump to navigation Jump to search
(Specify unknown data)
(Expand a lot of information (specially on headers))
Line 85: Line 85:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starting at ID)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of display names
 +
|-
 +
| 0x18
 +
| 0x4
 +
| End address of display names
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Start address of component names
 +
|-
 +
| 0x20
 +
| 0x4
 +
| End address of component names
 +
|-
 +
| 0x24
 +
| 0x4
 +
| Start address of unknown elements
 +
|-
 +
| 0x28
 +
| 0x4
 +
| End address of unknown elements
 +
|-
 
| 0x2C
 
| 0x2C
| Unknown
+
| 0x4
 +
| Crane instance ID
 
|-
 
|-
 
| 0x30
 
| 0x30
Line 101: Line 141:
 
|-
 
|-
 
| 0xC0
 
| 0xC0
| 0x40
+
| 0x20
 
| Unknown
 
| Unknown
 +
|-
 +
| 0xE0
 +
| 0x4
 +
| Number of prizes
 +
|-
 +
| 0xE4
 +
| 0x4
 +
| Number of attachments
 +
|-
 +
| 0xE8
 +
| 0x4
 +
| Number of fixed objects
 +
|-
 +
| 0xEC
 +
| 0x4
 +
| Number of elements at 0x1C40
 +
|-
 +
| 0xF0
 +
| 0x4
 +
| Number of elements at 0x23C0
 +
|-
 +
| 0xF4
 +
| 0x4
 +
| Number of elements at 0x2F00
 +
|-
 +
| 0xF8
 +
| 0x4
 +
| Number of elements at 0x3680
 +
|-
 +
| 0xFC
 +
| 0x4
 +
| Number of elements at 0x3E00
 
|-
 
|-
 
| 0x100
 
| 0x100
Line 108: Line 180:
 
| [[#Language Names|Display names]]
 
| [[#Language Names|Display names]]
 
|-
 
|-
| 0x1100 + Offset
+
| 0x1100
 +
| 0xB40
 +
| [[#Component Names|Component names]]
 +
|-
 +
| 0x1C40
 +
|
 +
| Unknown elements
 +
|}
 +
 
 +
=== Component Names ===
 +
This section has the names of all the components (prizes, attachments and fixed objects) used within a crane instance.
 +
Attachments are optional, others are unknown.
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x1100
 +
| 0x30
 +
| Prize name
 +
|-
 +
|
 
| 0x30
 
| 0x30
| Prize name x
+
| Optional prize name(s)
 
|-
 
|-
| 0x1880 + Offset
+
| 0x14C0
 
| 0x30
 
| 0x30
| Fixed Object name x
+
| Attachment name
 +
|-
 +
|
 +
| 0x30
 +
| Optional attachment name(s)
 +
|-
 +
| 0x1880
 +
| 0x30
 +
| Fixed object name
 +
|-
 +
|
 +
| 0x30
 +
| Optional fixed object name(s)
 
|}
 
|}
 
Offset = 0x30 * x
 
  
 
== Attachment (atb) ==
 
== Attachment (atb) ==
Line 133: Line 238:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at name)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of image
 +
|-
 +
| 0x18
 +
| 0x4
 +
| End address of image
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Start address of A8 data
 +
|-
 +
| 0x20
 +
| 0x4
 +
| End address of A8 data
 +
|-
 +
| 0x24
 +
| 0x4
 +
| Start address of collision floating points
 +
|-
 
| 0x28
 
| 0x28
| Unknown
+
| 0x4
 +
| End address of collision floating points
 
|-
 
|-
 
| 0x2C
 
| 0x2C
Line 147: Line 288:
 
| 0x4
 
| 0x4
 
| Image height
 
| Image height
 +
|-
 +
| 0x64
 +
| 0x1C
 +
| Padding
 
|-
 
|-
 
| 0x80
 
| 0x80
Line 155: Line 300:
 
| w * h
 
| w * h
 
| A8 data of previous image
 
| A8 data of previous image
 +
|-
 +
| 0x80 + 2 * (w * h)
 +
|
 +
| Collision floating points
 
|}
 
|}
  
Line 171: Line 320:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at name)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data?
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of image
 +
|-
 
| 0x18
 
| 0x18
| Unknown
+
| 0x4
 +
| End address of image
 
|-
 
|-
 
| 0x1C
 
| 0x1C
 
| 0x30
 
| 0x30
 
| Crane icon name
 
| Crane icon name
 +
|-
 +
| 0x4C
 +
| 0xB4
 +
| Padding
 
|-
 
|-
 
| 0x100
 
| 0x100
Line 197: Line 370:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at ID)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of display names
 +
|-
 +
| 0x18
 +
| 0x4
 +
| End address of display names
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Start address of image
 +
|-
 
| 0x20
 
| 0x20
| Unknown
+
| 0x4
 +
| End address of image
 
|-
 
|-
 
| 0x24
 
| 0x24
 
| 0x4
 
| 0x4
 
| Category ID
 
| Category ID
 +
|-
 +
| 0x28
 +
| 0x4
 +
| Unknown
 
|-
 
|-
 
| 0x2C
 
| 0x2C
Line 223: Line 428:
 
| 0x1000
 
| 0x1000
 
| [[#Language Names|Category display names]]
 
| [[#Language Names|Category display names]]
 +
|-
 +
| 0x1068
 +
| 0x1018
 +
| Padding
 
|-
 
|-
 
| 0x2080
 
| 0x2080
Line 243: Line 452:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at name)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of image
 +
|-
 
| 0x18
 
| 0x18
| Unknown
+
| 0x4
 +
| End address of image
 
|-
 
|-
 
| 0x1C
 
| 0x1C
 
| 0x30
 
| 0x30
 
| Crane name
 
| Crane name
 +
|-
 +
| 0x4C
 +
| 0xB4
 +
| Padding
 
|-
 
|-
 
| 0x80
 
| 0x80
Line 269: Line 502:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at name)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of image
 +
|-
 +
| 0x18
 +
| 0x4
 +
| End address of image
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Start address of collision floating points
 +
|-
 
| 0x20
 
| 0x20
| Unknown
+
| 0x4
 +
| End address of collision floating points
 
|-
 
|-
 
| 0x24
 
| 0x24
Line 283: Line 544:
 
| 0x4
 
| 0x4
 
| Image height
 
| Image height
 +
|-
 +
| 0x5C
 +
| 0x24
 +
| Padding
 
|-
 
|-
 
| 0x80
 
| 0x80
 
| w * h
 
| w * h
 
| ETC1A4 image of fixed object
 
| ETC1A4 image of fixed object
 +
|-
 +
| 0x80 + (w * h)
 +
|
 +
| Collision floating points
 
|}
 
|}
  
Line 303: Line 572:
 
|-
 
|-
 
| 0x4
 
| 0x4
 +
| 0x4
 +
| Unknown (always 0x3?)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| File length? (stuck at 0x45XX)
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Start address of header data (starts at ID)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| End address of header data
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Start address of display names
 +
|-
 +
| 0x18
 +
| 0x4
 +
| End address of display names
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Start address of full RGB565+A4 images (64x64 and 32x32)
 +
|-
 +
| 0x20
 +
| 0x4
 +
| End address of full RGB565+A4 images
 +
|-
 +
| 0x24
 +
| 0x4
 +
| Start address of optional images (same as 0x20 if none)
 +
|-
 +
| 0x28
 +
| 0x4
 +
| End address of optional images (same as 0x20 if none)
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| Start address of ETC1A4+A8 image
 +
|-
 +
| 0x30
 +
| 0x4
 +
| End address of ETC1A4+A8 image
 +
|-
 +
| 0x34
 +
| 0x4
 +
| Start address of collision floating points
 +
|-
 
| 0x38
 
| 0x38
| Unknown
+
| 0x4
 +
| End address of collision floating points? (stuck at 0x45XX)
 
|-
 
|-
 
| 0x3C
 
| 0x3C
Line 344: Line 665:
 
| 0x10E0
 
| 0x10E0
 
| 0x20
 
| 0x20
| Unknown (usually zero?)
+
| Padding
 
|-
 
|-
 
| 0x1100
 
| 0x1100
 
|  
 
|  
| Image data
+
| [[#Badge image data|Image data]]
 +
|-
 +
|
 +
|
 +
| Collision floating points
 
|}
 
|}
 +
 +
=== Badge image data ===
  
 
Following the badges metadata is it's image data. Each badge contains multiple images used in different places during gameplay
 
Following the badges metadata is it's image data. Each badge contains multiple images used in different places during gameplay

Revision as of 23:26, 19 December 2022

Overview

A PrizeCollection SARC file has the following folder structure:

root
└── pc
    ├── PrizeCollection.xml
    ├── ci
    └── rt
        ├── At
        ├── CI
        ├── Ca
        ├── Cr
        ├── FO
        └── Pr

Each of the subfolders contains a custom file format storing different properties between those. Each of those files are compressed using Yaz0 compression.

Subfolder File type
ci Crane Instance (cib)
At Attachment (atb)
CI Crane Icon (icb)
Ca Category (cab)
Cr Crane (crb)
FO Fixed Object (fob)
Pr Prize (prb)

PrizeCollection.xml

This file has an index of all of the game data stored here. It has the following data:

<?xml version="1.0" encoding="UTF-8"?>
<CenterPrizeCollectionFile>
  <Categories count="x">
    <Category name="CategoryName" />
  </Categories>
  <Cranes count="x">
    <Crane name="CraneName" />
  </Cranes>
  <CraneIcons count="x">
    <CraneIcon name="CraneIconName" />
  </CraneIcons>
  <Prizes count="x">
    <Prize name="PrizeName" />
  <Attachments count="x">
    <Attachment name="AttachmentName" />
  </Attachments>
  <FixedObjects count="x">
    <FixedObject name="FixedObjectName" />
  </FixedObjects>
  <CraneInstances>
    <CraneInstance name="CraneInstanceName" />
  </CraneInstances>
</CenterPrizeCollectionFile>

Crane Instance (cib)

A crane instance file stores the data of a set and the components of the machine.

Offset Size Description
0x0 0x4 Header magic (CIBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starting at ID)
0x10 0x4 End address of header data
0x14 0x4 Start address of display names
0x18 0x4 End address of display names
0x1C 0x4 Start address of component names
0x20 0x4 End address of component names
0x24 0x4 Start address of unknown elements
0x28 0x4 End address of unknown elements
0x2C 0x4 Crane instance ID
0x30 0x30 Crane Instance name
0x60 0x30 Crane name
0x90 0x30 Crane Icon name
0xC0 0x20 Unknown
0xE0 0x4 Number of prizes
0xE4 0x4 Number of attachments
0xE8 0x4 Number of fixed objects
0xEC 0x4 Number of elements at 0x1C40
0xF0 0x4 Number of elements at 0x23C0
0xF4 0x4 Number of elements at 0x2F00
0xF8 0x4 Number of elements at 0x3680
0xFC 0x4 Number of elements at 0x3E00
0x100 0x1000 Display names
0x1100 0xB40 Component names
0x1C40 Unknown elements

Component Names

This section has the names of all the components (prizes, attachments and fixed objects) used within a crane instance. Attachments are optional, others are unknown.

Offset Size Description
0x1100 0x30 Prize name
0x30 Optional prize name(s)
0x14C0 0x30 Attachment name
0x30 Optional attachment name(s)
0x1880 0x30 Fixed object name
0x30 Optional fixed object name(s)

Attachment (atb)

An attachment file stores the data of an immovable object and its image.

Offset Size Description
0x0 0x4 Header magic (ATBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starts at name)
0x10 0x4 End address of header data
0x14 0x4 Start address of image
0x18 0x4 End address of image
0x1C 0x4 Start address of A8 data
0x20 0x4 End address of A8 data
0x24 0x4 Start address of collision floating points
0x28 0x4 End address of collision floating points
0x2C 0x30 Attachment name
0x5C 0x4 Image width
0x60 0x4 Image height
0x64 0x1C Padding
0x80 w * h ETC1A4 image of attachment
0x80 + (w * h) w * h A8 data of previous image
0x80 + 2 * (w * h) Collision floating points

Crane Icon (icb)

A crane icon file stores the icon of a set (crane instance).

Offset Size Description
0x0 0x4 Header magic (ICBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starts at name)
0x10 0x4 End address of header data?
0x14 0x4 Start address of image
0x18 0x4 End address of image
0x1C 0x30 Crane icon name
0x4C 0xB4 Padding
0x100 0x2000 64x64 RGB565 image

Category (cab)

A category file stores the data of a group of sets and its category image.

Offset Size Description
0x0 0x4 Header magic (CABS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starts at ID)
0x10 0x4 End address of header data
0x14 0x4 Start address of display names
0x18 0x4 End address of display names
0x1C 0x4 Start address of image
0x20 0x4 End address of image
0x24 0x4 Category ID
0x28 0x4 Unknown
0x2C 0x30 Category name
0x5C 0x4 Number of badges
0x60 0x4 Number of sets (crane instances)
0x64 0x4 Unknown
0x68 0x1000 Category display names
0x1068 0x1018 Padding
0x2080 0x2000 64x64 RGB565 image of category

Crane (crb)

A crane file stores the background image used on a set (crane instance).

Offset Size Description
0x0 0x4 Header magic (CRBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starts at name)
0x10 0x4 End address of header data
0x14 0x4 Start address of image
0x18 0x4 End address of image
0x1C 0x30 Crane name
0x4C 0xB4 Padding
0x80 0x10000 ETC1 image? (Unknown resolution)

Fixed Object (fob)

A fixed object file stores the data of the terrain and its image.

Offset Size Description
0x0 0x4 Header magic (FOBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length
0xC 0x4 Start address of header data (starts at name)
0x10 0x4 End address of header data
0x14 0x4 Start address of image
0x18 0x4 End address of image
0x1C 0x4 Start address of collision floating points
0x20 0x4 End address of collision floating points
0x24 0x30 Fixed object name
0x54 0x4 Image width
0x58 0x4 Image height
0x5C 0x24 Padding
0x80 w * h ETC1A4 image of fixed object
0x80 + (w * h) Collision floating points

Prize (prb)

A prize file stores the badge data and its image.

Offset Size Description
0x0 0x4 Header magic (PRBS)
0x4 0x4 Unknown (always 0x3?)
0x8 0x4 File length? (stuck at 0x45XX)
0xC 0x4 Start address of header data (starts at ID)
0x10 0x4 End address of header data
0x14 0x4 Start address of display names
0x18 0x4 End address of display names
0x1C 0x4 Start address of full RGB565+A4 images (64x64 and 32x32)
0x20 0x4 End address of full RGB565+A4 images
0x24 0x4 Start address of optional images (same as 0x20 if none)
0x28 0x4 End address of optional images (same as 0x20 if none)
0x2C 0x4 Start address of ETC1A4+A8 image
0x30 0x4 End address of ETC1A4+A8 image
0x34 0x4 Start address of collision floating points
0x38 0x4 End address of collision floating points? (stuck at 0x45XX)
0x3C 0x4 Badge ID
0x40 0x4 Unknown
0x44 0x30 Badge file name
0x74 0x30 Badge category
0xA4 0x8 Title ID it opens (0xFFFFFFFF if none)
0xAC 0xC Unknown
0xB8 0x4 Number of horizontal tiles
0xBC 0x4 Number of vertical tiles
0xE0 0x1000 Badge display names
0x10E0 0x20 Padding
0x1100 Image data
Collision floating points

Badge image data

Following the badges metadata is it's image data. Each badge contains multiple images used in different places during gameplay

An image can be either RGB565 or ETC1A4. RGB565 images are immediately followed with A4 data for itself, whereas ETC1A4 images are immediately followed with A8 data for itself

A badge may take up multiple spaces on the Home Menu, and as such contains images for each space called "tiles". The number of image tiles a badge uses is found in the badge metadata at offsets 0xB8 and 0xBC

All badge image data begins with a 64x64 RGB565 image of the full badge. Following the 64x64 image is a 32x32 RGB565 image of the full badge, which is used in the badge selector in Home Menu

If the badge is 1x1 tiles, then the first 64x64 RGB565 image is used in Home Menu to display the badge. If the badge is not 1x1, then the badge contains x*y number of additional 64x64 and 32x32 RGB565 images, where x is the number of horizontal tiles and y is the number of vertical tiles. These tiles are then used in Home Menu to display the badge. These additional images are stored immediately after the 32x32 image

Finally, the last image in the badge image data is a single 128x128 ETC1A4 image of the full badge which is used in game

Offset Size Description
0x1100 0x2000 64x64 RGB565 image of full badge (used in Home Menu if badge is 1x1)
0x3100 0x800 A4 data
0x3900 0x800 32x32 RGB565 image of full badge (used in badge selector in Home Menu)
0x4100 0x200 A4 data
0x2000 64x64 Optional additional RGB565 image tile(s). Only exists if badge is not 1x1 (used in Home Menu if badge is not 1x1)
0x800 A4 data
0x800 32x32 Optional additional RGB565 image tile(s). Only exists if badge is not 1x1 (unknown use)
0x200 A4 data
0x4000 128x128 ETC1A4 image (used in game)
0x4000 A8 data

Language Names

Some files, like the badge and the category file, store its display name in a set of 16 different languages.

Each language is stored as a little-endian utf16 string, in an allocated 0x100 byte section stacked on top of each other.

A string does not need to fill the entire 0x100 byte section, the remaining data is set to null bytes

The languages are ordered as follows:

  1. Japanese
  2. English
  3. French
  4. German
  5. Italian
  6. Spanish
  7. Chinese (simple)
  8. Korean
  9. Dutch
  10. Portuguese
  11. Russian
  12. Chinese (traditional)
  13. Unknown
  14. Unknown
  15. Unknown
  16. Unknown