Editing Pikmin 2 cutscene file

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
{{DISPLAYTITLE:''Pikmin 2'' cutscene file}}
+
Cutscenes in Pikmin 2 are controlled by a file called <code>demo.stb</code>. This file can be found in each of the cutscene archives in <code>/user/Mukki/<name of cutscene>/demo.szs</code>. Cutscenes have predetermined number of frames.
Cutscenes in ''Pikmin 2'' are controlled by a file called <code>demo.stb</code>. This file can be found in each of the cutscene archives in <code>/user/Mukki/<name of cutscene>/demo.szs</code>. Cutscenes have predetermined number of frames.
 
  
 
This page describes the format of the file. The page is work in progress.
 
This page describes the format of the file. The page is work in progress.
Line 17: Line 16:
 
|0x4
 
|0x4
 
|uint16
 
|uint16
|Byte order mark? Always <code>0xFEFF</code>
+
|Byte order mark? Always 0xFEFF
|-
 
|0x6
 
|uint16
 
|Unknown. Always 0x0003?
 
 
|-
 
|-
 
|0x8
 
|0x8
Line 33: Line 28:
 
|0x10
 
|0x10
 
|char[8]
 
|char[8]
|String that spells "jstudio", terminated by a null byte
+
|String that spells "jstudio"
 
|-
 
|-
 
|0x18
 
|0x18
Line 41: Line 36:
 
|0x1E
 
|0x1E
 
|int16
 
|int16
|Unknown. Always <code>0x04</code>?
+
|Unknown. Always 0x4?
 
|}
 
|}
  
Line 48: Line 43:
 
= JFVB =  
 
= JFVB =  
 
JFVB is one of the possible objects that can appear in the stb file. The size of the JFVB data is usually big because it's like its own section inside the file.
 
JFVB is one of the possible objects that can appear in the stb file. The size of the JFVB data is usually big because it's like its own section inside the file.
For the purpose of the object count, JFVB counts as one object.
+
For the purpose of the object count, JFVB counts as one object
 
{| class="wikitable"
 
{| class="wikitable"
 
|+JFWB object
 
|+JFWB object
Line 82: Line 77:
 
|0x4
 
|0x4
 
|uint16
 
|uint16
|Byte order mark? Always <code>0xFEFF</code>
+
|Byte order mark? Always 0xFEFF
 
|-
 
|-
 
|0x6
 
|0x6
 
|uint16
 
|uint16
|Unknown, always <code>0x0100</code>?
+
|Unknown, always 0x100?
 
|-
 
|-
 
|0x8
 
|0x8
Line 94: Line 89:
 
|0xC
 
|0xC
 
|uint32
 
|uint32
|Amount of entries in FVB data entry list
+
|Amount of entries in FVB data
 
|-
 
|-
 
|0x10
 
|0x10
|FVB data entry list
+
|FVB data entry
 
|See table below for more info
 
|See table below for more info
 
|}
 
|}
Line 110: Line 105:
 
|0x0
 
|0x0
 
|uint32
 
|uint32
|Entry size starting from 0x0 to end
+
|entry size starting from 0x0 to end
 
|-
 
|-
 
|0x4
 
|0x4
 
|uint16
 
|uint16
|Entry type?
+
|entry type?
 
|-
 
|-
 
|0x6  
 
|0x6  
 
|uint16
 
|uint16
|Offset to data? Always 0
+
|padding
 
|-
 
|-
 
|0x8
 
|0x8
|Subentry list
+
|unknown
|The list of subentries is terminated by a null entry (4 null bytes).
+
|entry data depending on entry type?
|}
 
 
 
FVB entry types: 1 (composite), 2 (constant), 3 (transition), 4 (list), 5 (list parameter), 6 (hermite). Only 2 and 6 are known to be used by ''Pikmin 2''.
 
 
 
{| class="wikitable"
 
|+Subentry
 
|-
 
!Offset
 
!Type
 
!Description
 
|-
 
|0x0
 
|uint16
 
|Total subentry size, starting from offset <code>0x04</code> to end
 
|-
 
|0x2
 
|uint16
 
|Subentry type
 
|-
 
|0x4
 
|Subentry data
 
|Exact data layout depends on subentry type and the type of the entry the subentry is located in
 
 
|}
 
|}
  
Known subentry types:  
+
FVB entry types: 1 (composite?), 2 (constant?), 3 (transition?), 4 (list?), 5 (list parameter?), 6 (hermite?)
* <code>0x00</code>: terminates the list of subentries
 
* <code>0x01</code>: If entry type is 2, one float follows. If entry type is 6, a 4 bytes integer and many floats follow. The integer is broken up like this: the first 4 bits are the width of the following float table, the remaining bits are the height. Multiply width with height to get the amount of floats that follow. Table is likely used for interpolation, possibly related to hermite interpolation.
 
* <code>0x12</code>: Only known to be used in entry type 6. This subentry contains two floats which specify a value range. It appears before a <code>0x01</code> subentry.
 
  
 
= JMSG =
 
