Difference between revisions of "BLO file"

From Pikmin Technical Knowledge Base
Jump to navigation Jump to search
(Cleanup.)
Line 1: Line 1:
 
 
== Types of BLO ==
 
== Types of BLO ==
The 'BLO' filetype is used by several Nintendo games such as Pikmin, Pikmin 2, Super Mario Sunshine, and Wind Waker to control screen data, such as which sprites appear and where. There are 3 main types of a blo file, scrnblo1 (which Sunshine and Wind Waker use), scrnblo2 (which Pikmin 2 uses), and the format Pikmin 1 uses, sometimes called scrnblo0. There are several differences between them and are not interchangeable. This page will focus on scrnblo2, the flavour Pikmin 2 uses.
+
The <code>BLO</code> filetype is used by several Nintendo games such as ''Pikmin'', ''Pikmin 2'', ''Super Mario Sunshine'', and ''The Legend of Zelda: The Wind Waker'' to control screen data, such as which sprites appear and where. There are 3 main types of a blo file, <code>scrnblo1</code> (which ''Sunshine'' and ''Wind Waker'' use), <code>scrnblo2</code> (which ''Pikmin 2'' uses), and the format ''Pikmin'' uses, sometimes called <code>scrnblo0</code>. There are several differences between them and they are not interchangeable. This page will focus on <code>scrnblo2</code>, the flavour ''Pikmin 2'' uses.
  
 
== TEX1 ==
 
== TEX1 ==
The first main segment of a ''scrnblo2'' file, this is where the game loads BTI textures in ''root/new_screen/eng/*screen szs*/timg"''. You can change the filenames of the textures to be loaded, and possibly add or remove entries. The number of textures to load is defined in a BE 32 bit integer 0x08 away from the sections magic "TEX1".
+
The first main segment of a <code>scrnblo2</code> file, this is where the game loads BTI textures in <code>/new_screen/eng/*screen szs*/timg</code>. You can change the filenames of the textures to be loaded, and possibly add or remove entries. The number of textures to load is defined in a BE 32 bit integer 0x08 away from the sections magic <code>TEX1</code>.
  
 
== FNT1 ==
 
== FNT1 ==
This section is dedicated to loading fonts, hence the name FNT1. In Pikmin 2, this only ever loads piki2_font00.bfn.
+
This section is dedicated to loading fonts, hence the name <code>FNT1</code>. In ''Pikmin 2'', this only ever loads <code>piki2_font00.bfn</code>.
  
 
== MAT1 ==
 
== MAT1 ==
This section creates screen "objects" with internal names that the game uses to control them. Its by far the biggest segment of the BLO. The important part is where the names of the materials are listed. They always follow the naming convention of mat_name_v. The main makeup of this section is padding.
+
This section creates screen "objects" with internal names that the game uses to control them. Its by far the biggest segment of the <code>BLO</code>. The important part is where the names of the materials are listed. They always follow the naming convention of <code>mat_name_v</code>. The main makeup of this section is padding.
  
 
== PAN2 ==
 
== PAN2 ==
This section acts like a group, it holds many PIC2 and TBX2 segments together so you can easily move a whole object as one piece. There is always a PAN2 section called ROOT in every ''scrnblo2'', and sometimes even more. Every PIC2 segment has a string which contains "pan2".
+
This section acts like a group, it holds many <code>PIC2</code> and <code>TBX2</code> segments together so you can easily move a whole object as one piece. There is always a <code>PAN2</code> section called <code>ROOT</code> in every <code>scrnblo2</code>, and sometimes even more. Every <code>PIC2</code> segment has a string which contains <code>pan2</code>.
  
<br>0x12 The name of the material being controlled. <br />
+
* <code>0x12</code>: The name of the material being controlled.
<br />0x20 2 floats representing x and y something. Doesnt seem to do anything.
+
* <code>0x20</code>: 2 floats representing x and y something. Don't seem to do anything.
<br />0x28 2 floats representing x and y scale. Usually 1.
+
* <code>0x28</code>: 2 floats representing x and y scale. Usually 1.
<br />0x3C 2 floats representing x and y coordinates relative to root.  
+
* <code>0x3C</code>: 2 floats representing x and y coordinates relative to root.
<br />They seem to always end with a BGN1, but I'm not sure what its for.
+
 
 +
They seem to always end with a <code>BGN1</code>, but I'm not sure what its for.
  
 
== PIC2 ==
 
== PIC2 ==
This is very similar to the last segment, but for an individual sprite object. They are notably longer than PAN2 segments. You probably shouldn't change their parameters if you have the option to edit their whole PAN2 segment instead. Heres some info about them:
+
This is very similar to the last segment, but for an individual sprite object. They are notably longer than <code>PAN2</code> segments. You probably shouldn't change their parameters if you have the option to edit their whole <code>PAN2</code> segment instead. Here's some info about them:
<br />0x07 string for pan2, could be what connects the single pic2 to a pan2.
+
 
<br />0x19 Name of material being edited, its likes to have "RE" before it, but thats not part of the name.
+
* <code>0x07</code>: string for <code>pan2</code>, could be what connects the single <code>pic2</code> to a <code>pan2</code>.
<br />0x28 2 more floats, again not sure what they do.
+
* <code>0x19</code>: Name of material being edited, it likes to have <code>RE</code> before it, but that's not part of the name.
<br />0x30 x and y scale
+
* <code>0x28</code>: 2 more floats, again not sure what they do.
<br />0x45 x and y coordinates relative to PAN2 entry
+
* <code>0x30</code>: x and y scale.
<br />After that is some data I dont get then a whole row of FFs.
+
* <code>0x45</code>: x and y coordinates relative to <code>PAN2</code> entry.
  
 +
