<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://alttp.run/hacking/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jkazos</id>
		<title>TLoZ: ALTTP Hacking Resources - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://alttp.run/hacking/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jkazos"/>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Special:Contributions/Jkazos"/>
		<updated>2026-04-16T01:12:37Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=431</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=431"/>
				<updated>2016-11-19T14:42:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;br /&gt;
&lt;br /&gt;
[[Player Position]]&lt;br /&gt;
&lt;br /&gt;
[[Overworld Areas]]&lt;br /&gt;
&lt;br /&gt;
[[Graphics Palettes]]&lt;br /&gt;
&lt;br /&gt;
[[Graphics Formats]]&lt;br /&gt;
&lt;br /&gt;
[[Data Compression]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Data_Compression&amp;diff=430</id>
		<title>Data Compression</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Data_Compression&amp;diff=430"/>
				<updated>2016-11-19T14:41:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  ALTTP (and some other SNES games) use a simple form of run-length compression to reduce the ROM consumption of data that often have repeat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
ALTTP (and some other SNES games) use a simple form of run-length compression to reduce the ROM consumption of data that often have repeated sequences within them (such as a row of pixels all the same color, or a row of tiles all the same type). Decompressing data that are compressed in this way takes more time than simply copying them from ROM bytewise, so compression should be used only when necessary.&lt;br /&gt;
&lt;br /&gt;
== Compressed Format ==&lt;br /&gt;
&lt;br /&gt;
A compressed datum is a sequence of single-byte command headers with optional arguments. The compressed sequence is terminated by the $FF header with no arguments.&lt;br /&gt;
&lt;br /&gt;
;Header byte -- bits 7..5&lt;br /&gt;
: command&lt;br /&gt;
&lt;br /&gt;
;Header byte -- bits 4..0&lt;br /&gt;
: length parameter&lt;br /&gt;
&lt;br /&gt;
If the command within the header byte is %111, then the byte after the header byte is a header extension byte and the extended header is as follows.&lt;br /&gt;
&lt;br /&gt;
;Header byte -- bits 4..2&lt;br /&gt;
: command&lt;br /&gt;
&lt;br /&gt;
;Header byte -- bits 1..0&lt;br /&gt;
: bits 9..8 of length parameter&lt;br /&gt;
&lt;br /&gt;
;Header extension byte&lt;br /&gt;
: bits 7..0 of length parameter&lt;br /&gt;
&lt;br /&gt;
NOTE: The length parameter is implied to be one more than actually stored in the header, because you would never want a command to generate 0 bytes, so once the length has been calculated, increment it by 1.&lt;br /&gt;
&lt;br /&gt;
Commands 0-4 are valid. Commands 5-7 are unused and invalid.&lt;br /&gt;
&lt;br /&gt;
;Command 0&lt;br /&gt;
: the next (length parameter + 1) bytes of the input are copied to the output bytewise&lt;br /&gt;
&lt;br /&gt;
;Command 1&lt;br /&gt;
: the next byte of the input is copied to the output (length parameter + 1) times&lt;br /&gt;
&lt;br /&gt;
;Command 2&lt;br /&gt;
: let the next byte of the input be A&lt;br /&gt;
: let the byte of the input after A be B&lt;br /&gt;
: A and B are copied (alternating, as in ABABABAB...) to the output until (length parameter + 1) bytes have been copied to the output&lt;br /&gt;
&lt;br /&gt;
;Command 3&lt;br /&gt;
: let the next byte of the input be A&lt;br /&gt;
: A is copied and incremented (as in A,A+1,A+2,A+3...) to the output until (length parameter + 1) bytes have been copied to the output&lt;br /&gt;
&lt;br /&gt;
;Command 4&lt;br /&gt;
: let the next byte of the input be A&lt;br /&gt;
: let the byte of the input after A be B&lt;br /&gt;
: A and B form an offset into the current output buffer (the bytes that have already been decompressed and copied to the output)&lt;br /&gt;
: let this offset be X&lt;br /&gt;
: &amp;lt;tt&amp;gt;X = A | ( B &amp;lt;&amp;lt; 8 )&amp;lt;/tt&amp;gt;&lt;br /&gt;
: (length parameter + 1) bytes are copied from within the current output buffer and appended to the end of the current output buffer&lt;br /&gt;
&lt;br /&gt;
== Sample C# Code ==&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' This code assumes the compressed input is well-formed. If the input is garbage, corrupted, or the wrong format, the code may hang, raise an exception, or generate garbage output.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static class AlttpDataCompression&lt;br /&gt;
{&lt;br /&gt;
	static System . Collections . Generic . List &amp;lt; byte &amp;gt; Output = new System . Collections . Generic . List &amp;lt; byte &amp;gt; ( ) ;&lt;br /&gt;
&lt;br /&gt;
	public static byte [ ] Decompress ( byte [ ] Input , int InputOffset )&lt;br /&gt;
	{&lt;br /&gt;
		Output . Clear ( ) ;&lt;br /&gt;
&lt;br /&gt;
		while ( true )&lt;br /&gt;
		{&lt;br /&gt;
			int Header = Input [ InputOffset ] ;&lt;br /&gt;
&lt;br /&gt;
			InputOffset ++ ;&lt;br /&gt;
&lt;br /&gt;
			if ( Header == 0xFF )&lt;br /&gt;
			{&lt;br /&gt;
				return ( Output . ToArray ( ) ) ;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			int Command = Header &amp;gt;&amp;gt; 5 ;&lt;br /&gt;
&lt;br /&gt;
			int Length = Header &amp;amp; 0x1F ;&lt;br /&gt;
&lt;br /&gt;
			if ( Command == 0x7 )&lt;br /&gt;
			{&lt;br /&gt;
				Command = ( Header &amp;gt;&amp;gt; 2 ) &amp;amp; 0x7 ;&lt;br /&gt;
&lt;br /&gt;
				Length = ( Header &amp;amp; 0x3 ) &amp;lt;&amp;lt; 8 ;&lt;br /&gt;
&lt;br /&gt;
				Length |= Input [ InputOffset ] ;&lt;br /&gt;
&lt;br /&gt;
				InputOffset ++ ;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			Length ++ ;&lt;br /&gt;
&lt;br /&gt;
			if ( Command == 0 )&lt;br /&gt;
			{&lt;br /&gt;
				for ( int Index = 0 ; Index &amp;lt; Length ; Index ++ )&lt;br /&gt;
				{&lt;br /&gt;
					Output . Add ( Input [ InputOffset + Index ] ) ;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				InputOffset += Length ;&lt;br /&gt;
			}&lt;br /&gt;
			else if ( Command == 1 )&lt;br /&gt;
			{&lt;br /&gt;
				for ( int Index = 0 ; Index &amp;lt; Length ; Index ++ )&lt;br /&gt;
				{&lt;br /&gt;
					Output . Add ( Input [ InputOffset ] ) ;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				InputOffset ++ ;&lt;br /&gt;
			}&lt;br /&gt;
			else if ( Command == 2 )&lt;br /&gt;
			{&lt;br /&gt;
				int AlternatingOffset = 0 ;&lt;br /&gt;
&lt;br /&gt;
				for ( int Index = 0 ; Index &amp;lt; Length ; Index ++ )&lt;br /&gt;
				{&lt;br /&gt;
					Output . Add ( Input [ InputOffset + AlternatingOffset ] ) ;&lt;br /&gt;
&lt;br /&gt;
					AlternatingOffset = ( AlternatingOffset + 1 ) % 2 ;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				InputOffset += 2 ;&lt;br /&gt;
			}&lt;br /&gt;
			else if ( Command == 3 )&lt;br /&gt;
			{&lt;br /&gt;
				int IncrementingValue = Input [ InputOffset ] ;&lt;br /&gt;
&lt;br /&gt;
				InputOffset ++ ;&lt;br /&gt;
&lt;br /&gt;
				for ( int Index = 0 ; Index &amp;lt; Length ; Index ++ )&lt;br /&gt;
				{&lt;br /&gt;
					Output . Add ( ( byte ) ( IncrementingValue &amp;amp; 0xFF ) ) ;&lt;br /&gt;
&lt;br /&gt;
					IncrementingValue ++ ;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if ( Command == 4 )&lt;br /&gt;
			{&lt;br /&gt;
				int CopyOffset = Input [ InputOffset ] | ( Input [ InputOffset + 1 ] &amp;lt;&amp;lt; 8 ) ;&lt;br /&gt;
&lt;br /&gt;
				InputOffset += 2 ;&lt;br /&gt;
&lt;br /&gt;
				for ( int Index = 0 ; Index &amp;lt; Length ; Index ++ )&lt;br /&gt;
				{&lt;br /&gt;
					Output . Add ( Output [ CopyOffset + Index ] ) ;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=429</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=429"/>
				<updated>2016-11-19T12:05:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;br /&gt;
&lt;br /&gt;
[[Player Position]]&lt;br /&gt;
&lt;br /&gt;
[[Overworld Areas]]&lt;br /&gt;
&lt;br /&gt;
[[Graphics Palettes]]&lt;br /&gt;
&lt;br /&gt;
[[Graphics Formats]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Graphics_Formats&amp;diff=428</id>
		<title>Graphics Formats</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Graphics_Formats&amp;diff=428"/>
				<updated>2016-11-19T12:03:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  ''See also: Graphics Palettes''  The SNES display is 256 pixels wide and 224 pixels high with a color depth of 15 bits (32768 distinct...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Graphics Palettes]]''&lt;br /&gt;
&lt;br /&gt;
The SNES display is 256 pixels wide and 224 pixels high with a color depth of 15 bits (32768 distinct colors). While the fundamental unit of measurement for SNES graphics is still pixels (with the (0,0) origin at the top-left corner), the fundamental unit of SNES graphical display is the 8x8 pixel tile. Larger objects are composed of multiple 8x8 tiles, and smaller objects are still 8x8 tiles but with most pixels transparent.&lt;br /&gt;
&lt;br /&gt;
ALTTP graphics are stored in the ROM as 2bpp/3bpp/4bpp bitplane-and-row-interleaved 8x8-pixel tiles, each tile following the other in sequence. These formats are converted at load time to the appropriate SNES display format.&lt;br /&gt;
&lt;br /&gt;
== Row, Column, and Pixel Indices ==&lt;br /&gt;
&lt;br /&gt;
For ease of reference, the following method is used to index an 8x8 tile.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|'''Column 0'''&lt;br /&gt;
|'''Column 1'''&lt;br /&gt;
|'''Column 2'''&lt;br /&gt;
|'''Column 3'''&lt;br /&gt;
|'''Column 4'''&lt;br /&gt;
|'''Column 5'''&lt;br /&gt;
|'''Column 6'''&lt;br /&gt;
|'''Column 7'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 0'''&lt;br /&gt;
|Pixel 0&lt;br /&gt;
|Pixel 1&lt;br /&gt;
|Pixel 2&lt;br /&gt;
|Pixel 3&lt;br /&gt;
|Pixel 4&lt;br /&gt;
|Pixel 5&lt;br /&gt;
|Pixel 6&lt;br /&gt;
|Pixel 7&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 1'''&lt;br /&gt;
|Pixel 8&lt;br /&gt;
|Pixel 9&lt;br /&gt;
|Pixel 10&lt;br /&gt;
|Pixel 11&lt;br /&gt;
|Pixel 12&lt;br /&gt;
|Pixel 13&lt;br /&gt;
|Pixel 14&lt;br /&gt;
|Pixel 15&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 2'''&lt;br /&gt;
|Pixel 16&lt;br /&gt;
|Pixel 17&lt;br /&gt;
|Pixel 18&lt;br /&gt;
|Pixel 19&lt;br /&gt;
|Pixel 20&lt;br /&gt;
|Pixel 21&lt;br /&gt;
|Pixel 22&lt;br /&gt;
|Pixel 23&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 3'''&lt;br /&gt;
|Pixel 24&lt;br /&gt;
|Pixel 25&lt;br /&gt;
|Pixel 26&lt;br /&gt;
|Pixel 27&lt;br /&gt;
|Pixel 28&lt;br /&gt;
|Pixel 29&lt;br /&gt;
|Pixel 30&lt;br /&gt;
|Pixel 31&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 4'''&lt;br /&gt;
|Pixel 32&lt;br /&gt;
|Pixel 33&lt;br /&gt;
|Pixel 34&lt;br /&gt;
|Pixel 35&lt;br /&gt;
|Pixel 36&lt;br /&gt;
|Pixel 37&lt;br /&gt;
|Pixel 38&lt;br /&gt;
|Pixel 39&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 5'''&lt;br /&gt;
|Pixel 40&lt;br /&gt;
|Pixel 41&lt;br /&gt;
|Pixel 42&lt;br /&gt;
|Pixel 43&lt;br /&gt;
|Pixel 44&lt;br /&gt;
|Pixel 45&lt;br /&gt;
|Pixel 46&lt;br /&gt;
|Pixel 47&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 6'''&lt;br /&gt;
|Pixel 48&lt;br /&gt;
|Pixel 49&lt;br /&gt;
|Pixel 50&lt;br /&gt;
|Pixel 51&lt;br /&gt;
|Pixel 52&lt;br /&gt;
|Pixel 53&lt;br /&gt;
|Pixel 54&lt;br /&gt;
|Pixel 55&lt;br /&gt;
|-&lt;br /&gt;
|'''Row 7'''&lt;br /&gt;
|Pixel 56&lt;br /&gt;
|Pixel 57&lt;br /&gt;
|Pixel 58&lt;br /&gt;
|Pixel 59&lt;br /&gt;
|Pixel 60&lt;br /&gt;
|Pixel 61&lt;br /&gt;
|Pixel 62&lt;br /&gt;
|Pixel 63&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitplanes ==&lt;br /&gt;
&lt;br /&gt;
Just as a value is composed of a certain number of bits, an array of values is composed of a certain number of bitplanes. Consider the following 3bpp palette and sprite.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%000&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%011&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%100&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%110&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%111&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%011&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%011&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%100&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%110&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%110&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%100&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%000&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%111&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%111&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%000&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%000&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%111&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%111&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%000&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%100&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%110&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%110&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%100&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%011&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%101&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%010&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%011&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All of the bit index 2 values become bitplane 2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All of the bit index 1 values become bitplane 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All of the bit index 0 values become bitplane 0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFFF;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #DDFFDD;&amp;quot;|%0&lt;br /&gt;
|style=&amp;quot;background-color: #DDDDFF;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|style=&amp;quot;background-color: #FFDDDD;&amp;quot;|%1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Essentially, the 3bpp image is split into multiple 1bpp images: One for each bit. The bitplanes are indexed by row/column/pixel in the same way as the integrated tile itself.&lt;br /&gt;
&lt;br /&gt;
== Bitplane Interlacing ==&lt;br /&gt;
&lt;br /&gt;
Tiles are always 8x8 pixels in size, and 8 happens to be the number of bits in a byte. One row of one bitplane of a tile (or, another way to look at it, one bitplane of one row of a tile) is stored in each byte. These bytes are interlaced as follows.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!SNES Format Byte Index&lt;br /&gt;
!2bpp&lt;br /&gt;
!3bpp&lt;br /&gt;
!4bpp&lt;br /&gt;
|-&lt;br /&gt;
|Byte $00&lt;br /&gt;
|Row 0 of Bitplane 0&lt;br /&gt;
|Row 0 of Bitplane 0&lt;br /&gt;
|Row 0 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $01&lt;br /&gt;
|Row 0 of Bitplane 1&lt;br /&gt;
|Row 0 of Bitplane 1&lt;br /&gt;
|Row 0 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $02&lt;br /&gt;
|Row 1 of Bitplane 0&lt;br /&gt;
|Row 1 of Bitplane 0&lt;br /&gt;
|Row 1 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $03&lt;br /&gt;
|Row 1 of Bitplane 1&lt;br /&gt;
|Row 1 of Bitplane 1&lt;br /&gt;
|Row 1 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $04&lt;br /&gt;
|Row 2 of Bitplane 0&lt;br /&gt;
|Row 2 of Bitplane 0&lt;br /&gt;
|Row 2 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $05&lt;br /&gt;
|Row 2 of Bitplane 1&lt;br /&gt;
|Row 2 of Bitplane 1&lt;br /&gt;
|Row 2 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $06&lt;br /&gt;
|Row 3 of Bitplane 0&lt;br /&gt;
|Row 3 of Bitplane 0&lt;br /&gt;
|Row 3 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $07&lt;br /&gt;
|Row 3 of Bitplane 1&lt;br /&gt;
|Row 3 of Bitplane 1&lt;br /&gt;
|Row 3 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $08&lt;br /&gt;
|Row 4 of Bitplane 0&lt;br /&gt;
|Row 4 of Bitplane 0&lt;br /&gt;
|Row 4 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $09&lt;br /&gt;
|Row 4 of Bitplane 1&lt;br /&gt;
|Row 4 of Bitplane 1&lt;br /&gt;
|Row 4 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0A&lt;br /&gt;
|Row 5 of Bitplane 0&lt;br /&gt;
|Row 5 of Bitplane 0&lt;br /&gt;
|Row 5 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0B&lt;br /&gt;
|Row 5 of Bitplane 1&lt;br /&gt;
|Row 5 of Bitplane 1&lt;br /&gt;
|Row 5 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0C&lt;br /&gt;
|Row 6 of Bitplane 0&lt;br /&gt;
|Row 6 of Bitplane 0&lt;br /&gt;
|Row 6 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0D&lt;br /&gt;
|Row 6 of Bitplane 1&lt;br /&gt;
|Row 6 of Bitplane 1&lt;br /&gt;
|Row 6 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0E&lt;br /&gt;
|Row 7 of Bitplane 0&lt;br /&gt;
|Row 7 of Bitplane 0&lt;br /&gt;
|Row 7 of Bitplane 0&lt;br /&gt;
|-&lt;br /&gt;
|Byte $0F&lt;br /&gt;
|Row 7 of Bitplane 1&lt;br /&gt;
|Row 7 of Bitplane 1&lt;br /&gt;
|Row 7 of Bitplane 1&lt;br /&gt;
|-&lt;br /&gt;
|Byte $10&lt;br /&gt;
|&lt;br /&gt;
|Row 0 of Bitplane 2&lt;br /&gt;
|Row 0 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $11&lt;br /&gt;
|&lt;br /&gt;
|Row 1 of Bitplane 2&lt;br /&gt;
|Row 0 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $12&lt;br /&gt;
|&lt;br /&gt;
|Row 2 of Bitplane 2&lt;br /&gt;
|Row 1 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $13&lt;br /&gt;
|&lt;br /&gt;
|Row 3 of Bitplane 2&lt;br /&gt;
|Row 1 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $14&lt;br /&gt;
|&lt;br /&gt;
|Row 4 of Bitplane 2&lt;br /&gt;
|Row 2 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $15&lt;br /&gt;
|&lt;br /&gt;
|Row 5 of Bitplane 2&lt;br /&gt;
|Row 2 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $16&lt;br /&gt;
|&lt;br /&gt;
|Row 6 of Bitplane 2&lt;br /&gt;
|Row 3 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $17&lt;br /&gt;
|&lt;br /&gt;
|Row 7 of Bitplane 2&lt;br /&gt;
|Row 3 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $18&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 4 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $19&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 4 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1A&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 5 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1B&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 5 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 6 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1D&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 6 of Bitplane 3&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1E&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 7 of Bitplane 2&lt;br /&gt;
|-&lt;br /&gt;
|Byte $1F&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Row 7 of Bitplane 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample C# Code ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static class SnesGraphicsFormat&lt;br /&gt;
{&lt;br /&gt;
	public static void UnpackRowOfBitplaneOfTile ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int BitplaneIndex )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int PixelIndex = 0 ; PixelIndex &amp;lt; 8 ; PixelIndex ++ )&lt;br /&gt;
		{&lt;br /&gt;
			int BitIndex = 7 - PixelIndex ;&lt;br /&gt;
&lt;br /&gt;
			int Bit = ( Input [ InputOffset ] &amp;gt;&amp;gt; BitIndex ) &amp;amp; 1 ;&lt;br /&gt;
&lt;br /&gt;
			Output [ OutputOffset + PixelIndex ] |= ( byte ) ( Bit &amp;lt;&amp;lt; BitplaneIndex ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void PackRowOfBitplaneOfTile ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int BitplaneIndex )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int PixelIndex = 0 ; PixelIndex &amp;lt; 8 ; PixelIndex ++ )&lt;br /&gt;
		{&lt;br /&gt;
			int BitIndex = 7 - PixelIndex ;&lt;br /&gt;
&lt;br /&gt;
			int Bit = ( Input [ InputOffset + PixelIndex ] &amp;gt;&amp;gt; BitplaneIndex ) &amp;amp; 1 ;&lt;br /&gt;
&lt;br /&gt;
			Output [ OutputOffset ] |= ( byte ) ( Bit &amp;lt;&amp;lt; BitIndex ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public const int BytesPerTileUnpacked = 64 ;&lt;br /&gt;
&lt;br /&gt;
	public const int BytesPerTile2bpp = 16 ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] RowIndices2bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] BitplaneIndices2bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	public const int BytesPerTile3bpp = 24 ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] RowIndices3bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 ,&lt;br /&gt;
		0 , 1 , 2 , 3 , 4 , 5 , 6 , 7&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] BitplaneIndices3bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 ,&lt;br /&gt;
		2 , 2 , 2 , 2 , 2 , 2 , 2 , 2&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	public const int BytesPerTile4bpp = 32 ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] RowIndices4bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 ,&lt;br /&gt;
		0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	static int [ ] BitplaneIndices4bpp = new int [ ]&lt;br /&gt;
	{&lt;br /&gt;
		0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 ,&lt;br /&gt;
		2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3&lt;br /&gt;
	} ;&lt;br /&gt;
&lt;br /&gt;
	public static void UnpackTile ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int [ ] RowIndices , int [ ] BitplaneIndices )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int Index = 0 ; Index &amp;lt; RowIndices . Length ; Index ++ )&lt;br /&gt;
		{&lt;br /&gt;
			UnpackRowOfBitplaneOfTile ( Input , InputOffset + Index , Output , OutputOffset + RowIndices [ Index ] * 8 , BitplaneIndices [ Index ] ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void PackTile ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int [ ] RowIndices , int [ ] BitplaneIndices )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int Index = 0 ; Index &amp;lt; RowIndices . Length ; Index ++ )&lt;br /&gt;
		{&lt;br /&gt;
			PackRowOfBitplaneOfTile ( Input , InputOffset + RowIndices [ Index ] * 8 , Output , OutputOffset + Index , BitplaneIndices [ Index ] ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void UnpackTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount , int BytesPerTile , int [ ] RowIndices , int [ ] BitplaneIndices )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int Index = 0 ; Index &amp;lt; TileCount ; Index ++ )&lt;br /&gt;
		{&lt;br /&gt;
			UnpackTile ( Input , InputOffset + BytesPerTile * Index , Output , OutputOffset + BytesPerTileUnpacked * Index , RowIndices , BitplaneIndices ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void PackTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount , int BytesPerTile , int [ ] RowIndices , int [ ] BitplaneIndices )&lt;br /&gt;
	{&lt;br /&gt;
		for ( int Index = 0 ; Index &amp;lt; TileCount ; Index ++ )&lt;br /&gt;
		{&lt;br /&gt;
			PackTile ( Input , InputOffset + BytesPerTileUnpacked * Index , Output , OutputOffset + BytesPerTile * Index , RowIndices , BitplaneIndices ) ;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Unpack2bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		UnpackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile2bpp , RowIndices2bpp , BitplaneIndices2bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Unpack3bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		UnpackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile3bpp , RowIndices3bpp , BitplaneIndices3bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Unpack4bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		UnpackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile4bpp , RowIndices4bpp , BitplaneIndices4bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Pack2bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		PackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile2bpp , RowIndices2bpp , BitplaneIndices2bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Pack3bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		PackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile3bpp , RowIndices3bpp , BitplaneIndices3bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void Pack4bppTiles ( byte [ ] Input , int InputOffset , byte [ ] Output , int OutputOffset , int TileCount )&lt;br /&gt;
	{&lt;br /&gt;
		PackTiles ( Input , InputOffset , Output , OutputOffset , TileCount , BytesPerTile4bpp , RowIndices4bpp , BitplaneIndices4bpp ) ;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=427</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=427"/>
				<updated>2016-11-19T01:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;br /&gt;
&lt;br /&gt;
[[Player Position]]&lt;br /&gt;
&lt;br /&gt;
[[Overworld Areas]]&lt;br /&gt;
&lt;br /&gt;
[[Graphics Palettes]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Graphics_Palettes&amp;diff=426</id>
		<title>Graphics Palettes</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Graphics_Palettes&amp;diff=426"/>
				<updated>2016-11-19T01:37:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  Outside of Mode 7, the SNES uses indexed graphics: Instead of storing the RGB color value individually for each pixel as modern computers...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
Outside of Mode 7, the SNES uses indexed graphics: Instead of storing the RGB color value individually for each pixel as modern computers do, each pixel's value is an index into an array of colors called a palette. (Color index 0 is always transparent, no matter which palette is in use.) This allows easy swapping of colors without having to change the underlying graphics (allowing sprite/object reuse), but also makes it possible to use the full range of the SNES's 15-bit color display without requiring two full bytes for every single pixel, which would quickly overwhelm the system's available working memory and would at least double the amount of time spent transferring bytes between the software and hardware.&lt;br /&gt;
&lt;br /&gt;
The SNES supports different palette sizes depending on the graphics mode, such as one 256-color palette or 16 16-color palettes (8 for sprites and 8 for backgrounds). The color index 0 in each palette is always transparent, no matter how many or few palettes are in use. Most things in ALTTP are designed with 4-, 8-, or 16-color palettes which are adjusted at load time to use actual SNES palettes.&lt;br /&gt;
&lt;br /&gt;
== Bits Per Pixel ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Bits per pixel&amp;quot; refers to how many bits are used to hold the color index in each pixel of an image, which reflects the size of its palette.&lt;br /&gt;
&lt;br /&gt;
;2bpp&lt;br /&gt;
: 4-color palette (color indices $0..$3)&lt;br /&gt;
: Often used for simple graphics like the HUD.&lt;br /&gt;
&lt;br /&gt;
;3bpp&lt;br /&gt;
: 8-color palette (color indices $0..$7)&lt;br /&gt;
: Used for the vast majority of graphics in the game.&lt;br /&gt;
: Note that this is a &amp;quot;fake&amp;quot; format used for compression by ALTTP, not supported by the SNES natively, and it is expanded to 4bpp at load time.&lt;br /&gt;
&lt;br /&gt;
;4bpp&lt;br /&gt;
: 16-color palette (color indices $0-$F)&lt;br /&gt;
: Used for more intricate sprites like the player himself.&lt;br /&gt;
&lt;br /&gt;
Other indexed formats are supported by the SNES, but are not used by ALTTP.&lt;br /&gt;
&lt;br /&gt;
== SNES and Modern Color Representation ==&lt;br /&gt;
&lt;br /&gt;
Most modern computing devices use 24-bit color: 8 bits for red, 8 bits for green, and 8 bits for blue, for a total of 16777216 possible colors. The SNES uses 15-bit color: 5 bits for red, 5 bits for green, and 5 bits for blue, for a total of 32768 colors. Both of these representations encode the same thing with different resolution: 0%-100% of the red, green, and blue components of the color.&lt;br /&gt;
&lt;br /&gt;
There are two ways to convert between SNES and modern representation: Bitwise and ratiowise.&lt;br /&gt;
&lt;br /&gt;
== Bitwise Conversion ==&lt;br /&gt;
&lt;br /&gt;
This method requires no floating-point calculation. Since an 8-bit value can hold 256 different values and a 5-bit value can hold 32 different values, and since 256 / 32 == 8, the simplest possible way to convert from modern to SNES is to divide by 8 (or shift right by 3) and from SNES to modern is to multiply by 8 (or shift left by 3).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SNES_color_value = modern_color_value &amp;gt;&amp;gt; 3&lt;br /&gt;
modern_color_value = SNES_color_value &amp;lt;&amp;lt; 3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The obvious problem with this method is the loss of precision: A round-trip conversion from modern to SNES to modern cuts the color values to a maximum of 248 each, causing all colors to be dimmer and &amp;quot;pure white&amp;quot; to be a light grey. However, this does actually mimic real SNES hardware, in that real (original) SNES (and SFC) hardware is dim in this way. So, for the closest representation to the majority of real SNES hardware, this method should be used.&lt;br /&gt;
&lt;br /&gt;
== Ratiowise Conversion ==&lt;br /&gt;
&lt;br /&gt;
This method is more intuitive and more proper mathematically, more closely matches the color levels produced by the Super Famicom Jr., and can be done with both integer and floating-point computation. Put simply, you divide the color value by its current maximum value (255 for modern and 31 for SNES) to convert it to a number from 0 to 1 (as in 0% to 100%), then multiply by its new maximum value (again 255 for modern and 31 for SNES).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SNES_color_value = ( modern_color_value * 31 ) / 255&lt;br /&gt;
modern_color_value = ( SNES_color_value * 255 ) / 31&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason the multiplication is done before the division is that integer division discards the remainder, so doing the multiplication first results in the least loss of precision. A better way to do things is to use floating-point computation.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SNES_color_value = round_to_nearest_integer ( modern_color_value / 255.0 * 31.0 )&lt;br /&gt;
modern_color_value = round_to_nearest_integer ( SNES_color_value / 31.0 * 255.0 )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method produces the least possible loss of precision, meaning the most accurate possible round-trip conversion when working with SNES graphics in modern graphics programs. Converting SNES to modern color values in this way is less accurate to the original SNES/SFC hardware, but the difference is minor and only some emulators display brightness levels matching original SNES/SFC hardware anyway, so this method is actually more accurate when targetting such emulators or the SFC Jr. hardware.&lt;br /&gt;
&lt;br /&gt;
== Palette Format ==&lt;br /&gt;
&lt;br /&gt;
Each 15-bit color in a palette is stored packed in two bytes. Let (R,G,B) be the three 5-bit components of the color value, and let (C) be the final packed color value as part of the palette.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;C = ( B &amp;lt;&amp;lt; 10 ) | ( G &amp;lt;&amp;lt; 5 ) | R&lt;br /&gt;
R = C &amp;amp; $1F&lt;br /&gt;
G = ( C &amp;gt;&amp;gt; 5 ) &amp;amp; $1F&lt;br /&gt;
B = C &amp;gt;&amp;gt; 10&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the highest bit (bit index 15) of the palette entry is not used, and should be set to 0.&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=424</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=424"/>
				<updated>2016-11-16T15:45:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;br /&gt;
&lt;br /&gt;
[[Player Position]]&lt;br /&gt;
&lt;br /&gt;
[[Overworld Areas]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Overworld_Areas&amp;diff=423</id>
		<title>Overworld Areas</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Overworld_Areas&amp;diff=423"/>
				<updated>2016-11-16T15:45:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  Outdoor areas (also known as the Overworld) come in two flavors: Normal and special. Normal outdoor areas (the Light world and the Dark wo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
Outdoor areas (also known as the Overworld) come in two flavors: Normal and special. Normal outdoor areas (the Light world and the Dark world) are mirrored 8x8 grids of 512x512-pixel cells for a total of 64 cells and a 4096x4096-pixel area in size. Normal outdoor grid cells can be quadruple in size (1024x1024 pixels), in which case their indices represent their top-left quadrants and the indices for the other three quadrants they occupy do not occur. Special outdoor areas (such as Zora's Domain) are separate individual mini-areas on their own.&lt;br /&gt;
&lt;br /&gt;
== Area Index ==&lt;br /&gt;
&lt;br /&gt;
In WRAM, there is a byte which indicates whether or not the player is currently in an indoor or outdoor area, and when the player is in an outdoor area, there is a word which contains the index of the outdoor area the player is currently in.&lt;br /&gt;
&lt;br /&gt;
;$7E001B[$1]&lt;br /&gt;
: 0 while player is outside&lt;br /&gt;
: 1 while player is inside&lt;br /&gt;
&lt;br /&gt;
;$7E008A[$2]&lt;br /&gt;
: the current area index while player is outside&lt;br /&gt;
: invalid while player is inside&lt;br /&gt;
&lt;br /&gt;
== Player Coordinates ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Player Position]]''&lt;br /&gt;
&lt;br /&gt;
Let A be the current area index, (Px,Py) be the current absolute player coordinates, and (Lx,Ly) be the local coordinates of the player within the current area.&lt;br /&gt;
&lt;br /&gt;
When the player is in the Light world (area index $00..$3F), the player's coordinates originate at the top-left corner of area $00, and the coordinates can be calculated as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Lx = Px - ( A % 8 ) * 512&lt;br /&gt;
Ly = Py - ( A / 8 ) * 512&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the player is in the Dark world (area index $40..$7F), the player's coordinates originate at the top-left corner of area $40, and the coordinates can be calculated as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Lx = Px - ( ( A - $40 ) % 8 ) * 512&lt;br /&gt;
Ly = Py - ( ( A - $40 ) / 8 ) * 512&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the player is in a special area (area index $80 and up), the player's coordinates originate at the top-left corner of the current special area. There are two special areas: $80 combines the Master Sword area and the area under the bridge east of the player's house, and $81 is Zora's Domain. Local coordinates within the Master Sword area and within Zora's Domain are equal to the absolute coordinates. The player is in the area under the bridge when their X coordinate is 256 or greater, and their local X coordinate is simply their absolute X coordinate minus 256.&lt;br /&gt;
&lt;br /&gt;
== The Light World and the Dark World ==&lt;br /&gt;
&lt;br /&gt;
The Light world and Dark world mirror each other: Any area index in the Light world refers to an area index in the Dark world of the same size and at the same location, except the Dark world index is increased by $40. The following table lists the areas of both worlds by their Light world name for simplicity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Index (Light World / Dark World)&lt;br /&gt;
!Size&lt;br /&gt;
!Description (for Light World)&lt;br /&gt;
|-&lt;br /&gt;
|$00 (0) / $40 (64)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Lost Woods&lt;br /&gt;
|-&lt;br /&gt;
|$02 (2) / $42 (66)&lt;br /&gt;
|512x512&lt;br /&gt;
|Lumberjacks&lt;br /&gt;
|-&lt;br /&gt;
|$03 (3) / $43 (67)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Western Death Mountain&lt;br /&gt;
|-&lt;br /&gt;
|$05 (5) / $45 (69)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Eastern Death Mountain&lt;br /&gt;
|-&lt;br /&gt;
|$07 (7) / $47 (71)&lt;br /&gt;
|512x512&lt;br /&gt;
|Turtle Rock&lt;br /&gt;
|-&lt;br /&gt;
|$0A (10) / $4A (74)&lt;br /&gt;
|512x512&lt;br /&gt;
|Entrance to Death Mountain&lt;br /&gt;
|-&lt;br /&gt;
|$0F (15) / $4F (79)&lt;br /&gt;
|512x512&lt;br /&gt;
|Entrance to Zora's Domain&lt;br /&gt;
|-&lt;br /&gt;
|$10 (16) / $50 (80)&lt;br /&gt;
|512x512&lt;br /&gt;
|Path Between Kakariko Village and Lost Woods&lt;br /&gt;
|-&lt;br /&gt;
|$11 (17) / $51 (81)&lt;br /&gt;
|512x512&lt;br /&gt;
|Kakariko Village Fortune Teller&lt;br /&gt;
|-&lt;br /&gt;
|$12 (18) / $52 (82)&lt;br /&gt;
|512x512&lt;br /&gt;
|Pond Between Kakariko Village Fortune Teller and Sanctuary&lt;br /&gt;
|-&lt;br /&gt;
|$13 (19) / $53 (83)&lt;br /&gt;
|512x512&lt;br /&gt;
|Sanctuary&lt;br /&gt;
|-&lt;br /&gt;
|$14 (20) / $54 (84)&lt;br /&gt;
|512x512&lt;br /&gt;
|Graveyard&lt;br /&gt;
|-&lt;br /&gt;
|$15 (21) / $55 (85)&lt;br /&gt;
|512x512&lt;br /&gt;
|River Between Graveyard and Witch's Hut&lt;br /&gt;
|-&lt;br /&gt;
|$16 (22) / $56 (86)&lt;br /&gt;
|512x512&lt;br /&gt;
|Witch's Hut&lt;br /&gt;
|-&lt;br /&gt;
|$17 (23) / $57 (87)&lt;br /&gt;
|512x512&lt;br /&gt;
|East of Witch's Hut&lt;br /&gt;
|-&lt;br /&gt;
|$18 (24) / $58 (88)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Kakariko Village&lt;br /&gt;
|-&lt;br /&gt;
|$1A (26) / $5A (90)&lt;br /&gt;
|512x512&lt;br /&gt;
|Forest Between Kakariko Village and Hyrule Castle&lt;br /&gt;
|-&lt;br /&gt;
|$1B (27) / $5B (91)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Hyrule Castle&lt;br /&gt;
|-&lt;br /&gt;
|$1D (29) / $5D (93)&lt;br /&gt;
|512x512&lt;br /&gt;
|Bridge Between Graveyard and Witch's Hut&lt;br /&gt;
|-&lt;br /&gt;
|$1E (30) / $5E (94)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Eastern Palace&lt;br /&gt;
|-&lt;br /&gt;
|$22 (34) / $62 (98)&lt;br /&gt;
|512x512&lt;br /&gt;
|Smithy&lt;br /&gt;
|-&lt;br /&gt;
|$25 (37) / $65 (101)&lt;br /&gt;
|512x512&lt;br /&gt;
|Path Between Hyrule Castle and Eastern Palace (top)&lt;br /&gt;
|-&lt;br /&gt;
|$28 (40) / $68 (104)&lt;br /&gt;
|512x512&lt;br /&gt;
|Kakariko Village Maze Race&lt;br /&gt;
|-&lt;br /&gt;
|$29 (41) / $69 (105)&lt;br /&gt;
|512x512&lt;br /&gt;
|Kakariko Village Library&lt;br /&gt;
|-&lt;br /&gt;
|$2A (42) / $6A (106)&lt;br /&gt;
|512x512&lt;br /&gt;
|Haunted Grove&lt;br /&gt;
|-&lt;br /&gt;
|$2B (43) / $6B (107)&lt;br /&gt;
|512x512&lt;br /&gt;
|Forest Between Haunted Grove and Link's House&lt;br /&gt;
|-&lt;br /&gt;
|$2C (44) / $6C (108)&lt;br /&gt;
|512x512&lt;br /&gt;
|Link's House&lt;br /&gt;
|-&lt;br /&gt;
|$2D (45) / $6D (109)&lt;br /&gt;
|512x512&lt;br /&gt;
|Path Between Hyrule Castle and Eastern Palace (bottom)&lt;br /&gt;
|-&lt;br /&gt;
|$2E (46) / $6E (110)&lt;br /&gt;
|512x512&lt;br /&gt;
|Caves South of Eastern Palace (left)&lt;br /&gt;
|-&lt;br /&gt;
|$2F (47) / $6F (111)&lt;br /&gt;
|512x512&lt;br /&gt;
|Caves South of Eastern Palace (right)&lt;br /&gt;
|-&lt;br /&gt;
|$30 (48) / $70 (112)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Desert of Mystery&lt;br /&gt;
|-&lt;br /&gt;
|$32 (50) / $72 (114)&lt;br /&gt;
|512x512&lt;br /&gt;
|South of Haunted Grove&lt;br /&gt;
|-&lt;br /&gt;
|$33 (51) / $73 (115)&lt;br /&gt;
|512x512&lt;br /&gt;
|Northwestern Great Swamp&lt;br /&gt;
|-&lt;br /&gt;
|$34 (52) / $74 (116)&lt;br /&gt;
|512x512&lt;br /&gt;
|Northeastern Great Swamp&lt;br /&gt;
|-&lt;br /&gt;
|$35 (53) / $75 (117)&lt;br /&gt;
|1024x1024&lt;br /&gt;
|Lake Hylia&lt;br /&gt;
|-&lt;br /&gt;
|$37 (55) / $77 (119)&lt;br /&gt;
|512x512&lt;br /&gt;
|Ice Cave&lt;br /&gt;
|-&lt;br /&gt;
|$3A (58) / $7A (122)&lt;br /&gt;
|512x512&lt;br /&gt;
|Path Between Desert of Mystery and Great Swamp&lt;br /&gt;
|-&lt;br /&gt;
|$3B (59) / $7B (123)&lt;br /&gt;
|512x512&lt;br /&gt;
|Southwestern Great Swamp&lt;br /&gt;
|-&lt;br /&gt;
|$3C (60) / $7C (124)&lt;br /&gt;
|512x512&lt;br /&gt;
|Southeastern Great Swamp&lt;br /&gt;
|-&lt;br /&gt;
|$3F (63) / $7F (127)&lt;br /&gt;
|512x512&lt;br /&gt;
|Path Between Lake Hylia and Ice Cave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Special Areas ==&lt;br /&gt;
&lt;br /&gt;
;$80 -- 512x512&lt;br /&gt;
: Master Sword area -- (0,0) to (255,511)&lt;br /&gt;
: Area under the bridge - (256,0) to (511,255)&lt;br /&gt;
&lt;br /&gt;
;$81 -- 512x512&lt;br /&gt;
: Zora's Domain&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=421</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=421"/>
				<updated>2016-11-14T11:56:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;br /&gt;
&lt;br /&gt;
[[Player Position]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Player_Position&amp;diff=420</id>
		<title>Player Position</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Player_Position&amp;diff=420"/>
				<updated>2016-11-14T11:55:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  ''See also: Coordinate Systems''  The game keeps track of the player's pixel position in WRAM as follows. (Note that this is the top-l...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Coordinate Systems]]''&lt;br /&gt;
&lt;br /&gt;
The game keeps track of the player's pixel position in WRAM as follows. (Note that this is the top-left corner of the 16x16 box representing the player's collision boundary: The actual sprite draws a few pixels above and to the left of the collision boundary so that it is his feet that appear in the right place.)&lt;br /&gt;
&lt;br /&gt;
;$7E0022[$2]&lt;br /&gt;
: X coordinate of the top-left of player's collision box&lt;br /&gt;
&lt;br /&gt;
;$7E0020[$2]&lt;br /&gt;
: Y coordinate of the top-left of player's collision box&lt;br /&gt;
&lt;br /&gt;
Note that these coordinates are relative to the player's current &amp;quot;dimension&amp;quot;: The light world, the dark world, the special overworld area (such as Zora's Domain), and the &amp;quot;underworld&amp;quot; (the combined block of all interior rooms) each have their own (0,0) origin for the player's pixel coordinates.&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Coordinate_Systems&amp;diff=419</id>
		<title>Coordinate Systems</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Coordinate_Systems&amp;diff=419"/>
				<updated>2016-11-14T11:54:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
Different parts of the game (both in ROM and in RAM) use different coordinate systems for different purposes when representing visual data, which makes producing and editing the game more difficult but saves either some computation time during actual gameplay or some space in the ROM.&lt;br /&gt;
&lt;br /&gt;
== Frame of Reference ==&lt;br /&gt;
&lt;br /&gt;
The SNES display is 256x224 pixels in size (256 wide and 224 high) and the game displays larger elements (such as a 256x256 pixel room) by scrolling.&lt;br /&gt;
&lt;br /&gt;
All coordinates use the top-left corner as their origin, meaning an X coordinate increases while going to the right across the screen and a Y coordinate increases while going down the screen. This applies to all objects: All rooms, areas, tiles, sprites, blocks, et cetera, all use their top-left corner as the coordinate origin (0,0) point.&lt;br /&gt;
&lt;br /&gt;
== Pixel Coordinates ==&lt;br /&gt;
&lt;br /&gt;
These are simply the direct pixel values where something is: How many pixels to the right from the leftmost pixel, and how many pixels down from the topmost pixel. Only sprites (such as the player and enemies, particle effects, and push-blocks actively being pushed) and screen scrolling use direct pixel coordinates.&lt;br /&gt;
&lt;br /&gt;
== Tile Coordinates ==&lt;br /&gt;
&lt;br /&gt;
The fundamental unit of SNES graphics is the 8x8 pixel tile; Larger units are created by combining multiple 8x8 tiles, and smaller units are created by 8x8 tiles with many transparent pixels. Tile coordinates are simply pixel coordinates divided by 8, either by straight integer division (ignoring the remainder) or shifting bitwise rightward by 3. If you multiply a tile coordinate by 8 (or shift bitwise leftward by 3), you get the pixel coordinate of its top-left corner.&lt;br /&gt;
&lt;br /&gt;
== Tilemap Coordinates ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metarooms]]''&lt;br /&gt;
&lt;br /&gt;
ALTTP in some places uses a special &amp;quot;baked&amp;quot; coordinate system that is a single value, sometimes referred to as the &amp;quot;VRAM address&amp;quot;. (Using the name &amp;quot;VRAM address&amp;quot; is not wrong in this case, but because actual addresses in SNES VRAM depend on multiple factors such as the current display mode, use of the name &amp;quot;VRAM address&amp;quot; is discouraged to avoid confusion.)&lt;br /&gt;
&lt;br /&gt;
Tilemap coordinates are used only for interiors, which are always 512x512 pixels in size, meaning the tilemap coordinates represent a range of tile coordinates from ($00,$00) to ($3F,$3F).&lt;br /&gt;
&lt;br /&gt;
== Conversion ==&lt;br /&gt;
&lt;br /&gt;
Let (Xp,Yp) be pixel coordinates, (Xt,Yt) be tile coordinates, and (TM) be tilemap coordinates.&lt;br /&gt;
&lt;br /&gt;
;Pixel Coordinates to Tile Coordinates&lt;br /&gt;
: &amp;lt;tt&amp;gt;Xt = Xp / 8&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;Yt = Yp / 8&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Tile Coordinates to Pixel Coordinates&lt;br /&gt;
: &amp;lt;tt&amp;gt;Xp = Xt * 8&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;Yp = Yt * 8&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Tile Coordinates to Tilemap Coordinates&lt;br /&gt;
: &amp;lt;tt&amp;gt;TM = ( Xt + Yt * $40 ) * 2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Tilemap Coordinates to Tile Coordinates&lt;br /&gt;
: &amp;lt;tt&amp;gt;Xt = ( TM / 2 ) % $40&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;Yt = ( TM / 2 ) / $40&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Coordinate Systems ==&lt;br /&gt;
&lt;br /&gt;
The game encodes coordinates in a few other ways throughout ROM and RAM (such as 16x16 tile coordinates), but one way or another they are simply tile coordinates with a little extra math applied for compression/decompression that will be noted where relevant.&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=418</id>
		<title>Metaroom Quadrants</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=418"/>
				<updated>2016-11-14T11:51:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metarooms]]''&lt;br /&gt;
&lt;br /&gt;
The game keeps track of which quadrants of which metarooms the player has visited, primarily for the purpose of illuminating visited rooms in dungeon maps. The game maintains several variables in memory pertaining to the current interior room, and uses these to update the working save file when the player enters and exits new interiors.&lt;br /&gt;
&lt;br /&gt;
;$7E00A6[$1]&lt;br /&gt;
: 0 if the room has normal width (half of a metaroom)&lt;br /&gt;
: 2 if the room is wide (the full width of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A7[$1]&lt;br /&gt;
: 0 if the room has normal height (half of a metaroom)&lt;br /&gt;
: 2 if the room is tall (the full height of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A9[$1]&lt;br /&gt;
: 0 if the player is in the left half of the metaroom&lt;br /&gt;
: 1 if the player is in the right half of the metaroom&lt;br /&gt;
&lt;br /&gt;
;$7E00AA[$1]&lt;br /&gt;
: 0 if the player is in the top half of the metaroom&lt;br /&gt;
: 2 if the player is in the bottom half of the metaroom&lt;br /&gt;
&lt;br /&gt;
Let us label these four values W , H , X , and Y. When updating the working save file, the game combines the four values into a single 4-bit value as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( H &amp;lt;&amp;lt; 2 ) | ( W &amp;lt;&amp;lt; 1 ) | Y | X&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, within this new value, bit 0 indicates whether the player is on the left or right half of the metaroom, bit 1 indicates whether the player is on the top or bottom half of the metaroom, bit 2 indicates whether or not the room is wide, and bit 3 indicates whether or not the room is tall.&lt;br /&gt;
&lt;br /&gt;
This value is then used as an index into a lookup table to retrieve a new 4-bit value which has bits set representing which quadrants of the metaroom have been visited by entering the room. The table's values are configured such that bit 0 indicates the bottom-right quadrant, bit 1 indicates the bottom-left quadrant, bit 2 indicates the top-right quadrant, and bit 3 indicates the top-left quadrant.&lt;br /&gt;
&lt;br /&gt;
== Non-Dungeon Rooms ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Player Position]]''&lt;br /&gt;
&lt;br /&gt;
Note: The values of X and Y do not always reflect the actual portion of the metaroom the player is on when inside non-dungeon rooms, such as houses in Kakariko Village, because the game does not provide maps for these interiors and so does not worry about tracking them accurately. The player's X and Y pixel coordinates can be used instead to identify the currently-occupied quadrant. Let (Xp,Yp) be the player's pixel coordinates, N be the current interior metaroom's index, and (Qx,Qy) be the quadrant coordinates with (0,0) being the top-left corner and (1,1) being the bottom-right corner.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Qx = ( Xp - ( N % 16 ) * 512 ) / 256&lt;br /&gt;
Qy = ( Yp - ( N / 16 ) * 512 ) / 256&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Table Values ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
!Value&lt;br /&gt;
|-&lt;br /&gt;
|$00&lt;br /&gt;
|$08&lt;br /&gt;
|-&lt;br /&gt;
|$01&lt;br /&gt;
|$04&lt;br /&gt;
|-&lt;br /&gt;
|$02&lt;br /&gt;
|$02&lt;br /&gt;
|-&lt;br /&gt;
|$03&lt;br /&gt;
|$01&lt;br /&gt;
|-&lt;br /&gt;
|$04&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$05&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$06&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$07&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$08&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$09&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0A&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$0B&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0C&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0D&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0E&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0F&lt;br /&gt;
|$0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Table Offsets ==&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: $135CC[$10]&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: $13504[$10]&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: $13514[$10]&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: $1351B[$10]&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: $13688[$10]&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: $135F1[$10]&lt;br /&gt;
&lt;br /&gt;
;(EUR) and (GER)&lt;br /&gt;
: $135D9[$10]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=417</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=417"/>
				<updated>2016-11-14T11:25:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;br /&gt;
&lt;br /&gt;
[[Coordinate Systems]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Coordinate_Systems&amp;diff=416</id>
		<title>Coordinate Systems</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Coordinate_Systems&amp;diff=416"/>
				<updated>2016-11-14T11:24:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  Different parts of the game (both in ROM and in RAM) use different coordinate systems for different purposes when representing visual data...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
Different parts of the game (both in ROM and in RAM) use different coordinate systems for different purposes when representing visual data, which makes producing and editing the game more difficult but saves either some computation time during actual gameplay or some space in the ROM.&lt;br /&gt;
&lt;br /&gt;
== Frame of Reference ==&lt;br /&gt;
&lt;br /&gt;
The SNES display is 256x224 pixels in size (256 wide and 224 high) and the game displays larger elements (such as a 256x256 pixel room) by scrolling.&lt;br /&gt;
&lt;br /&gt;
All coordinates use the top-left corner as their origin, meaning an X coordinate increases while going to the right across the screen and a Y coordinate increases while going down the screen. This applies to all objects: All rooms, areas, tiles, sprites, blocks, et cetera, all use their top-left corner as the coordinate origin (0,0) point.&lt;br /&gt;
&lt;br /&gt;
== Pixel Coordinates ==&lt;br /&gt;
&lt;br /&gt;
These are simply the direct pixel values where something is: How many pixels to the right from the leftmost pixel, and how many pixels down from the topmost pixel. Only sprites (such as the player and enemies, particle effects, and push-blocks actively being pushed) and screen scrolling use direct pixel coordinates.&lt;br /&gt;
&lt;br /&gt;
== Tile Coordinates ==&lt;br /&gt;
&lt;br /&gt;
The fundamental unit of SNES graphics is the 8x8 pixel tile; Larger units are created by combining multiple 8x8 tiles, and smaller units are created by 8x8 tiles with many transparent pixels. Tile coordinates are simply pixel coordinates divided by 8, either by straight integer division (ignoring the remainder) or shifting bitwise rightward by 3. If you multiply a tile coordinate by 8 (or shift bitwise leftward by 3), you get the pixel coordinate of its top-left corner.&lt;br /&gt;
&lt;br /&gt;
== Tilemap Coordinates ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metarooms]]''&lt;br /&gt;
&lt;br /&gt;
ALTTP in some places uses a special &amp;quot;baked&amp;quot; coordinate system that is a single value, sometimes referred to as the &amp;quot;VRAM address&amp;quot;. (Using the name &amp;quot;VRAM address&amp;quot; is not wrong in this case, but because actual addresses in SNES VRAM depend on multiple factors such as the current display mode, use of the name &amp;quot;VRAM address&amp;quot; is discouraged to avoid confusion.)&lt;br /&gt;
&lt;br /&gt;
Tilemap coordinates are used only for interiors, which are always 512x512 pixels in size, meaning the tilemap coordinates represent a range of tile coordinates from ($00,$00) to ($3F,$3F).&lt;br /&gt;
&lt;br /&gt;
== Conversion ==&lt;br /&gt;
&lt;br /&gt;
Let (Xp,Yp) be pixel coordinates, (Xt,Yt) be tile coordinates, and (TM) be tilemap coordinates.&lt;br /&gt;
&lt;br /&gt;
;Pixel Coordinates to Tile Coordinates&lt;br /&gt;
: Xt = Xp / 8&lt;br /&gt;
: Yt = Yp / 8&lt;br /&gt;
&lt;br /&gt;
;Tile Coordinates to Pixel Coordinates&lt;br /&gt;
: Xp = Xt * 8&lt;br /&gt;
: Yp = Yt * 8&lt;br /&gt;
&lt;br /&gt;
;Tile Coordinates to Tilemap Coordinates&lt;br /&gt;
: TM = ( Xt + Yt * $40 ) * 2&lt;br /&gt;
&lt;br /&gt;
;Tilemap Coordinates to Tile Coordinates&lt;br /&gt;
: Xt = ( TM / 2 ) % $40&lt;br /&gt;
: Yt = ( TM / 2 ) / $40&lt;br /&gt;
&lt;br /&gt;
== Other Coordinate Systems ==&lt;br /&gt;
&lt;br /&gt;
The game encodes coordinates in a few other ways throughout ROM and RAM (such as 16x16 tile coordinates), but one way or another they are simply tile coordinates with a little extra math applied for compression/decompression that will be noted where relevant.&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=415</id>
		<title>Standard Notation</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=415"/>
				<updated>2016-11-14T10:35:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Numbers ==&lt;br /&gt;
&lt;br /&gt;
;$ABCD&lt;br /&gt;
: This is a number in hexadecimal (base 16). Some programming languages represent this as 0xABCD instead.&lt;br /&gt;
&lt;br /&gt;
;%1001&lt;br /&gt;
: This is a number in binary (base 2). Some programming languages represent this as 0b1001 instead.&lt;br /&gt;
&lt;br /&gt;
== Offsets ==&lt;br /&gt;
&lt;br /&gt;
;$3C1B[$20]&lt;br /&gt;
: This is an offset (number of bytes from the start) and length of something. In this case, the first byte is at $3C1B and the last byte is at $3C3A ($3C1B+$20-1).&lt;br /&gt;
&lt;br /&gt;
== Ranges ==&lt;br /&gt;
&lt;br /&gt;
;$ABAA..$ABFF&lt;br /&gt;
: This is an inclusive range of hexadecimal numbers, referring to $ABAA, $ABFF, and any value between them.&lt;br /&gt;
&lt;br /&gt;
== Computation ==&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;lt;&amp;lt; 2&lt;br /&gt;
: bitwise shift left&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;gt;&amp;gt; 2&lt;br /&gt;
: bitwise shift right&lt;br /&gt;
&lt;br /&gt;
;$AF | $F0&lt;br /&gt;
: bitwise OR&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;amp; $F0&lt;br /&gt;
: bitwise AND&lt;br /&gt;
&lt;br /&gt;
;$AF / $F0&lt;br /&gt;
: integer divide (take quotient, ignore remainder)&lt;br /&gt;
&lt;br /&gt;
;$AF % $F0&lt;br /&gt;
: integer modulo (take remainder, ignore quotient)&lt;br /&gt;
&lt;br /&gt;
== ROM Versions ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[ROM Versions]]''&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: Japan (1.0) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: Japan (1.1) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: Japan (1.2) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: USA (English)&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: Canada (French)&lt;br /&gt;
&lt;br /&gt;
;(EUR)&lt;br /&gt;
: Europe (English)&lt;br /&gt;
&lt;br /&gt;
;(GER)&lt;br /&gt;
: Germany (German)&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: France (French)&lt;br /&gt;
&lt;br /&gt;
;(ALL)&lt;br /&gt;
: indicates all versions simultaneously&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=414</id>
		<title>User:Jkazos</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=User:Jkazos&amp;diff=414"/>
				<updated>2016-11-14T10:34:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;Standard Notation  ROM Versions  Checksum  Internal Name  Metaroom Quadrants&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Standard Notation]]&lt;br /&gt;
&lt;br /&gt;
[[ROM Versions]]&lt;br /&gt;
&lt;br /&gt;
[[Checksum]]&lt;br /&gt;
&lt;br /&gt;
[[Internal Name]]&lt;br /&gt;
&lt;br /&gt;
[[Metaroom Quadrants]]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=413</id>
		<title>Metaroom Quadrants</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=413"/>
				<updated>2016-11-12T02:25:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metaroom]]''&lt;br /&gt;
&lt;br /&gt;
The game keeps track of which quadrants of which metarooms the player has visited, primarily for the purpose of illuminating visited rooms in dungeon maps. The game maintains several variables in memory pertaining to the current interior room, and uses these to update the working save file when the player enters and exits new interiors.&lt;br /&gt;
&lt;br /&gt;
;$7E00A6[$1]&lt;br /&gt;
: 0 if the room has normal width (half of a metaroom)&lt;br /&gt;
: 2 if the room is wide (the full width of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A7[$1]&lt;br /&gt;
: 0 if the room has normal height (half of a metaroom)&lt;br /&gt;
: 2 if the room is tall (the full height of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A9[$1]&lt;br /&gt;
: 0 if the player is in the left half of the metaroom&lt;br /&gt;
: 1 if the player is in the right half of the metaroom&lt;br /&gt;
&lt;br /&gt;
;$7E00AA[$1]&lt;br /&gt;
: 0 if the player is in the top half of the metaroom&lt;br /&gt;
: 2 if the player is in the bottom half of the metaroom&lt;br /&gt;
&lt;br /&gt;
Let us label these four values W , H , X , and Y. When updating the working save file, the game combines the four values into a single 4-bit value as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( H &amp;lt;&amp;lt; 2 ) | ( W &amp;lt;&amp;lt; 1 ) | Y | X&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, within this new value, bit 0 indicates whether the player is on the left or right half of the metaroom, bit 1 indicates whether the player is on the top or bottom half of the metaroom, bit 2 indicates whether or not the room is wide, and bit 3 indicates whether or not the room is tall. (Note: The values of X and Y can be inaccurate when inside non-dungeon rooms, such as houses in Kakariko Village.)&lt;br /&gt;
&lt;br /&gt;
This value is then used as an index into a lookup table to retrieve a new 4-bit value which has bits set representing which quadrants of the metaroom have been visited by entering the room. The table's values are configured such that bit 0 indicates the bottom-right quadrant, bit 1 indicates the bottom-left quadrant, bit 2 indicates the top-right quadrant, and bit 3 indicates the top-left quadrant.&lt;br /&gt;
&lt;br /&gt;
== Table Values ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
!Value&lt;br /&gt;
|-&lt;br /&gt;
|$00&lt;br /&gt;
|$08&lt;br /&gt;
|-&lt;br /&gt;
|$01&lt;br /&gt;
|$04&lt;br /&gt;
|-&lt;br /&gt;
|$02&lt;br /&gt;
|$02&lt;br /&gt;
|-&lt;br /&gt;
|$03&lt;br /&gt;
|$01&lt;br /&gt;
|-&lt;br /&gt;
|$04&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$05&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$06&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$07&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$08&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$09&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0A&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$0B&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0C&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0D&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0E&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0F&lt;br /&gt;
|$0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Table Offsets ==&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: $135CC[$10]&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: $13504[$10]&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: $13514[$10]&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: $1351B[$10]&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: $13688[$10]&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: $135F1[$10]&lt;br /&gt;
&lt;br /&gt;
;(EUR) and (GER)&lt;br /&gt;
: $135D9[$10]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=412</id>
		<title>Metaroom Quadrants</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=412"/>
				<updated>2016-11-11T03:06:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metaroom]]''&lt;br /&gt;
&lt;br /&gt;
The game keeps track of which quadrants of which metarooms the player has visited, primarily for the purpose of illuminating visited rooms in dungeon maps. The game maintains several variables in memory pertaining to the current interior room, and uses these to update the working save file when the player enters and exits new interiors.&lt;br /&gt;
&lt;br /&gt;
;$7E00A6[$1]&lt;br /&gt;
: 0 if the room has normal width (half of a metaroom)&lt;br /&gt;
: 2 if the room is wide (the full width of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A7[$1]&lt;br /&gt;
: 0 if the room has normal height (half of a metaroom)&lt;br /&gt;
: 2 if the room is tall (the full height of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A9[$1]&lt;br /&gt;
: 0 if the player is in the left half of the metaroom&lt;br /&gt;
: 1 if the player is in the right half of the metaroom&lt;br /&gt;
&lt;br /&gt;
;$7E00AA[$1]&lt;br /&gt;
: 0 if the player is in the top half of the metaroom&lt;br /&gt;
: 2 if the player is in the bottom half of the metaroom&lt;br /&gt;
&lt;br /&gt;
Let us label these four values W , H , X , and Y. When updating the working save file, the game combines the four values into a single 4-bit value as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( H &amp;lt;&amp;lt; 2 ) | ( W &amp;lt;&amp;lt; 1 ) | Y | X&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, within this new value, bit 0 indicates whether the player is on the left or right half of the metaroom, bit 1 indicates whether the player is on the top or bottom half of the metaroom, bit 2 indicates whether or not the room is wide, and bit 3 indicates whether or not the room is tall.&lt;br /&gt;
&lt;br /&gt;
This value is then used as an index into a lookup table to retrieve a new 4-bit value which has bits set representing which quadrants of the metaroom have been visited by entering the room. The table's values are configured such that bit 0 indicates the bottom-right quadrant, bit 1 indicates the bottom-left quadrant, bit 2 indicates the top-right quadrant, and bit 3 indicates the top-left quadrant.&lt;br /&gt;
&lt;br /&gt;
== Table Values ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
!Value&lt;br /&gt;
|-&lt;br /&gt;
|$00&lt;br /&gt;
|$08&lt;br /&gt;
|-&lt;br /&gt;
|$01&lt;br /&gt;
|$04&lt;br /&gt;
|-&lt;br /&gt;
|$02&lt;br /&gt;
|$02&lt;br /&gt;
|-&lt;br /&gt;
|$03&lt;br /&gt;
|$01&lt;br /&gt;
|-&lt;br /&gt;
|$04&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$05&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$06&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$07&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$08&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$09&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0A&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$0B&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0C&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0D&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0E&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0F&lt;br /&gt;
|$0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Table Offsets ==&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: $135CC[$10]&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: $13504[$10]&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: $13514[$10]&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: $1351B[$10]&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: $13688[$10]&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: $135F1[$10]&lt;br /&gt;
&lt;br /&gt;
;(EUR) and (GER)&lt;br /&gt;
: $135D9[$10]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=411</id>
		<title>Metaroom Quadrants</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Metaroom_Quadrants&amp;diff=411"/>
				<updated>2016-11-11T03:04:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  ''See also: Metaroom''  The game keeps track of which quadrants of which metarooms the player has visited, primarily for the purpose o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
''See also: [[Metaroom]]''&lt;br /&gt;
&lt;br /&gt;
The game keeps track of which quadrants of which metarooms the player has visited, primarily for the purpose of illuminating visited rooms in dungeon maps. The game maintains several variables in memory pertaining to the current interior room, and uses these to update the working save file when the player enters and exits new interiors.&lt;br /&gt;
&lt;br /&gt;
;$7E00A6[$1]&lt;br /&gt;
: 0 if the room has normal width (half of a metaroom)&lt;br /&gt;
: 2 if the room is wide (the full width of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A7[$1]&lt;br /&gt;
: 0 if the room has normal height (half of a metaroom)&lt;br /&gt;
: 2 if the room is tall (the full height of a metaroom)&lt;br /&gt;
&lt;br /&gt;
;$7E00A9[$1]&lt;br /&gt;
: 0 if the player is in the left half of the metaroom&lt;br /&gt;
: 1 if the player is in the right half of the metaroom&lt;br /&gt;
&lt;br /&gt;
;$7E00AA[$1]&lt;br /&gt;
: 0 if the player is in the top half of the metaroom&lt;br /&gt;
: 2 if the player is in the bottom half of the metaroom&lt;br /&gt;
&lt;br /&gt;
Let us label these four values W , H , X , and Y. When updating the working save file, the game combines the four values into a single 4-bit value as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( H &amp;lt;&amp;lt; 2 ) | ( W &amp;lt;&amp;lt; 1 ) | Y | X&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, within this new value, bit 0 indicates whether the player is on the left or right half of the metaroom, bit 1 indicates whether the player is on the top or bottom half of the metaroom, bit 2 indicates whether or not the room is wide, and bit 3 indicates whether or not the room is tall.&lt;br /&gt;
&lt;br /&gt;
This value is then used as an index into a lookup table to retrieve a new 4-bit value which has bits set representing which quadrants of the metaroom have been visited by entering the room. The table's values are configured such that bit 0 indicates the bottom-right quadrant, bit 1 indicates the bottom-left quadrant, bit 2 indicates the top-right quadrant, and bit 4 indicates the top-left quadrant.&lt;br /&gt;
&lt;br /&gt;
== Table Values ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
!Value&lt;br /&gt;
|-&lt;br /&gt;
|$00&lt;br /&gt;
|$08&lt;br /&gt;
|-&lt;br /&gt;
|$01&lt;br /&gt;
|$04&lt;br /&gt;
|-&lt;br /&gt;
|$02&lt;br /&gt;
|$02&lt;br /&gt;
|-&lt;br /&gt;
|$03&lt;br /&gt;
|$01&lt;br /&gt;
|-&lt;br /&gt;
|$04&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$05&lt;br /&gt;
|$0C&lt;br /&gt;
|-&lt;br /&gt;
|$06&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$07&lt;br /&gt;
|$03&lt;br /&gt;
|-&lt;br /&gt;
|$08&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$09&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0A&lt;br /&gt;
|$0A&lt;br /&gt;
|-&lt;br /&gt;
|$0B&lt;br /&gt;
|$05&lt;br /&gt;
|-&lt;br /&gt;
|$0C&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0D&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0E&lt;br /&gt;
|$0F&lt;br /&gt;
|-&lt;br /&gt;
|$0F&lt;br /&gt;
|$0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Table Offsets ==&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: $135CC[$10]&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: $13504[$10]&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: $13514[$10]&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: $1351B[$10]&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: $13688[$10]&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: $135F1[$10]&lt;br /&gt;
&lt;br /&gt;
;(EUR) and (GER)&lt;br /&gt;
: $135D9[$10]&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=410</id>
		<title>Standard Notation</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=410"/>
				<updated>2016-11-11T02:31:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Numbers ==&lt;br /&gt;
&lt;br /&gt;
;$ABCD&lt;br /&gt;
: This is a number in hexadecimal (base 16). Some programming languages represent this as 0xABCD instead.&lt;br /&gt;
&lt;br /&gt;
;%1001&lt;br /&gt;
: This is a number in binary (base 2). Some programming languages represent this as 0b1001 instead.&lt;br /&gt;
&lt;br /&gt;
== Offsets ==&lt;br /&gt;
&lt;br /&gt;
;$3C1B[$20]&lt;br /&gt;
: This is an offset (number of bytes from the start) and length of something. In this case, the first byte is at $3C1B and the last byte is at $3C3A ($3C1B+$20-1).&lt;br /&gt;
&lt;br /&gt;
== Ranges ==&lt;br /&gt;
&lt;br /&gt;
;$ABAA..$ABFF&lt;br /&gt;
: This is an inclusive range of hexadecimal numbers, referring to $ABAA, $ABFF, and any value between them.&lt;br /&gt;
&lt;br /&gt;
== Computation ==&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;lt;&amp;lt; 2&lt;br /&gt;
: bitwise shift left&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;gt;&amp;gt; 2&lt;br /&gt;
: bitwise shift right&lt;br /&gt;
&lt;br /&gt;
;$AF | $F0&lt;br /&gt;
: bitwise OR&lt;br /&gt;
&lt;br /&gt;
;$AF &amp;amp; $F0&lt;br /&gt;
: bitwise AND&lt;br /&gt;
&lt;br /&gt;
== ROM Versions ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[ROM Versions]]''&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: Japan (1.0) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: Japan (1.1) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: Japan (1.2) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: USA (English)&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: Canada (French)&lt;br /&gt;
&lt;br /&gt;
;(EUR)&lt;br /&gt;
: Europe (English)&lt;br /&gt;
&lt;br /&gt;
;(GER)&lt;br /&gt;
: Germany (German)&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: France (French)&lt;br /&gt;
&lt;br /&gt;
;(ALL)&lt;br /&gt;
: indicates all versions simultaneously&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Checksum&amp;diff=409</id>
		<title>Checksum</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Checksum&amp;diff=409"/>
				<updated>2016-11-10T11:36:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  There are different ways to implement the concept of a checksum, but for SNES games the checksum is literally a sum used to check for corr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
There are different ways to implement the concept of a checksum, but for SNES games the checksum is literally a sum used to check for corruption of the cartridge's data. The checksum is calculated by adding together all of the bytes of the ROM, then taking the lowest two bytes of the sum as the checksum. Because the sum of all bytes includes the checksum itself, to prevent a chicken-and-egg situation the complement (also known as &amp;quot;bitwise NOT&amp;quot;) of the checksum is also stored, so that the two combined always add up to $1FE no matter what the actual checksum ends up being.&lt;br /&gt;
&lt;br /&gt;
When trying to calculate the checksum for the first time, or if the checksum bytes have been corrupted, simply set the checksum to $0000 and the complement to $FFFF. When recalculating the checksum after modifying the cartridge's data, leave the checksum alone while calculating the new one (because every valid checksum plus its complement will always be $1FE), then write the new checksum.&lt;br /&gt;
&lt;br /&gt;
Note: There are complications to calculating the checksums of ROMs that are not a power of two in size, but that does not apply to ALTTP which is a power of two in size. When expanding the ROM, either double or quadruple the size to keep the size a power of two.&lt;br /&gt;
&lt;br /&gt;
For LoROM games like this one, the checksum is located at $7FDE[$2] and the checksum's complement is located at $7FDC[$2].&lt;br /&gt;
&lt;br /&gt;
== Sample C# Code ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static class SnesChecksum&lt;br /&gt;
{&lt;br /&gt;
	public const int RomOffsetToRomChecksum = 0x7FDE , RomOffsetToComplementedRomChecksum = 0x7FDC ;&lt;br /&gt;
&lt;br /&gt;
	public static void WriteMachineWord ( byte [ ] Data , int Offset , int Value )&lt;br /&gt;
	{&lt;br /&gt;
		Data [ Offset ] = ( byte ) ( Value &amp;amp; 0xFF ) ;&lt;br /&gt;
		Data [ Offset + 1 ] = ( byte ) ( Value &amp;gt;&amp;gt; 8 ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void WriteChecksum ( byte [ ] Data , int Checksum )&lt;br /&gt;
	{&lt;br /&gt;
		WriteMachineWord ( Data , RomOffsetToRomChecksum , Checksum ) ;&lt;br /&gt;
&lt;br /&gt;
		WriteMachineWord ( Data , RomOffsetToComplementedRomChecksum , ( ~ Checksum ) &amp;amp; 0xFFFF ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static int ReadMachineWord ( byte [ ] Data , int Offset )&lt;br /&gt;
	{&lt;br /&gt;
		return ( Data [ Offset ] | ( Data [ Offset + 1 ] &amp;lt;&amp;lt; 8 ) ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static int CalculateChecksum ( byte [ ] Data )&lt;br /&gt;
	{&lt;br /&gt;
		int Checksum = 0 ;&lt;br /&gt;
&lt;br /&gt;
		foreach ( byte CurrentByte in Data )&lt;br /&gt;
		{&lt;br /&gt;
			Checksum += CurrentByte ;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return ( Checksum &amp;amp; 0xFFFF ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static bool ValidateChecksum ( byte [ ] Data )&lt;br /&gt;
	{&lt;br /&gt;
		return ( ReadMachineWord ( Data , RomOffsetToRomChecksum ) == CalculateChecksum ( Data ) ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void ClearChecksum ( byte [ ] Data )&lt;br /&gt;
	{&lt;br /&gt;
		WriteChecksum ( Data , 0 ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void UpdateChecksum ( byte [ ] Data )&lt;br /&gt;
	{&lt;br /&gt;
		WriteChecksum ( Data , CalculateChecksum ( Data ) ) ;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Internal_Name&amp;diff=408</id>
		<title>Internal Name</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Internal_Name&amp;diff=408"/>
				<updated>2016-11-10T11:35:48Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  The internal name of a LoROM SNES game like ALTTP is a simple 21-character ASCII string located at $7FC0[$15], intended for use only by pe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
The internal name of a LoROM SNES game like ALTTP is a simple 21-character ASCII string located at $7FC0[$15], intended for use only by people working with the development and certification of the game. All internal names shorter than 21 characters in length must be padded to full length by adding extra ASCII space characters at the end.&lt;br /&gt;
&lt;br /&gt;
ALTTP itself does not read or use its internal name for any purpose, so you may safely change it to any valid printable ASCII string you desire. To create such a string with modern programming languages, create a standard Unicode string that includes only the characters U+20 through U+7E, pad the length of the string to 21 code points by adding additional U+20, then encode it as UTF-8 (with NO byte-order mark).&lt;br /&gt;
&lt;br /&gt;
== Sample C# Code ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static class SnesInternalName&lt;br /&gt;
{&lt;br /&gt;
	public const int RomOffsetToInternalName = 0x7FC0 , InternalNameLength = 21 ;&lt;br /&gt;
&lt;br /&gt;
	public static void WriteInternalName ( byte [ ] Data , string Name )&lt;br /&gt;
	{&lt;br /&gt;
		if ( Name . Length &amp;lt; InternalNameLength )&lt;br /&gt;
		{&lt;br /&gt;
			Name = new System . Text . StringBuilder ( Name , InternalNameLength ) . Append ( ' ' , InternalNameLength - Name . Length ) . ToString ( ) ;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		byte [ ] NameBytes = new System . Text . UTF8Encoding ( false ) . GetBytes ( Name ) ;&lt;br /&gt;
&lt;br /&gt;
		System . Array . Copy ( NameBytes , 0 , Data , RomOffsetToInternalName , InternalNameLength ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static string ReadInternalName ( byte [ ] Data )&lt;br /&gt;
	{&lt;br /&gt;
		int NameLength = InternalNameLength ;&lt;br /&gt;
&lt;br /&gt;
		while ( Data [ RomOffsetToInternalName + NameLength - 1 ] == 0x20 )&lt;br /&gt;
		{&lt;br /&gt;
			NameLength -- ;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return ( System . Text . Encoding . UTF8 . GetString ( Data , RomOffsetToInternalName , NameLength ) ) ;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=ROM_Versions&amp;diff=407</id>
		<title>ROM Versions</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=ROM_Versions&amp;diff=407"/>
				<updated>2016-11-10T11:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;''See also: Standard Notation''  There are eight known ROM images of standard ALTTP (not counting the Virtual Console). All of these versions are 1048576 ($100000) bytes i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also:[[ Standard Notation]]''&lt;br /&gt;
&lt;br /&gt;
There are eight known ROM images of standard ALTTP (not counting the Virtual Console). All of these versions are 1048576 ($100000) bytes in length. If you find a ROM image that is 1049088 ($100200) bytes in length, it carries a header created by a ROM dumper which is unnecessary and can simply be deleted by removing the first 512 ($200) bytes of the file.&lt;br /&gt;
&lt;br /&gt;
== Versions ==&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: This is the original Japanese version, and the version favored by speedrunners and randomizers due to its plethora of exploitable bugs and flaws and faster text display.&lt;br /&gt;
&lt;br /&gt;
;(J11) and (J12)&lt;br /&gt;
: These are updated Japanese versions in which many of the bugs found in the original version have been fixed. International versions are based on these.&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: This is the NTSC version released in English, and the version favored by ROM hackers due to the popularity of the English language and the 60Hz operating frequency of NTSC.&lt;br /&gt;
&lt;br /&gt;
;(EUR)&lt;br /&gt;
: This is the PAL version released in English.&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: This is the NTSC version released in French.&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: This is the PAL version released in French.&lt;br /&gt;
&lt;br /&gt;
;(GER)&lt;br /&gt;
: This is the PAL version released in German.&lt;br /&gt;
&lt;br /&gt;
== Internal Names ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Internal Name]]''&lt;br /&gt;
&lt;br /&gt;
;(USA), (EUR), and (GER)&lt;br /&gt;
: THE LEGEND OF ZELDA&lt;br /&gt;
&lt;br /&gt;
;(J10), (J11), and (J12)&lt;br /&gt;
: ZELDANODENSETSU&lt;br /&gt;
&lt;br /&gt;
;(CAN) and (FRA)&lt;br /&gt;
: LA LEGENDE DE ZELDA&lt;br /&gt;
&lt;br /&gt;
== Checksums ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[Checksum]]''&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: $CDC8&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: $0D90&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: $0BE3&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: $AF0D&lt;br /&gt;
&lt;br /&gt;
;(EUR)&lt;br /&gt;
: $75B9&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: $B8BC&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: $65AE&lt;br /&gt;
&lt;br /&gt;
;(GER)&lt;br /&gt;
: $50B6&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	<entry>
		<id>http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=406</id>
		<title>Standard Notation</title>
		<link rel="alternate" type="text/html" href="http://alttp.run/hacking/index.php?title=Standard_Notation&amp;diff=406"/>
				<updated>2016-11-10T11:27:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jkazos: Created page with &amp;quot;== Numbers ==  ;$ABCD : This is a number in hexadecimal (base 16). Some programming languages represent this as 0xABCD instead.  ;%1001 : This is a number in binary (base 2)....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Numbers ==&lt;br /&gt;
&lt;br /&gt;
;$ABCD&lt;br /&gt;
: This is a number in hexadecimal (base 16). Some programming languages represent this as 0xABCD instead.&lt;br /&gt;
&lt;br /&gt;
;%1001&lt;br /&gt;
: This is a number in binary (base 2). Some programming languages represent this as 0b1001 instead.&lt;br /&gt;
&lt;br /&gt;
== Offsets ==&lt;br /&gt;
&lt;br /&gt;
;$3C1B[$20]&lt;br /&gt;
: This is an offset (number of bytes from the start) and length of something. In this case, the first byte is at $3C1B and the last byte is at $3C3A ($3C1B+$20-1).&lt;br /&gt;
&lt;br /&gt;
== Ranges ==&lt;br /&gt;
&lt;br /&gt;
;$ABAA..$ABFF&lt;br /&gt;
: This is an inclusive range of hexadecimal numbers, referring to $ABAA, $ABFF, and any value between them.&lt;br /&gt;
&lt;br /&gt;
== ROM Versions ==&lt;br /&gt;
&lt;br /&gt;
''See also: [[ROM Versions]]''&lt;br /&gt;
&lt;br /&gt;
;(J10)&lt;br /&gt;
: Japan (1.0) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J11)&lt;br /&gt;
: Japan (1.1) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(J12)&lt;br /&gt;
: Japan (1.2) (Japanese)&lt;br /&gt;
&lt;br /&gt;
;(USA)&lt;br /&gt;
: USA (English)&lt;br /&gt;
&lt;br /&gt;
;(CAN)&lt;br /&gt;
: Canada (French)&lt;br /&gt;
&lt;br /&gt;
;(EUR)&lt;br /&gt;
: Europe (English)&lt;br /&gt;
&lt;br /&gt;
;(GER)&lt;br /&gt;
: Germany (German)&lt;br /&gt;
&lt;br /&gt;
;(FRA)&lt;br /&gt;
: France (French)&lt;/div&gt;</summary>
		<author><name>Jkazos</name></author>	</entry>

	</feed>