= JMSG =
This object handles the querying of messages from the BMG database and responsible for the calling message boxes onscreen. There are two segments to the JMSG objects, first is an array of message box objects, and then a control section with additional parameters. For the sake of object count, each JMSG counts as an object while the controls are independantly just one object.
+
This object handles the querying of messages from the BMG database and responsible for the calling message boxes onscreen. There are two segments to the JMSG objects, first is an array of message box objects, and then a control section with additional parameters.  
 
{| class="wikitable"
 
{| class="wikitable"
 
|+JMSG object
 
|+JMSG object
Line 171: Line 141:
 
|0x8
 
|0x8
 
|uint32
 
|uint32
|If this is the first message box this is set to <code>0x0000000B</code>, else <code>0x0000000C</code>
+
|If this is the first message box this is set to 0x0000000B, else 0x0000000C
 
|-
 
|-
 
|0xC
 
|0xC
Line 183: Line 153:
 
|0x18
 
|0x18
 
|uint16
 
|uint16
|An identifer? Value is always <code>0x0200</code>
+
|An identifer? Value is always 0x0200
 
|-
 
|-
 
|0x1A
 
|0x1A
Line 191: Line 161:
 
|0x1C
 
|0x1C
 
|8 Bytes
 
|8 Bytes
|Value doesn't appear to change, always <code>0x8000000800040859</code>
+
|Value doesn't appear to change, always 0x8000000800040859
 
|-
 
|-
 
|0x24
 
|0x24
Line 199: Line 169:
 
|0x28
 
|0x28
 
|uint16
 
|uint16
|Same as value from 0x14. Always <code>0x0200</code>
+
|Same as value from 0x14. Always 0x0200
 
|-
 
|-
 
|0x2A
 
|0x2A
 
|uint16
 
|uint16
|Always <code>0x0001</code>
+
|Always 0x0001
 
|-
 
|-
 
|0x2C
 
|0x2C
 
|uint16
 
|uint16
|Padding of <code>0x00</code>'s, end of section
+
|Padding of 0's, end of section
 
|}
 
|}
  
Line 223: Line 193:
 
|0x4
 
|0x4
 
|uint32
 
|uint32
|Padding of <code>0xFF</code>'s
+
|Padding of FF's
 
|-
 
|-
 
|0x8
 
|0x8
 
|uint32
 
|uint32
|Unknown, set to <code>0x0000000D</code>
+
|Unknown, set to 0x0000000D
 
|-
 
|-
 
|0xC
 
|0xC
Line 235: Line 205:
 
|0x18
 
|0x18
 
|uint32
 
|uint32
|Padding of <code>0x00</code>'s
+
|Padding of 0's
 
|-
 
|-
 
|0x1C
 
|0x1C
Line 243: Line 213:
 
|0x28*
 
|0x28*
 
|uint32
 
|uint32
|Padding of <code>0x00</code>'s, end of section
+
|Padding of 0's, end of section
 
|}
 
|}
  
 
∗ Ending offset differs depending on the amount of JMSG objects there are since each object gets its own 12 bytes of control values.
 
∗ Ending offset differs depending on the amount of JMSG objects there are since each object gets its own 12 bytes of control values.
 
= JCMR =
 
Object that deals with the camera movement.
 
{| class="wikitable"
 
|+JCMR object
 
|-
 
!Offset
 
!Type
 
!Description
 
|-
 
|0x0
 
|uint32
 
|Size of section in bytes
 
|-
 
|0x4
 
|char[4]
 
|String that spells "JACT"
 
|-
 
|0x8
 
|uint32
 
|Length of object name.
 
|-
 
|0xC
 
|char[length]
 
|Object name
 
|-
 
|0xC+length rounded up to multiple of 4
 
|JCMR data entries
 
|See below
 
|}
 
 
{| class="wikitable"
 
|+JCMR data entry
 
|-
 
!Offset
 
!Type
 
!Description
 
|-
 
|0x0
 
|uint32
 
|If equal to 0, terminates list of data entries and no further JCMR data follows. Otherwise equal to 0x8000003C
 
|-
 
|0x4
 
|0x40 bytes of data
 
|Only exists if previous value was 0x8000003C, purpose unknown
 
|}
 
 
= JACT =
 
{| class="wikitable"
 
|+JACT object
 
|-
 
!Offset
 
!Type
 
!Description
 
|-
 
|0x0
 
|uint32
 
|Size of section in bytes
 
|-
 
|0x4
 
|char[4]
 
|String that spells "JACT"
 
|-
 
|0x8
 
|uint32
 
|Length of object name.
 
|-
 
|0xC
 
|char[length]
 
|Object name
 
|-
 
|0xC+length rounded up to multiple of 4
 
|JACT data
 
|unknown
 
|}
 
The first character in the name of a JACT object has a meaning: "+" means special actor, "@" means particle actor, "*" means creature.
 
 
= JSND =
 
 
still being looked into atm but is suspected to be for music
 
 
= JCNT =
 
 
have no idea but i suspect that it either does nothing or is for the frames in a cutscene- Cube 2024
 
 
[[Category:Pikmin 2]]
 
[[Category:File formats]]
 

Please note that all contributions to Pikmin Technical Knowledge Base are considered to be released under the Creative Commons Attribution-ShareAlike (see Pikmin Technical Knowledge Base:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)

Template used on this page: