<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.lumasworkshop.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Louis+Miles</id>
	<title>Luma&#039;s Workshop - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.lumasworkshop.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Louis+Miles"/>
	<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/wiki/Special:Contributions/Louis_Miles"/>
	<updated>2026-06-04T06:00:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=907</id>
		<title>IBNK</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=907"/>
		<updated>2025-07-01T12:19:18Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IBNK page. Feel free to overwrite with accurate information&lt;br /&gt;
&lt;br /&gt;
== IBNK Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Offset !! Type !! Description !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || String[4] || IBNK (0x49424E4B) || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || UInt32 || File size minus 0x08 || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Int32 || Bank ID || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Int32 || Bank Version || 0x00000000 = Bank Version 0&amp;lt;br/&amp;gt;0x00000001 = Bank Version 1&amp;lt;br/&amp;gt;Both are supported in &#039;&#039;Super Mario Galaxy&#039;&#039; &amp;amp; &#039;&#039;Super Mario Galaxy 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Byte[16] || Padding? || All Zeros |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== INST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| INST (0x494E5354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Inst sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inst Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Inst (0x496E7374)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Keyboard sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &lt;br /&gt;
| Start of first Keyboard section&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18+0x04&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard section (size 0x18) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt8&lt;br /&gt;
| Highest key of current keyboard&lt;br /&gt;
| Cannot be higher than 7F. Lowest key of next keyboard (if exists) is this value + 0x01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Byte[6]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Float&lt;br /&gt;
| Volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| Float&lt;br /&gt;
| Pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PMAP Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PMAP (0x504D4150)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Pmap sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pmap Section (Size 0x28) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Pmap (0x506D6170)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Byte[7]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PERC Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PERC (0x50455243)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Perc sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Perc Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Perc (0x50657263)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Perc entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Pmap section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LIST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| LIST (0x4C495354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== List entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Inst or Perc section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000). The position of an entry in this list defines the &#039;&#039;&#039;Program ID&#039;&#039;&#039;. It starts counting at 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
[https://github.com/XAYRGA/ibnktool ibnktool ] (edits IBNK)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/magcius/vgmtrans VGMTrans Fork] (analyses and converts IBNK to SF2 (unfinished). Drag and drop BAA onto the window.)*&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*&#039;&#039;SF2 only supports linear envelopes, so the export may be inaccurate.&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=906</id>
		<title>IBNK</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=906"/>
		<updated>2025-07-01T12:18:00Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IBNK page. Feel free to overwrite with accurate information&lt;br /&gt;
&lt;br /&gt;
== IBNK Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Offset !! Type !! Description !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || String[4] || IBNK (0x49424E4B) || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || UInt32 || File size minus 0x08 || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Int32 || Bank ID || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Int32 || Bank Version || 0x00000000 = Bank Version 0&amp;lt;br/&amp;gt;0x00000001 = Bank Version 1&amp;lt;br/&amp;gt;Both are supported in &#039;&#039;Super Mario Galaxy&#039;&#039; &amp;amp; &#039;&#039;Super Mario Galaxy 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Byte[16] || Padding? || All Zeros |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== INST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| INST (0x494E5354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Inst sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inst Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Inst (0x496E7374)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Keyboard sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &lt;br /&gt;
| Start of first Keyboard section&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18+0x04&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard section (size 0x18) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt8&lt;br /&gt;
| Highest key of current keyboard&lt;br /&gt;
| Cannot be higher than 7F. Lowest key of next keyboard (if exists) is this value + 0x01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Byte[6]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Float&lt;br /&gt;
| Volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| Float&lt;br /&gt;
| Pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PMAP Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PMAP (0x504D4150)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Pmap sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pmap Section (Size 0x28) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Pmap (0x506D6170)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Byte[7]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PERC Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PERC (0x50455243)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Perc sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Perc Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Perc (0x50657263)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Perc entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Pmap section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LIST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| LIST (0x4C495354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== List entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Inst or Perc section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000). The position of an entry in this list defines the &#039;&#039;&#039;Program ID&#039;&#039;&#039;. It starts counting at 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
[https://github.com/XAYRGA/ibnktool ibnktool ] (edits IBNK)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/magcius/vgmtrans VGMTrans Fork] (analyses and converts IBNK to SF2. Drag and drop BAA onto the window.)*&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*&#039;&#039;SF2 only supports linear envelopes, so the export may be inaccurate.&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=905</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=905"/>
		<updated>2025-07-01T12:12:35Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS consists of pure assembly code, where each track containing events such as notes, patch changes, etc. is an independent executor thread with opcodes to execute. &lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
The game&#039;s audio engine can only play up to 16 tracks at a time - very similar to MIDI with its 16 channels.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel/Main Track definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each executor track (channel). For some unknown reason, the exact same looping and duration events from the global track need to be repeated here, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] (bank). If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/magcius/vgmtrans VGMTrans Fork] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=902</id>
		<title>Cutscenes</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=902"/>
		<updated>2025-06-19T12:33:51Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039;&lt;br /&gt;
*Finish the hardcoded cutscene names.&lt;br /&gt;
*More info and research on the use of canm and supported objects.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cutscenes are flexible, complex scenes, which can execute more freedom in contrast to the SimpleDemoExecutor.&lt;br /&gt;
These scenes consist of individual sequences that are played in order. In each sequence, several actions can be executed from certain frames, such as changing the player&#039;s position, camera movements, sound effects, and more. To each sequence (and subsequence) different actions are linked, which are then executed at the time of this sequence.&lt;br /&gt;
&lt;br /&gt;
You can best visualize this in a kind of timeline. The timeline consists of the individual sequences, which consist of several actions. At the same time single subscequences can be executed together with the actual sequences.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
[[File:Cutscene_Visual-Representation.png|thumb|A visual representation of the first Yoshi Meets cutscene.]]&lt;br /&gt;
A cutscene is activated by a demo object via SW_APPEAR within the map and loads several sheet BCSV files located in the demo.arc archive of the respective galaxy/zone. The demo object loads the bcsv files using its defined sheet name and additional &amp;quot;Demo&amp;quot; in front of the file name of the BSCV attached and a respective sheet type at the end of the file name (e.g. &#039;&#039;&#039;Demo&#039;&#039;&#039;AfterGameOver&#039;&#039;&#039;Time&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In addition, the demo object has its own cutscene name, which is only used in certain cases (e.g. to load certain sequences for [[Starship Mario]]) and also for camera codes. Certain names can be recognized by the game and then loads additional hardcoded settings such as behavior after scene completion. A list of these names [[Cutscenes#Hardcoded_Cutscene_Names|can be found below]].&lt;br /&gt;
&lt;br /&gt;
Objects other than the player object itself can be linked to the cutscene. These then use a cutscene group ID, which on the one hand must match the demo object ID and on the other hand must be entered in the action sheet together with the object&#039;s name. If the object is entered in the [[ObjNameTable]], the name from the Japanese column must be entered instead.&lt;br /&gt;
&lt;br /&gt;
If there are several identical objects that are part of a cutscene, you can also define a cast group id for one specific object to distinguish it from the other identical objects for the scene.&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
Defines the individual sequences with their names and length. They are played in the order they are in the list.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| TotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration of the sequence in frames&lt;br /&gt;
|-&lt;br /&gt;
| SuspendFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| If set to 1, pauses the cutscene and resumes gameplay. The cutscene will continue from here next time it is activated.&lt;br /&gt;
|-&lt;br /&gt;
| WaitUserInputFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SubPart===&lt;br /&gt;
Runs additional subsequences in parallel during a sequence.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| SubPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| SubPartTotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The length of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| MainPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the main sequence this sub sequence belongs to&lt;br /&gt;
|-&lt;br /&gt;
| MainPartStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The frame of the main sequence this sub sequence starts at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Action===&lt;br /&gt;
Picks up objects and can position them to a given GeneralPos and play an animation.&lt;br /&gt;
&lt;br /&gt;
All animation types are supported. For more control you can use [[ActorInfo#ActorInfo|ActorAnimCtrl.bcsv]] for your objects to define multiple animation names of different animation types to the animation name defined in the cutscene. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Sequence Name&lt;br /&gt;
|-&lt;br /&gt;
| CastName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the target object. Either Japanese name defined in [[ObjNameTable]], or &#039;&#039;ModelName&#039;&#039; defined in [[ProductMapObjDataTable]].&lt;br /&gt;
|-&lt;br /&gt;
| CastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Optional Cast ID of the target object. -1 = Deactivated.&amp;lt;br&amp;gt;&lt;br /&gt;
To target a specific object among identical objects that are part of the cutscene.&lt;br /&gt;
|-&lt;br /&gt;
| ActionType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Pick an Action Type from the table below.&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos object for destination location&lt;br /&gt;
|-&lt;br /&gt;
| AnimName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation, which can be loaded either from the ARC archive object or from a separate ARC archive with the additional name &amp;quot;Anim&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
====Action Types====&lt;br /&gt;
Note that these action types are not available for any object that registers as a &amp;quot;Simple Demo Cast&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== SMG1 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Duplicate of 9 || Duplicate of 9.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|}&lt;br /&gt;
===== SMG2 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Duplicate of 10 || Duplicate of 10.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Request Movement Off || Tries to pause execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Request Movement On || Tries to resume execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 1 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 17 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 0 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 18 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ? || Unknown. Used at the end of the cutscene where Mario meets Yoshi for the first time.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
Can position Mario/Luigi to a specific GeneralPos and play an animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos to teleport the player to&lt;br /&gt;
|-&lt;br /&gt;
| BckName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation from MarioAnim.arc to play. (All other animationtypes than BCK are also supported)&lt;br /&gt;
|-&lt;br /&gt;
| Visible&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Camera===&lt;br /&gt;
Can play cameras, which can be played one after another. Can use either a camera code from the Map archive&#039;s [[Cameras|CameraParam.bcam]] file, or a key frame camera animation which are controlled via [[CANM]] files, which must be located in the object archive of the targeted object.&amp;lt;/br&amp;gt;&lt;br /&gt;
By default the camera is fixed on Mario/Luigi.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For BCAM usage, the Camera ID name to be used is composed of the &#039;&#039;PartName&#039;&#039; and the &#039;&#039;Cutscenename&#039;&#039; (not the sheet name): &#039;&#039;&#039;e:&amp;lt;small&amp;gt;Cutscenename&amp;lt;/small&amp;gt;[&amp;lt;small&amp;gt;PartName&amp;lt;/small&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For CANM usage, the name defined in &#039;&#039;AnimCameraName&#039;&#039; must match the CANM file&#039;s name and needs to be placed in the root of the targeted object&#039;s archive.&amp;lt;/br&amp;gt;&lt;br /&gt;
Seems to be supported only by certain objects. This has not yet been fully explored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Japanese Name of the object the camera is focused to. (Primarily uses ObjNameTable names)&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetCastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Cast ID of the object&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| CANM file name (&amp;quot;.canm&amp;quot; extension optional) which must be placed in the root of the targeted object&#039;s archive.&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraStartFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The part frame to begin the camera on. -1 will have the camera interpolate to the start of the CANM&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraEndFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| IsContinuous&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sound===&lt;br /&gt;
Can change music and play sound effects.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| Bgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Music|Name of the music]] to play.&lt;br /&gt;
|-&lt;br /&gt;
| SystemSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Sounds_(SMG2)|Name of the soundeffect]] to play. &lt;br /&gt;
|-&lt;br /&gt;
| ActionSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ReturnBgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BgmWipeoutFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration in frames for fading out the music. -1 = No fade-out&lt;br /&gt;
|-&lt;br /&gt;
| AllSoundStopFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Wipe===&lt;br /&gt;
Can perform a fade out animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| WipeName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| The wipe to use. See the [[#WipeName|WipeName]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The function for the Wipe to perform. See the [[#WipeType|WipeType]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The amount of frames that the wipe will move for. Higher values = Slower movement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====WipeName====&lt;br /&gt;
Below is a list of available WipeName values:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 円ワイプ || Circle Wipe&lt;br /&gt;
|-&lt;br /&gt;
| フェードワイプ || Black Fade&lt;br /&gt;
|-&lt;br /&gt;
| 白フェードワイプ || White Fade&lt;br /&gt;
|-&lt;br /&gt;
| ゲームオーバー || Game Over&lt;br /&gt;
|-&lt;br /&gt;
| クッパ || Bowser Face (Death wipe)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: The Mario wipe is missing because the Mario wipe is a System Wipe and not a Scene Wipe. DemoWipes can only be Scene Wipes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====WipeType====&lt;br /&gt;
Below is the list of Wipe functions. The table below uses the Black Fade as an example.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Open Wipe (Fade to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Close Wipe (Fade to Black)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Force Open Wipe (Cut to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Force Close Wipe (Cut to Black)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tip: If you need to change wipes while the wipe is closed, use Force Close before using Open for a smoother transition.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Hardcoded Cutscene Names===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039; Finish this.&amp;lt;/small&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Cutscene Name&lt;br /&gt;
! Meaning&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ベビチコ出会い&lt;br /&gt;
| Master Luma Meeting&lt;br /&gt;
| -Uses hardcoded cameras&amp;lt;br /&amp;gt;-Activates spin after completion when the galaxy uses the StageType &amp;quot;Storybook&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Up to now, there are no tools that allow the cutscenes to be edited directly in a clear interface. Since the cutscenes sheet consists of [[BCSV]] files, they can be edited with any other BCSV editor, like Whitehole. They can also be converted to CSV files and vice versa with Pyjmap.&lt;br /&gt;
&lt;br /&gt;
The tools can be found on the [[Tools_and_Resources|tools and ressources page]].&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=901</id>
		<title>Cutscenes</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=901"/>
		<updated>2025-06-19T12:28:40Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039;&lt;br /&gt;
*Finish the hardcoded cutscene names.&lt;br /&gt;
*More info and research on the use of canm and supported objects.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cutscenes are flexible, complex scenes, which can execute more freedom in contrast to the SimpleDemoExecutor.&lt;br /&gt;
These scenes consist of individual sequences that are played in order. In each sequence, several actions can be executed from certain frames, such as changing the player&#039;s position, camera movements, sound effects, and more. To each sequence (and subsequence) different actions are linked, which are then executed at the time of this sequence.&lt;br /&gt;
&lt;br /&gt;
You can best visualize this in a kind of timeline. The timeline consists of the individual sequences, which consist of several actions. At the same time single subscequences can be executed together with the actual sequences.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
[[File:Cutscene_Visual-Representation.png|thumb|A visual representation of the first Yoshi Meets cutscene.]]&lt;br /&gt;
A cutscene is activated by a demo object via SW_APPEAR within the map and loads several sheet BCSV files located in the demo.arc archive of the respective galaxy/zone. The demo object loads the bcsv files using its defined sheet name and additional &amp;quot;Demo&amp;quot; in front of the file name of the BSCV attached and a respective sheet type at the end of the file name (e.g. &#039;&#039;&#039;Demo&#039;&#039;&#039;AfterGameOver&#039;&#039;&#039;Time&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In addition, the demo object has its own cutscene name, which is only used in certain cases (e.g. to load certain sequences for [[Starship Mario]]) and also for camera codes. Certain names can be recognized by the game and then loads additional hardcoded settings such as behavior after scene completion. A list of these names [[Cutscenes#Hardcoded_Cutscene_Names|can be found below]].&lt;br /&gt;
&lt;br /&gt;
Objects other than the player object itself can be linked to the cutscene. These then use a cutscene group ID, which on the one hand must match the demo object ID and on the other hand must be entered in the action sheet together with the object&#039;s name. If the object is entered in the [[ObjNameTable]], the name from the Japanese column must be entered instead.&lt;br /&gt;
&lt;br /&gt;
If there are several identical objects that are part of a cutscene, you can also define a cast group id for one specific object to distinguish it from the other identical objects for the scene.&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
Defines the individual sequences with their names and length. They are played in the order they are in the list.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| TotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration of the sequence in frames&lt;br /&gt;
|-&lt;br /&gt;
| SuspendFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| If set to 1, pauses the cutscene and resumes gameplay. The cutscene will continue from here next time it is activated.&lt;br /&gt;
|-&lt;br /&gt;
| WaitUserInputFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SubPart===&lt;br /&gt;
Runs additional subsequences in parallel during a sequence.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| SubPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| SubPartTotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The length of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| MainPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the main sequence this sub sequence belongs to&lt;br /&gt;
|-&lt;br /&gt;
| MainPartStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The frame of the main sequence this sub sequence starts at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Action===&lt;br /&gt;
Picks up objects and can position them to a given GeneralPos and play an animation.&lt;br /&gt;
&lt;br /&gt;
All animation types are supported. For more control you can use [[ActorInfo#ActorInfo|ActorAnimCtrl.bcsv]] for your objects to define multiple animation names of different animation types to the animation name defined in the cutscene. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Sequence Name&lt;br /&gt;
|-&lt;br /&gt;
| CastName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the target object. Either Japanese name defined in [[ObjNameTable]], or &#039;&#039;ModelName&#039;&#039; name defined in [[ProductMapObjDataTable]].&lt;br /&gt;
|-&lt;br /&gt;
| CastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Optional Cast ID of the target object. -1 = Deactivated.&amp;lt;br&amp;gt;&lt;br /&gt;
To target a specific object among identical objects that are part of the cutscene.&lt;br /&gt;
|-&lt;br /&gt;
| ActionType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Pick an Action Type from the table below.&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos object for destination location&lt;br /&gt;
|-&lt;br /&gt;
| AnimName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation, which can be loaded either from the ARC archive object or from a separate ARC archive with the additional name &amp;quot;Anim&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
====Action Types====&lt;br /&gt;
Note that these action types are not available for any object that registers as a &amp;quot;Simple Demo Cast&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== SMG1 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Duplicate of 9 || Duplicate of 9.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|}&lt;br /&gt;
===== SMG2 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Duplicate of 10 || Duplicate of 10.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Request Movement Off || Tries to pause execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Request Movement On || Tries to resume execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 1 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 17 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 0 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 18 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ? || Unknown. Used at the end of the cutscene where Mario meets Yoshi for the first time.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
Can position Mario/Luigi to a specific GeneralPos and play an animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos to teleport the player to&lt;br /&gt;
|-&lt;br /&gt;
| BckName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation from MarioAnim.arc to play. (All other animationtypes than BCK are also supported)&lt;br /&gt;
|-&lt;br /&gt;
| Visible&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Camera===&lt;br /&gt;
Can play cameras, which can be played one after another. Can use either a camera code from the Map archive&#039;s [[Cameras|CameraParam.bcam]] file, or a key frame camera animation which are controlled via [[CANM]] files, which must be located in the object archive of the targeted object.&amp;lt;/br&amp;gt;&lt;br /&gt;
By default the camera is fixed on Mario/Luigi.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For BCAM usage, the Camera ID name to be used is composed of the &#039;&#039;PartName&#039;&#039; and the &#039;&#039;Cutscenename&#039;&#039; (not the sheet name): &#039;&#039;&#039;e:&amp;lt;small&amp;gt;Cutscenename&amp;lt;/small&amp;gt;[&amp;lt;small&amp;gt;PartName&amp;lt;/small&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For CANM usage, the name defined in &#039;&#039;AnimCameraName&#039;&#039; must match the CANM file&#039;s name and needs to be placed in the root of the targeted object&#039;s archive.&amp;lt;/br&amp;gt;&lt;br /&gt;
Seems to be supported only by certain objects. This has not yet been fully explored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Japanese Name of the object the camera is focused to. (Primarily uses ObjNameTable names)&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetCastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Cast ID of the object&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| CANM file name (&amp;quot;.canm&amp;quot; extension optional) which must be placed in the root of the targeted object&#039;s archive.&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraStartFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The part frame to begin the camera on. -1 will have the camera interpolate to the start of the CANM&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraEndFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| IsContinuous&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sound===&lt;br /&gt;
Can change music and play sound effects.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| Bgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Music|Name of the music]] to play.&lt;br /&gt;
|-&lt;br /&gt;
| SystemSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Sounds_(SMG2)|Name of the soundeffect]] to play. &lt;br /&gt;
|-&lt;br /&gt;
| ActionSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ReturnBgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BgmWipeoutFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration in frames for fading out the music. -1 = No fade-out&lt;br /&gt;
|-&lt;br /&gt;
| AllSoundStopFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Wipe===&lt;br /&gt;
Can perform a fade out animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| WipeName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| The wipe to use. See the [[#WipeName|WipeName]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The function for the Wipe to perform. See the [[#WipeType|WipeType]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The amount of frames that the wipe will move for. Higher values = Slower movement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====WipeName====&lt;br /&gt;
Below is a list of available WipeName values:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 円ワイプ || Circle Wipe&lt;br /&gt;
|-&lt;br /&gt;
| フェードワイプ || Black Fade&lt;br /&gt;
|-&lt;br /&gt;
| 白フェードワイプ || White Fade&lt;br /&gt;
|-&lt;br /&gt;
| ゲームオーバー || Game Over&lt;br /&gt;
|-&lt;br /&gt;
| クッパ || Bowser Face (Death wipe)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: The Mario wipe is missing because the Mario wipe is a System Wipe and not a Scene Wipe. DemoWipes can only be Scene Wipes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====WipeType====&lt;br /&gt;
Below is the list of Wipe functions. The table below uses the Black Fade as an example.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Open Wipe (Fade to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Close Wipe (Fade to Black)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Force Open Wipe (Cut to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Force Close Wipe (Cut to Black)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tip: If you need to change wipes while the wipe is closed, use Force Close before using Open for a smoother transition.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Hardcoded Cutscene Names===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039; Finish this.&amp;lt;/small&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Cutscene Name&lt;br /&gt;
! Meaning&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ベビチコ出会い&lt;br /&gt;
| Master Luma Meeting&lt;br /&gt;
| -Uses hardcoded cameras&amp;lt;br /&amp;gt;-Activates spin after completion when the galaxy uses the StageType &amp;quot;Storybook&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Up to now, there are no tools that allow the cutscenes to be edited directly in a clear interface. Since the cutscenes sheet consists of [[BCSV]] files, they can be edited with any other BCSV editor, like Whitehole. They can also be converted to CSV files and vice versa with Pyjmap.&lt;br /&gt;
&lt;br /&gt;
The tools can be found on the [[Tools_and_Resources|tools and ressources page]].&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=900</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=900"/>
		<updated>2025-06-10T12:23:53Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS consists of pure assembly code, where each track containing events such as notes, patch changes, etc. is an independent executor thread with opcodes to execute. &lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
The game&#039;s audio engine can only play up to 16 tracks at a time - very similar to MIDI with its 16 channels.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel/Main Track definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each executor track (channel). For some unknown reason, the exact same looping and duration events from the global track need to be repeated here, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] (bank). If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=899</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=899"/>
		<updated>2025-06-10T12:21:30Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: Better explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS consists of pure assembly code, where each track containing events such as notes, patch changes, etc. is an independent executor thread with opcodes to execute. &lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
The game&#039;s audio engine can only play up to 16 tracks at a time - very similar to MIDI with its 16 channels.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each channel. For some unknown reason, the exact same looping and duration events from the global track need to be repeated here, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] (bank). If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=898</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=898"/>
		<updated>2025-06-08T13:26:37Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS works very similar to Midi Format 2, with 16 channels (0-15), as well as a variety of possible independent tracks containing events such as notes, patch changes, etc.&lt;br /&gt;
&lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each channel. For some unknown reason, the exact same looping and duration events from the global track need to be repeated here, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] (bank). If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=897</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=897"/>
		<updated>2025-06-08T13:18:14Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Filestructure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS works very similar to Midi Format 2, with 16 channels (0-15), as well as a variety of possible independent tracks containing events such as notes, patch changes, etc.&lt;br /&gt;
&lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each channel. For some unknown reason, the exact same looping and duration events from the global track need to be repeated here, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=896</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=896"/>
		<updated>2025-06-08T13:14:46Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: Improved explanations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS works very similar to Midi Format 2, with 16 channels (0-15), as well as a variety of possible independent tracks containing events such as notes, patch changes, etc.&lt;br /&gt;
&lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Global Track / Tempo Track&#039;&#039;&#039; BMS always starts (very similary to Midi&#039;s &amp;quot;Tempo Track&amp;quot; or &amp;quot;Conductor Track&amp;quot;) directly with track containing Meta-Events, which only contains global control data, typically:&lt;br /&gt;
**Pulses per Quarter Note (PPQN) set&lt;br /&gt;
**Tempo (BPM)&lt;br /&gt;
**Looping commands (to keep BPM changes synchronized during the song if necessary)&lt;br /&gt;
**OpenTrack command that starts playing the following track&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Channel Specific Track&#039;&#039;&#039;  a kind of management track for channel definitions&lt;br /&gt;
**Usally contains &#039;&#039;&#039;C1&#039;&#039;&#039; OpenTrack events for each channel. For some unknown reason, the exact same setting that follows the PPQN setting on the tempo track must be repeated here after the C1 events, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
 &lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Starts playing a certain track on a certain channel. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#BGM_parameters|If enabled in the BGM parameter table in SMR.szs]], channel 0 can be used for timing and chords usage that do not play any instruments from the sound bank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines/changes patch and bank to be played on the target channel. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines/changes the WSYS/IBNK (bank) whose sounds are to be used in a channel.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the [[IBNK]] belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an [[IBNK]] bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT (File Format)|CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=893</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=893"/>
		<updated>2025-06-06T17:31:12Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS works very similar to Midi Format 2, with 16 channels (0-15), as well as a variety of possible independent tracks containing events such as notes, patch changes, etc..&lt;br /&gt;
&lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Pointer to Channel Creator Events&#039;&#039;&#039; BMS always starts directly with a &#039;&#039;&#039;C1&#039;&#039;&#039; channel creator event with channel 0 containing pointer to the actual channel creator section.&lt;br /&gt;
*&#039;&#039;&#039;Tempo Track&#039;&#039;&#039; This usually starts with a PPQN set, and then with a track with BPM changes and loop events.&lt;br /&gt;
*&#039;&#039;&#039;Channel Creator Section&#039;&#039;&#039; This contains &#039;&#039;&#039;C1&#039;&#039;&#039; channel creator events for each channel. For some unknown reason, the exact same setting that follows the PPQN setting on the tempo track must be repeated here after the C1 events, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
 &lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine without any headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Creates a channel with a start pointer to a track with notes to be played. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#MAIN_BGM|When enabled in the SMR.szs]], channel 0 can be used for timing and chord usage and will not play any instruments from the soundbank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines Instrument and Soundbank to be used in a Track. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK bank whose sounds are to be used in a Track.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an IBNK bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=892</id>
		<title>IBNK</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=892"/>
		<updated>2025-06-06T17:30:28Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IBNK page. Feel free to overwrite with accurate information&lt;br /&gt;
&lt;br /&gt;
== IBNK Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Offset !! Type !! Description !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || String[4] || IBNK (0x49424E4B) || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || UInt32 || File size minus 0x08 || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Int32 || Bank ID || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Int32 || Bank Version || 0x00000000 = Bank Version 0&amp;lt;br/&amp;gt;0x00000001 = Bank Version 1&amp;lt;br/&amp;gt;Both are supported in &#039;&#039;Super Mario Galaxy&#039;&#039; &amp;amp; &#039;&#039;Super Mario Galaxy 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Byte[16] || Padding? || All Zeros |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== INST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| INST (0x494E5354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Inst sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inst Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Inst (0x496E7374)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Keyboard sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &lt;br /&gt;
| Start of first Keyboard section&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18+0x04&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard section (size 0x18) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt8&lt;br /&gt;
| Highest key of current keyboard&lt;br /&gt;
| Cannot be higher than 7F. Lowest key of next keyboard (if exists) is this value + 0x01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Byte[6]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Float&lt;br /&gt;
| Volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| Float&lt;br /&gt;
| Pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PMAP Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PMAP (0x504D4150)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Pmap sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pmap Section (Size 0x28) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Pmap (0x506D6170)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Byte[7]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PERC Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PERC (0x50455243)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Perc sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Perc Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Perc (0x50657263)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Perc entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Pmap section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LIST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| LIST (0x4C495354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== List entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Inst or Perc section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000). The position of an entry in this list defines the &#039;&#039;&#039;Program ID&#039;&#039;&#039;. It starts counting at 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
[https://github.com/XAYRGA/ibnktool ibnktool ] (edits IBNK)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts IBNK to SF2. Drag and drop BAA onto the window.)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=891</id>
		<title>IBNK</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=IBNK&amp;diff=891"/>
		<updated>2025-06-06T17:23:00Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: Tools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IBNK page. Feel free to overwrite with accurate information&lt;br /&gt;
&lt;br /&gt;
== IBNK Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Offset !! Type !! Description !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || String[4] || IBNK (0x49424E4B) || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || UInt32 || File size minus 0x08 || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Int32 || Bank ID || | &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Int32 || Bank Version || 0x00000000 = Bank Version 0&amp;lt;br/&amp;gt;0x00000001 = Bank Version 1&amp;lt;br/&amp;gt;Both are supported in &#039;&#039;Super Mario Galaxy&#039;&#039; &amp;amp; &#039;&#039;Super Mario Galaxy 2&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Byte[16] || Padding? || All Zeros |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== INST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| INST (0x494E5354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Inst sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inst Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Inst (0x496E7374)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Keyboard sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| &lt;br /&gt;
| Start of first Keyboard section&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14+N*0x18+0x04&lt;br /&gt;
| Float&lt;br /&gt;
| Keyboard global pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard section (size 0x18) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt8&lt;br /&gt;
| Highest key of current keyboard&lt;br /&gt;
| Cannot be higher than 7F. Lowest key of next keyboard (if exists) is this value + 0x01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| Byte[6]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x07&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x09&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Float&lt;br /&gt;
| Volume&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| Float&lt;br /&gt;
| Pitch&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PMAP Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PMAP (0x504D4150)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Pmap sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pmap Section (Size 0x28) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Pmap (0x506D6170)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Byte[7]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| Byte[1]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt8&lt;br /&gt;
| Velocity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| Byte[3]&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Bank ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| UInt16&lt;br /&gt;
| &#039;&#039;&#039;Wave ID&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| Float&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PERC Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| PERC (0x50455243)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of Perc sections&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of first Inst section&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Perc Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| Perc (0x50657263)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Perc entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Pmap section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LIST Section ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| String[4]&lt;br /&gt;
| LIST (0x4C495354)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32&lt;br /&gt;
| Section size minus 0x08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32&lt;br /&gt;
| Amount &#039;&#039;&#039;N&#039;&#039;&#039; of entries&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| &lt;br /&gt;
| Start of entries&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== List entry ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32&lt;br /&gt;
| Offset to Inst or Perc section relative to file beginning.&lt;br /&gt;
| Many entries can be found holding no offset (0x00000000). The position of an entry in this list defines the &#039;&#039;&#039;Program ID&#039;&#039;&#039;. It starts counting at 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
[https://github.com/XAYRGA/ibnktool ibnktool ] (edits IBNK)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts IBNK to SF2)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=890</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=890"/>
		<updated>2025-06-06T17:07:25Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: Filestructure and more info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
BMS works very similar to Midi Format 2, with 16 channels (0-15), as well as a variety of possible independent tracks containing events such as notes, patch changes, etc..&lt;br /&gt;
&lt;br /&gt;
In contrast to Midi, events are read linearly per channel in a data stream and interpreted byte by byte. This means that multiple tracks within the same channel cannot be played back synchronously and would therefore have to be baked onto one track. However, BMS tracks can jump or call to different places in the file, e.g. to loop the song or to ensure a very high storage efficiency.&lt;br /&gt;
&lt;br /&gt;
BMS also includes extended MIDI operations, such as more powerful versions of controllers, with fade-in capability, and higher resolution control values. However, no song in either Galaxy game makes use of this.&lt;br /&gt;
&lt;br /&gt;
=== Filestructure ===&lt;br /&gt;
There are no headers or filesize checks. The file usually starts with the following:&lt;br /&gt;
*&#039;&#039;&#039;Pointer to Channel Creator Events&#039;&#039;&#039; BMS always starts directly with a &#039;&#039;&#039;C1&#039;&#039;&#039; channel creator event with channel 0 containing pointer to the actual channel creator section.&lt;br /&gt;
*&#039;&#039;&#039;Tempo Track&#039;&#039;&#039; This usually starts with a PPQN set, and then with a track with BPM changes and loop events.&lt;br /&gt;
*&#039;&#039;&#039;Channel Creator Section&#039;&#039;&#039; This contains &#039;&#039;&#039;C1&#039;&#039;&#039; channel creator events for each channel. For some unknown reason, the exact same setting that follows the PPQN setting on the tempo track must be repeated here after the C1 events, otherwise some events such as pitchwheel will not work in the song.&lt;br /&gt;
 &lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Creates a channel with a start pointer to a track with notes to be played. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#MAIN_BGM|When enabled in the SMR.szs]], channel 0 can be used for timing and chord usage and will not play any instruments from the soundbank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines Instrument and Soundbank to be used in a Track. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK bank whose sounds are to be used in a Track.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an IBNK bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* Many BMS filenames contain the suffix &#039;&#039;midi_cnv&#039;&#039;. This could indicate that Midis were first converted to a (perhaps text-based) CNV file, which was then converted to the BMS format. A similar situation applies to Nintendo&#039;s SDK tool for converting the Nintendo DS&#039;s SSEQ sequence format, which first converts Midis to a text-based SMFT format, which is then converted to the final SSEQ format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://github.com/vgmtrans/vgmtrans VGMTrans] (analyses and converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=889</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=889"/>
		<updated>2025-06-03T14:22:22Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. There are no headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines a start offset in the file to play.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Creates a channel with a start pointer to a track with notes to be played. Channel 15 is usually reserved for Yoshi Drums. [[SMR.szs#MAIN_BGM|When enabled in the SMR.szs]], channel 0 can be used for timing and chord usage and will not play any instruments from the soundbank.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines Instrument and Soundbank to be used in a Track. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK bank whose sounds are to be used in a Track.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an IBNK bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=888</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=888"/>
		<updated>2025-06-03T14:18:45Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: CIT info and more.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. There are no headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| JASSeqParser::parseNoteOn&lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| JASSeqParser::parseNoteOff&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| 81: Stop voice ID 1&lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]}&amp;lt;br/&amp;gt;OpCode: one byte, B8.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
| B8 00 64&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B8: OpCode&amp;lt;br/&amp;gt;00: Target (Volume)&amp;lt;br/&amp;gt;64: ~78% volume&lt;br /&gt;
| Allows different operations onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]}&amp;lt;br/&amp;gt;OpCode: one byte, B9.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
| B9 01 04 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;B9: OpCode&amp;lt;br/&amp;gt;01: Target (Pitch)&amp;lt;br/&amp;gt;04 00: Pitch of 4 keys&lt;br /&gt;
| Allows different operations with higher precision onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[1]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BA.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: one byte with range 0x00 through 0xFF (Int8), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7F = Full volume (100%), 0x00 = Silent (0%). 0x80 through 0xFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x01) or subtracting one (0xFF) increases/decreases pitch by one key, like from D#4 to E4.&lt;br /&gt;
* Target 2: Reverb. 0x7F = Strong reverb, 0x00 = no reverb. 0x80 through 0xFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7F = right channel, 0x00 = center, 0x80 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 02 22 01 68&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BA: OpCode&amp;lt;br/&amp;gt;02: Target (Reverb)&amp;lt;br/&amp;gt;22: Reverb of strength 34&amp;lt;br/&amp;gt;01 68: 360 Ticks&lt;br /&gt;
| Allows different operations with fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| {OpCode[1]} {Target[1]} {Parameter[2]} {Fade time[2]}&amp;lt;br/&amp;gt;OpCode: one byte, BB.&amp;lt;br/&amp;gt;Target: one byte with range 0x00 through 0x03.&amp;lt;br/&amp;gt;Parameter: two bytes with range 0x0000 through 0xFFFF (Int16), whichs purpose depends on the target:&lt;br /&gt;
* Target 0: Volume. 0x7FFF = Full volume (100%), 0x0000 = Silent (0%). 0x8000 through 0xFFFF are treated the same as silence (0%).&lt;br /&gt;
* Target 1: Pitch. Adding one (0x0100) or subtracting one (0xFF00) increases/decreases pitch by one key, like from D#4 to E4. Values inbetween can be used for fine-tuning.&lt;br /&gt;
* Target 2: Reverb. 0x7FFF = Strong reverb, 0x0000 = no reverb. 0x8000 through 0xFFFF are treated the same as no reverb.&lt;br /&gt;
* Target 3: Panning. 0x7FFF = right channel, 0x0000 = center, 0x8000 = left channel.&lt;br /&gt;
Fade time: two bytes with range 0x0000 through 0xFFFF. The amount of time in ticks until the Parameter value is met.&lt;br /&gt;
| BA 03 7F FF 02 00&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;BB: OpCode&amp;lt;br/&amp;gt;03: Target (Panning)&amp;lt;br/&amp;gt;7F FF: Panned to right channel&amp;lt;br/&amp;gt;02 00: 512 Ticks&lt;br /&gt;
| Allows different operations with higher precision and fade time onto the music track&lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {ChannelNumber[1]} {TrackPointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;ChannelNumber: one byte with range 0x00 through 0x0F. 0x00 = Channel 0, 0x0F = Channel 15.&amp;lt;br /&amp;gt;TrackPointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Channel 4&amp;lt;br /&amp;gt;05 B4 73: Offset to track&lt;br /&gt;
| Creates a channel with a start pointer to a track with notes to be played. Channel 15 is usually reserved for Yoshi Drums.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D0&lt;br /&gt;
Source: One byte, 0-15 , source port &lt;br /&gt;
Destination: One byte, 0-32, destination register&lt;br /&gt;
| &lt;br /&gt;
| Imports the value from sequence port Source and writes it to destination register &#039;Destination&#039;, the value is also written to register 3&lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| {OpCode[1]} {Source[1]} {Destination[1]}&lt;br /&gt;
Opcode: One byte, D1&lt;br /&gt;
Source: One byte, source register, 0-32&lt;br /&gt;
Destination: One Byte, destination port, 0-15&lt;br /&gt;
| &lt;br /&gt;
| Writes the value in register &#039;Source&#039; and saves it to register 3, as well as port &#039;Destination&#039;&lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| {OpCode[1]} {AccessMode[1]} {Destination[1]} {Offset[3]} {Index[1]}&lt;br /&gt;
OpCode: One Byte, 0xDC &lt;br /&gt;
AccessMode: Determines how the sequence accesses the table. &lt;br /&gt;
Destination: 24-bit offset of table&lt;br /&gt;
Index: Register target index into table&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines Instrument and Soundbank to be used in a Track. A combination of E2 and E3.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK bank whose sounds are to be used in a Track.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the note scale to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Instrument Patch / Keyboard of an IBNK bank. If no E2 Bank Select Command was used before, it will default to Bank 0.&amp;lt;/br&amp;gt;&lt;br /&gt;
Timing Channel: If the track is on a channel for timing and chord usage, this command instead defines the ID of the chord to be used from the [[CIT]].&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| {OpCode[1]} {Attack[2]} {Sustain[2]} {Decay[2]} {Amplitude[2]} {Release[2]}&amp;lt;br/&amp;gt;OpCode: one byte, E9.&amp;lt;br/&amp;gt;Attack: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-in in ticks.&amp;lt;br/&amp;gt;Sustain: two bytes with range 0x0000 through 0x7FFF. Define the duration for how long the wave is kept at maximum amplitude in ticks.&amp;lt;br/&amp;gt;Decay: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade between maximum and controlled amplitude in ticks.&amp;lt;br/&amp;gt;Amplitude: two bytes with range 0x0000 through 0x7FFF. Define the volume of the wave for the 2nd sustain duration.&amp;lt;br/&amp;gt;Release: two bytes with range 0x0000 through 0x7FFF. Define the duration of fade-out in ticks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If Amplitude is set to 0x7FFF, Sustain and Decay won&#039;t have an audible effect to the wave.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;The Attack, Decay and Release operations affect the volume of the wave linearly.&lt;br /&gt;
| E9 00 80 01 00 00 80 5F FF 00 3C&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;E9: OpCode&amp;lt;br/&amp;gt;00 80: Attack (fade-in) for 128 ticks&amp;lt;br/&amp;gt;01 00: Sustain for 256 ticks&amp;lt;br/&amp;gt;00 80: Decay for 128 ticks&amp;lt;br/&amp;gt;5F FF: Amplitude of 75% compared to maximum&amp;lt;br/&amp;gt;00 3C: Release (fade-out) for 60 ticks&lt;br /&gt;
| Perform ADSR operations on a key. Must be placed before the actual key presses. [https://cdn.discordapp.com/attachments/1361554635369873490/1376201837237239899/image.png?ex=68347756&amp;amp;is=683325d6&amp;amp;hm=10661c473bb1ecb6187a17baafbc22c7d8af0a59cb0ceb87d7c85f42a8fee54c See this image for a visual representation of the ADSR operations].&lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| {OpCode[1]} {WaitTime[1]}&lt;br /&gt;
Waits for WaitTime ticks&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length, ending with &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 5C 6E 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F 5C 6E: &amp;quot;Hello\n&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=887</id>
		<title>SMR.szs</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=887"/>
		<updated>2025-06-03T14:00:49Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* MAIN_BGM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMR.szs&#039;&#039;&#039; is a compressed &#039;&#039;&#039;BAA&#039;&#039;&#039; file (&#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;A&#039;&#039;&#039;udio &#039;&#039;&#039;A&#039;&#039;&#039;rchive) which defines the game&#039;s sound system. It contains references to [[AST (File Format)|streamed]] and [[BMS (File Format)|sequenced]] music files as well as data for sound effects and instruments. It can be found in various JAudio games, however the specifications below mainly apply to &#039;&#039;Super Mario Galaxy&#039;&#039; and &#039;&#039;Super Mario Galaxy 2&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following files are directly linked to SMR.szs:&lt;br /&gt;
* [[BgmParam|AudioRes/Info/BgmParam.arc]] (SMG2 only, overrides the BGM and STM volume parameter)&lt;br /&gt;
* [[CIT (File Format)|AudioRes/Info/JaiChord.arc]] (SMR.szs links BGM labels to CIT file IDs within this archive)&lt;br /&gt;
* [[BMS (File Format)|AudioRes/Seqs/JaiSeq.arc]] (SMR.szs links BGM labels to BMS file IDs within this archive)&lt;br /&gt;
* [[AST (File Format)|AudioRes/Stream/*.ast]] (SMR.szs links STM labels to AST files)&lt;br /&gt;
* [[AW (File Format)|AudioRes/Waves/*.aw]] (SMR.szs defines the contents of AW files)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following files are indirectly linked to SMR.szs:&lt;br /&gt;
* [[ActionSound|AudioRes/Info/ActionSound.arc]] (SMG2 only, links hardcoded triggers for all objects to sound effects in SMR.szs)&lt;br /&gt;
* AudioRes/Info/JaiMe.arc (References instruments from SMR.szs)&lt;br /&gt;
* [[BRS (File Format)|AudioRes/Info/JaiRemixSeq.arc]] (References instruments from SMR.szs)&lt;br /&gt;
* [[MultiBgmInfo|AudioRes/Info/MultiBgmInfo.arc]] (SMG2 only, connects MBGM labels to STM and BGM labels, allowing streamed and sequenced audio to play simultaneously)&lt;br /&gt;
* [[SoundIdToInstList|AudioRes/Info/SoundIdToInstList]] (SMG2 only, references Sound IDs and instruments from SMR.szs and allows loading AW files)&lt;br /&gt;
* AudioRes/Info/StageBgmInfo.arc (SMG2 only, controls the [[ScenarioBgmInfo|main music]] and [[StageBgmInfo|music changes]] for all stages)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
The header contains offsets to all files included in SMR.szs:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;AA_&amp;lt;&amp;lt;/code&amp;gt; (0x41415F3C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bst &amp;lt;/code&amp;gt; (0x62737420)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST|BST]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BST section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bstn&amp;lt;/code&amp;gt; (0x6273746E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN|BSTN]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSTN section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bsc &amp;lt;/code&amp;gt; (0x62736320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSC|BSC]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSC section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;ws  &amp;lt;/code&amp;gt; (0x77732020)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| WSYS file ID (N)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#WSYS|WSYS]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0xC&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Unknown (mostly 0x00000000, once seen as 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bnk &amp;lt;/code&amp;gt; (0x626E6B20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| IBNK file ID (M)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#IBNK|IBNK]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;gt;_AA&amp;lt;/code&amp;gt; (0x3E5F4141)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==BST==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able contains parameters for all music and sound effects&lt;br /&gt;
===BST Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BST &amp;lt;/code&amp;gt; (0x42535420)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST main table|BST main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BST main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE table|SE table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM table|BGM table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM table|STREAM table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE parameter table|SE parameter table]].&lt;br /&gt;
&lt;br /&gt;
===BGM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM parameter table|BGM parameter table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameter table|STREAM parameter table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x50&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#SE parameters|SE parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====SE parameters====&lt;br /&gt;
size: 0x6 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Can be overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x60&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#BGM parameters|BGM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====BGM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description for MAIN_BGM&lt;br /&gt;
! Description for MULTI_BGM&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
| Unknown. Always 0x78&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiSeq.arc file ID. Must always be valid.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiChord.arc file ID. 0xFFFF if no JaiChord file is set.&lt;br /&gt;
| Unknown. Always 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Unknown. Seen as 0x0000 and 0x0001.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameters|STREAM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====STREAM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x80&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Channel count. 0x000E for 2 channels, 0x00EE for 4 channels&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated AST filename, relative to the root of the ISO. Example: &amp;lt;code&amp;gt;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BST section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSTN==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able &#039;&#039;&#039;N&#039;&#039;&#039;ames section contains labels for all music and sound effects&lt;br /&gt;
===BSTN Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BSTN&amp;lt;/code&amp;gt; (0x4253544E)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN main table|BSTN main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSTN main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE names table|SE names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM names table|BGM names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM names table|STREAM names table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Sound Effect name. Points to &amp;lt;code&amp;gt;SE&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE name offset table|SE name offset table]].&lt;br /&gt;
&lt;br /&gt;
===BGM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Background Music name. Points to &amp;lt;code&amp;gt;BGM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM name offset table|BGM name offset table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Stream Music name. Points to &amp;lt;code&amp;gt;STREAM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM name offset table|STREAM name offset table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect category name. Examples: &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PLAYER_VOICE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect name. Examples: &amp;lt;code&amp;gt;SE_SY_COIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SE_PV_JUMP_S&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music category name, like &amp;lt;code&amp;gt;MAIN_BGM&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MULTI_BGM&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music name. Examples: &amp;lt;code&amp;gt;BGM_MISS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MBGM_STAR_CHANCE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music category name. Simply &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music name. Examples: &amp;lt;code&amp;gt;STM_STAR_CHANCE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STM_SMG_GALAXY_01&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BSTN section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSC==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;C&#039;&#039;&#039;ollection section (often referred to as &#039;&#039;&#039;SC section&#039;&#039;&#039;) defines the playback of all sound effects via [[BMS (File Format)|BMS]] data.&lt;br /&gt;
&lt;br /&gt;
===BSC Header===&lt;br /&gt;
size: N * 0x4 + 0x8&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x2)&lt;br /&gt;
| &amp;lt;code&amp;gt;SC&amp;lt;/code&amp;gt; (0x5343)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Amount N of sound categories (0x0E in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| BSC section size&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU offset table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BSC offset table|BSC offset table]].&lt;br /&gt;
&lt;br /&gt;
===BSC offset table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BMS data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inbetween tables is the BMS data that makes up all of the sound effects. The BSC section is basically structured like this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BSC&lt;br /&gt;
! Contents&lt;br /&gt;
|-&lt;br /&gt;
| BSC Header&lt;br /&gt;
| Offsets to [CATEGORY] offset tables&lt;br /&gt;
|-&lt;br /&gt;
| Main BMS controller&lt;br /&gt;
| BMS data thats mandatory for all sound effects. Its stored once at the beginning of the file to reduce filesize&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the first sound category (SYSTEM)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the second sound category (PLAYER_VOICE)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSC optimizations===&lt;br /&gt;
Despite using the same data that BMS files use, the BSC section optimizes a lot of them. Here are some notable ones:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BMS files&lt;br /&gt;
! BSC section&lt;br /&gt;
|-&lt;br /&gt;
| Use E2 + E3 to define an instrument. Takes 0x4 bytes in total&lt;br /&gt;
| Use E1 to define an instrument. Takes 0x3 bytes in total&lt;br /&gt;
|-&lt;br /&gt;
| Close all tracks with FF, even tracks that end with a C7 loop&lt;br /&gt;
| Omit use of FF when the last operation in a track is C7&lt;br /&gt;
|-&lt;br /&gt;
| Define playback speed with D8 and E0 for each BMS file individually&lt;br /&gt;
| Define playback speed with EA and D8 once. Every sound effect references this with a C3 jump, reducing the filesize by a lot as opposed to defining the playback speed individually for each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| no equivalent&lt;br /&gt;
| All dummy sounds point to offset 0x6B, which holds FF instead of defining FF for all dummies individually&lt;br /&gt;
|-&lt;br /&gt;
| OpenTrack with voices 1-7, wait with F0 and shut voices with the 8X operator. Takes up 0x6 bytes minimum&lt;br /&gt;
| OpenTrack with voice 0, which enables a Midi gate. This only needs 0x4 bytes to define a sound/key and how long its supposed to last&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WSYS==&lt;br /&gt;
&#039;&#039;&#039;W&#039;&#039;&#039;ave &#039;&#039;&#039;Sys&#039;&#039;&#039;tem. See [[WSYS]]&lt;br /&gt;
&lt;br /&gt;
==IBNK==&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nstrument &#039;&#039;&#039;B&#039;&#039;&#039;a&#039;&#039;&#039;nk&#039;&#039;&#039;. See [[IBNK]]&lt;br /&gt;
&lt;br /&gt;
==Editing SMR.szs==&lt;br /&gt;
&#039;&#039;&#039;The following section contains instructions for editing SMR.szs with the SoundModdingToolkit. They do not contain specifications for the file itself.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tool [https://xayr.gay/tools/SoundModdingToolkit/ SoundModdingToolkit] can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool&#039;s converted structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===BGM===&lt;br /&gt;
====MAIN_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MAIN_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the sequenced music. The music sequence files can be found in bms format in &#039;&#039;AudioRes/Seqs/JaiSeq.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| File ID of the bms file in JaiSeq.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| File ID of the cit file in JaiChord.arc to use (the filename is ignored)&amp;lt;/br&amp;gt;-1 = No CIT/chord&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| Whether BMS channel 0 should be used for timing and chord usage for [[CIT (File Format)|chords]] or not..&amp;lt;/br&amp;gt;0 = False, 1 = True&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this sequence (e.g. &amp;quot;BGM_MISS&amp;quot;).&amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====MULTI_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MULTI_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in [[MultiBgmInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 120&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| ? always -1&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 96&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this entry (e.g. &amp;quot;MBGM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/STREAM/0.json&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the streamed ast audio files including its internal STM name as well as its filepath.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| streamType&lt;br /&gt;
| Stream Type&amp;lt;br /&amp;gt;14: Standard Stream (2 Channels)&amp;lt;br /&amp;gt;238: Multi Stream (4 Channels)&lt;br /&gt;
|-&lt;br /&gt;
| streamPath&lt;br /&gt;
| Filepath of the AST file to use (e.g. &amp;quot;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this song (e.g. &amp;quot;STM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE===&lt;br /&gt;
====AW====&lt;br /&gt;
Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:&lt;br /&gt;
*&#039;&#039;&#039;manifest.json&#039;&#039;&#039; Contains the ID and name of the aw file&lt;br /&gt;
*&#039;&#039;&#039;wavetable.json&#039;&#039;&#039; Contains settings for each sound of the aw. file&lt;br /&gt;
&lt;br /&gt;
=====wavetable=====&lt;br /&gt;
Each entry starts with the name of the Wav file (e.g. &amp;quot;31&amp;quot;) followed by its settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| format&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sampleRate&lt;br /&gt;
| The sample rate at which the sound should be played. (e.g. &amp;quot;22050.0&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sampleCount&lt;br /&gt;
| Length of the sound in samples&lt;br /&gt;
|-&lt;br /&gt;
| loop&lt;br /&gt;
| Whether it should be looped or not&amp;lt;br /&amp;gt;&#039;&#039;&#039;true:&#039;&#039;&#039; loop&amp;lt;br /&amp;gt;&#039;&#039;&#039;false:&#039;&#039;&#039; do not loop&lt;br /&gt;
|-&lt;br /&gt;
| loop_start&lt;br /&gt;
| Loop Start position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| loop_end&lt;br /&gt;
| Loop End position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| last&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| penult&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Libraries====&lt;br /&gt;
In &#039;&#039;SoundTable\SE\libraries\&#039;&#039; there are several libraries which contain settings for sounds with their internal assigned names.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Always 80&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? Always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal Name of the soundeffect (e.g. &amp;quot;SE_SV_LV_YOSHI_FLUTTER&amp;quot;)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=886</id>
		<title>SMR.szs</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=886"/>
		<updated>2025-06-03T14:00:08Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* MAIN_BGM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMR.szs&#039;&#039;&#039; is a compressed &#039;&#039;&#039;BAA&#039;&#039;&#039; file (&#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;A&#039;&#039;&#039;udio &#039;&#039;&#039;A&#039;&#039;&#039;rchive) which defines the game&#039;s sound system. It contains references to [[AST (File Format)|streamed]] and [[BMS (File Format)|sequenced]] music files as well as data for sound effects and instruments. It can be found in various JAudio games, however the specifications below mainly apply to &#039;&#039;Super Mario Galaxy&#039;&#039; and &#039;&#039;Super Mario Galaxy 2&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following files are directly linked to SMR.szs:&lt;br /&gt;
* [[BgmParam|AudioRes/Info/BgmParam.arc]] (SMG2 only, overrides the BGM and STM volume parameter)&lt;br /&gt;
* [[CIT (File Format)|AudioRes/Info/JaiChord.arc]] (SMR.szs links BGM labels to CIT file IDs within this archive)&lt;br /&gt;
* [[BMS (File Format)|AudioRes/Seqs/JaiSeq.arc]] (SMR.szs links BGM labels to BMS file IDs within this archive)&lt;br /&gt;
* [[AST (File Format)|AudioRes/Stream/*.ast]] (SMR.szs links STM labels to AST files)&lt;br /&gt;
* [[AW (File Format)|AudioRes/Waves/*.aw]] (SMR.szs defines the contents of AW files)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following files are indirectly linked to SMR.szs:&lt;br /&gt;
* [[ActionSound|AudioRes/Info/ActionSound.arc]] (SMG2 only, links hardcoded triggers for all objects to sound effects in SMR.szs)&lt;br /&gt;
* AudioRes/Info/JaiMe.arc (References instruments from SMR.szs)&lt;br /&gt;
* [[BRS (File Format)|AudioRes/Info/JaiRemixSeq.arc]] (References instruments from SMR.szs)&lt;br /&gt;
* [[MultiBgmInfo|AudioRes/Info/MultiBgmInfo.arc]] (SMG2 only, connects MBGM labels to STM and BGM labels, allowing streamed and sequenced audio to play simultaneously)&lt;br /&gt;
* [[SoundIdToInstList|AudioRes/Info/SoundIdToInstList]] (SMG2 only, references Sound IDs and instruments from SMR.szs and allows loading AW files)&lt;br /&gt;
* AudioRes/Info/StageBgmInfo.arc (SMG2 only, controls the [[ScenarioBgmInfo|main music]] and [[StageBgmInfo|music changes]] for all stages)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
The header contains offsets to all files included in SMR.szs:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;AA_&amp;lt;&amp;lt;/code&amp;gt; (0x41415F3C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bst &amp;lt;/code&amp;gt; (0x62737420)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST|BST]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BST section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bstn&amp;lt;/code&amp;gt; (0x6273746E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN|BSTN]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSTN section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bsc &amp;lt;/code&amp;gt; (0x62736320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSC|BSC]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSC section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;ws  &amp;lt;/code&amp;gt; (0x77732020)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| WSYS file ID (N)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#WSYS|WSYS]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0xC&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Unknown (mostly 0x00000000, once seen as 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bnk &amp;lt;/code&amp;gt; (0x626E6B20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| IBNK file ID (M)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#IBNK|IBNK]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;gt;_AA&amp;lt;/code&amp;gt; (0x3E5F4141)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==BST==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able contains parameters for all music and sound effects&lt;br /&gt;
===BST Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BST &amp;lt;/code&amp;gt; (0x42535420)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST main table|BST main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BST main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE table|SE table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM table|BGM table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM table|STREAM table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE parameter table|SE parameter table]].&lt;br /&gt;
&lt;br /&gt;
===BGM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM parameter table|BGM parameter table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameter table|STREAM parameter table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x50&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#SE parameters|SE parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====SE parameters====&lt;br /&gt;
size: 0x6 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Can be overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x60&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#BGM parameters|BGM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====BGM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description for MAIN_BGM&lt;br /&gt;
! Description for MULTI_BGM&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
| Unknown. Always 0x78&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiSeq.arc file ID. Must always be valid.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiChord.arc file ID. 0xFFFF if no JaiChord file is set.&lt;br /&gt;
| Unknown. Always 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Unknown. Seen as 0x0000 and 0x0001.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameters|STREAM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====STREAM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x80&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Channel count. 0x000E for 2 channels, 0x00EE for 4 channels&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated AST filename, relative to the root of the ISO. Example: &amp;lt;code&amp;gt;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BST section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSTN==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able &#039;&#039;&#039;N&#039;&#039;&#039;ames section contains labels for all music and sound effects&lt;br /&gt;
===BSTN Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BSTN&amp;lt;/code&amp;gt; (0x4253544E)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN main table|BSTN main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSTN main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE names table|SE names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM names table|BGM names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM names table|STREAM names table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Sound Effect name. Points to &amp;lt;code&amp;gt;SE&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE name offset table|SE name offset table]].&lt;br /&gt;
&lt;br /&gt;
===BGM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Background Music name. Points to &amp;lt;code&amp;gt;BGM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM name offset table|BGM name offset table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Stream Music name. Points to &amp;lt;code&amp;gt;STREAM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM name offset table|STREAM name offset table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect category name. Examples: &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PLAYER_VOICE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect name. Examples: &amp;lt;code&amp;gt;SE_SY_COIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SE_PV_JUMP_S&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music category name, like &amp;lt;code&amp;gt;MAIN_BGM&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MULTI_BGM&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music name. Examples: &amp;lt;code&amp;gt;BGM_MISS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MBGM_STAR_CHANCE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music category name. Simply &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music name. Examples: &amp;lt;code&amp;gt;STM_STAR_CHANCE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STM_SMG_GALAXY_01&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BSTN section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSC==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;C&#039;&#039;&#039;ollection section (often referred to as &#039;&#039;&#039;SC section&#039;&#039;&#039;) defines the playback of all sound effects via [[BMS (File Format)|BMS]] data.&lt;br /&gt;
&lt;br /&gt;
===BSC Header===&lt;br /&gt;
size: N * 0x4 + 0x8&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x2)&lt;br /&gt;
| &amp;lt;code&amp;gt;SC&amp;lt;/code&amp;gt; (0x5343)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Amount N of sound categories (0x0E in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| BSC section size&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU offset table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BSC offset table|BSC offset table]].&lt;br /&gt;
&lt;br /&gt;
===BSC offset table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BMS data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inbetween tables is the BMS data that makes up all of the sound effects. The BSC section is basically structured like this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BSC&lt;br /&gt;
! Contents&lt;br /&gt;
|-&lt;br /&gt;
| BSC Header&lt;br /&gt;
| Offsets to [CATEGORY] offset tables&lt;br /&gt;
|-&lt;br /&gt;
| Main BMS controller&lt;br /&gt;
| BMS data thats mandatory for all sound effects. Its stored once at the beginning of the file to reduce filesize&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the first sound category (SYSTEM)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the second sound category (PLAYER_VOICE)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSC optimizations===&lt;br /&gt;
Despite using the same data that BMS files use, the BSC section optimizes a lot of them. Here are some notable ones:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BMS files&lt;br /&gt;
! BSC section&lt;br /&gt;
|-&lt;br /&gt;
| Use E2 + E3 to define an instrument. Takes 0x4 bytes in total&lt;br /&gt;
| Use E1 to define an instrument. Takes 0x3 bytes in total&lt;br /&gt;
|-&lt;br /&gt;
| Close all tracks with FF, even tracks that end with a C7 loop&lt;br /&gt;
| Omit use of FF when the last operation in a track is C7&lt;br /&gt;
|-&lt;br /&gt;
| Define playback speed with D8 and E0 for each BMS file individually&lt;br /&gt;
| Define playback speed with EA and D8 once. Every sound effect references this with a C3 jump, reducing the filesize by a lot as opposed to defining the playback speed individually for each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| no equivalent&lt;br /&gt;
| All dummy sounds point to offset 0x6B, which holds FF instead of defining FF for all dummies individually&lt;br /&gt;
|-&lt;br /&gt;
| OpenTrack with voices 1-7, wait with F0 and shut voices with the 8X operator. Takes up 0x6 bytes minimum&lt;br /&gt;
| OpenTrack with voice 0, which enables a Midi gate. This only needs 0x4 bytes to define a sound/key and how long its supposed to last&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WSYS==&lt;br /&gt;
&#039;&#039;&#039;W&#039;&#039;&#039;ave &#039;&#039;&#039;Sys&#039;&#039;&#039;tem. See [[WSYS]]&lt;br /&gt;
&lt;br /&gt;
==IBNK==&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nstrument &#039;&#039;&#039;B&#039;&#039;&#039;a&#039;&#039;&#039;nk&#039;&#039;&#039;. See [[IBNK]]&lt;br /&gt;
&lt;br /&gt;
==Editing SMR.szs==&lt;br /&gt;
&#039;&#039;&#039;The following section contains instructions for editing SMR.szs with the SoundModdingToolkit. They do not contain specifications for the file itself.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tool [https://xayr.gay/tools/SoundModdingToolkit/ SoundModdingToolkit] can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool&#039;s converted structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===BGM===&lt;br /&gt;
====MAIN_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MAIN_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the sequenced music. The music sequence files can be found in bms format in &#039;&#039;AudioRes/Seqs/JaiSeq.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| File ID of the bms file in JaiSeq.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| File ID of the cit file in JaiChord.arc to use (the filename is ignored)&amp;lt;/br&amp;gt;-1 = No CIT/chord&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| Whether BMS channel 0 should be used as a timing channel for [[CIT (File Format)|chords]] or not..&amp;lt;/br&amp;gt;0 = False, 1 = True&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this sequence (e.g. &amp;quot;BGM_MISS&amp;quot;).&amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====MULTI_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MULTI_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in [[MultiBgmInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 120&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| ? always -1&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 96&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this entry (e.g. &amp;quot;MBGM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/STREAM/0.json&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the streamed ast audio files including its internal STM name as well as its filepath.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| streamType&lt;br /&gt;
| Stream Type&amp;lt;br /&amp;gt;14: Standard Stream (2 Channels)&amp;lt;br /&amp;gt;238: Multi Stream (4 Channels)&lt;br /&gt;
|-&lt;br /&gt;
| streamPath&lt;br /&gt;
| Filepath of the AST file to use (e.g. &amp;quot;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this song (e.g. &amp;quot;STM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE===&lt;br /&gt;
====AW====&lt;br /&gt;
Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:&lt;br /&gt;
*&#039;&#039;&#039;manifest.json&#039;&#039;&#039; Contains the ID and name of the aw file&lt;br /&gt;
*&#039;&#039;&#039;wavetable.json&#039;&#039;&#039; Contains settings for each sound of the aw. file&lt;br /&gt;
&lt;br /&gt;
=====wavetable=====&lt;br /&gt;
Each entry starts with the name of the Wav file (e.g. &amp;quot;31&amp;quot;) followed by its settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| format&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sampleRate&lt;br /&gt;
| The sample rate at which the sound should be played. (e.g. &amp;quot;22050.0&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sampleCount&lt;br /&gt;
| Length of the sound in samples&lt;br /&gt;
|-&lt;br /&gt;
| loop&lt;br /&gt;
| Whether it should be looped or not&amp;lt;br /&amp;gt;&#039;&#039;&#039;true:&#039;&#039;&#039; loop&amp;lt;br /&amp;gt;&#039;&#039;&#039;false:&#039;&#039;&#039; do not loop&lt;br /&gt;
|-&lt;br /&gt;
| loop_start&lt;br /&gt;
| Loop Start position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| loop_end&lt;br /&gt;
| Loop End position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| last&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| penult&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Libraries====&lt;br /&gt;
In &#039;&#039;SoundTable\SE\libraries\&#039;&#039; there are several libraries which contain settings for sounds with their internal assigned names.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Always 80&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? Always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal Name of the soundeffect (e.g. &amp;quot;SE_SV_LV_YOSHI_FLUTTER&amp;quot;)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=885</id>
		<title>SMR.szs</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=885"/>
		<updated>2025-06-03T13:58:34Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* MAIN_BGM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMR.szs&#039;&#039;&#039; is a compressed &#039;&#039;&#039;BAA&#039;&#039;&#039; file (&#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;A&#039;&#039;&#039;udio &#039;&#039;&#039;A&#039;&#039;&#039;rchive) which defines the game&#039;s sound system. It contains references to [[AST (File Format)|streamed]] and [[BMS (File Format)|sequenced]] music files as well as data for sound effects and instruments. It can be found in various JAudio games, however the specifications below mainly apply to &#039;&#039;Super Mario Galaxy&#039;&#039; and &#039;&#039;Super Mario Galaxy 2&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following files are directly linked to SMR.szs:&lt;br /&gt;
* [[BgmParam|AudioRes/Info/BgmParam.arc]] (SMG2 only, overrides the BGM and STM volume parameter)&lt;br /&gt;
* [[CIT (File Format)|AudioRes/Info/JaiChord.arc]] (SMR.szs links BGM labels to CIT file IDs within this archive)&lt;br /&gt;
* [[BMS (File Format)|AudioRes/Seqs/JaiSeq.arc]] (SMR.szs links BGM labels to BMS file IDs within this archive)&lt;br /&gt;
* [[AST (File Format)|AudioRes/Stream/*.ast]] (SMR.szs links STM labels to AST files)&lt;br /&gt;
* [[AW (File Format)|AudioRes/Waves/*.aw]] (SMR.szs defines the contents of AW files)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following files are indirectly linked to SMR.szs:&lt;br /&gt;
* [[ActionSound|AudioRes/Info/ActionSound.arc]] (SMG2 only, links hardcoded triggers for all objects to sound effects in SMR.szs)&lt;br /&gt;
* AudioRes/Info/JaiMe.arc (References instruments from SMR.szs)&lt;br /&gt;
* [[BRS (File Format)|AudioRes/Info/JaiRemixSeq.arc]] (References instruments from SMR.szs)&lt;br /&gt;
* [[MultiBgmInfo|AudioRes/Info/MultiBgmInfo.arc]] (SMG2 only, connects MBGM labels to STM and BGM labels, allowing streamed and sequenced audio to play simultaneously)&lt;br /&gt;
* [[SoundIdToInstList|AudioRes/Info/SoundIdToInstList]] (SMG2 only, references Sound IDs and instruments from SMR.szs and allows loading AW files)&lt;br /&gt;
* AudioRes/Info/StageBgmInfo.arc (SMG2 only, controls the [[ScenarioBgmInfo|main music]] and [[StageBgmInfo|music changes]] for all stages)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
The header contains offsets to all files included in SMR.szs:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;AA_&amp;lt;&amp;lt;/code&amp;gt; (0x41415F3C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bst &amp;lt;/code&amp;gt; (0x62737420)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST|BST]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BST section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bstn&amp;lt;/code&amp;gt; (0x6273746E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN|BSTN]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSTN section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bsc &amp;lt;/code&amp;gt; (0x62736320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSC|BSC]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSC section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;ws  &amp;lt;/code&amp;gt; (0x77732020)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| WSYS file ID (N)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#WSYS|WSYS]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0xC&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Unknown (mostly 0x00000000, once seen as 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bnk &amp;lt;/code&amp;gt; (0x626E6B20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| IBNK file ID (M)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#IBNK|IBNK]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;gt;_AA&amp;lt;/code&amp;gt; (0x3E5F4141)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==BST==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able contains parameters for all music and sound effects&lt;br /&gt;
===BST Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BST &amp;lt;/code&amp;gt; (0x42535420)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST main table|BST main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BST main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE table|SE table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM table|BGM table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM table|STREAM table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE parameter table|SE parameter table]].&lt;br /&gt;
&lt;br /&gt;
===BGM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM parameter table|BGM parameter table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameter table|STREAM parameter table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x50&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#SE parameters|SE parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====SE parameters====&lt;br /&gt;
size: 0x6 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Can be overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x60&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#BGM parameters|BGM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====BGM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description for MAIN_BGM&lt;br /&gt;
! Description for MULTI_BGM&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
| Unknown. Always 0x78&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiSeq.arc file ID. Must always be valid.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiChord.arc file ID. 0xFFFF if no JaiChord file is set.&lt;br /&gt;
| Unknown. Always 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Unknown. Seen as 0x0000 and 0x0001.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameters|STREAM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====STREAM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x80&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Channel count. 0x000E for 2 channels, 0x00EE for 4 channels&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated AST filename, relative to the root of the ISO. Example: &amp;lt;code&amp;gt;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BST section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSTN==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able &#039;&#039;&#039;N&#039;&#039;&#039;ames section contains labels for all music and sound effects&lt;br /&gt;
===BSTN Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BSTN&amp;lt;/code&amp;gt; (0x4253544E)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN main table|BSTN main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSTN main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE names table|SE names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM names table|BGM names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM names table|STREAM names table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Sound Effect name. Points to &amp;lt;code&amp;gt;SE&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE name offset table|SE name offset table]].&lt;br /&gt;
&lt;br /&gt;
===BGM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Background Music name. Points to &amp;lt;code&amp;gt;BGM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM name offset table|BGM name offset table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Stream Music name. Points to &amp;lt;code&amp;gt;STREAM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM name offset table|STREAM name offset table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect category name. Examples: &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PLAYER_VOICE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect name. Examples: &amp;lt;code&amp;gt;SE_SY_COIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SE_PV_JUMP_S&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music category name, like &amp;lt;code&amp;gt;MAIN_BGM&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MULTI_BGM&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music name. Examples: &amp;lt;code&amp;gt;BGM_MISS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MBGM_STAR_CHANCE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music category name. Simply &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music name. Examples: &amp;lt;code&amp;gt;STM_STAR_CHANCE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STM_SMG_GALAXY_01&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BSTN section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSC==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;C&#039;&#039;&#039;ollection section (often referred to as &#039;&#039;&#039;SC section&#039;&#039;&#039;) defines the playback of all sound effects via [[BMS (File Format)|BMS]] data.&lt;br /&gt;
&lt;br /&gt;
===BSC Header===&lt;br /&gt;
size: N * 0x4 + 0x8&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x2)&lt;br /&gt;
| &amp;lt;code&amp;gt;SC&amp;lt;/code&amp;gt; (0x5343)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Amount N of sound categories (0x0E in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| BSC section size&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU offset table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BSC offset table|BSC offset table]].&lt;br /&gt;
&lt;br /&gt;
===BSC offset table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BMS data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inbetween tables is the BMS data that makes up all of the sound effects. The BSC section is basically structured like this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BSC&lt;br /&gt;
! Contents&lt;br /&gt;
|-&lt;br /&gt;
| BSC Header&lt;br /&gt;
| Offsets to [CATEGORY] offset tables&lt;br /&gt;
|-&lt;br /&gt;
| Main BMS controller&lt;br /&gt;
| BMS data thats mandatory for all sound effects. Its stored once at the beginning of the file to reduce filesize&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the first sound category (SYSTEM)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the second sound category (PLAYER_VOICE)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSC optimizations===&lt;br /&gt;
Despite using the same data that BMS files use, the BSC section optimizes a lot of them. Here are some notable ones:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BMS files&lt;br /&gt;
! BSC section&lt;br /&gt;
|-&lt;br /&gt;
| Use E2 + E3 to define an instrument. Takes 0x4 bytes in total&lt;br /&gt;
| Use E1 to define an instrument. Takes 0x3 bytes in total&lt;br /&gt;
|-&lt;br /&gt;
| Close all tracks with FF, even tracks that end with a C7 loop&lt;br /&gt;
| Omit use of FF when the last operation in a track is C7&lt;br /&gt;
|-&lt;br /&gt;
| Define playback speed with D8 and E0 for each BMS file individually&lt;br /&gt;
| Define playback speed with EA and D8 once. Every sound effect references this with a C3 jump, reducing the filesize by a lot as opposed to defining the playback speed individually for each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| no equivalent&lt;br /&gt;
| All dummy sounds point to offset 0x6B, which holds FF instead of defining FF for all dummies individually&lt;br /&gt;
|-&lt;br /&gt;
| OpenTrack with voices 1-7, wait with F0 and shut voices with the 8X operator. Takes up 0x6 bytes minimum&lt;br /&gt;
| OpenTrack with voice 0, which enables a Midi gate. This only needs 0x4 bytes to define a sound/key and how long its supposed to last&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WSYS==&lt;br /&gt;
&#039;&#039;&#039;W&#039;&#039;&#039;ave &#039;&#039;&#039;Sys&#039;&#039;&#039;tem. See [[WSYS]]&lt;br /&gt;
&lt;br /&gt;
==IBNK==&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nstrument &#039;&#039;&#039;B&#039;&#039;&#039;a&#039;&#039;&#039;nk&#039;&#039;&#039;. See [[IBNK]]&lt;br /&gt;
&lt;br /&gt;
==Editing SMR.szs==&lt;br /&gt;
&#039;&#039;&#039;The following section contains instructions for editing SMR.szs with the SoundModdingToolkit. They do not contain specifications for the file itself.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tool [https://xayr.gay/tools/SoundModdingToolkit/ SoundModdingToolkit] can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool&#039;s converted structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===BGM===&lt;br /&gt;
====MAIN_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MAIN_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the sequenced music. The music sequence files can be found in bms format in &#039;&#039;AudioRes/Seqs/JaiSeq.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| File ID of the bms file in JaiSeq.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| File ID of the cit file in JaiChord.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| Whether BMS channel 0 should be used as a timing channel for [[CIT (File Format)|chords]] or not..&amp;lt;/br&amp;gt;0 = False, 1 = True&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this sequence (e.g. &amp;quot;BGM_MISS&amp;quot;).&amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====MULTI_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MULTI_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in [[MultiBgmInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 120&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| ? always -1&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 96&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this entry (e.g. &amp;quot;MBGM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/STREAM/0.json&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the streamed ast audio files including its internal STM name as well as its filepath.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| streamType&lt;br /&gt;
| Stream Type&amp;lt;br /&amp;gt;14: Standard Stream (2 Channels)&amp;lt;br /&amp;gt;238: Multi Stream (4 Channels)&lt;br /&gt;
|-&lt;br /&gt;
| streamPath&lt;br /&gt;
| Filepath of the AST file to use (e.g. &amp;quot;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this song (e.g. &amp;quot;STM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE===&lt;br /&gt;
====AW====&lt;br /&gt;
Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:&lt;br /&gt;
*&#039;&#039;&#039;manifest.json&#039;&#039;&#039; Contains the ID and name of the aw file&lt;br /&gt;
*&#039;&#039;&#039;wavetable.json&#039;&#039;&#039; Contains settings for each sound of the aw. file&lt;br /&gt;
&lt;br /&gt;
=====wavetable=====&lt;br /&gt;
Each entry starts with the name of the Wav file (e.g. &amp;quot;31&amp;quot;) followed by its settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| format&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sampleRate&lt;br /&gt;
| The sample rate at which the sound should be played. (e.g. &amp;quot;22050.0&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sampleCount&lt;br /&gt;
| Length of the sound in samples&lt;br /&gt;
|-&lt;br /&gt;
| loop&lt;br /&gt;
| Whether it should be looped or not&amp;lt;br /&amp;gt;&#039;&#039;&#039;true:&#039;&#039;&#039; loop&amp;lt;br /&amp;gt;&#039;&#039;&#039;false:&#039;&#039;&#039; do not loop&lt;br /&gt;
|-&lt;br /&gt;
| loop_start&lt;br /&gt;
| Loop Start position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| loop_end&lt;br /&gt;
| Loop End position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| last&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| penult&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Libraries====&lt;br /&gt;
In &#039;&#039;SoundTable\SE\libraries\&#039;&#039; there are several libraries which contain settings for sounds with their internal assigned names.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Always 80&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? Always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal Name of the soundeffect (e.g. &amp;quot;SE_SV_LV_YOSHI_FLUTTER&amp;quot;)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=884</id>
		<title>SMR.szs</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=884"/>
		<updated>2025-06-03T13:56:37Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Editing SMR.szs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMR.szs&#039;&#039;&#039; is a compressed &#039;&#039;&#039;BAA&#039;&#039;&#039; file (&#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;A&#039;&#039;&#039;udio &#039;&#039;&#039;A&#039;&#039;&#039;rchive) which defines the game&#039;s sound system. It contains references to [[AST (File Format)|streamed]] and [[BMS (File Format)|sequenced]] music files as well as data for sound effects and instruments. It can be found in various JAudio games, however the specifications below mainly apply to &#039;&#039;Super Mario Galaxy&#039;&#039; and &#039;&#039;Super Mario Galaxy 2&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following files are directly linked to SMR.szs:&lt;br /&gt;
* [[BgmParam|AudioRes/Info/BgmParam.arc]] (SMG2 only, overrides the BGM and STM volume parameter)&lt;br /&gt;
* [[CIT (File Format)|AudioRes/Info/JaiChord.arc]] (SMR.szs links BGM labels to CIT file IDs within this archive)&lt;br /&gt;
* [[BMS (File Format)|AudioRes/Seqs/JaiSeq.arc]] (SMR.szs links BGM labels to BMS file IDs within this archive)&lt;br /&gt;
* [[AST (File Format)|AudioRes/Stream/*.ast]] (SMR.szs links STM labels to AST files)&lt;br /&gt;
* [[AW (File Format)|AudioRes/Waves/*.aw]] (SMR.szs defines the contents of AW files)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following files are indirectly linked to SMR.szs:&lt;br /&gt;
* [[ActionSound|AudioRes/Info/ActionSound.arc]] (SMG2 only, links hardcoded triggers for all objects to sound effects in SMR.szs)&lt;br /&gt;
* AudioRes/Info/JaiMe.arc (References instruments from SMR.szs)&lt;br /&gt;
* [[BRS (File Format)|AudioRes/Info/JaiRemixSeq.arc]] (References instruments from SMR.szs)&lt;br /&gt;
* [[MultiBgmInfo|AudioRes/Info/MultiBgmInfo.arc]] (SMG2 only, connects MBGM labels to STM and BGM labels, allowing streamed and sequenced audio to play simultaneously)&lt;br /&gt;
* [[SoundIdToInstList|AudioRes/Info/SoundIdToInstList]] (SMG2 only, references Sound IDs and instruments from SMR.szs and allows loading AW files)&lt;br /&gt;
* AudioRes/Info/StageBgmInfo.arc (SMG2 only, controls the [[ScenarioBgmInfo|main music]] and [[StageBgmInfo|music changes]] for all stages)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
The header contains offsets to all files included in SMR.szs:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;AA_&amp;lt;&amp;lt;/code&amp;gt; (0x41415F3C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bst &amp;lt;/code&amp;gt; (0x62737420)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST|BST]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BST section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bstn&amp;lt;/code&amp;gt; (0x6273746E)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN|BSTN]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSTN section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bsc &amp;lt;/code&amp;gt; (0x62736320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSC|BSC]] section start&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BSC section end&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;ws  &amp;lt;/code&amp;gt; (0x77732020)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| WSYS file ID (N)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#WSYS|WSYS]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 + N * 0x10 + 0xC&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Unknown (mostly 0x00000000, once seen as 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;bnk &amp;lt;/code&amp;gt; (0x626E6B20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| IBNK file ID (M)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 + N * 0x10 + M * 0xC + 0x8&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#IBNK|IBNK]] file&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 + N * 0x10 + M * 0xC&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;gt;_AA&amp;lt;/code&amp;gt; (0x3E5F4141)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==BST==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able contains parameters for all music and sound effects&lt;br /&gt;
===BST Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BST &amp;lt;/code&amp;gt; (0x42535420)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BST main table|BST main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BST main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE table|SE table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM table|BGM table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM table|STREAM table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE parameter table|SE parameter table]].&lt;br /&gt;
&lt;br /&gt;
===BGM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM table&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM parameter table|BGM parameter table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameter table|STREAM parameter table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x50&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#SE parameters|SE parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====SE parameters====&lt;br /&gt;
size: 0x6 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Can be overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x60&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#BGM parameters|BGM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====BGM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description for MAIN_BGM&lt;br /&gt;
! Description for MULTI_BGM&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
| Unknown. Always 0x78&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiSeq.arc file ID. Must always be valid.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| JaiChord.arc file ID. 0xFFFF if no JaiChord file is set.&lt;br /&gt;
| Unknown. Always 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Unknown. Seen as 0x0000 and 0x0001.&lt;br /&gt;
| Unknown. Always 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM parameter table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x70&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 + N * 0x4&lt;br /&gt;
| UInt24 (0x3)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM parameters|STREAM parameters]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====STREAM parameters====&lt;br /&gt;
size: 0x8 for each entry&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Unknown. Always 0x80&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| UInt8 (0x1)&lt;br /&gt;
| Volume. Overridden by [[BgmParam]] in SMG2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Channel count. 0x000E for 2 channels, 0x00EE for 4 channels&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated AST filename, relative to the root of the ISO. Example: &amp;lt;code&amp;gt;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BST section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSTN==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;ound &#039;&#039;&#039;T&#039;&#039;&#039;able &#039;&#039;&#039;N&#039;&#039;&#039;ames section contains labels for all music and sound effects&lt;br /&gt;
===BSTN Header===&lt;br /&gt;
size: 0x20&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x4)&lt;br /&gt;
| &amp;lt;code&amp;gt;BSTN&amp;lt;/code&amp;gt; (0x4253544E)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt8 (0x1) ?&lt;br /&gt;
| Unknown. 0x01 in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BSTN main table|BSTN main table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| Padding (0x10)&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSTN main table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (3 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#SE names table|SE names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#BGM names table|BGM names table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM names table|STREAM names table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (0xE in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Sound Effect name. Points to &amp;lt;code&amp;gt;SE&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#SE name offset table|SE name offset table]].&lt;br /&gt;
&lt;br /&gt;
===BGM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (2 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Background Music name. Points to &amp;lt;code&amp;gt;BGM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MAIN_BGM names table&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to MULTI_BGM names table&lt;br /&gt;
|}&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BGM name offset table|BGM name offset table]].&lt;br /&gt;
&lt;br /&gt;
===STREAM names table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries (1 in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated global Stream Music name. Points to &amp;lt;code&amp;gt;STREAM&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to [[SMR.szs#STREAM name offset table|STREAM name offset table]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect category name. Examples: &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PLAYER_VOICE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Sound Effect name. Examples: &amp;lt;code&amp;gt;SE_SY_COIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SE_PV_JUMP_S&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music category name, like &amp;lt;code&amp;gt;MAIN_BGM&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MULTI_BGM&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Background Music name. Examples: &amp;lt;code&amp;gt;BGM_MISS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MBGM_STAR_CHANCE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM name offset table===&lt;br /&gt;
size: (N + 2) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music category name. Simply &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in SMG and SMG2&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to null-terminated Stream Music name. Examples: &amp;lt;code&amp;gt;STM_STAR_CHANCE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STM_SMG_GALAXY_01&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The rest of the BSTN section is padded to the nearest 0x20.&lt;br /&gt;
&lt;br /&gt;
==BSC==&lt;br /&gt;
The &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;S&#039;&#039;&#039;equence &#039;&#039;&#039;C&#039;&#039;&#039;ollection section (often referred to as &#039;&#039;&#039;SC section&#039;&#039;&#039;) defines the playback of all sound effects via [[BMS (File Format)|BMS]] data.&lt;br /&gt;
&lt;br /&gt;
===BSC Header===&lt;br /&gt;
size: N * 0x4 + 0x8&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Magic (0x2)&lt;br /&gt;
| &amp;lt;code&amp;gt;SC&amp;lt;/code&amp;gt; (0x5343)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| UInt16 (0x2)&lt;br /&gt;
| Amount N of sound categories (0x0E in SMG and SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| BSC section size&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SYSTEM offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x10&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to PLAYER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x18&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BOSS_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x1C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to OBJECT offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x20&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ATMOSPHERE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x24&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to DEMO offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x28&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x2C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to ENEMY_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x30&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_VOICE offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to SUPPORTER_MOTION offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to REMIX_SEQ offset table&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;&amp;quot;&lt;br /&gt;
| 0x3C&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to HOME_BUTTON_MENU offset table&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each of the referenced tables are defined identically, see [[SMR.szs#BSC offset table|BSC offset table]].&lt;br /&gt;
&lt;br /&gt;
===BSC offset table===&lt;br /&gt;
size: (N + 1) * 0x4&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Amount N of entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + N * 0x4&lt;br /&gt;
| UInt32 (0x4)&lt;br /&gt;
| Offset to BMS data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inbetween tables is the BMS data that makes up all of the sound effects. The BSC section is basically structured like this:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BSC&lt;br /&gt;
! Contents&lt;br /&gt;
|-&lt;br /&gt;
| BSC Header&lt;br /&gt;
| Offsets to [CATEGORY] offset tables&lt;br /&gt;
|-&lt;br /&gt;
| Main BMS controller&lt;br /&gt;
| BMS data thats mandatory for all sound effects. Its stored once at the beginning of the file to reduce filesize&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the first sound category (SYSTEM)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] offset table&lt;br /&gt;
| A table with offsets to BMS data for the second sound category (PLAYER_VOICE)&lt;br /&gt;
|-&lt;br /&gt;
| [CATEGORY] BMS data&lt;br /&gt;
| Raw BMS data defining the playback of each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BSC optimizations===&lt;br /&gt;
Despite using the same data that BMS files use, the BSC section optimizes a lot of them. Here are some notable ones:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! BMS files&lt;br /&gt;
! BSC section&lt;br /&gt;
|-&lt;br /&gt;
| Use E2 + E3 to define an instrument. Takes 0x4 bytes in total&lt;br /&gt;
| Use E1 to define an instrument. Takes 0x3 bytes in total&lt;br /&gt;
|-&lt;br /&gt;
| Close all tracks with FF, even tracks that end with a C7 loop&lt;br /&gt;
| Omit use of FF when the last operation in a track is C7&lt;br /&gt;
|-&lt;br /&gt;
| Define playback speed with D8 and E0 for each BMS file individually&lt;br /&gt;
| Define playback speed with EA and D8 once. Every sound effect references this with a C3 jump, reducing the filesize by a lot as opposed to defining the playback speed individually for each sound effect&lt;br /&gt;
|-&lt;br /&gt;
| no equivalent&lt;br /&gt;
| All dummy sounds point to offset 0x6B, which holds FF instead of defining FF for all dummies individually&lt;br /&gt;
|-&lt;br /&gt;
| OpenTrack with voices 1-7, wait with F0 and shut voices with the 8X operator. Takes up 0x6 bytes minimum&lt;br /&gt;
| OpenTrack with voice 0, which enables a Midi gate. This only needs 0x4 bytes to define a sound/key and how long its supposed to last&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==WSYS==&lt;br /&gt;
&#039;&#039;&#039;W&#039;&#039;&#039;ave &#039;&#039;&#039;Sys&#039;&#039;&#039;tem. See [[WSYS]]&lt;br /&gt;
&lt;br /&gt;
==IBNK==&lt;br /&gt;
&#039;&#039;&#039;I&#039;&#039;&#039;nstrument &#039;&#039;&#039;B&#039;&#039;&#039;a&#039;&#039;&#039;nk&#039;&#039;&#039;. See [[IBNK]]&lt;br /&gt;
&lt;br /&gt;
==Editing SMR.szs==&lt;br /&gt;
&#039;&#039;&#039;The following section contains instructions for editing SMR.szs with the SoundModdingToolkit. They do not contain specifications for the file itself.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tool [https://xayr.gay/tools/SoundModdingToolkit/ SoundModdingToolkit] can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool&#039;s converted structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===BGM===&lt;br /&gt;
====MAIN_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MAIN_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the sequenced music. The music sequence files can be found in bms format in &#039;&#039;AudioRes/Seqs/JaiSeq.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| File ID of the bms file in JaiSeq.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| File ID of the cit file in JaiChord.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| Whether BMS channel 0 should be used as a timing channel for [[CIT (File Format)|chords]] or not..&amp;lt;/br&amp;gt;-1 = False, 1 = True&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this sequence (e.g. &amp;quot;BGM_MISS&amp;quot;).&amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====MULTI_BGM====&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MULTI_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in [[MultiBgmInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 120&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| ? always -1&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 96&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this entry (e.g. &amp;quot;MBGM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===STREAM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/STREAM/0.json&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the streamed ast audio files including its internal STM name as well as its filepath.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| Volume (overridden by [[BgmParam]] in SMG2)&lt;br /&gt;
|-&lt;br /&gt;
| streamType&lt;br /&gt;
| Stream Type&amp;lt;br /&amp;gt;14: Standard Stream (2 Channels)&amp;lt;br /&amp;gt;238: Multi Stream (4 Channels)&lt;br /&gt;
|-&lt;br /&gt;
| streamPath&lt;br /&gt;
| Filepath of the AST file to use (e.g. &amp;quot;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this song (e.g. &amp;quot;STM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SE===&lt;br /&gt;
====AW====&lt;br /&gt;
Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:&lt;br /&gt;
*&#039;&#039;&#039;manifest.json&#039;&#039;&#039; Contains the ID and name of the aw file&lt;br /&gt;
*&#039;&#039;&#039;wavetable.json&#039;&#039;&#039; Contains settings for each sound of the aw. file&lt;br /&gt;
&lt;br /&gt;
=====wavetable=====&lt;br /&gt;
Each entry starts with the name of the Wav file (e.g. &amp;quot;31&amp;quot;) followed by its settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| format&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sampleRate&lt;br /&gt;
| The sample rate at which the sound should be played. (e.g. &amp;quot;22050.0&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sampleCount&lt;br /&gt;
| Length of the sound in samples&lt;br /&gt;
|-&lt;br /&gt;
| loop&lt;br /&gt;
| Whether it should be looped or not&amp;lt;br /&amp;gt;&#039;&#039;&#039;true:&#039;&#039;&#039; loop&amp;lt;br /&amp;gt;&#039;&#039;&#039;false:&#039;&#039;&#039; do not loop&lt;br /&gt;
|-&lt;br /&gt;
| loop_start&lt;br /&gt;
| Loop Start position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| loop_end&lt;br /&gt;
| Loop End position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| last&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| penult&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Libraries====&lt;br /&gt;
In &#039;&#039;SoundTable\SE\libraries\&#039;&#039; there are several libraries which contain settings for sounds with their internal assigned names.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Always 80&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? Always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal Name of the soundeffect (e.g. &amp;quot;SE_SV_LV_YOSHI_FLUTTER&amp;quot;)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=873</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=873"/>
		<updated>2025-05-17T12:41:44Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. There are no headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| Unknown.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| &lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Pitch Wheel Value[2]}&amp;lt;br /&amp;gt;OpCode: one byte, B9.&amp;lt;br /&amp;gt;Unknown: always 01, other values do nothing or glitching sounds.&amp;lt;br /&amp;gt;Pitch Wheel Value: Value seeminlgy equals the midi pitch value divided by 8. Minus values start at FFFF and then decreases. Can also have higher/lower values than regular Midi Pitch Wheel, which has a maximum of +8191 (03FF) and minimum of -8192 (FC00).&lt;br /&gt;
| B9 01 02 4B &amp;lt;br/&amp;gt;&amp;lt;br /&amp;gt; B9: OpCode&amp;lt;br /&amp;gt;01: Unknown&amp;lt;br /&amp;gt;02 4B: Pitch Wheel of 4701&lt;br /&gt;
| Sets the Pitch Wheel&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {TrackNumber[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;TrackNumber: one byte with range 0x00 through 0x0F. 0x00 = Track 0, 0x0F = Track 15.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Track 4&amp;lt;br /&amp;gt;05 B4 73: Offset&lt;br /&gt;
| Creates a Track which can play Notes. Track 15 is usually reserved for Yoshi Drums.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines the Instrument to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK whose sounds are to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Keyboard which holds more specific sounds to an IBNK.&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F: &amp;quot;Hello&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=872</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=872"/>
		<updated>2025-05-17T12:31:23Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. There are no headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| Unknown.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| &lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Pitch Wheel Value[2]}&amp;lt;br /&amp;gt;OpCode: one byte, B9.&amp;lt;br /&amp;gt;Unknown: always 01, other values do nothing or glitching sounds.&amp;lt;br /&amp;gt;Pitch Wheel Value: Value seeminlgy equals the midi pitch value divided by 4. Minus values start at FFFF and then decreases. Can also have higher/lower values than regular Midi Pitch Wheel, which has a maximum of +8191 (1FFF) and minimum of -8192 (F800).&lt;br /&gt;
| B9 01 02 4B &amp;lt;br/&amp;gt;&amp;lt;br /&amp;gt; B9: OpCode&amp;lt;br /&amp;gt;01: Unknown&amp;lt;br /&amp;gt;02 4B: Pitch Wheel of 4701&lt;br /&gt;
| Sets the Pitch Wheel&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {TrackNumber[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;TrackNumber: one byte with range 0x00 through 0x0F. 0x00 = Track 0, 0x0F = Track 15.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Track 4&amp;lt;br /&amp;gt;05 B4 73: Offset&lt;br /&gt;
| Creates a Track which can play Notes. Track 15 is usually reserved for Yoshi Drums.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines the Instrument to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK whose sounds are to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Keyboard which holds more specific sounds to an IBNK.&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F: &amp;quot;Hello&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=871</id>
		<title>BMS (File Format)</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=BMS_(File_Format)&amp;diff=871"/>
		<updated>2025-05-16T22:18:24Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
== File Format ==&lt;br /&gt;
BMS files are &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;M&#039;&#039;&#039;usic &#039;&#039;&#039;S&#039;&#039;&#039;equences that store commands for the audio engine to play notes, similar to the MIDI file format.&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
BMS files contain raw instructions for the audio engine. There are no headers or filesize checks. Each instruction (OpCode) stands for its own function in the engine. The following table lists all JAudio2 OpCodes that have functions in SMG2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! OpCode&lt;br /&gt;
! Function (SMG/SMG2)&lt;br /&gt;
! Usage&lt;br /&gt;
! Example&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00&amp;lt;br /&amp;gt;01&amp;lt;br /&amp;gt;02&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;7D&amp;lt;br /&amp;gt;7E&amp;lt;br /&amp;gt;7F&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]} {Voice[1]} {Velocity[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x00 through 0x7F. 0x00 = C-1, 0x3C = C4 (middle C), 0x7F = G9.&amp;lt;br /&amp;gt;Voice: one byte with range 0x01 through 0x07 (needs testing/verification). Each Voice can only hold one Note.&amp;lt;br /&amp;gt;Velocity: one byte with range 0x00 through 0x7F. 0x00 = 0, 0x7F = 127.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If the Voice is not 1 - 7, the game will treat this note as a Midi Gate note, and will expect a 4th value that is one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. It is unknown what effects this has on the output.&lt;br /&gt;
| 64 02 68&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;64: Key E4&amp;lt;br /&amp;gt;02: Voice 2&amp;lt;br /&amp;gt;68: Velocity 104&lt;br /&gt;
| Starts playing a Note with the previously defined Instrument (see E1, E2 and E3).&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| Unknown.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Seems to do nothing based on the code.&lt;br /&gt;
|-&lt;br /&gt;
| 81&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;87&lt;br /&gt;
| &lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte with range 0x81 through 0x87. 0x81 = Close Voice 1, 0x87 = Close Voice 7.&lt;br /&gt;
| &lt;br /&gt;
| Stops playing a Note.&lt;br /&gt;
|-&lt;br /&gt;
| 88&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;8F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 90&amp;lt;br /&amp;gt;...&amp;lt;br /&amp;gt;9F&lt;br /&gt;
| Unknown&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A1&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A3&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A8&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A9&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B0&lt;br /&gt;
| Extended Opcode Indicator&lt;br /&gt;
| See B000 or B001.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B1&lt;br /&gt;
| JASSeqParser::cmdNoteOn&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B2&lt;br /&gt;
| JASSeqParser::cmdNoteOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B3&lt;br /&gt;
| JASSeqParser::cmdNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B4&lt;br /&gt;
| JASSeqParser::cmdSetLastNote&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B7&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B8&lt;br /&gt;
| JASSeqParser::cmdParamE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B9&lt;br /&gt;
| JASSeqParser::cmdParamI&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Pitch Wheel Value[2]}&amp;lt;br /&amp;gt;OpCode: one byte, B9.&amp;lt;br /&amp;gt;Unknown: always 01, other values do nothing or glitching sounds.&amp;lt;br /&amp;gt;Pitch Wheel Value: Only high pitching possible (needs investigation, possibly the unknown value allows low pitching). Value equals the midi pitch value divided by 4. Can also have higher values than regular Midi Pitch Wheel, which has a maximum of +8191.&lt;br /&gt;
| B9 01 02 4B &amp;lt;br/&amp;gt;&amp;lt;br /&amp;gt; B9: OpCode&amp;lt;br /&amp;gt;01: Unknown&amp;lt;br /&amp;gt;02 4B: Pitch Wheel of 4701&lt;br /&gt;
| Sets the Pitch Wheel (high)&lt;br /&gt;
|-&lt;br /&gt;
| BA&lt;br /&gt;
| JASSeqParser::cmdParamEI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BB&lt;br /&gt;
| JASSeqParser::cmdParamII&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C0&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C1&lt;br /&gt;
| JASSeqParser::cmdOpenTrack&lt;br /&gt;
| {OpCode[1]} {TrackNumber[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C1.&amp;lt;br /&amp;gt;TrackNumber: one byte with range 0x00 through 0x0F. 0x00 = Track 0, 0x0F = Track 15.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C1 04 05 B4 73&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C1: OpCode&amp;lt;br /&amp;gt;04: Track 4&amp;lt;br /&amp;gt;05 B4 73: Offset&lt;br /&gt;
| Creates a Track which can play Notes. Track 15 is usually reserved for Yoshi Drums.&lt;br /&gt;
|-&lt;br /&gt;
| C2&lt;br /&gt;
| JASSeqParser::cmdCloseTrack&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C3&lt;br /&gt;
| JASSeqParser::cmdCall&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C3.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C3 00 00 40&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C3: OpCode&amp;lt;br /&amp;gt;00 00 40: Offset&lt;br /&gt;
| Redirects execution to the defined offset. Execution can return with C5.&lt;br /&gt;
|-&lt;br /&gt;
| C4&lt;br /&gt;
| JASSeqParser::cmdCallF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C5&lt;br /&gt;
| JASSeqParser::cmdRet&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, C5.&lt;br /&gt;
| &lt;br /&gt;
| Returns redirected execution (like from C3) to the initial call.&lt;br /&gt;
|-&lt;br /&gt;
| C6&lt;br /&gt;
| JASSeqParser::cmdRetF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C7&lt;br /&gt;
| JASSeqParser::cmdJmp&lt;br /&gt;
| {OpCode[1]} {Pointer[3]}&amp;lt;br /&amp;gt;OpCode: one byte, C7.&amp;lt;br /&amp;gt;Pointer: three bytes with range 0x000000 through 0xFFFFFF. Defines an offset in the file.&lt;br /&gt;
| C7 08 02 34&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;C7: OpCode&amp;lt;br /&amp;gt;08 02 34: Offset&lt;br /&gt;
| Redirects execution to the defined offset, used for Loops.&lt;br /&gt;
|-&lt;br /&gt;
| C8&lt;br /&gt;
| JASSeqParser::cmdJmpF&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| C9&lt;br /&gt;
| JASSeqParser::cmdJmpTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CA&lt;br /&gt;
| JASSeqParser::cmdCallTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CB&lt;br /&gt;
| JASSeqParser::cmdLoopS&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CC&lt;br /&gt;
| JASSeqParser::cmdLoopE&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| CF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D0&lt;br /&gt;
| JASSeqParser::cmdReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D1&lt;br /&gt;
| JASSeqParser::cmdWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D2&lt;br /&gt;
| JASSeqParser::cmdCheckPortImport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D3&lt;br /&gt;
| JASSeqParser::cmdCheckPortExport&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D4&lt;br /&gt;
| JASSeqParser::cmdParentWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D5&lt;br /&gt;
| JASSeqParser::cmdChildWritePort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D6&lt;br /&gt;
| JASSeqParser::cmdParentReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D7&lt;br /&gt;
| JASSeqParser::cmdChildReadPort&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| D8&lt;br /&gt;
| JASSeqParser::cmdRegLoad&lt;br /&gt;
| {OpCode[1]} {Setting[1]} {Unknown[1]} {Variable[1]}&amp;lt;br /&amp;gt;OpCode: one byte, D8.&amp;lt;br /&amp;gt;Setting: one byte with unknown range. Different bytes will trigger different effects:&amp;lt;br /&amp;gt;- 0x62: set PPQN (seen in BMS)&amp;lt;br /&amp;gt;- 0x6B: set PPQN (seen in SC)&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;Variable: one byte with different range and purpose depending on the Setting byte.&lt;br /&gt;
| D8 62 00 78&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;D8: OpCode&amp;lt;br /&amp;gt;62: set PPQN&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;78: PPQN 120&lt;br /&gt;
| Different purposes.&lt;br /&gt;
|-&lt;br /&gt;
| D9&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DA&lt;br /&gt;
| JASSeqParser::cmdReg&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DB&lt;br /&gt;
| JASSeqParser::cmdRegUni&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DC&lt;br /&gt;
| JASSeqParser::cmdRegTblLoad&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DD&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E0&lt;br /&gt;
| JASSeqParser::cmdTempo&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {BPM[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E0.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&amp;lt;br /&amp;gt;BPM: one byte with range 0x00 through 0xFF. 0x78 = 120, F0 = 240.&lt;br /&gt;
| E0 00 90&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E0: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;90: BPM 144&lt;br /&gt;
| Defines the tempo (playback speed) of the BMS file.&lt;br /&gt;
|-&lt;br /&gt;
| E1&lt;br /&gt;
| JASSeqParser::cmdBankPrg&lt;br /&gt;
| {OpCode[1]} {Bank[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E1.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&amp;lt;br /&amp;gt;Program: one byte ranging from 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E1 01 0F&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E1: OpCode&amp;lt;br /&amp;gt;01: WSYS ID 1&amp;lt;br /&amp;gt;0F: IBNK LIST entry 15&amp;lt;br /&amp;gt;(01 0F is the percussion set for Yoshi Drums)&lt;br /&gt;
| Defines the Instrument to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E2&lt;br /&gt;
| JASSeqParser::cmdBank&lt;br /&gt;
| {OpCode[1]} {Bank[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E2.&amp;lt;br /&amp;gt;Bank: one byte with range 0x00 through 0xFF. This byte represents a WSYS ID.&lt;br /&gt;
| E2 53&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E2: OpCode&amp;lt;br /&amp;gt;53: WSYS ID 83&amp;lt;br /&amp;gt;(This bank holds sounds for Megahammer)&lt;br /&gt;
| Defines the WSYS/IBNK whose sounds are to be used in a Track.&lt;br /&gt;
|-&lt;br /&gt;
| E3&lt;br /&gt;
| JASSeqParser::cmdPrg&lt;br /&gt;
| {OpCode[1]} {Program[1]}&amp;lt;br /&amp;gt;OpCode: one byte, E3.&amp;lt;br /&amp;gt;Program: one byte with range 0x00 through 0xFF. This byte represents a LIST entry in the IBNK belonging to the defined WSYS ID.&lt;br /&gt;
| E3 0B&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;E3: OpCode&amp;lt;br /&amp;gt;0B: IBNK LIST entry 11&amp;lt;br /&amp;gt;(In relation to Megahammer, this Program holds movement related sounds)&lt;br /&gt;
| Defines the Keyboard which holds more specific sounds to an IBNK.&lt;br /&gt;
|-&lt;br /&gt;
| E4&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E5&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E6&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E7&lt;br /&gt;
| JASSeqParser::cmdEnvScaleSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E8&lt;br /&gt;
| JASSeqParser::cmdEnvSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| E9&lt;br /&gt;
| JASSeqParser::cmdSimpleADSR&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EA&lt;br /&gt;
| JASSeqParser::cmdBusConnect&lt;br /&gt;
| {OpCode[1]} {Unknown[1]} {Unknown[1]} {Unknown[1]}&amp;lt;br /&amp;gt;OpCode: one byte, EA.&amp;lt;br /&amp;gt;Unknown: one byte with unknown range and purpose.&lt;br /&gt;
| EA 00 FF FF&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;EA: OpCode&amp;lt;br /&amp;gt;00: Unknown&amp;lt;br /&amp;gt;FF: Unknown&amp;lt;br /&amp;gt;FF: Unknown&lt;br /&gt;
| Unknown purpose, only seen in SC.&lt;br /&gt;
|-&lt;br /&gt;
| EB&lt;br /&gt;
| JASSeqParser::cmdIIRCutOff&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EC&lt;br /&gt;
| JASSeqParser::cmdIIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ED&lt;br /&gt;
| JASSeqParser::cmdFIRSet&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EE&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EF&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F0&lt;br /&gt;
| JASSeqParser::cmdWait&lt;br /&gt;
| {OpCode[1]} {WaitTime[n]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xF0.&amp;lt;br /&amp;gt;WaitTime: one or more bytes with range 0x00 through 0xFF. If the leading byte is 0x80 (bit 7 = 1) or greater, another following byte will be taken into account. Time is measured in ticks here.&lt;br /&gt;
| F0 60 (96 Ticks)&amp;lt;br /&amp;gt;F0 81 56 (214 Ticks)&amp;lt;br /&amp;gt;F0 83 81 30 (49328 Ticks)&lt;br /&gt;
| Creates a delay, used to define the length of a Note or gap between Notes.&lt;br /&gt;
|-&lt;br /&gt;
| F1&lt;br /&gt;
| JASSeqParser::cmdWaitByte&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F2&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F3&lt;br /&gt;
| JASSeqParser::cmdSetIntTable&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F4&lt;br /&gt;
| JASSeqParser::cmdSetInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F5&lt;br /&gt;
| JASSeqParser::cmdDisInterrupt&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F6&lt;br /&gt;
| JASSeqParser::cmdRetI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F7&lt;br /&gt;
| JASSeqParser::cmdClrI&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F8&lt;br /&gt;
| JASSeqParser::cmdIntTimer&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| F9&lt;br /&gt;
| JASSeqParser::cmdSyncCPU&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FA&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FB&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FC&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FD&lt;br /&gt;
| JASSeqParser::cmdPrintf&lt;br /&gt;
| {OpCode[1]} {Message[n]} {NullTerminator[1]}&amp;lt;br /&amp;gt;OpCode: one byte, FD.&amp;lt;br /&amp;gt;Message: ASCII string of undefined length.&amp;lt;br /&amp;gt;NullTerminator: one byte, 00.&lt;br /&gt;
| FD 48 65 6C 6C 6F 00&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;FD: OpCode&amp;lt;br /&amp;gt;48 65 6C 6C 6F: &amp;quot;Hello&amp;quot;&amp;lt;br /&amp;gt;00: Null-terminator&lt;br /&gt;
| Prints a specified message to OSReport.&lt;br /&gt;
|-&lt;br /&gt;
| FE&lt;br /&gt;
| JASSeqParser::cmdNop&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF&lt;br /&gt;
| JASSeqParser::cmdFinish&lt;br /&gt;
| {OpCode[1]}&amp;lt;br /&amp;gt;OpCode: one byte, 0xFF.&lt;br /&gt;
| &lt;br /&gt;
| Stops execution of a Track.&lt;br /&gt;
|-&lt;br /&gt;
| B000&lt;br /&gt;
| NULL&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| B001&lt;br /&gt;
| JASSeqParser::cmdDump&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
[https://cdn.discordapp.com/attachments/421356154795458570/1291660143758413824/BMS_DEC.zip?ex=6719f440&amp;amp;is=6718a2c0&amp;amp;hm=f44c5197a070f30a00283858942f9e4ae5066034862eba006f8abe87a228a6aa&amp;amp; BMS_DEC] (converts BMS to MIDI)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/XAYRGA/JaiSeqX JaiSeqX] (playback for JAudio1 and JAudio2 BMS files)&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=ProductMapObjDataTable&amp;diff=832</id>
		<title>ProductMapObjDataTable</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=ProductMapObjDataTable&amp;diff=832"/>
		<updated>2025-02-19T13:53:43Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
&#039;&#039;&#039;ProductMapObjDataTable&#039;&#039;&#039; is a [[BCSV (File format)|BCSV]] table that defines map objects and assigns them a class. The file can be found in &#039;&#039;SMG2&#039;&#039; in &#039;&#039;ObjectData/ProductMapObjDataTable.arc/root/ProductMapObjDataTable.bcsv&#039;&#039;. It contains the following fields:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| ModelName || string || The object name and model file in [[File system#ObjectData|ObjectData]].&lt;br /&gt;
|-&lt;br /&gt;
| ClassName || string || The name of the class that this object uses. A list of propery classes can be found below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Class !! Function&lt;br /&gt;
|-&lt;br /&gt;
| AutoMakeMapObj || Alias for SimpleMapObj.&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObj || A basic object that can be used in any level.&amp;lt;br&amp;gt;Supports [[BCK]], [[BTK]], [[BTP]], [[BVA]], and [[BRK]]. [[BPK]] is not supported. Animations must take on the same name as the model in order to be played, and they start playing once the object loads.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg0&#039;&#039;&#039; allows for this model to change colours based on a file inside the archive called &amp;quot;ColorChange.brk&amp;quot;. The value put into &#039;&#039;&#039;obj_arg0&#039;&#039;&#039; corresponds to the frame to use.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg1&#039;&#039;&#039; allows for this model to change textures based on a file inside the archive called &amp;quot;TexChange.btp&amp;quot; (&amp;quot;TexChange.btk&amp;quot; is also supported. Both btk and btp may exist at the same time, both will be used). The value put into &#039;&#039;&#039;obj_arg1&#039;&#039;&#039; corresponds to the frame to use.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg2&#039;&#039;&#039; dictates how far the shadow of the object drops (Calculated with in-game units).&amp;lt;br&amp;gt;Shadows can be used if you setup a Shadow.bcsv inside the object&#039;s [[ActorInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObjFarMax || Basic object with a far viewing range&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObjWithEffect || Basic object with particle effects&lt;br /&gt;
|-&lt;br /&gt;
| SimpleClipPartsObj || Basic object that can be clipped&lt;br /&gt;
|-&lt;br /&gt;
| SimpleSeesawObj || Basic seesaw MapParts object &amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: Rotate back to initially rotation when jumped off? 1 = Yes, 0 = No &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Rotation Speed; How fast the Seesaw rotates when jumped on &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: Degree of rotation; How far the Seesaw can rotate on one side &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAxis&#039;&#039;&#039;: On which axis the object rotates; 0 = Z-Axis, 1 = ? (Doesn&#039;t rotate), 2 = Z- and X-Axis &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAccelType&#039;&#039;&#039;: ? &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateStopTime&#039;&#039;&#039;: Back Swinging Speed; How fast it swings back when jumped off&lt;br /&gt;
|-&lt;br /&gt;
| SimpleFloaterObj || Basic floater MapParts object &amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: Depth; How far it sinks (a negative value to make the object rising up will glitch, turning the object over instead will work) &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Sinking Speed; How fast it sinks &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: Pop-Up Speed; How fast it comes back to it&#039;s initially height&lt;br /&gt;
|-&lt;br /&gt;
| LavaFloater || Lava floating platform that requires effects&lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableObj || Object that can be destroyed with a SW_B switch. Can spawn items when destroyed via &#039;&#039;&#039;obj_arg3&#039;&#039;&#039;:&amp;lt;br&amp;gt; &#039;&#039;&#039;-1:&#039;&#039;&#039; Coin &amp;lt;br&amp;gt;&#039;&#039;&#039;0:&#039;&#039;&#039; Nothing &amp;lt;br&amp;gt;&#039;&#039;&#039;1:&#039;&#039;&#039; 1-Up mushroom &amp;lt;br&amp;gt;&#039;&#039;&#039;2:&#039;&#039;&#039; Power Star &amp;lt;br&amp;gt;&#039;&#039;&#039;3:&#039;&#039;&#039; Starbits &amp;lt;br&amp;gt;The Power Star requires a properly set up AppearPowerStarObj parameter.&lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableCollisionObj || &lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableDeleteShadowObj || &lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableStrongLightObj || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMove || Object for which animations with the name &#039;&#039;Move&#039;&#039; are played as soon as its SW_A switch is activated. Supports any animation type except [[BPK]].&amp;lt;/br&amp;gt;&lt;br /&gt;
[[BVA]] requires an associated [[BCK]] animation, otherwise the game will crash for unknown reasons.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveEndKill || Special object for [[cutscenes]] with action type 4.&lt;br /&gt;
Plays animations with the name &#039;&#039;Move&#039;&#039; when activated and then disappears.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveEndKillAnyAnim || Same as AnmModelSwitchMoveEndKill but supports any animation type? More investigation needed.&lt;br /&gt;
Used by YoshiEggCapsuleCage.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveValidateCollision || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveInvalidateCollision || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchSyncBrk || An object for which the following animation names are played:&lt;br /&gt;
&#039;&#039;&#039;Move&#039;&#039;&#039; When its SW_A switch is activated&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reverse&#039;&#039;&#039; When its SW_A switch is deactivated&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveObj || Path-moving MapParts platform. Can play animations with the name &#039;&#039;Move&#039;&#039; when moving.&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveWithReverseAnimObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveWithIndirectModelObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveShadowDropYObj || Path-moving MapParts platform that drops a shadow&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveObjClipParts || Path-moving platform that can be clipped&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveDemoActionObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveLavaProjmapObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailRotateMoveObj || A MapParts platform that can move and rotate along a path.&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg0&#039;&#039;&#039;: Move speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg1&#039;&#039;&#039;: Acceleration speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg2&#039;&#039;&#039;: Rotate Speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg3&#039;&#039;&#039;: Rotation Angle. Relative (180 on two path points will rotate 360)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg4&#039;&#039;&#039;: Rotation Axis. (0 = X, 1 = Y, 2 = Z)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg5&#039;&#039;&#039;: Wait time. Stops movement at this path point for the provided time (in frames).&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg6&#039;&#039;&#039;: Rotation Type (-1 = Rotate at point, 1 = Rotate between this path point and next path point)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg7&#039;&#039;&#039;: Calculation Type (-1 = Speed, 1 = Time. Time will define a fixed amount of time, while speed will set a value without care for how far away the next point is.)&amp;lt;br&amp;gt;&lt;br /&gt;
A collision model is required, otherwise the rotation will be ignored.&lt;br /&gt;
|-&lt;br /&gt;
| RailAndRotateMoveObj || &lt;br /&gt;
|-&lt;br /&gt;
| RotateMoveObj || Rotating MapParts platform&amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: 0 = Always moving, 1 = Wait for player to step on it.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Rotation Speed. How fast the object rotates. Negative numbers are allowed, and will rotate the object in the opposite direction.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: How much to rotate. For always spinning objects that just do 360, set this to 0.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAxis&#039;&#039;&#039;: On which axis the object rotates. 0 = X, 1 = Y, 2 = Z.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAccelType&#039;&#039;&#039;: ? &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateStopTime&#039;&#039;&#039;: If applicable, how long to stop rotating for. In frames.&lt;br /&gt;
|-&lt;br /&gt;
| RotateMoveObjClipParts || Rotating MapParts platform that can be clipped.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR500F50 || An effect object which can span with a radius of 500 and a Far Clip distance of 50.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR1000F50 || An effect object which can span with a radius of 1000 and a Far Clip distance of 50.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR1500F400 || An effect object which can span with a radius of 1500 and a Far Clip distance of 400.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObj20x20x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| EffectObj50x50x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| EffectObj10x10x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| Sky || A basic Sky that simply moves with the camera. Supports most animation formats with the same name as the model.&lt;br /&gt;
|-&lt;br /&gt;
| ProjectionMapSky || Also a Sky model, but the difference is unknown&lt;br /&gt;
|-&lt;br /&gt;
| SoundSyncSky || Sky model that plays a BRK animation to the beat&lt;br /&gt;
|-&lt;br /&gt;
| Air || Basic atmosphere object&lt;br /&gt;
|-&lt;br /&gt;
| ProjectionMapAir || &lt;br /&gt;
|-&lt;br /&gt;
| PriorDrawAir || &lt;br /&gt;
|-&lt;br /&gt;
| AfterMapObjDrawAir || &lt;br /&gt;
|-&lt;br /&gt;
| CloudStep || Cloud platform that can move on paths as well&lt;br /&gt;
|-&lt;br /&gt;
| CloudSea || Unknown; used by the bowl swamp planet in Cloudy Court Galaxy&lt;br /&gt;
|-&lt;br /&gt;
| HipDropMoveBlock || Moves when groundpounded on its Y-Axis; used by the blocks in Puzzle Plank Galaxy&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg0&#039;&#039;&#039;: Units, how far the object may be pushed at most in one direction; a positive number lets you move the object from the bottom up, while a negative number lets you move it from the top down. &amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg1&#039;&#039;&#039;: How many times you have to stomp on it until it reaches the end point set above&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg2&#039;&#039;&#039;: Rising Speed&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg3&#039;&#039;&#039;: Can be stomped only in one direction? -1 = No, 0 = Yes; allows stomping only in the direction set in arg_0&lt;br /&gt;
|-&lt;br /&gt;
| GorogoroCylinderRock || Rolling cylinder rocks that move on a path and respawn; see Clockwork Ruins Galaxy&lt;br /&gt;
|-&lt;br /&gt;
| SwitchingMoveBlock || Moves when a switch is activated. Used by the red and blue platforms in Flip-Out Galaxy&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg0&#039;&#039;&#039;: How many units this object moves on its X Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg1&#039;&#039;&#039;: How many units this object moves on its Y Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg2&#039;&#039;&#039;: How many units this object moves on its Z Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg3&#039;&#039;&#039;: How many units this object rotates on its X Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg4&#039;&#039;&#039;: How many units this object rotates on its Y Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg5&#039;&#039;&#039;: How many units this object rotates on its Z Axis&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=ProductMapObjDataTable&amp;diff=830</id>
		<title>ProductMapObjDataTable</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=ProductMapObjDataTable&amp;diff=830"/>
		<updated>2025-02-15T12:34:05Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
&#039;&#039;&#039;ProductMapObjDataTable&#039;&#039;&#039; is a [[BCSV (File format)|BCSV]] table that defines map objects and assigns them a class. The file can be found in &#039;&#039;SMG2&#039;&#039; in &#039;&#039;ObjectData/ProductMapObjDataTable.arc/root/ProductMapObjDataTable.bcsv&#039;&#039;. It contains the following fields:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| ModelName || string || The object name and model file in [[File system#ObjectData|ObjectData]].&lt;br /&gt;
|-&lt;br /&gt;
| ClassName || string || The name of the class that this object uses. A list of propery classes can be found below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Class !! Function&lt;br /&gt;
|-&lt;br /&gt;
| AutoMakeMapObj || Alias for SimpleMapObj.&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObj || A basic object that can be used in any level.&amp;lt;br&amp;gt;Supports [[BCK]], [[BTK]], [[BTP]], [[BVA]], and [[BRK]]. [[BPK]] is not supported. Animations must take on the same name as the model in order to be played, and they start playing once the object loads.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg0&#039;&#039;&#039; allows for this model to change colours based on a file inside the archive called &amp;quot;ColorChange.brk&amp;quot;. The value put into &#039;&#039;&#039;obj_arg0&#039;&#039;&#039; corresponds to the frame to use.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg1&#039;&#039;&#039; allows for this model to change textures based on a file inside the archive called &amp;quot;TexChange.btp&amp;quot; (&amp;quot;TexChange.btk&amp;quot; is also supported. Both btk and btp may exist at the same time, both will be used). The value put into &#039;&#039;&#039;obj_arg1&#039;&#039;&#039; corresponds to the frame to use.&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg2&#039;&#039;&#039; dictates how far the shadow of the object drops (Calculated with in-game units).&amp;lt;br&amp;gt;Shadows can be used if you setup a Shadow.bcsv inside the object&#039;s [[ActorInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObjFarMax || Basic object with a far viewing range&lt;br /&gt;
|-&lt;br /&gt;
| SimpleMapObjWithEffect || Basic object with particle effects&lt;br /&gt;
|-&lt;br /&gt;
| SimpleClipPartsObj || Basic object that can be clipped&lt;br /&gt;
|-&lt;br /&gt;
| SimpleSeesawObj || Basic seesaw MapParts object &amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: Rotate back to initially rotation when jumped off? 1 = Yes, 0 = No &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Rotation Speed; How fast the Seesaw rotates when jumped on &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: Degree of rotation; How far the Seesaw can rotate on one side &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAxis&#039;&#039;&#039;: On which axis the object rotates; 0 = Z-Axis, 1 = ? (Doesn&#039;t rotate), 2 = Z- and X-Axis &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAccelType&#039;&#039;&#039;: ? &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateStopTime&#039;&#039;&#039;: Back Swinging Speed; How fast it swings back when jumped off&lt;br /&gt;
|-&lt;br /&gt;
| SimpleFloaterObj || Basic floater MapParts object &amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: Depth; How far it sinks (a negative value to make the object rising up will glitch, turning the object over instead will work) &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Sinking Speed; How fast it sinks &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: Pop-Up Speed; How fast it comes back to it&#039;s initially height&lt;br /&gt;
|-&lt;br /&gt;
| LavaFloater || Lava floating platform that requires effects&lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableObj || Object that can be destroyed with a SW_B switch. Can spawn items when destroyed via &#039;&#039;&#039;obj_arg3&#039;&#039;&#039;:&amp;lt;br&amp;gt; &#039;&#039;&#039;-1:&#039;&#039;&#039; Coin &amp;lt;br&amp;gt;&#039;&#039;&#039;0:&#039;&#039;&#039; Nothing &amp;lt;br&amp;gt;&#039;&#039;&#039;1:&#039;&#039;&#039; 1-Up mushroom &amp;lt;br&amp;gt;&#039;&#039;&#039;2:&#039;&#039;&#039; Power Star &amp;lt;br&amp;gt;&#039;&#039;&#039;3:&#039;&#039;&#039; Starbits &amp;lt;br&amp;gt;The Power Star requires a properly set up AppearPowerStarObj parameter.&lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableCollisionObj || &lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableDeleteShadowObj || &lt;br /&gt;
|-&lt;br /&gt;
| SimpleBreakableStrongLightObj || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMove || Object for which animations with the name &#039;&#039;Move&#039;&#039; are played as soon as its SW_A switch is activated. Supports any animation type except [[BPK]].&amp;lt;/br&amp;gt;&lt;br /&gt;
[[BVA]] requires an associated [[BCK]] animation, otherwise the game will crash for unknown reasons.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveEndKill || Special object for [[cutscenes]] with action type 4.&lt;br /&gt;
Plays animations with the name &#039;&#039;Move&#039;&#039; when activated and then disappears.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveEndKillAnyAnim || Same as AnmModelSwitchMoveEndKill but supports any animation type? More investigation needed.&lt;br /&gt;
Used by YoshiEggCapsuleCage.&lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveValidateCollision || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchMoveInvalidateCollision || &lt;br /&gt;
|-&lt;br /&gt;
| AnmModelSwitchSyncBrk || An object for which the following animation names are played:&lt;br /&gt;
&#039;&#039;&#039;Move&#039;&#039;&#039; When its SW_A switch is activated&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Reverse&#039;&#039;&#039; When its SW_A switch is deactivated&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveObj || Path-moving MapParts platform. Can play animations with the name &#039;&#039;Move&#039;&#039; when moving.&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveWithReverseAnimObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveWithIndirectModelObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveShadowDropYObj || Path-moving MapParts platform that drops a shadow&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveObjClipParts || Path-moving platform that can be clipped&lt;br /&gt;
|-&lt;br /&gt;
| RailMoveDemoActionObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailMoveLavaProjmapObj || &lt;br /&gt;
|-&lt;br /&gt;
| RailRotateMoveObj || A MapParts platform that can move and rotate along a path.&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg0&#039;&#039;&#039;: Move speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg1&#039;&#039;&#039;: Acceleration speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg2&#039;&#039;&#039;: Rotate Speed/time (see point arg 7)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg3&#039;&#039;&#039;: Rotation Angle. Relative (180 on two path points will rotate 360)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg4&#039;&#039;&#039;: Rotation Axis. (0 = X, 1 = Y, 2 = Z)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg5&#039;&#039;&#039;: Wait time. Stops movement at this path point for the provided time (in frames).&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg6&#039;&#039;&#039;: Rotation Type (-1 = Rotate at point, 1 = Rotate between this path point and next path point)&amp;lt;br&amp;gt;&#039;&#039;&#039;point_arg7&#039;&#039;&#039;: Calculation Type (-1 = Speed, 1 = Time. Time will define a fixed amount of time, while speed will set a value without care for how far away the next point is.)&lt;br /&gt;
|-&lt;br /&gt;
| RailAndRotateMoveObj || &lt;br /&gt;
|-&lt;br /&gt;
| RotateMoveObj || Rotating MapParts platform&amp;lt;br&amp;gt;&#039;&#039;&#039;MoveConditionType&#039;&#039;&#039;: 0 = Always moving, 1 = Wait for player to step on it.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateSpeed&#039;&#039;&#039;: Rotation Speed. How fast the object rotates. Negative numbers are allowed, and will rotate the object in the opposite direction.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAngle&#039;&#039;&#039;: How much to rotate. For always spinning objects that just do 360, set this to 0.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAxis&#039;&#039;&#039;: On which axis the object rotates. 0 = X, 1 = Y, 2 = Z.&amp;lt;br&amp;gt;&#039;&#039;&#039;RotateAccelType&#039;&#039;&#039;: ? &amp;lt;br&amp;gt;&#039;&#039;&#039;RotateStopTime&#039;&#039;&#039;: If applicable, how long to stop rotating for. In frames.&lt;br /&gt;
|-&lt;br /&gt;
| RotateMoveObjClipParts || Rotating MapParts platform that can be clipped.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR500F50 || An effect object which can span with a radius of 500 and a Far Clip distance of 50.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR1000F50 || An effect object which can span with a radius of 1000 and a Far Clip distance of 50.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObjR1500F400 || An effect object which can span with a radius of 1500 and a Far Clip distance of 400.&lt;br /&gt;
|-&lt;br /&gt;
| EffectObj20x20x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| EffectObj50x50x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| EffectObj10x10x10SyncClipping || &lt;br /&gt;
|-&lt;br /&gt;
| Sky || A basic Sky that simply moves with the camera. Supports most animation formats with the same name as the model.&lt;br /&gt;
|-&lt;br /&gt;
| ProjectionMapSky || Also a Sky model, but the difference is unknown&lt;br /&gt;
|-&lt;br /&gt;
| SoundSyncSky || Sky model that plays a BRK animation to the beat&lt;br /&gt;
|-&lt;br /&gt;
| Air || Basic atmosphere object&lt;br /&gt;
|-&lt;br /&gt;
| ProjectionMapAir || &lt;br /&gt;
|-&lt;br /&gt;
| PriorDrawAir || &lt;br /&gt;
|-&lt;br /&gt;
| AfterMapObjDrawAir || &lt;br /&gt;
|-&lt;br /&gt;
| CloudStep || Cloud platform that can move on paths as well&lt;br /&gt;
|-&lt;br /&gt;
| CloudSea || Unknown; used by the bowl swamp planet in Cloudy Court Galaxy&lt;br /&gt;
|-&lt;br /&gt;
| HipDropMoveBlock || Moves when groundpounded on its Y-Axis; used by the blocks in Puzzle Plank Galaxy&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg0&#039;&#039;&#039;: Units, how far the object may be pushed at most in one direction; a positive number lets you move the object from the bottom up, while a negative number lets you move it from the top down. &amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg1&#039;&#039;&#039;: How many times you have to stomp on it until it reaches the end point set above&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg2&#039;&#039;&#039;: Rising Speed&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Obj_arg3&#039;&#039;&#039;: Can be stomped only in one direction? -1 = No, 0 = Yes; allows stomping only in the direction set in arg_0&lt;br /&gt;
|-&lt;br /&gt;
| GorogoroCylinderRock || Rolling cylinder rocks that move on a path and respawn; see Clockwork Ruins Galaxy&lt;br /&gt;
|-&lt;br /&gt;
| SwitchingMoveBlock || Moves when a switch is activated. Used by the red and blue platforms in Flip-Out Galaxy&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg0&#039;&#039;&#039;: How many units this object moves on its X Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg1&#039;&#039;&#039;: How many units this object moves on its Y Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg2&#039;&#039;&#039;: How many units this object moves on its Z Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg3&#039;&#039;&#039;: How many units this object rotates on its X Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg4&#039;&#039;&#039;: How many units this object rotates on its Y Axis&amp;lt;br&amp;gt;&#039;&#039;&#039;obj_arg5&#039;&#039;&#039;: How many units this object rotates on its Z Axis&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Worldmap&amp;diff=603</id>
		<title>Worldmap</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Worldmap&amp;diff=603"/>
		<updated>2024-08-16T12:50:53Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&amp;lt;small&amp;gt;Todo:&lt;br /&gt;
*What is the difference between the stage types HideGalaxy and MiniGalaxy?&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All information of the world map like paths, points, galaxies and more are stored in the &#039;&#039;WorldMap0X.arc&#039;&#039; file in the &#039;&#039;ObjectData&#039;&#039; folder, with X being the world number. WorldMap08.arc is the Grand Galaxy Map.&lt;br /&gt;
&lt;br /&gt;
Each world map is loaded inside a galaxy stage, which in the original game mainly contains the background. The stage files can be found in &#039;&#039;StageData/WorldMap0XGalaxy/&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==General Notes==&lt;br /&gt;
*Paths from point with ID 0 are automatically unlocked when entering the world for the first time.&lt;br /&gt;
*Lubba&#039;s talking sequence when first entering the first world, has a hardcoded behavior to show an arrow over the galaxy &#039;&#039;YosshiHomeGalaxy&#039;&#039;. If the Galaxy icon with this name does not exist, the game crashes (the galaxy itself does not have to exist).&lt;br /&gt;
*A point with a pipe attached to two paths can confuse the game if you try to pass the pipe by clicking with the pointer on a point; Starship Mario will then erroneously go out and in the pipe several times.&lt;br /&gt;
*Gourmet Lumas cannot eat star pieces if the required number of star pieces is less than 100; the star pieces then simply fly through him.&lt;br /&gt;
*The game remembers various unlock and interaction properties of PointParts objects. If you change and swap them, it can happen that with the old save file the objects are not interactable (e.g. star clusters can no longer be touched).&lt;br /&gt;
*The game crashes on the world map if the scenario file for &#039;&#039;HomeCenterGalaxy&#039;&#039; doesn&#039;t exist.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
The WorldMap0X.arc files contain several [[BCSV (File format)|BCSV]] tables, which can be found in the original game either in the root or in a folder called ActorInfo, it doesn&#039;t matter if they are in the root or in this folder. The game reads the files either way.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PointPos:&#039;&#039;&#039; Positions and properties of the points&lt;br /&gt;
*&#039;&#039;&#039;PointLink:&#039;&#039;&#039; Paths/connections of the points&lt;br /&gt;
*&#039;&#039;&#039;Galaxy:&#039;&#039;&#039; Galaxies and their properties&lt;br /&gt;
*&#039;&#039;&#039;PointParts:&#039;&#039;&#039; Various objects like star clusters, pipes and world gates&lt;br /&gt;
*&#039;&#039;&#039;SpaceParts:&#039;&#039;&#039; Unknown/Unused. Seems to be a different kind of PointParts.&lt;br /&gt;
*&#039;&#039;&#039;PointStream:&#039;&#039;&#039; Unknown/Unused&lt;br /&gt;
&lt;br /&gt;
===PointPos===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! style=&amp;quot;font-size:100%;&amp;quot; | Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Index&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Point ID&lt;br /&gt;
|-&lt;br /&gt;
| Valid&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Should always be set to valid. Invalid makes the point invisible but still accessible through a path, however, the game crashes when you point to it with the pointer.&amp;lt;br /&amp;gt;x = invalid&amp;lt;br /&amp;gt;o = valid&lt;br /&gt;
|-&lt;br /&gt;
| SubPoint&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Always false (x).&amp;lt;br /&amp;gt;Marks the point as a subpoint (blue and only accessible after unlocking the path). However, this is useless and unused, because the SubPaths already sets the points as subpoints. (More about this below at PointLink)&amp;lt;br /&amp;gt;x = false&amp;lt;br /&amp;gt;o = true&lt;br /&gt;
|-&lt;br /&gt;
| ColorChange&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Color of the point. Pink is usually used for Gourmet Luma paths.&amp;lt;br /&amp;gt;x = yellow&amp;lt;br /&amp;gt;o = pink&lt;br /&gt;
|-&lt;br /&gt;
| LayerNo&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Unknown; Unused&lt;br /&gt;
|-&lt;br /&gt;
| PointPosX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| X Position&lt;br /&gt;
|-&lt;br /&gt;
| PointPosY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Y Position&lt;br /&gt;
|-&lt;br /&gt;
| PointPoxZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Z Position&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
*The Grand Galaxy Map does not feature the ColorChange field.&lt;br /&gt;
*World Map 1, 2 and 6 contain unused, unlinked points which are set as invalid. This suggests that this field may have been used by the developers to temporarily disable points for possible reuse at a later time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PointLink===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! style=&amp;quot;font-size:100%;&amp;quot; | Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PointIndexA&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Point ID of the first point to link&lt;br /&gt;
|-&lt;br /&gt;
| PointIndexB&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Point ID of the second point to link&lt;br /&gt;
|-&lt;br /&gt;
| CloseStageName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Internal name of the galaxy to be completed to unlock this path.&amp;lt;br /&amp;gt;This is used for paths that are only unlocked from certain galaxy paths that should not be reached from the other side. (e.g. FlowerHighlandGalaxy&#039;s path).&lt;br /&gt;
|-&lt;br /&gt;
| CloseStageScenarioNo&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The scenario number to be completed in the galaxy specified in the previous field to unlock this path.&amp;lt;br /&amp;gt;0 = Any scenario&amp;lt;br /&amp;gt;-1 = Default for normal paths&lt;br /&gt;
|-&lt;br /&gt;
| CloseGameFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Required [[Game Flags|Game Flag]] to unlock this Path.&amp;lt;br /&amp;gt;This field makes the path invisible and inaccessible until the entered game flag is fulfilled. However, this does not unlock the path, it just makes it visible and may need to be unlocked by a galaxy in front of it first.&lt;br /&gt;
|-&lt;br /&gt;
| IsSubRoute&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Whether the path is displayed as either blue dotted or completely invisible if it has not yet been unlocked.&amp;lt;br /&amp;gt;Invisible is often used for Gourmet Luma paths as well as some stargate paths.&amp;lt;br /&amp;gt;x = normal/dotted&amp;lt;br /&amp;gt;o = invisible&lt;br /&gt;
|-&lt;br /&gt;
| IsColorChange&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Color of the path. Pink is usually used for Gourmet Luma paths.&amp;lt;br /&amp;gt;x = yellow&amp;lt;br /&amp;gt;o = pink&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Galaxy===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! style=&amp;quot;font-size:100%;&amp;quot; | Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| StageName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Internal name of the galaxy (ex. RedBlueExGalaxy)&lt;br /&gt;
|-&lt;br /&gt;
| MiniatureName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Model name of the mini model to display (ex. MiniRedBlueExGalaxy)&lt;br /&gt;
|-&lt;br /&gt;
| PointPosIndex&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| ID of the point on which the Galaxy is located&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| StageType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Sets various visibility settings depending on the type:&amp;lt;br /&amp;gt;&#039;&#039;&#039;Galaxy:&#039;&#039;&#039; Normal Galaxy; always visible&amp;lt;br /&amp;gt;&#039;&#039;&#039;MiniGalaxy:&#039;&#039;&#039; Hungry Luma Galaxy; always invisible until the way to it is unlocked&amp;lt;br /&amp;gt;&#039;&#039;&#039;HideGalaxy:&#039;&#039;&#039; Hidden Galaxy; always invisible until the way to it is unlocked&amp;lt;br /&amp;gt;&#039;&#039;&#039;BossGalaxyLv1:&#039;&#039;&#039; Bowser Jr. Galaxy; Adds a Bowser Jr. flag to a specific part of the mini-model.&amp;lt;br /&amp;gt;&#039;&#039;&#039;BossGalaxyLv2:&#039;&#039;&#039; Bowser Galaxy; Adds a Bowser flag to a specific part of the mini model.&amp;lt;br /&amp;gt;&#039;&#039;&#039;BossGalaxyLv3:&#039;&#039;&#039; Final Bowser Galaxy; Mini model does not rotate.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;This does not specify what kind of galaxy it is.&lt;br /&gt;
|-&lt;br /&gt;
| ScaleMin&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Normal scale of the mini model&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ScaleMax&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Scale of the mini model when pointed to with pointer&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PosOffsetX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| X-offset position of the mini-model from the point.&lt;br /&gt;
|-&lt;br /&gt;
| PosOffsetY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Y-offset position of the mini-model from the point.&lt;br /&gt;
|-&lt;br /&gt;
| PosOffsetZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Z-offset position of the mini-model from the point.&lt;br /&gt;
|-&lt;br /&gt;
| NamePlatePosY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| X-offset position of the name plate from mini model.&lt;br /&gt;
|-&lt;br /&gt;
| NamePlatePosZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Z-offset position of the name plate from mini model.&lt;br /&gt;
|-&lt;br /&gt;
| IconOffsetX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Icon X position in the world selection screen (Grand Galaxy Map)&lt;br /&gt;
|-&lt;br /&gt;
| IconOffsetY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| Icon Y position in the world selection screen (Grand Galaxy Map)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PointParts===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! style=&amp;quot;font-size:100%;&amp;quot; | Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartsTypeName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the object:&amp;lt;br /&amp;gt;&#039;&#039;&#039;StarPieceMine:&#039;&#039;&#039; Starbit Cluster&amp;lt;br /&amp;gt;&#039;&#039;&#039;StarCheckPoint:&#039;&#039;&#039; Star Gate&amp;lt;br /&amp;gt;&#039;&#039;&#039;TicoRouteCreator:&#039;&#039;&#039; Hungry Luma&amp;lt;br /&amp;gt;&#039;&#039;&#039;EarthenPipe:&#039;&#039;&#039; Warp Pipe&amp;lt;br /&amp;gt;&#039;&#039;&#039;WorldWarpPoint:&#039;&#039;&#039; World Portal&amp;lt;br /&amp;gt;&#039;&#039;&#039;StarRoadWarpPoint:&#039;&#039;&#039; Grand World Portal&lt;br /&gt;
|-&lt;br /&gt;
| PointIndex&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| ID of the point on which the object is located&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PartsIndex&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Index for Stargates.&amp;lt;br /&amp;gt;Each stargate within a world map requires a unique index.&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Param00&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Parameter 1.&amp;lt;br /&amp;gt;Different usage for each object type.&lt;br /&gt;
|-&lt;br /&gt;
| Param01&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Parameter 2.&amp;lt;br /&amp;gt;Different usage for each object type.&lt;br /&gt;
|-&lt;br /&gt;
| Param02&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Parameter 3.&amp;lt;br /&amp;gt;Unused.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Parameters====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! PartsTypeName&lt;br /&gt;
! Param00&lt;br /&gt;
! Param01&lt;br /&gt;
|-&lt;br /&gt;
| StarCheckPoint&lt;br /&gt;
| Required stars&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TicoRouteCreator&lt;br /&gt;
| Required starbits&lt;br /&gt;
| Point ID destination&lt;br /&gt;
|-&lt;br /&gt;
| EarthenPipe&lt;br /&gt;
| Point ID destination&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| WorldWarpPoint&lt;br /&gt;
| World ID destination&lt;br /&gt;
| Point ID destination&lt;br /&gt;
|-&lt;br /&gt;
| StarRoadWarpPoint&lt;br /&gt;
| World ID destination&lt;br /&gt;
| Point ID destination&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SpaceParts===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! style=&amp;quot;font-size:12px;&amp;quot; | Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartsTypeName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [4D6DBDAE]&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [433A5DB7]&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Param00&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Param01&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [912C1F84]&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| LayerNo&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TransX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TransY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TransZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RotateX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RotateY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RotateZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ScaleX&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ScaleY&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ScaleZ&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | FLOAT&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PointStream===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| StreamName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| StreamIndex&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PointNum&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Cameras==&lt;br /&gt;
All cameras for the different views are in &#039;&#039;ObjectData/WorldMapCamera.arc/ActorInfo/CameraParam.bcam&#039;&#039;. A few tracking shots for specific sequences, such as when Mario travels to a galaxy, are controlled by the [[CAMN]] camera key animation files and can be found in &#039;&#039;ObjectData/MarioAnim.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There are more specific cameras, which are partly used to link different camera-usages with the cameras from WorldMapCamera.arc and can be found in the map archives of the individual WorldMap0XGalaxy stages in BCAM format, although some camera codes appear to be completely unused.&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
There are two programs for editing world maps.&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/RealTheSunCat/Whitehole/releases/tag/v1.7fix Whitehole]===&lt;br /&gt;
Version 1.5.1 and higher include a powerful world editor that displays the world map within the 3D view. However, the world map cannot be edited by clicking on the objects, but only by using the bar on the left side. In addition, various parameters such as mini-model positions, name plates and by marking the destination points of certain objects such as pipes can be edited very easily and quickly through the 3D display.&lt;br /&gt;
&lt;br /&gt;
This editor also features the very useful &#039;&#039;&#039;QuickActions&#039;&#039;&#039; tab, which displays time-saving options depending on what type of object is currently selected:&lt;br /&gt;
*&#039;&#039;&#039;Add Connected Point&#039;&#039;&#039; Adds a new point to a selected point, complete with connected link.&lt;br /&gt;
*&#039;&#039;&#039;Insert Point&#039;&#039;&#039; Halves a selected link and inserts a new point in the center&lt;br /&gt;
*&#039;&#039;&#039;Add conntected pipe&#039;&#039;&#039; Adds a connected pipe to a selected pipe&lt;br /&gt;
*&#039;&#039;&#039;Add conntected SecretGalaxy&#039;&#039;&#039; Adds a preset secret galaxy to a selected Hungry Luma&lt;br /&gt;
*&#039;&#039;&#039;Load Default Template&#039;&#039;&#039; Loads a template for creating a new world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;Note: If you experience any bugs in later versions, use the one from v.1.5.1. This one is known to have none of the glitches. You may only need to click on &amp;lt;small&amp;gt;Help -&amp;gt; Controls&amp;lt;/small&amp;gt; to fix a bug that prevents you from selecting the various settings and values.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://kuribo64.net/get.php?id=CcQpzf8GviY8rv9m World Map Editor]===&lt;br /&gt;
An old tool, which like Whitehole only has a bar for editing, but has little functionality for editing. For example, links and points must be added individually. Some text information are also partially wrong.&amp;lt;br/&amp;gt;&lt;br /&gt;
It has no 3D view, but a 2D view of the points and paths as well as the kind of paths.&lt;br /&gt;
&lt;br /&gt;
This tool can be useful for quick edits like exchanging galaxynames, since it only needs the WorldMap0X.arc file to edit.&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Tools_and_Resources&amp;diff=599</id>
		<title>Tools and Resources</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Tools_and_Resources&amp;diff=599"/>
		<updated>2024-08-02T11:25:05Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Small Patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tools]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Below are a lot of useful tools to deal with files and structures found in the &#039;&#039;Galaxy&#039;&#039; games. There are many more tools that may aid in modding the games, but these were excluded due to being too outdated or obsolete.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Language !! Platforms !! Description !! Preview&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/Whitehole-Despaghettification Whitehole Despaghettification] || Arisotura, Aurum, jupahe64, TheSunCat, etc. || Java || Windows, Linux, Mac || A major rewrite of the old 3D level editor for both &#039;&#039;Galaxy&#039;&#039; games. This is essential for most projects. There are also more features, such as the BCSV editor. || [[File:Whitehole_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/Scenaristar Scenaristar] || Super Hackio || C# || Windows || A standalone scenario editor for &#039;&#039;Super Mario Galaxy 2&#039;&#039; featuring a clean and easy-to-use UI. Can be used to add, remove and edit scenario entries. || [[File:Scenaristar_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/LaunchCamPlus Launch Cam Plus] || Super Hackio || C# || Windows || A standalone camera editor for both &#039;&#039;Galaxy&#039;&#039; games. It requires some learning, however, as there is no visual feedback. It consists of several useful functions such as preset options, copypaste and optional experimental &amp;quot;unique editors&amp;quot; for different types. || [[File:LaunchCamPlus_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://cdn.discordapp.com/attachments/421356181844393984/977759404684365875/CANM_editor.zip CANM editor] || Phantomwings(?) || C# || Windows || A low-level editor for key-framed camera animations, such as the ones used for Galaxy intros. There is no visual feedback, meaning that it is somewhat difficult to use. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/WiiExplorer WiiExplorer] || Super Hackio || C# || Windows || An all-purpose archiving tool that supports RARC and U8 archives. Can be used to create and extract archives and edit, replace, rename, extract and organize the contents of these archive files. Supports all sorts of other games as well. || [[File:WiiExplorer_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://kuribo64.net/get.php?id=5c98RKoV3uJdGBin RARC Tools] || thakis || C || Windows || General Drag and Drop tools for archive manipulation. Consists of programs to deal with SZS compression (&#039;&#039;yaz0dec&#039;&#039; &amp;amp; &#039;&#039;yaz0enc&#039;&#039;) and RARC archives (&#039;&#039;rarcdump&#039;&#039; &amp;amp; &#039;&#039;rarcpack&#039;&#039;). Simply drag and drop the source file onto the respective programs and the work will be done for you. Also useful for batch script usage.|| &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/pyjmap pyjmap] || Aurum || Python || Windows, Linux, Mac || A high-level implementation of Nintendo&#039;s homemade BCSV/JMap data format. This includes methods to construct, analyze, manipulate, deserialize and serialize proper JMap data. Conversion between CSV and BCSV files is also supported. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/pygapa pygapa] || Aurum || Python || Windows, Linux, Mac || An editor for particles and effect data in both &#039;&#039;Galaxy&#039;&#039; games. It features a GUI editor to open, edit and save &#039;&#039;Effect.arc&#039;&#039; files. Additionally, it contains a bunch of functions to extract, dump, import and pack particle data. Command-line operations (Batch mode) are supported as well. || [[File:Screenshot_Res_pygapa.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://szs.wiimm.de/ wszst] || Wiimm || C || Windows, Linux, Mac || Wiimms SZS Tools is a set of command line tools to extract, modify and create different files of game Mario Kart Wii and of other Nintendo games. Source code is available on [https://github.com/Wiimm/wiimms-szs-tools GitHub]. ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Sounds &amp;amp; Music&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/gheskett/Nintendo-AST-Creator ASTCreate] || gheskett || C++ || Windows || Command-line tool to convert between WAV and [[AST]] files that features looping options. ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xayr.ga/tools/SoundModdingToolkit/ SoundModdingToolkit] || XAYRGA || n/a || Windows || Low-level toolkit to edit sounds in both &#039;&#039;Galaxy&#039;&#039; games (and many other Nintendo titles). || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Modelling&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/j3dview j3dview] || blank, RenolY2 || Python || Windows, Linux, Mac || A BMD/BDL rendering program. Can render most models with 90% accuracy, and can play BCK, BTK, BRK, BTP, BVA, and BPK animations. You can also replace the model&#039;s textures. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/SuperBMD SuperBMD] || Sage of Mirrors, RenolY2 || C# || Windows || A BMD/BDL model converter. Can convert BMD/BDL to .dae and .dae/.fbx to BMD/BDL. Allows the use of Material.json files to edit materials. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tarsa129/j3d-animation-editor j3d-animation-editor] || tarsa129, epichickensoup || Python || Windows, Linux, Mac || An editor and converter for most J3D animation formats. Includes an FBX/BVH/anim to BCK converter. Can also convert animations to Maya anim format. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/btk-conv btk-conv] ||RenolY2 || Python || Windows, Linux, Mac || A BTK &amp;lt;-&amp;gt; JSON converter. Converts a BTK to a JSON, and vise versa. Drag and Drop usage. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/bark-conv bark-conv] || RenolY2 || Python || Windows, Linux, Mac || A BRK &amp;lt;-&amp;gt; JSON converter. Converts a BRK to a JSON, and vise versa. Drag and Drop usage. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/NeoKclCreate NeoKclCreate] || Super Hackio || C# || Windows || A KCL and PA Collision Import/Export tool. Converts an OBJ and MTL into a KCL and PA (your collision files). Includes proper names for each collision code, presets for common collision uses, and allows the dumping of KCL models to obj files. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/gayfrogog/pyKCLCreate#pykclcreate pyKCLCreate] || blank, Froggo || Python || Windows, Linux, Mac || A KCL and PA Collision Creator. Converts an OBJ with it&#039;s packaged MTL into a KCL and PA (your collision files). Requires PyQt5 to work. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Gabbo089/SlideCalculator Slide Calculator] || Gabbo || Python || Windows, Linux, Mac || Blender Add-on. Can calculate the coordinates of the control points and handles of a Bezier curve and convert them into Whitehole coordinates. It allows the creation of custom slide levels. || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Layout&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/KillzXGaming/Switch-Toolbox/tags Switch Toolbox] || KillzXGaming || C# || Windows || Contains a layout editor that can edit all properties of [[BRLYT]] layout files and an animation previewer. It can start the layout editor directly by opening the ARC file.&amp;lt;/br&amp;gt;Be sure to turn off ARC Compression, because it does not work properly. Brlan animation editing is also broken. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.tockdom.com/wiki/Wii_Layout_Editor Wii Layout Editor] || Gericom || C# || Windows || Older layout editor. Can display layouts and animations based on exported ARC folder structure (anim, timg and blyt folders) and only move and edit objects to a limited extent. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiibrew.org/wiki/Benzin Benzin] || SquidMan, comex, megazig, Yossi and CheatFreak47 || ? || Windows || Command line tools for BRLYT/BRLAN &amp;lt;-&amp;gt; XML conversion usage.||&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/file/d/1Pf5ZIBGe0UHrZdSXj1W3_gML1VkMhvAM/view Wexos Toolbox] || Wexos || C# || Windows || Tool for editing Wii-specific formats such as BTI. The only tool that includes an editor for BRLAN animation files. ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Texts&lt;br /&gt;
|-&lt;br /&gt;
| [https://kuribo64.net/get.php?id=vsMm2Z3lxngxEX5W msbconv] || blank(?) || Python 2 || Windows, Linux, Mac || Outdated MSBT to XML Converter and vise versa. Drag and Drop or command line/batch script usage. Supports all characters including japanese font.&amp;lt;br&amp;gt;For use with &#039;&#039;Super Mario Galaxy 2&#039;&#039;. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/penguin117117/MSBT_Editor MSBT_Editor] || ぺんぐいん (penguin117117)  || C# || Windows || MSBT and MSBF editor - supports Japanese exclusive text features. For use with &#039;&#039;Super Mario Galaxy 2&#039;&#039;. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ZyphronG/Tomato Tomato] || Zyphron G. || C++ || Windows, Linux, Mac || BMG and TBL converter to XML and vise versa, causes will be less common. For use with &#039;&#039;Super Mario Galaxy 1&#039;&#039;. || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Assorted&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/Syati Syati] || shibbo, Aurum || C++ || Windows || A coding toolkit for Super Mario Galaxy 2 which provides headers, sample code, symbols and the actual loader. It is also able to patch a DOL file to incorporate the loader. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/SMG2MarioConstEditor SMG2MarioConstEditor] || Super Hackio || C# || Windows || A tool that allows you to edit parameters for playable characters in Super Mario Galaxy 2. These parameters affect jump height, running speed, Power-Ups timers and much more. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Lord-Giganticus/THP-Conveter THP-Converter] || Lord-Giganticus || C#, Python || Windows || A tool to convert between MP4 and THP videos. This also features a command-line functionality. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RoadrunnerWMC/BRFNTify-Next BRFNTify Next] || Tempus, RoadrunnerWMC || Python || Windows, Linux, Mac || NW4R font editor that can edit, expand and replace existing fonts. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://wit.wiimm.de/ wit] || Wiimm || C, Assembly || Windows, Linux, Mac || Wiimms ISO Tools is a set of command line tools to extract, modify and create Wii and GameCube ISO images and WBFS containers. The source code can be found on [https://github.com/Wiimm/wiimms-iso-tools GitHub].  || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Language !! Games !! Description !! Preview&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;width: 200px&amp;quot;| [https://github.com/SunakazeKun/SMG2-Project-Template Project Template] ||style=&amp;quot;width: 120px&amp;quot;| Aurum || C++ || SMG2 || A package consisting of useful files, patches and data to expand &#039;&#039;Super Mario Galaxy 2&#039;&#039;. This includes many new coded objects, such as Cataquacks, Montys, Jump Guarder, the Ice Flower &amp;amp; Flying Star power-ups, Pull Star Chips, custom Power Star colors, and a lot more. || [[File:Screenshot_Res_ProjectTemplate.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/GalaxyLevelEngine Galaxy Level Engine] || Super Hackio || PowerPC || SMG2 || A new Level Engine for &#039;&#039;Super Mario Galaxy 2&#039;&#039;, featuring a new hubworld system instead of the World Maps, 8 yellow stars, and more! Supports the major regions of the game (NTSC-U, PAL, and NTSC-J) || https://www.youtube.com/watch?v=wyFxaiIbbZE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/SMG2-FPSCounterLayout SMG2 Frames per Second Counter Layout] || Super Hackio || C++ || SMG2 || A new layout intended for mod creators to reduce the amount of lag in their levels. Supports all Wii regions. || &lt;br /&gt;
|-&lt;br /&gt;
| SMG1 Crash Debugger Patch || n/a || PowerPC || SMG1 || A Riivolution patch that enables the Crash Debugger in &#039;&#039;Super Mario Galaxy 1&#039;&#039;. This supports all known Wii releases of the game:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- American --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA2C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AAF0&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A432C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- European / Australian --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA48&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AB0C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A432C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Japanese --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA2C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AAF0&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A430C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Korean --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039BF80&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039C044&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A656C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Small Patches==&lt;br /&gt;
Below are a some small patches you can copy+paste into your hack&#039;s Riivolution XML&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Games !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t lose coins upon death. || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804C92AC&amp;quot; value=&amp;quot;60000000&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || Causes the game to keep your coin count when you die in a level.&lt;br /&gt;
|-&lt;br /&gt;
| Lose Starbits upon death. || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804C92D0&amp;quot; value=&amp;quot;90A3004C4E800020&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || Causes the game to remove all your starbits upon death in a level.&lt;br /&gt;
|-&lt;br /&gt;
| Collect Comet Medals Permanently || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x80322FE0&amp;quot; value=&amp;quot;4BD33571481AFB0D&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || This makes every comet medal permanently collectable.&amp;lt;/br&amp;gt;Example: If you enter a stage, get the comet medal, then pause and quit the level, you&#039;ll keep the comet medal.&lt;br /&gt;
|-&lt;br /&gt;
| Remove all original galaxies || Louis Miles || SMG2 || {{#spoiler: &amp;lt;pre&amp;gt;    &amp;lt;folder disc=&amp;quot;/LevelData&amp;quot; external=&amp;quot;StageData&amp;quot; create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80663131&amp;quot; /&amp;gt;   &amp;lt;!-- EU --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806643e1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806716e1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80671711&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80671755&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8069d5f1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806f68b5&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80701a75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80701be1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065DA31&amp;quot; /&amp;gt;   &amp;lt;!-- US --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065ECE1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066BFE1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066C011&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066C055&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80697EF1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806F11B5&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FC375&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FC4E1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065D211&amp;quot; /&amp;gt;   &amp;lt;!-- JP --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065E4C1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B7C1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B7F1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B835&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806976D1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806F0995&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FBB55&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FBCC1&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt; }} || Removes all original galaxies, making it easy to add new galaxy slots. Works with US, EU and JP versions.&lt;br /&gt;
&lt;br /&gt;
The following stages are necessary for the game to work:&lt;br /&gt;
*FileSelect&lt;br /&gt;
*PeachCastleGalaxy&lt;br /&gt;
*MarioFaceShipGalaxy&lt;br /&gt;
*HomeCenterGalaxy&lt;br /&gt;
*WorldMap0XGalaxy stages with GrandGalaxyMapZone&lt;br /&gt;
&lt;br /&gt;
The [[GalaxyDataTable]] also requires 6 galaxy slots with a set Grand Star from 1 - 6.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
Various other resources and websites are listed here for the purpose of documentation.&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20181217155847/http://lumasworkshop.bplaced.net/index.php &#039;&#039;Luma&#039;s Workshop&#039;&#039; Web Archive]: The original forums from 2018, preserved by Web Archive. If you feel like browsing through a small bit of history, here you go. Several old documentations can be accessed through this.&lt;br /&gt;
* [https://kuribo64.net/board/?board=archive &#039;&#039;Kuribo64&#039;&#039; forums]: Originally, Kuribo64 was the place for &#039;&#039;Galaxy&#039;&#039; modding. If you are in for another time travel, consider looking through the posts. Keep in mind that the information you are going to find over there is very outdated and not accurate anymore.&lt;br /&gt;
* [https://github.com/shibbo/Petari Petari]: A work-in-progress decompilation of &#039;&#039;Super Mario Galaxy 1&#039;&#039; that also serves as a documentation of the actual game.&lt;br /&gt;
* [https://github.com/shibbo/Takochu Takochu]: An abandoned level editor originally slated to release in 2022. Due to some tensions, this project has been cancelled and therefore archived, waiting for people to pick it up and finish it.&lt;br /&gt;
* [https://noclip.website noclip.website]: A virtual &amp;quot;museum&amp;quot; which features various selected levels and locations from video games. This also features very accurate rendering for both &#039;&#039;Galaxy&#039;&#039; games.&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Tools_and_Resources&amp;diff=598</id>
		<title>Tools and Resources</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Tools_and_Resources&amp;diff=598"/>
		<updated>2024-08-01T12:51:24Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: /* Small Patches */ Added remove original galaxy slots patch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tools]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Below are a lot of useful tools to deal with files and structures found in the &#039;&#039;Galaxy&#039;&#039; games. There are many more tools that may aid in modding the games, but these were excluded due to being too outdated or obsolete.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Language !! Platforms !! Description !! Preview&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | General&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/Whitehole-Despaghettification Whitehole Despaghettification] || Arisotura, Aurum, jupahe64, TheSunCat, etc. || Java || Windows, Linux, Mac || A major rewrite of the old 3D level editor for both &#039;&#039;Galaxy&#039;&#039; games. This is essential for most projects. There are also more features, such as the BCSV editor. || [[File:Whitehole_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/Scenaristar Scenaristar] || Super Hackio || C# || Windows || A standalone scenario editor for &#039;&#039;Super Mario Galaxy 2&#039;&#039; featuring a clean and easy-to-use UI. Can be used to add, remove and edit scenario entries. || [[File:Scenaristar_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/LaunchCamPlus Launch Cam Plus] || Super Hackio || C# || Windows || A standalone camera editor for both &#039;&#039;Galaxy&#039;&#039; games. It requires some learning, however, as there is no visual feedback. It consists of several useful functions such as preset options, copypaste and optional experimental &amp;quot;unique editors&amp;quot; for different types. || [[File:LaunchCamPlus_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://cdn.discordapp.com/attachments/421356181844393984/977759404684365875/CANM_editor.zip CANM editor] || Phantomwings(?) || C# || Windows || A low-level editor for key-framed camera animations, such as the ones used for Galaxy intros. There is no visual feedback, meaning that it is somewhat difficult to use. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/WiiExplorer WiiExplorer] || Super Hackio || C# || Windows || An all-purpose archiving tool that supports RARC and U8 archives. Can be used to create and extract archives and edit, replace, rename, extract and organize the contents of these archive files. Supports all sorts of other games as well. || [[File:WiiExplorer_RedBlueExGalaxy.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://kuribo64.net/get.php?id=5c98RKoV3uJdGBin RARC Tools] || thakis || C || Windows || General Drag and Drop tools for archive manipulation. Consists of programs to deal with SZS compression (&#039;&#039;yaz0dec&#039;&#039; &amp;amp; &#039;&#039;yaz0enc&#039;&#039;) and RARC archives (&#039;&#039;rarcdump&#039;&#039; &amp;amp; &#039;&#039;rarcpack&#039;&#039;). Simply drag and drop the source file onto the respective programs and the work will be done for you. Also useful for batch script usage.|| &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/pyjmap pyjmap] || Aurum || Python || Windows, Linux, Mac || A high-level implementation of Nintendo&#039;s homemade BCSV/JMap data format. This includes methods to construct, analyze, manipulate, deserialize and serialize proper JMap data. Conversion between CSV and BCSV files is also supported. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/pygapa pygapa] || Aurum || Python || Windows, Linux, Mac || An editor for particles and effect data in both &#039;&#039;Galaxy&#039;&#039; games. It features a GUI editor to open, edit and save &#039;&#039;Effect.arc&#039;&#039; files. Additionally, it contains a bunch of functions to extract, dump, import and pack particle data. Command-line operations (Batch mode) are supported as well. || [[File:Screenshot_Res_pygapa.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://szs.wiimm.de/ wszst] || Wiimm || C || Windows, Linux, Mac || Wiimms SZS Tools is a set of command line tools to extract, modify and create different files of game Mario Kart Wii and of other Nintendo games. Source code is available on [https://github.com/Wiimm/wiimms-szs-tools GitHub]. ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Sounds &amp;amp; Music&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/gheskett/Nintendo-AST-Creator ASTCreate] || gheskett || C++ || Windows || Command-line tool to convert between WAV and [[AST]] files that features looping options. ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xayr.ga/tools/SoundModdingToolkit/ SoundModdingToolkit] || XAYRGA || n/a || Windows || Low-level toolkit to edit sounds in both &#039;&#039;Galaxy&#039;&#039; games (and many other Nintendo titles). || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Modelling&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/j3dview j3dview] || blank, RenolY2 || Python || Windows, Linux, Mac || A BMD/BDL rendering program. Can render most models with 90% accuracy, and can play BCK, BTK, BRK, BTP, BVA, and BPK animations. You can also replace the model&#039;s textures. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/SuperBMD SuperBMD] || Sage of Mirrors, RenolY2 || C# || Windows || A BMD/BDL model converter. Can convert BMD/BDL to .dae and .dae/.fbx to BMD/BDL. Allows the use of Material.json files to edit materials. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tarsa129/j3d-animation-editor j3d-animation-editor] || tarsa129, epichickensoup || Python || Windows, Linux, Mac || An editor and converter for most J3D animation formats. Includes an FBX/BVH/anim to BCK converter. Can also convert animations to Maya anim format. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/btk-conv btk-conv] ||RenolY2 || Python || Windows, Linux, Mac || A BTK &amp;lt;-&amp;gt; JSON converter. Converts a BTK to a JSON, and vise versa. Drag and Drop usage. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RenolY2/bark-conv bark-conv] || RenolY2 || Python || Windows, Linux, Mac || A BRK &amp;lt;-&amp;gt; JSON converter. Converts a BRK to a JSON, and vise versa. Drag and Drop usage. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/NeoKclCreate NeoKclCreate] || Super Hackio || C# || Windows || A KCL and PA Collision Import/Export tool. Converts an OBJ and MTL into a KCL and PA (your collision files). Includes proper names for each collision code, presets for common collision uses, and allows the dumping of KCL models to obj files. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/gayfrogog/pyKCLCreate#pykclcreate pyKCLCreate] || blank, Froggo || Python || Windows, Linux, Mac || A KCL and PA Collision Creator. Converts an OBJ with it&#039;s packaged MTL into a KCL and PA (your collision files). Requires PyQt5 to work. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Gabbo089/SlideCalculator Slide Calculator] || Gabbo || Python || Windows, Linux, Mac || Blender Add-on. Can calculate the coordinates of the control points and handles of a Bezier curve and convert them into Whitehole coordinates. It allows the creation of custom slide levels. || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Layout&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/KillzXGaming/Switch-Toolbox/tags Switch Toolbox] || KillzXGaming || C# || Windows || Contains a layout editor that can edit all properties of [[BRLYT]] layout files and an animation previewer. It can start the layout editor directly by opening the ARC file.&amp;lt;/br&amp;gt;Be sure to turn off ARC Compression, because it does not work properly. Brlan animation editing is also broken. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.tockdom.com/wiki/Wii_Layout_Editor Wii Layout Editor] || Gericom || C# || Windows || Older layout editor. Can display layouts and animations based on exported ARC folder structure (anim, timg and blyt folders) and only move and edit objects to a limited extent. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiibrew.org/wiki/Benzin Benzin] || SquidMan, comex, megazig, Yossi and CheatFreak47 || ? || Windows || Command line tools for BRLYT/BRLAN &amp;lt;-&amp;gt; XML conversion usage.||&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/file/d/1Pf5ZIBGe0UHrZdSXj1W3_gML1VkMhvAM/view Wexos Toolbox] || Wexos || C# || Windows || Tool for editing Wii-specific formats such as BTI. The only tool that includes an editor for BRLAN animation files. ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Texts&lt;br /&gt;
|-&lt;br /&gt;
| [https://kuribo64.net/get.php?id=vsMm2Z3lxngxEX5W msbconv] || blank(?) || Python 2 || Windows, Linux, Mac || Outdated MSBT to XML Converter and vise versa. Drag and Drop or command line/batch script usage. Supports all characters including japanese font.&amp;lt;br&amp;gt;For use with &#039;&#039;Super Mario Galaxy 2&#039;&#039;. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/penguin117117/MSBT_Editor MSBT_Editor] || ぺんぐいん (penguin117117)  || C# || Windows || MSBT and MSBF editor - supports Japanese exclusive text features. For use with &#039;&#039;Super Mario Galaxy 2&#039;&#039;. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ZyphronG/Tomato Tomato] || Zyphron G. || C++ || Windows, Linux, Mac || BMG and TBL converter to XML and vise versa, causes will be less common. For use with &#039;&#039;Super Mario Galaxy 1&#039;&#039;. || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; | Assorted&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SunakazeKun/Syati Syati] || shibbo, Aurum || C++ || Windows || A coding toolkit for Super Mario Galaxy 2 which provides headers, sample code, symbols and the actual loader. It is also able to patch a DOL file to incorporate the loader. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/SMG2MarioConstEditor SMG2MarioConstEditor] || Super Hackio || C# || Windows || A tool that allows you to edit parameters for playable characters in Super Mario Galaxy 2. These parameters affect jump height, running speed, Power-Ups timers and much more. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Lord-Giganticus/THP-Conveter THP-Converter] || Lord-Giganticus || C#, Python || Windows || A tool to convert between MP4 and THP videos. This also features a command-line functionality. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/RoadrunnerWMC/BRFNTify-Next BRFNTify Next] || Tempus, RoadrunnerWMC || Python || Windows, Linux, Mac || NW4R font editor that can edit, expand and replace existing fonts. || &lt;br /&gt;
|-&lt;br /&gt;
| [https://wit.wiimm.de/ wit] || Wiimm || C, Assembly || Windows, Linux, Mac || Wiimms ISO Tools is a set of command line tools to extract, modify and create Wii and GameCube ISO images and WBFS containers. The source code can be found on [https://github.com/Wiimm/wiimms-iso-tools GitHub].  || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Language !! Games !! Description !! Preview&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;width: 200px&amp;quot;| [https://github.com/SunakazeKun/SMG2-Project-Template Project Template] ||style=&amp;quot;width: 120px&amp;quot;| Aurum || C++ || SMG2 || A package consisting of useful files, patches and data to expand &#039;&#039;Super Mario Galaxy 2&#039;&#039;. This includes many new coded objects, such as Cataquacks, Montys, Jump Guarder, the Ice Flower &amp;amp; Flying Star power-ups, Pull Star Chips, custom Power Star colors, and a lot more. || [[File:Screenshot_Res_ProjectTemplate.png|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/GalaxyLevelEngine Galaxy Level Engine] || Super Hackio || PowerPC || SMG2 || A new Level Engine for &#039;&#039;Super Mario Galaxy 2&#039;&#039;, featuring a new hubworld system instead of the World Maps, 8 yellow stars, and more! Supports the major regions of the game (NTSC-U, PAL, and NTSC-J) || https://www.youtube.com/watch?v=wyFxaiIbbZE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/SuperHackio/SMG2-FPSCounterLayout SMG2 Frames per Second Counter Layout] || Super Hackio || C++ || SMG2 || A new layout intended for mod creators to reduce the amount of lag in their levels. Supports all Wii regions. || &lt;br /&gt;
|-&lt;br /&gt;
| SMG1 Crash Debugger Patch || n/a || PowerPC || SMG1 || A Riivolution patch that enables the Crash Debugger in &#039;&#039;Super Mario Galaxy 1&#039;&#039;. This supports all known Wii releases of the game:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- American --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA2C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AAF0&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A432C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- European / Australian --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA48&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AB0C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A432C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Japanese --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AA2C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039AAF0&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A430C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Korean --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039BF80&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;98040068&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x8039C044&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;4082FFB8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804A656C&amp;quot; value=&amp;quot;60000000&amp;quot; original=&amp;quot;48000160&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Small Patches==&lt;br /&gt;
Below are a some small patches you can copy+paste into your hack&#039;s Riivolution XML&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Authors !! Games !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Don&#039;t lose coins upon death. || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804C92AC&amp;quot; value=&amp;quot;60000000&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || Causes the game to keep your coin count when you die in a level.&lt;br /&gt;
|-&lt;br /&gt;
| Lose Starbits upon death. || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x804C92D0&amp;quot; value=&amp;quot;90A3004C4E800020&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || Causes the game to remove all your starbits upon death in a level.&lt;br /&gt;
|-&lt;br /&gt;
| Collect Comet Medals Permanently || SuperHackio || SMG2 || &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- USA/PAL/JAP --&amp;gt;&lt;br /&gt;
&amp;lt;memory offset=&amp;quot;0x80322FE0&amp;quot; value=&amp;quot;4BD33571481AFB0D&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; || This makes every comet medal permanently collectable.&amp;lt;/br&amp;gt;Example: If you enter a stage, get the comet medal, then pause and quit the level, you&#039;ll keep the comet medal.&lt;br /&gt;
|-&lt;br /&gt;
| Remove all original galaxies || Louis Miles || SMG2 || {{#spoiler: &amp;lt;pre&amp;gt;    &amp;lt;folder disc=&amp;quot;/LevelData&amp;quot; external=&amp;quot;StageData&amp;quot; create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80663131&amp;quot; /&amp;gt;   &amp;lt;!-- EU --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806643e1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806716e1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80671711&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80671755&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8069d5f1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806f68b5&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80701a75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80701be1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065DA31&amp;quot; /&amp;gt;   &amp;lt;!-- US --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065ECE1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066BFE1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066C011&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066C055&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x80697EF1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806F11B5&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FC375&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FC4E1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065D211&amp;quot; /&amp;gt;   &amp;lt;!-- JP --&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8065E4C1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B7C1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B7F1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x8066B835&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806976D1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806F0995&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FBB55&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;memory value=&amp;quot;4C6576656C44617461&amp;quot; original=&amp;quot;537461676544617461&amp;quot; offset=&amp;quot;0x806FBCC1&amp;quot; /&amp;gt;&amp;lt;/pre&amp;gt; }} || Removes all original galaxies, making it easy to add new galaxy slots. Works with US, EU and JP versions.&lt;br /&gt;
&lt;br /&gt;
The following stages are necessary for the game to work:&lt;br /&gt;
*FileSelect&lt;br /&gt;
*PeachCastleGalaxy&lt;br /&gt;
*MarioFaceShipGalaxy&lt;br /&gt;
*HomeCenterGalaxy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
Various other resources and websites are listed here for the purpose of documentation.&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20181217155847/http://lumasworkshop.bplaced.net/index.php &#039;&#039;Luma&#039;s Workshop&#039;&#039; Web Archive]: The original forums from 2018, preserved by Web Archive. If you feel like browsing through a small bit of history, here you go. Several old documentations can be accessed through this.&lt;br /&gt;
* [https://kuribo64.net/board/?board=archive &#039;&#039;Kuribo64&#039;&#039; forums]: Originally, Kuribo64 was the place for &#039;&#039;Galaxy&#039;&#039; modding. If you are in for another time travel, consider looking through the posts. Keep in mind that the information you are going to find over there is very outdated and not accurate anymore.&lt;br /&gt;
* [https://github.com/shibbo/Petari Petari]: A work-in-progress decompilation of &#039;&#039;Super Mario Galaxy 1&#039;&#039; that also serves as a documentation of the actual game.&lt;br /&gt;
* [https://github.com/shibbo/Takochu Takochu]: An abandoned level editor originally slated to release in 2022. Due to some tensions, this project has been cancelled and therefore archived, waiting for people to pick it up and finish it.&lt;br /&gt;
* [https://noclip.website noclip.website]: A virtual &amp;quot;museum&amp;quot; which features various selected levels and locations from video games. This also features very accurate rendering for both &#039;&#039;Galaxy&#039;&#039; games.&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=File:Cutscene_Visual-Representation.png&amp;diff=458</id>
		<title>File:Cutscene Visual-Representation.png</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=File:Cutscene_Visual-Representation.png&amp;diff=458"/>
		<updated>2024-04-27T19:31:16Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: Reupload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Reupload&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=457</id>
		<title>SMR.szs</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=SMR.szs&amp;diff=457"/>
		<updated>2024-04-27T19:25:39Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
SMR.szs is a compressed BAA-file which defines the game&#039;s sound system. It contains strings relating to music, as well as information about various sequenced music and sound effects. Among other things, the file paths of [[AST]] stream files and the names of BGM, MBGM and STM tracks are specified within this file.&lt;br /&gt;
&lt;br /&gt;
The tool [https://xayr.gay/tools/SoundModdingToolkit/ SoundModdingToolkit] can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool&#039;s converted structure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==BGM==&lt;br /&gt;
===MAIN_BGM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MAIN_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the sequenced music. The music sequence files can be found in bms format in &#039;&#039;AudioRes/Seqs/JaiSeq.arc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| File ID of the bms file in JaiSeq.arc to use (the filename is ignored)&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this sequence (e.g. &amp;quot;BGM_MISS&amp;quot;).&amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===MULTI_BGM===&lt;br /&gt;
Found in &#039;&#039;SoundTable/BGM/libraries/MULTI_BGM.json&#039;&#039; &amp;lt;/br&amp;gt;&lt;br /&gt;
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in [[MultiBgmInfo]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 120&lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| ? always -1&lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 96&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this entry (e.g. &amp;quot;MBGM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==STREAM==&lt;br /&gt;
Found in &#039;&#039;SoundTable/STREAM/0.json&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Defines the streamed ast audio files including its internal STM name as well as its filepath.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| ? always 80&lt;br /&gt;
|-&lt;br /&gt;
| streamType&lt;br /&gt;
| Stream Type&amp;lt;br /&amp;gt;14: Standard Stream (2 Channels)&amp;lt;br /&amp;gt;238: Multi Stream (4 Channels)&lt;br /&gt;
|-&lt;br /&gt;
| streamPath&lt;br /&gt;
| Filepath of the AST file to use (e.g. &amp;quot;/AudioRes/Stream/smg2_ev_starchance_strm.ast&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| ? always 112&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal mapping name for this song (e.g. &amp;quot;STM_STAR_CHANCE&amp;quot;) &amp;lt;/br&amp;gt; This name can then be used in musiclists like [[ScenarioBgmInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SE==&lt;br /&gt;
===AW===&lt;br /&gt;
Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:&lt;br /&gt;
*&#039;&#039;&#039;manifest.json&#039;&#039;&#039; Contains the ID and name of the aw file&lt;br /&gt;
*&#039;&#039;&#039;wavetable.json&#039;&#039;&#039; Contains settings for each sound of the aw. file&lt;br /&gt;
&lt;br /&gt;
====wavetable====&lt;br /&gt;
Each entry starts with the name of the Wav file (e.g. &amp;quot;31&amp;quot;) followed by its settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| format&lt;br /&gt;
| ? always 0&lt;br /&gt;
|-&lt;br /&gt;
| key&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sampleRate&lt;br /&gt;
| The sample rate at which the sound should be played. (e.g. &amp;quot;22050.0&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| sampleCount&lt;br /&gt;
| Length of the sound in samples&lt;br /&gt;
|-&lt;br /&gt;
| loop&lt;br /&gt;
| Whether it should be looped or not&amp;lt;br /&amp;gt;&#039;&#039;&#039;true:&#039;&#039;&#039; loop&amp;lt;br /&amp;gt;&#039;&#039;&#039;false:&#039;&#039;&#039; do not loop&lt;br /&gt;
|-&lt;br /&gt;
| loop_start&lt;br /&gt;
| Loop Start position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| loop_end&lt;br /&gt;
| Loop End position in samples.&lt;br /&gt;
|-&lt;br /&gt;
| last&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| penult&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Libraries===&lt;br /&gt;
In &#039;&#039;SoundTable\SE\libraries\&#039;&#039; there are several libraries which contain settings for sounds with their internal assigned names.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| unk1&lt;br /&gt;
| ? always 128&lt;br /&gt;
|-&lt;br /&gt;
| unk2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk3&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk5&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| unk6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| Always 80&lt;br /&gt;
|-&lt;br /&gt;
| mOffset&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NameOffset&lt;br /&gt;
| ? Always 0&lt;br /&gt;
|-&lt;br /&gt;
| name&lt;br /&gt;
| Internal Name of the soundeffect (e.g. &amp;quot;SE_SV_LV_YOSHI_FLUTTER&amp;quot;)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=List_of_Music&amp;diff=456</id>
		<title>List of Music</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=List_of_Music&amp;diff=456"/>
		<updated>2024-04-27T19:19:08Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
This page lists all music that can be found in both &#039;&#039;Galaxy&#039;&#039; games along with their respective BGM, STM, MBGM and stream file names:&lt;br /&gt;
* &#039;&#039;&#039;BGM Name&#039;&#039;&#039;: The name of the sequenced track.&lt;br /&gt;
* &#039;&#039;&#039;Stream Name&#039;&#039;&#039;: The name of the streamed track.&lt;br /&gt;
* &#039;&#039;&#039;Combined Name&#039;&#039;&#039;: The Multi BGM name that combines the sequenced and streamed tracks.&lt;br /&gt;
* &#039;&#039;&#039;Stream File&#039;&#039;&#039;: The stream&#039;s file name in &#039;&#039;AudioRes/Streams&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
These entries can be found and edited in [[SMR.szs]] as well as in [[File_system#Audio_&amp;amp;_Video|various lists]] that vary per game.&lt;br /&gt;
&lt;br /&gt;
==Super Mario Galaxy==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! BGM Name !! Stream Name !! Combined Name !! Stream File&lt;br /&gt;
|-&lt;br /&gt;
| No music || BGM_CLEAR ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General Galaxy Music&lt;br /&gt;
|-&lt;br /&gt;
| Gateway Galaxy || BGM_GALAXY_24 || STM_GALAXY_24 || MBGM_GALAXY_24 || SMG_galaxy24_multi&lt;br /&gt;
|-&lt;br /&gt;
| Gateway Galaxy 2 || BGM_GALAXY_25 || STM_GALAXY_25 || MBGM_GALAXY_25 || SMG_galaxy25_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gateway Galaxy 3 || BGM_GALAXY_26 || STM_GALAXY_26 || MBGM_GALAXY_26 || SMG_galaxy26_strm&lt;br /&gt;
|-&lt;br /&gt;
| Good Egg Galaxy || BGM_GALAXY_01 || STM_GALAXY_01 || MBGM_GALAXY_01 || SMG_galaxy01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Honeyhive Galaxy || BGM_GALAXY_10 || STM_GALAXY_10 || MBGM_GALAXY_10 || SMG_galaxy10_strm&lt;br /&gt;
|-&lt;br /&gt;
| Big Bad Bugaboom || BGM_GALAXY_10_HURRY || STM_GALAXY_10_HURRY || MBGM_GALAXY_10_HURRY || SMG_galaxy10_hurry_strm&lt;br /&gt;
|-&lt;br /&gt;
| Space Junk Galaxy || BGM_GALAXY_08 || STM_GALAXY_08 || MBGM_GALAXY_08 || SMG_galaxy08_strm&lt;br /&gt;
|-&lt;br /&gt;
| Battlerock Galaxy || BGM_GALAXY_11 || STM_GALAXY_11 || MBGM_GALAXY_11 || SMG_galaxy11_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Star Reactor || BGM_GALAXY_15 || STM_GALAXY_15 || MBGM_GALAXY_15 || SMG_galaxy15_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Big Staircase || BGM_GALAXY_15_HURRY || STM_GALAXY_15_HURRY || MBGM_GALAXY_15_HURRY || SMG_galaxy15_hurry_strm&lt;br /&gt;
|-&lt;br /&gt;
| Beach Bowl Galaxy || BGM_GALAXY_03 || STM_GALAXY_03 || MBGM_GALAXY_03 || SMG_galaxy03_multi&lt;br /&gt;
|-&lt;br /&gt;
| Ghostly Galaxy || BGM_GALAXY_06 || STM_GALAXY_06 || MBGM_GALAXY_06 || SMG_galaxy06_strm&lt;br /&gt;
|-&lt;br /&gt;
| Buoy Base Galaxy || BGM_GALAXY_04 || STM_GALAXY_04 || MBGM_GALAXY_04 || SMG_galaxy04_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Jr.&#039;s Airship Armada || BGM_GALAXY_09 || STM_GALAXY_09 || MBGM_GALAXY_09 || SMG_galaxy09_strm&lt;br /&gt;
|-&lt;br /&gt;
| Drip Drop Galaxy || BGM_GALAXY_23 || STM_GALAXY_23 || MBGM_GALAXY_23 || SMG_galaxy23_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gusty Garden Galaxy || BGM_GALAXY_14 || STM_GALAXY_14 || MBGM_GALAXY_14 || SMG_galaxy14_strm&lt;br /&gt;
|-&lt;br /&gt;
| Freezeflame Galaxy || BGM_GALAXY_16 || STM_GALAXY_16 || MBGM_GALAXY_16 || SMG_galaxy16_multi&lt;br /&gt;
|-&lt;br /&gt;
| Dusty Dune Galaxy || BGM_GALAXY_19 || STM_GALAXY_19 || MBGM_GALAXY_19 || SMG_galaxy19_strm&lt;br /&gt;
|-&lt;br /&gt;
| Toy Time Galaxy || BGM_GALAXY_22 || STM_GALAXY_22 || MBGM_GALAXY_22 || SMG_galaxy22_strm&lt;br /&gt;
|-&lt;br /&gt;
| Deep Dark Galaxy || BGM_GALAXY_05 || STM_GALAXY_05 || MBGM_GALAXY_05 || SMG_galaxy05_strm&lt;br /&gt;
|-&lt;br /&gt;
| Melty Molten Galaxy || BGM_GALAXY_02 || STM_GALAXY_02 || MBGM_GALAXY_02 || SMG_galaxy02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Snow Cap Galaxy || BGM_GALAXY_27 || STM_GALAXY_27 || MBGM_GALAXY_27 || SMG_galaxy27_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Galaxy Reactor || BGM_GALAXY_28 || STM_GALAXY_28 || MBGM_GALAXY_28 || SMG_galaxy28_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Miscellaneous Stage Music&lt;br /&gt;
|-&lt;br /&gt;
| Interlude || BGM_GALAXY_INTER || STM_GALAXY_INTER || MBGM_GALAXY_INTER || SMG_galaxy_inter_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Tense Moment || BGM_GALAXY_01_TOMB || STM_GALAXY_01_TOMB || MBGM_GALAXY_01_TOMB || SMG_galaxy01_tomb_strm&lt;br /&gt;
|-&lt;br /&gt;
| Space Fantasy || BGM_GALAXY_12 || STM_GALAXY_12 || MBGM_GALAXY_12 || SMG_galaxy12_strm&lt;br /&gt;
|-&lt;br /&gt;
| Space Athletic || BGM_GALAXY_13 || STM_GALAXY_13 || MBGM_GALAXY_13 || SMG_galaxy13_strm&lt;br /&gt;
|-&lt;br /&gt;
| Blue Sky Athletic || BGM_GALAXY_17 || STM_GALAXY_17 || MBGM_GALAXY_17 || SMG_galaxy17_strm&lt;br /&gt;
|-&lt;br /&gt;
| Speedy Comet || BGM_GALAXY_02_HURRY || STM_GALAXY_02_HURRY || MBGM_GALAXY_02_HURRY || SMG_galaxy02_hurry_strm&lt;br /&gt;
|-&lt;br /&gt;
| Cosmic Comet || BGM_GALAXY_20 || STM_GALAXY_20 || MBGM_GALAXY_20 || SMG_galaxy20_strm&lt;br /&gt;
|-&lt;br /&gt;
| Purple Comet || BGM_GALAXY_21 || STM_GALAXY_21 || MBGM_GALAXY_21 || SMG_galaxy21_strm&lt;br /&gt;
|-&lt;br /&gt;
| Pipe Interior || BGM_GALAXY_18 || STM_GALAXY_18 || MBGM_GALAXY_18 || SMG_galaxy18_strm&lt;br /&gt;
|-&lt;br /&gt;
| Captain Toad&#039;s Theme || BGM_KINOPIO_TANKEN || STM_KINOPIO_TANKEN || MBGM_KINOPIO_TANKEN || SMG_ev_kinotan_strm&lt;br /&gt;
|-&lt;br /&gt;
| Captain Toad&#039;s Theme (Duplicate) || BGM_KINOPIO_TANKEN_B || STM_KINOPIO_TANKEN_B || MBGM_KINOPIO_TANKEN_B || SMG_ev_kinotan_strm&lt;br /&gt;
|-&lt;br /&gt;
| Surfing Race || BGM_RACE_01 || STM_RACE_01 || MBGM_RACE_01 || SMG_ev_race_strm&lt;br /&gt;
|-&lt;br /&gt;
| Spooky Race || BGM_RACE_02 || STM_RACE_02 || MBGM_RACE_02 || SMG_ev_race02_multi&lt;br /&gt;
|-&lt;br /&gt;
| Star Ball (Rolling Greens) || BGM_TAMAKORO ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Star Ball (Melty Molten) || BGM_TAMAKORO_2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Star Bunny Theme || BGM_GALAXY_02_CHASE || STM_GALAXY_02_CHASE || MBGM_GALAXY_02_CHASE || SMG_ev_rabbit_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Appears ||  || STM_MEET_KOOPA ||  || SMG_ev_kuppabt01_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Chance to Grab a Star! 1 || BGM_STAR_EXIST || STM_STAR_EXIST || MBGM_STAR_EXIST || SMG_ev_starchance_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Chance to Grab a Star! 2 || BGM_STAR_EXIST_2 || STM_STAR_EXIST_2 || MBGM_STAR_EXIST_2 || SMG_ev_starchance02_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Boss Music&lt;br /&gt;
|-&lt;br /&gt;
| Dino Piranha || BGM_BOSS_03_A || STM_BOSS_03_A || MBGM_BOSS_03_A || SMG_boss03a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Dino Piranha (Fast) || BGM_BOSS_03_B || STM_BOSS_03_B || MBGM_BOSS_03_B || SMG_boss03b_strm&lt;br /&gt;
|-&lt;br /&gt;
| King Kaliente || BGM_BOSS_01_A || STM_BOSS_01_A || MBGM_BOSS_01_A || SMG_boss01a_strm&lt;br /&gt;
|-&lt;br /&gt;
| King Kaliente (Fast) || BGM_BOSS_01_B || STM_BOSS_01_B || MBGM_BOSS_01_B || SMG_boss01b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Megaleg || BGM_BOSS_02_A || STM_BOSS_02_A || MBGM_BOSS_02_A || SMG_boss02a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Megaleg (Fast) || BGM_BOSS_02_B || STM_BOSS_02_B || MBGM_BOSS_02_B || SMG_boss02b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Kamella || BGM_BOSS_04 || STM_BOSS_04 || MBGM_BOSS_04 || SMG_boss04_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser || BGM_BOSS_KOOPA || STM_BOSS_KOOPA || MBGM_BOSS_KOOPA || SMG_boss07_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bouldergeist || BGM_BOSS_09_A || STM_BOSS_09_A || MBGM_BOSS_09_A || SMG_boss09a_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bouldergeist (Fast) || BGM_BOSS_09_B || STM_BOSS_09_B || MBGM_BOSS_09_B || SMG_boss09b_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Jr. || BGM_BOSS_06_A || STM_BOSS_06_A || MBGM_BOSS_06_A || SMG_boss06a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Jr. (Fast) || BGM_BOSS_06_B || STM_BOSS_06_B || MBGM_BOSS_06_B || SMG_boss06b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Major Burrows Chases Star Bunny || BGM_PINCH_3 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Major Burrows || BGM_BOSS_05_A || STM_BOSS_05_A || MBGM_BOSS_05_A || SMG_boss05a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Major Burrows (Fast) || BGM_BOSS_05_B || STM_BOSS_05_B || MBGM_BOSS_05_B || SMG_boss05b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Mecha-Bowser || BGM_BOSS_MECHA_KOOPA || STM_BOSS_MECHA_KOOPA || MBGM_BOSS_MECHA_KOOPA || SMG_boss08_strm&lt;br /&gt;
|-&lt;br /&gt;
| Final Bowser || BGM_BOSS_KOOPA_FINAL || STM_BOSS_KOOPA_FINAL || MBGM_BOSS_KOOPA_FINAL || SMG_boss10_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Comet Observatory&lt;br /&gt;
|-&lt;br /&gt;
| Comet Observatory 1 ||  || STM_ASTRO_OUT ||  || SMG_astroout01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Comet Observatory 2 ||  || STM_ASTRO_OUT_2 ||  || SMG_astroout02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Comet Observatory 3 ||  || STM_ASTRO_OUT_3 ||  || SMG_astroout03_strm&lt;br /&gt;
|-&lt;br /&gt;
| Dome || BGM_ASTRO_DOME || STM_ASTRO_DOME || MBGM_ASTRO_DOME || SMG_astrodome_multi&lt;br /&gt;
|-&lt;br /&gt;
| Dome (Bowser) || BGM_ASTRO_DOME_2 || STM_ASTRO_DOME_2 || MBGM_ASTRO_DOME_2 || SMG_astrodome02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Dome (Garden) || BGM_ASTRO_DOME_LOFT || STM_ASTRO_DOME_LOFT || MBGM_ASTRO_DOME_LOFT || SMG_astrodome03_strm&lt;br /&gt;
|-&lt;br /&gt;
| Library || BGM_LIBRARY || STM_LIBRARY || MBGM_LIBRARY || SMG_astrodome04_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Power-Up Music&lt;br /&gt;
|-&lt;br /&gt;
| Rainbow Power-Up || BGM_MUTEKI_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Rainbow Power-Up (first time) || BGM_MUTEKI_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Fire Power-Up || BGM_FIRE_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Fire Power-Up (first time) || BGM_FIRE_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Ice Power-Up || BGM_ICE_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Ice Power-Up (first time) || BGM_ICE_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Flying Power-Up || BGM_FLYING_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Flying Power-Up (first time) || BGM_FLYING_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_FIRST_MORPH_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_FIRST_MORPH_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Other Music&lt;br /&gt;
|-&lt;br /&gt;
| Title Music ||  || STM_TITLE ||  || SMG_title_strm&lt;br /&gt;
|-&lt;br /&gt;
| File Select || BGM_FILE_SELECT || STM_FILE_SELECT || MBGM_FILE_SELECT || SMG_fileselect_strm&lt;br /&gt;
|-&lt;br /&gt;
| Credits ||  || STM_STAFF_ROLL ||  || SMG_staffroll_strm&lt;br /&gt;
|-&lt;br /&gt;
| Picture Book ||  || STM_PROLOGUE_01 ||  || SMG_ev_prolo01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Picture Book (Sad) ||  || STM_PROLOGUE_01_B ||  || SMG_ev_prolo01_b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Mushroom Kingdom || BGM_PROLOGUE_02 || STM_PROLOGUE_02 || MBGM_PROLOGUE_02 || SMG_ev_prolo02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Attack of the Airships (unused) || BGM_PROLOGUE_03 || STM_PROLOGUE_03 || MBGM_PROLOGUE_03 || SMG_ev_prolo03_strm&lt;br /&gt;
|-&lt;br /&gt;
| Catastrophe (unused) ||  || STM_PROLOGUE_04 ||  || SMG_ev_prolo04_strm&lt;br /&gt;
|-&lt;br /&gt;
| Mushroom Kingdom (After Attack) ||  || STM_PROLOGUE_05 ||  || SMG_ev_prolo05_strm&lt;br /&gt;
|-&lt;br /&gt;
| Star Child ||  || STM_EPILOGUE_B ||  || SMG_ev_epilogue_b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Star Select Screen (When entering from a Dome) || BGM_SENARIO_SEL ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Star Select Screen (When not entering from a Dome) || BGM_SENARIO_SEL_2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Preparing to go to the Center of the Universe || BGM_SENARIO_SEL_3 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Galaxy Intro || BGM_START_DEMO ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Gateway Intro || BGM_MEET_TICO_ZOOM_OUT ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Bowser Jr. Intro || BGM_KOOPA_JR_APPEAR ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Final Bowser Intro || BGM_KOOPA_VS3_SUN ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| First Grand Star Collected ||  || STM_FIRST_ASTRO ||  || SMG_first_astro_strm&lt;br /&gt;
|-&lt;br /&gt;
| Another Grand Star Collected ||  || STM_SECOND_ASTRO ||  || SMG_second_astro_strm&lt;br /&gt;
|-&lt;br /&gt;
| E3 2006 Bubble || BGM_IN_BUBBLE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Jingles&lt;br /&gt;
|-&lt;br /&gt;
| Death || BGM_MISS ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Game Over || BGM_GAMEOVER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Got Power Star || BGM_STAR_POW_GET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Got Grand Star || BGM_GRAND_STAR_GET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Got Final Grand Star || BGM_GRAND_STAR_GET_2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Countdown || BGM_MINIGAME_START ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Won Race || BGM_RACE_WIN ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Lost Race || BGM_RACE_LOSE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| New Galaxy || BGM_NEW_GALAXY ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Planet Appeared || BGM_APPEAR_PLANET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Pedestal Appeared in Gateway || BGM_APPEAR_HD_TOWER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| New High Score || BGM_HIGH_SCORE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Galaxy Completed || BGM_GALAXY_COMPLETE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Uncategorized&lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_ASTRO_RETURN ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_JINGLE_LIGHT_1 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_KOOPA_APPEAR ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_KOOPA_GRAND_STAR_1 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_KOOPA_GRAND_STAR_3 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_PINCH_1 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_PINCH_2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_RED_COMET_APPEAR ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Super Mario Galaxy 2==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! BGM Name !! Stream Name !! Combined Name !! Stream File&lt;br /&gt;
|-&lt;br /&gt;
| No music || BGM_CLEAR ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | General Galaxy Music&lt;br /&gt;
|-&lt;br /&gt;
| Sky Station Galaxy || BGM_SMG2_GALAXY_06 || STM_SMG2_GALAXY_06 || MBGM_SMG2_GALAXY_06 || SMG2_galaxy06_strm&lt;br /&gt;
|-&lt;br /&gt;
| Sky Station Galaxy 2 || BGM_SMG2_GALAXY_05 || STM_SMG2_GALAXY_05 || MBGM_SMG2_GALAXY_05 || SMG2_galaxy05_strm&lt;br /&gt;
|-&lt;br /&gt;
| Yoshi Star Galaxy || BGM_SMG2_GALAXY_32 || STM_SMG2_GALAXY_32 || MBGM_SMG2_GALAXY_32 || SMG2_galaxy32_strm&lt;br /&gt;
|-&lt;br /&gt;
| Spin-Dig Galaxy || BGM_SMG2_GALAXY_09 || STM_SMG2_GALAXY_09 || MBGM_SMG2_GALAXY_09 || SMG2_galaxy09_strm&lt;br /&gt;
|-&lt;br /&gt;
| Fluffy Bluff Galaxy || BGM_SMG2_GALAXY_07 || STM_SMG2_GALAXY_07 || MBGM_SMG2_GALAXY_07 || SMG2_galaxy07_strm&lt;br /&gt;
|-&lt;br /&gt;
| Rightside Down Galaxy || BGM_SMG2_GALAXY_03 || STM_SMG2_GALAXY_03 || MBGM_SMG2_GALAXY_03 || SMG2_galaxy03_multi&lt;br /&gt;
|-&lt;br /&gt;
| Flip-Swap Galaxy || BGM_SMG2_GALAXY_04 || STM_SMG2_GALAXY_04 || MBGM_SMG2_GALAXY_04 || SMG2_galaxy04_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Jr.&#039;s Fiery Flotilla || BGM_SMG2_GALAXY31 || STM_SMG2_GALAXY31 || MBGM_SMG2_GALAXY31 || SMG2_galaxy31_strm&lt;br /&gt;
|-&lt;br /&gt;
| Puzzle Plank Galaxy || BGM_SMG2_GALAXY_29 || STM_SMG2_GALAXY_29 || MBGM_SMG2_GALAXY_29 || SMG2_galaxy29_strm&lt;br /&gt;
|-&lt;br /&gt;
| Hightail Falls Galaxy || BGM_DASH_YOSHI ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Cosmic Cove Galaxy || BGM_SMG2_GALAXY_02 || STM_SMG2_GALAXY_02 || MBGM_SMG2_GALAXY_02 || SMG2_galaxy02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Wild Glide Galaxy || BGM_GLIDER || STM_GLIDER || MBGM_GLIDER || SMG2_ev_glider_strm&lt;br /&gt;
|-&lt;br /&gt;
| Honeybloom Galaxy || BGM_SMG2_GALAXY_13 || STM_SMG2_GALAXY_13 || MBGM_SMG2_GALAXY_13 || SMG2_galaxy13_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Lava Lair || BGM_SMG2_GALAXY_15 || STM_SMG2_GALAXY_15 || MBGM_SMG2_GALAXY_15 || SMG2_galaxy15_strm&lt;br /&gt;
|-&lt;br /&gt;
| Tall Trunk Galaxy Slide || BGM_SLIDER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Haunty Halls Galaxy || BGM_SMG2_GALAXY_11 || STM_SMG2_GALAXY_11 || MBGM_SMG2_GALAXY_11 || SMG2_galaxy11_strm&lt;br /&gt;
|-&lt;br /&gt;
| Freezy Flake Galaxy || BGM_SMG2_GALAXY_19 || STM_SMG2_GALAXY_19 || MBGM_SMG2_GALAXY_19 || SMG2_galaxy19_strm&lt;br /&gt;
|-&lt;br /&gt;
| Beat Block Galaxy || BGM_REPEAT_TIMER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Supermassive Galaxy || BGM_SMG2_GALAXY_23 || STM_SMG2_GALAXY_23 || MBGM_SMG2_GALAXY_23 || SMG2_galaxy23_strm&lt;br /&gt;
|-&lt;br /&gt;
| Flipsville Galaxy || BGM_SMG2_GALAXY_14 || STM_SMG2_GALAXY_14 || MBGM_SMG2_GALAXY_14 || SMG2_galaxy14_strm&lt;br /&gt;
|-&lt;br /&gt;
| Starshine Beach Galaxy || BGM_SMG2_GALAXY_27 || STM_SMG2_GALAXY_27 || MBGM_SMG2_GALAXY_27 || SMG2_galaxy27_multi&lt;br /&gt;
|-&lt;br /&gt;
| Sweet Mystery Galaxy || BGM_SMG2_GALAXY_10 || STM_SMG2_GALAXY_10 || MBGM_SMG2_GALAXY_10 || SMG2_galaxy10_strm&lt;br /&gt;
|-&lt;br /&gt;
| Space Storm Galaxy || BGM_SMG2_GALAXY_12 || STM_SMG2_GALAXY_12 || MBGM_SMG2_GALAXY_12 || SMG2_galaxy12_strm&lt;br /&gt;
|-&lt;br /&gt;
| Space Storm Galaxy 2 || BGM_SMG2_GALAXY_17 || STM_SMG2_GALAXY_17 || MBGM_SMG2_GALAXY_17 || SMG_galaxy17_multi&lt;br /&gt;
|-&lt;br /&gt;
| Slipsand Galaxy || BGM_SMG2_GALAXY_01 || STM_SMG2_GALAXY_01 || MBGM_SMG2_GALAXY_01 || SMG2_galaxy01_multi&lt;br /&gt;
|-&lt;br /&gt;
| Shiverburn Galaxy || BGM_SMG2_GALAXY_16 || STM_SMG2_GALAXY_16 || MBGM_SMG2_GALAXY_16 || SMG2_galaxy16_multi&lt;br /&gt;
|-&lt;br /&gt;
| Fleet Glide Galaxy || BGM_SMG2_GALAXY_28 || STM_SMG2_GALAXY_28 || MBGM_SMG2_GALAXY_28 || SMG2_galaxy28_strm&lt;br /&gt;
|-&lt;br /&gt;
| Melty Monster Galaxy || BGM_SMG2_GALAXY_30 || STM_SMG2_GALAXY_30 || MBGM_SMG2_GALAXY_30 || SMG2_galaxy30_strm&lt;br /&gt;
|-&lt;br /&gt;
| Throwback Galaxy || BGM_SMG2_GALAXY_21 || STM_SMG2_GALAXY_21 || MBGM_SMG2_GALAXY_21 || SMG2_galaxy21_strm&lt;br /&gt;
|-&lt;br /&gt;
| Slimy Spring Galaxy || BGM_SMG2_GALAXY_24 || STM_SMG2_GALAXY_24 || MBGM_SMG2_GALAXY_24 || SMG2_galaxy24_strm&lt;br /&gt;
|-&lt;br /&gt;
| Slimy Spring Galaxy (Ambience) || BGM_SMG2_GALAXY_24B || STM_SMG2_GALAXY_24B || MBGM_SMG2_GALAXY_24B || SMG2_galaxy24b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Galaxy Generator || BGM_SMG2_GALAXY_20 || STM_SMG2_GALAXY_20 || MBGM_SMG2_GALAXY_20 || SMG2_galaxy20_strm&lt;br /&gt;
|-&lt;br /&gt;
| Stone Cyclone Galaxy || BGM_SMG2_GALAXY_22 || STM_SMG2_GALAXY_22 || MBGM_SMG2_GALAXY_22 || SMG2_galaxy22_multi&lt;br /&gt;
|-&lt;br /&gt;
| Boss Blitz Galaxy || BGM_EV_BOSSRUSH ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Boss Blitz Galaxy (with fade-in) || BGM_EV_BOSSRUSH02 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Unused Galaxy Theme || BGM_SMG2_GALAXY_08 || STM_SMG2_GALAXY_08 || MBGM_SMG2_GALAXY_08 || SMG2_galaxy08_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gateway Galaxy || BGM_SMG2_GALAXY_25 || STM_SMG2_GALAXY_25 || MBGM_SMG2_GALAXY_25 || SMG2_galaxy25_strm&lt;br /&gt;
|-&lt;br /&gt;
| Good Egg Galaxy || BGM_SMG_GALAXY_01 || STM_SMG_GALAXY_01 || MBGM_SMG_GALAXY_01 || SMG_galaxy01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gusty Garden Galaxy || BGM_SMG_GALAXY_14 || STM_SMG_GALAXY_14 || MBGM_SMG_GALAXY_14 || SMG_galaxy14_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser&#039;s Galaxy Reactor || BGM_SMG_GALAXY_28 || STM_SMG_GALAXY_28 || MBGM_SMG_GALAXY_28 || SMG_galaxy28_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Miscellaneous Stage Music&lt;br /&gt;
|-&lt;br /&gt;
| Unknown Star || BGM_SMG2_GALAXY_INTER || STM_SMG2_GALAXY_INTER || MBGM_SMG2_GALAXY_INTER || SMG2_galaxy_inter_strm&lt;br /&gt;
|-&lt;br /&gt;
| Speedy Comet || BGM_SMG2_GALAXY_HURRY || STM_SMG2_GALAXY_HURRY || MBGM_SMG2_GALAXY_HURRY || SMG2_galaxy_hurry_strm&lt;br /&gt;
|-&lt;br /&gt;
| Daredevil Comet || BGM_SMG2_GALAXY_DANGER || STM_SMG2_GALAXY_DANGER || MBGM_SMG2_GALAXY_DANGER || SMG2_galaxy_danger_strm&lt;br /&gt;
|-&lt;br /&gt;
| Purple Comet || BGM_SMG2_GALAXY_26 || STM_SMG2_GALAXY_26 || MBGM_SMG2_GALAXY_26 || SMG2_galaxy26_strm&lt;br /&gt;
|-&lt;br /&gt;
| Pipe Interior || BGM_SMG2_GALAXY_18 || STM_SMG2_GALAXY_18 || MBGM_SMG2_GALAXY_18 || SMG2_galaxy18_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bonus Room || BGM_GAMBLE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Teleporter || BGM_SMG2_EV_PORTER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Minigame || BGM_MINI_GAME || STM_MINI_GAME || MBGM_MINI_GAME || SMG2_ev_minigame_strm&lt;br /&gt;
|-&lt;br /&gt;
| Star Ball (Rolling Masterpiece) || BGM_TAMAKORO ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Star Ball (Rolling Coaster) || BGM_TAMAKORO_2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Tip Network || BGM_DREAM01 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Captain Toad&#039;s Theme || BGM_EV_KINOTAN || STM_EV_KINOTAN || MBGM_EV_KINOTAN || SMG2_ev_kinotan_strm&lt;br /&gt;
|-&lt;br /&gt;
| Star Bunny Theme || BGM_EV_RABBIT || STM_EV_RABBIT || MBGM_EV_RABBIT || SMG2_ev_rabbit_strm&lt;br /&gt;
|-&lt;br /&gt;
| Whittle Theme || BGM_SMG2_EV_MOKKU || STM_SMG2_EV_MOKKU || MBGM_SMG2_EV_MOKKU || SMG2_ev_mokku_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser Appears ||  || STM_SMG2_EV_KUPPABT01 ||  || SMG2_ev_kuppabt01_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Chance to Grab a Star! 1 || BGM_STAR_CHANCE || STM_STAR_CHANCE || MBGM_STAR_CHANCE || SMG2_ev_starchance_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Chance to Grab a Star! 2 || BGM_STAR_CHANCE_2 || STM_STAR_CHANCE_2 || MBGM_STAR_CHANCE_2 || SMG2_ev_starchance02_strm&lt;br /&gt;
|-&lt;br /&gt;
| A Chance to Grab a Star! 3 ||  || STM_STAR_CHANCE_3 ||  || SMG2_ev_starchance03_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Boss Music&lt;br /&gt;
|-&lt;br /&gt;
| Peewee Piranha || BGM_SMG2_BOSS_05A || STM_SMG2_BOSS_05A || MBGM_SMG2_BOSS_05A || SMG2_boss05a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Peewee Piranha (Fast) ||  || STM_SMG2_BOSS_05B ||  || SMG2_boss05b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Giga-Lakitu || BGM_PINCH_01 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Digga-Leg || BGM_SMG2_BOSS_08A || STM_SMG2_BOSS_08A || MBGM_SMG2_BOSS_08A || SMG2_boss08a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Digga-Leg (Fast) ||  || STM_SMG2_BOSS08B ||  || SMG2_boss08b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gobblegut || BGM_SMG2_BOSS_01A || STM_SMG2_BOSS_01A || MBGM_SMG2_BOSS_01A || SMG2_boss01a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Gobblegut (Fast) ||  || STM_SMG2_BOSS_01B ||  || SMG2_boss01b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bowser || BGM_SMG2_BOSS_07 || STM_SMG2_BOSS_07 || MBGM_SMG2_BOSS_07 || SMG2_boss07_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bowser (Fast) || BGM_SMG2_BOSS_07B || STM_SMG2_BOSS_07B || MBGM_SMG2_BOSS_07B || SMG2_boss07b_multi&lt;br /&gt;
|-&lt;br /&gt;
| Megahammer || BGM_SMG2_BOSS_03A || STM_SMG2_BOSS_03A || MBGM_SMG2_BOSS_03A || SMG2_boss03a_multi&lt;br /&gt;
|-&lt;br /&gt;
| Megahammer (Fast) ||  || STM_SMG2_BOSS_03B ||  || SMG2_boss03b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Glamdozer || BGM_SMG2_BOSS_02A || STM_SMG2_BOSS_02A || MBGM_SMG2_BOSS_02A || SMG2_boss02a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Glamdozer (Fast) ||  || STM_SMG2_BOSS_02B ||  || SMG2_boss02b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Squizzard || BGM_SMG2_BOSS_04A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Boomsday Machine || BGM_SMG2_BOSS_06A || STM_SMG2_BOSS_06A || MBGM_SMG2_BOSS_06A || SMG2_boss06a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Boomsday Machine (Fast) || BGM_SMG2_BOSS_06B || STM_SMG2_BOSS_06B || MBGM_SMG2_BOSS_06B || SMG2_boss06b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Final Bowser || BGM_SMG2_BOSS_10 || STM_SMG2_BOSS_10 || MBGM_SMG2_BOSS_10 || SMG2_boss10_multi&lt;br /&gt;
|-&lt;br /&gt;
| Final Bowser (Without Ambience) ||  || STM_SMG2_BOSS10 ||  || SMG2_boss10_strm&lt;br /&gt;
|-&lt;br /&gt;
| Dino Piranha || BGM_SMG_BOSS_03A || STM_SMG_BOSS_03A || MBGM_SMG_BOSS_03A || SMG_boss03a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Dino Piranha (Fast) || BGM_SMG_BOSS_03B || STM_SMG_BOSS_03B || MBGM_SMG_BOSS_03B || SMG_boss03b_strm&lt;br /&gt;
|-&lt;br /&gt;
| King Kaliente || BGM_SMG_BOSS_01A || STM_SMG_BOSS_01A || MBGM_SMG_BOSS_01A || SMG_boss01a_strm&lt;br /&gt;
|-&lt;br /&gt;
| King Kaliente (Fast) || BGM_SMG_BOSS_01B || STM_SMG_BOSS_01B || MBGM_SMG_BOSS_01B || SMG_boss01b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Major Burrows || BGM_SMG_BOSS_05A || STM_SMG_BOSS_05A || MBGM_SMG_BOSS_05A || SMG_boss05a_strm&lt;br /&gt;
|-&lt;br /&gt;
| Major Burrows (Fast) || BGM_SMG_BOSS_05B || STM_SMG_BOSS_05B || MBGM_SMG_BOSS_05B || SMG_boss05b_strm&lt;br /&gt;
|-&lt;br /&gt;
| Bouldergeist || BGM_SMG_BOSS_09A || STM_SMG_BOSS_09A || MBGM_SMG_BOSS_09A || SMG_boss09a_multi&lt;br /&gt;
|-&lt;br /&gt;
| Bouldergeist (Fast) || BGM_SMG_BOSS_09B || STM_SMG_BOSS_09B || MBGM_SMG_BOSS_09B || SMG_boss09b_multi&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | HUB &amp;amp; World Map Music&lt;br /&gt;
|-&lt;br /&gt;
| World 1 &amp;amp; 2 || BGM_SMG2_WORLDMAP_06 || STM_SMG2_WORLDMAP_06 || MBGM_SMG2_WORLDMAP_06 || SMG2_worldmap06_multi&lt;br /&gt;
|-&lt;br /&gt;
| World 3 || BGM_SMG2_WORLDMAP_00 || STM_SMG2_WORLDMAP_00 || MBGM_SMG2_WORLDMAP_00 || SMG2_worldmap00_multi&lt;br /&gt;
|-&lt;br /&gt;
| World 4 || BGM_SMG2_WORLDMAP_04 || STM_SMG2_WORLDMAP_04 || MBGM_SMG2_WORLDMAP_04 || SMG2_worldmap04_multi&lt;br /&gt;
|-&lt;br /&gt;
| World 5 || BGM_SMG2_WORLDMAP_08 || STM_SMG2_WORLDMAP_08 || MBGM_SMG2_WORLDMAP_08 || SMG2_worldmap08_multi&lt;br /&gt;
|-&lt;br /&gt;
| World 6 || BGM_SMG2_WORLDMAP_07 || STM_SMG2_WORLDMAP_07 || MBGM_SMG2_WORLDMAP_07 || SMG2_worldmap07_multi&lt;br /&gt;
|-&lt;br /&gt;
| World S || BGM_SMG2_WORLDMAP_03 || STM_SMG2_WORLDMAP_03 || MBGM_SMG2_WORLDMAP_03 || SMG2_worldmap03_multi&lt;br /&gt;
|-&lt;br /&gt;
| Green Star World || BGM_SMG2_WORLDMAP_05 || STM_SMG2_WORLDMAP_05 || MBGM_SMG2_WORLDMAP_05 || SMG2_worldmap05_multi&lt;br /&gt;
|-&lt;br /&gt;
| Starship Mario 1 || BGM_SMG2_MARIO_SHIP01 || STM_SMG2_MARIO_SHIP01 || MBGM_SMG2_MARIO_SHIP01 || SMG2_mario_ship01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Starship Mario 2 || BGM_SMG2_MARIO_SHIP02 || STM_SMG2_MARIO_SHIP02 || MBGM_SMG2_MARIO_SHIP02 || SMG2_mario_ship02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Starship Mario 3 || BGM_SMG2_MARIO_SHIP03 || STM_SMG2_MARIO_SHIP03 || MBGM_SMG2_MARIO_SHIP03 || SMG2_mario_ship03_strm&lt;br /&gt;
|-&lt;br /&gt;
| Comet Observatory 2 ||  || STM_SMG_ASTROOUT02 ||  || SMG_astroout02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Comet Observatory 3 ||  || STM_SMG_ASTROOUT03 ||  || SMG_astroout03_strm&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Power-Up Music&lt;br /&gt;
|-&lt;br /&gt;
| Rainbow Power-Up || BGM_MUTEKI_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Rainbow Power-Up (first time) || BGM_MUTEKI_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Fire Power-Up || BGM_FIRE_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Fire Power-Up (first time) || BGM_FIRE_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Ice Power-Up || BGM_ICE_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Ice Power-Up (first time) || BGM_ICE_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Flying Power-Up || BGM_FLYING_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Flying Power-Up (first time) || BGM_FLYING_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_FIRST_MORPH_A ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_FIRST_MORPH_B ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Other Music&lt;br /&gt;
|-&lt;br /&gt;
| Title Music (Duplicate) || BGM_TITLE || STM_TITLE || MBGM_TITLE || SMG2_title_strm&lt;br /&gt;
|-&lt;br /&gt;
| Credits || BGM_SMG2_STAFFROLL || STM_SMG2_STAFFROLL || MBGM_SMG2_STAFFROLL || SMG2_staffroll_strm&lt;br /&gt;
|-&lt;br /&gt;
| Mushroom Kingdom ||  || STM_SMG2_EV_PROLOGUE_02 ||  || SMG2_ev_prolo02_strm&lt;br /&gt;
|-&lt;br /&gt;
| Master Luma&#039;s Theme || BGM_SMG2_EV_PROLO_03 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Bowser Attacks ||  || STM_SMG2_EV_PROLOGUE_05 ||  || SMG2_ev_prolo05_strm&lt;br /&gt;
|-&lt;br /&gt;
| First Grand Star Collected ||  || STM_SMG2_FIRST_ASTRO ||  || SMG2_first_astro_strm&lt;br /&gt;
|-&lt;br /&gt;
| Entering World 1 ||  || STM_SMG2_FIRST_ASTRO2 ||  || SMG2_first_astro2_strm&lt;br /&gt;
|-&lt;br /&gt;
| Another Grand Star Collected ||  || STM_SMG2_SECOND_ASTRO ||  || SMG2_second_astro_strm&lt;br /&gt;
|-&lt;br /&gt;
| First Star Select || BGM_SMG2_EV_DEPART01 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Star Select || BGM_SMG2_COURSESELECT02 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| The Luma and the Hat ||  || STM_SMG2_EV_ENDING01 ||  || SMG2_ev_ending01_strm&lt;br /&gt;
|-&lt;br /&gt;
| Precious One ||  || STM_SMG2_EV_EPILOGUE_01 ||  || SMG2_ev_epilogue01_strm&lt;br /&gt;
|-&lt;br /&gt;
| E3 2006 Bubble || BGM_IN_BUBBLE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_KOOPA_JR_APPEAR ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_PINCH_02 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Jingles&lt;br /&gt;
|-&lt;br /&gt;
| Death || BGM_MISS ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Game Over || BGM_GAMEOVER ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Countdown || BGM_MINIGAME_START ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Won Race || BGM_RACE_WIN ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Lost Race || BGM_RACE_LOSE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| New Galaxy || BGM_JG_NEW_GALAXY ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Planet Appeared || BGM_JG_APPEAR_PLANET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Got Grand Star || BGM_JG_GRAND_STAR_GET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| New High Score || BGM_JG_HIGH_SCORE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Galaxy Completed || BGM_JG_GALAXY_COMPLETE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_JG_RETURN_HOME ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_JG_START_CAMERA_DEMO ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  || STM_SMG2_JG_COMETSE ||  || SMG2_jg_cometse_strm&lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_COMET ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_DECIDE ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_GREENSTAR1 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_GSTAR1 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_GSTAR2 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_M_PLANET01 ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_MEETCHIKO ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_MEETYOSHI ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_PAMATA ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  || BGM_SMG2_JG_TIME ||  ||  || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
	<entry>
		<id>https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=454</id>
		<title>Cutscenes</title>
		<link rel="alternate" type="text/html" href="https://www.lumasworkshop.com/w/index.php?title=Cutscenes&amp;diff=454"/>
		<updated>2024-04-27T12:21:23Z</updated>

		<summary type="html">&lt;p&gt;Louis Miles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Files]]&lt;br /&gt;
[[Category:Lists]]&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039;&lt;br /&gt;
*Finish the hardcoded cutscene names.&lt;br /&gt;
*More info and research on the use of canm and supported objects.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cutscenes are flexible, complex scenes, which can execute more freedom in contrast to the SimpleDemoExecutor.&lt;br /&gt;
These scenes consist of individual sequences that are played in order. In each sequence, several actions can be executed from certain frames, such as changing the player&#039;s position, camera movements, sound effects, and more. To each sequence (and subsequence) different actions are linked, which are then executed at the time of this sequence.&lt;br /&gt;
&lt;br /&gt;
You can best visualize this in a kind of timeline. The timeline consists of the individual sequences, which consist of several actions. At the same time single subscequences can be executed together with the actual sequences.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
[[File:Cutscene_Visual-Representation.png|thumb|A visual representation of the first Yoshi Meets cutscene.]]&lt;br /&gt;
A cutscene is activated by a demo object via SW_APPEAR within the map and loads several sheet BCSV files located in the demo.arc archive of the respective galaxy/zone. The demo object loads the bcsv files using its defined sheet name and additional &amp;quot;Demo&amp;quot; in front of the file name of the BSCV attached and a respective sheet type at the end of the file name (e.g. &#039;&#039;&#039;Demo&#039;&#039;&#039;AfterGameOver&#039;&#039;&#039;Time&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In addition, the demo object has its own cutscene name, which is only used in certain cases (e.g. to load certain sequences for [[Starship Mario]]) and also for camera codes. Certain names can be recognized by the game and then loads additional hardcoded settings such as behavior after scene completion. A list of these names [[Cutscenes#Hardcoded_Cutscene_Names|can be found below]].&lt;br /&gt;
&lt;br /&gt;
Objects other than the player object itself can be linked to the cutscene. These then use a cutscene group ID, which on the one hand must match the demo object ID and on the other hand must be entered in the action sheet together with the object&#039;s name. If the object is entered in the [[ObjNameTable]], the name from the Japanese column must be entered instead.&lt;br /&gt;
&lt;br /&gt;
If there are several identical objects that are part of a cutscene, you can also define a cast group id for one specific object to distinguish it from the other identical objects for the scene.&lt;br /&gt;
&lt;br /&gt;
===Time===&lt;br /&gt;
Defines the individual sequences with their names and length. They are played in the order they are in the list.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| TotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration of the sequence in frames&lt;br /&gt;
|-&lt;br /&gt;
| SuspendFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| If set to 1, pauses the cutscene and resumes gameplay. The cutscene will continue from here next time it is activated.&lt;br /&gt;
|-&lt;br /&gt;
| WaitUserInputFlag&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SubPart===&lt;br /&gt;
Runs additional subsequences in parallel during a sequence.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| SubPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| SubPartTotalStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The length of the sub sequence&lt;br /&gt;
|-&lt;br /&gt;
| MainPartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the main sequence this sub sequence belongs to&lt;br /&gt;
|-&lt;br /&gt;
| MainPartStep&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The frame of the main sequence this sub sequence starts at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Action===&lt;br /&gt;
Picks up objects and can position them to a given GeneralPos and play an animation.&lt;br /&gt;
&lt;br /&gt;
All animation types are supported. For more control you can use [[ActorInfo#ActorInfo|ActorAnimCtrl.bcsv]] for your objects to define multiple animation names of different animation types to the animation name defined in the cutscene. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Sequence Name&lt;br /&gt;
|-&lt;br /&gt;
| CastName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Japanese Name of the object (defined in [[ObjNameTable]])&lt;br /&gt;
|-&lt;br /&gt;
| CastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Cast ID of the object&lt;br /&gt;
|-&lt;br /&gt;
| ActionType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Pick an Action Type from the table below.&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos object for destination location&lt;br /&gt;
|-&lt;br /&gt;
| AnimName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation, which can be loaded either from the ARC archive object or from a separate ARC archive with the additional name &amp;quot;Anim&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
====Action Types====&lt;br /&gt;
Note that these action types are not available for any object that registers as a &amp;quot;Simple Demo Cast&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== SMG1 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Duplicate of 9 || Duplicate of 9.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|}&lt;br /&gt;
===== SMG2 =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! ID !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Play Animation || Plays the animation that &amp;quot;AnimName&amp;quot; is set to. This happens for all Action Types.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Apppear || Makes the object Appear.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Kill || Makes the object Disappear (using it&#039;s Kill function).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Special Function || Executes a function that the object specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Special Nerve || Sets the objects Nerve to a nerve specifically registered to the cutscene. This is object specific, and not every object has one.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || On SW_A || The SW_A of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || On SW_B || The SW_B of this object will be activated.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Show Model || The model of the object will be unhidden.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Hide Model || The model of the object will be hidden.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Start NPC Message || Start a conversation with an NPC. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Start NPC Message (Alt) || Start a conversation with an NPC without stopping Mario&#039;s current animation. Effectively useless because NPC&#039;s do not register their text to cutscenes unless the cutscene has a specific name.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Duplicate of 10 || Duplicate of 10.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Off SW_A || The SW_A of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Off SW_B || The SW_B of this object will be deactivated.&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Request Movement Off || Tries to pause execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Request Movement On || Tries to resume execution of this object.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 1 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 17 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo. Uses 0 as arg.&lt;br /&gt;
|-&lt;br /&gt;
| 18 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || StoryBookWarpDemo || Unknown. Related to StoryBookWarpDemo.&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ? || Unknown. Used at the end of the cutscene where Mario meets Yoshi for the first time.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
Can position Mario/Luigi to a specific GeneralPos and play an animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| PosName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the GeneralPos to teleport the player to&lt;br /&gt;
|-&lt;br /&gt;
| BckName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the animation from MarioAnim.arc to play. (All other animationtypes than BCK are also supported)&lt;br /&gt;
|-&lt;br /&gt;
| Visible&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Camera===&lt;br /&gt;
Can play cameras, which can be played one after another. Can use either a camera code from the Map archive&#039;s [[Cameras|CameraParam.bcam]] file, or a key frame camera animation which are controlled via [[CANM]] files, which must be located in the object archive of the targeted object.&amp;lt;/br&amp;gt;&lt;br /&gt;
By default the camera is fixed on Mario/Luigi.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For BCAM usage, the Camera ID name to be used is composed of the &#039;&#039;PartName&#039;&#039; and the &#039;&#039;Cutscenename&#039;&#039; (not the sheet name): &#039;&#039;&#039;e:&amp;lt;small&amp;gt;Cutscenename&amp;lt;/small&amp;gt;[&amp;lt;small&amp;gt;PartName&amp;lt;/small&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For CANM usage, the name defined in &#039;&#039;AnimCameraName&#039;&#039; must match the CANM file&#039;s name and needs to be placed in the root of the targeted object&#039;s archive.&amp;lt;/br&amp;gt;&lt;br /&gt;
Seems to be supported only by certain objects. This has not yet been fully explored.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Japanese Name of the object the camera is focussed at.&lt;br /&gt;
|-&lt;br /&gt;
| CameraTargetCastID&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Cast ID of the object&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| CANM file name (with &amp;quot;.canm&amp;quot; extension) which must be placed in the root of the targeted object&#039;s archive.&lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraStartFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| AnimCameraEndFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| IsContinuous&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sound===&lt;br /&gt;
Can change music and play sound effects.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| Bgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Music|Name of the music]] to play.&lt;br /&gt;
|-&lt;br /&gt;
| SystemSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| [[List_of_Sounds_(SMG2)|Name of the soundeffect]] to play. &lt;br /&gt;
|-&lt;br /&gt;
| ActionSe&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ReturnBgm&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BgmWipeoutFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| Duration in frames for fading out the music. -1 = No fade-out&lt;br /&gt;
|-&lt;br /&gt;
| AllSoundStopFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Wipe===&lt;br /&gt;
Can perform a fade out animation.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Field Name&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| Name of the sequence&lt;br /&gt;
|-&lt;br /&gt;
| WipeName&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | STRING_OFFSET&lt;br /&gt;
| The wipe to use. See the [[#WipeName|WipeName]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeType&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The function for the Wipe to perform. See the [[#WipeType|WipeType]] table below.&lt;br /&gt;
|-&lt;br /&gt;
| WipeFrame&lt;br /&gt;
| style=&amp;quot;font-size:12px;&amp;quot; | LONG&lt;br /&gt;
| The amount of frames that the wipe will move for. Higher values = Slower movement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====WipeName====&lt;br /&gt;
Below is a list of available WipeName values:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 円ワイプ || Circle Wipe&lt;br /&gt;
|-&lt;br /&gt;
| フェードワイプ || Black Fade&lt;br /&gt;
|-&lt;br /&gt;
| 白フェードワイプ || White Fade&lt;br /&gt;
|-&lt;br /&gt;
| ゲームオーバー || Game Over&lt;br /&gt;
|-&lt;br /&gt;
| クッパ || Bowser Face (Death wipe)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: The Mario wipe is missing because the Mario wipe is a System Wipe and not a Scene Wipe. DemoWipes can only be Scene Wipes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====WipeType====&lt;br /&gt;
Below is the list of Wipe functions. The table below uses the Black Fade as an example.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Open Wipe (Fade to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Close Wipe (Fade to Black)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Force Open Wipe (Cut to Gameplay)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Force Close Wipe (Cut to Black)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tip: If you need to change wipes while the wipe is closed, use Force Close before using Open for a smoother transition.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Hardcoded Cutscene Names===&lt;br /&gt;
&amp;lt;small&amp;gt;&#039;&#039;&#039;Todo:&#039;&#039;&#039; Finish this.&amp;lt;/small&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Cutscene Name&lt;br /&gt;
! Meaning&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ベビチコ出会い&lt;br /&gt;
| Master Luma Meeting&lt;br /&gt;
| -Uses hardcoded cameras&amp;lt;br /&amp;gt;-Activates spin after completion when the galaxy uses the StageType &amp;quot;Storybook&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Up to now, there are no tools that allow the cutscenes to be edited directly in a clear interface. Since the cutscenes sheet consists of [[BCSV]] files, they can be edited with any other BCSV editor, like Whitehole. They can also be converted to CSV files and vice versa with Pyjmap.&lt;br /&gt;
&lt;br /&gt;
The tools can be found on the [[Tools_and_Resources|tools and ressources page]].&lt;/div&gt;</summary>
		<author><name>Louis Miles</name></author>
	</entry>
</feed>