After that is some data I don't get, then a whole row of <code>0xFF</code>.
  
 
== TBX2 ==
 
== TBX2 ==
These are a lot like PIC2, and are also part of a PAN2. The difference is they write text using the loaded font.
+
These are a lot like <code>PIC2</code>, and are also part of a <code>PAN2</code>. The difference is they write text using the loaded font.
<br />0x07 string for pan2, could be what connects the single tbx2 to a pan2.
+
* <code>0x07</code>: string for <code>pan2</code>, could be what connects the single <code>tbx2</code> to a <code>pan2</code>.
<br />0x1A internal name of material being used.
+
* <code>0x1A</code>: internal name of material being used.
<br />0x21 text ID used. The developers like to put placeholder text IDs here when the screen could show multiple messages, so its only really works for fully static text.
+
* <code>0x21</code>: text ID used. The developers like to put placeholder text IDs here when the screen could show multiple messages, so it only really works for fully static text.
<br />0x27 x and y coordinates?
+
* <code>0x27</code>: x and y coordinates?
<br />0x30 x and y scale
+
* <code>0x30</code>: x and y scale.
<br />0x43 more x and y stuff.
+
* <code>0x43</code>: more x and y stuff.
<br />After that is some random data, followed by the text itself, in an early version where things like color and size change and text box terminators are called by their internal names. Can show early scripts of the games text in some areas.
 
  
 +
After that is some random data, followed by the text itself, in an early version where things like color and size change and text box terminators are called by their internal names. Can show early scripts of the games text in some areas.
  
 
== Ending ==
 
== Ending ==
 +
After the last <code>PIC2</code> or <code>TBX2</code> are multiple <code>END1</code> and an <code>EXT1</code> with padding to align it. If there's anything I need to correct, let me know on the Discord. Thanks for reading! PikHacker
  
After the last PIC2 or TBX2 is multiple END1 and an EXT1 with padding to align it. If theres anything i need to correct, let me know on the Discord. Thanks for Reading! PikHacker
+
[[Category:File formats]]
 +
[[Category:Pikmin 2]]

Revision as of 17:08, 16 February 2019

Types of BLO

The BLO filetype is used by several Nintendo games such as Pikmin, Pikmin 2, Super Mario Sunshine, and The Legend of Zelda: The Wind Waker to control screen data, such as which sprites appear and where. There are 3 main types of a blo file, scrnblo1 (which Sunshine and Wind Waker use), scrnblo2 (which Pikmin 2 uses), and the format Pikmin uses, sometimes called scrnblo0. There are several differences between them and they are not interchangeable. This page will focus on scrnblo2, the flavour Pikmin 2 uses.

TEX1

The first main segment of a scrnblo2 file, this is where the game loads BTI textures in /new_screen/eng/*screen szs*/timg. You can change the filenames of the textures to be loaded, and possibly add or remove entries. The number of textures to load is defined in a BE 32 bit integer 0x08 away from the sections magic TEX1.

FNT1

This section is dedicated to loading fonts, hence the name FNT1. In Pikmin 2, this only ever loads piki2_font00.bfn.

MAT1

This section creates screen "objects" with internal names that the game uses to control them. Its by far the biggest segment of the BLO. The important part is where the names of the materials are listed. They always follow the naming convention of mat_name_v. The main makeup of this section is padding.

PAN2

This section acts like a group, it holds many PIC2 and TBX2 segments together so you can easily move a whole object as one piece. There is always a PAN2 section called ROOT in every scrnblo2, and sometimes even more. Every PIC2 segment has a string which contains pan2.

  • 0x12: The name of the material being controlled.
  • 0x20: 2 floats representing x and y something. Don't seem to do anything.
  • 0x28: 2 floats representing x and y scale. Usually 1.
  • 0x3C: 2 floats representing x and y coordinates relative to root.

They seem to always end with a BGN1, but I'm not sure what its for.

PIC2

This is very similar to the last segment, but for an individual sprite object. They are notably longer than PAN2 segments. You probably shouldn't change their parameters if you have the option to edit their whole PAN2 segment instead. Here's some info about them:

  • 0x07: string for pan2, could be what connects the single pic2 to a pan2.
  • 0x19: Name of material being edited, it likes to have RE before it, but that's not part of the name.
  • 0x28: 2 more floats, again not sure what they do.
  • 0x30: x and y scale.
  • 0x45: x and y coordinates relative to PAN2 entry.

After that is some data I don't get, then a whole row of 0xFF.

TBX2

These are a lot like PIC2, and are also part of a PAN2. The difference is they write text using the loaded font.

  • 0x07: string for pan2, could be what connects the single tbx2 to a pan2.
  • 0x1A: internal name of material being used.
  • 0x21: text ID used. The developers like to put placeholder text IDs here when the screen could show multiple messages, so it only really works for fully static text.
  • 0x27: x and y coordinates?
  • 0x30: x and y scale.
  • 0x43: more x and y stuff.

After that is some random data, followed by the text itself, in an early version where things like color and size change and text box terminators are called by their internal names. Can show early scripts of the games text in some areas.

Ending

After the last PIC2 or TBX2 are multiple END1 and an EXT1 with padding to align it. If there's anything I need to correct, let me know on the Discord. Thanks for reading! PikHacker