https://info.sonicretro.org/api.php?action=feedcontributions&user=Xkeeper&feedformat=atomSonic Retro - User contributions [en]2024-03-29T01:26:11ZUser contributionsMediaWiki 1.30.2https://info.sonicretro.org/index.php?title=Sandbox&diff=193678Sandbox2012-10-18T04:03:08Z<p>Xkeeper: SUDDENLY!!!</p>
<hr />
<div>jumpin' jack flash<br />
it's a gas gas gas</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sandbox&diff=193676Sandbox2012-10-18T04:01:22Z<p>Xkeeper: gas</p>
<hr />
<div>gas</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sandbox&diff=193674Sandbox2012-10-18T03:59:46Z<p>Xkeeper: remember when I used to care about being a good admin on retro? :smith:</p>
<hr />
<div>d<br />
<br />
gfdgdfg<br />
<br />
from somewhere, a transmission</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Hinchy&diff=149373User:Hinchy2010-06-05T03:01:31Z<p>Xkeeper: WROGN</p>
<hr />
<div>{{sub-stub}}<br />
<forumuser name="Hinchy" /><br />
A member that has been in the Sonic scene for years, he used to go by YesIAmAnIdiot. He was very active in the stupid Sonic fancharacter fanfiction segment of the community even while simultaneously maintaining a Sonic-CulT account that somehow never got banned (I guess they just never cared enough about him to look up his obvious fancharacter dumbassery). Eventually he stopped being dumb <sup><nowiki>[</nowiki>''[[Main Page|citation needed]]''<nowiki>]</nowiki></sup> and left that part of the community and lurked on Sonic-CulT and then X-CulT for a few years. Then he showed up on Retro one day and now rarely posts outside of the Oldbie Lounge. A true role model and hero.</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_the_Hedgehog_Pocket_Adventure/Hidden_content&diff=142418Sonic the Hedgehog Pocket Adventure/Hidden content2010-03-07T21:40:06Z<p>Xkeeper: /* Beginning/Go to Room/Direction/Sound Test */</p>
<hr />
<div>==Debug Menu==<br />
Through using the [[Neo Geo Pocket Color]] emulators R.A.P.E and Neopocott, and pressing the "option" button on the SEGA screen, it is possible to access a hidden debug menu.<br />
<br />
An interesting function of the debug mode is that it allows the player to switch between Sonic and Tails by pressing both the {{B}} button. It is also possible to trigger a free-movement mode by pressing both {{A}} and {{B}} at once.<br />
<br />
There is currently no known method of accessing this menu outside of using the R.A.P.E and Neopocott emulators.<br />
<br />
===Beginning/Go to Room/Direction/Sound Test===<br />
[[Image:SPA_DebugMenu.png]] [[Image:SPA_BeginMenu.png]]<br />
<br />
"Beginning" is pretty straightforward. Simply pick the level you wish to start the game on, as if it was any other level select screen. The "Test" levels are just clones of Neo South Island, which will crash the emulator when selected.<br />
<br />
"Go to room" will take the player to the puzzle and option screen.<br />
<br />
"Direction" will take the player to the ending scenes.<br />
<br />
"Sound Test" simply opens up the Sound Test.<br />
<br />
===Debug Option===<br />
[[Image:SPA_DebugOpt.png]]<br />
<br />
This menu is a bit more difficult to understand, the following explains the options use in detail:<br />
* DEBUG DISP - Toggles the display of X/Y coords of the player in the HUD.<br />
* ATK DISP - Toggles the display of hitboxes around destroyable objects (Enemies, Monitors, etc).<br />
* BDY DISP - Toggles the display of hitboxes around the player.<br />
* MUTEKI - Toggles invulnerability for the player (can't be hurt).<br />
* ALL CLEAR - Toggles a full savegame.<br />
<br />
{{SPAOmni}}<br />
<br />
[[Category:Game Secrets|Sonic Pocket Adventure]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=File:Sonic2006items.jpg&diff=142417File:Sonic2006items.jpg2010-03-07T21:22:14Z<p>Xkeeper: </p>
<hr />
<div>[[Category:Sonic the Hedgehog (2006 game) Game Secrets Images]]<br />
{{replace}}</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=125882User:Xkeeper2009-10-30T11:58:27Z<p>Xkeeper: </p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
I came on board as a sort of system developer for php/MySQL since Sonic Retro had nobody to do it.<br />
<br />
I don't participate much in the goings on of the forum or Wiki beyond fixing what breaks. Sonic ROM hacking isn't personally interesting to me and I don't have anything I can contribute to the Wiki content-wise, so I try to help out where I can.<br />
<br />
My main accomplishments here were creating an IRC bot that reports Wiki activity and posts on the forum, '''Tina'''. People in #retro have generally been very mixed on whether this was a good idea or not, though.<br />
<br />
Recent activities mostly include providing the Wiki restoration effort with [http://xkeeper.sonicretro.org/wikiimages.php wikiimages], a page that lists images that are still missing from the Wiki along with some information. Thanks to this and the efforts of <!-- barf --> [[GerbilSoft]], [[Tweaker]], [[ScarredSun]], and [[:Category:Sceners|all the other cool folks]] we've recovered almost 10,000 images, so thanks for that.<br />
<br />
<br />
<br />
<br />
<br />
P.S. Don't fuck with me on IRC. I bite.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.net xkeeper.net], my home on the internets<br />
<br />
<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:X64&diff=125749User:X642009-10-28T02:20:34Z<p>Xkeeper: Replaced content with '{{DISPLAYTITLE:x64}}
x64 (n.) ''see also'' '''piece of shit'''
{{vandal}}'</p>
<hr />
<div>{{DISPLAYTITLE:x64}}<br />
x64 (n.) ''see also'' '''piece of shit'''<br />
<br />
<br />
{{vandal}}</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=124375User:Xkeeper2009-10-11T09:53:37Z<p>Xkeeper: </p>
<hr />
<div>:''This page is in dire need of updating, and you can help!''<br />
<br />
:...Oh, right. There's a template for that. Ahem:<br />
<br />
{{Outdated}}<br />
<br />
<forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=124374User:Xkeeper2009-10-11T09:52:59Z<p>Xkeeper: HELP</p>
<hr />
<div>''This page is in dire need of updating, and you can help!)'' Oh, right, there's a template for that. Ahem:<br />
<br />
{{Outdated}}<br />
<br />
<forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Ironfist&diff=124371User:Ironfist2009-10-11T09:47:26Z<p>Xkeeper: Replaced content with '{{Vandal}}
xkeeper was here'</p>
<hr />
<div>{{Vandal}}<br />
<br />
[[xkeeper]] was here</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Chaos_Hedgie&diff=122414User:Chaos Hedgie2009-09-15T21:15:05Z<p>Xkeeper: MathUser is an idiot</p>
<hr />
<div><forumuser name="Chaos Hedgie" /> <br />
'''Chaos Hedgie''' is one of [[Sonic Retro|Retro's]] black guys, and is known for eating chikkins & watermelon. He weaves cotton to keep the servers' room insulated.<br />
<br />
Chaos Hedgie (Real Name: Timothy Heller) is one of the first black guys to join the [[Sonic scene]], and also the most controversial. However, although his hostile personality has garnered him infamy within the Sonic scene, his cool personality garnered a niche within the scene.<br />
<br />
Timothy Heller was born in Flint, Michigan, known as the 3rd most dangerous city in the U.S. He has now relocated to Portland, Oregon, due to numerous robberies and ghetto drama.<br />
<br />
He's a bit of a loose cannon, and extremely irritable, but highly intelligent.<br />
<br />
Hedgie is also the self-proclaimed "Unrecognized [[Oldbie]]", due to his original registration being lost to time.<br />
<br />
He was permanently banned from Sonic Retro for various reasons on July 9th, 2009.<br />
<br />
==The Beginning (2002-2004)==<br />
<br />
Chaos Hedgie first joined the [[The Sonic 2 Beta Page|Sonic 2 Beta]] [[ezBoard]] back in 2002, but lurked for a while, thus rendering his registration lost in time.<br />
<br />
His second noted registration was at [[Perfect Chaos Gang|The Perfect Chaos Gang]] (TPCG) in March of 2003, under the name "SonicMario3". TPCG soon closed after a month of his registration.<br />
<br />
He soon joined the SRB2 forums, and was first introduced to IRC. He was however banned shortly, for not knowing some basic IRC etiquette, such as flooding. However, they managed to teach them the basics, and he pops in from time to time, every now and then.<br />
<br />
After jumping around various message boards, such as the Sonic: Time Attacked forum, he finally registered at [[Sonic CulT]]. He managed to last for two months before being banned, but not before gaining some internet friendships.<br />
<br />
He then proceeded to register at CulT-Soft and [[Sonic Classic]], and thrived for a while. However, in 2004, an argument broke out between Chaos and [[Dragoon]] (Cult-Soft's owner) over Dragoon's sexuality, and Chaos was banned a day before Dragoon planned to VIP him.<br />
<br />
==The Doppleganger (2005-2006)==<br />
<br />
After befriending and falling out with numerous people, such as Elbot the Wolfcat, and [[Perfect Chaos (scener)|Perfect Chaos]], Hedgie began to try a community-wide prank. He impersonated Elbot, but was discovered a month or so later. However, this impersonation didn't garner much attention, so Hedgie decided to assume the personality of Perfect Chaos.<br />
<br />
This one was a tad more successful, as he had the entire community confused, until [[Gunner112k]] finally exposed him, due to a past conversational fluke.<br />
<br />
Chaos Hedgie also befriended a hacker named manickillaz, and proceeded to have him DDoS [[Digibase]] and the CulT. This all backfired when [[Sazpaimon]] befriended Manic, and convinced him to sway sides.<br />
<br />
==The Failure of the Bridge (2007-2008)==<br />
<br />
Hedgie vanished for a period of six months or so, but reappeared after the [[Glowing Bridge]] formed, and joined its ranks. He was also given the oldbie status that he desired.<br />
<br />
However, after a period of three months or so, Hedgie started getting into arguments with [[Mad Echidna]] and [[Katelynn]], and this resulted in his demotion and banning. Before he left, Hedgie predicted that the Glowing Bridge would fall, and that [[SonicIRC]] would forever remain stagnant. Ironically, his predictions came true, with the Bridge's subsequent closing a month later.<br />
<br />
Hedgie then vanished in the middle of 2008, due to real life issues. He reappeared in August, after he relocated to Oregon.<br />
<br />
==Today==<br />
<br />
Chaos Hedgie is still a scener that pops in from time to time, he's currently in San Diego, CA, preparing to go back to his hometown of Flint, MI, so he can prepare to attend college at Tuskegee University, a historically black university located in Tuskegee, Alabama. He currently is majoring in Accountancy.<br />
<br />
<br />
==Employment History==<br />
+ <br />
- <br />
For you nosy fuckers:<br />
<br />
* Cracker Barrel (Flint, MI): June 2008 to August 2008<br />
<br />
* Wal-Mart (Clio, MI): August 2008 to August 2008 (Two weeks! Then I moved to Oregon)<br />
<br />
* Macy's (Portland, OR): November 2008 to January 2009<br />
<br />
==Trivia==<br />
<br />
*He's one of the first black members of the Sonic Community<br />
<br />
*His various names are Nigtendo, Sonicmario3, Chaos the Hedgehog, Meta Knigger/Meta Nigger<br />
<br />
*One of the few members to have actually planned and orchestrated DDoS attacks, (although unable to commence them)<br />
<br />
*Was also the inadvertent cause of SonAR being deleted while hosted on Glowing Bridge's servers. Due to Katelynn, a rumor broke out that Hedgie was supposedly going to report Glowing Bridge to SEGA, and MadEchidna deleted SonAR as a precaution.<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Xkeeper/forumuser&diff=106397Xkeeper/forumuser2009-04-26T02:23:18Z<p>Xkeeper: Reverted edits by Sonickid97 (Talk); changed back to last version by Xkeeper</p>
<hr />
<div>'''<nowiki><forumuser></nowiki>''' is a tag created by [[Xkeeper]].<br />
<br />
== Usage ==<br />
<br />
For using your user ID:<br />
<pre><forumuser id="####" /></pre><br />
<br />
For using your user name:<br />
<pre><forumuser name="####" /></pre><br />
<br />
=== Styles ===<br />
Normally, the box is created in style of the original Userbob template with some added statistics, but by adding the ''type'' argument, you can choose from a few different styles:<br />
<br />
<pre><forumuser name/id="####" type="style name" /></pre><br />
<br />
Types:<br />
* ''mini'': A smaller version of the usual one, showing only name, group, join date, posts, and edits<br />
* ''game'': A mockery of the ''[[Template:Bob|Fast Facts]]'' sidebar, complete with derived ROM size and other dumb crap<br />
<br />
<br />
<br />
[[Category:Breakout Box Templates]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sandbox&diff=104915Sandbox2009-03-30T01:12:39Z<p>Xkeeper: </p>
<hr />
<div><forumuser ddd=760 /><br />
<br />
PETER O'QUAGLAND<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Testing the compilation template<br />
{{CompilationBob|bobscreen=Scomp.png|publisher=[[Sega]]|developer=[[Sega]]|originalpublishers=[[Sega]]|originaldevelopers=[[Sonic Team]], [[Sega Technical Institute]], [[Compile]]|system=[[Sega Mega Drive/Genesis]]|game#=3|consolescompilation=Sega Mega Drive<br />
|europe=1995|usa=1997|japan=Unreleased}}<br />
----<br />
<br />
<ipbwiki_post post=1/><br />
* Old (thread): {{LinkRetro|topic=11749|title=Activity Polygon}}<br />
* New (thread): <linkretro thread="11749">Activity Polygon</linkretro><br />
* New (post): <linkretro post="58917">Random post on the internet</linkretro><br />
* New (invalid): <linkretro sex="gay">fgt</linkretro><br />
<br />
rumour has it one of these is not like the others.<br />
<br />
:Awesome - do you plan to do something like this for the other link templates as well? --[[User:Shobiz|Shobiz]] 06:49, 19 August 2008 (UTC)<br />
::There's actually a discussion in IRC right now; I was considering making it &lt;forumlink to="retro" topic="9999">Title</forumlink> (where 'retro' could be one of any of the current ones) but as of yet current discussion is making me reconsider just finding a way to fix the template --[[User:Xkeeper|Xkeeper]] 06:51, 19 August 2008 (UTC)<br />
<br />
----<br />
Just testing out how the IRC bot works<br />
<br />
121813 <_Tina_> Sandbox edited by Shobiz (Testing ... (+45)): http://sonicretro.org/r/?a=77866,77792<br />
<br />
yes, it's still there, just in a channel only I'm in<br />
----<br />
Test<br><br />
Again<br />
----<br />
; blah: blah blah blah blah etc etc etc<br />
; foo: bar baz abcdefg blargh<br />
<br />
what's going on with this thumbnail shit<br />
<gallery><br />
Image:Usk 18.svg<br />
Image:OFLC small X18+.svg<br />
Image:Pegi 18.png<br />
Image:Hedgehog.jpg<br />
</gallery><br />
----<br />
<br />
Practice Article- Sand Oasis<br />
Sand Oasis is the first non-tutorial stage in Sonic and The Secret of the Rings it is a mixture of desert, temple and oasis terrain. Since Sand Oasis is the games first level it is relatively easy to complete and the extra missions are not too difficult to complete. Sand Oasis is also home to one of the games bosses - the Sand Scorpion, who is the first boss of the game</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=104470User:Xkeeper2009-03-17T22:43:29Z<p>Xkeeper: I hate testing</p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
YOU KNOW WHAT HAPPENS WHEN YOU TEST THINGS?<br />
PEOPLE '''DIE'''.<br />
THEY '''''DIE''''', MAN. FOREVER.<br />
WHY DOES THIS NOT WORK??????????<br />
MORE TESTING IS REQUIRED<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=104469User:Xkeeper2009-03-17T22:41:19Z<p>Xkeeper: I hate testing</p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
YOU KNOW WHAT HAPPENS WHEN YOU TEST THINGS?<br />
PEOPLE '''DIE'''.<br />
THEY '''''DIE''''', MAN. FOREVER.<br />
WHY DOES THIS NOT WORK??????????<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=104468User:Xkeeper2009-03-17T22:40:33Z<p>Xkeeper: I hate testing</p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
YOU KNOW WHAT HAPPENS WHEN YOU TEST THINGS?<br />
PEOPLE '''DIE'''.<br />
THEY '''''DIE''''', MAN. FOREVER.<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=104467User:Xkeeper2009-03-17T22:38:23Z<p>Xkeeper: </p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
YOU KNOW WHAT HAPPENS WHEN YOU TEST THINGS?<br />
PEOPLE '''DIE'''.<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=104465User:Xkeeper2009-03-17T22:35:05Z<p>Xkeeper: </p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
Also test.<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Death_Ball&diff=102179Death Ball2009-03-02T10:07:15Z<p>Xkeeper: it's -> its. How did you miss all of these? Also, this page sucks, somebody finish fixing it</p>
<hr />
<div>[[Image:deb.png|right]]<br />
This is the final boss encountered on both '''''Sonic & Knuckles''''' and ''[[Sonic 3 & Knuckles]]'' before the final battle. Its form resembles a minature Death Egg, which is protected by a rotating shield. Its base perodically opens up, releasing small cars with three sets of spikes which then travel around the floor of the Death Egg.<br />
<br />
This boss is invunerable to any type of attack the player may try to inflict on it because of the shield. The only way to damage the boss is to use the teleporters on either side switch gravity while a spiked wheel is beneath it, causing it to switch sides and damage it. When the boss releases the spike cars its best to get ready to go into a transporter quickly. When the boss is just about to hover over the spike car, go into the transporter to turn everything upside down along with the car which will hit the boss if it's timed right. If that fails, then the car will be stuck because of the spikes in the ground. Spin Dashing into the car will flip it possibly hitting the boss if he is hovering near it. A word of caution, when the cars are left upside down, left to travel on the ground or hit the boss the wrong side, they will explode causing the three spikes to shoot out.<br />
<br />
{{SKEnemies}}<br />
[[Category:Sonic & Knuckles Bosses and Sub-bosses]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Patch&diff=101074Patch2009-02-21T01:01:18Z<p>Xkeeper: </p>
<hr />
<div>{{stub}}<br />
<br />
A '''patch''' is a file that is used to modify other files, usually [[ROM]]s. The [[Sonic scene]] has seen several types of patches, including [[IPS]] and [[RXL]], used for [[ROM hack]]s. Patches were used during a time when downloading full ROMs would be a lengthy task for slow Internet connections, but with the advent of high-speed Internet connections, patches have fallen into disuse as Sonic-game hackers have made fully modified ROMs available.<br />
<br />
Patches are still utilized (and often, required) for other games, due to precautions related to copyright.<br />
<br />
<br />
[[Category:Data Formats]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=User:Xkeeper&diff=100101User:Xkeeper2009-02-13T11:54:48Z<p>Xkeeper: filler test edit</p>
<hr />
<div><forumuser name="Xkeeper" type="game" /><br />
<br />
''Tweaker: We need somebody who can do PHP shit. Know anybody?''<br />
<br />And so here I am.<br />
<br />
I code shit on the forum. I code shit on the wiki. And occasionally, I code shit for boredom. Like the {{LinkRetro|topic=11583|title=wiki activity graph}}.<br />
<br />
== Accomplishments ==<br />
* Added a hack to the post recounting feature that makes it ignore trial members<br />
* Fixed some other admin panel crap<br />
* <small>Took over the forum</small><br />
* Changed names of users en-masse to get rid of Login/Display Name problem<br />
* Added Wiki-Edit counter to the forum<br />
* Set up an [[Tina|IRC bot]] to report events on Sonic Retro.<br />
* <small>Enforced reign of terror with iron fist</small><br />
* Created a tag specifically for displaying information of [[Xkeeper/forumuser|forum users]]<br />
* Some other bits and tids around the place.<br />
* Created {{LinkRetro|topic=11749|title=Activity Polygon}}, a small chart to show some activity information<br />
<br />
Total '''Lamerscore&trade;''': 1,336L. ''Blast it.'' So close.<br />
<br />
In terms of sonic-related accomplishments, nothing. I don't hack Sonic or do much of anything with it other than die. Cuz I suck at Sonic games. Seriously.<br />
<br />
== External links ==<br />
*[http://jul.rustedlogic.net Jul], my forum<br />
*[http://xkeeper.shacknet.nu:5 xkeeper.shacknet.nu], my homepage<br />
<br />
<br />
== Uhhh ==<br />
One of these days I should probably reformat this article, or at least write some form of introduction that isn't basically "hey guys whatsup". Yeah.<br />
<br />
<br />
<br />
[[Category:Sceners]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=File:Junglejoyride.png&diff=99533File:Junglejoyride.png2009-02-07T03:38:22Z<p>Xkeeper: </p>
<hr />
<div>Screenshot of Jungle Joyride from Sonic Unleashed<br />
{{screenshot|Sonic Unleashed}}<br />
<br />
{{replace|reason=Low quality}}</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_the_Hedgehog_CD&diff=98853Sonic the Hedgehog CD2009-01-29T02:29:46Z<p>Xkeeper: Reverted edits by IRATE PINGAS (Talk); changed back to last version by Kuover</p>
<hr />
<div>{{Bob<br />
| bobscreen=Scd titlescreen.png<br />
| publisher=[[Sega]]<br />
| developer=[[Sonic Team]]<br />
| system=[[Sega Mega CD/Sega CD|Sega Mega CD]], Windows PC<br />
| europe=October 1993<br />
| usa=November 19, 1993<br />
| japan=Sept. 23, 1993<br />
| genre=2D Platform<br />
}}<br />
'''''Sonic the Hedgehog CD''''' or '''''Sonic CD''''' (as it is known in Europe and North America) is a video game that is still well acclaimed by Sonic fans. [[Yuji Naka]] never took part in its development, but instead was handled by Sonic creator [[Naoto Ohshima]]. This explains why the theme of the game is different from other Sonic games.<br />
<br />
''Sonic CD'' was the first Sonic game to use a backup save, using the internal Sega CD memory or a backup RAM cartridge. The game saves after the end of each third zone and records the best times of the player in the time attack mode. This is also the first Sonic game to feature FMV. Extended versions of these FMVs were included in ''[[Sonic Jam]]'' and ''[[Sonic Mega Collection]]''.<br />
<br />
Early in the game's development, the gaming press and even Sega's former head of marketing [[Al Nilsen]] thought the game was going to be a port of ''[[Sonic the Hedgehog 2 (16-bit)|Sonic the Hedgehog 2]]'' and often referred to it as ''[[Sonic the Hedgehog 2 CD]]''[http://info.sonicretro.org/Image:Sgmakingof2.jpg].<br />
<br />
==Story==<br />
It turns out that [[Amy Rose]], a female hedgehog, had used tarot cards to find [[Sonic the Hedgehog|Sonic]], but was kidnapped in front of his very eyes. Sonic must find [[Metal Sonic]], whom kidnapped [[Amy Rose]]. Meanwhile, he must also collect the [[Time Stones]] and travel through time to foil [[Dr. Robotnik]]'s latest plot. Sonic accomplishes his mission and [[Little Planet]] quickly vanishes when it is freed.<br />
<br />
==Gameplay==<br />
The game's physics have Sonic feeling generally more sluggish than normal. His [[Spin Dash]] in Sonic CD is different than that of ''Sonic 2'''s; the position he takes in both games is different. A new move was added to complement the Spin Dash: the [[Super Peel-Out]]. The Super Peel-Out can be performed by pressing {{up}} and any trigger button. This causes Sonic to rev in position until {{up}} is released, sending Sonic speeding off. The difference between Sonic's Spin Dash and his Super Peel-Out is that spin dash damages enemies who get in his way due to his curled attacking pose, while the Super Peel-Out leaves Sonic vulnerable to attack but is faster.<br />
<br />
===Time Travel===<br />
The game's key element is the concept of time travel. The player can travel to four different versions of each level in three different time periods. This is accomplished by passing "Past" or "Future" speed posts scattered around the level and then running at top speed until the time period changes. There are never any "Past" signs in the past and never any "Future" signs in the future. If the player is able to destroy a special machine in the past, then they travel to a "Good Future" with no enemies.<br />
<br />
The different time zones have slightly different layouts and sprite placements, as well as significant changes in the level music, art and palette. In addition, the robots within a level fall into a state of disrepair as time passes; in the present, some machines have become worn down while in the future all of them have. This affects the speed and attacking ability of the robots; some of them become completely ineffective, while others do not significantly change.<br />
<br />
The appearance of the future changes depending on what is accomplished in past. If the levels robot generating machine is destroyed or all seven time stones are already collected, all of Dr. Robotnik's robots will be destroyed in the past. The future will also be the a "Good Future" and there will be no enemies and fewer hazards. If the machine is not destroyed, then warping to the future will lead to a "Bad Future" in which Dr. Robotnik's robots are still present, there will be more hazards (though not always as many as in the past), the palette will be darker.<br />
<br />
In addition to the robot generating machine, hidden within the past of each level is a machine which projects a hologram of Metal Sonic squashing one of that particular zone's animals underfoot. Destroying this machine causes animals to appear in the past and present levels. However the animals are always present in the Good Future, regardless of whether or not this machine was destroyed.<br />
<br />
The third zone always takes place in the future and is mainly a short run up to the boss. Most boss battles are more elaborate than those in the other Sonic games, and typically require fewer hits than the usual 6 or 8. These boss battles, however, require more effort to actually hit Robotnik; one battle takes place on a makeshift pinball table and requires the player to use flippers to get up to Robotnik. Two battles do not involve hitting Robotnik to damage him; one takes place on a giant treadmill where the objective is to wear out Robotnik's machine by running on it, and the other is a race against Metal Sonic. <br />
<br />
The good ending to the game can be reached by completing all the good futures or by collecting the 7 Time Stones in the Special Stages.<br />
<br />
==Versions==<br />
===Sega CD version===<br />
The most controversial fact about this game is that the US and Japanese versions feature two different soundtracks. Europe uses the Japanese soundtrack.<br />
<br />
The Japanese soundtrack was composed by [[Naofumi Hataya]] and Masafumi Ogata, and featured songs by [[Keiko Utoku]]. The songs were entitled "[[Sonic - You Can Do Anything]]" (infamously nicknamed "Toot Toot Sonic Warrior" by Sonic fans) and "[[Cosmic Eternity]]".<br />
<br />
The US version was delayed a few months to have a new soundtrack composed by [[Spencer Nilsen]], who did other [[Sega CD]] soundtracks as well as some early [[Sega Saturn]] soundtracks. All the music (save for the Past tunes, which were in [[Pulse-code modulation|PCM audio]] rather than [[wikipedia:Red Book (audio CD standard)|Red Book CD audio]]) was replaced, and new themes were composed, cancelling the similar rhythms and beats with the Present, Good Future, and Bad Future media. The rhythm continuation can only be heard in the PAL Version, while the NTSC version has its own rhythm similarities. A new theme was created called "[[Sonic Boom]]" which was performed by [[Pastiche]]. Both the opening and ending had similar lyrics but different instrumentation. Every re-release of the game in the US exclusively has this soundtrack, including both the PC version and the one in ''[[Sonic Gems Collection]]'' (the latter having the American soundtrack even in Europe); the Japanese soundtrack surfaced in ''[[Sonic & Knuckles Collection|Sonic Screensaver]]'', but otherwise has never made it to the States. The boss theme for the PAL version of Sonic CD uses elements from [[wikipedia:Hall_&_Oates|Hall & Oates']] "[http://www.youtube.com/watch?v=vouDK-LELEU I Can't Go for That(No Can Do)]" and "[http://www.youtube.com/watch?v=XXSucRO3Iyw Work That Sucker To Death]" by Xavier.<br />
<br />
The US version also replaced Amy Rose's name in the manual with that of [[Princess Sally]] to garner support for the television show, despite the fact that the Princess Sally character was already established.<br />
<br />
The race with Metal Sonic also plays the default music according to the current level. But the JPN/EU version always play the Bad Future theme. The "Little Planet" theme is played in the Time Attack screen in the US version instead of 2nd Title screen track. The ability to re-start the level at the cost of a life was added by pausing the game and pressing {{A}}+{{B}}+{{C}}.<br />
<br />
===PC version===<br />
A version available for the personal computer was released in Japan on August 9, 1996, with a North American version in August 26, 1996, and a European version in October 3, 1996. Among the most noteworthy changes of this version was the fact that the entire FMV anime intro and ending sequence were available for this version. The Mega-CD version only had a truncated version of the intro and ending sequence. The Japanese version of the game had its manual translated from the US version, and all versions had the US soundtrack, with the "Past" tunes converted to normal CD tracks. Also on the disc is a short video clip of a pencil sketch of Sonic in action. Unfortunately, the PC version is not compatible with Windows XP or Windows Vista without the use of a homebrewed [[Media:SonicCDfix.zip|patch]] created by Korama ([http://forumsx.sonic-cult.org/index.php?showtopic=6039 ]). <br />
<br />
===Sonic Gems version===<br />
In addition to the PC port, a modified version of it is part of the [[Nintendo GameCube]] (and, in Japan and Europe, [[PlayStation 2]]) compilation ''[[Sonic Gems Collection]]''. The soundtrack in this version depends on the console region. Europe consoles use the American soundtrack instead of Japanese one, however. Water in [[Tidal Tempest]] appears clear instead of green (as it does in the Sega CD version), possibly related to the Windows compatibility problems.<br />
<br />
==Manuals==<br />
* [[Sonic CD US Manual]]<br />
* [[Sonic CD EU Manual]]<br />
* [[Sonic CD JP Manual]]<br />
* [[Sonic CD (PC) US Manual]]<br />
* [[Sonic CD (PC) EU Manual]]<br />
* [[Sonic CD (PC) JP Manual]]<br />
<br />
==Also Released On==<br />
* ''[[Sonic & Garfield Pack]]'' for the PC (1999)<br />
* ''[[Twin Pack: Sonic CD and Sonic & Knuckles Collection]]'' (2002)<br />
* ''[[Sonic Gems Collection]]'' for the [[Nintendo GameCube]] and [[Sony Playstation 2]] (2005)<br />
<br />
==Voice actors==<br />
{| class="wikitable"<br />
|-<br />
! Role<br />
! Voice Actor<br />
|-<br />
|[[Sonic the Hedgehog]]<br />
|Uncredited<br />
|-<br />
|[[Amy Rose]]<br />
|[[Lynn Harris]]<br />
|}<br />
<br />
<br />
==Production Credits==<br />
Executive Producer: [[Hayao Nakayama]]<br><br />
Producers: [[Minoru Kanari]], [[Makoto Oshitani]]<br><br />
Director: [[Naoto Oshima]]<br><br />
Program Director: [[Keiichi Yamamoto]]<br><br />
Art Director: Hiroyuki Kawaguchi<br><br />
Sound Director: [[Yukifumi Makino]]<br><br />
Game Designers: [[Hiroaki Chino]], [[Kenichi Ono]], Yuichiro Yokoyama, [[Takao Miyoshi]], [[Akira Nishino]]<br><br />
Character Designer: [[Kazuyuki Hoshino]]<br><br />
Landscape Designers: Hiroyuki Kawaguchi, [[Takumi Miyake]], Masahiro Sanpei, [[Masato Nishimura]], Hideaki Kurata<br><br />
Special Stage Designers: [[Kazuyuki Hoshino]], [[Judy Totoya]]<br><br />
Special Stage Progammer: [[Keiichi Yamamoto]]<br><br />
Animation Programmers: Yuichiro Mine, [[Eiji Horita]]<br><br />
Animation Visual Directors: Hiroyuki Kawaguchi, Masahiro Sanpei<br><br />
Visual Design: [[Kazuyuki Hoshino]], [[Takumi Miyake]]<br><br />
Chief Programmer: [[Matsuhide Mizoguchi]]<br><br />
Programmers: Yuichi Matsuoka, Hiroshi Takei, Tatsuya Satoh, Noritaka Yakita<br><br />
Sound Effects: [[Yukifumi Makino]]<br><br />
Sound Programmer: [[Yukifumi Makino]]<br><br />
Development Support: [[Al Nilsen]]<br><br />
Promoter: Hiroyuki Tanaka<br><br />
Music (Original/JPN): [[Naofumi Hataya]] and [[Masafumi Ogata]]<br><br />
Music (US): [[Spencer Nilsen]], David Young<br><br />
<br />
==Animation Staff==<br />
Producers: Yasuo Yamaguchi, Mutsumi Kido<br><br />
Director: Yukio Kaizawa, Ryo Watabe (Being Co. Ltd.)<br><br />
Art Director: Shinzou Yuki<br><br />
Chief Key Animator: Hisashi Eguchi (Studio Junio)<br><br />
Key Animator: Tetsuya Kumagai, Toshiyuki Komaru, Yasuyuki Shimizu, Ichiro Furuichi, Kenji Kajiwara<br><br />
Camera Director: Masaru Banzai<br><br />
Production Manager: Kohji Sekiguchi<br><br />
Assistant Production Manager: Kouichi Hirose<br><br />
In Cooperation With: Studio Junio<br><br />
Produced By: Toel Animation Co.Ltd<br><br />
Recorded At: Birdman Mod Studio<br><br />
<br />
==Special Edition For North America==<br />
Music Composed And Produced By: [[Spencer Nilsen]], David Young<br><br />
Vocal By: Sanday Cressman, Jenny Meltzer, Becky West<br><br />
Drums & Percussion By: Brad Kaiser<br> <br />
Guitars By: Erik Frykman<br><br />
Recorded And Mixed By: Sega Multmedia Studio(Sega Of America), Intermix<br><br />
Addtional Music Composed And Produced By: Sterling<br><br />
Bass: Bobby Vega<br><br />
Percusion: Armando Peraza<br><br />
Engineer: Charles Albert<br><br />
Assistant Engineers: Roosevelt Hoover, Maurice Jackson<br><br />
<br />
Special Thanks: [[Naofumi Hataya]], Masafumi Ogata, [[Daisuke Saito]], [[Hiroshi Kubota]], [[Reiko Kodama]], [[Yoshiaki Kashima]], [[Takenobu Mitsuyoshi]], [[Masaru Setsumaru]], Hifiri Aoki, Stene Ray Burton, James Michael Spahn, Kounosuke Yoshio, [[Tomoko Sasaki]], Aki Kamta, [[Fujio Minegishi]], [[Jina Ishiwatari]], Katsufumi Yoshimori, Tetsuo Akagi, Kaeko Itoh, Hiromi Nakatani, Hiroshi Fukuda, Etsuko Yamada, Ryuichiro Kutsuzawa, Takashi Lwade, [[Michikazu Tamamura]], Masumi Uchida, [[Tohru Watanuki]], [[Makoto Suzuki]], Audix, Digital Support Group, Fairlight E.S.P, Opcode, Otari, Zoom<br />
<br />
==Resources==<br />
===Original Sound Version Recordings===<br />
For the Windows version see [[Sonic CD for Windows 95 OST]] for a download page. For the Japanese Sega CD version see [[Sonic CD (Japan & PAL Regions) OST]].<br />
<br />
===Artwork===<br />
<gallery><br />
Image:Soniccd with timestone.jpg<br />
Image:SSS SONIC43.png<br />
Image:SSS SONIC35.png<br />
Image:Metal cd02.png<br />
Image:SSS SONIC36.png<br />
Image:SSS SONIC39.png<br />
</gallery><br />
<br />
==Scans==<br />
===Sega CD===<br />
<gallery><br />
Image:Scd-box-us.jpg|US cover<br />
Image:Soniccd mcd us cd.jpg|US disc<br />
Image:Scd mcd us nfr disc.jpg|US 'Not For Resale' disc<br />
</gallery><br />
<br />
<gallery><br />
Image:Scd-box-eu.jpg|EU front cover<br />
Image:Scd mcd eu back cover.jpg|EU back cover<br />
Image:Soniccd mcd eu cd.jpg|EU disc<br />
</gallery><br />
<br />
<gallery><br />
Image:Scd-box-jap.jpg|JP front cover<br />
Image:Scd segacd jp back cover.jpg|JP back cover<br />
Image:Sonic-cd-mcd-jp-disc.jpg|JP disc<br />
</gallery><br />
<br />
===PC===<br />
<gallery><br />
Image:Scd pc us front cover.jpg|US front cover<br />
Image:Scd pc us back cover.jpg|US back cover<br />
Image:Soniccd pc us cd.jpg|US PC disc<br />
Image:Soniccd pc us expert cd.jpg|Budget US PC disc<br />
</gallery><br />
<br />
<gallery><br />
Image:SCDPC-disc.jpg|UK PC disc<br />
Image:scd_german_cover.JPG|German PC cover<br />
</gallery><br />
<br />
[[Category:Sega CD Games]]<br />
[[Category:PC Games]]<br />
{{SonicCDZones}}<br />
{{SonicGenesisGames}}</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Bubbles&diff=96290Bubbles2009-01-09T07:32:56Z<p>Xkeeper: </p>
<hr />
<div>[[Image:Bubbles.png|thumbnail|150px|Bubbles as depicted in the Sonic 3 manual|right]]<br />
<br />
<br />
'''Bubbles''' is a puffer-like [[badnik]] found in [[Marble Garden]]. It is similar in both behaviour and appearance to the [[Pointdexter|Pointdexters]] found in [[Hydrocity Zone]]. They are primarily blue in colour. Bubbles are known for their spikes, which they can retract and protract at ease. Bubbles can also float in the air, meaning they can be a difficult badnik to predict. They can only be defeated if they are hit without their spikes showing. Attempting to hit a Bubbles badnik while they have their spikes protruding will result in the loss of a [[Shield#Sonic_3_&_Knuckles|shield]], [[rings]], or a life.<br />
<br />
{{S3Enemies}}<br />
[[Category:Sonic the Hedgehog 3 Badniks]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Bubbles&diff=96289Bubbles2009-01-09T07:32:21Z<p>Xkeeper: please learn how to do wiki formatting before continuing</p>
<hr />
<div>[[Image:Bubbles.png|thumbnail|150px|Bubbles as depicted in the Sonic 3 manual|right]]<br />
<br />
<br />
The '''Bubbles''' is a puffer-like [[badnik]] found in [[Marble Garden]]. It is similar in both behaviour and appearance to the [[Pointdexter|Pointdexters]] found in [[Hydrocity Zone]]. They are primarily blue in colour. Bubbles are known for their spikes, which they can retract and protract at ease. Bubbles can also float in the air, meaning they can be a difficult badnik to predict. They can only be defeated if they are hit without their spikes showing. Attempting to hit a Bubbles badnik while they have their spikes protruding will result in the loss of a [[Shield#Sonic_3_&_Knuckles|shield]], [[rings]], or a life.<br />
<br />
{{S3Enemies}}<br />
[[Category:Sonic the Hedgehog 3 Badniks]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG_How-to:Use_SonMapEd/Part_1&diff=96186SCHG How-to:Use SonMapEd/Part 12009-01-09T01:50:09Z<p>Xkeeper: Text replace - 'pallet' to 'palette'</p>
<hr />
<div>{{GuideBy|Chimpo}}<br />
<br />
So ScarredSun won't port over that skin I want unless I do her that [[SonMapEd]] tutorial she wants. Being a man of reason, I refused until I finally gave in. By gave in, I mean I have nothing to do. I'm splitting up this tutorial in parts because doing a large one in one night would end up with less detailed instructions and be way too time consuming for me, and because it's easier to go back and shit.<br />
<br />
The following tutorial covers the very basic loading of files and exporting and importing sprite frames for tile editing purposes without editing the mappings:<br />
<br />
<br />
[[Image:SonMapEd01.gif|center]]<br />
<br />
<br />
So right away, this is what SonMapED looks like when you start it up with nothing loaded. You have your tile mappings window on the top left, your palettes window in the top middle, your sprite frames window on the top right, and all the tile data window in the big window in the bottom. You're probably freaked out, but stop being such a wuss, lets get this party started.<br />
<br />
<br />
[[Image:SonMapEd02.gif|center]]<br />
<br />
<br />
First off, we're going to have to set what format we're using. Because I'm using a Sonic 1 Disassembly for this example, I'm going to set it to Sonic 1. Hit '''Ctrl+Alt+Shift+1''' or just go to '''Settings -> Format -> Sonic 1'''. There goes your first hurdle. It's obvious which one you have to pick if you're editing Sonic 2's data. (Hint: Sonic Crackers.) Carrying on...<br />
<br />
<br />
[[Image:SonMapEd03.gif|center]]<br />
<br />
<br />
So let's load those Tile Graphics. For this tutorial, we'll be editing Sonic's art, so go to '''File -> Load Data File'''. A list of data options should pop up, and the option you want here is '''"Load Uncompressed Tile Graphics"'''. The file browser window will pop up and you'll have to locate the tile graphics in your disassembly, which are usually in the '''''"artunc"''''' folder labeled '''''"sonic.bin"'''''. Open that bin file up and you'll end up with this...<br />
<br />
<br />
[[Image:SonMapEd04.gif|center]]<br />
<br />
<br />
Woooah doggy, thems lots o tiles! "How am I ever going to edit these!?" you might ask yourself. With science. However, before we get to that, lets load our Sonic palette. Yes, I know SonMapED's default palette fits perfectly, but we're doing this step anyway so you don't bitch later.<br />
<br />
<br />
[[Image:SonMapEd05.gif|center]]<br />
<br />
<br />
Like before, we go to '''File -> Load Data File'''. except this time, we select '''"Load Primary or Full Palette"''' or we can just hit '''Ctrl + P'''. Loading these is just like loading the tile graphics. Simply locate them in your disassembly. By default, they're in '''''"palette"''''' under the name '''''"sonic.bin"'''''<br />
<br />
Okay, so our palette is loaded up, but the sprite frame window is still empty, just how do we edit these suckers? Simply my jedi friend. We need to load our mappings for Sonic first.<br />
<br />
<br />
[[Image:SonMapEd06.gif|center]]<br />
<br />
<br />
Again, like before we go to '''File -> Load Data File'''. Now this time, we go to '''"Load Sprite Mappings"''' or hit '''Ctrl + M'''. Sonic's mappings are located in '''''"_maps"''''' which are of course named, surprise surprise, '''''"Sonic.asm"'''''. Load it up, and you'll end up with....<br />
<br />
<br />
[[Image:SonMapEd07.gif|center]]<br />
<br />
<br />
This? Something must have gone wrong right? No, shut up. We're not finished. Sonic requires yet another file called Dynamic Pattern Load Cues or DPLCs for short. The exact reason for this I'm not sure, but I'll be sure to sound smart when I edit this part later when someone corrects me. It has to do with unicorns. So anywho, lets load those DPLCs.<br />
<br />
<br />
[[Image:SonMapEd08.gif|center]]<br />
<br />
<br />
By now, you should know the process. Go to '''File -> Load Data File''', then select '''"Load Sprite Pattern Cues"''' or '''Ctrl + C''' then look for Sonic's DPLCs, which are by default ''''''in _inc'''''' named '''''"Sonic dynamic pattern load cues.asm"'''''<br />
<br />
<br />
[[Image:SonMapEd09.gif|center]]<br />
<br />
<br />
Congratulations, you figured out how to load files. Aren't you special? It's time for part 2 mother quackers.<br />
<br />
<br />
[[Image:SonMapEd10.gif|center]]<br />
<br />
<br />
Before we go further, please take a look at the palette line. Specifically, the part in white. These are the transparent colors. If you're going to do any importing and exporting, then you MUST edit these or else your image will be guaranteed to fuck up from my experience.<br />
<br />
Since we're only using palette line 0, double click on the first palette line's entry to pop up the color mixer.<br />
<br />
<br />
[[Image:SonMapEd11.gif|center]]<br />
<br />
<br />
You want to pick a color that does not conflict or anywhere similar to the other colors in the palette line. In this case, I picked a dark purple to be my transparent color. You don't need to know any specific RGB Genesis values, just drop it anywhere and SonMapED will automatically generate it to the closest Genesis color. once you find your color, hit OK to close the box and confirm your choice.<br />
<br />
<br />
[[Image:SonMapEd12.gif|center]]<br />
<br />
<br />
<br />
The background color on all windows should now change to the color of your choice. That means you did a good job. If anything other than the background color changed, you fucked up. Start over.<br />
<br />
<br />
[[Image:SonMapEd13.gif|center]]<br />
<br />
<br />
Another thing I should mention is the Image Importer settings. This is the one I use and I never have never run into a problem with it with the method I use. I don't really know what "Assume Corner is Background" so I just don't touch it. If you're going to be following the rest of this tutorial, I suggest you have these settings.<br />
<br />
Now lets move on. For our next step, we want to go and jump to frame 3 by hitting the ] key. You'll see why I picked 3 in a minute.<br />
<br />
<br />
[[Image:SonMapEd14.gif|center]]<br />
<br />
<br />
Now it's time to export our frame so that it can be edited outside using an external program. SonMapEd doesn't have an editor inside it, but that's cool since this process is easy as shit. All you really need is MS Paint. Hit '''''"File -> Save To Image -> Export Sprite Frame"''''' or '''CTRL+SHIFT+E'''. The file browser should pop up, and save the exported frame to wherever the hell you keep your stuff with whatever name you want. (It's nice to be organized!)<br />
<br />
<br />
[[Image:SonMapEd15.gif|center]]<br />
<br />
<br />
This is what SonMapED spits out. Notice the bright pink boxes. These are the unmapped tile areas, so you can draw cocks in them and SonMapED won't port them into your sprite because there's nothing to port them into. It's nice to leave these areas alone for now so you know what space you have to work with. So right, lets edit this with a program outside. I'm using MS Paint, which is all you really need but any program works just fine.<br />
<br />
<br />
[[Image:SonMapEd16.gif|center]]<br />
<br />
<br />
As you can see, I gave Sonic glasses and cheap Nike Knockoff shoes. Also, be sure to use the exact same colors as the sprite image itself. Don't make your own shades of blue, use the sprite's shades of blues. Anything outside the palette just reduces the chances of it being imported nicely. After you edited the sprite the way you wanted, fill the pink squares with your transparent color and save the image. Now it's time to port the sucker in.<br />
<br />
<br />
[[Image:SonMapEd17.gif|center]]<br />
<br />
<br />
Go to '''''"File -> Load Image -> Load Sprite Over Active Frame"''''' or '''CTRL+SHIFT+I''' and load the file you just saved.<br />
<br />
<br />
[[Image:SonMapEd18.gif|center]]<br />
<br />
<br />
If you did everything right, your sprite should have ported in with success. However...<br />
<br />
<br />
[[Image:SonMapEd19.gif|center]]<br />
<br />
<br />
You'll notice that the sprites next to you have also been affected. This is because these sprites also use the very same tiles you just edited. In case you don't want them to share the tiles, there is a way around it. In fact, it's pretty much what this program was built to do. Edit mappings, it's in the name. For now, lets finish up what we started.<br />
<br />
<br />
[[Image:SonMapEd20.gif|center]]<br />
<br />
<br />
Go to '''File -> Save Data File'''. Since all we did today was edit the tile graphics, we just have to save the '''"Uncompressed Tile Graphics"''' to '''"sonic.bin"''' in '''"artunc"'''. Once you saved it, build your rom and voila, your new art has replaced the old one!<br />
<br />
That concludes the first part of the tutorial. In [[SCHG How-to:Use SonMapEd/Part 2|Part Two]], I'll go in depth on mappings, the pill, and why your vagina bleeds.<br />
<br />
[[Category:SCHG How-tos|Use SonMapEd/Part 1]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG_How-to:Use_Dynamic_Tilesets_in_Sonic_1&diff=96185SCHG How-to:Use Dynamic Tilesets in Sonic 12009-01-09T01:50:07Z<p>Xkeeper: Text replace - 'pallet' to 'palette'</p>
<hr />
<div>{{GuideBy|HPZMan}}<br />
<br />
You will need of Sonic 1 disassembly split+text by Hivebrain (ASM68K).<br />
A method not much hard to make dynamic tiles in Sonic 1 is creating lines to check the actual Act, these lines will "alternate" 16x16 mappings, 256x256 chunks and 8x8 level graphics for Act 1, 2 and 3.<br />
The 8x8 tiles are loaded by PLC (Pattern Load Cue), you will need create dynamic PLC too.<br />
<br />
<br />
<br />
Open up your "Sonic 1.asm" file, and search for "Level:". You will see:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Level<br />
; ---------------------------------------------------------------------------<br />
<br />
Level: ; XREF: GameModeArray<br />
bset #7,($FFFFF600).w; add $80 to screen mode (for pre level sequence)<br />
tst.w ($FFFFFFF0).w<br />
bmi.s loc_37B6<br />
move.b #$E0,d0<br />
bsr.w PlaySound_Special; fade out music<br />
<br />
loc_37B6:<br />
bsr.w ClearPLC<br />
bsr.w Pal_FadeFrom<br />
tst.w ($FFFFFFF0).w<br />
bmi.s Level_ClrRam<br />
move #$2700,sr<br />
move.l #$70000002,($C00004).l<br />
lea (Nem_TitleCard).l,a0; load title card patterns<br />
bsr.w NemDec<br />
move #$2300,sr<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
lea (MainLoadBlocks).l,a2<br />
lea (a2,d0.w),a2<br />
moveq #0,d0<br />
move.b (a2),d0<br />
beq.s loc_37FC<br />
bsr.w LoadPLC; load level patterns</asm><br />
<br />
Change it to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Level<br />
; ---------------------------------------------------------------------------<br />
<br />
Level: ; XREF: GameModeArray<br />
bset #7,($FFFFF600).w; add $80 to screen mode (for pre level sequence)<br />
tst.w ($FFFFFFF0).w<br />
bmi.s loc_37B6<br />
move.b #$E0,d0<br />
bsr.w PlaySound_Special; fade out music<br />
<br />
loc_37B6:<br />
bsr.w ClearPLC<br />
bsr.w Pal_FadeFrom<br />
tst.w ($FFFFFFF0).w<br />
bmi.s Level_ClrRam<br />
move #$2700,sr<br />
move.l #$70000002,($C00004).l<br />
lea (Nem_TitleCard).l,a0; load title card patterns<br />
bsr.w NemDec<br />
move #$2300,sr<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
cmpi.b #2,($FFFFFE11).w; is level Act 3?<br />
bne.s CheckAct2 ; if not, branch<br />
lea (MainLoadBlocks3).l,a2<br />
jmp Level_3<br />
CheckAct2:<br />
cmpi.b #1,($FFFFFE11).w; is level Act 2?<br />
bne.s Level_2 ; if not, branch<br />
lea (MainLoadBlocks2).l,a2<br />
jmp Level_3<br />
Level_2:<br />
lea (MainLoadBlocks).l,a2<br />
Level_3:<br />
lea (a2,d0.w),a2<br />
moveq #0,d0<br />
move.b (a2),d0<br />
beq.s loc_37FC<br />
bsr.w LoadPLC; load level patterns</asm><br />
<br />
Make a search for "Cred_ClrPallet:", you will see:<br />
<br />
<asm>Cred_ClrPallet:<br />
move.l d0,(a1)+<br />
dbf d1,Cred_ClrPallet; fill palette with black ($0000)<br />
<br />
moveq #3,d0<br />
bsr.w PalLoad1; load Sonic's palette<br />
move.b #$8A,($FFFFD080).w; load credits object<br />
jsr ObjectsLoad<br />
jsr BuildSprites<br />
bsr.w EndingDemoLoad<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
lea (MainLoadBlocks).l,a2; load block mappings etc<br />
lea (a2,d0.w),a2<br />
moveq #0,d0<br />
move.b (a2),d0<br />
beq.s loc_5862<br />
bsr.w LoadPLC; load level patterns</asm><br />
<br />
Change it to:<br />
<br />
<asm>Cred_ClrPallet:<br />
move.l d0,(a1)+<br />
dbf d1,Cred_ClrPallet; fill palette with black ($0000)<br />
<br />
moveq #3,d0<br />
bsr.w PalLoad1; load Sonic's palette<br />
move.b #$8A,($FFFFD080).w; load credits object<br />
jsr ObjectsLoad<br />
jsr BuildSprites<br />
bsr.w EndingDemoLoad<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
cmpi.b #2,($FFFFFE11).w; is level Act 3?<br />
bne.s Check_Act2 ; if not, branch<br />
lea (MainLoadBlocks3).l,a2; load block mappings etc<br />
jmp Cred_ClrPallet_3<br />
Check_Act2:<br />
cmpi.b #1,($FFFFFE11).w; is level Act 2?<br />
bne.s Cred_ClrPallet_2 ; if not, branch<br />
lea (MainLoadBlocks2).l,a2; load block mappings etc<br />
jmp Cred_ClrPallet_3<br />
Cred_ClrPallet_2:<br />
lea (MainLoadBlocks).l,a2; load block mappings etc<br />
Cred_ClrPallet_3:<br />
lea (a2,d0.w),a2<br />
moveq #0,d0<br />
move.b (a2),d0<br />
beq.s loc_5862<br />
bsr.w LoadPLC; load level patterns</asm><br />
<br />
Search for "MainLoadBlockLoad:", you will see:<br />
<br />
<asm>MainLoadBlockLoad:; XREF: Level; EndingSequence<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
lea (MainLoadBlocks).l,a2<br />
lea (a2,d0.w),a2<br />
move.l a2,-(sp)<br />
addq.l #4,a2<br />
movea.l (a2)+,a0<br />
lea ($FFFFB000).w,a1; RAM address for 16x16 mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
movea.l (a2)+,a0<br />
lea ($FF0000).l,a1; RAM address for 256x256 mappings<br />
bsr.w KosDec<br />
bsr.w LevelLayoutLoad<br />
move.w (a2)+,d0<br />
move.w (a2),d0<br />
andi.w #$FF,d0<br />
cmpi.w #$103,($FFFFFE10).w; is level SBZ3 (LZ4) ?<br />
bne.s MLB_ChkSBZPal; if not, branch<br />
moveq #$C,d0; use SB3 palette</asm><br />
<br />
Change to:<br />
<br />
<asm>MainLoadBlockLoad:; XREF: Level; EndingSequence<br />
moveq #0,d0<br />
move.b ($FFFFFE10).w,d0<br />
lsl.w #4,d0<br />
cmpi.b #2,($FFFFFE11).w; is level Act 3?<br />
bne.s Check_Act_2 ; if not, branch<br />
lea (MainLoadBlocks3).l,a2<br />
jmp MainLoadBlockLoad3<br />
Check_Act_2:<br />
cmpi.b #1,($FFFFFE11).w; is level Act 2?<br />
bne.s MainLoadBlockLoad2 ; if not, branch<br />
lea (MainLoadBlocks2).l,a2<br />
jmp MainLoadBlockLoad3<br />
MainLoadBlockLoad2:<br />
lea (MainLoadBlocks).l,a2<br />
MainLoadBlockLoad3:<br />
lea (a2,d0.w),a2<br />
move.l a2,-(sp)<br />
addq.l #4,a2<br />
movea.l (a2)+,a0<br />
lea ($FFFFB000).w,a1; RAM address for 16x16 mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
movea.l (a2)+,a0<br />
lea ($FF0000).l,a1; RAM address for 256x256 mappings<br />
bsr.w KosDec<br />
bsr.w LevelLayoutLoad<br />
move.w (a2)+,d0<br />
move.w (a2),d0<br />
andi.w #$FF,d0<br />
cmpi.w #$103,($FFFFFE10).w; is level SBZ3 (LZ4) ?<br />
bne.s MLB_ChkSBZPal; if not, branch<br />
moveq #$C,d0; use SB3 palette</asm><br />
<br />
Search for "MainLoadBlocks:", you will see:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Main level load blocks<br />
; ---------------------------------------------------------------------------<br />
MainLoadBlocks:<br />
include "_inc\Main level load blocks.asm"</asm><br />
<br />
Change to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Main level load blocks<br />
; ---------------------------------------------------------------------------<br />
MainLoadBlocks:<br />
include "_inc\Main level load blocks.asm"<br />
MainLoadBlocks2:<br />
include "_inc\Main level load blocks2.asm"<br />
MainLoadBlocks3:<br />
include "_inc\Main level load blocks3.asm"</asm><br />
<br />
<br />
Open the folder called _inc, create 2 copies from the file 'Main level load blocks.asm', renaming the copies to 'Main level load blocks2.asm' and 'Main level load blocks3.asm'.<br />
Open Main level load blocks2.asm and Main level load blocks3.asm, you can see:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Main level load blocks<br />
;<br />
; ===FORMAT===<br />
; level patterns + (1st PLC num * 10^6)<br />
; 16x16 mappings + (2nd PLC num * 10^6)<br />
; 256x256 mappings<br />
; blank, music (unused), pal index (unused), pal index<br />
; ---------------------------------------------------------------------------<br />
dc.l Nem_GHZ_2nd+$4000000<br />
dc.l Blk16_GHZ+$5000000<br />
dc.l Blk256_GHZ<br />
dc.b 0, $81, 4, 4<br />
dc.l Nem_LZ+$6000000<br />
dc.l Blk16_LZ+$7000000<br />
dc.l Blk256_LZ<br />
dc.b 0, $82, 5, 5<br />
dc.l Nem_MZ+$8000000<br />
dc.l Blk16_MZ+$9000000<br />
dc.l Blk256_MZ<br />
dc.b 0, $83, 6, 6<br />
dc.l Nem_SLZ+$A000000<br />
dc.l Blk16_SLZ+$B000000<br />
dc.l Blk256_SLZ<br />
dc.b 0, $84, 7, 7<br />
dc.l Nem_SYZ+$C000000<br />
dc.l Blk16_SYZ+$D000000<br />
dc.l Blk256_SYZ<br />
dc.b 0, $85, 8, 8<br />
dc.l Nem_SBZ+$E000000<br />
dc.l Blk16_SBZ+$F000000<br />
dc.l Blk256_SBZ<br />
dc.b 0, $86, 9, 9<br />
dc.l Nem_GHZ_2nd; main load block for ending<br />
dc.l Blk16_GHZ<br />
dc.l Blk256_GHZ<br />
dc.b 0, $86, $13, $13<br />
even</asm><br />
<br />
In the file Main level load blocks2.asm, change it to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Main level load blocks<br />
;<br />
; ===FORMAT===<br />
; level patterns + (1st PLC num * 10^6)<br />
; 16x16 mappings + (2nd PLC num * 10^6)<br />
; 256x256 mappings<br />
; blank, music (unused), pal index (unused), pal index<br />
; ---------------------------------------------------------------------------<br />
dc.l Nem_GHZ2_2nd+$4000000<br />
dc.l Blk16_GHZ2+$5000000<br />
dc.l Blk256_GHZ2<br />
dc.b 0, $81, 4, 4<br />
dc.l Nem_LZ2+$6000000<br />
dc.l Blk16_LZ2+$7000000<br />
dc.l Blk256_LZ2<br />
dc.b 0, $82, 5, 5<br />
dc.l Nem_MZ2+$8000000<br />
dc.l Blk16_MZ2+$9000000<br />
dc.l Blk256_MZ2<br />
dc.b 0, $83, 6, 6<br />
dc.l Nem_SLZ2+$A000000<br />
dc.l Blk16_SLZ2+$B000000<br />
dc.l Blk256_SLZ2<br />
dc.b 0, $84, 7, 7<br />
dc.l Nem_SYZ2+$C000000<br />
dc.l Blk16_SYZ2+$D000000<br />
dc.l Blk256_SYZ2<br />
dc.b 0, $85, 8, 8<br />
dc.l Nem_SBZ2+$E000000<br />
dc.l Blk16_SBZ2+$F000000<br />
dc.l Blk256_SBZ2<br />
dc.b 0, $86, 9, 9<br />
dc.l Nem_GHZ2_2nd; main load block for ending<br />
dc.l Blk16_GHZ2<br />
dc.l Blk256_GHZ2<br />
dc.b 0, $86, $13, $13<br />
even</asm><br />
<br />
And in file Main level load blocks3.asm, change to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Main level load blocks<br />
;<br />
; ===FORMAT===<br />
; level patterns + (1st PLC num * 10^6)<br />
; 16x16 mappings + (2nd PLC num * 10^6)<br />
; 256x256 mappings<br />
; blank, music (unused), pal index (unused), pal index<br />
; ---------------------------------------------------------------------------<br />
dc.l Nem_GHZ3_2nd+$4000000<br />
dc.l Blk16_GHZ3+$5000000<br />
dc.l Blk256_GHZ3<br />
dc.b 0, $81, 4, 4<br />
dc.l Nem_LZ3+$6000000<br />
dc.l Blk16_LZ3+$7000000<br />
dc.l Blk256_LZ3<br />
dc.b 0, $82, 5, 5<br />
dc.l Nem_MZ3+$8000000<br />
dc.l Blk16_MZ3+$9000000<br />
dc.l Blk256_MZ3<br />
dc.b 0, $83, 6, 6<br />
dc.l Nem_SLZ3+$A000000<br />
dc.l Blk16_SLZ3+$B000000<br />
dc.l Blk256_SLZ3<br />
dc.b 0, $84, 7, 7<br />
dc.l Nem_SYZ3+$C000000<br />
dc.l Blk16_SYZ3+$D000000<br />
dc.l Blk256_SYZ3<br />
dc.b 0, $85, 8, 8<br />
dc.l Nem_SBZ3+$E000000<br />
dc.l Blk16_SBZ3+$F000000<br />
dc.l Blk256_SBZ3<br />
dc.b 0, $86, 9, 9<br />
dc.l Nem_GHZ3_2nd; main load block for ending<br />
dc.l Blk16_GHZ3<br />
dc.l Blk256_GHZ3<br />
dc.b 0, $86, $13, $13<br />
even</asm><br />
<br />
Search for "Blk16_GHZ:", you will see:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Compressed graphics - primary patterns and block mappings<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ: incbin map16\ghz.bin<br />
even<br />
Nem_GHZ_1st: incbin artnem\8x8ghz1.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ_2nd: incbin artnem\8x8ghz2.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ: incbin map256\ghz.bin<br />
even<br />
Blk16_LZ: incbin map16\lz.bin<br />
even<br />
Nem_LZ: incbin artnem\8x8lz.bin; LZ primary patterns<br />
even<br />
Blk256_LZ: incbin map256\lz.bin<br />
even<br />
Blk16_MZ: incbin map16\mz.bin<br />
even<br />
Nem_MZ: incbin artnem\8x8mz.bin; MZ primary patterns<br />
even<br />
Blk256_MZ: incbin map256\mz.bin<br />
even<br />
Blk16_SLZ: incbin map16\slz.bin<br />
even<br />
Nem_SLZ: incbin artnem\8x8slz.bin; SLZ primary patterns<br />
even<br />
Blk256_SLZ: incbin map256\slz.bin<br />
even<br />
Blk16_SYZ: incbin map16\syz.bin<br />
even<br />
Nem_SYZ: incbin artnem\8x8syz.bin; SYZ primary patterns<br />
even<br />
Blk256_SYZ: incbin map256\syz.bin<br />
even<br />
Blk16_SBZ: incbin map16\sbz.bin<br />
even<br />
Nem_SBZ: incbin artnem\8x8sbz.bin; SBZ primary patterns<br />
even<br />
Blk256_SBZ: incbin map256\sbz.bin<br />
even</asm><br />
<br />
Change to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Compressed graphics - primary patterns and block mappings<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ: incbin map16\ghz.bin<br />
even<br />
Nem_GHZ_1st: incbin artnem\8x8ghz1.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ_2nd: incbin artnem\8x8ghz2.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ: incbin map256\ghz.bin<br />
even<br />
Blk16_LZ: incbin map16\lz.bin<br />
even<br />
Nem_LZ: incbin artnem\8x8lz.bin; LZ primary patterns<br />
even<br />
Blk256_LZ: incbin map256\lz.bin<br />
even<br />
Blk16_MZ: incbin map16\mz.bin<br />
even<br />
Nem_MZ: incbin artnem\8x8mz.bin; MZ primary patterns<br />
even<br />
Blk256_MZ: incbin map256\mz.bin<br />
even<br />
Blk16_SLZ: incbin map16\slz.bin<br />
even<br />
Nem_SLZ: incbin artnem\8x8slz.bin; SLZ primary patterns<br />
even<br />
Blk256_SLZ: incbin map256\slz.bin<br />
even<br />
Blk16_SYZ: incbin map16\syz.bin<br />
even<br />
Nem_SYZ: incbin artnem\8x8syz.bin; SYZ primary patterns<br />
even<br />
Blk256_SYZ: incbin map256\syz.bin<br />
even<br />
Blk16_SBZ: incbin map16\sbz.bin<br />
even<br />
Nem_SBZ: incbin artnem\8x8sbz.bin; SBZ primary patterns<br />
even<br />
Blk256_SBZ: incbin map256\sbz.bin<br />
even<br />
; ---------------------------------------------------------------------------<br />
; Act2<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ2: incbin map16\ghz2.bin<br />
even<br />
Nem_GHZ2_1st: incbin artnem\8x8ghz12.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ2_2nd: incbin artnem\8x8ghz22.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ2: incbin map256\ghz2.bin<br />
even<br />
Blk16_LZ2: incbin map16\lz2.bin<br />
even<br />
Nem_LZ2: incbin artnem\8x8lz2.bin; LZ primary patterns<br />
even<br />
Blk256_LZ2: incbin map256\lz2.bin<br />
even<br />
Blk16_MZ2: incbin map16\mz2.bin<br />
even<br />
Nem_MZ2: incbin artnem\8x8mz2.bin; MZ primary patterns<br />
even<br />
Blk256_MZ2: incbin map256\mz2.bin<br />
even<br />
Blk16_SLZ2: incbin map16\slz2.bin<br />
even<br />
Nem_SLZ2: incbin artnem\8x8slz2.bin; SLZ primary patterns<br />
even<br />
Blk256_SLZ2: incbin map256\slz2.bin<br />
even<br />
Blk16_SYZ2: incbin map16\syz2.bin<br />
even<br />
Nem_SYZ2: incbin artnem\8x8syz2.bin; SYZ primary patterns<br />
even<br />
Blk256_SYZ2: incbin map256\syz2.bin<br />
even<br />
Blk16_SBZ2: incbin map16\sbz2.bin<br />
even<br />
Nem_SBZ2: incbin artnem\8x8sbz2.bin; SBZ primary patterns<br />
even<br />
Blk256_SBZ2: incbin map256\sbz2.bin<br />
even<br />
; ---------------------------------------------------------------------------<br />
; Act3<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ3: incbin map16\ghz3.bin<br />
even<br />
Nem_GHZ3_1st: incbin artnem\8x8ghz13.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ3_2nd: incbin artnem\8x8ghz23.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ3: incbin map256\ghz3.bin<br />
even<br />
Blk16_LZ3: incbin map16\lz3.bin<br />
even<br />
Nem_LZ3: incbin artnem\8x8lz3.bin; LZ primary patterns<br />
even<br />
Blk256_LZ3: incbin map256\lz3.bin<br />
even<br />
Blk16_MZ3: incbin map16\mz3.bin<br />
even<br />
Nem_MZ3: incbin artnem\8x8mz3.bin; MZ primary patterns<br />
even<br />
Blk256_MZ3: incbin map256\mz3.bin<br />
even<br />
Blk16_SLZ3: incbin map16\slz3.bin<br />
even<br />
Nem_SLZ3: incbin artnem\8x8slz3.bin; SLZ primary patterns<br />
even<br />
Blk256_SLZ3: incbin map256\slz3.bin<br />
even<br />
Blk16_SYZ3: incbin map16\syz3.bin<br />
even<br />
Nem_SYZ3: incbin artnem\8x8syz3.bin; SYZ primary patterns<br />
even<br />
Blk256_SYZ3: incbin map256\syz3.bin<br />
even<br />
Blk16_SBZ3: incbin map16\sbz3.bin<br />
even<br />
Nem_SBZ3: incbin artnem\8x8sbz3.bin; SBZ primary patterns<br />
even<br />
Blk256_SBZ3: incbin map256\sbz3.bin<br />
even</asm><br />
<br />
Create copies of this files, renaming to "2" and "3". Example: Creating 2 copies of the file 8x8ghz.bin and renaming the first copy to 8x8ghz11.bin, and the second one to 8x8ghz12.bin<br />
If you have this original files unchanged and don't want to rename, you can download it here:<br />
[http://www.hotshare.net/en/file/71594-32202158af.html]<br />
Extract it into your disassembly main folder.<br />
<br />
Search for "LoadPLC:", you will see:<br />
<br />
<asm>LoadPLC:<br />
movem.l a1-a2,-(sp)<br />
lea (ArtLoadCues).l,a1<br />
add.w d0,d0<br />
move.w (a1,d0.w),d0<br />
lea (a1,d0.w),a1<br />
lea ($FFFFF680).w,a2</asm><br />
<br />
Change to:<br />
<br />
<asm>LoadPLC:<br />
movem.l a1-a2,-(sp)<br />
cmpi.b #2,($FFFFFE11).w; is level Act 3?<br />
bne.s CheckAct_2 ; if not, branch<br />
lea (ArtLoadCues3).l,a1<br />
jmp LoadPLC_3<br />
CheckAct_2:<br />
cmpi.b #1,($FFFFFE11).w; is level Act 2?<br />
bne.s LoadPLC_2 ; if not, branch<br />
lea (ArtLoadCues2).l,a1<br />
jmp LoadPLC_3<br />
LoadPLC_2:<br />
lea (ArtLoadCues).l,a1<br />
LoadPLC_3:<br />
add.w d0,d0<br />
move.w (a1,d0.w),d0<br />
lea (a1,d0.w),a1<br />
lea ($FFFFF680).w,a2</asm><br />
<br />
Search for "LoadPLC2:", you will see:<br />
<br />
<asm>LoadPLC2:<br />
movem.l a1-a2,-(sp)<br />
lea (ArtLoadCues).l,a1<br />
add.w d0,d0<br />
move.w (a1,d0.w),d0<br />
lea (a1,d0.w),a1<br />
bsr.s ClearPLC<br />
lea ($FFFFF680).w,a2<br />
move.w (a1)+,d0<br />
bmi.s loc_15D8</asm><br />
<br />
Change to:<br />
<br />
<asm>LoadPLC2:<br />
movem.l a1-a2,-(sp)<br />
cmpi.b #2,($FFFFFE11).w; is level Act 3?<br />
bne.s Check_2_Act2 ; if not, branch<br />
lea (ArtLoadCues3).l,a1<br />
jmp LoadPLC2_3 <br />
Check_2_Act2:<br />
cmpi.b #1,($FFFFFE11).w; is level Act 2?<br />
bne.s LoadPLC2_2 ; if not, branch<br />
lea (ArtLoadCues2).l,a1<br />
jmp LoadPLC2_3 <br />
LoadPLC2_2:<br />
lea (ArtLoadCues).l,a1<br />
LoadPLC2_3:<br />
add.w d0,d0<br />
move.w (a1,d0.w),d0<br />
lea (a1,d0.w),a1<br />
bsr.s ClearPLC<br />
lea ($FFFFF680).w,a2<br />
move.w (a1)+,d0<br />
bmi.s loc_15D8</asm><br />
<br />
Search for ArtLoadCues:, you will see:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Pattern load cues<br />
; ---------------------------------------------------------------------------<br />
ArtLoadCues:<br />
include "_inc\Pattern load cues.asm"</asm><br />
<br />
Change it to:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Pattern load cues<br />
; ---------------------------------------------------------------------------<br />
ArtLoadCues:<br />
include "_inc\Pattern load cues.asm"<br />
ArtLoadCues2:<br />
include "_inc\Pattern load cues2.asm"<br />
ArtLoadCues3:<br />
include "_inc\Pattern load cues3.asm"</asm><br />
<br />
Done this proccedure, '''if you not changed file Pattern load cues.asm,''' create a new file named to Pattern load cues2.asm, and paste this data into it:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Pattern load cues - index<br />
; ---------------------------------------------------------------------------<br />
dc.w PLC_2Main-ArtLoadCues2, PLC_2Main2-ArtLoadCues2<br />
dc.w PLC_2Explode-ArtLoadCues2, PLC_2GameOver-ArtLoadCues2<br />
dc.w PLC_2GHZ-ArtLoadCues2, PLC_2GHZ2-ArtLoadCues2<br />
dc.w PLC_2LZ-ArtLoadCues2, PLC_2LZ2-ArtLoadCues2<br />
dc.w PLC_2MZ-ArtLoadCues2, PLC_2MZ2-ArtLoadCues2<br />
dc.w PLC_2SLZ-ArtLoadCues2, PLC_2SLZ2-ArtLoadCues2<br />
dc.w PLC_2SYZ-ArtLoadCues2, PLC_2SYZ2-ArtLoadCues2<br />
dc.w PLC_2SBZ-ArtLoadCues2, PLC_2SBZ2-ArtLoadCues2<br />
dc.w PLC_2TitleCard-ArtLoadCues2, PLC_2Boss-ArtLoadCues2<br />
dc.w PLC_2Signpost-ArtLoadCues2, PLC_2Warp-ArtLoadCues2<br />
dc.w PLC_2SpeStage-ArtLoadCues2, PLC_2GHZAnimals-ArtLoadCues2<br />
dc.w PLC_2LZAnimals-ArtLoadCues2, PLC_2MZAnimals-ArtLoadCues2<br />
dc.w PLC_2SLZAnimals-ArtLoadCues2, PLC_2SYZAnimals-ArtLoadCues2<br />
dc.w PLC_2SBZAnimals-ArtLoadCues2, PLC_2SpeStResult-ArtLoadCues2<br />
dc.w PLC_2Ending-ArtLoadCues2, PLC_2TryAgain-ArtLoadCues2<br />
dc.w PLC_2EggmanSBZ2-ArtLoadCues2, PLC_2FZBoss-ArtLoadCues2<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - standard block 1<br />
; ---------------------------------------------------------------------------<br />
PLC_2Main: dc.w 4<br />
dc.l Nem_Lamp; lamppost<br />
dc.w $F400<br />
dc.l Nem_Hud; HUD<br />
dc.w $D940<br />
dc.l Nem_Lives; lives counter<br />
dc.w $FA80<br />
dc.l Nem_Ring; rings<br />
dc.w $F640<br />
dc.l Nem_Points; points from enemy<br />
dc.w $F2E0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - standard block 2<br />
; ---------------------------------------------------------------------------<br />
PLC_2Main2: dc.w 2<br />
dc.l Nem_Monitors; monitors<br />
dc.w $D000<br />
dc.l Nem_Shield; shield<br />
dc.w $A820<br />
dc.l Nem_Stars; invincibility stars<br />
dc.w $AB80<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - explosion<br />
; ---------------------------------------------------------------------------<br />
PLC_2Explode: dc.w 0<br />
dc.l Nem_Explode; explosion<br />
dc.w $B400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - game/time over<br />
; ---------------------------------------------------------------------------<br />
PLC_2GameOver: dc.w 0<br />
dc.l Nem_GameOver; game/time over<br />
dc.w $ABC0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Green Hill<br />
; ---------------------------------------------------------------------------<br />
PLC_2GHZ: dc.w $B<br />
dc.l Nem_GHZ2_1st; GHZ main patterns<br />
dc.w 0<br />
dc.l Nem_GHZ2_2nd; GHZ secondary patterns<br />
dc.w $39A0<br />
dc.l Nem_Stalk; flower stalk<br />
dc.w $6B00<br />
dc.l Nem_PplRock; purple rock<br />
dc.w $7A00<br />
dc.l Nem_Crabmeat; crabmeat enemy<br />
dc.w $8000<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Chopper; chopper enemy<br />
dc.w $8F60<br />
dc.l Nem_Newtron; newtron enemy<br />
dc.w $9360<br />
dc.l Nem_Motobug; motobug enemy<br />
dc.w $9E00<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
PLC_2GHZ2: dc.w 5<br />
dc.l Nem_Swing; swinging platform<br />
dc.w $7000<br />
dc.l Nem_Bridge; bridge<br />
dc.w $71C0<br />
dc.l Nem_SpikePole; spiked pole<br />
dc.w $7300<br />
dc.l Nem_Ball; giant ball<br />
dc.w $7540<br />
dc.l Nem_GhzWall1; breakable wall<br />
dc.w $A1E0<br />
dc.l Nem_GhzWall2; normal wall<br />
dc.w $6980<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Labyrinth<br />
; ---------------------------------------------------------------------------<br />
PLC_2LZ: dc.w $B<br />
dc.l Nem_LZ2; LZ main patterns<br />
dc.w 0<br />
dc.l Nem_LzBlock1; block<br />
dc.w $3C00<br />
dc.l Nem_LzBlock2; blocks<br />
dc.w $3E00<br />
dc.l Nem_Splash; waterfalls and splash<br />
dc.w $4B20<br />
dc.l Nem_Water; water surface<br />
dc.w $6000<br />
dc.l Nem_LzSpikeBall; spiked ball<br />
dc.w $6200<br />
dc.l Nem_FlapDoor; flapping door<br />
dc.w $6500<br />
dc.l Nem_Bubbles; bubbles and numbers<br />
dc.w $6900<br />
dc.l Nem_LzBlock3; block<br />
dc.w $7780<br />
dc.l Nem_LzDoor1; vertical door<br />
dc.w $7880<br />
dc.l Nem_Harpoon; harpoon<br />
dc.w $7980<br />
dc.l Nem_Burrobot; burrobot enemy<br />
dc.w $94C0<br />
PLC_2LZ2: dc.w $C<br />
dc.l Nem_LzPole; pole that breaks<br />
dc.w $7BC0<br />
dc.l Nem_LzDoor2; large horizontal door<br />
dc.w $7CC0<br />
dc.l Nem_LzWheel; wheel<br />
dc.w $7EC0<br />
dc.l Nem_Gargoyle; gargoyle head<br />
dc.w $5D20<br />
dc.l Nem_LzSonic; Sonic holding his breath<br />
dc.w $8800<br />
dc.l Nem_LzPlatfm; rising platform<br />
dc.w $89E0<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8CE0<br />
dc.l Nem_Jaws; jaws enemy<br />
dc.w $90C0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Cork; cork block<br />
dc.w $A000<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Marble<br />
; ---------------------------------------------------------------------------<br />
PLC_2MZ: dc.w 9<br />
dc.l Nem_MZ2; MZ main patterns<br />
dc.w 0<br />
dc.l Nem_MzMetal; metal blocks<br />
dc.w $6000<br />
dc.l Nem_MzFire; fireballs<br />
dc.w $68A0<br />
dc.l Nem_Swing; swinging platform<br />
dc.w $7000<br />
dc.l Nem_MzGlass; green glassy block<br />
dc.w $71C0<br />
dc.l Nem_Lava; lava<br />
dc.w $7500<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Yadrin; yadrin enemy<br />
dc.w $8F60<br />
dc.l Nem_Basaran; basaran enemy<br />
dc.w $9700<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $9FE0<br />
PLC_2MZ2: dc.w 4<br />
dc.l Nem_MzSwitch; switch<br />
dc.w $A260<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
dc.l Nem_MzBlock; green stone block<br />
dc.w $5700<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Star Light<br />
; ---------------------------------------------------------------------------<br />
PLC_2SLZ: dc.w 8<br />
dc.l Nem_SLZ2; SLZ main patterns<br />
dc.w 0<br />
dc.l Nem_Bomb; bomb enemy<br />
dc.w $8000<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8520<br />
dc.l Nem_MzFire; fireballs<br />
dc.w $9000<br />
dc.l Nem_SlzBlock; block<br />
dc.w $9C00<br />
dc.l Nem_SlzWall; breakable wall<br />
dc.w $A260<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
PLC_2SLZ2: dc.w 5<br />
dc.l Nem_Seesaw; seesaw<br />
dc.w $6E80<br />
dc.l Nem_Fan; fan<br />
dc.w $7400<br />
dc.l Nem_Pylon; foreground pylon<br />
dc.w $7980<br />
dc.l Nem_SlzSwing; swinging platform<br />
dc.w $7B80<br />
dc.l Nem_SlzCannon; fireball launcher<br />
dc.w $9B00<br />
dc.l Nem_SlzSpike; spikeball<br />
dc.w $9E00<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Spring Yard<br />
; ---------------------------------------------------------------------------<br />
PLC_2SYZ: dc.w 4<br />
dc.l Nem_SYZ2; SYZ main patterns<br />
dc.w 0<br />
dc.l Nem_Crabmeat; crabmeat enemy<br />
dc.w $8000<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Yadrin; yadrin enemy<br />
dc.w $8F60<br />
dc.l Nem_Roller; roller enemy<br />
dc.w $9700<br />
PLC_2SYZ2: dc.w 7<br />
dc.l Nem_Bumper; bumper<br />
dc.w $7000<br />
dc.l Nem_SyzSpike1; large spikeball<br />
dc.w $72C0<br />
dc.l Nem_SyzSpike2; small spikeball<br />
dc.w $7740<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $9FE0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Scrap Brain<br />
; ---------------------------------------------------------------------------<br />
PLC_2SBZ: dc.w $B<br />
dc.l Nem_SBZ2; SBZ main patterns<br />
dc.w 0<br />
dc.l Nem_Stomper; moving platform and stomper<br />
dc.w $5800<br />
dc.l Nem_SbzDoor1; door<br />
dc.w $5D00<br />
dc.l Nem_Girder; girder<br />
dc.w $5E00<br />
dc.l Nem_BallHog; ball hog enemy<br />
dc.w $6040<br />
dc.l Nem_SbzWheel1; spot on large wheel<br />
dc.w $6880<br />
dc.l Nem_SbzWheel2; wheel that grabs Sonic<br />
dc.w $6900<br />
dc.l Nem_SyzSpike1; large spikeball<br />
dc.w $7220<br />
dc.l Nem_Cutter; pizza cutter<br />
dc.w $76A0<br />
dc.l Nem_FlamePipe; flaming pipe<br />
dc.w $7B20<br />
dc.l Nem_SbzFloor; collapsing floor<br />
dc.w $7EA0<br />
dc.l Nem_SbzBlock; vanishing block<br />
dc.w $9860<br />
PLC_2SBZ2: dc.w $C<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $5600<br />
dc.l Nem_Bomb; bomb enemy<br />
dc.w $8000<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8520<br />
dc.l Nem_SlideFloor; floor that slides away<br />
dc.w $8C00<br />
dc.l Nem_SbzDoor2; horizontal door<br />
dc.w $8DE0<br />
dc.l Nem_Electric; electric orb<br />
dc.w $8FC0<br />
dc.l Nem_TrapDoor; trapdoor<br />
dc.w $9240<br />
dc.l Nem_SbzFloor; collapsing floor<br />
dc.w $7F20<br />
dc.l Nem_SpinPform; small spinning platform<br />
dc.w $9BE0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - title card<br />
; ---------------------------------------------------------------------------<br />
PLC_2TitleCard: dc.w 0<br />
dc.l Nem_TitleCard<br />
dc.w $B000<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - act 3 boss<br />
; ---------------------------------------------------------------------------<br />
PLC_2Boss: dc.w 5<br />
dc.l Nem_Eggman; Eggman main patterns<br />
dc.w $8000<br />
dc.l Nem_Weapons; Eggman's weapons<br />
dc.w $8D80<br />
dc.l Nem_Prison; prison capsule<br />
dc.w $93A0<br />
dc.l Nem_Bomb; bomb enemy (gets overwritten)<br />
dc.w $A300<br />
dc.l Nem_SlzSpike; spikeball (SLZ boss)<br />
dc.w $A300<br />
dc.l Nem_Exhaust; exhaust flame<br />
dc.w $A540<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - act 1/2 signpost<br />
; ---------------------------------------------------------------------------<br />
PLC_2Signpost: dc.w 2<br />
dc.l Nem_SignPost; signpost<br />
dc.w $D000<br />
dc.l Nem_Bonus; hidden bonus points<br />
dc.w $96C0<br />
dc.l Nem_BigFlash; giant ring flash effect<br />
dc.w $8C40<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - beta special stage warp effect<br />
; ---------------------------------------------------------------------------<br />
PLC_2Warp: dc.w 0<br />
dc.l Nem_Warp<br />
dc.w $A820<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - special stage<br />
; ---------------------------------------------------------------------------<br />
PLC_2SpeStage: dc.w $10<br />
dc.l Nem_SSBgCloud; bubble and cloud background<br />
dc.w 0<br />
dc.l Nem_SSBgFish; bird and fish background<br />
dc.w $A20<br />
dc.l Nem_SSWalls; walls<br />
dc.w $2840<br />
dc.l Nem_Bumper; bumper<br />
dc.w $4760<br />
dc.l Nem_SSGOAL; GOAL block<br />
dc.w $4A20<br />
dc.l Nem_SSUpDown; UP and DOWN blocks<br />
dc.w $4C60<br />
dc.l Nem_SSRBlock; R block<br />
dc.w $5E00<br />
dc.l Nem_SS1UpBlock; 1UP block<br />
dc.w $6E00<br />
dc.l Nem_SSEmStars; emerald collection stars<br />
dc.w $7E00<br />
dc.l Nem_SSRedWhite; red and white block<br />
dc.w $8E00<br />
dc.l Nem_SSGhost; ghost block<br />
dc.w $9E00<br />
dc.l Nem_SSWBlock; W block<br />
dc.w $AE00<br />
dc.l Nem_SSGlass; glass block<br />
dc.w $BE00<br />
dc.l Nem_SSEmerald; emeralds<br />
dc.w $EE00<br />
dc.l Nem_SSZone1; ZONE 1 block<br />
dc.w $F2E0<br />
dc.l Nem_SSZone2; ZONE 2 block<br />
dc.w $F400<br />
dc.l Nem_SSZone3; ZONE 3 block<br />
dc.w $F520<br />
dc.l Nem_SSZone4; ZONE 4 block<br />
dc.w $F2E0<br />
dc.l Nem_SSZone5; ZONE 5 block<br />
dc.w $F400<br />
dc.l Nem_SSZone6; ZONE 6 block<br />
dc.w $F520<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - GHZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2GHZAnimals: dc.w 1<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $B000<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - LZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2LZAnimals: dc.w 1<br />
dc.l Nem_BlackBird; blackbird<br />
dc.w $B000<br />
dc.l Nem_Seal; seal<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - MZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2MZAnimals: dc.w 1<br />
dc.l Nem_Squirrel; squirrel<br />
dc.w $B000<br />
dc.l Nem_Seal; seal<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SLZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2SLZAnimals: dc.w 1<br />
dc.l Nem_Pig; pig<br />
dc.w $B000<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SYZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2SYZAnimals: dc.w 1<br />
dc.l Nem_Pig; pig<br />
dc.w $B000<br />
dc.l Nem_Chicken; chicken<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SBZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_2SBZAnimals: dc.w 1<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $B000<br />
dc.l Nem_Chicken; chicken<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - special stage results screen<br />
; ---------------------------------------------------------------------------<br />
PLC_2SpeStResult:dc.w 1<br />
dc.l Nem_ResultEm; emeralds<br />
dc.w $A820<br />
dc.l Nem_MiniSonic; mini Sonic<br />
dc.w $AA20<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - ending sequence<br />
; ---------------------------------------------------------------------------<br />
PLC_2Ending: dc.w $E<br />
dc.l Nem_GHZ_1st; GHZ main patterns<br />
dc.w 0<br />
dc.l Nem_GHZ_2nd; GHZ secondary patterns<br />
dc.w $39A0<br />
dc.l Nem_Stalk; flower stalk<br />
dc.w $6B00<br />
dc.l Nem_EndFlower; flowers<br />
dc.w $7400<br />
dc.l Nem_EndEm; emeralds<br />
dc.w $78A0<br />
dc.l Nem_EndSonic; Sonic<br />
dc.w $7C20<br />
dc.l Nem_EndEggman; Eggman's death (unused)<br />
dc.w $A480<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $AA60<br />
dc.l Nem_Chicken; chicken<br />
dc.w $ACA0<br />
dc.l Nem_BlackBird; blackbird<br />
dc.w $AE60<br />
dc.l Nem_Seal; seal<br />
dc.w $B0A0<br />
dc.l Nem_Pig; pig<br />
dc.w $B260<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B4A0<br />
dc.l Nem_Squirrel; squirrel<br />
dc.w $B660<br />
dc.l Nem_EndStH; "SONIC THE HEDGEHOG"<br />
dc.w $B8A0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - "TRY AGAIN" and "END" screens<br />
; ---------------------------------------------------------------------------<br />
PLC_2TryAgain: dc.w 2<br />
dc.l Nem_EndEm; emeralds<br />
dc.w $78A0<br />
dc.l Nem_TryAgain; Eggman<br />
dc.w $7C20<br />
dc.l Nem_CreditText; credits alphabet<br />
dc.w $B400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Eggman on SBZ 2<br />
; ---------------------------------------------------------------------------<br />
PLC_2EggmanSBZ2: dc.w 2<br />
dc.l Nem_SbzBlock; block<br />
dc.w $A300<br />
dc.l Nem_Sbz2Eggman; Eggman<br />
dc.w $8000<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $9400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - final boss<br />
; ---------------------------------------------------------------------------<br />
PLC_2FZBoss: dc.w 4<br />
dc.l Nem_FzEggman; Eggman after boss<br />
dc.w $7400<br />
dc.l Nem_FzBoss; FZ boss<br />
dc.w $6000<br />
dc.l Nem_Eggman; Eggman main patterns<br />
dc.w $8000<br />
dc.l Nem_Sbz2Eggman; Eggman without ship<br />
dc.w $8E00<br />
dc.l Nem_Exhaust; exhaust flame<br />
dc.w $A540<br />
even</asm><br />
<br />
Save it into the "_inc" folder.<br />
Create new file named Pattern load cues3.asm, and paste it:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Pattern load cues - index<br />
; ---------------------------------------------------------------------------<br />
dc.w PLC_3Main-ArtLoadCues3, PLC_3Main2-ArtLoadCues3<br />
dc.w PLC_3Explode-ArtLoadCues3, PLC_3GameOver-ArtLoadCues3<br />
dc.w PLC_3GHZ-ArtLoadCues3, PLC_3GHZ2-ArtLoadCues3<br />
dc.w PLC_3LZ-ArtLoadCues3, PLC_3LZ2-ArtLoadCues3<br />
dc.w PLC_3MZ-ArtLoadCues3, PLC_3MZ2-ArtLoadCues3<br />
dc.w PLC_3SLZ-ArtLoadCues3, PLC_3SLZ2-ArtLoadCues3<br />
dc.w PLC_3SYZ-ArtLoadCues3, PLC_3SYZ2-ArtLoadCues3<br />
dc.w PLC_3SBZ-ArtLoadCues3, PLC_3SBZ2-ArtLoadCues3<br />
dc.w PLC_3TitleCard-ArtLoadCues3, PLC_3Boss-ArtLoadCues3<br />
dc.w PLC_3Signpost-ArtLoadCues3, PLC_3Warp-ArtLoadCues3<br />
dc.w PLC_3SpeStage-ArtLoadCues3, PLC_3GHZAnimals-ArtLoadCues3<br />
dc.w PLC_3LZAnimals-ArtLoadCues3, PLC_3MZAnimals-ArtLoadCues3<br />
dc.w PLC_3SLZAnimals-ArtLoadCues3, PLC_3SYZAnimals-ArtLoadCues3<br />
dc.w PLC_3SBZAnimals-ArtLoadCues3, PLC_3SpeStResult-ArtLoadCues3<br />
dc.w PLC_3Ending-ArtLoadCues3, PLC_3TryAgain-ArtLoadCues3<br />
dc.w PLC_3EggmanSBZ2-ArtLoadCues3, PLC_3FZBoss-ArtLoadCues3<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - standard block 1<br />
; ---------------------------------------------------------------------------<br />
PLC_3Main: dc.w 4<br />
dc.l Nem_Lamp; lamppost<br />
dc.w $F400<br />
dc.l Nem_Hud; HUD<br />
dc.w $D940<br />
dc.l Nem_Lives; lives counter<br />
dc.w $FA80<br />
dc.l Nem_Ring; rings<br />
dc.w $F640<br />
dc.l Nem_Points; points from enemy<br />
dc.w $F2E0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - standard block 2<br />
; ---------------------------------------------------------------------------<br />
PLC_3Main2: dc.w 2<br />
dc.l Nem_Monitors; monitors<br />
dc.w $D000<br />
dc.l Nem_Shield; shield<br />
dc.w $A820<br />
dc.l Nem_Stars; invincibility stars<br />
dc.w $AB80<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - explosion<br />
; ---------------------------------------------------------------------------<br />
PLC_3Explode: dc.w 0<br />
dc.l Nem_Explode; explosion<br />
dc.w $B400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - game/time over<br />
; ---------------------------------------------------------------------------<br />
PLC_3GameOver: dc.w 0<br />
dc.l Nem_GameOver; game/time over<br />
dc.w $ABC0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Green Hill<br />
; ---------------------------------------------------------------------------<br />
PLC_3GHZ: dc.w $B<br />
dc.l Nem_GHZ3_1st; GHZ main patterns<br />
dc.w 0<br />
dc.l Nem_GHZ3_2nd; GHZ secondary patterns<br />
dc.w $39A0<br />
dc.l Nem_Stalk; flower stalk<br />
dc.w $6B00<br />
dc.l Nem_PplRock; purple rock<br />
dc.w $7A00<br />
dc.l Nem_Crabmeat; crabmeat enemy<br />
dc.w $8000<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Chopper; chopper enemy<br />
dc.w $8F60<br />
dc.l Nem_Newtron; newtron enemy<br />
dc.w $9360<br />
dc.l Nem_Motobug; motobug enemy<br />
dc.w $9E00<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
PLC_3GHZ2: dc.w 5<br />
dc.l Nem_Swing; swinging platform<br />
dc.w $7000<br />
dc.l Nem_Bridge; bridge<br />
dc.w $71C0<br />
dc.l Nem_SpikePole; spiked pole<br />
dc.w $7300<br />
dc.l Nem_Ball; giant ball<br />
dc.w $7540<br />
dc.l Nem_GhzWall1; breakable wall<br />
dc.w $A1E0<br />
dc.l Nem_GhzWall2; normal wall<br />
dc.w $6980<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Labyrinth<br />
; ---------------------------------------------------------------------------<br />
PLC_3LZ: dc.w $B<br />
dc.l Nem_LZ3; LZ main patterns<br />
dc.w 0<br />
dc.l Nem_LzBlock1; block<br />
dc.w $3C00<br />
dc.l Nem_LzBlock2; blocks<br />
dc.w $3E00<br />
dc.l Nem_Splash; waterfalls and splash<br />
dc.w $4B20<br />
dc.l Nem_Water; water surface<br />
dc.w $6000<br />
dc.l Nem_LzSpikeBall; spiked ball<br />
dc.w $6200<br />
dc.l Nem_FlapDoor; flapping door<br />
dc.w $6500<br />
dc.l Nem_Bubbles; bubbles and numbers<br />
dc.w $6900<br />
dc.l Nem_LzBlock3; block<br />
dc.w $7780<br />
dc.l Nem_LzDoor1; vertical door<br />
dc.w $7880<br />
dc.l Nem_Harpoon; harpoon<br />
dc.w $7980<br />
dc.l Nem_Burrobot; burrobot enemy<br />
dc.w $94C0<br />
PLC_3LZ2: dc.w $C<br />
dc.l Nem_LzPole; pole that breaks<br />
dc.w $7BC0<br />
dc.l Nem_LzDoor2; large horizontal door<br />
dc.w $7CC0<br />
dc.l Nem_LzWheel; wheel<br />
dc.w $7EC0<br />
dc.l Nem_Gargoyle; gargoyle head<br />
dc.w $5D20<br />
dc.l Nem_LzSonic; Sonic holding his breath<br />
dc.w $8800<br />
dc.l Nem_LzPlatfm; rising platform<br />
dc.w $89E0<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8CE0<br />
dc.l Nem_Jaws; jaws enemy<br />
dc.w $90C0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Cork; cork block<br />
dc.w $A000<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Marble<br />
; ---------------------------------------------------------------------------<br />
PLC_3MZ: dc.w 9<br />
dc.l Nem_MZ3; MZ main patterns<br />
dc.w 0<br />
dc.l Nem_MzMetal; metal blocks<br />
dc.w $6000<br />
dc.l Nem_MzFire; fireballs<br />
dc.w $68A0<br />
dc.l Nem_Swing; swinging platform<br />
dc.w $7000<br />
dc.l Nem_MzGlass; green glassy block<br />
dc.w $71C0<br />
dc.l Nem_Lava; lava<br />
dc.w $7500<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Yadrin; yadrin enemy<br />
dc.w $8F60<br />
dc.l Nem_Basaran; basaran enemy<br />
dc.w $9700<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $9FE0<br />
PLC_3MZ2: dc.w 4<br />
dc.l Nem_MzSwitch; switch<br />
dc.w $A260<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
dc.l Nem_MzBlock; green stone block<br />
dc.w $5700<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Star Light<br />
; ---------------------------------------------------------------------------<br />
PLC_3SLZ: dc.w 8<br />
dc.l Nem_SLZ3; SLZ main patterns<br />
dc.w 0<br />
dc.l Nem_Bomb; bomb enemy<br />
dc.w $8000<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8520<br />
dc.l Nem_MzFire; fireballs<br />
dc.w $9000<br />
dc.l Nem_SlzBlock; block<br />
dc.w $9C00<br />
dc.l Nem_SlzWall; breakable wall<br />
dc.w $A260<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
PLC_3SLZ2: dc.w 5<br />
dc.l Nem_Seesaw; seesaw<br />
dc.w $6E80<br />
dc.l Nem_Fan; fan<br />
dc.w $7400<br />
dc.l Nem_Pylon; foreground pylon<br />
dc.w $7980<br />
dc.l Nem_SlzSwing; swinging platform<br />
dc.w $7B80<br />
dc.l Nem_SlzCannon; fireball launcher<br />
dc.w $9B00<br />
dc.l Nem_SlzSpike; spikeball<br />
dc.w $9E00<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Spring Yard<br />
; ---------------------------------------------------------------------------<br />
PLC_3SYZ: dc.w 4<br />
dc.l Nem_SYZ3; SYZ main patterns<br />
dc.w 0<br />
dc.l Nem_Crabmeat; crabmeat enemy<br />
dc.w $8000<br />
dc.l Nem_Buzz; buzz bomber enemy<br />
dc.w $8880<br />
dc.l Nem_Yadrin; yadrin enemy<br />
dc.w $8F60<br />
dc.l Nem_Roller; roller enemy<br />
dc.w $9700<br />
PLC_3SYZ2: dc.w 7<br />
dc.l Nem_Bumper; bumper<br />
dc.w $7000<br />
dc.l Nem_SyzSpike1; large spikeball<br />
dc.w $72C0<br />
dc.l Nem_SyzSpike2; small spikeball<br />
dc.w $7740<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $9FE0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Scrap Brain<br />
; ---------------------------------------------------------------------------<br />
PLC_3SBZ: dc.w $B<br />
dc.l Nem_SBZ3; SBZ main patterns<br />
dc.w 0<br />
dc.l Nem_Stomper; moving platform and stomper<br />
dc.w $5800<br />
dc.l Nem_SbzDoor1; door<br />
dc.w $5D00<br />
dc.l Nem_Girder; girder<br />
dc.w $5E00<br />
dc.l Nem_BallHog; ball hog enemy<br />
dc.w $6040<br />
dc.l Nem_SbzWheel1; spot on large wheel<br />
dc.w $6880<br />
dc.l Nem_SbzWheel2; wheel that grabs Sonic<br />
dc.w $6900<br />
dc.l Nem_SyzSpike1; large spikeball<br />
dc.w $7220<br />
dc.l Nem_Cutter; pizza cutter<br />
dc.w $76A0<br />
dc.l Nem_FlamePipe; flaming pipe<br />
dc.w $7B20<br />
dc.l Nem_SbzFloor; collapsing floor<br />
dc.w $7EA0<br />
dc.l Nem_SbzBlock; vanishing block<br />
dc.w $9860<br />
PLC_3SBZ2: dc.w $C<br />
dc.l Nem_Cater; caterkiller enemy<br />
dc.w $5600<br />
dc.l Nem_Bomb; bomb enemy<br />
dc.w $8000<br />
dc.l Nem_Orbinaut; orbinaut enemy<br />
dc.w $8520<br />
dc.l Nem_SlideFloor; floor that slides away<br />
dc.w $8C00<br />
dc.l Nem_SbzDoor2; horizontal door<br />
dc.w $8DE0<br />
dc.l Nem_Electric; electric orb<br />
dc.w $8FC0<br />
dc.l Nem_TrapDoor; trapdoor<br />
dc.w $9240<br />
dc.l Nem_SbzFloor; collapsing floor<br />
dc.w $7F20<br />
dc.l Nem_SpinPform; small spinning platform<br />
dc.w $9BE0<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $A1E0<br />
dc.l Nem_Spikes; spikes<br />
dc.w $A360<br />
dc.l Nem_HSpring; horizontal spring<br />
dc.w $A460<br />
dc.l Nem_VSpring; vertical spring<br />
dc.w $A660<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - title card<br />
; ---------------------------------------------------------------------------<br />
PLC_3TitleCard: dc.w 0<br />
dc.l Nem_TitleCard<br />
dc.w $B000<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - act 3 boss<br />
; ---------------------------------------------------------------------------<br />
PLC_3Boss: dc.w 5<br />
dc.l Nem_Eggman; Eggman main patterns<br />
dc.w $8000<br />
dc.l Nem_Weapons; Eggman's weapons<br />
dc.w $8D80<br />
dc.l Nem_Prison; prison capsule<br />
dc.w $93A0<br />
dc.l Nem_Bomb; bomb enemy (gets overwritten)<br />
dc.w $A300<br />
dc.l Nem_SlzSpike; spikeball (SLZ boss)<br />
dc.w $A300<br />
dc.l Nem_Exhaust; exhaust flame<br />
dc.w $A540<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - act 1/2 signpost<br />
; ---------------------------------------------------------------------------<br />
PLC_3Signpost: dc.w 2<br />
dc.l Nem_SignPost; signpost<br />
dc.w $D000<br />
dc.l Nem_Bonus; hidden bonus points<br />
dc.w $96C0<br />
dc.l Nem_BigFlash; giant ring flash effect<br />
dc.w $8C40<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - beta special stage warp effect<br />
; ---------------------------------------------------------------------------<br />
PLC_3Warp: dc.w 0<br />
dc.l Nem_Warp<br />
dc.w $A820<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - special stage<br />
; ---------------------------------------------------------------------------<br />
PLC_3SpeStage: dc.w $10<br />
dc.l Nem_SSBgCloud; bubble and cloud background<br />
dc.w 0<br />
dc.l Nem_SSBgFish; bird and fish background<br />
dc.w $A20<br />
dc.l Nem_SSWalls; walls<br />
dc.w $2840<br />
dc.l Nem_Bumper; bumper<br />
dc.w $4760<br />
dc.l Nem_SSGOAL; GOAL block<br />
dc.w $4A20<br />
dc.l Nem_SSUpDown; UP and DOWN blocks<br />
dc.w $4C60<br />
dc.l Nem_SSRBlock; R block<br />
dc.w $5E00<br />
dc.l Nem_SS1UpBlock; 1UP block<br />
dc.w $6E00<br />
dc.l Nem_SSEmStars; emerald collection stars<br />
dc.w $7E00<br />
dc.l Nem_SSRedWhite; red and white block<br />
dc.w $8E00<br />
dc.l Nem_SSGhost; ghost block<br />
dc.w $9E00<br />
dc.l Nem_SSWBlock; W block<br />
dc.w $AE00<br />
dc.l Nem_SSGlass; glass block<br />
dc.w $BE00<br />
dc.l Nem_SSEmerald; emeralds<br />
dc.w $EE00<br />
dc.l Nem_SSZone1; ZONE 1 block<br />
dc.w $F2E0<br />
dc.l Nem_SSZone2; ZONE 2 block<br />
dc.w $F400<br />
dc.l Nem_SSZone3; ZONE 3 block<br />
dc.w $F520<br />
dc.l Nem_SSZone4; ZONE 4 block<br />
dc.w $F2E0<br />
dc.l Nem_SSZone5; ZONE 5 block<br />
dc.w $F400<br />
dc.l Nem_SSZone6; ZONE 6 block<br />
dc.w $F520<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - GHZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3GHZAnimals: dc.w 1<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $B000<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - LZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3LZAnimals: dc.w 1<br />
dc.l Nem_BlackBird; blackbird<br />
dc.w $B000<br />
dc.l Nem_Seal; seal<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - MZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3MZAnimals: dc.w 1<br />
dc.l Nem_Squirrel; squirrel<br />
dc.w $B000<br />
dc.l Nem_Seal; seal<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SLZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3SLZAnimals: dc.w 1<br />
dc.l Nem_Pig; pig<br />
dc.w $B000<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SYZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3SYZAnimals: dc.w 1<br />
dc.l Nem_Pig; pig<br />
dc.w $B000<br />
dc.l Nem_Chicken; chicken<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - SBZ animals<br />
; ---------------------------------------------------------------------------<br />
PLC_3SBZAnimals: dc.w 1<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $B000<br />
dc.l Nem_Chicken; chicken<br />
dc.w $B240<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - special stage results screen<br />
; ---------------------------------------------------------------------------<br />
PLC_3SpeStResult:dc.w 1<br />
dc.l Nem_ResultEm; emeralds<br />
dc.w $A820<br />
dc.l Nem_MiniSonic; mini Sonic<br />
dc.w $AA20<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - ending sequence<br />
; ---------------------------------------------------------------------------<br />
PLC_3Ending: dc.w $E<br />
dc.l Nem_GHZ_1st; GHZ main patterns<br />
dc.w 0<br />
dc.l Nem_GHZ_2nd; GHZ secondary patterns<br />
dc.w $39A0<br />
dc.l Nem_Stalk; flower stalk<br />
dc.w $6B00<br />
dc.l Nem_EndFlower; flowers<br />
dc.w $7400<br />
dc.l Nem_EndEm; emeralds<br />
dc.w $78A0<br />
dc.l Nem_EndSonic; Sonic<br />
dc.w $7C20<br />
dc.l Nem_EndEggman; Eggman's death (unused)<br />
dc.w $A480<br />
dc.l Nem_Rabbit; rabbit<br />
dc.w $AA60<br />
dc.l Nem_Chicken; chicken<br />
dc.w $ACA0<br />
dc.l Nem_BlackBird; blackbird<br />
dc.w $AE60<br />
dc.l Nem_Seal; seal<br />
dc.w $B0A0<br />
dc.l Nem_Pig; pig<br />
dc.w $B260<br />
dc.l Nem_Flicky; flicky<br />
dc.w $B4A0<br />
dc.l Nem_Squirrel; squirrel<br />
dc.w $B660<br />
dc.l Nem_EndStH; "SONIC THE HEDGEHOG"<br />
dc.w $B8A0<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - "TRY AGAIN" and "END" screens<br />
; ---------------------------------------------------------------------------<br />
PLC_3TryAgain: dc.w 2<br />
dc.l Nem_EndEm; emeralds<br />
dc.w $78A0<br />
dc.l Nem_TryAgain; Eggman<br />
dc.w $7C20<br />
dc.l Nem_CreditText; credits alphabet<br />
dc.w $B400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - Eggman on SBZ 2<br />
; ---------------------------------------------------------------------------<br />
PLC_3EggmanSBZ2: dc.w 2<br />
dc.l Nem_SbzBlock; block<br />
dc.w $A300<br />
dc.l Nem_Sbz2Eggman; Eggman<br />
dc.w $8000<br />
dc.l Nem_LzSwitch; switch<br />
dc.w $9400<br />
; ---------------------------------------------------------------------------<br />
; Pattern load cues - final boss<br />
; ---------------------------------------------------------------------------<br />
PLC_3FZBoss: dc.w 4<br />
dc.l Nem_FzEggman; Eggman after boss<br />
dc.w $7400<br />
dc.l Nem_FzBoss; FZ boss<br />
dc.w $6000<br />
dc.l Nem_Eggman; Eggman main patterns<br />
dc.w $8000<br />
dc.l Nem_Sbz2Eggman; Eggman without ship<br />
dc.w $8E00<br />
dc.l Nem_Exhaust; exhaust flame<br />
dc.w $A540<br />
even</asm><br />
<br />
And save in "_inc" directory.<br />
<br />
Now every act use your own tileset, example: Star Light Act1 uses 8x8 tiles data of file 8x8slz.bin, Act2 uses 8x8slz2.bin and Act3 8x8slz3.bin.<br />
<br />
[[Category:SCHG How-tos|Use Dynamic Tilesets in Sonic 1]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG_How-to:Make_an_Alternative_Title_Screen&diff=96184SCHG How-to:Make an Alternative Title Screen2009-01-09T01:50:05Z<p>Xkeeper: Text replace - 'pallet' to 'palette'</p>
<hr />
<div>{{GuideBy|JcFerggy}}<br />
<br />
Using the June 2005 Disassembly of Sonic 1, open up sonic1.asm. First search for "Nem_GHZ_1st:". You should see something like this:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Compressed graphics - primary patterns and block mappings<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ: incbin map16\ghz.bin<br />
even<br />
Nem_GHZ_1st: incbin artnem\8x8ghz1.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ_2nd: incbin artnem\8x8ghz2.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ: incbin map256\ghz.bin<br />
even<br />
Blk16_LZ: incbin map16\lz.bin<br />
even<br />
Nem_LZ: incbin artnem\8x8lz.bin; LZ primary patterns<br />
even</asm><br />
Next, copy the "Blk16_GHZ", "Blk256_GHZ", and "Nem_GHZ_1st", and change "GHZ" to "TS". It should look something like this:<br />
<br />
<asm>; ---------------------------------------------------------------------------<br />
; Compressed graphics - primary patterns and block mappings<br />
; ---------------------------------------------------------------------------<br />
Blk16_GHZ: incbin map16\ghz.bin<br />
even<br />
Nem_GHZ_1st: incbin artnem\8x8ghz1.bin; GHZ primary patterns<br />
even<br />
Nem_GHZ_2nd: incbin artnem\8x8ghz2.bin; GHZ secondary patterns<br />
even<br />
Blk256_GHZ: incbin map256\ghz.bin<br />
even<br />
Blk16_TS: incbin map16\ts.bin<br />
even<br />
Nem_TS_1st: incbin artnem\8x8ts1.bin; GHZ primary patterns<br />
even<br />
Blk256_TS: incbin map256\ts.bin<br />
even<br />
Blk16_LZ: incbin map16\lz.bin<br />
even</asm><br />
Now search for "Title_LoadText:". You should see this<br />
<br />
<asm>Title_LoadText:<br />
move.w (a5)+,(a6)<br />
dbf d1,Title_LoadText; load uncompressed text patterns<br />
<br />
move.b #0,($FFFFFE30).w; clear lamppost counter<br />
move.w #0,($FFFFFE08).w; disable debug item placement mode<br />
move.w #0,($FFFFFFF0).w; disable debug mode<br />
move.w #0,($FFFFFFEA).w<br />
move.w #0,($FFFFFE10).w; set level to GHZ (00)<br />
move.w #0,($FFFFF634).w; disable palette cycling<br />
bsr.w LevelSizeLoad<br />
bsr.w DeformBgLayer<br />
lea ($FFFFB000).w,a1<br />
lea (Blk16_GHZ).l,a0; load GHZ 16x16 mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
lea (Blk256_GHZ).l,a0; load GHZ 256x256 mappings<br />
lea ($FF0000).l,a1<br />
bsr.w KosDec<br />
bsr.w LevelLayoutLoad<br />
bsr.w Pal_FadeFrom<br />
move #$2700,sr<br />
bsr.w ClearScreen<br />
lea ($C00004).l,a5<br />
lea ($C00000).l,a6<br />
lea ($FFFFF708).w,a3<br />
lea ($FFFFA440).w,a4<br />
move.w #$6000,d2<br />
bsr.w LoadTilesFromStart2<br />
lea ($FF0000).l,a1<br />
lea (Eni_Title).l,a0; load title screen mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
lea ($FF0000).l,a1<br />
move.l #$42060003,d0<br />
moveq #$21,d1<br />
moveq #$15,d2<br />
bsr.w ShowVDPGraphics<br />
move.l #$40000000,($C00004).l<br />
lea (Nem_GHZ_1st).l,a0; load GHZ patterns<br />
bsr.w NemDec<br />
moveq #1,d0; load title screen palette<br />
bsr.w PalLoad1<br />
move.b #$8A,d0; play title screen music<br />
bsr.w PlaySound_Special<br />
move.b #0,($FFFFFFFA).w; disable debug mode<br />
move.w #$178,($FFFFF614).w; run title screen for $178 frames<br />
lea ($FFFFD080).w,a1<br />
moveq #0,d0<br />
move.w #7,d1</asm><br />
In there you will see things relating to "Blk16_GHZ", "Blk256_GHZ", and "Nem_GHZ_1st". Change them from "GHZ" to "TS" also. You should now have something that looks like this:<br />
<br />
<asm>Title_LoadText:<br />
move.w (a5)+,(a6)<br />
dbf d1,Title_LoadText; load uncompressed text patterns<br />
<br />
move.b #0,($FFFFFE30).w; clear lamppost counter<br />
move.w #0,($FFFFFE08).w; disable debug item placement mode<br />
move.w #0,($FFFFFFF0).w; disable debug mode<br />
move.w #0,($FFFFFFEA).w<br />
move.w #0,($FFFFFE10).w; set level to GHZ (00)<br />
move.w #0,($FFFFF634).w; disable palette cycling<br />
bsr.w LevelSizeLoad<br />
bsr.w DeformBgLayer<br />
lea ($FFFFB000).w,a1<br />
lea (Blk16_TS).l,a0; load GHZ 16x16 mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
lea (Blk256_TS).l,a0; load GHZ 256x256 mappings<br />
lea ($FF0000).l,a1<br />
bsr.w KosDec<br />
bsr.w LevelLayoutLoad<br />
bsr.w Pal_FadeFrom<br />
move #$2700,sr<br />
bsr.w ClearScreen<br />
lea ($C00004).l,a5<br />
lea ($C00000).l,a6<br />
lea ($FFFFF708).w,a3<br />
lea ($FFFFA440).w,a4<br />
move.w #$6000,d2<br />
bsr.w LoadTilesFromStart2<br />
lea ($FF0000).l,a1<br />
lea (Eni_Title).l,a0; load title screen mappings<br />
move.w #0,d0<br />
bsr.w EniDec<br />
lea ($FF0000).l,a1<br />
move.l #$42060003,d0<br />
moveq #$21,d1<br />
moveq #$15,d2<br />
bsr.w ShowVDPGraphics<br />
move.l #$40000000,($C00004).l<br />
lea (Nem_TS_1st).l,a0; load GHZ patterns<br />
bsr.w NemDec<br />
moveq #1,d0; load title screen palette<br />
bsr.w PalLoad1<br />
move.b #$8A,d0; play title screen music<br />
bsr.w PlaySound_Special<br />
move.b #0,($FFFFFFFA).w; disable debug mode<br />
move.w #$178,($FFFFF614).w; run title screen for $178 frames<br />
lea ($FFFFD080).w,a1<br />
moveq #0,d0<br />
move.w #7,d1</asm><br />
Now, you will be able to load another set of files, but as of yet, you don't have any. Go into "artnem" and make a copy of "8x8ghz1.bin" and "8x8ghz2.bin" and rename them to "8x8ts1.bin" and "8x8ts2.bin". Do the same thing in "map16" and "map256", making a copy of the GHZ files, and renaming them to TS.<br />
<br />
Now those TS files you just made will be your new background. You have to edit them the same way you do the regular GHZ files. Also, your new background will still have the layout of your GHZ background, That means the same chunk numbers have to be used. Also, if you want to load the files in SonED2, you need a new project file, so make a copy of an already exsisting one, and replace everything that is in there with this:<br />
<br />
<pre>Type: 1 <br />
<br />
Zone ID: 0<br />
Act ID: 0<br />
<br />
Object Def: objdef\s1obj<br />
<br />
8x8 Tiles: ..\artnem\8x8ts.bin<br />
<br />
16x16 Tiles: ..\map16\ts.bin<br />
<br />
256x256 Tiles: ..\map256\ts.bin<br />
<br />
FG Layout: ..\levels\blank.bin<br />
BG Layout: ..\levels\ghzbg.bin<br />
<br />
Objects: ..\objpos\blank.bin<br />
<br />
Palettes-<br />
<br />
Number of files: 1<br />
<br />
Palette 1-<br />
<br />
Start index: 0<br />
Number of entries: 64<br />
File: ..\palette\title.bin<br />
<br />
Angle Array: ..\collide\anglemap.bin<br />
Collision Array: ..\collide\colarray_n.bin<br />
Rotated Collision Array: ..\collide\colarray_r.bin<br />
<br />
Collision Index 1: ..\collide\blank.bin<br />
<br />
-EOF-</pre><br />
<br />
And that should be everything to get you on your way.<br />
<br />
[[Category:SCHG How-tos|Make an Alternative Title Screen]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_the_Hedgehog_2_(beta_6)&diff=96183Sonic the Hedgehog 2 (beta 6)2009-01-09T01:50:03Z<p>Xkeeper: Text replace - 'pallet' to 'palette'</p>
<hr />
<div>{{Bob<br />
| bobscreen=Sonic2_title.png<br />
| title=Sonic the Hedgehog 2<br />
| publisher=[[Sega]]<br />
| developer=[[Sonic Team]],<br/>[[Sega Technical Institute]]<br />
| system=[[Sega Mega Drive/Genesis]]<br />
| genre=2D Platform<br />
}}<br />
<br />
'''''[[Sonic the Hedgehog 2]]''''' '''Beta 6''' for the [[Sega Mega Drive/Genesis]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]]. It is also known as S2BETA6. There seem to be two versions of Beta 6; but aside from a couple bytes in the header they're identical, byte-for-byte.<br />
<br />
{{Download|file=Sonic_The_Hedgehog_2_(Beta_6_-_Sep_22,_1992,_18.47)_(hidden-palace.org).zip|filesize=730KB}}<br />
<br />
==General Differences==<br />
===Cheat Codes===<br />
*Level Select code: {{Up}}, {{Down}}, {{Down}}, {{Down}}, {{Down}}, {{Up}}, highlight 1 player, then press {{a}} + {{Start}}.<br />
*Debug code: {{C}}, {{C}}, {{C}}, {{C}}, {{C}}, {{C}}, {{Up}}, {{Down}}, {{Down}}, {{Down}}, {{Down}}, {{Up}}, highlight 1 player, then press {{a}} + {{Start}}.<br />
*Level select is still similar to that of Sonic 1 in this build. The level select menu appears behind Sonic and Tails, and Sonic is all black. This is because, as [[JoseTB]] explained, "the first line <nowiki>[of the title screen palette]</nowiki> was the background in previous builds, but it's used by sonic in the new title screen. Of course, the level select palette remained untouched with the change."<br />
<br />
===General Differences===<br />
*Appears to be the first prototype with the options selection.<br />
*"Sonic and "Tails" in" (or "Sonic and Miles," depending on region)<br />
*The special stages remain the same, except with a palette change.<br />
*As in and [[Sonic the Hedgehog 2 (beta 4)]] and [[Sonic the Hedgehog 2 (beta 5)]], the player can run right past Robotnik in Death Egg.<br />
*The final boss only takes one hit, most likely to facilitate testing of the newly-programmed full ending. In previous builds, Sonic and Tails just fly off to the right.<br />
*[[Super Sonic]]'s ending is not implemented, Sonic's regular ending is used instead.<br />
*Tails' ending is not implemented; he uses Sonic's.<br />
<br />
==Bugs==<br />
*The "You got a Chaos Emerald!" screen is glitchy.<br />
*The collision detection in [[Emerald Hill Zone]] is a bit wonky in some places.<br />
*If you complete [[Wing Fortress Zone]] as [[Super Sonic]], you'll end up jumping over Tails' plane, and fall to your death.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9974|title=Sonic Retro discussion thread}}<br />
<br />
{{S2Betas}}<br />
<br />
{{stub}}<br />
<br />
[[Category:Sonic 2 (16-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s3ss&diff=96182SCHG:Nem s3ss2009-01-09T01:49:23Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>== Introduction ==<br />
Here are my notes on the S3 savestates. In order to edit these files I recommend a hex utility called Hex Workshop, and I recommend getting the emulators gens and genecyst. Gens is the one I use most of the time, but genecyst has a lot of features that are extremely useful that gens dosen't have.<br />
<br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1's and 0's. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it dosen't it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1's and 0's, so to make it simpler to deal with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent thier values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a hexadecimal value (hex value fo short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an ASCII table, which will convert that value into a recogniseable character (Eg. a byte value of 73 becomes a lowercase s on an english ASCII table). You will practically never touch the ASCII version of the code in hacking though.<br />
<br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be nessicary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the vaue, you will in fact end up with 80, becuase that value you are entering is actually a hex value, but if you use the base converer to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values.<br />
<br />
Now onto exactly what a savestate consists of. A savestate is a dump of all the ram that is allocated to the system, but that's not just main system ram, it's sound ram, CPU cache, etc. In a savestate all of this is mashed together in one file. Here's what's where in a genecyst savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 0-111 || Unknown<br />
|-<br />
| 112-191 || C ram<br />
|-<br />
| 192-1E1 || VS ram<br />
|-<br />
| 1E2 and 1E3 || A 2 byte break.<br />
|-<br />
| 1E4-3E3 || YM2612 registers<br />
|-<br />
| 3E4-473 || Some kind of sound ram (Z80 internal cache?)(93)<br />
|-<br />
| 474-2473 || Z80 ram (sound ram)<br />
|-<br />
| 2474-2477 || A 4 byte break<br />
|-<br />
| 2478-12477 || System ram<br />
|-<br />
| 12478-22477 || Video ram<br />
|-<br />
| 22478-22523 || Stuff that the emulator writes to savestate(AB)<br />
|}<br />
<br />
And here's what's where in a Kgen savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 0-97 || File header<br />
|-<br />
| 98-2097 || Z80 ram<br />
|-<br />
| 2098-12097 || System ram<br />
|-<br />
| 12098-22097 || Video ram<br />
|-<br />
| 22098-22117 || C ram<br />
|-<br />
| 22118-223A5 || Unknown (D72)<br />
|-<br />
| 223A6-225A5 || YM2612 registers<br />
|-<br />
| 225A6-2275B || Unknown (1B6)<br />
|}<br />
<br />
Now any single value that is stored in the system ram can be altered in game by use of a pro action replay code. First of all, here's an example of a Pro action replay code: FFFE10:0800<br />
<br />
Now, the first byte in this code is FF, and a value of FF in the first two characters indicates that the code is altering data in the system ram. The next four character after it are the actual memory location in the ram, and the last four are the two byte value to write into that memory address. The pro action replay will always alter two memory addreses at a time by the way, because the Mega Drive (Genesis) is a 16 bit system. It dosen't matter though because you will find that a value will have two bytes assigned to it anyway, or the second byte will be related. In the case of the example, the first byte being altered is the current level, and the second is the current act within that level. The actual address of these values in the savestate are 12288 and 12289. An explination of why lies in the locations of the ram data that is stored in the savestate. If you look at the above table, there are 2478 lines worth of data before the system ram in the savestate, so for any action replay code you want to convert into a file location, you will need to add 2478 to the line number, and for any line number you want to convert into a pro action replay code you will need to minus 2478. Remember that these line numbers are hex values though, so you will need to do this in a hex calculator. (NOTE: Genecyst dosen't do pro action replay codes properly, use gens instead for that function).<br />
<br />
Another thing you need to know is that each level in Sonic 3 has a value asigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values in S3&K:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || Angel island zone<br />
|-<br />
| 01 || Hydrocity zone<br />
|-<br />
| 02 || Marble garden zone<br />
|-<br />
| 03 || Carnival Night zone<br />
|-<br />
| 04 || Flying Battery zone<br />
|-<br />
| 05 || Ice cap zone<br />
|-<br />
| 06 || launch base zone<br />
|-<br />
| 07 || Empty<br />
|-<br />
| 08 || Empty<br />
|-<br />
| 09 || Empty<br />
|-<br />
| 0A || Empty<br />
|-<br />
| 0B || Empty<br />
|-<br />
| 0C || Empty<br />
|-<br />
| 0D || Empty<br />
|-<br />
| 0E || Azure Lake<br />
|-<br />
| 0F || Balloon Park<br />
|-<br />
| 10 || Chrome Gadget<br />
|-<br />
| 11 || Desert Palace<br />
|-<br />
| 12 || Endless Mine<br />
|-<br />
| 13 || Bonus Stage<br />
|-<br />
| 14 || Empty<br />
|-<br />
| 15 || Empty<br />
|-<br />
| 16 || Empty<br />
|-<br />
| 17 || Empty<br />
|}<br />
<br />
And one last thing you need to know is the way that the Mega Drive stores all the art. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get it's colour from. The palette has 4 lines, each with 16 colurs on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.<br />
<br />
Now these 8x8 blocks are not what makes up the level directly. 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have thier x, y, or x and y values reversed when placing them in a 16x16 block. Also it's at the 16x16 level that the collision index comes into play. Now finally we get to a 128x128 block, and these are the things that the actual level info loads. It is made up of 64 16x16 blocks,and each block inside them can use a different palette line. You cannot place anything except a sprite or a 128x128 block directly into a level.<br />
<br />
Now that you know all the basics, here's my breakdown:<br />
<br />
== Internal Groups ==<br />
{| class="prettytable" style="width: 100%"<br />
! colspan="2" | System ram<br />
|-<br />
| width="150px" | 2478-A477 || 128x128 block mappings<br />
|-<br />
| A478-B477 || Level layout<br />
|-<br />
| B478-CE77 || 16x16 block mappings<br />
|-<br />
| CE78-D477 || Pattern decompression buffer<br />
|-<br />
| D478-F477 || Buffered sprites<br />
|-<br />
| F478-10477 || Unknown<br />
|-<br />
| 10478-11477 || Unknown<br />
|-<br />
| 12078-120F7 || Above water palette<br />
|-<br />
! colspan="2" | Video ram<br />
|-<br />
| 12478-1E477 || Main Pattern info<br />
|-<br />
| 1E478-1F477 || Makeup of buffered foreground<br />
|-<br />
| 1F478-20477 || Patterns for text/computers/rings<br />
|-<br />
| 20478-21477 || Makeup of buffered background<br />
|-<br />
| 21478-21C77 || Patterns for sonic and tails<br />
|-<br />
| 21C78-21EF7 || Makeup of buffered active objects?<br />
|-<br />
| 21EF8-22077 || Lives counter patterns<br />
|-<br />
| 22078-223F7 || Current state of background tiles<br />
|-<br />
| 223F8-22477 || 4 empty blocks<br />
|}<br />
<br />
== Single Variables ==<br />
{| class="prettytable" style="width: 100%"<br />
| width="150px" | 1089A and 1089B || Character x location in special stage<br />
|-<br />
| 1089C and 1089D || Character y location in special stage<br />
|-<br />
| 1089E || Direction character is facing in special stage<br />
|-<br />
| 108A0 and 108A1 || Speed of character in special stage (speed increases as the value gets higher up to 8000 when the values mirror)<br />
|-<br />
| 108B0 and 108B1 || Number of blue spheres remaining in special stage<br />
|-<br />
| 108B2 and 108B3 || Number of rings sonic has in special stage<br />
|-<br />
| 108BA and 108BB || Number of rings remaining in special stage<br />
|-<br />
| 108BC and 108BD || Jumping height in special stage (the lower the value the heigher the jump. Value peaks at 8000 then mirrors. Specifying a jump height too great will cause the game to crash)<br />
|-<br />
| 108BF-108C2 || Loading address in rom for mappings of floor in special stage (changing this value will make the floor patterns go psycho)<br />
|-<br />
| 1128A and 1128B || Screen y end location<br />
|-<br />
| 1128C and 1128D || Screen x start location<br />
|-<br />
| 1128E and 1128F || Screen x end location<br />
|-<br />
| 112AB || A very interesting trigger that appears to be a special properties flag about the screen. 06 will make the screen not move back for example.<br />
|-<br />
| 112BA-112BD || Ring positions when approaching from the left<br />
|-<br />
| 112BE-112C1 || Ring positions when approaching from the right<br />
|-<br />
| 112F0 and 112F1 || Camera x position<br />
|-<br />
| 112F4 and 112F5 || Camera y position<br />
|-<br />
| 11A78 || Master level trigger<br />
|-<br />
| 11BEA-11BED || Sprite loading address when approaching from the left<br />
|-<br />
| 11BEE-11BF1 || Sprite loading address when approaching from the right<br />
|-<br />
| 11C0E-11C11 || 16x16 collision index in use<br />
|-<br />
| 11C2C-11C2F || Primary 16x16 collision index<br />
|-<br />
| 11C30-11C33 || Secondary 16x16 collision index<br />
|-<br />
| 12298 and 12299 || Number of rings you have<br />
|-<br />
| 12288 || Level<br />
|-<br />
| 12289 || Act<br />
|-<br />
| 12427 || Last special stage that was entered (This value is used to determine which stage will be loaded up next time the player enters a special stage. If a stage is marked as completed, it will be skipped over, and the next stage that it comes across that is not completed will be loaded. When all the chaos emeralds are obtained, this value is set back to 00. If this value is not set to 00, the beginning of MHZ will be that of S&K, and the normal special stages will be present instead of the super special stages.)<br />
|-<br />
| 12428 and 12429 || Number of emeralds that have been obtained (This value affects the ability to become super/hyper, and specifies the group of special stages to select from. If value is 07 or above, the S&K special stages are used in conjunction with the completed special stage values. Set this value to 07 to enable super, and to 0E to enable hyper.)<br />
|-<br />
| 1242A-12430 || Special stages completed (One byte per stage. In S3 levels: 00=not completed, 01-FF=completed. Setting a special stage as completed also makes the emerald for that stage appear on the results screen at the end of a special stage. In S&K levels: 00=no correponding super emerald presend in HPZ, and super emerald will not appear upon entry. 01=no super emerald present, but upon entry of sonic the corresponding chaos emerald will fly up and turn into a powered down super emerald. 02=Super emerald present, but powered down. 03=Super emerald present and powered up.) <br />
|}<br />
<br />
== Pattern breakdown 8x8 blocks (12478-1C477) ==<br />
All 8x8 patterns are stored sequentially, each one taking up 32(20) bytes. One pixel takes up one hex value, not one byte. The value of this hex value being 0-16 represents the colour that pixel is on the palette, 0 being the start, and F being the end (NOTE: specifying a value of 0 will not load up the first colour on the palette line, but instead make that pixel transparent).<br />
<br />
== 16x16 block mappings: (B478-CE77) ==<br />
Each 16x16 block is made up of four 8x8 blocks. Delt with in blocks of 8 bytes, 2 bytes per pattern to be used in block. First value determins which palette line to use, and which orientation the pattern is at. Refer to table for explination:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto; text-align: center"<br />
! Value !! palette line !! flipped horizntally !! flipped vertically<br />
|-<br />
| 0 || 1 || n || n<br />
|-<br />
| 1 || 1 || n || y<br />
|-<br />
| 2 || 2 || n || n<br />
|-<br />
| 3 || 2 || n || y<br />
|-<br />
| 4 || 3 || n || n<br />
|-<br />
| 5 || 3 || n || y<br />
|-<br />
| 6 || 4 || n || n<br />
|-<br />
| 7 || 4 || n || y<br />
|-<br />
| 8 || 1 || n || n<br />
|-<br />
| 9 || 1 || y || n<br />
|-<br />
| A || 2 || n || n<br />
|-<br />
| B || 2 || y || n<br />
|-<br />
| C || 3 || n || n<br />
|-<br />
| D || 3 || y || n<br />
|-<br />
| E || 4 || n || n<br />
|-<br />
| F || 4 || y || n<br />
|}<br />
<br />
The next three values represent the pattern number to use. Specify the number that the pattern is in the list. Past the value of 800, the block number restarts back at block 0, but the block is mirrored. The block mappings use the standard method of layout, start at x0 y0 and move across x values until end of line is reached, then repeating on next y value. If a space is blank in the 16x16 mappings, it will have the values 4000 in every box.<br />
<br />
== 128x128 block mappings: (2478-A477) ==<br />
A simple 12 bit RGB value. One colour on palette is represented by two bytes, and working back from the last value forward an RGB value is specified like this: 0BGR. So if you wanted that colour on the palette to be completely red, you would enter a value of 000F. The first colour on the palette is the default colour of the stage. If you had a value of 0 in one of the background tiles, this colour will be substituted in instead of making it transparent.<br />
<br />
== Pattern load cue (11AF8-?????) ==<br />
Requests are processed in the order they are listed. If you try to load multiple patterns to the same area, the last one will overwrite the first. A six byte value per request. First four bytes are the address to load the patterns from the rom (eg, 0008 30D2). The last two bytes are the address to load the patterns into in the video ram. The pattern view window in genecyst is the easiest way to determine this. Note that whenever clearing out the pattern cue you must also set 11B71 to 00, or else some crap will be written over the first few patterns in the video ram. I have yet to narrow down the exact relationship this variable has with the load cue.<br />
<br />
== Master level trigger (11A78) ==<br />
This trigger is the main trigger that specifies the current "mode" if you will that the game is in. Changing this will make the game switch to the mode you specify once it finishes it's current process.<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || SEGA logo<br />
|-<br />
| 04 || SEGA logo<br />
|-<br />
| 08 || SEGA logo<br />
|-<br />
| 0C || Normal level<br />
|-<br />
| 10 || SEGA logo<br />
|-<br />
| 14 || Continue screen<br />
|-<br />
| 18 || SEGA logo<br />
|-<br />
| 1C || 2 player vs level select screen (s2)<br />
|-<br />
| 20 || Credits<br />
|-<br />
| 24 || Options screen (s2)<br />
|-<br />
| 28 || Level select screen<br />
|-<br />
| 2C || Special stage (instantly fades out)<br />
|-<br />
| 30 || Special stage (instantly fades out)<br />
|-<br />
| 34 || Special stage<br />
|-<br />
| 38 || Competition mode main screen<br />
|-<br />
| 3C || Competition mode grandprix character selection<br />
|-<br />
| 40 || Competition mode character/level selection<br />
|-<br />
| 44 || Competition mode results screen<br />
|-<br />
| 48 || Special stage results screen<br />
|-<br />
| 4C || Save slot selection screen<br />
|-<br />
| 50 || Timeattack competition mode results screen<br />
|}<br />
<br />
These values repeat after 80. Values above 50 have not been used. If you change this value in level the screen will fade out and the data for the thing you have selected will be loaded instead. If you specify a value betwen the values I have listed, you will get some strange results.<br />
<br />
== Level layout (A478-B477) ==<br />
In sonic 3 the level layout is stored in a clever way to save space, and as such allow for the larger levels that the S3 platform supports. I'm not sure what the first 8 bytes do, but after that there's a list of 2 byte ram locations. There's two locations per line of 128x128 blocks. The first one gives the location of the foreground line, and the second one gives the location of the background line. To get this location from a savestate, minus 2478 from the internal file location.<br />
<br />
The lines themselves are simple. The level is delt with as a grid, starting with first tile in top left and working across to the right doing one x value at a time. One byte represents one tile in one grid location. A value of 00 is the first large tile in the database, 01 is the second, etc.<br />
<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s3ss]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s3&diff=96180SCHG:Nem s32009-01-09T01:49:23Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>==Introduction==<br />
Here are my hacking notes on the ''[[Sonic 3]]'' rom. If you use these notes I'd appreciate it if you would mention it with your hack or your utility, so that other people can find their way here. For [[hex editor|hex editing]] I recommend you use a hex utility called [[Hex Workshop]], and for [[emulator]]s I recommend you get both [[Gens]] and [[Genecyst]]. Genecyst may be old and kinda crap, but it has a whole heap of debug outputs that really help when it comes to seeing exactly what it's doing and when.<br />
<br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1's and 0's. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it doesn't it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1's and 0's, so to make it simpler it deals with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent their values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a [[hexadecimal]] value (hex value for short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an [[ASCII]] table, which will convert that value into a recognisable character (Eg. a byte value of 73 becomes a lowercase s on an English ASCII table). You will practically never touch the ASCII version of the code in hacking though.<br />
<br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be necessary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the value, you will in fact end up with 80, because that value you are entering is actually a hex value, but if you use the base converter to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values.<br />
<br />
Another thing you need to know is that each level in ''Sonic 3'' has a value assigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values in ''Sonic 3'':<br />
<br />
{|align="center" border="1"<br />
|00||Angel island zone<br />
|-<br />
|01||Hydrocity zone<br />
|-<br />
|02||Marble garden zone<br />
|-<br />
|03||Carnival Night zone<br />
|-<br />
|04||Flying Battery zone<br />
|-<br />
|05||Ice cap zone<br />
|-<br />
|06||launch base zone<br />
|-<br />
|07||Empty<br />
|-<br />
|08||Empty<br />
|-<br />
|09||Empty<br />
|-<br />
|0A||Empty<br />
|-<br />
|0B||Empty<br />
|-<br />
|0C||Empty<br />
|-<br />
|0D||Empty<br />
|-<br />
|0E||Azure Lake<br />
|-<br />
|0F||Balloon Park<br />
|-<br />
|10||Chrome Gadget<br />
|-<br />
|11||Desert Palace<br />
|-<br />
|12||Endless Mine<br />
|-<br />
|13||Bonus Stage<br />
|-<br />
|14||Empty<br />
|-<br />
|15||Empty<br />
|-<br />
|16||Empty<br />
|-<br />
|17||Empty<br />
|}<br />
<br />
One other thing you need to know is the way that the Mega Drive stores all the art. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get its colour from. The palette has 4 lines, each with 16 colours on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.<br />
<br />
Now these 8x8 blocks are not what make up the level directly. 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have their x, y, or x and y values reversed when placing them in a 16x16 block. Also it's at the 16x16 level that the collision definitions are specified. Now finally we get to a 128x128 block, and these are the things that the actual level info loads. It is made up of 64 16x16 blocks, and each block inside them can use a different palette line. You cannot place anything except a sprite or a 128x128 block directly into a level.<br />
<br />
Now that you know all the basics, here's my breakdown:<br />
<br />
==Address Listing==<br />
For the most part, there are no breaks in this list. If one address follows on directly from another on this list, it does so in the rom, with the exception of data that comes before 50000. All the compiled code that is used in the game is stored in this section, and that's a pain in the ass to sort through, so there will be many breaks there. The column on the left lists it's file location, the column in the middle contains it's name and description, and the column on the right will contain any special notes about it, such as compression format used if applicable, and number of blocks an art tile uses. The right column will also contain a link with the text further info, if that particular block requires it. That link will jump to a detailed explanation of that thing. Anything linked like that will also be listed in the contents at the top of the page. Any patterns that are not used anywhere in the game will be preceeded by this red dot [[Image:Reddot.gif]] .<br />
<br />
See [[SCHG:Nem s3/Address listing]].<br />
<br />
==Offset indexes==<br />
An offset index is a handy way of keeping a block of data grouped together, and also replacing a whole heap of pointers. The way it works is there is a list of two byte vaues, and depending on the block of data the game wants to load, it will take one of those values and add it to the starting address of the offset index. The most common usage is for every act of every level value, there is an offset that acts as the pointer to the block of data to use for it. Lets look at an example:<br />
<br />
{|align="center" border="1"<br />
|5AF8C:<br />
|00F8<br />
|0112<br />
|012C<br />
|0140<br />
|0148<br />
|0150<br />
|0158<br />
|016C<br />
|}<br />
<br />
This is the beginning of the offset index for the pattern load cue's. If the game was trying to access the second pattern load cue, it would take the pointer to the offset index which is 5AF8C, and it would jump to the second offset, which in this case is 0112. It would then add that value to the location of the offset index, and that gives the location of the data.<br />
<br />
{|align="center" border="1"<br />
|5AF8C + 0112 = 5B09E<br />
|}<br />
<br />
So in this case the data is located at 5B09E in the rom. This type of system is used for many things in the rom such as pattern load cue's, sprite mappings, etc.<br />
<br />
==Pointer list==<br />
A pointer list is simply a block of pointers. Pointers are a 4 byte number that gives the location of data. This location is listed on the lefthand side of a hex editor. The most common use of a pointer list in the game is to specify a block of data to be used in conjunction with each level or act. Simply count across to the pointer you wish to modify. For example, if you want to change the pointer to the data for HCZ act 1, and it's done on an act by act basis, you'll want to modify the third pointer in the list, which would be 8 bytes along.<br />
<br />
==Main level load block==<br />
This pointer table is what is used to load up the block mappings and main level patterns for every level in the game. Here's a breakdown of the pointer table in the S3 rom:<br />
<br />
5AB0C-5AF8B: Main level load blocks (Bpatterns/Epatterns/B16x16/E16x16/B128x128/E128x128)<br />
<br />
:5AB0C-5AB3B: Angel Island zone (00)<br />
<br />
::5AB0C-5AB23: Act 1<br />
:::5AB0C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AB10: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AB14: AIZ act 1 base 16x16 block mappings (1A374A) [0A]<br />
:::5AB18: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AB1C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AB20: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
<br />
::5AB24-5AB3B: Act 2<br />
:::5AB24: AIZ act 2 base tiles (1B15D2) [0C]<br />
:::5AB28: AIZ act 2 extended tiles (1B3784) [0C]<br />
:::5AB2C: AIZ act 2 base 16x16 block mappings (1B0052) [0B]<br />
:::5AB30: AIZ act 2 extended 16x16 block mappings (1B08F2) [0B]<br />
:::5AB34: AIZ act 2 128x128 block mappings (1B51E8) [00]<br />
:::5AB38: AIZ act 2 128x128 block mappings (1B51E8) [00]<br />
<br />
:5AB3C-5AB6B: Hydrocity zone (01)<br />
<br />
::5AB3C-5AB53: Act 1<br />
:::5AB3C: HCZ base tiles (1B9668) [0E]<br />
:::5AB40: HCZ act 1 extended tiles (1BAE7A) [0F]<br />
:::5AB44: HCZ base 16x16 block mappings (1B91F8) [0C]<br />
:::5AB48: HCZ act 1 extended 16x16 block mappings (1BA5EA) [0C]<br />
:::5AB4C: HCZ base 128x128 block mappings (1BA2AA) [00]<br />
:::5AB50: HCZ act 1 extended 128x128 block mappings (1BD0CC) [00]<br />
<br />
::5AB54-5AB6B: Act 2<br />
:::5AB54: HCZ base tiles (1B9668) [10]<br />
:::5AB58: HCZ act 2 extended tiles (1BFA6C) [11]<br />
:::5AB5C: HCZ base 16x16 block mappings (1B91F8) [0D]<br />
:::5AB60: HCZ act 2 extended 16x16 block mappings (1BF17C) [0D]<br />
:::5AB64: HCZ base 128x128 block mappings (1BA2AA) [00]<br />
:::5AB68: HCZ act 2 extended 128x128 block mappings (1C18EE) [00]<br />
<br />
:5AB6C-5AB9B: Marble Garden zone (02)<br />
<br />
::5AB6C-5AB83: Act 1<br />
:::5AB6C: MGZ base tiles (1C3EBE) [12]<br />
:::5AB70: MGZ act 1 extended tiles (1C8A70) [12]<br />
:::5AB74: MGZ base 16x16 block mappings (1C356E) [0E]<br />
:::5AB78: MGZ act 1 extended 16x16 block mappings (1C8760) [0E]<br />
:::5AB7C: MGZ base 128x128 block mappings (1C6460) [00]<br />
:::5AB80: MGZ act 1 extended 128x128 block mappings (1C9452) [00]<br />
<br />
::5AB84-5AB9B: Act 2<br />
:::5AB84: MGZ base tiles (1C3EBE) [14]<br />
:::5AB88: MGZ act 2 extended tiles (1CA132) [14]<br />
:::5AB8C: MGZ base 16x16 block mappings (1C356E) [0F]<br />
:::5AB90: MGZ act 2 extended 16x16 block mappings (1C9CD2) [0F]<br />
:::5AB94: MGZ base 128x128 block mappings (1C6460) [00]<br />
:::5AB98: MGZ act 2 extended 128x128 block mappings (1CB1C4) [00]<br />
<br />
:5AB9C-5ABCB: Carnival Night zone<br />
<br />
::5AB9C-5ABB3: Act 1<br />
:::5AB9C: CNZ tiles (1CDC74) [16]<br />
:::5ABA0: CNZ tiles (1CDC74) [17]<br />
:::5ABA4: CNZ 16x16 block mappings (1CCC34) [10]<br />
:::5ABA8: CNZ 16x16 block mappings (1CCC34) [10]<br />
:::5ABAC: CNZ 128x128 block mappings (1D0E96) [00]<br />
:::5ABB0: CNZ 128x128 block mappings (1D0E96) [00]<br />
<br />
::5ABB4-5ABCB: Act 2<br />
:::5ABB4: CNZ tiles (1CDC74) [18]<br />
:::5ABB8: CNZ tiles (1CDC74) [19]<br />
:::5ABBC: CNZ 16x16 block mappings (1CCC34) [11]<br />
:::5ABC0: CNZ 16x16 block mappings (1CCC34) [11]<br />
:::5ABC4: CNZ 128x128 block mappings (1D0E96) [00]<br />
:::5ABC8: CNZ 128x128 block mappings (1D0E96) [00]<br />
<br />
:5ABCC-5ABFB: Flying battery zone (04)<br />
<br />
<font color="Red">MEDIAWIKI WON'T ACCEPT THIS BLOCK?</font><br />
<br />
::5ABE4-5ABFB: Act 2<br />
:::5ABE4: ICZ base 16x16 block mappings (1D3FB6) [1C]<br />
:::5ABE8: ICZ base 16x16 block mappings (1D3FB6) [1C]<br />
:::5ABEC: ICZ base 16x16 block mappings (1D3FB6) [13]<br />
:::5ABF0: ICZ base 16x16 block mappings (1D3FB6) [13]<br />
:::5ABF4: ICZ base 16x16 block mappings (1D3FB6) [00]<br />
:::5ABF8: ICZ base 16x16 block mappings (1D3FB6) [00]<br />
<br />
:5ABFC-5AC2B: Ice Cap zone (05)<br />
<br />
::5ABFC-5AC13: Act 1<br />
:::5ABFC: ICZ base tiles (1D4296) [1E]<br />
:::5AC00: ICZ act 1 extended tiles (1D64C8) [1E]<br />
:::5AC04: ICZ base 16x16 block mappings (1D3FB6) [14]<br />
:::5AC08: ICZ act 1 extended 16x16 block mappings (1D5958) [14]<br />
:::5AC0C: ICZ base 128x128 block mappings (1D56A8) [00]<br />
:::5AC10: ICZ act 1 extended 128x128 block mappings (1D844A) [00]<br />
<br />
::5AC14-5AC2C: Act 2<br />
:::5AC14: ICZ base tiles (1D4296) [20]<br />
:::5AC18: ICZ act 2 extended tiles (1DAF0A) [20]<br />
:::5AC1C: ICZ base 16x16 block mappings (1D3FB6) [15]<br />
:::5AC20: ICZ act 2 extended 16x16 block mappings (1DA26A) [15]<br />
:::5AC24: ICZ base 128x128 block mappings (1D56A8) [00]<br />
:::5AC28: ICZ act 2 extended 128x128 block mappings (1DCFBC) [00]<br />
<br />
:5AC2C-5AC5B: Launch base zone (06)<br />
<br />
::5AC2C-5AC43: Act 1<br />
:::5AC2C: LBZ base tiles (1DFABC) [22]<br />
:::5AC30: LBZ act 1 extended tiles (1E120E) [22]<br />
:::5AC34: LBZ base 16x16 block mappings (1DEA8C) [16]<br />
:::5AC38: LBZ act 1 extended 16x16 block mappings (1DEFCC) [16]<br />
:::5AC3C: LBZ act 1 128x128 block mappings (1E2FA0) [00]<br />
:::5AC40: LBZ act 1 128x128 block mappings (1E2FA0) [00]<br />
<br />
::5AC44-5AC5B: Act 2<br />
:::5AC44: LBZ base tiles (1DFABC) [24]<br />
:::5AC48: LBZ act 2 extended tiles (1E77D0) [25]<br />
:::5AC4C: LBZ base 16x16 block mappings (1DEA8C) [17]<br />
:::5AC50: LBZ act 2 extended 16x16 block mappings (1E5F70) [17]<br />
:::5AC54: LBZ act 2 128x128 block mappings (1EAF04) [00]<br />
:::5AC58: LBZ act 2 128x128 block mappings (1EAF04) [00]<br />
<br />
:5AC5C-5AC8B: Empty (07)<br />
<br />
::5AC5C-5AC73: Act 1<br />
:::5AC5C: AL 16x16 block mappings (1EE0C4) [26]<br />
:::5AC60: AL 16x16 block mappings (1EE0C4) [26]<br />
:::5AC64: AL 16x16 block mappings (1EE0C4) [18]<br />
:::5AC68: AL 16x16 block mappings (1EE0C4) [18]<br />
:::5AC6C: AL 16x16 block mappings (1EE0C4) [00]<br />
:::5AC70: AL 16x16 block mappings (1EE0C4) [00]<br />
<br />
::5AC74-5AC8B: Act 2<br />
:::5AC74: AL 16x16 block mappings (1EE0C4) [28]<br />
:::5AC78: AL 16x16 block mappings (1EE0C4) [28]<br />
:::5AC7C: AL 16x16 block mappings (1EE0C4) [19]<br />
:::5AC80: AL 16x16 block mappings (1EE0C4) [19]<br />
:::5AC84: AL 16x16 block mappings (1EE0C4) [00]<br />
:::5AC88: AL 16x16 block mappings (1EE0C4) [00]<br />
<br />
:5AC8C-5ACBB: Empty (08)<br />
<br />
::5AC8C-5ACA3: Act 1<br />
:::5AC8C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AC90: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AC94: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AC98: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AC9C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5ACA0: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5ACA4-5ACBB: Act 2<br />
:::5ACA4: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5ACA8: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5ACAC: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5ACB0: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5ACB4: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5ACB8: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5ACBC-5ACEB: Empty (09)<br />
<br />
::5ACBC-5ACD3: Act 1<br />
:::5ACBC: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACC0: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACC4: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACC8: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACCC: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACD0: AL 16x16 block mappings (1EE0C4) [2E]<br />
<br />
::5ACD4-5ACEB: Act 2<br />
:::5ACD4: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACD8: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACDC: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACE0: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACE4: AL 16x16 block mappings (1EE0C4) [2E]<br />
:::5ACE8: AL 16x16 block mappings (1EE0C4) [2E]<br />
<br />
:5ACEC-5AD04: Empty (0A)<br />
<br />
::5ACEC-5AD03: Act 1<br />
:::5ACEC: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5ACF0: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5ACF4: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5ACF8: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5ACFC: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD00: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AD04-5AD1B: Act 2<br />
:::5AD04: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AD08: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AD0C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD10: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD14: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD18: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5AD1C-5AD4C: Empty (0B)<br />
<br />
::5AD1C-5AD33: Act 1<br />
:::5AD1C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AD20: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AD24: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AD28: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AD2C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD30: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AD34-5AD4B: Act 2<br />
:::5AD34: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AD38: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AD3C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD40: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD44: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD48: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5AD4C-5AD7B: Empty (0C)<br />
<br />
::5AD4C-5AD63: Act 1<br />
:::5AD4C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AD50: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AD54: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AD58: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AD5C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD60: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AD64-5AD7C: Act 2<br />
:::5AD64: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AD68: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AD6C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD70: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AD74: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD78: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5AD7C-5AD93: Empty (0D)<br />
<br />
::5AD7C-5AD93: Act 1<br />
:::5AD7C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AD80: Unknown patterns (1A944E) [0B]<br />
:::5AD84: AIZ act 1 base 16x16 block mappings (1A374A) [2A]<br />
:::5AD88: Unknown extended 16x16 block mappings (1A458A) [2A]<br />
:::5AD8C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AD90: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AD94-5ADAB: Act 2<br />
:::5AD94: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AD98: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AD9C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5ADA0: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5ADA4: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5ADA8: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5ADAC-5ADDB: Azure lake (0E)<br />
<br />
::5ADAC-5ADC4: Act 1<br />
:::5ADAC: AL tiles (1EEB84) [42]<br />
:::5ADB0: AL tiles (1EEB84) [42]<br />
:::5ADB4: AL 16x16 block mappings (1EE0C4) [26]<br />
:::5ADB8: AL 16x16 block mappings (1EE0C4) [26]<br />
:::5ADBC: AL 128x128 block mappings (1F1936) [00]<br />
:::5ADC0: AL 128x128 block mappings (1F1936) [00]<br />
<br />
::5ADC4-5ADDC: Act 2<br />
:::5ADC4: AL tiles (1EEB84) [42]<br />
:::5ADC8: AL tiles (1EEB84) [42]<br />
:::5ADCC: AL 16x16 block mappings (1EE0C4) [27]<br />
:::5ADD0: AL 16x16 block mappings (1EE0C4) [27]<br />
:::5ADD4: AL 128x128 block mappings (1F1936) [00]<br />
:::5ADD8: AL 128x128 block mappings (1F1936) [00]<br />
<br />
:5ADDC-5AE0B: Ballon Park (0F)<br />
<br />
::5ADDC-5ADF3: Act 1<br />
:::5ADDC: BP tiles (1F2896) [43]<br />
:::5ADE0: BP tiles (1F2896) [43]<br />
:::5ADE4: BP 16x16 block mappings (1F1FC6) [28]<br />
:::5ADE8: BP 16x16 block mappings (1F1FC6) [28]<br />
:::5ADEC: BP 128x128 block mappings (1F4878) [00]<br />
:::5ADF0: BP 128x128 block mappings (1F4878) [00]<br />
<br />
::5ADF4-5AE0B: Act 2<br />
:::5ADF4: BP tiles (1F2896) [43]<br />
:::5ADF8: BP tiles (1F2896) [43]<br />
:::5ADFC: BP 16x16 block mappings (1F1FC6) [29]<br />
:::5AE00: BP 16x16 block mappings (1F1FC6) [29]<br />
:::5AE04: BP 128x128 block mappings (1F4878) [00]<br />
:::5AE08: BP 128x128 block mappings (1F4878) [00]<br />
<br />
:5AE0C-5AE3B: Chrome Gadget (10)<br />
<br />
::5AE0C-5AE23: Act 1<br />
:::5AE0C: CG tiles (1F5948) [44]<br />
:::5AE10: CG tiles (1F5948) [44]<br />
:::5AE14: GC 16x16 block mappings (1F4F68) [34]<br />
:::5AE18: GC 16x16 block mappings (1F4F68) [34]<br />
:::5AE1C: GC 128x128 block mappings (1F743A) [00]<br />
:::5AE20: GC 128x128 block mappings (1F743A) [00]<br />
<br />
::5AE24-5AE3B: Act 2<br />
:::5AE24: CG tiles (1F5948) [44]<br />
:::5AE28: CG tiles (1F5948) [44]<br />
:::5AE2C: GC 16x16 block mappings (1F4F68) [34]<br />
:::5AE30: GC 16x16 block mappings (1F4F68) [34]<br />
:::5AE34: GC 128x128 block mappings (1F743A) [00]<br />
:::5AE38: GC 128x128 block mappings (1F743A) [00]<br />
<br />
:5AE3C-5AE6B: Desert Palace (11)<br />
<br />
::5AE3C-5AE53: Act 1<br />
:::5AE3C: DP tiles (1F81BA) [45]<br />
:::5AE40: DP tiles (1F81BA) [45]<br />
:::5AE44: DP 16x16 block mappings (1F7A6A) [35]<br />
:::5AE48: DP 16x16 block mappings (1F7A6A) [35]<br />
:::5AE4C: DP 128x128 block mappings (1FA75C) [00]<br />
:::5AE50: DP 128x128 block mappings (1FA75C) [00]<br />
<br />
::5AE54-5AE6B: Act 2<br />
:::5AE54: DP tiles (1F81BA) [45]<br />
:::5AE58: DP tiles (1F81BA) [45]<br />
:::5AE5C: DP 16x16 block mappings (1F7A6A) [35]<br />
:::5AE60: DP 16x16 block mappings (1F7A6A) [35]<br />
:::5AE64: DP 128x128 block mappings (1FA75C) [00]<br />
:::5AE68: DP 128x128 block mappings (1FA75C) [00]<br />
<br />
:5AE6C-5AE9B: Endless Mine (12)<br />
<br />
::5AE6C-5AE83: Act 1<br />
:::5AE6C: EM tiles (1FB6CC) [46]<br />
:::5AE70: EM tiles (1FB6CC) [46]<br />
:::5AE74: EM 16x16 block mappings (1FAC1C) [36]<br />
:::5AE78: EM 16x16 block mappings (1FAC1C) [36]<br />
:::5AE7C: EM 128x128 block mappings (1FE2FE) [00]<br />
:::5AE80: EM 128x128 block mappings (1FE2FE) [00]<br />
<br />
::5AE84-5AE9B: Act 2<br />
:::5AE84: EM tiles (1FB6CC) [46]<br />
:::5AE88: EM tiles (1FB6CC) [46]<br />
:::5AE8C: EM 16x16 block mappings (1FAC1C) [36]<br />
:::5AE90: EM 16x16 block mappings (1FAC1C) [36]<br />
:::5AE94: EM 128x128 block mappings (1FE2FE) [00]<br />
:::5AE98: EM 128x128 block mappings (1FE2FE) [00]<br />
<br />
:5AE9C-5AECB: Bonus stage (13)<br />
<br />
::5AE9C-5AEB3: Act 1<br />
:::5AE9C: Bonus stage 1 base tiles (1FEE2E) [47]<br />
:::5AEA0: Bonus stage 1 base tiles (1FEE2E) [47]<br />
:::5AEA4: Bonus stage 16x16 block mapings (1FEA0E) [33]<br />
:::5AEA8: Bonus stage 16x16 block mapings (1FEA0E) [33]<br />
:::5AEAC: Bonus stage 128x128 block mappings (1FFB80) [00]<br />
:::5AEB0: Bonus stage 128x128 block mappings (1FFB80) [00]<br />
<br />
::5AEB4-5AECB: Act 2<br />
:::5AEB4: Bonus stage 1 base tiles (1FEE2E) [47]<br />
:::5AEB8: Bonus stage 1 base tiles (1FEE2E) [47]<br />
:::5AEBC: Bonus stage 16x16 block mapings (1FEA0E) [33]<br />
:::5AEC0: Bonus stage 16x16 block mapings (1FEA0E) [33]<br />
:::5AEC4: Bonus stage 128x128 block mappings (1FFB80) [00]<br />
:::5AEC8: Bonus stage 128x128 block mappings (1FFB80) [00]<br />
<br />
:5AECC-5AEFB: Empty (14)<br />
<br />
::5AECC-5AEE3: Act 1<br />
:::5AECC: Nothing (1FFF20) [47]<br />
:::5AED0: Nothing (1FFF20) [47]<br />
:::5AED4: Nothing (1FFF20) [37]<br />
:::5AED8: Nothing (1FFF20) [37]<br />
:::5AEDC: Nothing (1FFF20) [00]<br />
:::5AEE0: Nothing (1FFF20) [00]<br />
<br />
::5AEE4-5AEFB: Act 2<br />
:::5AEE4: Nothing (1FFF20) [47]<br />
:::5AEE8: Nothing (1FFF20) [47]<br />
:::5AEEC: Nothing (1FFF20) [37]<br />
:::5AEF0: Nothing (1FFF20) [37]<br />
:::5AEF4: Nothing (1FFF20) [00]<br />
:::5AEF8: Nothing (1FFF20) [00]<br />
<br />
:5AEFC-5AF2B: Empty (15)<br />
<br />
::5AEFC-5AF13: Act 1<br />
:::5AEFC: Nothing (1FFF20) [47]<br />
:::5AF00: Nothing (1FFF20) [47]<br />
:::5AF04: Nothing (1FFF20) [38]<br />
:::5AF08: Nothing (1FFF20) [38]<br />
:::5AF0C: Nothing (1FFF20) [00]<br />
:::5AF10: Nothing (1FFF20) [00]<br />
<br />
::5AF14-5AF2C: Act 2<br />
:::5AF14: Nothing (1FFF20) [47]<br />
:::5AF18: Nothing (1FFF20) [47]<br />
:::5AF1C: Nothing (1FFF20) [38]<br />
:::5AF20: Nothing (1FFF20) [38]<br />
:::5AF24: Nothing (1FFF20) [00]<br />
:::5AF28: Nothing (1FFF20) [00]<br />
<br />
:5AF2C-5AF5B: Empty (16)<br />
<br />
::5AF2C-5AF43: Act 1<br />
:::5AF2C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AF30: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AF34: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AF38: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AF3C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AF40: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AF44-5AF5B: Act 2<br />
:::5AF44: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AF48: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AF4C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AF50: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AF54: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AF58: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
:5AF5C-5AF73: Empty (17)<br />
<br />
::5AF5C-5AF73: Act 1<br />
:::5AF5C: AIZ act 1 base tiles (1A566A) [0B]<br />
:::5AF60: AIZ act 1 extended tiles (1A647C) [0B]<br />
:::5AF64: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AF68: AIZ act 1 extended 16x16 block mappings (1A394A) [0A]<br />
:::5AF6C: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AF70: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
::5AF74-5AF8B: Act 2<br />
:::5AF74: AIZ act 1 base tiles (1A566A) [0C]<br />
:::5AF78: AIZ act 1 extended tiles (1A647C) [0C]<br />
:::5AF7C: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AF80: AIZ act 1 extended 16x16 block mappings (1A394A) [0B]<br />
:::5AF84: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
:::5AF88: AIZ act 1 128x128 block mappings (1ABC40) [00]<br />
<br />
Sonic 3 is quite different from the previous sonic games in the way that the core of S3 allows the programmers to change virtually anything about the level during game easily, making things such as smooth transition betwen acts and intro sequences possible. The data itself is often cut into sections, allowing the programmers to load just the modules that need updating. For each level, there may be a base block of data and an extended block of data for each thing. The way this works is the base block of data is the first section of that data block, and the extended one is the second. If you decompress both of them and chuck the extended one on the end of the base one, you get the full block of data. It is seperated like this to allow programmers to duplicate as little data as possible in any patches they may want to apply to that data while the level is running, and thus save rom space and cut down on the power required to make the transition. Now as you can see, these pointers specify the loading addresses in the rom for the 16x16 and 128x128 block mappings, as well as the main pattern block for that level. The main pattern block will always be loaded into the VRAM at address 0000. These loading addresses are all preceeded by a one byte value, so the address pointer only uses three bytes rather than the standard four. The value that proceeds the 128x128 block mappings specifies a value on the palette index to load for that level. For more information on the palette system, go [[#Palletes|here]]. The values preceeding the main level pattern and 16x16 block mapping pointers give the index numbers of the pattern load cue's to use for that level. For more information on that go [[#Pattern_load_cue's|here]].<br />
<br />
==Pattern load cue's==<br />
The pattern load cue's are what loads all the peices of art into the VRAM that are not in the main level load block. Here's a breakdown of the pattern load cue's in the S3 rom:<br />
<br />
{| border="1" align="center"<br />
| Index<br />
| Location<br />
| Name<br />
| Contents<br />
| Rom<br />
| Vram<br />
| Number<br />
|-<br />
| 00<br />
| 5B084<br />
| Unknown<br />
| -Sonic lives counter<br />-Ring and score/time/rings<br />-Points and starpoll<br />-Monitor<br />
| 15CEE6<br />15F2EC<br />15F528<br />15D2DE<br />
| FA80<br />D780<br />BC80<br />9880<br />
| (3)<br />
|-<br />
| 01<br />
| 5B09E<br />
| Unknown<br />
| -Sonic lives counter<br />-Monitor<br />-Ring and score/time/rings<br />-Points and starpoll<br />
| 15CEE6<br />15D2DE<br />15F2EC<br />15F528<br />
| FA80<br />9880<br />D780<br />BC80<br />
| (3)<br />
|-<br />
| 02<br />
| 5B0B8<br />
| Unknown<br />
| -Explosion<br />-Squirrel<br />-Bluebird<br />
| 15E6C0<br />15FDA6<br />15F9D4<br />
| B400<br />B000<br />B240<br />
| (2)<br />
|-<br />
| 03<br />
| 5B0CC<br />
| Game/Time over<br />
| -Game/Time over text<br />
| 15E49A<br />
| F380<br />
| (0)<br />
|-<br />
| 04<br />
| 5B0D4<br />
| Signpost<br />
| -End of level signpost<br />
| 15DA5A<br />
| A000<br />
| (0)<br />
|-<br />
| 05<br />
| 5B0DC<br />
| Springs and spikes<br />
| -Horizontal springs and vertical spikes<br />
| 15EFFC<br />
| 9280<br />
| (0)<br />
|-<br />
| 06<br />
| 5B0E4<br />
| Competition mode<br />
| -Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 196D10<br />196B9C<br />196F02<br />
| 7220<br />75A0<br />78C0<br />
| (2)<br />
|-<br />
| 07<br />
| 5B0F8<br />
| Unknown<br />
| -Tails lives counter<br />-Monitor<br />-Ring and score/time/rings<br />-Points and starpoll<br />
| 15CFFE<br />15D2DE<br />15F2EC<br />15F528<br />
| FA80<br />9880<br />D780<br />BC80<br />
| (3)<br />
|-<br />
| 08<br />
| 5B112<br />
| Monitor<br />
| -Monitor<br />
| 15D2DE<br />
| 9880<br />
| (0)<br />
|-<br />
| 09<br />
| 5B11A<br />
| Special stage platform test<br />
| -Special stage sphere<br />
| 911CE<br />
| 9C00<br />
| (0)<br />
|-<br />
| 0A<br />
| 5B122<br />
| AIZ intro<br />
| -Waves from AIZ intro<br />
| 1481A0<br />
| 7A20<br />
| (0)<br />
|-<br />
| 0B<br />
| 5B12A<br />
| AIZ 1st load cue<br />
| -Rope on flying fox<br />-Unknown<br />-Unknown<br />-Impact splash on water<br />-Bubbles from underwater<br />-Grass tiles<br />
| 18D8BC<br />18DA22<br />18DC90<br />18E4D8<br />15E1FC<br />18D586<br />
| 8360<br />6480<br />6660<br />79E0<br />8B80<br />7EE0<br />
| (5)<br />
|-<br />
| 0C-0D<br />
| 5B150<br />
| AIZ 2nd load cue<br />
| -Misc AIZ blocks<br />-Rope on flying fox<br />-Unknown<br />-Bubbles<br />-Button<br />-Unknown<br />
| 18E760<br />18D8BC<br />18DB46<br />15E1FC<br />15C900<br />18D72A<br />
| 5D20<br />8360<br />8700<br />8B80<br />8AC0<br />8800<br />
| (5)<br />
|-<br />
| 0E<br />
| 5B176<br />
| HCZ 1st load cue<br />
| -Bubbles<br />-Misc HCZ blocks<br />-Unknown<br />-Misc MCZ blocks<br />-Unknown<br />-Metal spikeball<br />
| 15E1FC<br />18FD88<br />18FCD4<br />190348<br />18FBB4<br />18FAEC<br />
| 8B80<br />7940<br />84C0<br />6F40<br />85C0<br />87C0<br />
| (5)<br />
|-<br />
| 0F<br />
| 5B19C<br />
| HCZ 2nd load cue<br />
| -Blowfly<br />
| 16A3E0<br />
| 8980<br />
| (0)<br />
|-<br />
| 10<br />
| 5B1A4<br />
| Unknown<br />
| -Bubbles<br />-Misc HCZ blocks<br />-Unknown<br />-Unknown<br />-Metal spikeball<br />-Sliding tube<br />
| 15E1FC<br />18FD88<br />18FCD4<br />18FBB4<br />18FAEC<br />191B36<br />
| 8B80<br />7940<br />84C0<br />85C0<br />87C0<br />6B80<br />
| (5)<br />
|-<br />
| 11<br />
| 5B1CA<br />
| Unknown<br />
| -Unknown<br />-HCZ bridge<br />-Blowfly<br />
| 193714<br />19204C<br />16A3E0<br />
| 6A00<br />0500<br />8980<br />
| (2)<br />
|-<br />
| 12-13<br />
| 5B1DE<br />
| MGZ 1st load cue<br />
| -Unknown<br />-Unknown<br />-MGZ signs<br />-Diagonal spring<br />
| 19382E<br />19426C<br />19487C<br />15CBD2<br />
| 6BE0<br />7FE0<br />8A20<br />8F00<br />
| (3)<br />
|-<br />
| 14-15<br />
| 5B1F8<br />
| MGZ 2nd load cue<br />
| -Unknown<br />-Unknown<br />-MGZ signs<br />-Diagonal spring<br />
| 19382E<br />19426C<br />19487C<br />15CBD2<br />
| 6BE0<br />7FE0<br />8A20<br />8F00<br />
| (3)<br />
|-<br />
| 16-19<br />
| 5B212<br />
| CNZ 1st load cue<br />
| -Misc CNZ blocks<br />-Bubbles<br />-Lightbulb<br />
| 194AB6<br />15E1FC<br />195874<br />
| 6A20<br />8B80<br />8600<br />
| (2)<br />
|-<br />
| 1A-1D<br />
| 5B226<br />
| CNZ 2nd load cue<br />
| -Diagonal spring<br />
| 15CBD2<br />
| 8740<br />
| (0)<br />
|-<br />
| 1E-1F<br />
| 5B22E<br />
| ICZ 1st load cue<br />
| -Unknown<br />-Diagonal spring<br />-Button<br />-Ice blocks<br />-Unknown<br />
| 38FFE<br />15CBD2<br />15C900<br />171B0E<br />172732<br />
| D700<br />8740<br />8AC0<br />76C0<br />68C0<br />
| (4)<br />
|-<br />
| 20-21<br />
| 5B24E<br />
| ICZ 2nd load cue<br />
| -Diagonal spring<br />-Button<br />-Ice blocks<br />-Unknown<br />-Bubbles<br />
| 15CBD2<br />15C900<br />171B0E<br />172BB4<br />15E1FC<br />
| 8740<br />8AC0<br />76C0<br />6EE0<br />8B80<br />
| (4)<br />
|-<br />
| 22-23<br />
| 5B26E<br />
| LBZ 1st load cue<br />
| -Unknown<br />-Unknown<br />
| 1959DE<br />1964FC<br />
| 7860<br />8AA0<br />
| (1)<br />
|-<br />
| 24<br />
| 5B27C<br />
| LBZ 2nd load cue<br />
| -Unknown<br />-Bubbles<br />
| 1959DE<br />15E1FC<br />
| 7860<br />8B80<br />
| (1)<br />
|-<br />
| 25<br />
| 5B28A<br />
| Unknown<br />
| -Unknown<br />
| 196760<br />
| 5D40<br />
| (0)<br />
|-<br />
| 26-2D<br />
| 5B292<br />
| Unknown<br />
| -Diagonal spring<br />-Horizontal and vertical spikes<br />
| 15CBD2<br />15EFFC<br />
| 8740<br />9280<br />
| (1)<br />
|-<br />
| 2E-41<br />
| 5B2A0<br />
| Unknown<br />
| -Diagonal spring<br />-Horizontal and vertical spikes<br />
| 15CBD2<br />15EFFC<br />
| 8740<br />9280<br />
| (1)<br />
|-<br />
| 42<br />
| 5B2AE<br />
| Azure lake<br />
| -Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 14F5E2<br />1973F8<br />197BCA<br />197570<br />1980C4<br />196D10<br />196B9C<br />196F02<br />
| FC00<br />D780<br />E000<br />C000<br />EBC0<br />7220<br />75A0<br />78C0<br />
| (7)<br />
|-<br />
| 43<br />
| 5B2E0<br />
| Baloon park<br />
| -Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 19815E<br />14F5E2<br />1973F8<br />197BCA<br />197570<br />1980C4<br />196D10<br />196B9C<br />196F02<br />
| 6000<br />FC00<br />D780<br />E000<br />C000<br />EBC0<br />7220<br />75A0<br />78C0<br />
| (8)<br />
|-<br />
| 44<br />
| 5B318<br />
| Chrome gadget<br />
| -Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 1989A8<br />14F5E2<br />1973F8<br />197BCA<br />197570<br />1980C4<br />196D10<br />196B9C<br />196F02<br />
| 5000<br />FC00<br />D780<br />E000<br />C000<br />EBC0<br />7220<br />75A0<br />78C0<br />
| (8)<br />
|-<br />
| 45<br />
| 5B350<br />
| Desert palace<br />
| -Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 1989A8<br />14F5E2<br />1973F8<br />197BCA<br />197570<br />1980C4<br />196D10<br />196B9C<br />196F02<br />
| 5000<br />FC00<br />D780<br />E000<br />C000<br />EBC0<br />7220<br />75A0<br />78C0<br />
| (8)<br />
|-<br />
| 46<br />
| 5B388<br />
| Endless mine<br />
| -Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Unknown<br />-Mini spring and spikes<br />-Mini spring and button<br />-Competition mode powerups<br />
| 1989A8<br />14F5E2<br />1973F8<br />197BCA<br />197570<br />1980C4<br />196D10<br />196B9C<br />196F02<br />
| 5000<br />FC00<br />D780<br />E000<br />C000<br />EBC0<br />7220<br />75A0<br />78C0<br />
| (8)<br />
|-<br />
| 47<br />
| 5B3C0<br />
| Dispencer bonus stage<br />
| -Dispencer<br />-Horizontal springs and vertical spikes<br />
| 18AE2A<br />15EFFC<br />
| 2B60<br />9280<br />
| (1)<br />
|-<br />
| 48-5A<br />
| 5B3CE<br />
| AIZ act 1 boss<br />
| -Firebomber from AIZ<br />-Bombs launched by firebomber<br />-Explosion<br />-Small explosion<br />
| 164BF2<br />1671A2<br />17FB50<br />17F800<br />
| 8340<br />8E80<br />9040<br />9A40<br />
| (3)<br />
|-<br />
| 5B<br />
| 5B3E8<br />
| Unknown<br />
| -Unknown<br />-Small explosion<br />
| 168400<br />17F800<br />
| 6080<br />A000<br />
| (1)<br />
|-<br />
| 5C-5D<br />
| 5B3F6<br />
| Unknown<br />
| -Unknown<br />-Small explosion<br />
| 16E548<br />17F800<br />
| A5C0<br />A000<br />
| (1)<br />
|-<br />
| 5E<br />
| 5B404<br />
| Unknown<br />
| -Unknown<br />-Egg prison<br />-Small explosion<br />-Squirrel<br />-Bluebird<br />
| 1706B0<br />182180<br />17F800<br />15FDA6<br />15F9D4<br />
| A5C0<br />89C0<br />A000<br />85C0<br />8800<br />
| (4)<br />
|-<br />
| 5F<br />
| 5B424<br />
| Unknown<br />
| -Unknown<br />-Small explosion<br />
| 173CCC<br />17F800<br />
| 9520<br />A000<br />
| (1)<br />
|-<br />
| 60<br />
| 5B432<br />
| Unknown<br />
| -Robotnic in main ship<br />-Unknown<br />
| 18041E<br />1791DE<br />
| A5C0<br />9AC0<br />
| (1)<br />
|-<br />
| 61-6A<br />
| 5B440<br />
| FBZ act 2 mini boss<br />
| -Lazer boss from FBZ<br />-Robotnic<br />-More Robotnic stuff<br />-Small explosion<br />
| 170C76<br />180BEC<br />181002<br />17F800<br />
| A5C0<br />8CC0<br />9520<br />A000<br />
| (3)<br />
|-<br />
| 6B<br />
| 5B45A<br />
| Unknown<br />
| -Robotnic in main ship<br />-Small explosion<br />
| 18041E<br />17F800<br />
| A5C0<br />9A40<br />
| (1)<br />
|-<br />
| 6C<br />
| 5B468<br />
| HCZ act 2 boss<br />
| -Water sprial<br />-Robotnic in main ship<br />-Small explosion<br />-Egg prison<br />
| 16929E<br />18041E<br />17F800<br />182180<br />
| 6400<br />A5C0<br />A000<br />9280<br />
| (3)<br />
|-<br />
| 6D<br />
| 5B482<br />
| Unknown<br />
| -Robotnic in main ship<br />-Small explosion<br />-Egg prison<br />
| 18041E<br />17F800<br />182180<br />
| A5C0<br />A000<br />9280<br />
| (2)<br />
|-<br />
| 6E<br />
| 5B496<br />
| Unknown<br />
| -Unknown<br />-Robotnic in main ship<br />-Small explosion<br />-Egg prison<br />
| 16EA04<br />18041E<br />17F800<br />182180<br />
| 8600<br />A5C0<br />A000<br />9280<br />
| (3)<br />
|-<br />
| 6F<br />
| 5B4B0<br />
| FBZ act 2 boss<br />
| -FBZ act 2 boss<br />-Robotnic's head<br />-Other explosion<br />-Robotnic in main ship<br />-Small explosion<br />-Egg prison<br />
| 171178<br />18097A<br />1800A2<br />18041E<br />17F800<br />182180<br />
| 7C00<br />8200<br />8A80<br />A5C0<br />A000<br />9280<br />
| (5)<br />
|-<br />
| 70<br />
| 5B4D6<br />
| Unknown<br />
| -Unknown<br />-Robotnic in main ship<br />-Small explosion<br />-Egg prison<br />
| 172F1E<br />18041E<br />17F800<br />182180<br />
| 54C0<br />A5C0<br />A000<br />9280<br />
| (3)<br />
|-<br />
| 71<br />
| 5B4F0<br />
| Unknown<br />
| -Unknown<br />-Small explosion<br />
| 17599C<br />17F800<br />
| 7540<br />A000<br />
| (1)<br />
|-<br />
| 72-77<br />
| 5B4FE<br />
| Unknown<br />
| -Robotnic in main ship<br />-More Robotnic stuff<br />-Small explosion<br />
| 18041E<br />181002<br />17F800<br />
| A5C0<br />9520<br />A000<br />
| (2)<br />
|-<br />
| 78-7B<br />
| 5B512<br />
| Unknown<br />
| -Robotnic in main ship<br />-Small explosion<br />
| 18041E<br />17F800<br />
| A5C0<br />A000<br />
| (1)<br />
|}<br />
<br />
his pointer list has an offset index to locate the correct cue. Go here for an explanation of how this works. Note that the number in parenthesis is the recorded number of requests in the cue. If a number follows it in brackets, it means the actual number that exists differs from the recorded one. This means any load requests past the recorded number were not being loaded, but still exist in the rom. Now, each load cue has a two byte value before it that specifies how many addresses are in the cue, to avoid it reading too far, and going into the next cue. This value is dead simple, just enter the number of patterns on the cue in hex between the first two bytes, but you have to count 00 as 1, so if there was 16 loading addresses in the cue, you'd have 000F preceding it. After that, there are 6 bytes per load request. The first four bytes are a pointer to the art block to use, and the two bytes after that are the location in the VRAM to load them into. To change the pattern load cue's being loaded for a level, you need to change the values in the main level load block. For more information on that go here.<br />
<br />
==Collision definitions==<br />
Ok, I'm going to explain how collision works on objects that are not sprites in the sonic games. First of all forget the image that the block contains. The image has absolutely nothing to do with the collision. There's basically in invisible collision box on top of every 16x16 block that sets what's solid and what's not. This collision box has two parts to it. The main part of it is the collision array (an array is basically a table of values). The collision array stores the actual data that says that is a block is solid in certain places. It does that through 16 bytes per collision box. To understand how those 16 bytes set what's solid, imagine a 16x16 block. Now imagine that 16x16 block with the numbers 1-10 (hex) down the side starting from the bottom and going up to the top, and starting from the left and going up as it moves right along the top, so that you can give an exact location of each pixel. (eg, the top left pixel would be 10,00) Now, in this array the first two bytes define what's solid for the row of pixels on the left side of that 16x16 block. Basically the first of those two bytes says where to start making things solid, and the second byte says where to stop making them solid. So if you entered the value 0010, the first row would be solid from the very bottom of the block all the way up to the top. If you were to enter the value 020E, there would be two pixels on either side of the block that are not solid, and everything in the middle would be. The next two bytes after that are for the next row, etc. After 16 bytes the definitions for the next collision box begin.<br />
<br />
Now, to specify which blocks use which collision boxes, there are collision indexes, which give an array location for each 16x16 block. If you look at the space used by the collision array, you can divide that by 16 (the number of bytes used by each entry into the array) to give a one byte value, which represents the maximum number of collision boxes that the array can hold in the S3 platform, which is FF. Now, for each level there is at least one 16x16 collision index, and that index consists of a whole heap of array locations, one for each 16x16 block. If for example you wanted the 9th 16x16 block to use the collision box with an array location of 3E, you would give the 9th byte of the collision index for that level a value of 3E.<br />
<br />
It is through collision indexes that the loops work in the game. It's commonly believed that there are layers, and that the sprite represented by 4 rings changes between them. This is partly true. For any levels that use multiple layers like that, there is a secondary 16x16 collision index. That object switches the 16x16 collision index in use. The pointers to these 16x16 collision indexes are stored at 4ADC-4B63. The first set of pointers in this group specify the location of the primary collision index to use for each level, and the second set specify the location of the secondary collision index to use for each level.<br />
<br />
Now just setting something as solid, doesn't give it the effect of having a slope. There's an index in the rom, which has one byte in it for each collision array location. To understand how this value works, think of two lines running parallel to each other, both with the value 0-F along them. Now, the first value of the byte gives a point on the right line, and the second value gives a point on the left line. Now imagine drawing a line between these to points. If the points are different, the resulting gradient will be taken to create the effect of a slope and the resistance going up it on the box in the corresponding collision array location.<br />
<br />
==Level layout==<br />
In the S3 rom none of the level leyout's are compressed as such, but due to the nature of the way they're stored editing them is not nessicarily straightforward. Check the savestate hackng guide for information on how to edit the level layout.<br />
<br />
==Ring placement==<br />
The data for ring placement has an offset index to locate the correct group. Go here for an explanation of how this works. Now, in the rom each ring does not have to be stored individually. Instead you can place one ring, and specify that a certain number of rings come after it. The definitions for one ring takes up 4 bytes in the rom. Let's look at an example:<br />
1234 5678<br />
Now, in this example the ring will be placed at an x location of 1234, and a y location of 678. With that value where the 5 was entered, if the value entered is below 8, an additional ring will be placed next to the one before it for every unit that the value entered is above 0. Entering a value above 8 will place an additional ring below the one before it for each unit that the value entered is above 8. When specifying a position as the start of a group of rings, if the group is horizontal, the rings will go across to the right of that point, and if the group is vertical the rings will go down from that point. The value FFFF closes the group of ring locations, and it is essential that this is at the end of the ring locations list, or else the game will keep on reading past that point until it hits that value.<br />
<br />
==Sprite placement==<br />
Sprites are quite simple to define. It takes six bytes to define one sprite. The first two bytes are the x location of the sprite, and the next two bytes are the y location of the sprite. The 5th byte is the number on the sprite array to lookup to get the location for the function to use for the programming of that sprite, and the 6th byte is an optional declaration to use with the function for that sprite. Go here for more info on what exactly that means, and a list of all the sprites in the S3 rom.<br />
<br />
==Main level Block mappings==<br />
For information on exactly what the block mappings do, read the introduction. In the S3 rom, the 128x128 and 16x16 block mappings are compressed. Editing compressd data is extremely impractical, so in order to edit this data you will need to extract them first. Chaosax-extract is capable of decompressing this data. Once it's decompressed you can edit it just like in the savestate, so check the savestate section for further info on editing them. Once you've made the appropriate changes, you can use chaos-pack to recompress the data.<br />
<br />
==Uncompressed art==<br />
Any art that needs to be updated on the fly will not be compressed in the rom. This is because the game can't work with compressed data, and needs to extract any data it wants to use to the ram. This decompression process takes a fair bit of computation, and because of that it wouldn't be possible to create the appearance of a smooth animation using compressed data. The same reason is true as to why any data that is not loaded into the ram will always be uncompressed, because otherwise they would have to load it into the ram just to read it.<br />
<br />
Now, for example all of the blocks for Sonic and Tails are uncompressed, because they of course need to be updated quickly. You can use basically any editing utility to edit them, but you can only change what each block looks like through this. In order to edit what blocks are placed where in each of Sonic's animation frames, you need to edit the mappings for them, and for more information on that go here. Now in their uncompressed form, you can edit them just like you would in the VRAM, so for more information on that check the sonic 2 savestate breakdown.<br />
<br />
==Sprite mapping format==<br />
Sprite mappings are what construct an image for a sprite out of the 8x8 blocks. This format has two parts to it, the image layout and the pattern reloading. The patern reloading is only applicable to sprites that are animated and have to reload uncompressed patterns from the rom, such as the playable characters. It is important to understand when dealing with sprite mappings that a single sprite may be made up of several sections. When dealing with mappings you can freely create, move, and resize these sections. Each one is independent of each other, and as such each on is defined seperately.<br />
<br />
Each section has a maximum size of 4x4 units, each one capable of holding an 8x8 block. You cannot actually specify what block goes where within that box. You give it a VRAM location, and starting at the top and working it's way down the first vertical column, then moving across one and working it's way down again, it loads as many blocks from that point in the VRAM as it needs. Here's an explination of the two parts of the sprite mapping format:<br />
<br />
{| border="1" align="center"<br />
| <font color="red">00</font><br />
| <font color="red">03</font><br />
| <font color="green">EC</font><br />
| <font color="green">0D</font><br />
| <font color="green">00</font><br />
| <font color="green">00</font><br />
| <font color="green">FF</font><br />
| <font color="green">EC</font><br />
| <font color="blue">FC</font><br />
| <font color="blue">06</font><br />
| <font color="blue">00</font><br />
| <font color="blue">08</font><br />
| <font color="blue">00</font><br />
| <font color="blue">04</font><br />
| <font color="yellow">FC</font><br />
| <font color="yellow">0A</font><br />
| <font color="yellow">00</font><br />
| <font color="yellow">0E</font><br />
| <font color="yellow">FF</font><br />
| <font color="yellow">EC</font><br />
|}<br />
<br />
Don't panic, it's clearer once you break it down into it's sections like this:<br />
<br />
{| border="1" align="center"<br />
| <font color="red">1</font><br />
| <font color="red">00</font><br />
| <font color="red">03</font><br />
|-<br />
| <font color="green">2</font><br />
| <font color="green">EC</font><br />
| <font color="green">0D</font><br />
| <font color="green">00</font><br />
| <font color="green">00</font><br />
| <font color="green">FF</font><br />
| <font color="green">EC</font><br />
|-<br />
| <font color="blue">3</font><br />
| <font color="blue">FC</font><br />
| <font color="blue">06</font><br />
| <font color="blue">00</font><br />
| <font color="blue">08</font><br />
| <font color="blue">00</font><br />
| <font color="blue">04</font><br />
|-<br />
| <font color="yellow">4</font><br />
| <font color="yellow">FC</font><br />
| <font color="yellow">0A</font><br />
| <font color="yellow">00</font><br />
| <font color="yellow">0E</font><br />
| <font color="yellow">FF</font><br />
| <font color="yellow">EC</font><br />
|}<br />
<br />
The first section is the header. This is very simple, it's just a two byte value specifying how many sections the sprite has to it, so if you wanted 4 sections, you'd enter 0004. For every section there is, another six bytes follow. Here's what each byte does:<br />
<br />
{| border="1" align="center"<br />
| <font color="red">EC</font><br />
| <font color="green">0D</font><br />
| <font color="blue">00</font><br />
| <font color="blue">00</font><br />
| <font color="yellow">FF</font><br />
| <font color="yellow">EC</font><br />
|-<br />
| align="center" | <font color="red">1</font><br />
| align="center" | <font color="green">2</font><br />
| colspan="2" align="center" | <font color="blue">3</font><br />
| colspan="2" align="center" | <font color="yellow">4</font><br />
|}<br />
<br />
{| border="1" align="center"<br />
| <font color="red">1</font><br />
| Vertical offset<br />
|-<br />
| <font color="green">2</font><br />
| Layout of block<br />
|-<br />
| <font color="blue">3</font><br />
| Standard palette/block selection<br />
|-<br />
| <font color="yellow">4</font><br />
| Horizontal offset<br />
|}<br />
<br />
===Vertical offset===<br />
The vertical offset is set by 1 signed byte. What this means is that if you set it to 80 the image will be placed 128 pixels above the sprite location, and if you set it to 7F it will be placed 128 pixels below it. These values decrease as you get closer to thier respective ends, so FE would offset it by 1 pixel up.<br />
<br />
===Layout of block===<br />
For anyone who's comfortable working with binary, I'll explain exactly how this works. For any who aren't, just bear with me. The first 4 bits of this byte are unused. Bits 5 and 6 are the number of blocks vertically, and bits 7 and 8 are the number of blocks horizontally. For anyone who doesn't understand what that means, well here's yet another table:<br />
<br />
{| border="1" align="center"<br />
| Value entered<br />
| Size of section<br />
|-<br />
| align="center" | 00<br />
| align="center" | 1x1<br />
|-<br />
| align="center" | 01<br />
| align="center" | 2x1<br />
|-<br />
| align="center" | 02<br />
| align="center" | 3x1<br />
|-<br />
| align="center" | 03<br />
| align="center" | 4x1<br />
|-<br />
| align="center" | 04<br />
| align="center" | 1x2<br />
|-<br />
| align="center" | 05<br />
| align="center" | 2x2<br />
|-<br />
| align="center" | 06<br />
| align="center" | 3x2<br />
|-<br />
| align="center" | 07<br />
| align="center" | 4x2<br />
|-<br />
| align="center" | 08<br />
| align="center" | 1x3<br />
|-<br />
| align="center" | 09<br />
| align="center" | 2x3<br />
|-<br />
| align="center" | 0A<br />
| align="center" | 3x3<br />
|-<br />
| align="center" | 0B<br />
| align="center" | 4x3<br />
|-<br />
| align="center" | 0C<br />
| align="center" | 1x4<br />
|-<br />
| align="center" | 0D<br />
| align="center" | 2x4<br />
|-<br />
| align="center" | 0E<br />
| align="center" | 3x4<br />
|-<br />
| align="center" | 0F<br />
| align="center" | 4x4<br />
|}<br />
<br />
===Standard palette/block selection=== <br />
You may have seen this table elsewhere:<br />
<br />
{| border="1" align="center"<br />
|- align="center"<br />
| Value<br />
| palette line<br />
| flipped horizntally<br />
| flipped vertically<br />
|- align="center"<br />
| 1<br />
| n<br />
| n<br />
|- align="center"<br />
| 1<br />
| 1<br />
| n<br />
| y<br />
|- align="center"<br />
| 2<br />
| 2<br />
| n<br />
| n<br />
|- align="center"<br />
| 3<br />
| 2<br />
| n<br />
| y<br />
|- align="center"<br />
| 4<br />
| 3<br />
| n<br />
| n<br />
|- align="center"<br />
| 5<br />
| 3<br />
| n<br />
| y<br />
|- align="center"<br />
| 6<br />
| 4<br />
| n<br />
| n<br />
|- align="center"<br />
| 7<br />
| 4<br />
| n<br />
| y<br />
|- align="center"<br />
| 8<br />
| 1<br />
| n<br />
| n<br />
|- align="center"<br />
| 9<br />
| 1<br />
| n<br />
| y<br />
|- align="center"<br />
| A<br />
| 2<br />
| n<br />
| n<br />
|- align="center"<br />
| B<br />
| 2<br />
| n<br />
| y<br />
|- align="center"<br />
| C<br />
| 3<br />
| n<br />
| n<br />
|- align="center"<br />
| D<br />
| 3<br />
| n<br />
| y<br />
|- align="center"<br />
| E<br />
| 4<br />
| n<br />
| n<br />
|- align="center"<br />
| F<br />
| 4<br />
| n<br />
| y<br />
|}<br />
<br />
Well this is the system that's applies to the first hex value (4 bits) of these two bytes. The last hex value of the first byte and all of the second byte combine to give a block number in the VRAM of the starting location of the tiles to use for this section. At 800 the block number restarts at 0, but the image is flipped horizontally. This is different from the way it's normally used though, because that block number is an offset from the default location in the VRAM.<br />
<br />
===Horizontal offset===<br />
This works just like the vertical offset, but in this case it's a 2 byte value rather than a 1 byte value. 8000 and up is right, 7FFF and down is left.<br />
<br />
==Pattern reloading==<br />
<br />
Here's another excert from Sonic's mappings:<br />
<br />
{| border="1" align="center"<br />
| <font color="red">00</font><br />
| <font color="red">01</font><br />
| <font color="green">FB</font><br />
| <font color="green">A2</font><br />
|-<br />
| colspan="2" align="center" | <font color="red">1</font><br />
| colspan="2" align="center" | <font color="green">2</font><br />
|}<br />
<br />
The pattern reloading is very simple. The first two bytes are the header, which once again just says the number of sections. After that there's two bytes for each section. The first hex value of the first byte is the number of blocks to load from the rom, and the last hex value and second byte combine to give the number of blocks that come before the first one you want to access.<br />
<br />
==Sega intro sound==<br />
The Sega intro sound is just an 16000HZ wav sound. Opening up the rom in any sound editing program that supports raw audio with the settings listed next to the location on the list will enable you to playback the sound effect. You could also insert your own sound in the same place as long as it's at the same bitrate. The bitrate is to do with the quality of the sound. The lower it is the crappier it will sound, because that's to do with how often the output is modified. Just think of the difference between long play and short play on a VCR. Stuff recorded in long play does save space, but the quality of the recording is worse.<br />
<br />
==Art compression format==<br />
The art compression format is a very dense compression format. It's only used for art because the format relies on the data being in blocks of 64 bytes. This format is used for all the compressed art in sonic 1 and sonic 2 beta, and all the compressed art except for the main level pattern blocks in Sonic 2. In S3 this format is sparsely used, as it was pretty much replaced by the Kozinski compression format. As I said this format is very dense, and as such it requires a hell of a lot of computation to decompress. Because of this it also requires a hell of a lot of time and effort to crack. I've had a go at it, but the lightning has yet to strike. When I crack it I�ll post the format breakdown here, and create a simple program to decompress it, but until then it is impossible to directly edit any art using this format. The porting of a compressed block of art is simple though, so if you want to transfer art from one game to another, you can just tack it onto the end and enter the pointer into the pattern load cue of the level or event you want it to appear at, along with a VRAM location to load it into. Go Here for more information on that.<br />
<br />
==Moduled tile format==<br />
The moduled tile format is a method of storage that uses the Kozinski compresion format. The utility called Chaosax-extract is capable of extracting this format, and the utility called chaos-pack is capable of recompressing into this compression format. The moduled format itself requires explination though. Each pattern block is preceeded by a two byte header. This two byte value is simply how many bytes are compressed in the archive. Directly after this header, the actual compressd data starts, so you'll need to add 2 bytes to any main pattern block compressed in this manner when adding it into chaosax-extract to allow it to extract successfully. The reason for this header is that if the archive is over 1000 (hex) the art is broken down into modules, each one carrying a maximum of 1000. If for example there were 54D6 bytes of compressed data, the data block would be in 6 modules. The first five would contain 1000 bytes of compressed data, and the last would contain 4D6 bytes. In the address listing, any block that is a standalone archive, or the first peice of an archive will have the header in the right hand column. Any modules of an archive will have module X writtten in ther name, where x is the number of the module, and will not have any header written in the righthand column. If you wish to decompress a module, you do mot have to add 2 bytes to it's address, as it has no header.<br />
<br />
==Rasterised layer deformation==<br />
Raster effects are simply effects to do with deformation of an image based on lines of pixels. In Sonic 3, these effects are used to create the movement effects for the backgrounds and foregrounds of all the levels, as well as the splitscreen effect in competition mode. In addition to these effects, in Sonic 3 the programmers used this section of code to achieve other rather clever runtime effects, such as the wall moving after you from behind at the beginning of HCZ act 2, and the FBZ bombing the ground after you in AIZ act 2. Because the programming for these effects are stored in the form of compiled code, you'll have to learn ASM in order to edit them. Changing which effect to use for what level is easier though.<br />
<br />
The pointer list for this section of code requires explination too. There are 8 pointers (32 bytes) for each level value. First of all, here's those 12 bytes for HCZ:<br />
<br />
{| border="1" align="center"<br />
| 0003 C28C<br />
| 0003 C29C<br />
| 0003 C5AE<br />
| 0003 C5C2<br />
| 0003 C298<br />
| 0003 C2CA<br />
| 0003 C5B6<br />
| 0003 B42A<br />
|- align="center"<br />
| 01<br />
| 02<br />
| 03<br />
| 04<br />
| 05<br />
| 06<br />
| 07<br />
| 08<br />
|}<br />
<br />
And here's what each pointer is for:<br />
<br />
{| border="1" align="center"<br />
| 01<br />
| Act 1 initial foreground layout<br />
|-<br />
| 02<br />
| Act 1 initial background layout<br />
|-<br />
| 03<br />
| Act 2 initial foreground layout<br />
|-<br />
| 04<br />
| Act 2 initial background layout<br />
|-<br />
| 05<br />
| Act 1 rasterised effects<br />
|-<br />
| 06<br />
| Act 1 layer deformation and load checkpoints<br />
|-<br />
| 07<br />
| Act 2 rasterised effects<br />
|-<br />
| 08<br />
| Act 2 layer deformation and load checkpoints<br />
|}<br />
<br />
===Initial background/foreground layout:===<br />
This affects the layout of the background or foreground tiles upon the loading of that section. Becuase the rasterised layer deormation effect and patterns are often changed in level, this is required to correct the layout if it differs from the one it should be set to. This is only accessed once upon loading the level.<br />
<br />
===Rasterised effects===<br />
Rasterised effects are used for many flashy effects throughout the game that would otherwise be impossible. Some of these effects are the treetruck in AIZ act 1, FBZ bombing sequence in AIZ act 2, Crushing wall in HCZ act 2, etc. Becuase of how integrated these effects are, don't expect to be able to readily transfer these from one level to another. This section of code is accessed each loop to check for the condition.<br />
<br />
===Layer deformation and load checkpoints===<br />
This is what determins the movement of the background and foreground, as well as when new patterns are loaded into the VRAM during the level. This block should be transferrable between levels, but no guarantees. Also you'll need to edit this section of code if you don't want it to load patterns at it's checkpoints, or if you want to change which background movement effect is used when. This section of code is accessed each loop to check the conditions, and to update the output.<br />
<br />
==Dynamic screen resizing==<br />
In S3, the programmers allowed for some very fancy effects to do with the height and width of the sceen. They allowed for the X/Y start, and X/Y ending locations to be changed at any point during the level, based on any event they cared to use. All the programming for the screen resizing is compiled, so it's very difficult to edit directly. The code itself is farily simple though, so if you have some experience with ASM you shouldn't find it difficult to modify.<br />
<br />
==Palettes==<br />
All the main palettes used in the game are linked in a pointer table at 8BF94. In this pointer table there are 8 bytes per palette. The first four simply give a location in the rom for the data to load. The fifth and sixth bytes give the location in the system ram to load the data into, and the seventh and eighth bytes give the number of four byte blocks being loaded. Here's a palette pointer:<br />
<br />
0000 2942 FB20 0007<br />
<br />
Now in this case the palette is being loaded from 00002942 in the rom into the beginning of the second above water palette row (FB20), and it's loading 16 colours (0007). Here's a listing of the palette pointers in the S3 rom:<br />
<br />
{| border="1" align="center"<br />
| Index<br />
| Pointer location<br />
| Palette location<br />
| Name of palette slot<br />
| Palette line<br />
| Number of colours<br />
|- align="center"<br />
| 00<br />
| 8BF54<br />
| 8C134<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 01<br />
| 8BF5C<br />
| 8C1B4<br />
| 2<br />
| 16<br />
|- align="center"<br />
| 02<br />
| 8BF64<br />
| 8C1D4<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 03<br />
| 8BF6C<br />
| 8C234<br />
| Main palette line<br />
| 1<br />
| 16<br />
|- align="center"<br />
| 04<br />
| 8BF74<br />
| 8C274<br />
| Level select palette<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 05<br />
| 8BF7C<br />
| 8C2F4<br />
| 2<br />
| 16<br />
|- align="center"<br />
| 06<br />
| 8BF84<br />
| 8C134<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 07<br />
| 8BF8C<br />
| 8C134<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 08<br />
| 8BF94<br />
| 8C134<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 09<br />
| 8BF9C<br />
| 8C134<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 0A<br />
| 8BFA4<br />
| 8C314<br />
| AIZ act 1 intro<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 0B<br />
| 8BFAC<br />
| 8C3D4<br />
| AIZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 0C<br />
| 8BFB4<br />
| 8C594<br />
| HCZ act 1 above water<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 0D<br />
| 8BFBC<br />
| 8C5F4<br />
| HCZ act 2 above water<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 0E<br />
| 8BFC4<br />
| 8C754<br />
| MGZ act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 0F<br />
| 8BFCC<br />
| 8C754<br />
| MGZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 10<br />
| 8BFD4<br />
| 8C7B4<br />
| CNZ act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 11<br />
| 8BFDC<br />
| 8C7B4<br />
| CNZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 12<br />
| 8BFE4<br />
| 8C894<br />
| FBZ act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 13<br />
| 8BFEC<br />
| 8C894<br />
| FBZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 14<br />
| 8BFF4<br />
| 8C894<br />
| ICZ act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 15<br />
| 8BFFC<br />
| 8C8F4<br />
| ICZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 16<br />
| 8C004<br />
| 8C9D4<br />
| LBZ act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 17<br />
| 8C00C<br />
| 8CA34<br />
| LBZ act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 18<br />
| 8C014<br />
| 8CB74<br />
| 07 act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 19<br />
| 8C01C<br />
| 8CB74<br />
| 07 act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1A<br />
| 8C024<br />
| 8CB74<br />
| 08 act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1B<br />
| 8C02C<br />
| 8CB74<br />
| 08 act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1C<br />
| 8C034<br />
| 8CB74<br />
| 09 act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1D<br />
| 8C03C<br />
| 8CB74<br />
| 09 act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1E<br />
| 8C044<br />
| 8CB74<br />
| 0A act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 1F<br />
| 8C04C<br />
| 8CB74<br />
| 0A act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 20<br />
| 8C054<br />
| 8CB74<br />
| 0B act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 21<br />
| 8C05C<br />
| 8CB74<br />
| 0B act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 22<br />
| 8C064<br />
| 8CB74<br />
| 0C act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 23<br />
| 8C06C<br />
| 8CB74<br />
| 0C act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 24<br />
| 8C074<br />
| 8CB74<br />
| 0D act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 25<br />
| 8C07C<br />
| 8CB74<br />
| 0D act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 26<br />
| 8C084<br />
| 8CB74<br />
| Azure lake act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 27<br />
| 8C08C<br />
| 8CB74<br />
| Azure lake act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 28<br />
| 8C094<br />
| 8CBD4<br />
| Baloon park act 1<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 29<br />
| 8C09C<br />
| 8CBD4<br />
| Baloon park act 2<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 2A<br />
| 8C0A4<br />
| 8C374<br />
| AIZ intro level palette when knux is onscreen<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 2B<br />
| 8C0AC<br />
| 8C494<br />
| AIZ act 1 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 2C<br />
| 8C0B4<br />
| 8C514<br />
| AIZ act 2 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 2D<br />
| 8C0BC<br />
| 8CA94<br />
| LBZ act 1 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 2E<br />
| 8C0C4<br />
| 8CA94<br />
| LBZ act 2 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 2F<br />
| 8C0CC<br />
| 8CB14<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 30<br />
| 8C0D4<br />
| 8C434<br />
| AIZ act 2 FBZ bombing sequence<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 31<br />
| 8C0DC<br />
| 8C654<br />
| HCZ act 1 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 32<br />
| 8C0E4<br />
| 8C6D4<br />
| HCZ act 2 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 33<br />
| 8C0EC<br />
| 8CD54<br />
| Dispencer bonus stage palette<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 34<br />
| 8C0F4<br />
| 8CC34<br />
| Desert palace<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 35<br />
| 8C0FC<br />
| 8CC94<br />
| Chrome gadget<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 36<br />
| 8C104<br />
| 8CCF4<br />
| Endless mine<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 37<br />
| 8C10C<br />
| 8CDB4<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 38<br />
| 8C114<br />
| 8CE14<br />
| 2<br />
| 48<br />
|- align="center"<br />
| 39<br />
| 8C11C<br />
| 8C954<br />
| ICZ act 2 underwater<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 3A<br />
| 8C124<br />
| 8C814<br />
| 1<br />
| 64<br />
|- align="center"<br />
| 3B<br />
| 8C12C<br />
| 8C374<br />
| 2<br />
| 48<br />
|}<br />
<br />
To change the palette being loaded for each level, you need to change the palette index number in the main level load block. For more information on that go here. The palettes themeslves are very easy to modify as they are all uncompressed in the rom. Refer to the savestate hacking documents for information on how to edit palettes.<br />
<br />
==Character start location array==<br />
The start location for the characers and the camera for each level are stored in this array at address 5B02. It couldn't be any simpler to modify, there's just two values per act, the first being the X location, and the second being the Y location.<br />
<br />
==Music playlist for levels==<br />
This is actually part of a sub in the code, but it's editable all the same. Pretty simple, just one byte per level. That one byte is the value of the song you wish to play. The value of the songs can be obtained from the sound test in the level select screen.<br />
<br />
==Level select level order==<br />
The level select one is easy to modify. There is a list of two byte values at 6A8E in the rom. Just enter the level value followed by an act number for each of the levels you want to load, in the order you want them to be loaded. The values are listed in order from the first one in the top lefthand corner, going down to the bottom of the screen, and starting again at the top on the other side. For a list of the level values for all the different stages, look at the beginning of the introduction to this page. By default, a slot that is not accessable has the value 5555 in it.<br />
<br />
==ASCII test==<br />
ASCII text is raw text just like you'd type in notepad. Editing it is just as easy, simply type it in. There are two flags you need to know though. To signal the end of a block of text the hex values 0000 must be entered. At the beginning of each block there is another two byte value, which is the vertical location on the screen for it to be placed. The text is automatically centered horizontally.<br />
<br />
==Object debug list==<br />
The object debug list in the Sonic 3 platform is different from previous versions. There's a two byte header, which is the number of objects in the list. After that there's 10 bytes per object. Here's an object from the AIZ debug list:<br />
<br />
{| align="center" border="1"<br />
| <font color="red">00</font><br />
| <font color="green">01</font><br />
| <font color="green">8C</font><br />
| <font color="green">F6</font><br />
| <font color="blue">00</font><br />
| <font color="yellow">01</font><br />
| <font color="yellow">90</font><br />
| <font color="yellow">DE</font><br />
| <font color="pink">A6</font><br />
| <font color="pink">BC</font><br />
|- align="center"<br />
| <font color="red">1</font><br />
| colspan="3" | <font color="green">2</font><br />
| <font color="blue">3</font><br />
| colspan="3" | <font color="yellow">4</font><br />
| colspan="2" | <font color="pink">5</font><br />
|}<br />
<br />
And here's what each byte does:<br />
<br />
{| border="1" align="center"<br />
| <font color="red">1</font><br />
| Frame to display<br />
|-<br />
| <font color="green">2</font><br />
| Pointer to code<br />
|-<br />
| <font color="blue">3</font><br />
| Declaration<br />
|-<br />
| <font color="yellow">4</font><br />
| Pointer to mappings<br />
|-<br />
| <font color="pink">5</font><br />
| Flip/mirror/VRAM location<br />
|}<br />
<br />
===Frame to display===<br />
This is simply the frame of the sprite that will be displayed on the preview picture before you place an object. Right now it's set to 00, which is the first frame.<br />
<br />
===Pointer to code===<br />
This is the pointer to the code to use for the sprite. The object number on the sprite array is not used, allowing an object to be placed in the debug list while not being in the sprite array. Code locations can be obtained from the address listing.<br />
<br />
===Declaration===<br />
This is the declaration for the loading of the sprite. For information on exactly what that is, go here. In this example the declaration is 08, which switches the type of monitor it is in the case of this sprite.<br />
<br />
===Sprite mappings===<br />
This is a pointer to the location in the rom to load the mappings for that sprite. This will be located in<br />
the programming for the sprite itself. Do not change this unless porting between levels, or you're absolutely<br />
sure you know what you're doing, or the game will most likely hang. This only affects the preview picture,<br />
not the placed object itself. In this case, the sprite mappings are being loaded from the address 012D36 in<br />
the rom.<br />
<br />
===Flip/mirror/VRAM location===<br />
The first hex value of the 7th byte is to do with flipping and mirroring of the sprite, as well as the palette line to use for it. Refer to the following table for an explination of what responce each value will create.<br />
<br />
{| border="1" align="center"<br />
|- align="center"<br />
| Value<br />
| palette line<br />
| flipped horizntally<br />
| flipped vertically<br />
|- align="center"<br />
| 1<br />
| n<br />
| n<br />
|- align="center"<br />
| 1<br />
| 1<br />
| n<br />
| y<br />
|- align="center"<br />
| 2<br />
| 2<br />
| n<br />
| n<br />
|- align="center"<br />
| 3<br />
| 2<br />
| n<br />
| y<br />
|- align="center"<br />
| 4<br />
| 3<br />
| n<br />
| n<br />
|- align="center"<br />
| 5<br />
| 3<br />
| n<br />
| y<br />
|- align="center"<br />
| 6<br />
| 4<br />
| n<br />
| n<br />
|- align="center"<br />
| 7<br />
| 4<br />
| n<br />
| y<br />
|- align="center"<br />
| 8<br />
| 1<br />
| n<br />
| n<br />
|- align="center"<br />
| 9<br />
| 1<br />
| n<br />
| y<br />
|- align="center"<br />
| A<br />
| 2<br />
| n<br />
| n<br />
|- align="center"<br />
| B<br />
| 2<br />
| n<br />
| y<br />
|- align="center"<br />
| C<br />
| 3<br />
| n<br />
| n<br />
|- align="center"<br />
| D<br />
| 3<br />
| n<br />
| y<br />
|- align="center"<br />
| E<br />
| 4<br />
| n<br />
| n<br />
|- align="center"<br />
| F<br />
| 4<br />
| n<br />
| y<br />
|}<br />
<br />
In the case of our example, the value of 0 is used, so the preview image will use the first palette line, and will not be flipped or mirrored.<br />
<br />
The last hex value of the 7th byte, and all of the 8th byte in this block combine to give a starting location in the VRAM to find the patterns to use for that sprite when displaying the preview. This is not an actual location, but merely the number of blocks after which to load the patterns from. After the value of 800 is passed, the block number resets to zero but the image is mirrored. In this case, that block number is 680.<br />
<br />
==Dynamic pattern reloading==<br />
Dynamic pattern reloading is a method of loading patterns into the VRAM, but unlike the other methods, this one has no limitations, because it uses actual programmed code. Basically this is here for any effects to do with patterns changing in game that isn't posible using the normal load cue system, such as many areas of the backgrounds in the S3 levels where the patterns to display is determined by the position of the screen. Becuase the programming for it is in the form of compiled code, direct editing of it is not possible.<br />
<br />
==Animated pattern load cue's==<br />
Animated patterns require the art they are working with to be in an uncompressed form, so if you are attempting to make an animated pattern, make sure the art is uncompressed or it won't work. Now, the length of each load request on the cue varies depending on the animation. The first byte specifies a value that will determine how often to switch frames in the animation. If you use this value you will not be able to specify a frame as having a different duration to another. Setting this to FF will disable automatic frame control and allow the user to input a manual duration for each frame. This will mean that for every frame the user wants in the animation, they have to allow another byte at the end of the load request. If you want automatic pattern control, which you would use if you want all the animations frames to have the same duration. Just enter how many screen refreshes to wait until the next frame of the animation is displayed. Bytes 2,3, and 4 are the address in the rom to load the patterns from. Bytes 5 and 6 are the location in VRAM to load the patterns into. Byte 7 is the number of frames the animation has, and byte 8 is the number of spaces in VRAM to use for each frame. The function of the bytes beyond this point depend on whether or not automatic frame control is enabled, so refer to appropriate section below.<br />
<br />
===With automatic frame control===<br />
One byte per frame of animation. This byte simply specifies the image to use for each frame of the animation. Based on the loading address entered, this value is the offset in 8x8 blocks to load each frame from in the rom. So if for example you were dealing with an animation that had 4 8x8 blocks per frame, and there were 4 frames of that, and you wanted it to display each frame one by one, you would enter the value 0004 080C.<br />
<br />
===Without automatic frame control===<br />
Two bytes per frame of animation. The first byte is the offset of blocks in the file to load the animation frame from. This byte simply specifies the image to use for each frame of the animation. Based on the loading address entered, this value is the offset in 8x8 blocks to load each frame from in the rom. The second byte is the number of screen refreshes to keep that image loaded for, before going on to the next animation frame.<br />
<br />
==Sprite programming==<br />
The programming for a sprite in the sonic games are stored as a function, and that function can take one declaration. People often confuse this declaration with a subtype value, but it's not really. What that basically means for the non programmers out there is that when the game places a sprite, you can enter a value along with the sprite number that may alter something about that sprite, but what it does varies depending on what sprite you're working with. Now because these functions are now compiled, the only way you can effectively edit them is to find the code for it and decompile it into assembly, alter it as necessary, and then recompile it and enter it back into the rom. This document will contain all the info necessary to enter a new sprite or replace an old one, but when it comes to the ASM you're on your own.<br />
<br />
Now, the value assigned to a sprite in the game is done by a pointer index at 5CC96. It�s pretty simple, just one pointer per address value. Here's the pointer list in Sonic 3:<br />
<br />
{| width="100%" border="1"<br />
| Index<br />
| Pointer location<br />
| Name of the sprite<br />
| Code location<br />
|-<br />
| 00<br />
| 5CC96<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 01<br />
| 5CC9A<br />
| Monitor<br />
| 1B41E<br />
|-<br />
| 02<br />
| 5CC9E<br />
| Layer changer<br />
| 1AFC2<br />
|-<br />
| 03<br />
| 5CCA2<br />
| ????????<br />
| 1D3C4<br />
|-<br />
| 04<br />
| 5CCA6<br />
| Collapsing platform from AIZ<br />
| 1DE1C<br />
|-<br />
| 05<br />
| 5CCAA<br />
| Rocks from AIZ<br />
| 1D656<br />
|-<br />
| 06<br />
| 5CCAE<br />
| Flying fox from AIZ<br />
| 200AE<br />
|-<br />
| 07<br />
| 5CCB2<br />
| Spring<br />
| 213D8<br />
|-<br />
| 08<br />
| 5CCB6<br />
| Spikes<br />
| 22612<br />
|-<br />
| 09<br />
| 5CCBA<br />
| Trunk of plamtree in AIZ<br />
| 1C3BC<br />
|-<br />
| 0A<br />
| 5CCBE<br />
| End of flying fox in AIZ<br />
| 1C3FE<br />
|-<br />
| 0B<br />
| 5CCC2<br />
| Spinning balls<br />
| 2336E<br />
|-<br />
| 0C<br />
| 5CCC6<br />
| Unknown. Something you hold onto.<br />
| 20768<br />
|-<br />
| 0D<br />
| 5CCCA<br />
| Unknown. A breakable barrier.<br />
| 1F6BC<br />
|-<br />
| 0E<br />
| 5CCCE<br />
| ????????<br />
| 23C70<br />
|-<br />
| 0F<br />
| 5CCD2<br />
| ????????<br />
| 1DF4C<br />
|-<br />
| 10<br />
| 5CCD6<br />
| Lift from LBZ<br />
| 28C10<br />
|-<br />
| 11<br />
| 5CCDA<br />
| Unknown. Hovering platforms.<br />
| 23D32<br />
|-<br />
| 12<br />
| 5CCDE<br />
| ????????<br />
| 24722<br />
|-<br />
| 13<br />
| 5CCE2<br />
| Switch thingy that you bust from LBZ<br />
| 24912<br />
|-<br />
| 14<br />
| 5CCE6<br />
| Unknown. A long vertical barrier with repeated block.<br />
| 24C24<br />
|-<br />
| 15<br />
| 5CCEA<br />
| Unknown. Line of blocks in foreground.<br />
| 250D2<br />
|-<br />
| 16<br />
| 5CCEE<br />
| Head that spurts out fire from LBZ<br />
| 25394<br />
|-<br />
| 17<br />
| 5CCF2<br />
| Flying fox from LBZ<br />
| 25584<br />
|-<br />
| 18<br />
| 5CCF6<br />
| Cylindrical platform that spins around screw from LBZ<br />
| 25A12<br />
|-<br />
| 19<br />
| 5CCFA<br />
| Unknown. Repeated blocks in background.<br />
| 26144<br />
|-<br />
| 1A<br />
| 5CCFE<br />
| Unknown. Resemble a seesaw. Automatically locked at center until you jump.<br />
| 26202<br />
|-<br />
| 1B<br />
| 5CD02<br />
| Bustable section of pipe from LBZ<br />
| 264FA<br />
|-<br />
| 1C<br />
| 5CD06<br />
| Unknown. Top hurts you. Bobs up and down slightly when hit from bottom.<br />
| 268FE<br />
|-<br />
| 1D<br />
| 5CD0A<br />
| Unknown. Hovering platforms.<br />
| 2425E<br />
|-<br />
| 1E<br />
| 5CD0E<br />
| Thing on wall that accelerates you in a ball when you go through it from LBZ<br />
| 2795A<br />
|-<br />
| 1F<br />
| 5CD12<br />
| Unknown. Something you hold onto.<br />
| 27BF0<br />
|-<br />
| 20<br />
| 5CD16<br />
| Unknown. Bottom hurts you.<br />
| 28114<br />
|-<br />
| 21<br />
| 5CD1A<br />
| ????????<br />
| 28286<br />
|-<br />
| 22<br />
| 5CD1E<br />
| Sprite that summons up flying badnicks from LBZ<br />
| 283B8<br />
|-<br />
| 23<br />
| 5CD22<br />
| ????????<br />
| 2848A<br />
|-<br />
| 24<br />
| 5CD26<br />
| Unknown. Upon contact, it teleports you across the map.<br />
| 28542<br />
|-<br />
| 25<br />
| 5CD2A<br />
| ????????<br />
| 18CF6<br />
|-<br />
| 26<br />
| 5CD2E<br />
| Sprite that makes you enter ball<br />
| 1C440<br />
|-<br />
| 27<br />
| 5CD32<br />
| ????????<br />
| 1C704<br />
|-<br />
| 28<br />
| 5CD36<br />
| Unknown. Invisible collision box.<br />
| 1C7E6<br />
|-<br />
| 29<br />
| 5CD3A<br />
| Unknown. Large solid box that cycles patterns around edge.<br />
| 29336<br />
|-<br />
| 2A<br />
| 5CD3E<br />
| Breakable vertical barriers used for spintubes in AIZ and ICZ<br />
| 2963A<br />
|-<br />
| 2B<br />
| 5CD42<br />
| Long diagonal string of platforms, with each of them tilting in sequence from AIZ<br />
| 29F80<br />
|-<br />
| 2C<br />
| 5CD46<br />
| Collapsing wooden bridge from AIZ<br />
| 2A3A4<br />
|-<br />
| 2D<br />
| 5CD4A<br />
| Spawnpoint for wooden platforms that travel down waterfall in AIZ<br />
| 2AC4E<br />
|-<br />
| 2E<br />
| 5CD4E<br />
| Rotating spikey log from AIZ<br />
| 2AF20<br />
|-<br />
| 2F<br />
| 5CD52<br />
| Unknown. Fixed sprite in background.<br />
| 2B2DA<br />
|-<br />
| 30<br />
| 5CD56<br />
| Unknown. Animated block in background.<br />
| 2B66A<br />
|-<br />
| 31<br />
| 5CD5A<br />
| ????????<br />
| 2B9B6<br />
|-<br />
| 32<br />
| 5CD5E<br />
| Unknown. Long vertical barrier with repeated block.<br />
| 2A7F2<br />
|-<br />
| 33<br />
| 5CD62<br />
| Button<br />
| 2BB20<br />
|-<br />
| 34<br />
| 5CD66<br />
| Starpoll<br />
| 2C41E<br />
|-<br />
| 35<br />
| 5CD6A<br />
| Leaves in foreground of AIZ<br />
| 2B72E<br />
|-<br />
| 36<br />
| 5CD6E<br />
| Wooden pole that Sonic hangs onto in HCZ<br />
| 1C8EE<br />
|-<br />
| 37<br />
| 5CD72<br />
| Unknown. Big block with section to the left solid.<br />
| 2E4BA<br />
|-<br />
| 38<br />
| 5CD76<br />
| Fan from CNZ<br />
| 2EF5E<br />
|-<br />
| 39<br />
| 5CD7A<br />
| ????????<br />
| 2F2D8<br />
|-<br />
| 3A<br />
| 5CD7E<br />
| Hand that pops out of the floor and speeds you up from HCZ<br />
| 2F650<br />
|-<br />
| 3B<br />
| 5CD82<br />
| ????????<br />
| 2E786<br />
|-<br />
| 3C<br />
| 5CD86<br />
| One way barrier from HCZ<br />
| 2FAB0<br />
|-<br />
| 3D<br />
| 5CD8A<br />
| Spring that pops up out of floor<br />
| 22072<br />
|-<br />
| 3E<br />
| 5CD8E<br />
| ????????<br />
| 2FDBE<br />
|-<br />
| 3F<br />
| 5CD92<br />
| ????????<br />
| 3015C<br />
|-<br />
| 40<br />
| 5CD96<br />
| Unknown. A block.<br />
| 1CFF2<br />
|-<br />
| 41<br />
| 5CD9A<br />
| Baloon from CNZ<br />
| 30368<br />
|-<br />
| 42<br />
| 5CD9E<br />
| Cannon from CNZ<br />
| 30764<br />
|-<br />
| 43<br />
| 5CDA2<br />
| Platform you jump on to make rize from CNZ<br />
| 30BDC<br />
|-<br />
| 44<br />
| 5CDA6<br />
| Trap door that opens when you get shot out of tube from CNZ<br />
| 30D30<br />
|-<br />
| 45<br />
| 5CDAA<br />
| Lightbulb from CNZ<br />
| 30DFC<br />
|-<br />
| 46<br />
| 5CDAE<br />
| Sprite that makes you float from fans<br />
| 30E7E<br />
|-<br />
| 47<br />
| 5CDB2<br />
| Rotating cylinder from CNZ<br />
| 31262<br />
|-<br />
| 48<br />
| 5CDB6<br />
| Sprite that creates resistance and acceleration barriers in CNZ<br />
| 310A0<br />
|-<br />
| 49<br />
| 5CDBA<br />
| Unknown. Sprite forces you to move right.<br />
| 31B54<br />
|-<br />
| 4A<br />
| 5CDBE<br />
| Bumper from CNZ<br />
| 32082<br />
|-<br />
| 4B<br />
| 5CDC2<br />
| ????????<br />
| 31C20<br />
|-<br />
| 4C<br />
| 5CDC6<br />
| Spiral spintube from CNZ<br />
| 32302<br />
|-<br />
| 4D<br />
| 5CDCA<br />
| Sprite that creates surface and spinning effect when walking on diagonal rotating cylinder from CNZ<br />
| 3259A<br />
|-<br />
| 4E<br />
| 5CDCE<br />
| ????????<br />
| 32A70<br />
|-<br />
| 4F<br />
| 5CDD2<br />
| ????????<br />
| 31D08<br />
|-<br />
| 50<br />
| 5CDD6<br />
| ????????<br />
| 32EC0<br />
|-<br />
| 51<br />
| 5CDDA<br />
| Unknown. Hovering platforms.<br />
| 243FC<br />
|-<br />
| 52<br />
| 5CDDE<br />
| Unknown. Bottom hurts you.<br />
| 28114<br />
|-<br />
| 53<br />
| 5CDE2<br />
| Platform moving in circle on chain thingy from MGZ<br />
| 331D0<br />
|-<br />
| 54<br />
| 5CDE6<br />
| ????????<br />
| 2E04E<br />
|-<br />
| 55<br />
| 5CDEA<br />
| Head thing on wall that launches arrows from MGZ<br />
| 335AC<br />
|-<br />
| 56<br />
| 5CDEE<br />
| Rotating cylinder with spikes on sides moving up/down and left/right from MGZ<br />
| 33A7A<br />
|-<br />
| 57<br />
| 5CDF2<br />
| Horizontal block that you need spinning platform to bust<br />
| 33874<br />
|-<br />
| 58<br />
| 5CDF6<br />
| Huge spikeball spinning on chain from MGZ<br />
| 3333C<br />
|-<br />
| 59<br />
| 5CDFA<br />
| Gizmo that raises platform when spindashed at from MGZ<br />
| 249B2<br />
|-<br />
| 5A<br />
| 5CDFE<br />
| Large sprite that sits in background<br />
| 33CC8<br />
|-<br />
| 5B<br />
| 5CE02<br />
| Free moving spintop from MGZ that hovers when you run on it<br />
| 34190<br />
|-<br />
| 5C<br />
| 5CE06<br />
| Spintop mounted on block<br />
| 34F20<br />
|-<br />
| 5D<br />
| 5CE0A<br />
| An invisible horizontal barrier that bounces you back when you jump into it<br />
| 31EFA<br />
|-<br />
| 5E<br />
| 5CE0E<br />
| Platform with blade on bottom from CG<br />
| 3500C<br />
|-<br />
| 5F<br />
| 5CE12<br />
| Spring that pops up out of floor<br />
| 221C6<br />
|-<br />
| 60<br />
| 5CE16<br />
| Unknown. A block with the left side solid.<br />
| 3518A<br />
|-<br />
| 61<br />
| 5CE1A<br />
| Baloon from BP<br />
| 35312<br />
|-<br />
| 62<br />
| 5CE1E<br />
| Unknown. A block that sits there cycling patterns.<br />
| 354CC<br />
|-<br />
| 63<br />
| 5CE22<br />
| Mini button from competition mode<br />
| 35834<br />
|-<br />
| 64<br />
| 5CE26<br />
| ????????<br />
| 358F6<br />
|-<br />
| 65<br />
| 5CE2A<br />
| Starpost and HUD for competition mode<br />
| 36172<br />
|-<br />
| 66<br />
| 5CE2E<br />
| Goo dripper from EM<br />
| 3768A<br />
|-<br />
| 67<br />
| 5CE32<br />
| Moving block from HCZ<br />
| 245B4<br />
|-<br />
| 68<br />
| 5CE36<br />
| Rotating cylinder from HCZ<br />
| 31880<br />
|-<br />
| 69<br />
| 5CE3A<br />
| Unknown. Appears to make character enter ball and spinoff to right.<br />
| 3867A<br />
|-<br />
| 6A<br />
| 5CE3E<br />
| Unknown. Top hurts you. Possibly spikes from competition mode.<br />
| 1D096<br />
|-<br />
| 6B<br />
| 5CE42<br />
| Unknown. Same as above.<br />
| 1D224<br />
|-<br />
| 6C<br />
| 5CE46<br />
| Unknown. Vertical string of repeated blocks in background.<br />
| 37C94<br />
|-<br />
| 6D<br />
| 5CE4A<br />
| Sprite of water hitting surface<br />
| 37994<br />
|-<br />
| 6E<br />
| 5CE4E<br />
| Unknown. Something dropping a stream of something else.<br />
| 3780E<br />
|-<br />
| 6F<br />
| 5CE52<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 70<br />
| 5CE56<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 71<br />
| 5CE5A<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 72<br />
| 5CE5E<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 73<br />
| 5CE62<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 74<br />
| 5CE66<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 75<br />
| 5CE6A<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 76<br />
| 5CE6E<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 77<br />
| 5CE72<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 78<br />
| 5CE76<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 79<br />
| 5CE7A<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7A<br />
| 5CE7E<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7B<br />
| 5CE82<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7C<br />
| 5CE86<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7D<br />
| 5CE8A<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7E<br />
| 5CE8E<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 7F<br />
| 5CE92<br />
| Ring<br />
| 18CF6<br />
|-<br />
| 80<br />
| 5CE96<br />
| ????????<br />
| 46442<br />
|-<br />
| 81<br />
| 5CE9A<br />
| Spikeball launcher on ground from AIZ<br />
| 54B66<br />
|-<br />
| 82<br />
| 5CE9E<br />
| Rhinobot from AIZ<br />
| 54C52<br />
|-<br />
| 83<br />
| 5CEA2<br />
| Coconut throwing guys from AIZ<br />
| 54F52<br />
|-<br />
| 84<br />
| 5CEA6<br />
| ????????<br />
| 19230<br />
|-<br />
| 85<br />
| 5CEAA<br />
| Mini boss from LBZ act 1<br />
| 4F474<br />
|-<br />
| 86<br />
| 5CEAE<br />
| Rocket boss from end of LBZ act 2<br />
| 4F9AC<br />
|-<br />
| 87<br />
| 5CEB2<br />
| Thingy that's on the wall and hides in shell from LBZ<br />
| 59746<br />
|-<br />
| 88<br />
| 5CEB6<br />
| Green dude from LBZ that punches and swings ball<br />
| 59A74<br />
|-<br />
| 89<br />
| 5CEBA<br />
| Orbit badnick from LBZ<br />
| 59DB2<br />
|-<br />
| 8A<br />
| 5CEBE<br />
| Lazer thing on track from LBZ<br />
| 59EA4<br />
|-<br />
| 8B<br />
| 5CEC2<br />
| Dive bomber bird things from LBZ<br />
| 5A0DA<br />
|-<br />
| 8C<br />
| 5CEC6<br />
| ????????<br />
| 5040E<br />
|-<br />
| 8D<br />
| 5CECA<br />
| ????????<br />
| 4BF90<br />
|-<br />
| 8E<br />
| 5CECE<br />
| ????????<br />
| 4B5A8<br />
|-<br />
| 8F<br />
| 5CED2<br />
| ????????<br />
| 4C93E<br />
|-<br />
| 90<br />
| 5CED6<br />
| ????????<br />
| 19230<br />
|-<br />
| 91<br />
| 5CEDA<br />
| ????????<br />
| 19230<br />
|-<br />
| 92<br />
| 5CEDE<br />
| ????????<br />
| 19230<br />
|-<br />
| 93<br />
| 5CEE2<br />
| ????????<br />
| 19230<br />
|-<br />
| 94<br />
| 5CEE6<br />
| ????????<br />
| 19230<br />
|-<br />
| 95<br />
| 5CEEA<br />
| ????????<br />
| 19230<br />
|-<br />
| 96<br />
| 5CEEE<br />
| ????????<br />
| 19230<br />
|-<br />
| 97<br />
| 5CEF2<br />
| ????????<br />
| 19230<br />
|-<br />
| 98<br />
| 5CEF6<br />
| ????????<br />
| 19230<br />
|-<br />
| 99<br />
| 5CEFA<br />
| Jet badnick from HCZ<br />
| 556AE<br />
|-<br />
| 9A<br />
| 5CEFE<br />
| Turret from HCZ that you need to bus to break platform<br />
| 55726<br />
|-<br />
| 9B<br />
| 5CF02<br />
| Blowfly from MCZ<br />
| 5580A<br />
|-<br />
| 9C<br />
| 5CF06<br />
| Ground runner guy from HCZ that launces rocket from back<br />
| 559AA<br />
|-<br />
| 9D<br />
| 5CF0A<br />
| Fish from HCZ<br />
| 55D3C<br />
|-<br />
| 9E<br />
| 5CF0E<br />
| Puffer fish from HCZ<br />
| 56068<br />
|-<br />
| 9F<br />
| 5CF12<br />
| Blue worm like badnick made out of balls from AIZ<br />
| 554C6<br />
|-<br />
| A0<br />
| 5CF16<br />
| Shell badnick from CNZ<br />
| 56D72<br />
|-<br />
| A1<br />
| 5CF1A<br />
| Badnick that teleports from roof to floor and vice versa from CNZ<br />
| 56F4C<br />
|-<br />
| A2<br />
| 5CF1E<br />
| Bat from CNZ<br />
| 5712A<br />
|-<br />
| A3<br />
| 5CF22<br />
| Floating blue guy from MGZ with spikes that pop in and out<br />
| 56122<br />
|-<br />
| A4<br />
| 5CF26<br />
| Drill thingy from MGZ<br />
| 56246<br />
|-<br />
| A5<br />
| 5CF2A<br />
| Spikes that pop up and shoot from MGZ<br />
| 56954<br />
|-<br />
| A6<br />
| 5CF2E<br />
| Grasshopper from MGZ<br />
| 56C1E<br />
|-<br />
| A7<br />
| 5CF32<br />
| Cannon like ground badnick from FBZ<br />
| 57242<br />
|-<br />
| A8<br />
| 5CF36<br />
| Mouse from FBZ<br />
| 574B8<br />
|-<br />
| A9<br />
| 5CF3A<br />
| ????????<br />
| 470B2<br />
|-<br />
| AA<br />
| 5CF3E<br />
| Penguin from ICZ<br />
| 59276<br />
|-<br />
| AB<br />
| 5CF42<br />
| Orbit badnick from ICZ<br />
| 595C6<br />
|-<br />
| AC<br />
| 5CF46<br />
| Unknown. Locks screen X at 10E0. Suspect used for ICZ mini boss.<br />
| 46974<br />
|-<br />
| AD<br />
| 5CF4A<br />
| ????????<br />
| 47CF6<br />
|-<br />
| AE<br />
| 5CF4E<br />
| ????????<br />
| 5A2C0<br />
|-<br />
| AF<br />
| 5CF52<br />
| Sonic's first encounter with MGZ boss in act 2<br />
| 49D72<br />
|-<br />
| B0<br />
| 5CF56<br />
| Sonic's final encounter with MGZ boss in act 2<br />
| 4A0F8<br />
|-<br />
| B1<br />
| 5CF5A<br />
| Tails' version of MGZ boss act 2<br />
| 4A45E<br />
|-<br />
| B2<br />
| 5CF5E<br />
| ????????<br />
| 4ECCE<br />
|-<br />
| B3<br />
| 5CF62<br />
| ????????<br />
| 4E37E<br />
|-<br />
| B4<br />
| 5CF66<br />
| FBZ act 2 final boss<br />
| 4DBA0<br />
|-<br />
| B5<br />
| 5CF6A<br />
| ????????<br />
| 48CDA<br />
|-<br />
| B6<br />
| 5CF6E<br />
| FBZ act 2 lazer mini boss<br />
| 4D558<br />
|-<br />
| B7<br />
| 5CF72<br />
| Robotnic's empty ship that you can jump in<br />
| 5A834<br />
|-<br />
| B8<br />
| 5CF76<br />
| Large metal column after lazer boss in FBZ that moves<br />
| 57C54<br />
|-<br />
| B9<br />
| 5CF7A<br />
| ICZ platform wedged on wall that you can jump on to move<br />
| 57764<br />
|-<br />
| BA<br />
| 5CF7E<br />
| Large metal column after lazer boss in FBZ that moves<br />
| 57A92<br />
|-<br />
| BB<br />
| 5CF82<br />
| Thing lodged in roof that shoots cold stuff at you to freeze you in ICZ<br />
| 57E38<br />
|-<br />
| BC<br />
| 5CF86<br />
| Stack of ice blocks that you can smash from ICZ<br />
| 58324<br />
|-<br />
| BD<br />
| 5CF8A<br />
| Swinging platform from ICZ<br />
| 584BC<br />
|-<br />
| BE<br />
| 5CF8E<br />
| Falling icicle from ICZ<br />
| 5894C<br />
|-<br />
| BF<br />
| 5CF92<br />
| Block of ice you can break from ICZ<br />
| 58B24<br />
|-<br />
| C0<br />
| 5CF96<br />
| Icicle on roof from ICZ<br />
| 58A58<br />
|-<br />
| C1<br />
| 5CF9A<br />
| Unknown. A block in background that hurts you.<br />
| 58C6A<br />
|-<br />
| C2<br />
| 5CF9E<br />
| Unknown. A row of blocks in foreground.<br />
| 58CE8<br />
|-<br />
| C3<br />
| 5CFA2<br />
| Platform suspended between to elastically chain thingys that when you jump on propels you up from ICZ<br />
| 59032<br />
|-<br />
| C4<br />
| 5CFA6<br />
| ????????<br />
| 56354<br />
|-<br />
| C5<br />
| 5CFAA<br />
| Unknown. Sits in background with picture of monitor and no animation.<br />
| 522EA<br />
|-<br />
| C6<br />
| 5CFAE<br />
| Egg prison<br />
| 544E0<br />
|-<br />
| C7<br />
| 5CFB2<br />
| ????????<br />
| 446F2<br />
|-<br />
| C8<br />
| 5CFB6<br />
| Unknown. A one way block.<br />
| 57B46<br />
|-<br />
| C9<br />
| 5CFBA<br />
| Unknown. Sits inbackground with picture of button.<br />
| 4549C<br />
|-<br />
| CA<br />
| 5CFBE<br />
| AIZ intro with plane<br />
| 4584E<br />
|-<br />
| CB<br />
| 5CFC2<br />
| Giant golden ring<br />
| 44236<br />
|-<br />
| CC<br />
| 5CFC6<br />
| LBZ act 1 mini boss activation trigger<br />
| 5A512<br />
|-<br />
| CD<br />
| 5CFCA<br />
| Robotnic flying off into background<br />
| 51B4C<br />
|-<br />
| CE<br />
| 5CFCE<br />
| ????????<br />
| 43830<br />
|-<br />
| CF<br />
| 5CFD2<br />
| Unknown. A few blocks hovering in background<br />
| 43B08<br />
|-<br />
| D0<br />
| 5CFD6<br />
| FInal S3 boss from LBZ act 2<br />
| 50CAA<br />
|-<br />
| D1<br />
| 5CFDA<br />
| Breakable vertical barriers used for spintubes in AIZ and ICZ<br />
| 455F4<br />
|-<br />
| D2<br />
| 5CFDE<br />
| Button<br />
| 4564C<br />
|-<br />
| D3<br />
| 5CFE2<br />
| Unknown. Large vertical block. Posibly waterfall.<br />
| 45424<br />
|}<br />
<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s3]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Sonic_the_Hedgehog_2_(Simon_Wai_prototype)&diff=96181SCHG:Sonic the Hedgehog 2 (Simon Wai prototype)2009-01-09T01:49:23Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>This is the '''[[Sonic Community Hacking Guide]] for ''[[Sonic the Hedgehog 2 Simon Wai Prototype]]'''''. <br />
<br />
==ASCII Binary commands==<br />
*init - initializes big jobs like palettes, sprites, tiles, etc.<br />
*4XF9XXXXXXXX - (Hex) Jump to address (ie 4EF90048044 would be Jmp $48044)<br />
<br />
==Binary Map==<br />
''Incomplete and disorganized.. credit to [[Nemesis]], [[ICEknight]], [[Esrael]], [[Saxman]], [[Nayr_T%27nargh|Nayr]]''<br />
<br />
{|class="prettytable"<br />
!Location||Significance<br />
|-<br />
|0-FF||Vector table<br />
|-<br />
|100-200||Header<br />
|-<br />
|15FA-????||Programming to do wih decompression of art tiles to VRAM <br />
|-<br />
|5E8-B07||Standard numbers/symbols <br />
|-<br />
|2264-24A1||Unknown palettes <br />
|-<br />
|2516-2595||Unknown palette <br />
|-<br />
|28A6-28E1||Unknown palette <br />
|-<br />
|294E-2A15||Palette pointers <br />
|-<br />
|2A16||SEGA screen palette (00) <br />
|-<br />
|2A96||Title screen palette (01) <br />
|-<br />
|2B16||Level select palette (02) <br />
|-<br />
|2B96||Primary palette line (03) <br />
|-<br />
|2BB6||EHZ level palette (04, 05, 07, 0D, 12, 14)<br />
|-<br />
|2C16||WZ level palette (06) <br />
|-<br />
|2C76||MTZ level palette (08, 09) <br />
|-<br />
|2CD6||HTZ level palette (0B) <br />
|-<br />
|2D36||HPZ level palette (0C) <br />
|-<br />
|2D96||HPZ underwater palette (15) <br />
|-<br />
|2E16||OOZ level palette (0E) <br />
|-<br />
|2E76||MCZ level palette (0F) <br />
|-<br />
|2ED6||CNZ level palette (10) <br />
|-<br />
|2F36||06 level palette (0A) <br />
|-<br />
|2F96||CPZ level palette (11) <br />
|-<br />
|2FF6||CPZ underwater palette (15) <br />
|-<br />
|3076||ARZ level palette (13) <br />
|-<br />
|30D6||ARZ underwater palette (16) <br />
|-<br />
|3156||Sonic 1 special stage palette (17) <br />
|-<br />
|3AD4-3B07||Level select level order <br />
|-<br />
|4140-4150||Music playlist for levels<br />
|-<br />
|4AAA-4ADB||Function to load collision index into ram <br />
|-<br />
|4ADC-4B63||Pointers to collision indexes<br />
|-<br />
|5986-5A95||Level size array<br />
|-<br />
|5A96-5B01||Code for initial character and screen placement <br />
|-<br />
|5B02-5B89||Character start location array<br />
|-<br />
|5E16-5E37||Offset index of rasterised layer deformation<br />
|-<br />
|5E38||Title screen layer deformation info <br />
|-<br />
|5E5C||EHZ layer deformation info <br />
|-<br />
|5F60||EHZ 2 player splitscreen layer deformation info <br />
|-<br />
|6098||WZ layer deformation info <br />
|-<br />
|60D0||MTZ layer deformation info <br />
|-<br />
|6108||HTZ layer deformation info <br />
|-<br />
|6236||Unknown layer deformation info (foreground free moving, background fixed) <br />
|-<br />
|62B4||Unknown layer deformation info (splitscreen, background fixed vertically, no deformation) <br />
|-<br />
|6344||HPZ layer deformation info <br />
|-<br />
|640A||OOZ layer deformation info <br />
|-<br />
|6442||MCZ layer deformation info <br />
|-<br />
|6554||Unknown layer deformation info (splitscreen, background fixed horizontally, no deformation) <br />
|-<br />
|67AE||CNZ layer deformation info <br />
|-<br />
|67F2||Unknown layer deformation info (splitscreen, background fixed vertically, no deformation) <br />
|-<br />
|687C||CPZ layer deformation info <br />
|-<br />
|6982||ARZ layer deformation info <br />
|-<br />
|6A70||01, 03, 06, 09, 0E, 10 layer deformation info <br />
|-<br />
|7FDC||Bridge (sprite)<br />
|-<br />
|85F8||??????? (sprite)<br />
|-<br />
|8B9C||??????? (sprite)<br />
|-<br />
|8D38||Fixed large platform from CPZ (sprite)<br />
|-<br />
|9128||Collapsing platform from OOZ (sprite)<br />
|-<br />
|9274||Breakaway platform made up of small blocks from MZ in S1 (sprite)<br />
|-<br />
|999C||??????? (sprite)<br />
|-<br />
|9A54||??????? (sprite)<br />
|-<br />
|9C0C||??????? (sprite)<br />
|-<br />
|9CE2||??????? (sprite)<br />
|-<br />
|A012||??????? (sprite)<br />
|-<br />
|A086||Explosion giving off 100 points and an animal (sprite)<br />
|-<br />
|A11E||Red explosion (sprite)<br />
|-<br />
|A2B0||??????? (sprite)<br />
|-<br />
|A7C0||100 points (sprite)<br />
|-<br />
|AC28||??????? (sprite)<br />
|-<br />
|AD62||Ring spray (sprite)<br />
|-<br />
|B29C||??????? (sprite)<br />
|-<br />
|B46A||Contents of computer monitor flying up (sprite)<br />
|-<br />
|B7B4||??????? (sprite)<br />
|-<br />
|B83A||??????? (sprite)<br />
|-<br />
|BB54||??????? (sprite)<br />
|-<br />
|BD76||Game over text (sprite)<br />
|-<br />
|BE38||??????? (sprite)<br />
|-<br />
|BF9A-BFDD||Main game level order <br />
|-<br />
|C944||Spikes (sprite)<br />
|-<br />
|CD00||Unknown (a block)<br />
|-<br />
|CD7C||??????? (sprite)<br />
|-<br />
|D01A-D249||Sprite programming pointers<br />
|-<br />
|D24A||??????? (sprite)<br />
|-<br />
|E7B8||Horizontal red spring (sprite)<br />
|-<br />
|F10C||??????? (sprite)<br />
|-<br />
|F1F4||Signpost (sprite)<br />
|-<br />
|FC48||Sonic (sprite)<br />
|-<br />
|10E38||Tails (sprite)<br />
|-<br />
|11F96||??????? (sprite)<br />
|-<br />
|1207C||??????? (sprite)<br />
|-<br />
|125CE||??????? (sprite)<br />
|-<br />
|1264E||??????? (sprite)<br />
|-<br />
|12B42||??????? (sprite)<br />
|-<br />
|13B54||Starpoll (sprite)<br />
|-<br />
|13DFC||??????? (sprite)<br />
|-<br />
|144B0||??????? (sprite)<br />
|-<br />
|148AC||??????? (sprite)<br />
|-<br />
|149FC||??????? (sprite)<br />
|-<br />
|14AFC||??????? (sprite)<br />
|-<br />
|14B78||??????? (sprite)<br />
|-<br />
|15090||??????? (sprite)<br />
|-<br />
|15352||??????? (sprite)<br />
|-<br />
|155A0||??????? (sprite)<br />
|-<br />
|1561A||??????? (sprite)<br />
|-<br />
|1572C||??????? (sprite)<br />
|-<br />
|15B8C||See-saw (sprite)<br />
|-<br />
|1600C||Diagnally moving and falling platform from HTZ (sprite)<br />
|-<br />
|1621C||Large platform from CPZ moving from side to side (sprite)<br />
|-<br />
|16468||Boosters from CPZ (sprite)<br />
|-<br />
|165B0||??????? (sprite)<br />
|-<br />
|16724||Spin-tube from CPZ (sprite)<br />
|-<br />
|17174||??????? (sprite)<br />
|-<br />
|1747C||??????? (sprite)<br />
|-<br />
|1768A||Cap on top of spin tubes in CPZ (sprite)<br />
|-<br />
|17A4C||??????? (sprite)<br />
|-<br />
|17CA0||Platform on top of oil burners from OOZ (sprite)<br />
|-<br />
|17F0C||Spikeball from OOZ (sprite)<br />
|-<br />
|180D0||??????? (sprite)<br />
|-<br />
|181A0||Weird spring that you push back on from OOZ (sprite)<br />
|-<br />
|18ABE||Ball on weird spring from OOZ (sprite)<br />
|-<br />
|18D9C||Button (sprite)<br />
|-<br />
|18E78||Block that propells sonic when he busts it from OOZ (sprite)<br />
|-<br />
|19250||Spinball that shoots character out 90 degrees from entry from OOZ (sprite)<br />
|-<br />
|19660||Arrow shooter from ARZ (sprite)<br />
|-<br />
|19850||Piller that drops lower half in ARZ (sprite)<br />
|-<br />
|19A1E||Raising pillar from ARZ (sprite)<br />
|-<br />
|1A0C4||??????? (sprite)<br />
|-<br />
|1A30C||Weird spring from ARZ and CPZ (sprite)<br />
|-<br />
|1A5CC||Steam vent from MTZ (sprite)<br />
|-<br />
|1A8B4||??????? (sprite)<br />
|-<br />
|1AA74||??????? (sprite)<br />
|-<br />
|1AEBC||??????? (sprite)<br />
|-<br />
|1B0C4||Warp tube from MTZ (sprite)<br />
|-<br />
|1B520||Block in MTZ with a spike coming out each side sequentially (sprite)<br />
|-<br />
|1B810||Nut that character moves by running on in MTZ (sprite)<br />
|-<br />
|1BA30||??????? (sprite)<br />
|-<br />
|1BCEC||??????? (sprite)<br />
|-<br />
|1BF6C||??????? (sprite)<br />
|-<br />
|1B720||Floor spike in MTZ (sprite)<br />
|-<br />
|1C2E4||Platform moving in circle (sprite)<br />
|-<br />
|1C4F8||Diagnally moving platform from MTZ (sprite)<br />
|-<br />
|1C850||??????? (sprite)<br />
|-<br />
|1CBCC||??????? (sprite)<br />
|-<br />
|1CC54||??????? (sprite)<br />
|-<br />
|1CE48||??????? (sprite)<br />
|-<br />
|1D078||Moving spikey arm from MCZ (sprite)<br />
|-<br />
|1D208||??????? (sprite)<br />
|-<br />
|1D3C0||Lowering stairs from CPZ (sprite)<br />
|-<br />
|1D594||??????? (sprite)<br />
|-<br />
|1D74C||Spring on spin tube cap from CPZ (sprite)<br />
|-<br />
|1D984||Driving badnick from EHZ (sprite)<br />
|-<br />
|1DC54||??????? (sprite)<br />
|-<br />
|1DEAC||Bubble enemy (sprite)<br />
|-<br />
|1E010||??????? (sprite)<br />
|-<br />
|1E62C||??????? (sprite)<br />
|-<br />
|1E89C||Buzz bomber (sprite)<br />
|-<br />
|1EBB8||Octopus badnick from OOZ (sprite)<br />
|-<br />
|1EE68||Bat (sprite)<br />
|-<br />
|1F2F0||Alligator (sprite)<br />
|-<br />
|1F5E8||Jumping fish from EHZ (sprite)<br />
|-<br />
|1F6E8||??????? (sprite)<br />
|-<br />
|1F99C||??????? (sprite)<br />
|-<br />
|1FC0A||??????? (sprite)<br />
|-<br />
|2030C||??????? (sprite)<br />
|-<br />
|205A6||??????? (sprite)<br />
|-<br />
|20740||??????? (sprite)<br />
|-<br />
|20E5C||??????? (sprite)<br />
|-<br />
|21D40||??????? (sprite)<br />
|-<br />
|223E2||??????? (sprite)<br />
|-<br />
|22408||Offset index of animated pattern and dynamic pattern load cue's<br />
|-<br />
|2244C||01/WZ/03/06/09/MCZ/CNZ/GCZ/DEZ dynamic pattern load cue <br />
|-<br />
|2244E||HTZ dynamic pattern load cue <br />
|-<br />
|22630||EHZ/HPZ/MTZ/OOZ/CPZ/ARZ dynamic pattern load cue <br />
|-<br />
|22698||EHZ animated pattern load cue (4) <br />
|-<br />
|226FC||MTZ animated pattern load cue (5) <br />
|-<br />
|22754||HTZ animated pattern load cue (4) <br />
|-<br />
|227B8||HPZ animated pattern load cue (2) <br />
|-<br />
|227E4||OOZ animated pattern load cue (4) <br />
|-<br />
|2282A||CPZ animated pattern load cue (0) <br />
|-<br />
|22866||01/WZ/03/06/09/MCZ/CNZ/GCZ/DEZ animated pattern load cue (empty) <br />
|-<br />
|229A2||Offset index of misc sprite definitions<br />
|-<br />
|229C4||EHZ/HTZ misc sprite definitions <br />
|-<br />
|22A40||MTZ misc sprite definitions <br />
|-<br />
|22B14||HPZ misc sprite definitions <br />
|-<br />
|22C08||OOZ misc sprite definitions <br />
|-<br />
|22C6C||CNZ misc sprite definitions <br />
|-<br />
|22D10||CPZ misc sprite definitions <br />
|-<br />
|22D1C||ARZ misc sprite definitions <br />
|-<br />
|22D60||01/WZ/03/06/09/MCZ/GCZ/DEZ misc sprite definitions <br />
|-<br />
|22DFC||Onscreen display (lives/score/time/rings) (sprite)<br />
|-<br />
|23448-23B67||Large and small numbers used in game <br />
|-<br />
|23DBE||Offset index of object debug lists<br />
|-<br />
|23DE0||01/WZ/03/06/09/GCZ/DEZ object debug list <br />
|-<br />
|23DF2||EHZ object debug list <br />
|-<br />
|23ECC||MTZ object debug list <br />
|-<br />
|23FAE||HTZ object debug list <br />
|-<br />
|24078||HPZ object debug list <br />
|-<br />
|240F2||OOZ object debug list <br />
|-<br />
|24194||MCZ object debug list <br />
|-<br />
|24216||CNZ object debug list <br />
|-<br />
|24228||CPZ object debug list <br />
|-<br />
|242C2||ARZ object debug list <br />
|-<br />
|24354||Indexed main level load block<br />
|-<br />
|24420||Offset index of pattern load cue's<br />
|-<br />
|2447A||Pattern load cue's<br />
|-<br />
|<font color=red>24804||Lost pattern load cue's from previous compilation<br />
|-<br />
|<font color=red>24A30||Leftover data from previous build<br />
|-<br />
|28000||Animated cone shaped flower from EHZ and HTZ <br />
|-<br />
|28080||Animated bubble like flower from EHZ and HTZ <br />
|-<br />
|28100||Animated stringy flower from EHZ and HTZ <br />
|-<br />
|28180||Animated leafy flower from EHZ and HTZ <br />
|-<br />
|28200||Animated pulsing thing against checkered background in EHZ <br />
|-<br />
|28300||Hills in background from HTZ<br />
|-<br />
|28C2A||Clouds in background of HTZ <br />
|-<br />
|2902A||Spinning metal cylinder from MTZ <br />
|-<br />
|2A02A||Lava patterns from EHZ and MTZ <br />
|-<br />
|2A62A||Animated section of MTZ background <br />
|-<br />
|2A86A||Horizontal and vertical rotating screw <br />
|-<br />
|2B06A||Weird peice of alpha HPZ background <br />
|-<br />
|2B46A||Giant pulsing ball in HPZ <br />
|-<br />
|2B76A||Tiny pulsing ball in OOZ <br />
|-<br />
|2B94A||Square rotating around ball in OOZ <br />
|-<br />
|2BD4A||Oil in OOZ <br />
|-<br />
|2CCEA||Animated background section from CPZ and DEZ <br />
|-<br />
|2CEEA||Waterfall patterns from ARZ <br />
|-<br />
|2D1EA||Curve and resistance mapping <br />
|-<br />
|2D2EA||Collision array <br />
|-<br />
|2F2EA||EHZ and HTZ primary 16x16 collision index <br />
|-<br />
|2F5EA||EHZ and HTZ secondary 16x16 collision index <br />
|-<br />
|2F8EA||WZ primary 16x16 collision index <br />
|-<br />
|2FBEA||MTZ primary 16x16 collision index <br />
|-<br />
|2FEEA||HPZ primary 16x16 collision index <br />
|-<br />
|301EA||HPZ secondary 16x16 collision index <br />
|-<br />
|304EA||OOZ primary 16x16 collision index <br />
|-<br />
|307EA||DHZ primary 16x16 collision index <br />
|-<br />
|30AEA||CNZ primary 16x16 collision index <br />
|-<br />
|30DEA||CNZ secondary 16x16 collision index <br />
|-<br />
|310EA||CPZ primary 16x16 collision index <br />
|-<br />
|313EA||CPZ secondary 16x16 collision index <br />
|-<br />
|316EA||ARZ primary 16x16 collision index <br />
|-<br />
|319EA||ARZ secondary 16x16 collision index <br />
|-<br />
|31CEA-3334D||????????? (something to do with special stage)<br />
|-<br />
|3334E||Level layout offset index<br />
|-<br />
|333D6||EHZ act 1 foreground<br />
|-<br />
|33BD8||EHZ act 2 foreground<br />
|-<br />
|343DA||EHZ act 1/2 background<br />
|-<br />
|343E4||01 act 1/2 foreground/background<br />
|-<br />
|343E8||WZ act 1 foreground<br />
|-<br />
|34BEA||WZ act 2 foreground<br />
|-<br />
|353EC||WZ act 1 background <br />
|-<br />
|35BEE||WZ act 2 background <br />
|-<br />
|363F0||03 act 1/2 foreground/background <br />
|-<br />
|363F4||MTZ act 1 foreground <br />
|-<br />
|36BF6||MTZ act 2 foreground <br />
|-<br />
|373F8||MTZ act 1/2/3 background <br />
|-<br />
|3741E||MTZ act 3 foreground <br />
|-<br />
|37C20||06 act 1/2 foreground/background <br />
|-<br />
|37C24||HTZ act 1 foreground <br />
|-<br />
|38426||HTZ act 2 foreground <br />
|-<br />
|38C28||HTZ act 1 background <br />
|-<br />
|3942A||HTZ act 2 background <br />
|-<br />
|39C2C||HPZ act 1/2 foreground <br />
|-<br />
|3A42E||HPZ act 1/2 background <br />
|-<br />
|3A478||09 act 1/2 foreground/background <br />
|-<br />
|3A47C||OOZ act 1 foreground <br />
|-<br />
|3AC7E||OOZ act 2 foreground <br />
|-<br />
|3B480||OOZ act 1/2 foreground/background <br />
|-<br />
|3B49A||DHZ act 1 foreground <br />
|-<br />
|3BC9C||DHZ act 2 foreground <br />
|-<br />
|3C49E||DHZ act 1/2 background <br />
|-<br />
|3C4B0||CNZ act 1 foreground <br />
|-<br />
|3CCB2||CNZ act 2 foreground <br />
|-<br />
|3D4B4||CNZ act 1 background <br />
|-<br />
|3DCB6||CNZ act 2 background <br />
|-<br />
|3DCC0||CPZ act 1 foreground <br />
|-<br />
|3E4C2||CPZ act 2 foreground <br />
|-<br />
|3ECC4||CPZ act 1 foreground <br />
|-<br />
|3ECF0||GCZ act 1/2 foreground/background <br />
|-<br />
|3ECF4||ARZ act 1 foreground <br />
|-<br />
|3F4F6||ARZ act 2 foreground <br />
|-<br />
|3FCF8||ARZ act 1 background <br />
|-<br />
|404FA||ARZ act 2 background <br />
|-<br />
|40CFC||DEZ act 1/2 foreground/background <br />
|-<br />
|40D00||Giant golden ring <br />
|-<br />
|<font color=red>41940||Blank space<br />
|-<br />
|<font color=red>42B7A||Giant golden ring... again (uncompressed)<br />
|-<br />
|<font color=green>437BC||Very end of palette<br />
|-<br />
|<font color=green>437C6||??????????<br />
|-<br />
|44000||Offset index of sprite locations<br />
|-<br />
|4404A||EHZ act 1 sprite locations <br />
|-<br />
|442C6||EHZ act 2 sprite locations <br />
|-<br />
|445C0||MTZ act 1 sprite locations <br />
|-<br />
|4488A||MTZ act 2 sprite locations <br />
|-<br />
|44B30||MTZ act 3 sprite locations <br />
|-<br />
|44EFC||HTZ act 1 sprite locations <br />
|-<br />
|45130||HTZ act 2 sprite locations <br />
|-<br />
|4554A||HPZ act 1 sprite locations <br />
|-<br />
|45652||HPZ act 2 sprite locations (empty) <br />
|-<br />
|45658||Unknown (empty) <br />
|-<br />
|4565E||OOZ act 1 sprite locations <br />
|-<br />
|457C0||OOZ act 2 sprite locations <br />
|-<br />
|459AC||DHZ act 1 sprite locations <br />
|-<br />
|45A24||DHZ act 2 sprite locations <br />
|-<br />
|45A2A||CPZ act 1 sprite locations <br />
|-<br />
|45CC4||CPZ act 2 sprite locations <br />
|-<br />
|4605A||ARZ act 1 sprite locations <br />
|-<br />
|46216||ARZ act 1 sprite locations <br />
|-<br />
|46348||01, WZ, 03, 06, 09, CNZ, GCZ, DEZ sprite locations (empty) <br />
|-<br />
|<font color=red>4634E||??????????<br />
|-<br />
|<font color=red>474AC||Lost palette<br />
|-<br />
|<font color=red>4760C||??????????<br />
|-<br />
|48000||Offset index of ring locations<br />
|-<br />
|48044||EHZ act 1 ring locations <br />
|-<br />
|481DE||EHZ act 2 ring locations <br />
|-<br />
|483DC||01 act 1 ring locations (empty) <br />
|-<br />
|483DE||01 act 2 ring locations (empty) <br />
|-<br />
|483E0||WZ act 1 ring locations (empty) <br />
|-<br />
|483E2||WZ act 2 ring locations (empty) <br />
|-<br />
|483E4||03 act 1 ring locations (empty) <br />
|-<br />
|483E6||03 act 2 ring locations (empty) <br />
|-<br />
|483E8||MTZ act 1 ring locations (empty) <br />
|-<br />
|483EA||MTZ act 2 ring locations (empty) <br />
|-<br />
|483EC||MTZ act 3 ring locations (empty) <br />
|-<br />
|483EE||MTZ act 4 ring locations (empty) <br />
|-<br />
|483F0||06 act 1 ring locations (empty) <br />
|-<br />
|483F2||06 act 2 ring locations (empty) <br />
|-<br />
|483F4||HTZ act 1 ring locations <br />
|-<br />
|484EA||HTZ act 2 ring locations <br />
|-<br />
|48654||HPZ act 1 ring locations <br />
|-<br />
|487C6||HPZ act 2 ring locations (empty) <br />
|-<br />
|487C8||09 act 1 ring locations (empty) <br />
|-<br />
|487CA||09 act 2 ring locations (empty) <br />
|-<br />
|487CC||OOZ act 1 ring locations <br />
|-<br />
|4889E||OOZ act 2 ring locations <br />
|-<br />
|48968||DHZ act 1 ring locations (empty) <br />
|-<br />
|4896A||DHZ act 2 ring locations (empty) <br />
|-<br />
|4896C||CNZ act 1 ring locations (empty) <br />
|-<br />
|4896E||CNZ act 2 ring locations (empty) <br />
|-<br />
|48970||CPZ act 1 ring locations <br />
|-<br />
|48A3E||CPZ act 2 ring locations <br />
|-<br />
|48B94||GCZ act 1 ring locations (empty) <br />
|-<br />
|48B96||GCZ act 2 ring locations (empty) <br />
|-<br />
|48B98||ARZ act 1 ring locations <br />
|-<br />
|48C76||ARZ act 2 ring locations <br />
|-<br />
|48DB0||DEZ act 1 ring locations (empty) <br />
|-<br />
|48DB2||DEZ act 2 ring locations (empty) <br />
|-<br />
|<font color=red>48DB4||??????????<br />
|-<br />
|<font color=red>4B76C||Rock splashing into liquid (uncompressed)<br />
|-<br />
|<font color=red>4BAAC||Lost palette<br />
|-<br />
|<font color=red>4BC4C||??????????<br />
|-<br />
|<font color=red>4E54A||Grains of sand falling (uncompressed)<br />
|-<br />
|<font color=red>4E86A||Fire in bowl against stone background (uncompressed)<br />
|-<br />
|<font color=red>4EC6A||Data block acting as seperator<br />
|-<br />
|<font color=red>4EE00||?????????? (uncompressed data blocks with massive repetition)<br />
|-<br />
|<font color=red>4FB98||Data block acting as seperator<br />
|-<br />
|50000||Patterns for Sonic <br />
|-<br />
|614C0||Unknown offset index<br />
|-<br />
|6160E||Unknown (Something to do with mappings for Sonic)<br />
|-<br />
|62598||Patterns for Tails <br />
|-<br />
|6DA4C||Unknown offset index<br />
|-<br />
|6DB9A||Unknown (Something to do with mappings for Sonic)<br />
|-<br />
|6DF8E||Patterns for bubble<br />
|-<br />
|6E114||Stars from invincibility<br />
|-<br />
|6E1F6||Patterns for smoke trails, dust, and splash in water <br />
|-<br />
|6FB3C||Unknown offset index<br />
|-<br />
|6FC46||Unknown (Something to do with mappings for Tails)<br />
|-<br />
|7056E||Unknown offset index<br />
|-<br />
|70678||Unknown (Something to do with mappings for Tails)<br />
|-<br />
|70960||SEGA patterns<br />
|-<br />
|71520||Title patterns<br />
|-<br />
|72E82||Sonic patterns in title screen<br />
|-<br />
|739C6||Fireballs from HTZ and WZ<br />
|-<br />
|73B3C||Some waterfll tiles form WZ<br />
|-<br />
|73C42||Another fireball from HTZ<br />
|-<br />
|73D90||Peices of bridge from EHZ<br />
|-<br />
|73E68||Flying fox system in HTZ<br />
|-<br />
|7415C||One way barrier from HTZ<br />
|-<br />
|741D4||See-saw from HTZ<br />
|-<br />
|7436C||Fireball<br />
|-<br />
|7447A||Rock from HTZ<br />
|-<br />
|745B0||badnick from HTZ with balls of flame spinning around him that he shoots at you<br />
|-<br />
|7461C||Spinning grey wheel from MTZ<br />
|-<br />
|74A74||A ball shaped thing from MTZ patterns<br />
|-<br />
|74B1C||Spear block from MTZ<br />
|-<br />
|74BEA||Steam from MTZ<br />
|-<br />
|74CF4||Spike from MTZ<br />
|-<br />
|74DB6||Unknown. Some similar shaded blocks<br />
|-<br />
|74E2C||Lava bubble from MTZ<br />
|-<br />
|74EE2||Something from MTZ patterns<br />
|-<br />
|74F52||Unknown. A block of some kind.<br />
|-<br />
|751FE||Stuff from MTZ<br />
|-<br />
|752A0||Mini rotating cog from MTZ<br />
|-<br />
|75382||Four blocks from MTZ tiles. All of the blocks are just one colour<br />
|-<br />
|7538E||Bridge from HPZ<br />
|-<br />
|75506||Waterfall tiles for HPZ<br />
|-<br />
|75868||The master emerald<br />
|-<br />
|75ADA||Platform thing from HPZ<br />
|-<br />
|75B9A||Pulsing light thing from HPZ<br />
|-<br />
|75DD6||Another platform thing from HPZ and those green blocks<br />
|-<br />
|75F70||Patterns from raising platform in OOZ<br />
|-<br />
|76060||Spikeball thing from OOZ<br />
|-<br />
|76258||Patterns for stuff in OOZ<br />
|-<br />
|762EE||Some striped patterns from OOZ<br />
|-<br />
|7635A||Oil patterns from OOZ<br />
|-<br />
|764D6||Some blocks of oil and stuff from OOZ<br />
|-<br />
|76602||Unknown. Damn I wish I could make this out, because it looks quite interesting.<br />
|-<br />
|76722||Unknown. Ditto.<br />
|-<br />
|76A12||Unknown. Whatever they are, they look OOZ style.<br />
|-<br />
|76CA6||Unknown. Also look OOZ in style.<br />
|-<br />
|76E68||Swinging platform from OOZ<br />
|-<br />
|7708A||Wooden box from MCZ<br />
|-<br />
|772C8||Collapsing platform from MCZ<br />
|-<br />
|77472||Vines around switch you pull on from MCZ<br />
|-<br />
|7756A||Vines from MCZ<br />
|-<br />
|77614||A side on view of a log from WZ I suspect.<br />
|-<br />
|77684||Big moving platform in CPZ<br />
|-<br />
|777D2||Surface of water from HPZ and CPZ<br />
|-<br />
|77942||Unknown. It looks like a small cylinder kinda.<br />
|-<br />
|779AA||Blue ball for enemy in CPZ<br />
|-<br />
|77A1C||CPZ metal stuff<br />
|-<br />
|77C26||Some blocks from CPZ<br />
|-<br />
|77C66||Some diagnally striped blocks from CPZ<br />
|-<br />
|77CD2||Little yellow moving platform from CPZ<br />
|-<br />
|77EB4||Block from CPZ, but with something else as well.<br />
|-<br />
|78074||Spring on top of pipe from CPZ, and something else further down.<br />
|-<br />
|78270||Top of water from ARZ<br />
|-<br />
|78356||Leaves from ARZ<br />
|-<br />
|783E2||Arrow and arrow shooter from ARZ<br />
|-<br />
|78540||Splash from ARZ<br />
|-<br />
|78580||Button<br />
|-<br />
|78658||Vertical red spring<br />
|-<br />
|78774||Horizontal red spring<br />
|-<br />
|7883E||Diagonal spring<br />
|-<br />
|78A12||Score, rings, time patterns<br />
|-<br />
|78B1A||Sonic lives counter<br />
|-<br />
|78C30||Ring patterns<br />
|-<br />
|78D24||Monitor patterns<br />
|-<br />
|7914E||Spikes<br />
|-<br />
|7919E||Numbers<br />
|-<br />
|79278||Beta starpoll<br />
|-<br />
|7931E||Signpost for end of level<br />
|-<br />
|798F4||Weird spring from CPZ and ARZ<br />
|-<br />
|79A44||Long horizontal spike<br />
|-<br />
|79AC0||Bubbles and numbers that count down when underwater<br />
|-<br />
|7A11A||Crocodile<br />
|-<br />
|7A4BC||Buzz bomber<br />
|-<br />
|7A6A2||Bat from HPZ<br />
|-<br />
|7A9F8||Octopus from OOZ<br />
|-<br />
|7AD18||Rhinobot<br />
|-<br />
|7B114||Dinobot<br />
|-<br />
|7B4EA||Pirhana<br />
|-<br />
|7B9E2||Seahorse from OOZ<br />
|-<br />
|7BE30||Spinning ball thingy<br />
|-<br />
|7C0C6||Blinky<br />
|-<br />
|7C2F2||Bubble monster<br />
|-<br />
|7C514||Ground based badnick from EHZ<br />
|-<br />
|7C710||Bouncer badnick from CNZ<br />
|-<br />
|7CA92||Fish badnick from EHZ<br />
|-<br />
|7CC9E||Robotnic and his main ship<br />
|-<br />
|7D3DA||CPZ boss<br />
|-<br />
|7D938||Some kind of large explosion<br />
|-<br />
|7DFC0||A small explosion<br />
|-<br />
|7E03E||Some kind of trailing smoke<br />
|-<br />
|7E124||EHZ boss<br />
|-<br />
|7E910||Chopper blades for EHZ boss<br />
|-<br />
|7EA04||Title card patterns for levels<br />
|-<br />
|7F012||Regular in level explosion<br />
|-<br />
|7F678||Game/time over tiles<br />
|-<br />
|7F80A||Vertical spring from S1<br />
|-<br />
|7F90C||Horizontal spring from S1<br />
|-<br />
|7F9E8||Flash from entering giant ring<br />
|-<br />
|7FB5C||Hidden end of level bonus points<br />
|-<br />
|7FE5E||Patterns for continue screen from S1<br />
|-<br />
|8010E||Patterns for recieveing continue at end of special stage from S1<br />
|-<br />
|80348||Rabbit<br />
|-<br />
|804A0||White bird<br />
|-<br />
|805FC||Black bird<br />
|-<br />
|80778||Seal<br />
|-<br />
|80894||Pig<br />
|-<br />
|809CA||Blue bird<br />
|-<br />
|80B04||Bear<br />
|-<br />
|80C60||16x16 block mappings for EHZ<br />
|-<br />
|81C00||EHZ/HTZ main level patterns<br />
|-<br />
|84A50||16x16 block mappings for HTZ suppliment on EHZ tiles <br />
|-<br />
|85200||HTZ pattern suppliment to EHZ level patterns<br />
|-<br />
|86626||Initial blocks for dynamically reloaded and animated patterns in HTZ<br />
|-<br />
|8692E||EHZ/HTZ 128x128 block mappings<br />
|-<br />
|89B8E||WZ 16x16 block mappings <br />
|-<br />
|8AB2E||WZ main level patterns<br />
|-<br />
|8E826||WZ 128x128 block mappings<br />
|-<br />
|90456||MTZ 16x16 block mappings <br />
|-<br />
|91716||MTZ main level patterns<br />
|-<br />
|94C56||MTZ 128x128 block mappings <br />
|-<br />
|97596||HPZ 16x16 block mappings <br />
|-<br />
|98B76||HPZ main level patterns<br />
|-<br />
|9B9F8||HPZ 128x128 block mappings <br />
|-<br />
|9D778||OOZ 16x16 block mappings <br />
|-<br />
|9ED58||OOZ main level patterns<br />
|-<br />
|A1A58||OOZ 128x128 block mappings <br />
|-<br />
|A3F88||MCZ 16x16 block mappings <br />
|-<br />
|A5248||MCZ main level patterns<br />
|-<br />
|A8B6A||MCZ 128x128 block mappings <br />
|-<br />
|AB5CA||CNZ 16x16 block mappings <br />
|-<br />
|ABF2A||CNZ main level patterns<br />
|-<br />
|<font color=red>AE746||Leftover data from previous build<br />
|-<br />
|AEF3C||Some blocks from CNZ<br />
|-<br />
|AF026||CNZ 128x128 block mappings <br />
|-<br />
|B0F26||CPZ/DEZ 16x16 block mappings <br />
|-<br />
|B2506||CPZ/DEZ main level patterns<br />
|-<br />
|B6058||CPZ/DEZ 128x128 block mappings <br />
|-<br />
|B8558||ARZ 16x16 block mappings <br />
|-<br />
|B9E58||ARZ main level patterns<br />
|-<br />
|BF408||Waterfall patterns<br />
|-<br />
|BF568||ARZ 128x128 block mappings <br />
|-<br />
|<font color=red>C2138||End of compressed ARZ 128x128 block mappings<br />
|-<br />
|<font color=green>C2148||large chunk of CNZ 128x128 block mappings (uncompressed)<br />
|-<br />
|<font color=green>C943C||CPZ 16x16 block mappings (Different to current beta)<br />
|-<br />
|<font color=green>CAA1C||CPZ main level patterns (797 blocks) (Different to current beta)<br />
|-<br />
|<font color=green>CE03A||CPZ 128x128 block mappings (uncompressed) (Different to current beta)<br />
|-<br />
|<font color=green>D603A||ARZ 16x16 block mappings<br />
|-<br />
|<font color=green>D793A||ARZ main level patterns (1002 blocks) (Identical to current beta)<br />
|-<br />
|<font color=green>DCEEA||Waterfall patterns (00, 11 blocks)<br />
|-<br />
|<font color=green>DD04A||ARZ 128x128 block mappings (uncompressed) (Different to current beta)<br />
|-<br />
|<font color=blue>E504A||Incomplete part of ARZ main level patterns (Identical to current beta)<br />
|-<br />
|<font color=blue>E57E6||Waterfall patterns (00, 11 blocks)<br />
|-<br />
|<font color=blue>E5946||Compressed ARZ 128x128 block mappings<br />
|-<br />
|<font color=green>E8000||Half of SEGA intro sound<br />
|-<br />
|EC000-ECFFF||??????????<br />
|-<br />
|ED000-EFFFF||?????????? (Something to do with music)<br />
|-<br />
|F0000-F1E8B||?????????? (Something to do with music)<br />
|-<br />
|F1E8C-F7FFF||SEGA intro sound<br />
|-<br />
|F8000-FEFFF||?????????? (Something to do with music)<br />
|-<br />
|FF000-FFFFF||?????????? (Something to do with sound fx)<br />
|}<br />
<br />
==Demo Editing==<br />
This is a piece of cake. Change the values to the level you want the demo of. The format is the level number first, then the act number.<br />
<br />
{|border = "1" class="prettytable"<br />
!Demo Number||Location<br />
|-<br />
|Demo 1||3C16 to 3C17<br />
|-<br />
|Demo 2||3C18 to 3C19<br />
|-<br />
|Demo 3||3C1A to 3C1B<br />
|-<br />
|Demo 4||3C1C to 3C1D <br />
|}<br />
<br />
==Codes and keypad editing==<br />
The HEX location of debug code is as follows:<br />
<br />
*3B5A-3B5F<br />
<br />
For this to be useful you'll need the genesis keypad commands =):<br />
<br />
*Up-01<br />
*Down-02<br />
*Left-04<br />
*Right-08<br />
<br />
These are two bytes long, so don't ignore the zeros.<br />
<br />
*Button A - 00 01<br />
*Button B - 00 02<br />
*Button C - 00 04<br />
*Start Button - 00 08<br />
<br />
Now you can have fun changing this strange code around.<br />
<br />
==Level Select Menu hacking==<br />
The hacking here is downright simple. Go to the strings which are presented right below, and then put in the new letters using the letter reference below the string locations:<br />
<br />
{|border = "1" class="prettytable"<br />
!Level||Location<br />
|-<br />
|Green Hill||3D7C-3D8A<br />
|-<br />
|Wood Zone||3DB2-3DBA<br />
|-<br />
|Metropolis Zone||3DE8-3DF6<br />
|-<br />
|Hill Top Zone||3E39-3E45<br />
|-<br />
|Hidden Palace Zone||3E6F-3E81<br />
|-<br />
|Oil Ocean Zone||3EA5-3EB2<br />
|-<br />
|Dust Hill Zone||3EDB-3EE8<br />
|-<br />
|Casino Night Zone||3F11-3F21<br />
|-<br />
|Chemical Plant Zone||3F47-3F59<br />
|-<br />
|Genocide City Zone||3F7D-3F8E<br />
|-<br />
|Neo Green Hill Zone||3FB3-3FC5<br />
|-<br />
|Death Egg Zone||3FE8-3FF6<br />
|}<br />
<br />
Now you need to know what the letters are:<br />
<br />
{|border="1" class="prettytable"<br />
!Value||Letter<br />
|-<br />
|00||0<br />
|-<br />
|01||1<br />
|-<br />
|02||2<br />
|-<br />
|03||3<br />
|-<br />
|04||4<br />
|-<br />
|05||5<br />
|-<br />
|06||6<br />
|-<br />
|07||7<br />
|-<br />
|08||8<br />
|-<br />
|09||9<br />
|-<br />
|0A||$<br />
|-<br />
|0B||-<br />
|-<br />
|0C||=<br />
|-<br />
|0D||<-<br />
|-<br />
|0E||<-<br />
|-<br />
|0F||Y<br />
|-<br />
|10||Z<br />
|-<br />
|11||A<br />
|-<br />
|12||B<br />
|-<br />
|13||C<br />
|-<br />
|14||D<br />
|-<br />
|15||E<br />
|-<br />
|16||F<br />
|-<br />
|17||G<br />
|-<br />
|18||H<br />
|-<br />
|19||I<br />
|-<br />
|1A||J<br />
|-<br />
|1B||K<br />
|-<br />
|1C||L<br />
|-<br />
|1D||M<br />
|-<br />
|1E||N<br />
|-<br />
|1F||O<br />
|-<br />
|20||P<br />
|-<br />
|21||Q<br />
|-<br />
|22||R<br />
|-<br />
|23||S<br />
|-<br />
|24||T<br />
|-<br />
|25||U<br />
|-<br />
|26||V<br />
|-<br />
|27||W<br />
|-<br />
|28||X<br />
|-<br />
|FF||space<br />
|}<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s2b&diff=96179SCHG:Nem s2b2009-01-09T01:49:21Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>==Introduction==<br />
Here are my hacking notes on the Sonic 2 rom. If you use these notes I'd<br />
appreciate it if you would mention it with your hack or your utility, so that other people can<br />
find their way here. For hex editing I recommend you use a hex utility<br />
called Hex workshop, and for emulators I recommend you get both Gens and Genecyst.<br />
Genecyst may be old and kinda crap, but it has a whole heap of debug outputs<br />
that really help when it comes to seeing exactly what it's doing and when.<br><br />
<br />
First of all it's very important that you understand the basics. All data<br />
stored on a computer is in the form of 1's and 0's. On a CD for example, a<br />
laser hits the surface, and if the laser bounces back and hits the lens it's a<br />
1, and if it doesn’t it's a zero. Each 1 or 0 is called a bit, and a bit cannot<br />
have any other characters in it other that a 1 or a 0. Now the computer deals<br />
with bits in groups of 4. There are 16 possible combinations for a group of<br />
four 1's and 0's, so to make it simpler it deals with it as one value, rather<br />
than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a<br />
group of 4 bits, this value to represent their values must have 16 values<br />
itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This<br />
value is called a hexadecimal value (hex value for short). Each hex value is<br />
dealt with in groups of 2, called a byte, each byte having 128 possible<br />
combinations. Now on a final output level the byte may be looked up on an ASCII<br />
table, which will convert that value into a recognisable character (Eg. a byte<br />
value of 73 becomes a lowercase s on an English ASCII table). You will<br />
practically never touch the ASCII version of the code in hacking though.<br><br />
<br />
<br />
Now one important thing to realise is that as one character of hex has 16<br />
values and a decimal (real) value only has 10, it may be necessary to convert<br />
the numbers between them from time to time. This is done with the use of a base<br />
converter (included in hex workshop). Let's say you wanted to give Sonic 50<br />
rings. If you enter 50 as the value, you will in fact end up with 80, because<br />
that value you are entering is actually a hex value, but if you use the base converter<br />
to convert it first, you merely enter the value of 50 into the decimal box, and<br />
it will spit out a hex value of 32, which will in fact give you 50 rings in the<br />
game. Another useful utility that you will need is a hex calculator (also<br />
included in hex workshop). A hex calculator is the same as a normal calculator,<br />
but it deals with hex values rather than decimal values.<br><br />
<br />
Another thing you need to know is that each level in Sonic 2 has a value assigned<br />
to it, but this value does not correspond with each level's final position in<br />
the game. Here is a list of the level values in Sonic 2 beta:<br />
{|align="center" border="1"<br />
|00||Emerald Hill zone<br />
|-<br />
|02||Wood zone<br />
|-<br />
|04||Metropolis zone<br />
|-<br />
|05||Metropolis zone act 3<br />
|-<br />
|07||Hill Top zone<br />
|-<br />
|08||Hidden Palace zone<br />
|-<br />
|0A||Oil Ocean zone<br />
|-<br />
|0B||Dust Hill zone<br />
|-<br />
|0C||Casino Night zone<br />
|-<br />
|0D||Chemical Plant zone<br />
|-<br />
|0E||Genocide City zone<br />
|-<br />
|0F||Neo Green Hill zone<br />
|-<br />
|10||Death Egg zone<br />
|}<br />
<br><br />
One other thing you need to know is the way that the Mega Drive stores all<br />
the art. All the art that is used in the game is stored in the form of 8x8<br />
pixel blocks. These blocks do not actually store colours at all, they actually<br />
only have one hex value per pixel. That value specifies what point on the palette<br />
line the pixel will get its colour from. The palette has 4 lines, each with 16 colours<br />
on them. Now the colours on the palette can be changed at any point during<br />
play, and some palette colours may even automatically change colour each couple<br />
of frames to make it look like the colour is flashing. <br><br />
<br />
Now these 8x8 blocks are not what make up the level directly. 4 8x8 blocks<br />
are grouped together to form a 16x16 block, and it is at this point that the palette<br />
line to use for that 16x16 block is specified. The 8x8 patterns can also have their<br />
x, y, or x and y values reversed when placing them in a 16x16 block. Also it's<br />
at the 16x16 level that the collision definitions are specified. Now finally we<br />
get to a 128x128 block, and these are the things that the actual level info<br />
loads. It is made up of 64 16x16 blocks, and each block inside them can use a<br />
different palette line. You cannot place anything except a sprite or a 128x128<br />
block directly into a level.<P><br><br />
<br />
Now that you know all the basics, here's my breakdown:<br><br />
<br />
==Address listing==<br />
For the most part, there are no breaks in this list. If one address follows on<br />
directly from another on this list, it does so in the rom, with the exception <br />
of data that comes before 20000. All the compiled code that is used in the game <br />
is stored in this section, and that's a pain in the ass to sort through, so there <br />
will be many breaks there. The column on the left lists it's file location, the column in the middle<br />
contains it's name and description, and the column on the right will contain<br />
any special notes about it, such as compression format used if applicable, and<br />
number of blocks an art tile uses. The right column will also contain a link<br />
with the text further info, if that particular block requires it. That link<br />
will jump to a detailed explanation of that thing. Anything linked like that<br />
will also be listed in the contents at the top of the page.<br><br />
<br />
To indicate sections containing leftover data from previous builds, a colour<br />
coding system is in place. The address value for a block of data will be coloured<br />
if that block of data is from a previous build. Different colours are used to indicate<br />
layering of this data. Red is the first layer, green is the second, blue is the <br />
third, yellow is the fourth, and pink is the fifth. This is not to indicate the build <br />
that a block of data belongs to, so it doesn't mean that all lost data that's coloured <br />
in red is from the same build. In many cases, it's impossible to relate any two blocks <br />
of data from different sections to each other.<br><br />
<br />
Also, any patterns that are not used anywhere in the game will be preceeded by this red <br />
dot [[image:Reddot.gif]]. Patterns located in sections of lost data will not be <br />
marked in this way however.<br><br />
{|border="1"<br />
|0-FF||Vector table||<br />
|-<br />
|100-200||Header||<br />
|-<br />
|15FA-????||Programming to do wih decompression of art tiles to VRAM||Compiled<br />
|-<br />
|5E8-B07||Standard numbers/symbols||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2264-24A1||Unknown palettes||[[#Palettes|Further info]]<br />
|-<br />
|2516-2595||Unknown palette||[[#Palettes|Further info]]<br />
|-<br />
|28A6-28E1||Unknown palette||[[#Palettes|Further info]]<br />
|-<br />
|294E-2A15||Palette pointers||[[#Palettes|Further info]]<br />
|-<br />
|2A16||SEGA screen palette (00)||[[#Palettes|Further info]]<br />
|-<br />
|2A96||Title screen palette (01)||[[#Palettes|Further info]]<br />
|-<br />
|2B16||Level select palette (02)||[[#Palettes|Further info]]<br />
|-<br />
|2B96||Primary palette line (03)||[[#Palettes|Further info]]<br />
|-<br />
|2BB6||EHZ level palette (04, 05, 07, 0D, 12, 14)||[[#Palettess|Further info]]<br />
|-<br />
|2C16||WZ level palette (06)||[[#Palettes|Further info]]<br />
|-<br />
|2C76||MTZ level palette (08, 09)||[[#Palettes|Further info]]<br />
|-<br />
|2CD6||HTZ level palette (0B)||[[#Palettes|Further info]]<br />
|-<br />
|2D36||HPZ level palette (0C)||[[#Palettes|Further info]]<br />
|-<br />
|2D96||HPZ underwater palette (15)||[[#Palettes|Further info]]<br />
|-<br />
|2E16||OOZ level palette (0E)||[[#Palettes|Further info]]<br />
|-<br />
|2E76||MCZ level palette (0F)||[[#Palettes|Further info]]<br />
|-<br />
|2ED6||CNZ level palette (10)||[[#Palettes|Further info]]<br />
|-<br />
|2F36||06 level palette (0A)||[[#Palettes|Further info]]<br />
|-<br />
|2F96||CPZ level palette (11)||[[#Palettes|Further info]]<br />
|-<br />
|2FF6||CPZ underwater palette (15)||[[#Palettes|Further info]]<br />
|-<br />
|3076||ARZ level palette (13)||[[#Palettes|Further info]]<br />
|-<br />
|30D6||ARZ underwater palette (16)||[[#Palettes|Further info]]<br />
|-<br />
|3156||Sonic 1 special stage palette (17)||[[#Palettes|Further info]]<br />
|-<br />
|3AD4-3B07||Level select level order||[[#Level_order|Further info]]<br />
|-<br />
|4140-4150||Music playlist for levels||[[#Music_playlist_for_levels|Further info]]<br />
|-<br />
|4AAA-4ADB||Function to load collision index into ram||Compiled<br />
|-<br />
|4ADC-4B63||Pointers to collision indexes||[[#Collision_definitions|Further info]]<br />
|-<br />
|5986-5A95||Level size array||[[#Level_size_array|Further info]]<br />
|-<br />
|5A96-5B01||Code for initial character and screen placement||Compiled<br />
|-<br />
|5B02-5B89||Character start location array||[[#Character_start_location_array|Further info]]<br />
|-<br />
|5E16-5E37||Offset index of rasterised layer deformation||[[#Offset_indexes|Further info]]<br />
|-<br />
|5E38||Title screen layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|5E5C||EHZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|5F60||EHZ 2 player splitscreen layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6098||WZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|60D0||MTZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6108||HTZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6236||Unknown layer deformation info (foreground free moving, background fixed)||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|62B4||Unknown layer deformation info (splitscreen, background fixed vertically, no deformation)||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6344||HPZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|640A||OOZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6442||MCZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6554||Unknown layer deformation info (splitscreen, background fixed horizontally, no deformation)||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|67AE||CNZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|67F2||Unknown layer deformation info (splitscreen, background fixed vertically, no deformation)||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|687C||CPZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6982||ARZ layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|6A70||01, 03, 06, 09, 0E, 10 layer deformation info||[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|7FDC||Bridge (sprite)||<br />
|-<br />
|85F8||??????? (sprite)||<br />
|-<br />
|8B9C||??????? (sprite)||<br />
|-<br />
|8D38||Fixed large platform from CPZ (sprite)||<br />
|-<br />
|9128||Collapsing platform from OOZ (sprite)||<br />
|-<br />
|9274||Breakaway platform made up of small blocks from MZ in S1 (sprite)||<br />
|-<br />
|999C||??????? (sprite)||<br />
|-<br />
|9A54||??????? (sprite)||<br />
|-<br />
|9C0C||??????? (sprite)||<br />
|-<br />
|9CE2||??????? (sprite)||<br />
|-<br />
|A012||??????? (sprite)||<br />
|-<br />
|A086||Explosion giving off 100 points and an animal (sprite)||<br />
|-<br />
|A11E||Red explosion (sprite)||<br />
|-<br />
|A2B0||??????? (sprite)||<br />
|-<br />
|A7C0||100 points (sprite)||<br />
|-<br />
|AC28||??????? (sprite)||<br />
|-<br />
|AD62||Ring spray (sprite)||<br />
|-<br />
|B29C||??????? (sprite)||<br />
|-<br />
|B46A||Contents of computer monitor flying up (sprite)||<br />
|-<br />
|B7B4||??????? (sprite)||<br />
|-<br />
|B83A||??????? (sprite)||<br />
|-<br />
|BB54||??????? (sprite)||<br />
|-<br />
|BD76||Game over text (sprite)||<br />
|-<br />
|BE38||??????? (sprite)||<br />
|-<br />
|BF9A-BFDD||Main game level order||[[#Level_order|Further info]]<br />
|-<br />
|C944||Spikes (sprite)||<br />
|-<br />
|CD00||Unknown (a block)||<br />
|-<br />
|CD7C||??????? (sprite)||<br />
|-<br />
|D01A-D249||Sprite programming pointers||[[#Sprite_programming|Further info]]<br />
|-<br />
|D24A||??????? (sprite)||<br />
|-<br />
|E7B8||Horizontal red spring (sprite)||<br />
|-<br />
|F10C||??????? (sprite)||<br />
|-<br />
|F1F4||Signpost (sprite)||<br />
|-<br />
|FC48||Sonic (sprite)||<br />
|-<br />
|10E38||Tails (sprite)||<br />
|-<br />
|11F96||??????? (sprite)||<br />
|-<br />
|1207C||??????? (sprite)||<br />
|-<br />
|125CE||??????? (sprite)||<br />
|-<br />
|1264E||??????? (sprite)||<br />
|-<br />
|12B42||??????? (sprite)||<br />
|-<br />
|13B54||Starpoll (sprite)||<br />
|-<br />
|13DFC||??????? (sprite)||<br />
|-<br />
|144B0||??????? (sprite)||<br />
|-<br />
|148AC||??????? (sprite)||<br />
|-<br />
|149FC||??????? (sprite)||<br />
|-<br />
|14AFC||??????? (sprite)||<br />
|-<br />
|14B78||??????? (sprite)||<br />
|-<br />
|15090||??????? (sprite)||<br />
|-<br />
|15352||??????? (sprite)||<br />
|-<br />
|155A0||??????? (sprite)||<br />
|-<br />
|1561A||??????? (sprite)||<br />
|-<br />
|1572C||??????? (sprite)||<br />
|-<br />
|15B8C||See-saw (sprite)||<br />
|-<br />
|1600C||Diagnally moving and falling platform from HTZ (sprite)||<br />
|-<br />
|1621C||Large platform from CPZ moving from side to side (sprite)||<br />
|-<br />
|16468||Boosters from CPZ (sprite)||<br />
|-<br />
|165B0||??????? (sprite)||<br />
|-<br />
|16724||Spin-tube from CPZ (sprite)||<br />
|-<br />
|17174||??????? (sprite)||<br />
|-<br />
|1747C||??????? (sprite)||<br />
|-<br />
|1768A||Cap on top of spin tubes in CPZ (sprite)||<br />
|-<br />
|17A4C||??????? (sprite)||<br />
|-<br />
|17CA0||Platform on top of oil burners from OOZ (sprite)||<br />
|-<br />
|17F0C||Spikeball from OOZ (sprite)||<br />
|-<br />
|180D0||??????? (sprite)||<br />
|-<br />
|181A0||Weird spring that you push back on from OOZ (sprite)||<br />
|-<br />
|18ABE||Ball on weird spring from OOZ (sprite)||<br />
|-<br />
|18D9C||Button (sprite)||<br />
|-<br />
|18E78||Block that propells sonic when he busts it from OOZ (sprite)||<br />
|-<br />
|19250||Spinball that shoots character out 90 degrees from entry from OOZ (sprite)||<br />
|-<br />
|19660||Arrow shooter from ARZ (sprite)||<br />
|-<br />
|19850||Piller that drops lower half in ARZ (sprite)||<br />
|-<br />
|19A1E||Raising pillar from ARZ (sprite)||<br />
|-<br />
|1A0C4||??????? (sprite)||<br />
|-<br />
|1A30C||Weird spring from ARZ and CPZ (sprite)||<br />
|-<br />
|1A5CC||Steam vent from MTZ (sprite)||<br />
|-<br />
|1A8B4||??????? (sprite)||<br />
|-<br />
|1AA74||??????? (sprite)||<br />
|-<br />
|1AEBC||??????? (sprite)||<br />
|-<br />
|1B0C4||Warp tube from MTZ (sprite)||<br />
|-<br />
|1B520||Block in MTZ with a spike coming out each side sequentially (sprite)||<br />
|-<br />
|1B810||Nut that character moves by running on in MTZ (sprite)||<br />
|-<br />
|1BA30||??????? (sprite)||<br />
|-<br />
|1BCEC||??????? (sprite)||<br />
|-<br />
|1BF6C||??????? (sprite)||<br />
|-<br />
|1B720||Floor spike in MTZ (sprite)||<br />
|-<br />
|1C2E4||Platform moving in circle (sprite)||<br />
|-<br />
|1C4F8||Diagnally moving platform from MTZ (sprite)||<br />
|-<br />
|1C850||??????? (sprite)||<br />
|-<br />
|1CBCC||??????? (sprite)||<br />
|-<br />
|1CC54||??????? (sprite)||<br />
|-<br />
|1CE48||??????? (sprite)||<br />
|-<br />
|1D078||Moving spikey arm from MCZ (sprite)||<br />
|-<br />
|1D208||??????? (sprite)||<br />
|-<br />
|1D3C0||Lowering stairs from CPZ (sprite)||<br />
|-<br />
|1D594||??????? (sprite)||<br />
|-<br />
|1D74C||Spring on spin tube cap from CPZ (sprite)||<br />
|-<br />
|1D984||Driving badnick from EHZ (sprite)||<br />
|-<br />
|1DC54||??????? (sprite)||<br />
|-<br />
|1DEAC||Bubble enemy (sprite)||<br />
|-<br />
|1E010||??????? (sprite)||<br />
|-<br />
|1E62C||??????? (sprite)||<br />
|-<br />
|1E89C||Buzz bomber (sprite)||<br />
|-<br />
|1EBB8||Octopus badnick from OOZ (sprite)||<br />
|-<br />
|1EE68||Bat (sprite)||<br />
|-<br />
|1F2F0||Alligator (sprite)||<br />
|-<br />
|1F5E8||Jumping fish from EHZ (sprite)||<br />
|-<br />
|1F6E8||??????? (sprite)||<br />
|-<br />
|1F99C||??????? (sprite)||<br />
|-<br />
|1FC0A||??????? (sprite)||<br />
|-<br />
|2030C||??????? (sprite)||<br />
|-<br />
|205A6||??????? (sprite)||<br />
|-<br />
|20740||??????? (sprite)||<br />
|-<br />
|20E5C||??????? (sprite)||<br />
|-<br />
|21D40||??????? (sprite)||<br />
|-<br />
|223E2||??????? (sprite)||<br />
|-<br />
|22408||Offset index of animated pattern and dynamic pattern load cue's||Double offset<br>[[#Offset_indexes|Further info]]<br />
|-<br />
|2244C||01/WZ/03/06/09/MCZ/CNZ/GCZ/DEZ dynamic pattern load cue||[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|2244E||HTZ dynamic pattern load cue||[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|22630||EHZ/HPZ/MTZ/OOZ/CPZ/ARZ dynamic pattern load cue||[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|22698||EHZ animated pattern load cue (4)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|226FC||MTZ animated pattern load cue (5)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|22754||HTZ animated pattern load cue (4)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|227B8||HPZ animated pattern load cue (2)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|227E4||OOZ animated pattern load cue (4)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|2282A||CPZ animated pattern load cue (0)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|22866||01/WZ/03/06/09/MCZ/CNZ/GCZ/DEZ animated pattern load cue (empty)||[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|229A2||Offset index of misc sprite definitions||[[#Offset_indexes|Further info]]<br />
|-<br />
|229C4||EHZ/HTZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22A40||MTZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22B14||HPZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22C08||OOZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22C6C||CNZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22D10||CPZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22D1C||ARZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22D60||01/WZ/03/06/09/MCZ/GCZ/DEZ misc sprite definitions||[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|22DFC||Onscreen display (lives/score/time/rings) (sprite)||<br />
|-<br />
|23448-23B67||Large and small numbers used in game||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|23DBE||Offset index of object debug lists||[[#Offset_indexes|Further info]]<br />
|-<br />
|23DE0||01/WZ/03/06/09/GCZ/DEZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|23DF2||EHZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|23ECC||MTZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|23FAE||HTZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|24078||HPZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|240F2||OOZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|24194||MCZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|24216||CNZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|24228||CPZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|242C2||ARZ object debug list||[[#Object_debug_list|Further info]]<br />
|-<br />
|24354||Indexed main level load block||[[#Main_level_load_block|Further info]]<br />
|-<br />
|24420||Offset index of pattern load cue's||[[#Offset_indexes|Further info]]<br />
|-<br />
|2447A||Pattern load cue's||[[#Pattern_load_cue's|Further info]]<br />
|-<br />
|<font color=red>24804||Lost pattern load cue's from previous compilation||[[#lost_Pattern_load_cue's|Further info]]<br />
|-<br />
|<font color=red>24A30||Leftover data from previous build||<br />
|-<br />
|28000||Animated cone shaped flower from EHZ and HTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|28080||Animated bubble like flower from EHZ and HTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|28100||Animated stringy flower from EHZ and HTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|28180||Animated leafy flower from EHZ and HTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|28200||Animated pulsing thing against checkered background in EHZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|28300||Hills in background from HTZ||Art compression<br>192 blocks<br />
|-<br />
|28C2A||Clouds in background of HTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2902A||Spinning metal cylinder from MTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2A02A||Lava patterns from EHZ and MTZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2A62A||Animated section of MTZ background||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2A86A||Horizontal and vertical rotating screw||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2B06A||Weird peice of alpha HPZ background||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2B46A||Giant pulsing ball in HPZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2B76A||Tiny pulsing ball in OOZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2B94A||Square rotating around ball in OOZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2BD4A||Oil in OOZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2CCEA||Animated background section from CPZ and DEZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2CEEA||Waterfall patterns from ARZ||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|2D1EA||Curve and resistance mapping||[[#Collision_definitions|Further info]]<br />
|-<br />
|2D2EA||Collision array||[[#Collision_definitions|Further info]]<br />
|-<br />
|2F2EA||EHZ and HTZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|2F5EA||EHZ and HTZ secondary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|2F8EA||WZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|2FBEA||MTZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|2FEEA||HPZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|301EA||HPZ secondary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|304EA||OOZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|307EA||DHZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|30AEA||CNZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|30DEA||CNZ secondary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|310EA||CPZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|313EA||CPZ secondary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|316EA||ARZ primary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|319EA||ARZ secondary 16x16 collision index||[[#Collision_definitions|Further info]]<br />
|-<br />
|31CEA-3334D||????????? (something to do with special stage)||<br />
|-<br />
|3334E||Level layout offset index||Unique offset<br>[[#Level_layout|Further info]]<br />
|-<br />
|333D6||EHZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|33BD8||EHZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|343DA||EHZ act 1/2 background||[[#Level_layout|Further info]]<br />
|-<br />
|343E4||01 act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|343E8||WZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|34BEA||WZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|353EC||WZ act 1 background||[[#Level_layout|Further info]]<br />
|-<br />
|35BEE||WZ act 2 background||[[#Level_layout|Further info]]<br />
|-<br />
|363F0||03 act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|363F4||MTZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|36BF6||MTZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|373F8||MTZ act 1/2/3 background||[[#Level_layout|Further info]]<br />
|-<br />
|3741E||MTZ act 3 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|37C20||06 act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|37C24||HTZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|38426||HTZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|38C28||HTZ act 1 background||[[#Level_layout|Further info]]<br />
|-<br />
|3942A||HTZ act 2 background||[[#Level_layout|Further info]]<br />
|-<br />
|39C2C||HPZ act 1/2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3A42E||HPZ act 1/2 background||[[#Level_layout|Further info]]<br />
|-<br />
|3A478||09 act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|3A47C||OOZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3AC7E||OOZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3B480||OOZ act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|3B49A||DHZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3BC9C||DHZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3C49E||DHZ act 1/2 background||[[#Level_layout|Further info]]<br />
|-<br />
|3C4B0||CNZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3CCB2||CNZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3D4B4||CNZ act 1 background||[[#Level_layout|Further info]]<br />
|-<br />
|3DCB6||CNZ act 2 background||[[#Level_layout|Further info]]<br />
|-<br />
|3DCC0||CPZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3E4C2||CPZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3ECC4||CPZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3ECF0||GCZ act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|3ECF4||ARZ act 1 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3F4F6||ARZ act 2 foreground||[[#Level_layout|Further info]]<br />
|-<br />
|3FCF8||ARZ act 1 background||[[#Level_layout|Further info]]<br />
|-<br />
|404FA||ARZ act 2 background||[[#Level_layout|Further info]]<br />
|-<br />
|40CFC||DEZ act 1/2 foreground/background||[[#Level_layout|Further info]]<br />
|-<br />
|40D00||Giant golden ring||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|<font color=red>41940||Blank space||<br />
|-<br />
|<font color=red>42B7A||Giant golden ring... again (uncompressed)||<br />
|-<br />
|<font color=green>437BC||Very end of palette||<br />
|-<br />
|<font color=green>437C6||??????????||<br />
|-<br />
|44000||Offset index of sprite locations||[[#Offset_indexes|Further info]]<br />
|-<br />
|4404A||EHZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|442C6||EHZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|445C0||MTZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|4488A||MTZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|44B30||MTZ act 3 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|44EFC||HTZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|45130||HTZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|4554A||HPZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|45652||HPZ act 2 sprite locations (empty)||[[#Sprite_placement|Further info]]<br />
|-<br />
|45658||Unknown (empty)||[[#Sprite_placement|Further info]]<br />
|-<br />
|4565E||OOZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|457C0||OOZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|459AC||DHZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|45A24||DHZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|45A2A||CPZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|45CC4||CPZ act 2 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|4605A||ARZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|46216||ARZ act 1 sprite locations||[[#Sprite_placement|Further info]]<br />
|-<br />
|46348||01, WZ, 03, 06, 09, CNZ, GCZ, DEZ sprite locations (empty)||[[#Sprite_placement|Further info]]<br />
|-<br />
|<font color=red>4634E||??????????||<br />
|-<br />
|<font color=red>474AC||Lost palette||<br />
|-<br />
|<font color=red>4760C||??????????||<br />
|-<br />
|48000||Offset index of ring locations||[[#Offset_indexes|Further info]]<br />
|-<br />
|48044||EHZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|481DE||EHZ act 2 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|483DC||01 act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483DE||01 act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483E0||WZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483E2||WZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483E4||03 act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483E6||03 act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483E8||MTZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483EA||MTZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483EC||MTZ act 3 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483EE||MTZ act 4 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483F0||06 act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483F2||06 act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|483F4||HTZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|484EA||HTZ act 2 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48654||HPZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|487C6||HPZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|487C8||09 act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|487CA||09 act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|487CC||OOZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|4889E||OOZ act 2 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48968||DHZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|4896A||DHZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|4896C||CNZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|4896E||CNZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|48970||CPZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48A3E||CPZ act 2 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48B94||GCZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|48B96||GCZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|48B98||ARZ act 1 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48C76||ARZ act 2 ring locations||[[#Ring_placement|Further info]]<br />
|-<br />
|48DB0||DEZ act 1 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|48DB2||DEZ act 2 ring locations (empty)||[[#Ring_placement|Further info]]<br />
|-<br />
|<font color=red>48DB4||??????????||<br />
|-<br />
|<font color=red>4B76C||Rock splashing into liquid (uncompressed)||<br />
|-<br />
|<font color=red>4BAAC||Lost palette||<br />
|-<br />
|<font color=red>4BC4C||??????????||<br />
|-<br />
|<font color=red>4E54A||Grains of sand falling (uncompressed)||<br />
|-<br />
|<font color=red>4E86A||Fire in bowl against stone background (uncompressed)||<br />
|-<br />
|<font color=red>4EC6A||Data block acting as seperator||<br />
|-<br />
|<font color=red>4EE00||?????????? (uncompressed data blocks with massive repetition)||<br />
|-<br />
|<font color=red>4FB98||Data block acting as seperator||<br />
|-<br />
|50000||Patterns for Sonic||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|614C0||Unknown offset index||[[#Offset_indexes|Further info]]<br />
|-<br />
|6160E||Unknown (Something to do with mappings for Sonic)||[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|62598||Patterns for Tails||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|6DA4C||Unknown offset index||[[#Offset_indexes|Further info]]<br />
|-<br />
|6DB9A||Unknown (Something to do with mappings for Sonic)||[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|6DF8E||Patterns for bubble||Art compression<br>32 blocks<br />
|-<br />
|6E114||Stars from invincibility||Art compression<br>00, 34 blocks<br />
|-<br />
|6E1F6||Patterns for smoke trails, dust, and splash in water||Uncompressed<br>[[#Uncompressed_art|Further info]]<br />
|-<br />
|6FB3C||Unknown offset index||[[#Offset_indexes|Further info]]<br />
|-<br />
|6FC46||Unknown (Something to do with mappings for Tails)||[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|7056E||Unknown offset index||[[#Offset_indexes|Further info]]<br />
|-<br />
|70678||Unknown (Something to do with mappings for Tails)||[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|70960||SEGA patterns||Art compression<br>125 blocks<br />
|-<br />
|71520||Title patterns||Art compression<br>396 blocks<br />
|-<br />
|72E82||Sonic patterns in title screen||Art compression<br>193 blocks<br />
|-<br />
|739C6||Fireballs from HTZ and WZ||Art compression<br>20 blocks<br />
|-<br />
|73B3C||Some waterfll tiles form WZ||Art compression<br>24 blocks<br />
|-<br />
|73C42||Another fireball from HTZ||Art compression<br>00, 16 blocks<br />
|-<br />
|73D90||Peices of bridge from EHZ||Art compression<br>00, 8 blocks<br />
|-<br />
|73E68||Flying fox system in HTZ||Art compression<br>48 blocks<br />
|-<br />
|7415C||One way barrier from HTZ||Art compression<br>4 blocks<br />
|-<br />
|741D4||See-saw from HTZ||Art compression<br>24 blocks<br />
|-<br />
|[[image:Reddot.gif]]7436C||Fireball||Art compression<br>18 blocks<br />
|-<br />
|7447A||Rock from HTZ||Art compression<br>20 blocks<br />
|-<br />
|745B0||badnick from HTZ with balls of flame spinning around him that he shoots at you||Art compression<br>4 blocks<br />
|-<br />
|7461C||Spinning grey wheel from MTZ||Art compression<br>120 blocks<br />
|-<br />
|74A74||A ball shaped thing from MTZ patterns||Art compression<br>9 blocks<br />
|-<br />
|74B1C||Spear block from MTZ||Art compression<br>00, 8 blocks<br />
|-<br />
|74BEA||Steam from MTZ||Art compression<br>00, 15 blocks<br />
|-<br />
|74CF4||Spike from MTZ||Art compression<br>00, 8 blocks<br />
|-<br />
|74DB6||Unknown. Some similar shaded blocks||Art compression<br>54 blocks<br />
|-<br />
|74E2C||Lava bubble from MTZ||Art compression<br>00, 9 blocks<br />
|-<br />
|74EE2||Something from MTZ patterns||Art compression<br>4 blocks<br />
|-<br />
|74F52||Unknown. A block of some kind.||Art compression<br>32 blocks<br />
|-<br />
|751FE||Stuff from MTZ||Art compression<br>8 blocks<br />
|-<br />
|752A0||Mini rotating cog from MTZ||Art compression<br>12 blocks<br />
|-<br />
|75382||Four blocks from MTZ tiles. All of the blocks are just one colour||Art compression<br>00, 04 blocks<br />
|-<br />
|7538E||Bridge from HPZ||Art compression<br>21 blocks<br />
|-<br />
|75506||Waterfall tiles for HPZ||Art compression<br>53 blocks<br />
|-<br />
|75868||The master emerald||Art compression<br>32 blocks<br />
|-<br />
|75ADA||Platform thing from HPZ||Art compression<br>16 blocks<br />
|-<br />
|75B9A||Pulsing light thing from HPZ||Art compression<br>34 blocks<br />
|-<br />
|75DD6||Another platform thing from HPZ and those green blocks||Art compression<br>22 blocks<br />
|-<br />
|75F70||Patterns from raising platform in OOZ||Art compression<br>12 blocks<br />
|-<br />
|76060||Spikeball thing from OOZ||Art compression<br>00, 32 blocks<br />
|-<br />
|76258||Patterns for stuff in OOZ||Art compression<br>6 blocks<br />
|-<br />
|762EE||Some striped patterns from OOZ||Art compression<br>4 blocks<br />
|-<br />
|7635A||Oil patterns from OOZ||Art compression<br>16 blocks<br />
|-<br />
|764D6||Some blocks of oil and stuff from OOZ||Art compression<br>14 blocks<br />
|-<br />
|76602||Unknown. Damn I wish I could make this out, because it looks quite interesting.||Art compression<br>20 blocks<br />
|-<br />
|76722||Unknown. Ditto.||Art compression<br>53 blocks<br />
|-<br />
|76A12||Unknown. Whatever they are, they look OOZ style.||Art compression<br>40 blocks<br />
|-<br />
|76CA6||Unknown. Also look OOZ in style.||Art compression<br>30 blocks<br />
|-<br />
|76E68||Swinging platform from OOZ||Art compression<br>28 blocks<br />
|-<br />
|7708A||Wooden box from MCZ||Art compression<br>32 blocks<br />
|-<br />
|772C8||Collapsing platform from MCZ||Art compression<br>00, 26 blocks<br />
|-<br />
|77472||Vines around switch you pull on from MCZ||Art compression<br>16 blocks<br />
|-<br />
|7756A||Vines from MCZ||Art compression<br>10 blocks<br />
|-<br />
|77614||A side on view of a log from WZ I suspect.||Art compression<br>00, 4 blocks<br />
|-<br />
|77684||Big moving platform in CPZ||Art compression<br>00, 16 blocks<br />
|-<br />
|777D2||Surface of water from HPZ and CPZ||Art compression<br>00, 24 blocks<br />
|-<br />
|77942||Unknown. It looks like a small cylinder kinda.||Art compression<br>00, 4 blocks<br />
|-<br />
|779AA||Blue ball for enemy in CPZ||Art compression<br>00, 4 blocks<br />
|-<br />
|77A1C||CPZ metal stuff||Art compression<br>33 blocks<br />
|-<br />
|77C26||Some blocks from CPZ||Art compression<br>4 blocks<br />
|-<br />
|77C66||Some diagnally striped blocks from CPZ||Art compression<br>8 blocks<br />
|-<br />
|77CD2||Little yellow moving platform from CPZ||Art compression<br>48 blocks<br />
|-<br />
|77EB4||Block from CPZ, but with something else as well.||Art compression<br>24 blocks<br />
|-<br />
|78074||Spring on top of pipe from CPZ, and something else further down.||Art compression<br>32 blocks<br />
|-<br />
|78270||Top of water from ARZ||Art compression<br>00, 16 blocks<br />
|-<br />
|78356||Leaves from ARZ||Art compression<br>00, 7 blocks<br />
|-<br />
|783E2||Arrow and arrow shooter from ARZ||Art compression<br>00, 17 blocks<br />
|-<br />
|78540||Splash from ARZ||Art compression<br>00, 4 blocks<br />
|-<br />
|78580||Button||Art compression<br>16 blocks<br />
|-<br />
|78658||Vertical red spring||Art compression<br>00, 20 blocks<br />
|-<br />
|78774||Horizontal red spring||Art compression<br>12 blocks<br />
|-<br />
|7883E||Diagonal spring||Art compression<br>32 blocks<br />
|-<br />
|78A12||Score, rings, time patterns||Art compression<br>24 blocks<br />
|-<br />
|78B1A||Sonic lives counter||Art compression<br>12 blocks<br />
|-<br />
|78C30||Ring patterns||Art compression<br>00, 14 blocks<br />
|-<br />
|78D24||Monitor patterns||Art compression<br>60 blocks<br />
|-<br />
|7914E||Spikes||Art compression<br>8 blocks<br />
|-<br />
|7919E||Numbers||Art compression<br>18 blocks<br />
|-<br />
|79278||Beta starpoll||Art compression<br>10 blocks<br />
|-<br />
|7931E||Signpost for end of level||Art compression<br>82 blocks<br />
|-<br />
|798F4||Weird spring from CPZ and ARZ||Art compression<br>00, 28 blocks<br />
|-<br />
|79A44||Long horizontal spike||Art compression<br>00, 8 blocks<br />
|-<br />
|79AC0||Bubbles and numbers that count down when underwater||Art compression<br>00, 116 blocks<br />
|-<br />
|[[image:Reddot.gif]]7A11A||Crocodile||Art compression<br>00, 44 blocks<br />
|-<br />
|7A4BC||Buzz bomber||Art compression<br>00, 28 blocks<br />
|-<br />
|7A6A2||Bat from HPZ||Art compression<br>00, 58 blocks<br />
|-<br />
|[[image:Reddot.gif]]7A9F8||Octopus from OOZ||Art compression<br>00, 58 blocks<br />
|-<br />
|[[image:Reddot.gif]]7AD18||Rhinobot||Art compression<br>00, 5 blocks<br />
|-<br />
|7B114||Dinobot||Art compression<br>00, 48 blocks<br />
|-<br />
|[[image:Reddot.gif]]7B4EA||Pirhana||Art compression<br>00, 64 blocks<br />
|-<br />
|[[image:Reddot.gif]]7B9E2||Seahorse from OOZ||Art compression<br>00, 62 blocks<br />
|-<br />
|[[image:Reddot.gif]]7BE30||Spinning ball thingy||Art compression<br>00, 27 blocks<br />
|-<br />
|[[image:Reddot.gif]]7C0C6||Blinky||Art compression<br>24 blocks<br />
|-<br />
|[[image:Reddot.gif]]7C2F2||Bubble monster||Art compression<br>00, 24 blocks<br />
|-<br />
|7C514||Ground based badnick from EHZ||Art compression<br>26 blocks<br />
|-<br />
|[[image:Reddot.gif]]7C710||Bouncer badnick from CNZ||Art compression<br>00, 42 blocks<br />
|-<br />
|7CA92||Fish badnick from EHZ||Art compression<br>22 blocks<br />
|-<br />
|7CC9E||Robotnic and his main ship||Art compression<br>96 blocks<br />
|-<br />
|[[image:Reddot.gif]]7D3DA||CPZ boss||Art compression<br>111 blocks<br />
|-<br />
|7D938||Some kind of large explosion||Art compression<br>00, 100 blocks<br />
|-<br />
|7DFC0||A small explosion||Art compression<br>00, 8 blocks<br />
|-<br />
|7E03E||Some kind of trailing smoke||Art compression<br>00, 16 blocks<br />
|-<br />
|7E124||EHZ boss||Art compression<br>128 blocks<br />
|-<br />
|7E910||Chopper blades for EHZ boss||Art compression<br>00, 20 blocks<br />
|-<br />
|7EA04||Title card patterns for levels||Art compression<br>128 blocks<br />
|-<br />
|7F012||Regular in level explosion||Art compression<br>96 blocks<br />
|-<br />
|7F678||Game/time over tiles||Art compression<br>34 blocks<br />
|-<br />
|[[image:Reddot.gif]]7F80A||Vertical spring from S1||Art compression<br>00, 16 blocks<br />
|-<br />
|[[image:Reddot.gif]]7F90C||Horizontal spring from S1||Art compression<br>14 blocks<br />
|-<br />
|[[image:Reddot.gif]]7F9E8||Flash from entering giant ring||Art compression<br>84 blocks<br />
|-<br />
|[[image:Reddot.gif]]7FB5C||Hidden end of level bonus points||Art compression<br>00, 36 blocks<br />
|-<br />
|[[image:Reddot.gif]]7FE5E||Patterns for continue screen from S1||Art compression<br>37 blocks<br />
|-<br />
|[[image:Reddot.gif]]8010E||Patterns for recieveing continue at end of special stage from S1||Art compression<br>30 blocks<br />
|-<br />
|80348||Rabbit||Art compression<br>00, 18 blocks<br />
|-<br />
|804A0||White bird||Art compression<br>14 blocks<br />
|-<br />
|805FC||Black bird||Art compression<br>00, 18 blocks<br />
|-<br />
|80778||Seal||Art compression<br>00, 14 blocks<br />
|-<br />
|80894||Pig||Art compression<br>18 blocks<br />
|-<br />
|809CA||Blue bird||Art compression<br>00, 14 blocks<br />
|-<br />
|80B04||Bear||Art compression<br>00, 18 blocks<br />
|-<br />
|80C60||16x16 block mappings for EHZ||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|81C00||EHZ/HTZ main level patterns||Art compression<br>912 blocks<br />
|-<br />
|84A50||16x16 block mappings for HTZ suppliment on EHZ tiles||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|85200||HTZ pattern suppliment to EHZ level patterns||Art compression<br>386 blocks<br />
|-<br />
|86626||Initial blocks for dynamically reloaded and animated patterns in HTZ||Art compression<br>46 blocks<br />
|-<br />
|8692E||EHZ/HTZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|89B8E||WZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|8AB2E||WZ main level patterns||Art compression<br>798 blocks<br />
|-<br />
|8E826||WZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|90456||MTZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|91716||MTZ main level patterns||Art compression<br>783 blocks<br />
|-<br />
|94C56||MTZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|97596||HPZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|98B76||HPZ main level patterns||Art compression<br>725 blocks<br />
|-<br />
|9B9F8||HPZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|9D778||OOZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|9ED58||OOZ main level patterns||Art compression<br>693 blocks<br />
|-<br />
|A1A58||OOZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A3F88||MCZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A5248||MCZ main level patterns||Art compression<br>936 blocks<br />
|-<br />
|A8B6A||MCZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|AB5CA||CNZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|ABF2A||CNZ main level patterns||Art compression<br>850 blocks<br />
|-<br />
|<font color=red>AE746||Leftover data from previous build||<br />
|-<br />
|AEF3C||Some blocks from CNZ||Art compression<br>22 blocks<br />
|-<br />
|AF026||CNZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B0F26||CPZ/DEZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B2506||CPZ/DEZ main level patterns||Art compression<br>858 blocks<br />
|-<br />
|B6058||CPZ/DEZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B8558||ARZ 16x16 block mappings||[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B9E58||ARZ main level patterns||Art compression<br>1002 blocks<br />
|-<br />
|BF408||Waterfall patterns||Art compression<br>00, 11 blocks<br />
|-<br />
|BF568||ARZ 128x128 block mappings||Compressed<br>[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|<font color=red>C2138||End of compressed ARZ 128x128 block mappings||[[#End_of_compressed_ARZ_128x128_block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>C2148||large chunk of CNZ 128x128 block mappings (uncompressed)||[[#large_chunk_of_CNZ_128x128_block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>C943C||CPZ 16x16 block mappings (Different to current beta)||[[#CPZ_patterns/block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>CAA1C||CPZ main level patterns (797 blocks) (Different to current beta)||[[#CPZ_patterns/block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>CE03A||CPZ 128x128 block mappings (uncompressed) (Different to current beta)||[[#CPZ_patterns/block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>D603A||ARZ 16x16 block mappings||<br />
|-<br />
|<font color=green>D793A||ARZ main level patterns (1002 blocks) (Identical to current beta)||<br />
|-<br />
|<font color=green>DCEEA||Waterfall patterns (00, 11 blocks)||<br />
|-<br />
|<font color=green>DD04A||ARZ 128x128 block mappings (uncompressed) (Different to current beta)||<br />
|-<br />
|<font color=blue>E504A||Incomplete part of ARZ main level patterns (Identical to current beta)||<br />
|-<br />
|<font color=blue>E57E6||Waterfall patterns (00, 11 blocks)||<br />
|-<br />
|<font color=blue>E5946||Compressed ARZ 128x128 block mappings||[[#Compressed_ARZ_128x128_block_mappings|Further info]]<br><br />
|-<br />
|<font color=green>E8000||Half of SEGA intro sound||[[#Half_of_SEGA_intro_sound|Further info]]<br><br />
|-<br />
|EC000-ECFFF||??????????||<br />
|-<br />
|ED000-EFFFF||?????????? (Something to do with music)||<br />
|-<br />
|F0000-F1E8B||?????????? (Something to do with music)||<br />
|-<br />
|F1E8C-F7FFF||SEGA intro sound||16000Hz mono<br>8-bit unsigned<br>PCM raw audio<br>[[#Sega_intro_sound|Further info]]<br />
|-<br />
|F8000-FEFFF||?????????? (Something to do with music)||<br />
|-<br />
|FF000-FFFFF||?????????? (Something to do with sound fx)||<br />
|}<br />
<br />
==Offset indexes==<br />
An offset index is a handy way of keeping a block of data grouped together, and<br />
also replacing a whole heap of pointers. The way it works is there is a list of <br />
two byte vaues, and depending on the block of data the game wants to load, it <br />
will take one of those values and add it to the starting address of the offset <br />
index. The most common usage is for every act of every level value, there is an <br />
offset that acts as the pointer to the block of data to use for it. Lets look at <br />
an example:<br><br />
<br />
E6800: 004A 037A 5552 5552 5552 5552 5552 5552 0734 0BC0 10EE 10EE 1748 1AFC<br><br />
<br />
Now this is the beginning of the offset index for the sprite locations. Now,<br />
can you see which values are the offset for MTZ act 2? They're 0BC0. All you<br />
had to do to get that was to take the level value for MTZ, which is 04, and<br />
count across four bytes for every value it is above 00, then across another two<br />
because it's the second act. Now we take that value and using a hex calculator,<br />
add it to the address of the offset table, which is E6800. That will give us a<br />
value of E73C0, which is the address in the rom of the MTZ act 2 sprite<br />
locations.<br><br />
<br />
Also notice those 5552 values in there? Well those are for the unused level<br />
values in the game. You'll see some damn weird values put in for them in many<br />
places, and that's what causes the game to lockup in the final build of sonic 2<br />
if you try and enter one of those levels.<br><br />
<br />
There are other forms of an offset index such as the one where there's just one <br />
offset per level value, and another type that actually uses a double offset index. <br />
The first is easy enough, but a double offset index will specify two values per <br />
level, but that's not for act one and two, but rather two blocks of data to use <br />
for both acts.<br><br />
<br />
==Main level load block==<br />
This pointer table is what is used to load up the block mappings and main level <br />
patterns for every level in the game. Here's a breakdown of the pointer table <br />
in the S2B rom:<br><br />
<blockquote><br />
24354-2441F: Indexed main level load block (patterns/16x16/128x128)<br><blockquote><br />
24354-2435F: Emerald Hill zone (00)<br><blockquote><br />
<br />
24354: EHZ/HTZ main level patterns (81C00) [04]<br><br />
24358: EHZ/HTZ 16x16 block mappings (80C60) [05]<br><br />
2435C: EHZ/HTZ 128x128 block mappings (8692E) [04]<br></blockquote><br />
24360-2436B: Unknown (01)<br><blockquote><br />
24360: EHZ/HTZ main level patterns (81C00) [06]<br><br />
24364: EHZ/HTZ 16x16 block mappings (80C60) [07]<br><br />
<br />
24368: EHZ/HTZ 128x128 block mappings (8692E) [05]<br></blockquote><br />
2436C-24377: Wood zone (02)<br><blockquote><br />
2436C: WZ main level patterns (8AB2E) [08]<br><br />
24370: WZ 16x16 block mappings (89B8E) [09]<br><br />
24374: WZ 128x128 block mappings (9E926) [06]<br></blockquote><br />
24378-24383: Unknown (03)<br><blockquote><br />
<br />
24378: EHZ/HTZ main level patterns (81C00) [0A]<br><br />
2437C: EHZ/HTZ 16x16 block mappings (80C60) [0B]<br><br />
24380: EHZ/HTZ 128x128 block mappings (8692E) [07]<br></blockquote><br />
24384-2438F: Metropolis zone (04)<br><blockquote><br />
42384: MTZ main level patterns (91716) [0C]<br><br />
42388: MTZ 16x16 block mappings (90456) [0D]<br><br />
<br />
4238C: MTZ 128x128 block mappings (94C56) [08]<br></blockquote><br />
24390-2439B: Metropolis zone act 3 (05)<br><blockquote><br />
24390: MTZ main level patterns (91716) [0C]<br><br />
24394: MTZ 16x16 block mappings (90456) [0D]<br><br />
24398: MTZ 128x128 block mappings (94C56) [08]<br></blockquote><br />
2439C-243A7: Unknown (06)<br><blockquote><br />
<br />
2439C: EHZ/HTZ main level patterns (81C00) [10]<br><br />
243A0: EHZ/HTZ 16x16 block mappings (80C60) [11]<br><br />
243A4: EHZ/HTZ 128x128 block mappings (8692E) [0A]<br></blockquote><br />
243A8-243B3: Hill Top zone (07)<br><blockquote><br />
243A8: EHZ/HTZ main level patterns (81C00) [12]<br><br />
243AC: EHZ/HTZ 16x16 block mappings (80C60) [13]<br><br />
<br />
243B0: EHZ/HTZ 128x128 block mappings (8692E) [0B]<br></blockquote><br />
243B4-243BF: Hidden Palace zone (08)<br><blockquote><br />
243B4: HPZ main level patterns (98B76) [14]<br><br />
243B8: HPZ 16x16 block mappings (97596) [15]<br><br />
243BC: HPZ 128x128 block mappings (9B9F8) [0C]<br></blockquote><br />
243C0-243CB: Unknown (09)<br><blockquote><br />
<br />
243C0: EHZ/HTZ main level patterns (81C00) [16]<br><br />
243C4: EHZ/HTZ 16x16 block mappings (80C60) [17]<br><br />
243C8: EHZ/HTZ 128x128 block mappings (8692E) [0D]<br></blockquote><br />
243CC-243D7: Oil Ocean zone (0A)<br><blockquote><br />
243CC: OOZ main level patterns (9ED58) [18]<br><br />
243D0: OOZ 16x16 block mappings (9D778) [19]<br><br />
<br />
243D4: OOZ 128x128 block mappings (A1A58) [0E]<br></blockquote><br />
243D8-243E3: Dust Hill zone (0B)<br><blockquote><br />
243D8: DHZ main level patterns (A5248) [1A]<br><br />
243DC: DHZ 16x16 block mappings (A3F88) [1B]<br><br />
243E0: DHZ 128x128 block mappings (A8B6A) [0F]<br></blockquote><br />
243E4-243EF: Casino Night zone (0C)<br><blockquote><br />
<br />
243E4: CNZ main level patterns (ABF2A) [1C]<br><br />
243E8: CNZ 16x16 block mappings (AB5CA) [1D]<br><br />
243EC: CNZ 128x128 block mappings (AF026) [10]<br></blockquote><br />
243F0-243FB: Chemical Plant zone (0D)<br><blockquote><br />
243F0: CPZ main level patterns (B2506) [1E]<br><br />
243F4: CPZ 16x16 block mappings (B0F26) [1F]<br><br />
<br />
243F8: CPZ 128x128 block mappings (B6058) [11]<br></blockquote><br />
243FC-24407: Genocide City zone (0E)<br><blockquote><br />
243FC: EHZ/HTZ main level patterns (81C00) [20]<br><br />
24400: EHZ/HTZ 16x16 block mappings (80C60) [21]<br><br />
24404: EHZ/HTZ 128x128 block mappings (8692E) [12]<br></blockquote><br />
24408-24413: Aquatic Ruin zone (0F)<br><blockquote><br />
<br />
24408: ARZ main level patterns (B9E58) [22]<br><br />
2440C: ARZ 16x16 block mappings (B8558) [23]<br><br />
24410: ARZ 128x128 block mappings (BF568) [13]<br></blockquote><br />
24414-2431F: Death Egg zone (10)<br><blockquote><br />
24414: EHZ/HTZ main level patterns (81C00) [24]<br><br />
24418: EHZ/HTZ 16x16 block mappings (80C60) [25]<br><br />
<br />
2441C: EHZ/HTZ 128x128 block mappings (8692E) [14]<br></blockquote><br />
</blockquote></blockquote><br />
<br />
Now as you can see, these pointers specify the loading addresses in the rom for the <br />
16x16 and 128x128 block mappings, as well as the main pattern block for that level. <br />
The main pattern block will always be loaded into the VRAM at address 0000. These <br />
loading addresses are all preceeded by a one byte value, so the address pointer only <br />
uses three bytes rather than the standard four. The value that proceeds the 128x128 <br />
block mappings specifies a value on the palette index to load for that level. For <br />
more information on the palette system, go <a href="#Palettes">here</a>. The values <br />
preceeding the main level pattern and 16x16 block mapping pointers give the index <br />
numbers of the pattern load cue's to use for that level. For more information on that <br />
go [[#Pattern_load_cue's|here]].<br><br />
<br />
==Pattern load cue's==<br />
The pattern load cue's are what loads all the peices of art into the VRAM that are <br />
not in the main level load block. Here's a breakdown of the pattern load cue's in<br />
the S2B rom:<br />
<br />
{|align=center border=1<br />
|00||2447A||Standard block 1 (starpoll/score\rings\time/lives/ring/numbers)||(4)<br />
|-<br />
|01||2449A||Standard block 2 (monitor/bubble/stars)||(2)<br />
|-<br />
|02||244AE||Unknown (explosion/rabbit/white bird)||(2)<br />
|-<br />
|03||244C2||Game\time over (game\time over text)||(0)<br />
|-<br />
|04||244CA||EHZ (EHZ\HTZ patterns/waterfall/bridge/fireball/spikes/D spring/V spring/H spring)||(7)<br />
|-<br />
|05||244FC||EHZ (buzz bomber/tire badnick/fish)||(2)<br />
|-<br />
|06||24510||WZ (WZ patterns)||(0)<br />
|-<br />
|07||24518||WZ (spikes/D spring/V spring/H spring)||(3)<br />
|-<br />
|08||24532||MTZ (MTZ patterns/4 blocks/wheel/ball/unknown/unknown/steam/spikeblock/spike)||(8)<br />
|-<br />
|09||2456A||MTZ (button/spikes/D spring/V spring/H spring/unknown/lava bubble/unknown/cog)||(8)<br />
|-<br />
|0A||245A2||HTZ (EHZ\HTZ patterns/HTZ patterns/fireball/rock/conveyor/orbit badnick/spikes/D spring/V spring/H spring)||(9)<br />
|-<br />
|0B||245E0||HTZ (unknown/fireball/HTZ barrier)||(2)<br />
|-<br />
|0C||245F4||HPZ (HPZ patterns/bridge/waterfall/platform/pulsing ball/HPZ stuff/master emerald/water)||(7)<br />
|-<br />
|0D||24626||HPZ (dinosaur badnick/bat/crocodile/buzz bomber/bat/rhinobot/dinosaur badnick/pirahna)||(1)[7]<br />
|-<br />
|0E||24658||OOZ (OOZ patterns/rising platform/spikeball/stuff/stuff/oil/oil)||(6)<br />
|-<br />
|0F||24684||OOZ (unknown/unknown/unknown/unknown/swinging platform/button/spikes/D spring/V spring/H spring/)||(9)<br />
|-<br />
|10||246C2||MCZ (MCZ patterns/box/collapsing platform/pullswitch/vines)||(4)<br />
|-<br />
|11||246E2||MCZ (H spike/spikes/log/lever spring/V spring/H spring)||(5)<br />
|-<br />
|12||24708||CNZ (CNZ patterns/stuff)||(1)<br />
|-<br />
|13||24716||CNZ (spikes/D spring/V spring/H spring)||(3)<br />
|-<br />
|14||24730||CPZ (CPZ patterns/stuff/striped blocks/unknown/big platform/small platform/spring stopper/water/unknown/stuff)||(9)<br />
|-<br />
|15||2476E||CPZ (bubbles\numbers/spikes/unknown/level spring/V spring/ H spring)||(5)<br />
|-<br />
|16||24794||ARZ (ARZ patterns/water/leaves/arrow shooter/splash)||(4)<br />
|-<br />
|17||247B4||ARZ (bubbles\numbers/spikes/lever spring/V spring/H spring)||(4)<br />
|-<br />
|18||247D4||Title card (title card patterns)||(0)<br />
|-<br />
|19||247DC||End of signpost level (signpost/hidden bonuses/unknown)||(0)[2]<br />
|-<br />
|1A||247F0||End of boss level (unknown boss/EHZ boss/unknown/unknown boss/unknown boss/small explosion/smoke trail/EHZ boss/unknown)||(2)[8]<br />
|}<br />
<br><br />
<br />
This pointer list has an offset index to locate the correct cue. Go <br />
[[#Offset indexes|here]] for an explanation of how this works. Note that the <br />
number in parenthesis is the recorded number of requests in the cue. If a number <br />
follows it in brackets, it means the actual number that exists differs from the <br />
recorded one. This means any load requests past the recorded number were not <br />
being loaded, but still exist in the rom. Now, each load cue has a two byte <br />
value before it that specifies how many addresses are in the cue, to avoid it <br />
reading too far, and going into the next cue. This value is dead simple, just <br />
enter the number of patterns on the cue in hex between the first two bytes, but <br />
you have to count 00 as 1, so if there was 16 loading addresses in the cue, you'd <br />
have 000F preceding it. After that, there are 6 bytes per load request. The first <br />
four bytes are a pointer to the art block to use, and the two bytes after that <br />
are the location in the VRAM to load them into. To change the pattern load cue's <br />
being loaded for a level, you need to change the values in the main level load <br />
block. For more information on that go [[#Main_level_load_block|here]].<br><br />
<br />
==Collision definitions==<br />
Ok, I’m going to explain how collision works on objects that are not sprites in<br />
the sonic games. First of all forget the image that the block contains. The<br />
image has absolutely nothing to do with the collision. There's basically in<br />
invisible collision box on top of every 16x16 block that sets what's solid and<br />
what's not. This collision box has two parts to it. The main part of it is the<br />
collision array (an array is basically a table of values). The collision array<br />
stores the actual data that says that is a block is solid in certain places. It<br />
does that through 16 bytes per collision box. To understand how those 16 bytes<br />
set what's solid, imagine a 16x16 block. Now imagine that 16x16 block with the<br />
numbers 1-10 (hex) down the side starting from the bottom and going up to the<br />
top, and starting from the left and going up as it moves right along the top,<br />
so that you can give an exact location of each pixel. (eg, the top left pixel<br />
would be 10,00) Now, in this array the first two bytes define what's solid for<br />
the row of pixels on the left side of that 16x16 block. Basically the first of<br />
those two bytes says where to start making things solid, and the second byte<br />
says where to stop making them solid. So if you entered the value 0010, the<br />
first row would be solid from the very bottom of the block all the way up to<br />
the top. If you were to enter the value 020E, there would be two pixels on<br />
either side of the block that are not solid, and everything in the middle would<br />
be. The next two bytes after that are for the next row, etc. After 16 bytes the<br />
definitions for the next collision box begin.<br><br />
<br />
Now, to specify which blocks use which collision boxes, there are collision<br />
indexes, which give an array location for each 16x16 block. If you look at the<br />
space used by the collision array, you can divide that by 16 (the number of<br />
bytes used by each entry into the array) to give a one byte value, which<br />
represents the maximum number of collision boxes that the array can hold in the<br />
S2 platform, which is FF. Now, for each level there is at least one 16x16<br />
collision index, and that index consists of a whole heap of array locations,<br />
one for each 16x16 block. If for example you wanted the 9th 16x16 block to use<br />
the collision box with an array location of 3E, you would give the 9th byte of<br />
the collision index for that level a value of 3E.<br><br />
<br />
It is through collision indexes that the loops work in the game. It's<br />
commonly believed that there are layers, and that the sprite represented by 4<br />
rings changes between them. This is partly true. For any levels that use<br />
multiple layers like that, there is a secondary 16x16 collision index. That<br />
object switches the 16x16 collision index in use. The pointers to these 16x16<br />
collision indexes are stored at 4ADC-4B63. The first set of pointers in this<br />
group specify the location of the primary collision index to use for each<br />
level, and the second set specify the location of the secondary collision index<br />
to use for each level.<br><br />
<br />
Now just setting something as solid, doesn't give it the effect of having a<br />
slope. There's an index in the rom, which has one byte in it for each collision<br />
array location. To understand how this value works, think of two lines running<br />
parallel to each other, both with the value 0-F along them. Now, the first<br />
value of the byte gives a point on the right line, and the second value gives a<br />
point on the left line. Now imagine drawing a line between these to points. If<br />
the points are different, the resulting gradient will be taken to create the<br />
effect of a slope and the resistance going up it on the box in the<br />
corresponding collision array location.<br><br />
<br />
==Level layout==<br />
The level layout in S2B is stored in the rom in a way similar to how the level <br />
layout is stored in the ram in S3&K. All the level data for a level is broken <br />
into two peices, one for the foreground of the level, and one for the background. <br />
When being read into the ram, this data is interleaved to give the entire level <br />
layout. The offset index that proceeds the actual level data is a unique offset <br />
index, and is similar to a double offset index. There are two offset values for each<br />
act. The first offset is linking to the data for the foreground for that act, and the <br />
second offset is linking to the background for that act. The level data itself <br />
is not compressed however, so you can just edit it directly. For information on <br />
how to edit it, check the savestate section.<br><br />
<br />
==Ring placement==<br />
The data for ring placement has an offset index to locate the correct group. Go<br />
[[#Offset_indexes|here]] for an explanation of how this works. Now, in the<br />
rom each ring does not have to be stored individually. Instead you can place<br />
one ring, and specify that a certain number of rings come after it. The<br />
definitions for one ring takes up 4 bytes in the rom. Let's look at an example:<br><br />
<br />
1234 5678<br><br />
Now, in this example the ring will be placed at an x location of 1234, and a y<br />
location of 678. With that value where the 5 was entered, if the value entered<br />
is below 8, an additional ring will be placed next to the one before it for<br />
every unit that the value entered is above 0. Entering a value above 8 will<br />
place an additional ring below the one before it for each unit that the value<br />
entered is above 8. When specifying a position as the start of a group of<br />
rings, if the group is horizontal, the rings will go across to the right of<br />
that point, and if the group is vertical the rings will go down from that<br />
point. The value FFFF closes the group of ring locations, and it is essential<br />
that this is at the end of the ring locations list, or else the game will keep<br />
on reading past that point until it hits that value.<br><br />
<br />
==Sprite placement==<br />
Sprites are quite simple to define. It takes six bytes to define one sprite.<br />
The first two bytes are the x location of the sprite, and the next two bytes<br />
are the y location of the sprite. The 5th byte is the number on the sprite<br />
array to lookup to get the location for the function to use for the programming<br />
of that sprite, and the 6th byte is an optional declaration to use with the<br />
function for that sprite. Go [[#Sprite_programming|here]] for more info on what<br />
exactly that means, and a list of all the sprites in the S2B rom.<br><br />
<br />
==Main level block mappings==<br />
In the S2B rom, the 128x128 block mappings are compressed, but the 16x16 block<br />
mappings are not. This means you can edit the 16x16 block mappings directly,<br />
but the 128x128 block mappings must be decomporessed to be edited effectively. <br />
At this point in time, there is no untility that is capable of compressing <br />
data into the format used by 128x128 block mappings, so the only thing that's <br />
really possible for now is porting the block mappings from one level to another. <br />
For information on what the block mappings do, and how to edit them, check the <br />
savestate section.<br><br />
<br />
==Uncompressed art==<br />
Any art that needs to be updated on the fly will not be compressed in the rom.<br />
This is because the game can't work with compressed data, and needs to extract<br />
any data it wants to use to the ram. This decompression process takes a fair<br />
bit of computation, and because of that it wouldn't be possible to create the<br />
appearance of a smooth animation using compressed data. The same reason is true<br />
as to why any data that is not loaded into the ram will always be uncompressed,<br />
because otherwise they would have to load it into the ram just to read it.<br><br />
<br />
Now, for example all of the blocks for Sonic and Tails are uncompressed, because<br />
they of course need to be updated quickly. You can use basically any editing<br />
utility to edit them, but you can only change what each block looks like<br />
through this. In order to edit what blocks are placed where in each of Sonic's<br />
animation frames, you need to edit the mappings for them, and for more<br />
information on that go [[#Mappings_for_Sonic/Tails|here]]. Now in their uncompressed form, you can edit them<br />
just like you would in the VRAM, so for more information on that check the<br />
sonic 2 savestate breakdown.<br><br />
<br />
==Mappings for Sonic/Tails==<br />
What the mappings do is they tell the game what patterns to display, and where<br />
to put them for each of the frames that the sprite has. The mappings for most<br />
sprites are contained within their function (go [[#Sprite_programming|here]] for<br />
more details), but with the Sonic and Tails sprites, to allow the programmers<br />
to add a new frame easily without having to recompile the function, and hence<br />
the whole game because of the size difference, they created a separate array<br />
containing the mapping data for each frame. I haven't examined this to see how<br />
it works yet, but when I do I’ll explain the format here.<br><br />
<br />
==Sega intro sound==<br />
The Sega intro sound is just an 16000HZ wav sound. Opening up the rom in any<br />
sound editing program that supports raw audio with the settings listed next to<br />
the location on the list will enable you to playback the sound effect. You<br />
could also insert your own sound in the same place as long as it's at the same<br />
bitrate. The bitrate is to do with the quality of the sound. The lower it is<br />
the crappier it will sound, because that's to do with how often the output is<br />
modified. Just think of the difference between long play and short play on a<br />
VCR. Stuff recorded in long play does save space, but the quality of the<br />
recording is worse.<br><br />
<br />
==Art compression format==<br />
The art compression format is a very dense compression format. It's only used<br />
for art because the format relies on the data being in blocks of 64 bytes. This<br />
format is used for all the compressed art in sonic 1 and sonic 2 beta, and all<br />
the compressed art except for the main level pattern blocks in Sonic 2 and<br />
S3&amp;K. As I said this format is very dense, and as such it requires a hell<br />
of a lot of computation to decompress. Because of this it also requires a hell<br />
of a lot of time and effort to crack. I've had a go at it, but the lightning<br />
has yet to strike. When I crack it I’ll post the format breakdown here, and<br />
create a simple program to decompress it, but until then it is impossible to<br />
directly edit any art using this format. The porting of a compressed block of<br />
art is simple though, so if you want to transfer beta art to the final, you can<br />
just tack it onto the end and enter the pointer into the pattern load cue of<br />
the level or event you want it to appear at, along with a VRAM location to load<br />
it into. Go [[#mpointers|Here]] for more information on that.<br><br />
<br />
==Dynamic pattern reloading==<br />
Dynamic pattern reloading is a method of loading patterns into the VRAM, but <br />
unlike the other methods, this one has no limitations, because it uses actual <br />
programmed code. Basically this is here for any effects to do with <br />
patterns changing in game that isn't posible using the normal load cue system, <br />
like the hills in the background of HTZ where the patterns to display are <br />
determined by the position of the screen Becuase the programming for it is in <br />
the form of compiled code, direct editing of it is not possible.<br><br />
<br />
==Animated pattern load cue's==<br />
Animated patterns require the art they are working with to be in an uncompressed <br />
form, so if you are attempting to make an animated pattern, make sure the art <br />
is uncompressed or it won't work. Now, the length of each load request on the <br />
cue varies depending on the animation. The first byte specifies a value that <br />
will determine how often to switch frames in the animation. If you use this <br />
value you will not be able to specify a frame as having a different duration to <br />
another. Setting this to FF will disable automatic frame control and allow the <br />
user to input a manual duration for each frame. This will mean that for every <br />
frame the user wants in the animation, they have to allow another byte at the <br />
end of the load request. If you want automatic pattern control, which <br />
you would use if you want all the animations frames to have the same duration. <br />
Just enter how many screen refreshes to wait until the next frame of the <br />
animation is displayed. Bytes 2,3, and 4 are the address in the rom to load the <br />
patterns from. Bytes 5 and 6 are the location in VRAM to load the patterns into. <br />
Byte 7 is the number of frames the animation has, and byte 8 is the number of <br />
spaces in VRAM to use for each frame. The function of the bytes beyond this <br />
point depend on whether or not automatic frame control is enabled, so refer to <br />
appropriate section below.<br><br />
<br />
With automatic frame control:<br><br />
One byte per frame of animation. This byte simply specifies the image to use for <br />
each frame of the animation. Based on the loading address entered, this value is <br />
the offset in 8x8 blocks to load each frame from in the rom. So if for example <br />
you were dealing with an animation that had 4 8x8 blocks per frame, and there <br />
were 4 frames of that, and you wanted it to display each frame one by one, you <br />
would enter the value 0004 080C.<br><br />
<br />
Without automatic frame control:<br><br />
Two bytes per frame of animation. The first byte is the offset of blocks in the <br />
file to load the animation frame from. This byte simply specifies the image to <br />
use for each frame of the animation. Based on the loading address entered, this <br />
value is the offset in 8x8 blocks to load each frame from in the rom. The second <br />
byte is the number of screen refreshes to keep that image loaded for, before <br />
going on to the next animation frame.<br><br />
<br />
==Misc sprite definitions==<br />
It looks like there are some sprites that get thier mappings and whatnot from <br />
this index, so they can reuse just a couple of sprites for some of the the <br />
miscellaneous objects in a level that the character doesn't actually interact <br />
with, but those objects can be completely different from one level to the next. <br />
A handy way of avioding programming each one individually, and thus saving a <br />
hell of a lot of space. As for how to edit them, well I haven't looked at that yet, <br />
but when I do i'll post an explination of the format here.<br><br />
<br />
==Rasterised layer deformation==<br />
Raster effects are simply effects to do with deformation of an image based on lines <br />
of pixels. In Sonic 2, these effects are used to create the movement effects for the <br />
backgrounds of all the levels, as well as the 2 player splitscreen effect. Because <br />
the programming for these effects are stored in the form of compiled code, you'll <br />
have to learn 68K ASM in order to edit them. Switching between levels is easy enough <br />
though, just change the corresponding value on the preceeding offset index to link <br />
to the effect you wish to use.<br><br />
<br />
==Palettes==<br />
All the main palettes used in the game are linked in a pointer table at 294E. In this<br />
pointer table there are 8 bytes per palette. The first four simply give a location in<br />
the rom for the data to load. The fifth and sixth bytes give the location in the <br />
system ram to load the data into, and the seventh and eighth bytes give the number of <br />
four byte blocks being loaded. Here's a palette pointer:<br><br />
<br />
0000 2942 FB20 0007<br><br />
<br />
Now in this case the palette is being loaded from 00002942 in the rom into the <br />
beginning of the second above water palette row (FB20), and it's loading 16 colours <br />
(0007). Here's a listing of the palette pointers in the S2B rom:<br><br />
<br />
{|align=center border=1<br />
|00||294E||SEGA screen palette (2A16)<br />
|-<br />
|01||2956||Title screen palette (2A96)<br />
|-<br />
|02||295E||Level select palette (2B16)<br />
|-<br />
|03||2966||Primary palette line (2B96)<br />
|-<br />
|04||296E||EHZ level palette (2BB6)<br />
|-<br />
|05||2976||01 level palette (2BB6)<br />
|-<br />
|06||297E||WZ level palette (2C16)<br />
|-<br />
|07||2986||03 level palette (2BB6)<br />
|-<br />
|08||298E||MTZ level palette (2C76)<br />
|-<br />
|09||2996||05 level palette (2C76)<br />
|-<br />
|0A||299E||06 level palette (2F36)<br />
|-<br />
|0B||29A6||HTZ level palette (2CD6)<br />
|-<br />
|0C||29AE||HPZ level palette (2D36)<br />
|-<br />
|0D||29B6||09 level palette (2BB6)<br />
|-<br />
|0E||29BE||OOZ level palette (2E16)<br />
|-<br />
|0F||29C6||MCZ level palette (2E76)<br />
|-<br />
|10||29CE||CNZ level palette (2ED6)<br />
|-<br />
|11||29D6||CPZ level palette (2F96)<br />
|-<br />
|12||29DE||GCZ level palette (2BB6)<br />
|-<br />
|13||29E6||ARZ level palette (3076)<br />
|-<br />
|14||29EE||DEZ level palette (2BB6)<br />
|-<br />
|15||29F6||HPZ underwater palette (2D96)<br />
|-<br />
|16||29FE||CPZ underwater palette (2FF6)<br />
|-<br />
|17||2A06||ARZ underwater palette (30D6)<br />
|-<br />
|18||2A0E||Sonic 1 special stage palette (3156)<br />
|}<br />
<br><br />
<br />
To change the palette being loaded for each level, you need to change the palette index <br />
number in the main level load block. For more information on that go <br />
[[#Main_level_load_block|here]]. The palettes themeslves are very easy to modify as they are <br />
all uncompressed in the rom. Refer to the savestate hacking documents for information <br />
on how to edit palettes.<br><br />
<br />
==Level size array==<br />
All the sizes of the levels are stored in a simple array, and can be easily modified to <br />
change the boundaries of the level. This array is located at 5986, and for each act<br />
there are four values. The first gives the X start location of the level, and the second<br />
gives the X end location of the level. Likewise the third value gives the Y start location<br />
of the level, and the fourth gives the Y end location of the level.<br><br />
<br />
==Character start location array==<br />
The start location for the characers and the camera for each level are stored in this array <br />
at address 5B02. It couldn't be any simpler to modify, there's just two values per act, the <br />
first being the X location, and the second being the Y location.<br><br />
<br />
==Music playlist for levels==<br />
This is actually part of a sub in the code, but it's editable all the same. Pretty simple, <br />
just one byte per level. That one byte is the value of the song you wish to play. You must<br />
enter the value in the form in which it is displayed in the beta version, which is with 80<br />
as the starting value, not 00 as it is displayed in the final. You'll notice with the value <br />
for death egg, it's 08 not 88, which is why there's no sound in the level.<br><br />
<br />
==Level order==<br />
There are several different sections in the game to do with the order of levels. The first <br />
one is the one that determins which level the game loads when someone finishes a level. The <br />
second one is the one which determins which level to load when you select a level from the <br />
level select menu. The level select one is easy to modify, just enter the level value <br />
followed by an act number for each of the levels you want to load, in the order you want <br />
them to be loaded. For a list of the level values for all the different stages, look at the <br />
beginning of the introduction to this page. Note that if you load the same level into the <br />
level order twice, when you link to it via the level select, it will continue the sequence <br />
from the last one in the list, not the first.<br><br />
<br />
The second system for which level to load when one ends works slightly differently. There<br />
is a list of values, with two bytes allocated to each act of each level. That two byte <br />
value is simply the value of the level you wish to load when that level ends. So, if you<br />
wanted ARZ act 1 to load up when you finish MTZ act 2, you would take the location of the<br />
table, which in this case is BF9A, and you would add 18 bytes to that location, and then <br />
you would replace the next two bytes from that point with 0F00. That's becuase you add four<br />
bytes to the address for every level that comes before it, and in this case there are 4, and<br />
then you would add another 2 bytes becuase you want to alter the level to load when you <br />
finish the second act.<br><br />
<br />
Also, note that when you want a level to be the last level in the game, you must enter the<br />
value FFFF as the stage to load when it finishes. This tells the game to end and return to <br />
the title screen.<br><br />
<br />
==Object debug list==<br />
This list is what determins what sprites you can place in debug mode, and in what levels. <br />
An offset index is used to locate which object debug list to use for which level, so if you <br />
want further info on that go <a href="#offset">here</a>. Now, there is a 2 byte value at the <br />
start of each debug list. That 2 byte value is simply the number of sprites in the list. <br />
After that there are 8 bytes per sprite. Here's an object that's present in an object debug <br />
list from sonic 2:<br><br />
<br />
<TABLE align=center border=1><br />
<TR><br />
<TD colSpan=2>2601</TD><br />
<TD colSpan=2>2D36</TD><br />
<TD colSpan=2>0800</TD><br />
<TD colSpan=2>0680</TD></TR><br />
<TR><br />
<TD><FONT color=red>1</FONT></TD><br />
<TD><FONT color=green>2</FONT></TD><br />
<TD><FONT color=green>3</FONT></TD><br />
<TD><FONT color=green>4</FONT></TD><br />
<TD><FONT color=blue>5</FONT></TD><br />
<TD><FONT color=yellow>6</FONT></TD><br />
<TD><FONT color=pink>7</FONT></TD><br />
<TD><FONT color=pink>8</FONT></TD></TR></TABLE><br><br><br />
<br />
And here's a quick referance sheet of what each byte does. For further info on each one, <br />
refer to information below.<br><br />
<br />
<TABLE align=center border=1><br />
<TR><br />
<TD><FONT color=red>1</FONT></TD><br />
<TD>Object number</TD></TR><br />
<TR><br />
<TD><FONT color=green>2-4</FONT></TD><br />
<TD>Sprite mappings</TD></TR><br />
<TR><br />
<TD><FONT color=blue>5</FONT></TD><br />
<TD>Declaration</TD></TR><br />
<TR><br />
<TD><FONT color=yellow>6</FONT></TD><br />
<TD>Frame to display</TD></TR><br />
<TR><br />
<TD><FONT color=pink>7 and 8</FONT></TD><br />
<TD>flip/mirror/palette/VRAM location</TD></TR></TABLE><br><br><br />
Object number:<br>This value is what determins which object to use. For a list of all the sprites in the game, check out the sprite programming section of this document here. In the case of the above example the object number is 26, which is a monitor.<br><br>Sprite mappings:<br>This is a pointer to the location in the rom to load the mappings for that sprite. This will be located in the programming for the sprite itself. Do not change this unless porting between levels, or you're absolutely sure you know what you're doing, or the game will most likely hang. This only affects the preview picture, not the placed object itself. In this case, the sprite mappings are being loaded from the address 012D36 in the rom.<br><br>Declaration:<br>This is the declaration for the loading of the sprite. For information on exactly what that is, go here. In this example the declaration is 08, which switches the type of monitor it is in the case of this sprite.<br><br>Frame to display:<br>This is simply the frame of the sprite that will be displayed on the preview picture before you place an object. Right now it's set to 00, which is the first frame.<br><br>Flip/mirror/VRAM location:<br>The first hex value of the 7th byte is to do with flipping and mirroring of the sprite, as well as the palette line to use for it. Refer to the following table for an explination of what responce each value will create.<br><br />
<br />
<TABLE align=center border=1><br />
<TR align=middle><br />
<TD>Value</TD><br />
<TD>palette line</TD><br />
<TD>flipped horizntally</TD><br />
<TD>flipped vertically</TD></TR><br />
<TR align=middle><br />
<TD>0</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>1</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>2</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>3</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>4</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>5</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>6</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>7</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>8</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>9</TD><br />
<TD>1</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>A</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>B</TD><br />
<TD>2</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>C</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>D</TD><br />
<TD>3</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>E</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>F</TD><br />
<TD>4</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR></TABLE><br><br />
<br />
In the case of our example, the value of 0 is used, so the preview image will use the first <br />
palette line, and will not be flipped or mirrored. <br><br />
<br />
The last hex value of the 7th byte, and all of the 8th byte in this block combine to give a <br />
starting location in the VRAM to find the patterns to use for that sprite when displaying <br />
the preview. This is not an actual location, but merely the number of blocks after which to <br />
load the patterns from. After the value of 800 is passed, the block number resets to zero <br />
but the image is mirrored. In this case, that block number is 680.<br><br />
<br />
And that's about it. I've just realised that this is a rediculous amount of detail for such <br />
a small thing, but at least you're sure to get it.<br><br />
<br />
==Leftover data from previous builds==<br />
All through the S2B rom, there are blocks of leftover data from earlier builds of the game. <br />
You see, when sonic team were working on the game, they would compile beta versions of the<br />
game onto flashcarts, for test purposes and distribution. Because the data was compiled directly<br />
onto the cart, any locations that didn't have to be written to retained the data they posessed <br />
before. On a final release cart, this simply would've resuled in blocks of data all contaning <br />
the value of FF, but in the case of this flashcart, data for earlier versions of the game had <br />
been written to these areas previously. Any areas of lost data that I have extra information <br />
about will be noted here.<br><br />
<br />
==End of compressed ARZ 128x128 block mappings==<br />
This small reminant of a rather recent build indicates a minor change in the above <br />
blocks of data, which resulted in a slightly shorter file size. This was most likely <br />
just a minor amendment to the block mappings for a level, resulting in them not <br />
compressing quite as well.<br><br />
<br />
==large chunk of CNZ 128x128 block mappings==<br />
This contains a large proportion of an earlier version of the CNZ 128x128 block <br />
mappings. The block of data is missing the first 3340 (D0C) bytes. From this <br />
we can see a massive chanage in CNZ between this compilation and the one in our <br />
beta. These block mappings have been changed so radically, that only a pattern <br />
in thier layout is recogniseable when compared to our current beta one. This <br />
indicates a massive restructuring in the order of the 16x16 block mappings of <br />
this build as well, but unfortunately that data was written over.<br><br />
<br />
==CPZ patterns/block mappings==<br />
These are the complete patterns and block mappings for an earlier version of CPZ. <br />
There are a few minor changes in the patterns, and some fairly major changes in the <br />
16x16 and 128x128 block mappings.<br><br />
<br />
==Compressed ARZ 128x128 block mappings==<br />
This lost data is in an uncompiled form, and at first I mistook it for code. Apart<br />
from the fact it is in this form, the data appears to be very close to that of our <br />
current beta. There is a commented line at the very start of the block, which contains<br />
further information about the block of compressed data. Thanks go out to Iceknight, <br />
who figured out that the text in this comment was in Kanji, and thanks go out to<br />
Kojichao and sth2k for translating it. The commented line reads:<br />
<blockquote><br />
Before compression $8000 After compression $2c00 Compression ratio 34.4% Cell number 1024<br />
</blockquote><br />
I had already guessed the purpose of the first three numbers, But I still can't figure <br />
out the puropse of the last one, or at least not one that would be worth putting in a <br />
comment. If anyone has any idea what the fourth number is used for, let me know.<br><br />
<br />
==lost Pattern load cue's==<br />
Due to changes in the structure of the rom, there are quite a few pattern load cue's<br />
left from previous compilations. In fact, in this one small area in the rom, I have <br />
identified six different layers of lost data from previous compilations, and these<br />
compilations seem to be a lot newer than the remains of level data judging by some <br />
of the link locations on the cue. Here's a breakdown of the lost pattern load cue's:<br><br />
<br />
{|align=center border=1<br />
|<font color=red>24804||End of boss level (unknown boss/unknown boss/small explosion/smoke trail/EHZ boss/unknown)||(?)[5]<br />
|-<br />
|<font color=green>24828||ARZ (lever spring/V spring/H spring)||(?)[1/2+1]<br />
|-<br />
|<font color=green>24838||Title card (title card patterns)||(0)<br />
|-<br />
|<font color=green>24840||End of signpost level (signpost/hidden bonuses/unknown)||(0)[2]<br />
|-<br />
|<font color=green>24854||End of boss level (unknown boss/EHZ boss/unknown/unknown boss/unknown boss/small explosion/smoke trail/EHZ boss/unknown/)||(2)[8]<br />
|-<br />
|<font color=blue>2488C||End of boss level (smoke trail/EHZ boss/unknown)||(?)[1/2+1]<br />
|-<br />
|<font color=yellow>2489C||MCZ (log/invalid pointer (7976C)/V spring/H spring)||(?)[3]<br />
|-<br />
|<font color=yellow>248B4||CNZ (invalid pointer (AB748)/invalid pointer (AE75A))||(1)<br />
|-<br />
|<font color=yellow>248C2||CNZ (spikes/D spring/V spring/H spring)||(3)<br />
|-<br />
|<font color=yellow>248DC||CPZ (invalid pointer (B1D24)/stuff/striped blocks/unknown/big platform/small platform/spring stopper/water/unknown/stuff)||(9)<br />
|-<br />
|<font color=yellow>2491A||CPZ (spikes/unknown/invalid pointer (7976C)/V spring/H spring)||(4)<br />
|-<br />
|<font color=yellow>2493A||ARZ (invalid pointer (B9686)/water/leaves/arrow shooter/splash)||(4)<br />
|-<br />
|<font color=yellow>2495A||ARZ (spikes/invalid pointer (7976C)/V spring/H spring)||(3)<br />
|-<br />
|<font color=yellow>24974||Title card (invalid pointer (7E222))||(0)<br />
|-<br />
|<font color=yellow>2497C||End of signpost level (signpost/invalid pointer (7F37A)/invalid pointer (7F206))||(2)<br />
|-<br />
|<font color=yellow>24990||End of boss level (invalid pointer (7C4BC)/invalid pointer (7D942)/invalid pointer (7E12E)/invalid pointer (7C4BC)/invalid pointer (7CBF8)/invalid pointer (7D7DE)/invalid pointer (7D85C)/invalid pointer (7D942)/invalid pointer (7E12E))||(2)[8]<br />
|-<br />
|<font color=pink>249C8||ARZ (invalid pointer (?AD00)/invalid pointer (7976C)/V spring/H spring)||(?)[1/2+2]<br />
|-<br />
|<font color=pink>249DC||Title card (invalid pointer (7E222))||(0)<br />
|-<br />
|<font color=pink>249E4||End of signpost level (signpost/invalid pointer (7F37A)/invalid pointer (7F206))||(2)<br />
|-<br />
|<font color=pink>249F8||End of boss level (invalid pointer (7C4BC)/invalid pointer (7D924)/invalid pointer (7E12E)/invalid pointer (7C4BC)/invalid pointer (7CBF8)/invalid pointer (7D7DE)/invalid pointer (7D85C)/invalid pointer (7D942)/invalid pointer (7E12E))||(2)[8]<br />
|}<br />
<br><br />
<br />
If you want more info on the pattern load cue's, go [[#Pattern_load_cue's|here]].<br />
From these load cue's we can see that there were some changes in the locations of <br />
some of the small blocks of compressed art, and that has resulted in some of the<br />
older pointers linking to the wrong data. The thing that I find most interesting <br />
about this deals with the load cue for the end of signpost level load cue. You'll <br />
notice with this cue that the last two load requests were cutoff in our beta, which <br />
link to those hidden bonues at the end of an act in Sonic 1, and more importantly, <br />
the flash effect from entering the giant golden ring, that leads to a special stage. <br />
The patterns for this ring are in the rom, but until I saw this I wasn't convinced <br />
that it was ever implemented in the game. Now, if you look at the cue that's colour <br />
coded yellow, you'll notice it isn't cutoff yet, but in the green compilation it <br />
has been, so somewhere between those two compilations, the ideas they were using <br />
for the method of entering the special stage, and the bonus points at the end of a <br />
level were changed. If you compare the link locations of the main level patterns <br />
for any of the levels in the yellow load cue's with the current link locations, <br />
and the lost block mappings and art there, it's clear that all these cue's are for <br />
compilations made after the compression methods for both 16x16 and 128x128 block <br />
mappings were put in place, which either means that those blocks of data with the <br />
block mappings and level patterns are from a much earlier compilation than I <br />
figured, or the ideas for the end of a level were changed just before the time of <br />
our beta.<br><br />
<br />
==Sprite programming==<br />
The programming for a sprite in the sonic games are stored as a function, and<br />
that function can take one declaration. People often confuse this declaration<br />
with a subtype value, but it's not really. What that basically means for the<br />
non programmers out there is that when the game places a sprite, you can enter<br />
a value along with the sprite number that may alter something about that<br />
sprite, but what it does varies depending on what sprite you're working with.<br />
Now because these functions are now compiled, the only way you can effectively<br />
edit them is to find the code for it and decompile it into assembly, alter it<br />
as necessary, and then recompile it and enter it back into the rom. This<br />
document will contain all the info necessary to enter a new sprite or replace<br />
an old one, but when it comes to the ASM you're on your own.<p> <br />
<br />
Now, the value assigned to a sprite in the game is done by a pointer index at <br />
D01A-D249. It’s pretty simple, just one pointer per address value. Here's the <br />
pointer list in Sonic 2 beta:<br><br />
<br />
{|width=100% border=1<br />
|01||Sonic [FC48]<br />
|-<br />
|02||Tails [10E38]<br />
|-<br />
|03||Collision index switcher [144B0]<br />
|-<br />
|04||??????? [15090]<br />
|-<br />
|05||Tails' tail [11F96]<br />
|-<br />
|06||Spiral loop in EHZ [1572C]<br />
|-<br />
|07||??????? [180D0]<br />
|-<br />
|08||??????? [12B42]<br />
|-<br />
|09||Sonic from S1 special stage [21D40]<br />
|-<br />
|0A||Flashing number that gives air countdown [1207C]<br />
|-<br />
|0B||Block that tips you off from CPZ [148AC]<br />
|-<br />
|0C||Unknown (A small one way block. At set intervals the platform raises slightly then goes back down. Movement is slow and erattic, not smooth.) [149FC]<br />
|-<br />
|0D||Signpost [F1F4]<br />
|-<br />
|0E||Unknown (a huge block locked onscreen) [B7B4]<br />
|-<br />
|0F||Unknown (very very weird. Using the blocks for a computer, every time you press jump another block for it appears locked onscreen int he top left corner) [B83A]<br />
|-<br />
|10||??????? [223E2]<br />
|-<br />
|11||Bridge [7FDC]<br />
|-<br />
|12||The master emerald [14AFC]<br />
|-<br />
|13||Waterfall from HPZ [14B78]<br />
|-<br />
|14||See-saw [15B8C]<br />
|-<br />
|15||Unknown (crashes emulator) [85F8]<br />
|-<br />
|16||Diagnally moving and falling platform from HTZ [1600C]<br />
|-<br />
|17||Ball badnick from CPZ that goes up one tube and down another [8B9C]<br />
|-<br />
|18||Fixed large platform from CPZ [8D38]<br />
|-<br />
|19||Large platform from CPZ moving from side to side [1621C]<br />
|-<br />
|1A||Collapsing platform from OOZ [9128]<br />
|-<br />
|1B||Boosters from CPZ [16468]<br />
|-<br />
|1C||??????? [999C]<br />
|-<br />
|1D||Enemy made up of small blue balls in CPZ [165B0]<br />
|-<br />
|1E||Spin-tube from CPZ [16724]<br />
|-<br />
|1F||Breakaway platform made up of small blocks from MZ in S1 [9274]<br />
|-<br />
|20||Unknown (An invincible object that drops two fireballs at a time, one on either side. object is fixed and cannot be hurt.) [17174]<br />
|-<br />
|21||Onscreen display (lives/score/time/rings) [22DFC]<br />
|-<br />
|22||Arrow shooter from ARZ [19660]<br />
|-<br />
|23||Piller that drops lower half in ARZ [19850]<br />
|-<br />
|24||Unknown (sprite cycles frames and then disappears) [A012]<br />
|-<br />
|25||Ring [AC28]<br />
|-<br />
|26||Monitor [B29C]<br />
|-<br />
|27||Explosion giving off 100 points and an animal [A086]<br />
|-<br />
|28||Unknown (some weird thing using some scrambled animal patterns bouncing up and down) [A2B0]<br />
|-<br />
|29||100 points [A7C0]<br />
|-<br />
|2A||Stomper from MCZ [9C0C]<br />
|-<br />
|2B||Raising pillar from ARZ [19A1E]<br />
|-<br />
|2C||Leaves from ARZ [1A0C4]<br />
|-<br />
|2D||One way barrier from ARZ [9CE2]<br />
|-<br />
|2E||Contents of computer monitor flying up [B46A]<br />
|-<br />
|2F||Unknown (suspect it's the blocks you bust blocking the loops in HTZ) [1747C]<br />
|-<br />
|30||Unknown (a collision box the size of the screen) [17A4C]<br />
|-<br />
|31||Boundary block for lava [155A0]<br />
|-<br />
|32||Cap on top of spin tubes in CPZ [1768A]<br />
|-<br />
|33||Platform on top of oil burners from OOZ [17CA0]<br />
|-<br />
|34||??????? [BB54]<br />
|-<br />
|35||??????? [1264E]<br />
|-<br />
|36||Spikes [C944]<br />
|-<br />
|37||Ring spray [AD62]<br />
|-<br />
|38||??????? [125CE]<br />
|-<br />
|39||Game over text [BD76]<br />
|-<br />
|3A||End of act sprite (ends level) [BE38]<br />
|-<br />
|3B||Unknown (a block) [CD00]<br />
|-<br />
|3C||Bustable vertical barrier [CD7C]<br />
|-<br />
|3D||Block that propells sonic when he busts it from OOZ [18E78]<br />
|-<br />
|3E||Unknown (a block) [20E5C]<br />
|-<br />
|3F||Red explosion [A11E]<br />
|-<br />
|40||Weird spring from ARZ and CPZ [1A30C]<br />
|-<br />
|41||Horizontal red spring [E7B8]<br />
|-<br />
|42||Steam vent from MTZ [1A5CC]<br />
|-<br />
|43||Spikeball from OOZ [17F0C]<br />
|-<br />
|44||Unknown (a vertical barrier) [F10C]<br />
|-<br />
|45||Weird spring that you push back on from OOZ [181A0]<br />
|-<br />
|46||Ball on weird spring from OOZ [18ABE]<br />
|-<br />
|47||Button [18D9C]<br />
|-<br />
|48||Spinball that shoots character out 90 degrees from entry from OOZ [19250]<br />
|-<br />
|49||Waterfall in EHZ [15352]<br />
|-<br />
|4A||Octopus badnick from OOZ [1EBB8]<br />
|-<br />
|4B||Buzz bomber [1E89C]<br />
|-<br />
|4C||Bat [1EE68]<br />
|-<br />
|4D||Rhinobot [1D984]<br />
|-<br />
|4E||Alligator [1F2F0]<br />
|-<br />
|4F||Dinobot [1DEAC]<br />
|-<br />
|50||Unknown badnick (rapidly changes direction in the air) [1E010]<br />
|-<br />
|51||Unknown badnick (Almost identical to above, but periodically shoots something to the left.) [1E62C]<br />
|-<br />
|52||Pirhana [1DC54]<br />
|-<br />
|53||Jumping fish from EHZ [1F5E8]<br />
|-<br />
|54||Land based driving badnick from EHZ [1F6E8]<br />
|-<br />
|55||Robotnic in his main ship [2030C]<br />
|-<br />
|56||Unknown (scrolls patterns then disappears. possibly new explosion effect) [205A6]<br />
|-<br />
|57||??????? [1F99C]<br />
|-<br />
|58||EHZ boss [1FC0A]<br />
|-<br />
|59||??????? [D24A]<br />
|-<br />
|5A||??????? [D24A]<br />
|-<br />
|5B||??????? [D24A]<br />
|-<br />
|5C||??????? [D24A]<br />
|-<br />
|5D||??????? [D24A]<br />
|-<br />
|5E||??????? [D24A]<br />
|-<br />
|5F||??????? [D24A]<br />
|-<br />
|60||??????? [D24A]<br />
|-<br />
|61||??????? [D24A]<br />
|-<br />
|62||??????? [D24A]<br />
|-<br />
|63||??????? [D24A]<br />
|-<br />
|64||Stompers from MTZ [1A8B4]<br />
|-<br />
|65||Unknown (a horizntal block) [1AA74]<br />
|-<br />
|66||Bouncers from MTZ [1AEBC]<br />
|-<br />
|67||Warp tube from MTZ [1B0C4]<br />
|-<br />
|68||Block in MTZ with a spike coming out each side sequentially [1B520]<br />
|-<br />
|69||Nut that character moves by running on in MTZ [1B810]<br />
|-<br />
|6A||Unknown (a platform that moves when you jump off it) [1BA30]<br />
|-<br />
|6B||Unknown (Same as above, but not moving) [1BCEC]<br />
|-<br />
|6C||??????? [1BF6C]<br />
|-<br />
|6D||Floor spike in MTZ [1B720]<br />
|-<br />
|6E||Platform moving in circle [1C2E4]<br />
|-<br />
|6F||Diagnally moving platform from MTZ [1C4F8]<br />
|-<br />
|70||8 points on giant cog from MTZ [1C850]<br />
|-<br />
|71||Pulsing ball in HPZ [9A54]<br />
|-<br />
|72||??????? [1CBCC]<br />
|-<br />
|73||Unknown (sprite has the image of a fixed ring. Sprite acts as a barrier if collision occurs) [1CC54]<br />
|-<br />
|74||Unknown (a block with no image) [1561A]<br />
|-<br />
|75||??????? [1CE48]<br />
|-<br />
|76||Moving spikey arm from MCZ [1D078]<br />
|-<br />
|77||Unknown (if character hits sprite it turns into a vertical barrier that then opens up, and immediately after makes emulator freeze.) [1D208]<br />
|-<br />
|78||Lowering stairs from CPZ [1D3C0]<br />
|-<br />
|79||Starpoll [13B54]<br />
|-<br />
|7A||Small yellow moving platform from CPZ [1D594]<br />
|-<br />
|7B||Spring on spin tube cap from CPZ [1D74C]<br />
|-<br />
|7C||??????? [D24A]<br />
|-<br />
|7D||Unknown (if collision occurs, emulator freeses) [13DFC]<br />
|-<br />
|7E||??????? [D24A]<br />
|-<br />
|7F||??????? [D24A]<br />
|-<br />
|80||??????? [D24A]<br />
|-<br />
|81||??????? [D24A]<br />
|-<br />
|82||??????? [D24A]<br />
|-<br />
|83||??????? [D24A]<br />
|-<br />
|84||??????? [D24A]<br />
|-<br />
|85||??????? [D24A]<br />
|-<br />
|86||??????? [D24A]<br />
|-<br />
|87||??????? [D24A]<br />
|-<br />
|88||??????? [D24A]<br />
|-<br />
|89||??????? [D24A]<br />
|-<br />
|8A||Unknown (some kind of single lined text on screen) [20740]<br />
|-<br />
|8B||??????? [D24A]<br />
|-<br />
|8C||??????? [D24A]<br />
|}<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s2b]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s2ss&diff=96178SCHG:Nem s2ss2009-01-09T01:49:21Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>== Introduction ==<br />
Here are my notes on the S2 savestate files. In order to edit these files I recommend a hex utility called Hex Workshop, and I recommend getting the emulators gens and genecyst. Gens is the one I use most of the time, but genecyst has a lot of features that are extremely useful that gens dosen't have.<br />
<br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1's and 0's. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it dosen't it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1's and 0's, so to make it simpler to deal with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent thier values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a hexadecimal value (hex value fo short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an ASCII table, which will convert that value into a recogniseable character (Eg. a byte value of 73 becomes a lowercase s on an english ASCII table). You will practically never touch the ASCII version of the code in hacking though.<br />
<br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be nessicary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the vaue, you will in fact end up with 80, becuase that value you are entering is actually a hex value, but if you use the base converer to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values.<br />
<br />
Now onto exactly what a savestate consists of. A savestate is a dump of all the ram that is allocated to the system, but that's not just main system ram, it's sound ram, CPU cache, etc. In a savestate all of this is mashed together in one file. Here's what's where in a genecyst savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 0-111 || Unknown<br />
|-<br />
| 112-191 || C ram (byteswapped)<br />
|-<br />
| 192-1E1 || VS ram<br />
|-<br />
| 1E2 and 1E3 || A 2 byte break.<br />
|-<br />
| 1E4-3E3 || YM2612 registers<br />
|-<br />
| 3E4-473 || Some kind of sound ram (Z80 regs?)(93)<br />
|-<br />
| 474-2473 || Z80 ram (sound ram)<br />
|-<br />
| 2474-2477 || A 4 byte break<br />
|-<br />
| 2478-12477 || System ram<br />
|-<br />
| 12478-22477 || Video ram<br />
|}<br />
<br />
And here's what's where in a Kgen savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 0-97 || File header<br />
|-<br />
| 98-2097 || Z80 ram<br />
|-<br />
| 2098-12097 || System ram<br />
|-<br />
| 12098-22097 || Video ram<br />
|-<br />
| 22098-22117 || C ram<br />
|-<br />
| 22118-223A5 || Unknown (D72)<br />
|-<br />
| 223A6-225A5 || YM2612 registers<br />
|-<br />
| 225A6-2275B || Unknown (1B6)<br />
|}<br />
<br />
All the address values listed here are based on a genecyst savestate file, so if you wish to edit one of another type you'll have to convert them yourself. Now any single value that is stored in the system ram can be altered in game by use of a pro action replay code. First of all, here's an example of a Pro action replay code: FFFE10:0800 Now, the first byte in this code is FF, and a value of FF in the first two characters indicates that the code is altering data in the system ram. The next four character after it are the actual memory location in the ram, and the last four are the two byte value to write into that memory address. The pro action replay will always alter two memory addreses at a time by the way, because the Mega Drive (Genesis) is a 16 bit system. It dosen't matter though because you will find that a value will have two bytes assigned to it anyway, or the second byte will be related. In the case of the example, the first byte being altered is the current level, and the second is the current act within that level. The actual address of these values in the savestate are 12288 and 12289. An explination of why lies in the locations of the ram data that is stored in the savestate. If you look at the above table, there are 2478 lines worth of data before the system ram in the savestate, so for any action replay code you want to convert into a file location, you will need to add 2478 to the line number, and for any line number you want to convert into a pro action replay code you will need to minus 2478. Remember that these line numbers are hex values though, so you will need to do this in a hex calculator. (NOTE: Genecyst dosen't do pro action replay codes properly, use gens instead for that function).<br />
<br />
Another thing you need to know is that each level in Sonic 2 has a value asigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values in Sonic 2:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || Emerald Hill zone<br />
|-<br />
| 04 || Metropolis zone<br />
|-<br />
| 05 || Metropolis zone act 3 (you should realise why later)<br />
|-<br />
| 06 || Wing fortress zone<br />
|-<br />
| 07 || Hill Top zone<br />
|-<br />
| 08 || Hidden Palace zone<br />
|-<br />
| 0A || Oil Ocean zone<br />
|-<br />
| 0B || Mystic Cave zone<br />
|-<br />
| 0C || Casino Night zone<br />
|-<br />
| 0D || Chemical Plant zone<br />
|-<br />
| 0E || Death Egg zone<br />
|-<br />
| 0F || Aquatic Ruin zone<br />
|-<br />
| 10 || Sky Chase zone<br />
|}<br />
<br />
And here's the list for the beta:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || Emerald Hill zone<br />
|-<br />
| 02 || Wood zone<br />
|-<br />
| 04 || Metropolis zone<br />
|-<br />
| 05 || Metropolis zone act 3 (you should realise why later)<br />
|-<br />
| 07 || Hill Top zone<br />
|-<br />
| 08 || Hidden Palace zone<br />
|-<br />
| 0A || Oil Ocean zone<br />
|-<br />
| 0B || Dust Hill zone<br />
|-<br />
| 0C || Casino Night zone<br />
|-<br />
| 0D || Chemical Plant zone<br />
|-<br />
| 0E || Genocide City zone<br />
|-<br />
| 0F || Neo Green Hill zone<br />
|-<br />
| 10 || Death Egg zone<br />
|}<br />
<br />
And one last thing you need to know is the way that the Mega Drive stores all the art. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get it's colour from. The palette has 4 lines, each with 16 colurs on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.<br />
<br />
Now these 8x8 blocks are not what makes up the level directly. 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have thier x, y, or x and y values reversed when placing them in a 16x16 block. Also it's at the 16x16 level that the collision definitions are specified. Now finally we get to a 128x128 block, and these are the things that the actual level info loads. It is made up of 64 16x16 blocks,and each block inside them can use a different palette line. You cannot place anything except a sprite or a 128x128 block directly into a level.<br />
<br />
Now that you know all the basics, here's my breakdown:<br />
<br />
== Internal Groups ==<br />
{| class="prettytable" style="width: 100%"<br />
! colspan="2" | System ram<br />
|-<br />
| width="150" | 2478-A477 || 128x128 block mappings<br />
|-<br />
| A478-B477 || Level layout<br />
|-<br />
| B478-CE77 || 16x16 block mappings<br />
|-<br />
| CE78-???? || Pattern decompression buffer<br />
|-<br />
| D478-FA77 || Buffered sprites<br />
|-<br />
| FA78-FD77 || Primary collision index<br />
|-<br />
| FD78-10078 || Secondary collision index<br />
|-<br />
| 10C78-11277 || Ring positions<br />
|-<br />
| 11478-114F7 || Below water palette<br />
|-<br />
| 114F8-11577 || Unknown palette<br />
|-<br />
| 11AF8-????? || Pattern load cue<br />
|-<br />
| 11F78-11FF7 || Above water palette<br />
|-<br />
| 11FF8-12077 || Unknown palette<br />
|-<br />
! colspan="2" | Video ram<br />
|-<br />
| 12478-1E477 || Main Pattern info<br />
|-<br />
| 1E478-1F477 || Makeup of buffered foreground<br />
|-<br />
| 1F478-20477 || Patterns for text/computers/rings<br />
|-<br />
| 20478-21477 || Makeup of buffered background<br />
|-<br />
| 21478-21C77 || Patterns for sonic and tails<br />
|-<br />
| 21C78-21EF7 || Makeup of buffered active objects?<br />
|-<br />
| 21EF8-22077 || Lives counter patterns<br />
|-<br />
| 22078-223F7 || Current state of background tiles<br />
|-<br />
| 223F8-22477 || 4 empty blocks <br />
|}<br />
<br />
== Single Variables ==<br />
{| class="prettytable" style="width: 100%"<br />
| width="150" | 11278 and 11279 || Camera x position<br />
|-<br />
| 1127C and 1127D || Camera y position<br />
|-<br />
| 1133E and 1133F || Screen y end location<br />
|-<br />
| 11344 and 11345 || Screen y start location (if a value of FF00 is specified for both start and end, the level will be y wrapped. This should not be used when water is present though or, yeah, you get the picture.<br />
|-<br />
| 11340 and 11341 || Screen x start location<br />
|-<br />
| 11342 and 11343 || Screen x end location (Set (30) back from end of level or else sonic will be able to fall off end platform.)<br />
|-<br />
| 11346 and 11347 || Camera scroll speed (speed at which camera moves to catch up to character)<br />
|-<br />
| 11A78 || Master level trigger (This trigger tells the game what you're in, be it a level, special stage, or a menu. View breakdown for table of values.)<br />
|-<br />
| 11AC0 and 11AC1 || Current Water level (specify a y axis value. Note, use bottom value as referance when in debug mode, as top value is y axis screen position with the value being taken from the top left of the screen. Also note that the y axis values work as 0 being the top of the level and increase as the character moves further down the level.)<br />
|-<br />
| 11AC2 and 11AC3 || Set water level (same as above. If the values in this variable and the one above differ, water level will automatically raise/lower as is neccisary in order for the water level to return to this point.)<br />
|-<br />
| 11AC4 || The speed at which the water moves (If this is set to 00 the water will not move if the set water level changes)<br />
|-<br />
| 11BA8 || Water on/off (must be set to 01 or above for any of the other values to be of any use at all. NOTE: Below water palette is empty on levels that don't have water, hence one will need to be entered, or everything underneath the water level will appear as black.<br />
|-<br />
| 11BD8 and 11BD9 || Sonic's Top speed<br />
|-<br />
| 11BDA and 11BDB || Sonic's Acceleration<br />
|-<br />
| 11BDC and 11BDD || Sonic's Deceleration<br />
|-<br />
| 11BE8-11BEF || Sprites (includes map triggers. NOTE: this is not the actual data on the sprite locations. Read breakdown for details).<br />
|-<br />
| 1227E || Sprite currently selected in debug mode<br />
|-<br />
| 12281 || Sprite placement mode (00=off 01 up=on)<br />
|-<br />
| 12288 || Level (hex vaue assigned to level, not level position on list. NOTE: Changing this value in level will also switch info for background movement, animated sprites, and animated palette sections.)<br />
|-<br />
| 12289 || Act<br />
|-<br />
| 1228A || Lives (convert from decimal to hex for desired number)<br />
|-<br />
| 12290 || Continues (convert from decimal to hex for desired number)<br />
|-<br />
| 12291 || Supersonic mode (00=no 01 up=yes. This will make Sonic's tiles that of supersonic and will adjust his movement speed when in a ball, but will not shift the palette or change his acceleration, top speed or decelleration. It will also make Sonic's rings drain, but sonic will not be able to kill enemies on contact.)<br />
|-<br />
| 12298 and 12299 || Rings (convert from decimal to hex for desired number)<br />
|-<br />
| 1229B || Minutes on clock (beyond 09 it loads images beyond it's range, hence screwup)<br />
|-<br />
| 1229C || Seconds<br />
|-<br />
| 1229D || Milliseconds<br />
|-<br />
| 1229E-122A1 || Score (convert from decimal to hex for desired score)<br />
|-<br />
| 122A8 || Number of star polls that have been hit (based thier positions on the x axis)<br />
|-<br />
| 12338 and 12339 || Tails' max speed<br />
|-<br />
| 1233A and 1233B || Tails' acceleration<br />
|-<br />
| 1233C and 1233D || Tails' decelleration<br />
|-<br />
| 123B8 and 123B9 || Rings remaining to get perfect (set to 0000 for a perfect)<br />
|-<br />
| 123E8 and 123E9 || Player in special stage<br />
|-<br />
| 123EA and 123EB || Player in game (sonic and tails, sonic alone, tails alone)<br />
|-<br />
| 123EC and 123ED || VS mode items (teleport only, all kinds items) <br />
|-<br />
| 123FA and 123FB || Item in level select menu that is selected (set to 16 to see the HPZ picture in the window).<br />
|-<br />
| 123FD || Sound that is selected in options menu (value retained even out of menu)<br />
|-<br />
| 12404 || Box that is selected in options menu<br />
|-<br />
| 12429 || Number of emeralds you have<br />
|-<br />
| 12448 || Level select (set to 01 to enable)<br />
|-<br />
| 12449 || Slow motion<br />
|-<br />
| 12468 and 12469 || Demo mode (00=off 01 up=on)<br />
|-<br />
| 12472 || Debug mode (00=off 01 up=on)<br />
|}<br />
<br />
== Pattern breakdown ==<br />
'''8x8 blocks (12478-1C477)'''<br><br />
All 8x8 patterns are stored sequentially, each one taking up 32(20) bytes. One pixel takes up one hex value, not one byte. The value of this hex value being 0-16 represents the colour that pixel is on the palette, 0 being the start, and F being the end (NOTE: specifying a value of 0 will not load up the first colour on the palette line, but instead make that pixel transparent).<br />
<br />
'''16x16 block mappings: (B478-CE77)'''<br><br />
Each 16x16 block is made up of four 8x8 blocks. Delt with in blocks of 8 bytes, 2 bytes per pattern to be used in block. First value determins which palette line to use, and which orientation the pattern is at. Refer to table for explination:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto; text-align: center"<br />
! Value !! palette line !! flipped horizntally !! flipped vertically<br />
|-<br />
| 0 || 1 || n || n<br />
|-<br />
| 1 || 1 || n || y<br />
|-<br />
| 2 || 2 || n || n<br />
|-<br />
| 3 || 2 || n || y<br />
|-<br />
| 4 || 3 || n || n<br />
|-<br />
| 5 || 3 || n || y<br />
|-<br />
| 6 || 4 || n || n<br />
|-<br />
| 7 || 4 || n || y<br />
|-<br />
| 8 || 1 || n || n<br />
|-<br />
| 9 || 1 || y || n<br />
|-<br />
| A || 2 || n || n<br />
|-<br />
| B || 2 || y || n<br />
|-<br />
| C || 3 || n || n<br />
|-<br />
| D || 3 || y || n<br />
|-<br />
| E || 4 || n || n<br />
|-<br />
| F || 4 || y || n<br />
|}<br />
<br />
The next three values represent the pattern number to use. Specify the number that the pattern is in the list. Past the value of 800, the block number restarts back at block 0, but the block is mirrored. The block mappings use the standard method of layout, start at x0 y0 and move across x values until end of line is reached, then repeating on next y value. If a space is blank in the 16x16 mappings, it will have the values 4000 in every box.<br />
<br />
'''128x128 block mappings: (2478-A477)'''<br><br />
Dealt with in blocks of 128 (80) bytes. Each 128 block is made up of 64 16x16 blocks, hence two bytes per 16x16 block are used. I don't know what the first value does, but the next three give the number of the 16x16 block to use.<br />
<br />
== Collision info breakdown ==<br />
'''Final: (FA78-FD77)''' Based on 16x16 blocks, not 8x8 blocks. One byte per block in sequencial order. Each value creates a different responce, so a full listing will need to be compiled (FF=solid, 00=not solid).<br />
<br />
'''Beta: (F478-FA77)'''<br><br />
Based on 16x16 blocks. Two bytes per block in sequencial order. First byte seems to be some sort of special flag to do with character animation/movement when you hit the block. Most of this can be done with the second flag anyway, so that's probably why it was cut in the final version. The second byte is exactly the same variable as is present in the final version.<br />
<br />
== Sprite loading addresses (11BE8-11BEF) ==<br />
The sprite information is discarded when screen moves too far away, and information is then reloaded from rom when character reenters area. These values specify a location in the rom to load the information from. The first four bytes are the address to load the sprites from when approaching from the left. The four bytes after that is the address to load the sprite info when approaching from the right. There is also another block of 8 bytes after this one that appears to be the same, but it dosen't seem to do anything. And no, it's not where to load the sprites from when approaching from the top and bottom. By transferring these values between levels, you can do some interesting things such as fighting the Death Egg in Aquatic Ruin zone.<br />
<br />
NOTE: Altering these values to those of another level will transfer the information for the location of sprites, and the key files (definitions about movement/reactions) for the sprites, but unless the correct patterns for them are loaded into the ram, it will look like a jumbled piece of crap.<br />
<br />
== Buffered sprite breakdown ==<br />
'''Final: (D878-F477)'''<br />
Stored in blocks of 64 bytes (40) per sprite. The sprites are listed in the order that they appear starting from the top left and scrolling across x values, then beginning on next line. The following example uses address locations for the first sprite on the list as a referance. You will need to increase the line values on this list by 40(hex) for every sprite that comes before the one you want to modify.<br />
<br />
{| class="prettytable" style="width: 100%"<br />
| width="150" | D878 || Key file to use for defining the actions/movements of sprite. 94 is lava snake, 26 is monitor, A4 is exploding star, just to name a few. Check the S2 rom breakdown section for a full list of sprites.<br />
|-<br />
| D87A and D87B || Patterns to use for sprite. Specify number of 8x8 block to start from, not address value. <br />
|-<br />
| D87C-D87F || A loading address from the rom. For what I have no idea.<br />
|-<br />
| D880 and D881 || x position of sprite<br />
|-<br />
| D884 and D885 || y position of sprite<br />
|-<br />
| D888 and D889 || x speed when monitor is knocked down. (7FFF max right, 8000 max left and working back accordingly. This will make the monitor move at the specified speed either lef tor right when you knock it down.)<br />
|-<br />
| D892 || Current animation frame of sprite<br />
|-<br />
| D898 || Collision response (this value determines what happens when your character's sprite hits this one. A long list of different values so one will have to be compiled).<br />
|-<br />
| D899 || Special flag for collision (Setting this value to 01 or above will set a special thing about the sprite for the collision group it belongs to. If it's set as an enemy this trigger will make you bounce off the sprite like <br />
the enemy in Casino night. If it's a computer it will turn off collision responces all together. The other two do nothing.)<br />
|-<br />
| D89A || orientation of sprite (00 is normal, 01 x is reversed, 02 y is reversed, 03 y and x are both reversed. This pattern repeats all the way up to FF).<br />
|-<br />
| D8A0 || current monitor selected (only toggle on monitors). With a monitor, the values for the desired monitor are as follows:<br />
<br />
:00: Static (Does the same thing as a robotnic monitor, but with static image instead)<br />
:01: Sonic 1UP<br />
:02: Tails 1UP<br />
:03: Robotnic (Hits character, like in later sonic games)<br />
:04: Ring<br />
:05: Fastfoot<br />
:06: Bubble<br />
:07: Invincibility<br />
:08: Teleport<br />
:09: Questionmark<br />
:0A: Broken monitor<br />
<br />
Beyond these values you get serious screwups/lockups.<br />
|}<br />
<br />
'''Beta: (DC78-F477)'''<BR><br />
Same as final for the most part. The definitions for the monitor are different though. <br />
{| class="prettytable" style="width: 100%"<br />
| width="150" | D894<br />
| current monitor selected (only toggle on monitors). With a monitor, the values for the desired monitor are as follows:<br />
<br />
:00: Static<br />
:01: Sonic 1UP<br />
:02: Tails 1UP<br />
:03: Robotnic (No affect on Sonic. Apparently the effect haden't been defined yet.)<br />
:04: Ring<br />
:05: Fastfoot<br />
:06: Bubble<br />
:07: Invincibility<br />
:08: Weirdness (Very interesting. Appears to be the original idea for supersonic. When you bust this computer which has the picture of a questionmark monitor, the palette shifts and Sonic looks golden like supersonic. None of the other effects are done, the palette merely shifts, but it does seem to be the original idea for supersonic.)<br />
:09: Spring monitor (A monitor with a spring picture on it. Nothing happens when you bust it.)<br />
:0A: Broken monitor<br />
<br />
Beyond these values you get serious screwups/lockups.<br />
|}<br />
<br />
== Ring placement breakdown (10C78-11277) ==<br />
One ring is defined by 6 bytes. The first byte has something to do with the ring's current status. 00 you can get the ring, but 01-7F you can't, and 80-FF the ring disappears completely. The second byte is to do with the animation of the sprite. 00 is animated, 01 up is the frame of the animation to display if the sprite is not animated (07 is the last frame for the ring animation). The second two bytes are the x location of the sprite, and the last two bytes are the y location of the sprite. All the rings are listed in a large group, and the end of this group is signalled by the 4 byte value FFFF FFFF.<br />
<br />
== Pallette breakdown ==<br />
'''Final: (Below water: 114F8-11577, Above water: 11F78-11FF7)'''<br><br />
A simple 12 bit RGB value. One colour on palette is represented by two bytes, and working back from the last value forward an RGB value is specified like this: 0BGR. So if you wanted that colour on the palette to be completely red, you would enter a value of 000F. The first colour on the palette is the default colour of the stage. If you had a value of 0 in one of the background tiles, this colour will be substituted in instead of making it transparent.<br />
<br />
'''Beta:(Below water: 11EF8-11F77, Above water: 11F78-11FF7)'''<br><br />
Same as above.<br />
<br />
== Pattern load cue (11AF8-?????) ==<br />
Requests are processed in the order they are listed. If you try to load multiple patterns to the same area, the last one will overwrite the first. A six byte value per request. First four bytes are the address to load the patterns from the rom (eg, 0008 30D2). The last two bytes are the address to load the patterns into in the video ram. The pattern view window in genecyst is the easiest way to determine this. Note that whenever clearing out the pattern cue you must also set 11B71 to 00, or else some crap will be written over the first few patterns in the video ram. I have yet to narrow down the exact relationship this variable has with the load cue.<br />
<br />
== Master level trigger (11A78) ==<br />
This trigger is the main trigger that specifies the current "mode" if you will that the game is in. Changing this will make the game switch to the mode you specify once it finishes it's current process. <br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || SEGA logo<br />
|-<br />
| 04 || Title screen<br />
|-<br />
| 08 || Demo (will make the screen fade out and return to title when time reaches 27 seconds)<br />
|-<br />
| 0C || Normal level<br />
|-<br />
| 10 || Special stage<br />
|-<br />
| 14 || Continue screen<br />
|-<br />
| 18 || 2 player vs result screen<br />
|-<br />
| 1C || 2 player vs level select screen<br />
|-<br />
| 20 || End of game sequence<br />
|-<br />
| 24 || Options screen<br />
|-<br />
| 28 || Level select screen<br />
|}<br />
<br />
These values repeat every (40). Values above 28 have not been used, so you get the red screen of death. If you change this value in level the screen will fade out and the data for the thing you have selected will be loaded instead. If you specify a value betwen the values I have listed, you will get some strange results.<br />
<br />
== Level design breakdown (A478-B477) ==<br />
Level is delt with as a grid, starting with first tile in top left and working across to the right doing one x value at a time. One byte represents one tile in one grid location. A value of 00 is the first large tile in the database, 01 is the second, etc. The maximum possible number of large tiles on the x-axis is 127 (7F). One x line is stored in the form of 127 lines for foreground tiles, then another 127 lines for background tiles per y value. That totals an increase of 0100 per line, so if level data started at 0300 (not possible), 0300-03FF would be all the data for the top row of 128x128 tiles, 0400-04FF would be all the data for the second row of 128x128 tiles, etc.<br />
<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s2ss]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Winter_Zone&diff=96174Winter Zone2009-01-09T01:49:19Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
The '''Winter Zone''' is a scrapped level in ''[[Sonic 2]]'' that was supposed to reuse many recolored graphics taken from [[Brenda Ross]]' [[Dust Hill Zone]], but with the desert elements replaced by christmas trees and other such items.<br />
<br />
The Winter Zone was supposed to be a palette swap of Desert Zone according to [[Brenda Ross interview by Deviance (February 2001)|an interview with Brenda Ross]]. Her answer to question 20 is as follows:<br />
<br />
{{quote|1=The desert zone was as you see in that image, with cactus and assorted plants. It was designed to have a palette change, which turned the sand into snow, and you’d have a winter scene. We had to be fairly ingenious with such a limited palette. In the winter zone, (that’s what I call it), instead of cactus, I had created Christmas trees, which I thought looked kinda cool.|2=[[Brenda Ross]]}}<br />
<br />
According to [[Tim Skelly]], not many of the winter-exclusive items were completed before it was canceled.<br />
<br />
{{Template:Sonic2Levels}}<br />
[[Category:Sonic the Hedgehog 2 (16-bit) Levels]]<br />
[[Category:Sonic the Hedgehog 2 (16-bit) Scrapped Levels]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s1&diff=96175SCHG:Nem s12009-01-09T01:49:19Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>==Introduction==<br />
Here are my hacking notes on the [[Sonic 1]] ROM. If you use these notes I'd appreciate it if you would mention it with your hack or your utility, so that other people can find their way here. For hex editing I recommend you use a hex utility called [[Hex Workshop]], and for emulators I recommend you get both [[Gens]] and [[Genecyst]]. Genecyst may be old and kinda crap, but it has a whole heap of debug outputs that really help when it comes to seeing exactly what it's doing and when.<br />
<br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1s and 0s. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it doesn’t it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1s and 0s, so to make it simpler it deals with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent their values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a hexadecimal value (hex value for short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an ASCII table, which will convert that value into a recognisable character (Eg. a byte value of 73 becomes a lowercase s on an English ASCII table). You will practically never touch the ASCII version of the code in hacking though.<br />
<br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be necessary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the value, you will in fact end up with 80, because that value you are entering is actually a hex value, but if you use the base converter to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values. <br />
<br />
Another thing you need to know is that each level in Sonic 1 has a value assigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values in Sonic 1:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || Green Hill zone<br />
|-<br />
| 01 || Labyrinth zone (act 4 is scrap brain zone 3)<br />
|-<br />
| 02 || Marble zone<br />
|-<br />
| 03 || Star Light zone<br />
|-<br />
| 04 || Spring Yard zone<br />
|-<br />
| 05 || Scrap Brain zone (act 3 is Final zone)<br />
|}<br />
<br />
One other thing you need to know is the way that the Mega Drive stores all the art. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get its colour from. The palette has 4 lines, each with 16 colours on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.<br />
<br />
Now these 8x8 blocks are not what make up the level directly. 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have their x, y, or x and y values reversed when placing them in a 16x16 block. Also it's at the 16x16 level that the collision definitions are specified. Now finally we get to a 256x256 block, and these are the things that the actual level info loads. It is made up of 256 16x16 blocks, and each block inside them can use a different palette line. You cannot place anything except a sprite or a 256x256 block directly into a level.<br />
<br />
Now that you know all the basics, here's my breakdown:<br />
<br />
==Address listing==<br />
For the most part, there are no breaks in this list. If one address follows on directly from another on this list, it does so in the rom, with the exception of data that comes before 1D000. All the compiled code that is used in the game is stored in this section, and that's a pain in the ass to sort through, so there will be many breaks there. The column on the left lists it's file location, the column in the middle contains it's name and description, and the column on the right will contain any special notes about it, such as compression format used if applicable, and number of blocks an art tile uses. The right column will also contain a link with the text further info, if that particular block requires it. That link will jump to a detailed explanation of that thing. Anything linked like that will also be listed in the contents at the top of the page. Also, any patterns that are not used anywhere in the game will be preceeded by this red dot [[IMAGE:reddot.gif]].<br />
<br />
{| class="prettytable"<br />
|width="100" | 0-FF || Vector table ||<br />
|-<br />
| 100-200 || Header ||<br />
|-<br />
| 438-5B8 || Platform error messages (ASCII text) ||<br />
|-<br />
| 5F0-B0F || Standard numbers/symbols || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 1B66-1CA9 || Unknown palettes ||<br />
|-<br />
| 1D0A-1DAB || Unknown palettes ||<br />
|-<br />
| 20C0-20FB || Unknown palette ||<br />
|-<br />
| 2168-2207 || Palette pointers || [[#Palettes|Further info]]<br />
|-<br />
| 2208 || SEGA screen palette || [[#Palettes|Further info]]<br />
|-<br />
| 2288 || Title screen palette || [[#Palettes|Further info]]<br />
|-<br />
| 2308 || Level select palette || [[#Palettes|Further info]]<br />
|-<br />
| 2388 || Primary palette line || [[#Palettes|Further info]]<br />
|-<br />
| 23A8 || GHZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2408 || LZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2468 || LZ underwater level palette || [[#Palettes|Further info]]<br />
|-<br />
| 24E8 || MZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2548 || SLZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 25A8 || SYZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2608 || SBZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2668 || FZ level palette || [[#Palettes|Further info]]<br />
|-<br />
| 26C8 || Special stage palette || [[#Palettes|Further info]]<br />
|-<br />
| 2748 || SBZ act 3 level palette || [[#Palettes|Further info]]<br />
|-<br />
| 27A8 || SBZ act 3 underwater level palette || [[#Palettes|Further info]]<br />
|-<br />
| 2828 || SBZ act 3 primary palette line || [[#Palettes|Further info]]<br />
|-<br />
| 2868 || Special stage results palette || [[#Palettes|Further info]]<br />
|-<br />
| 28E8 || Unknown palette || [[#Palettes|Further info]]<br />
|-<br />
| 2928 || Ending sequence level palette || [[#Palettes|Further info]]<br />
|-<br />
| 337A-339F || Level select level order || [[#Level_order|Further info]]<br />
|-<br />
| 379A-37A0 || Music playlist for levels || [[#Music_playlist_for_levels|Further info]]<br />
|-<br />
| 4100-4117 || 16x16 collision index pointers || [[#Collision_definitions|Further info]]<br />
|-<br />
| 4E42 || Continue screen (sprite) ||<br />
|-<br />
| 4F5C || ??????? (sprite) ||<br />
|-<br />
| 53E2 || ??????? (sprite) ||<br />
|-<br />
| 553C || ??????? (sprite) ||<br />
|-<br />
| 5616 || ??????? (sprite) ||<br />
|-<br />
| 59E2 || ??????? (sprite) ||<br />
|-<br />
| 5AC2 || ??????? (sprite) ||<br />
|-<br />
| 6112-6181 || Character start location array || [[#Character_start_location_array|Further info]]<br />
|-<br />
| 6DD0-6DDD || Offset index for dynamic screen resizing || [[#Offset_indexes|Further info]]<br />
|-<br />
| 6DDE || GHZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 6EF2 || LZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 6F8E || MZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 70F2 || SLZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 7168 || SYZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 720A || SBZ dynamic screen resizing || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 7326 || Ending sequence dynamic screen resizing (empty) || [[#Dynamic_screen_resizing|Further info]]<br />
|-<br />
| 7328 || ??????? (sprite) ||<br />
|-<br />
| 7952 || ??????? (sprite) ||<br />
|-<br />
| 7CA2 || ??????? (sprite) ||<br />
|-<br />
| 7E32 || ??????? (sprite) ||<br />
|-<br />
| 81A8 || ??????? (sprite) ||<br />
|-<br />
| 8210 || Collapsable platform (sprite) ||<br />
|-<br />
| 8320 || Platform in MZ made up of blocks that breaks. (sprite) ||<br />
|-<br />
| 87CA || ??????? (sprite) ||<br />
|-<br />
| 885E || ??????? (sprite) ||<br />
|-<br />
| 8934 || ??????? (sprite) ||<br />
|-<br />
| 8B4C || Double big red explosion (sprite) ||<br />
|-<br />
| 8C1C || Big red explosion (sprite) ||<br />
|-<br />
| 8CF2 || ??????? (sprite) ||<br />
|-<br />
| 8D62 || Normal explosion (sprite) ||<br />
|-<br />
| 8DF6 || Large explosion (sprite) ||<br />
|-<br />
| 8F22 || ??????? (sprite) ||<br />
|-<br />
| 9412 || ??????? (sprite) ||<br />
|-<br />
| 94F0 || Crab enemy from GHZ (sprite) ||<br />
|-<br />
| 97DE || Buzz bomber (sprite) ||<br />
|-<br />
| 9932 || ??????? (sprite) ||<br />
|-<br />
| 9B26 || ??????? (sprite) ||<br />
|-<br />
| 9CB6 || Rings flying out from being hit (sprite) ||<br />
|-<br />
| 9E06 || Large golden ring (sprite) ||<br />
|-<br />
| 9ED6 || Special stage entry effect (sprite) ||<br />
|-<br />
| A118 || ??????? (sprite) ||<br />
|-<br />
| A302 || Contents of monitor flying up frm monitor being busted (sprite) ||<br />
|-<br />
| A61C || ??????? (sprite) ||<br />
|-<br />
| A69C || ??????? (sprite) ||<br />
|-<br />
| AB20 || ??????? (sprite) ||<br />
|-<br />
| ABDA || ??????? (sprite) ||<br />
|-<br />
| ACA4 || Drill badnick in LZ (sprite) ||<br />
|-<br />
| AEB8 || Platfrom in MZ that moves up and down (sprite) ||<br />
|-<br />
| B1DC || ??????? (sprite) ||<br />
|-<br />
| B39E || ??????? (sprite) ||<br />
|-<br />
| B67C || Metal block with spikes on bottom from MZ (sprite) ||<br />
|-<br />
| B99A || Sideways spikes that were cut in MZ (sprite) ||<br />
|-<br />
| BD2E || Button in MZ (sprite) ||<br />
|-<br />
| BED2 || Moveable block in MZ (sprite) ||<br />
|-<br />
| C306 || Title card (sprite) ||<br />
|-<br />
| C4B8 || "Game over" sprite (sprite) ||<br />
|-<br />
| C572 || End of level results screen (sprite) ||<br />
|-<br />
| C6F4-C723 || Main game level order || [[#Level_order|Further info]]<br />
|-<br />
| C7AE || End of special stage results screen (sprite) ||<br />
|-<br />
| C956 || Bubble (sprite) ||<br />
|-<br />
| CE28 || Spikes (sprite) ||<br />
|-<br />
| D050 || Rock from GHZ (sprite) ||<br />
|-<br />
| D0BE || ??????? (sprite) ||<br />
|-<br />
| D11C || Breakable barrier from GHZ (sprite) ||<br />
|-<br />
| D382-D5B1 || Object pointer list || [[#Sprite_programming|Further info]]<br />
|-<br />
| D5B2 || ??????? (sprite) ||<br />
|-<br />
| DABE || Red spring (sprite) ||<br />
|-<br />
| DD68 || Badnick that appears behind wall and fires projectile from GHZ (sprite) ||<br />
|-<br />
| DFFA || ??????? (sprite) ||<br />
|-<br />
| E1D4 || Wall barrier from GHZ (sprite) ||<br />
|-<br />
| E296 || ??????? (sprite) ||<br />
|-<br />
| E304 || ??????? (sprite) ||<br />
|-<br />
| E4E0 || ??????? (sprite) ||<br />
|-<br />
| E7D0 || ??????? (sprite) ||<br />
|-<br />
| E90C || ??????? (sprite) ||<br />
|-<br />
| E9D0 || Bumper (sprite) ||<br />
|-<br />
| EB28 || ??????? (sprite) ||<br />
|-<br />
| ED84 || Lava spurt with lava ripples (sprite) ||<br />
|-<br />
| EE70 || Lava spurt (sprite) ||<br />
|-<br />
| F05E || Lava wave from MZ (sprite) ||<br />
|-<br />
| F1B8 || Sprite for lava hurting you (sprite) ||<br />
|-<br />
| F61A || Motobug from GHZ (sprite) ||<br />
|-<br />
| F806 || ??????? (sprite) ||<br />
|-<br />
| F83A || That ground based badnick with spikes ontop from SYZ (sprite) ||<br />
|-<br />
| FC92 || Breakable block in MZ (sprite) ||<br />
|-<br />
| FDF8 || ??????? (sprite) ||<br />
|-<br />
| 100A8 || Bat from MZ (sprite) ||<br />
|-<br />
| 10286 || ??????? (sprite) ||<br />
|-<br />
| 10782 || ??????? (sprite) ||<br />
|-<br />
| 10976 || Same as above, but different image (sprite) ||<br />
|-<br />
| 10AD2 || Raising platforms from SLZ (sprite) ||<br />
|-<br />
| 10D5A || Platform moving in circular motion in SLZ (sprite) ||<br />
|-<br />
| 10E90 || Lowering staircase from SLZ (sprite) ||<br />
|-<br />
| 11044 || Pylon in foreground frm SLZ (sprite) ||<br />
|-<br />
| 110C6 || ??????? (sprite) ||<br />
|-<br />
| 11206 || ??????? (sprite) ||<br />
|-<br />
| 11346 || ??????? (sprite) ||<br />
|-<br />
| 1141A || ??????? (sprite) ||<br />
|-<br />
| 114FC || Fan from SLZ (sprite) ||<br />
|-<br />
| 1163C || See saw without spikeball (sprite) ||<br />
|-<br />
| 119F6 || Walking bomb (sprite) ||<br />
|-<br />
| 11CCE || Badnick surrounded by spikeballs that shoots them at you (sprite) ||<br />
|-<br />
| 11F04 || ??????? (sprite) ||<br />
|-<br />
| 11FD4 || ??????? (sprite) ||<br />
|-<br />
| 121E8 || Stone head that launches projectile in LZ (sprite) ||<br />
|-<br />
| 1233C || ??????? (sprite) ||<br />
|-<br />
| 126A4 || Small bubble (sprite) ||<br />
|-<br />
| 12A9E || ??????? (sprite) ||<br />
|-<br />
| 12BD8 || Sonic (sprite) ||<br />
|-<br />
| 13C98 || ??????? (sprite) ||<br />
|-<br />
| 14158 || ??????? (sprite) ||<br />
|-<br />
| 14254 || Old special entry effect (sprite) ||<br />
|-<br />
| 142F0 || ??????? (sprite) ||<br />
|-<br />
| 1509A || Spinning wheel in SBZ that shoots you off in different directions (sprite) ||<br />
|-<br />
| 154E2 || ??????? (sprite) ||<br />
|-<br />
| 1568E || ??????? (sprite) ||<br />
|-<br />
| 15730 || ??????? (sprite) ||<br />
|-<br />
| 1597C || ??????? (sprite) ||<br />
|-<br />
| 15C12 || ??????? (sprite) ||<br />
|-<br />
| 15FF8 || ??????? (sprite) ||<br />
|-<br />
| 16146 || ??????? (sprite) ||<br />
|-<br />
| 1626A || ??????? (sprite) ||<br />
|-<br />
| 1652A || Big moving rectangle in SBZ (sprite) ||<br />
|-<br />
| 16668 || ??????? (sprite) ||<br />
|-<br />
| 16934 || Catakiller (sprite) ||<br />
|-<br />
| 16E2E || Starpoll (sprite) ||<br />
|-<br />
| 1715E || ??????? (sprite) ||<br />
|-<br />
| 17264 || ??????? (sprite) ||<br />
|-<br />
| 17700 || Robotnic in his primary ship (sprite) ||<br />
|-<br />
| 17AE4 || Large ball from GHZ that was cut (sprite) ||<br />
|-<br />
| 17E36 || ??????? (sprite) ||<br />
|-<br />
| 18230 || Robotnic flying his default ship (sprite) ||<br />
|-<br />
| 186A4 || ??????? (sprite) ||<br />
|-<br />
| 188B8 || ??????? (sprite) ||<br />
|-<br />
| 18CCE || ??????? (sprite) ||<br />
|-<br />
| 190EE || ??????? (sprite) ||<br />
|-<br />
| 19692 || ??????? (sprite) ||<br />
|-<br />
| 19832 || ??????? (sprite) ||<br />
|-<br />
| 19B60 || ??????? (sprite) ||<br />
|-<br />
| 19D58 || ??????? (sprite) ||<br />
|-<br />
| 1A44E || ??????? (sprite) ||<br />
|-<br />
| 1A7DA || ??????? (sprite) ||<br />
|-<br />
| 1AB22 || Egg prison (sprite) ||<br />
|-<br />
| 1B984 || Sonic in special stage (sprite) ||<br />
|-<br />
| 1C022 || ??????? (sprite) ||<br />
|-<br />
| 1C046-1C053 || Offset index of animated pattern load cues || [[#Offset_indexes|Further info]]<br />
|-<br />
| 1C054 || GHZ animated pattern load cue || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C112 || MZ animated pattern load cue || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C1AE || Unknown animated pattern load cue || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C1EC || SBZ animated pattern load cue || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C2A2 || End of game sequence animated pattern load cue || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C3B6 || LZ/SLZ/SYZ animated pattern load cue (empty) || [[#Animated_pattern_load_cues|Further info]]<br />
|-<br />
| 1C548 || ??????? (sprite) ||<br />
|-<br />
| 1CADA-1CF19 || Big and small numbers used on counters in game || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 1D16E-1D17B || Offset index of object debug lists || [[#Offset_indexes|Further info]]<br />
|-<br />
| 1D17C || GHZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D1FE || LZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D2C8 || MZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D35A || SLZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D3D4 || SYZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D44E || SBZ object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D538 || Ending sequence object debug list || [[#Object_debug_list|Further info]]<br />
|-<br />
| 1D5A2 || Main level load blocks (patterns/16x16/256x256/palette) || [[#Main_level_load block|Further info]]<br />
|-<br />
| 1D612 || Offset index of pattern load cues || [[#Offset_indexes|Further info]]<br />
|-<br />
| 1D652 || Pattern load cues || [[#Pattern_load_cues|Further info]]<br />
|-<br />
| 1DB12 || Data block acting as seperator ||<br />
|-<br />
| 1DC00 || "SEGA" Patterns || Art compression<BR>123 blocks<br />
|-<br />
| 1E26E || Patterns for foreground in intro || Art compression<BR>254 blocks<br />
|-<br />
| 1F27A || Patterns for sonic in intro || Art compression<BR>525 blocks<br />
|-<br />
| 20C48 || "TM" || Art compression<BR>00, 2 blocks<br />
|-<br />
| 20D3A || Hidden Japanese writing on "Sonic team presents" screen || Art compression<BR>00, 166 blocks<br />
|-<br />
| 211E2-21291 || Unknown offset index ||<br />
|-<br />
| 21292-217FD || Data that offset index is linking to (something to do with mappings for Sonic) ||<br />
|-<br />
| 217FE-218AD || Unknown offset index ||<br />
|-<br />
| 218AE-21AFD || Data that offset index is linking to (something to do with mappings for Sonic) ||<br />
|-<br />
| 21AFE-2BC1D || Patterns for Sonic || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 2BC1E || Smoke/dust trail || Art compression<BR>00, 16 blocks<br />
|-<br />
| 2BD22 || Stars || Art compression<BR>00, 3 blocks<br />
|-<br />
| 2BD5C || Bubble || Art compression<BR>27 blocks<br />
|-<br />
| 2BEF2 || Stars from invincibility || Art compression<BR>00, 36 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2C03A || Three different sized air bubbles, and a picture of Sonic holding his breath. || Art compression<BR>15 blocks<br />
|-<br />
| 2C144 || Projectile that stone head shoots at you in LZ || Art compression<BR>00, 3 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2C196 || Original special stage entrance effect || Art compression<BR>00, 59 blocks<br />
|-<br />
| 2C5E4 || Block in special stage from every angle it rotates to || Art compression<BR>249 blocks<br />
|-<br />
| 2D050 || Background of special stage || Art compression<BR>241 blocks<br />
|-<br />
| 2DFE0 || Bubbles/clouds in background of special stage || Art compression<BR>00, 81 blocks<br />
|-<br />
| 2E4D4 || "Goal" block from special stage || Art compression<BR>18 blocks<br />
|-<br />
| 2E5C2 || "R" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2E692 || Sonic life block from special stage || Art compression<BR>00, 9 blocks<br />
|-<br />
| 2E788 || Stars from getting emerald in special stage || Art compression<BR>00, 9 blocks<br />
|-<br />
| 2E7E6 || Closed one way block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2E878 || "Zone 1" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2E93A || "Zone 2" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2EA08 || "Zone 3" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2EAD4 || "Zone 4" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2EB9C || "Zone 5" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2EC66 || "Zone 6" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| 23D36 || "Up/Down" block from special stage || Art compression<BR>27 blocks<br />
|-<br />
| 2EF2A || 4 emeralds present in special stage || Art compression<BR>16 blocks<br />
|-<br />
| 2F092 || One way block from special stage || Art compression<BR>00, 9 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2F142 || "W" block from special stage || Art compression<BR>9 blocks<br />
|-<br />
| 2F21C || Desroyable blocks from special stage || Art compression<BR>9 blocks<br />
|-<br />
| 2F2A0 || Different 4 emeralds present in special stage || Art compression<BR>16 blocks<br />
|-<br />
| 2F41E || Stalk of flower || Art compression<BR>00, 4 blocks<br />
|-<br />
| 2F468 || Swinging platform || Art compression<BR>14 blocks<br />
|-<br />
| 2F582 || Rope bridge in EHZ || Art compression<BR>00, 10 blocks<br />
|-<br />
| [[Image:Reddot.gif]]2F66E || 2x2 block || Art compression<BR>4 blocks<br />
|-<br />
| 2F6B6 || Ball that is swung by robotnic in GHZ || Art compression<BR>38 blocks<br />
|-<br />
| 2F854 || Vertical and horizontal spike || Art compression<BR>8 blocks<br />
|-<br />
| 2F8D0 || Rotating spike log in GHZ || Art compression<BR>44 blocks<br />
|-<br />
| 2FAE4 || Rotating spikes off log in GHZ || Art compression<BR>18 blocks<br />
|-<br />
| 2FC10 || Rock in EHZ || Art compression<BR>24 blocks<br />
|-<br />
| 2FD3E || Destroyable section of wall in GHZ || Art compression<BR>12 blocks<br />
|-<br />
| 2FDDC || Normal section of wall in GHZ || Art compression<BR>12 blocks<br />
|-<br />
| 2FE3C || Surface of water in LZ || Art compression<BR>00, 16 blocks<br />
|-<br />
| 2FF60 || Waterfall and water || Art compression<BR>00, 144 blocks<br />
|-<br />
| 30754 || Swinging spikeball || Art compression<BR>00, 24 blocks<br />
|-<br />
| 308D4 || Flat and diagonal blocks from SBZ || Art compression<BR>32 blocks<br />
|-<br />
| 30A3E || Bubbles and numbers for underwater || Art compression<BR>00, 116 blocks<br />
|-<br />
| 31094 || Block from LZ || Art compression<BR>8 blocks<br />
|-<br />
| 3114A || Another block from LZ || Art compression<BR>8 blocks<br />
|-<br />
| 311EC || Horizontal and vertical spear in LZ that extends and retracts || Art compression<BR>18 blocks<br />
|-<br />
| 31348 || Broken bar from LZ || Art compression<BR>8 blocks<br />
|-<br />
| 313AC || Block from LZ || Art compression<BR>16 blocks<br />
|-<br />
| 314FE || Wheel from LZ || Art compression<BR>72 blocks<br />
|-<br />
| 319E0 || Head that launches projectile in LZ || Art compression<BR>17 blocks<br />
|-<br />
| 31B50 || Level blocks from LZ || Art compression<BR>104 blocks<br />
|-<br />
| 31E08 || More blocks from LZ || Art compression<BR>24 blocks<br />
|-<br />
| 31F40 || Cork block from LZ || Art compression<BR>16 blocks<br />
|-<br />
| 3206A || A block from LZ || Art compression<BR>16 blocks<br />
|-<br />
| 3217A || Metal blocks from MZ || Art compression<BR>69 blocks<br />
|-<br />
| 32408 || Button in LZ and MZ || Art compression<BR>8 blocks<br />
|-<br />
| 324C6 || Ball that swinging platform attaches to in MZ || Art compression<BR>26 blocks<br />
|-<br />
| [[Image:Reddot.gif]]3257E || Unknown. Grass... or something || Art compression<BR>6 blocks<br />
|-<br />
| 325D2 || Fireballs from MZ || Art compression<BR>44 blocks<br />
|-<br />
| 328B0 || Lava stuff from MZ || Art compression<BR>156 blocks<br />
|-<br />
| 331C6 || Moveable block from MZ || Art compression<BR>24 blocks<br />
|-<br />
| 3332A || Block in background frm MZ || Art compression<BR>00, 16 blocks<br />
|-<br />
| 33978 || Metal block from SLZ || Art compression<BR>00, 8 blocks<br />
|-<br />
| 333B2 || See-saw from SLZ || Art compression<BR>44 blocks<br />
|-<br />
| 335EE || Spikeballs that flash red and explode that robotnic drops in SLZ || Art compression<BR>00, 18 blocks<br />
|-<br />
| 33734 || Fan from SLZ || Art compression<BR>44 blocks<br />
|-<br />
| 339DA || Pylon from SLZ || Art compression<BR>16 blocks<br />
|-<br />
| 33ABC || Spikeball from SLZ || Art compression<BR>32 blocks<br />
|-<br />
| 33C9E || Misc blocks for SLZ || Art compression<BR>00, 16 blocks<br />
|-<br />
| 33DAA || Fireball launcher from SLZ || Art compression<BR>8 blocks<br />
|-<br />
| 33E4E || Bumper from special stage and SYZ || Art compression<BR>22 blocks<br />
|-<br />
| 33FB8 || Small spikeball || Art compression<BR>00, 4 blocks<br />
|-<br />
| 3401A || Normal button pressed/unpressed, and red button unpressed || Art compression<BR>12 blocks<br />
|-<br />
| 340FC || Spikeball and chain || Art compression<BR>36 blocks<br />
|-<br />
| 3438A || Indent on spinning wheel in SBZ || Art compression<BR>4 blocks<br />
|-<br />
| 343DE || Platforms from SBZ || Art compression<BR>79 blocks<br />
|-<br />
| 3467A || Pizza slicer thing from SBZ || Art compression<BR>36 blocks<br />
|-<br />
| 3487E || Stomper from SBZ || Art compression<BR>40 blocks<br />
|-<br />
| 34A1C || Tilting platform from SBZ || Art compression<BR>00, 48 blocks<br />
|-<br />
| 34D4C || Some blocks from SBZ || Art compression<BR>49 blocks<br />
|-<br />
| 34F2A || Metal block from collapsing platform in SBZ || Art compression<BR>00, 4 blocks<br />
|-<br />
| 34F82 || Zapper thing from SPZ || Art compression<BR>00, 20 blocks<br />
|-<br />
| 35102 || Blocks from SBZ || Art compression<BR>28 blocks<br />
|-<br />
| 35200 || Flame pipes from SBZ || Art compression<BR>28 blocks<br />
|-<br />
| 3538C || One way barrier frm SBZ || Art compression<BR>8 blocks<br />
|-<br />
| 353DC || Red and metal platforms from SBZ || Art compression<BR>15 blocks<br />
|-<br />
| 35434 || Blocks from SBZ || Art compression<BR>00, 15 blocks<br />
|-<br />
| 35530 || Metal blocks from SBZ || Art compression<BR>00, 12 blocks<br />
|-<br />
| 35646 || Pig badnick || Art compression<BR>47 blocks<br />
|-<br />
| 35A06 || Crab badnick || Art compression<BR>00, 68 blocks<br />
|-<br />
| 35EF4 || Buzz bomber || Art compression<BR>55 blocks<br />
|-<br />
| 3629A || Fireball || Art compression<BR>36 blocks<br />
|-<br />
| 36482 || Drill noze badnick from LZ || Art compression<BR>00, 90 blocks<br />
|-<br />
| 36B6C || Fish badnick from GHZ || Art compression<BR>32 blocks<br />
|-<br />
| 36DD4 || Fish badnick from LZ || Art compression<BR>32 blocks<br />
|-<br />
| 3705E || Enemy that can enter a ball from SYZ || Art compression<BR>80 blocks<br />
|-<br />
| 37582 || Driving enemy from GHZ || Art compression<BR>00, 29 blocks<br />
|-<br />
| 3780C || Enemy that appears and jets along the ground || Art compression<BR>00, 85 blocks<br />
|-<br />
| 37E2A || Enemy with spikes on top || Art compression<BR>61 blocks<br />
|-<br />
| 38212 || Bat || Art compression<BR>00, 41 blocks<br />
|-<br />
| [[Image:Reddot.gif]]3850E || Splats badnick || Art compression<BR>29 blocks<br />
|-<br />
| 38756 || Walking bomb || Art compression<BR>41 blocks<br />
|-<br />
| 389EE || Enemy with spikeballs around it || Art compression<BR>31 blocks<br />
|-<br />
| 38BCC || Caterkiller || Art compression<BR>16 blocks<br />
|-<br />
| 38D5A || Level splash screen tiles || Art compression<BR>128 blocks<br />
|-<br />
| 39368 || Rings/Score/Time patterns || Art compression<BR>24 blocks<br />
|-<br />
| 3945E || Sonic life counter patterns || Art compression<BR>12 blocks<br />
|-<br />
| 39564 || Patterns for rings || Art compression<BR>00, 14 blocks<br />
|-<br />
| 39658 || Monitor/contents of monitor patterns || Art compression<BR>64 blocks<br />
|-<br />
| 39AB8 || Explosion || Art compression<BR>96 blocks<br />
|-<br />
| 3A11E || Points popping up onscreen from busting badnick || Art compression<BR>9 blocks<br />
|-<br />
| 3A1CE || "Game over" text || Art compression<BR>34 blocks<br />
|-<br />
| 3A360 || Horizontal Spring || Art compression<BR>00, 16 blocks<br />
|-<br />
| 3A462 || Vertical spring || Art compression<BR>00, 14 blocks<br />
|-<br />
| 3A53E || End of level signpost || Art compression<BR>58 blocks<br />
|-<br />
| 3A9BA || Starpoll || Art compression<BR>10 blocks<br />
|-<br />
| 3AA7A || Flash from entering giant golden ring || Art compression<BR>84 blocks<br />
|-<br />
| 3ABEE || Hidden points at end of levels || Art compression<BR>00, 36 blocks<br />
|-<br />
| 3AEF0 || Sonic lying down anomation in "Continue?" screen || Art compression<BR>37 blocks<br />
|-<br />
| 3B1A0 || "Continue" and mini sonic for it. || Art compression<BR>30 blocks<br />
|-<br />
| 3B3DA || Rabbit || Art compression<BR>00, 18 blocks<br />
|-<br />
| 3B532 || Chicken || Art compression<BR>14 blocks<br />
|-<br />
| 3B68E || Blackbird || Art compression<BR>00, 18 blocks<br />
|-<br />
| 3B80A || Seal || Art compression<BR>00, 14 blocks<br />
|-<br />
| 3B926 || Pig || Art compression<BR>18 blocks<br />
|-<br />
| 3BA5C || Bluebird || Art compression<BR>00, 14 blocks<br />
|-<br />
| 3BB96 || Squirrel || Art compression<BR>00, 18 blocks<br />
|-<br />
| 3BCF2 || GHZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 3C692 || GHZ Primary pattern block || Art compression<BR>461 blocks<br />
|-<br />
| 3DCF2 || GHZ secondary pattern block || Art compression<BR>369 blocks<br />
|-<br />
| 3F09A || GHZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 411AA || LZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 414D4 || LZ primary pattern block || Art compression<BR>454 blocks<br />
|-<br />
| 4301C || LZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 4580C || MZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 46016 || MZ primary pattern block || Art compression<BR>663 blocks<br />
|-<br />
| 4885A || MZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 4A01A || SLZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 4A7FE || SLZ primary pattern block || Art compression<BR>874 blocks<br />
|-<br />
| 4E352 || SLZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 50782 || SYZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 510F0 || SYZ primary pattern block || Art compression<BR>882 blocks<br />
|-<br />
| 5481C || SYZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 56BCC || SBZ 16x16 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 57A66 || SBZ primary pattern block || Art compression<BR>681 blocks<br />
|-<br />
| 5A212 || SBZ 256x256 block mappings || [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| 5CC62 || Robotnic's main ship || Art compression<BR>108 blocks<br />
|-<br />
| 5D4C6 || GHZ boss || Art compression<BR>00, 42 blocks<br />
|-<br />
| 5D7B0 || Egg prison || Art compression<BR>117 blocks<br />
|-<br />
| 5E034 || Robotnic || Art compression<BR>144 blocks<br />
|-<br />
| 5E860 || Stomper boss from final zone || Art compression<BR>156 blocks<br />
|-<br />
| 5EFC8 || Robotnic's ship at end of final zone || Art compression<BR>00, 76 blocks<br />
|-<br />
| 5F548 || Rocket thrust from robotnic's ship || Art compression<BR>00, 17 blocks<br />
|-<br />
| 5F668 || 7 chaos emeralds || Art compression<BR>28 blocks<br />
|-<br />
| 5F866 || Patterns for Sonic in ending sequence || Art compression<BR>323 blocks<br />
|-<br />
| 60A44 || Robotnic in Try Again screen || Art compression<BR>139 blocks<br />
|-<br />
| [[Image:Reddot.gif]]61388 || Robotnic's ship in flames and blowing up in background || Art compression<BR>00, 47 blocks<br />
|-<br />
| 61CEE || Grass and flower against both checkered and non checkered background || Art compression<BR>37 blocks<br />
|-<br />
| 61F76 || Alphabet || Art compression<BR>96 blocks<br />
|-<br />
| 62574 || "Sonic the hedgehog" writing from end of game || Art compression<BR>48 blocks<br />
|-<br />
| 627FC-628FF || Data block acting as seperator ||<br />
|-<br />
| 62900-629FF || Curve and resistance mapping || [[#Collision_definitions|Further info]]<br />
|-<br />
| 62A00-649FF || Collision array || [[#Collision_definitions|Further info]]<br />
|-<br />
| 64A00 || GHZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 64B9A || LZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 64C62 || MZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 64DF2 || SLZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 64FE6 || SYZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 651DA-65431 || SBZ 16x16 collision index || [[#Collision_definitions|Further info]]<br />
|-<br />
| 65432-66AD5 || Something to do with special stages ||<br />
|-<br />
| 66AD6-66CD5 || Waterfall tiles from GHZ || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 66CD6-670D5 || Flower with pointy petals in GHZ || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 670D6-67559 || Flower with curved petals in GHZ || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 6755A-67835 || Lava surface || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 67836-67E55 || Lava || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 67E56-68155 || Flames against stone from MZ || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 68156-68BD5 || Steam in background from SBZ || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 68BD6 || Offset index of level data || Unique offset<BR>[[#Level_layout|Further info]]<br />
|-<br />
| 68C7E || GHZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 68D74 || GHZ act 2 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 68E40 || GHZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 68F62 || GHZ act 1/2/3/ending sequence background || [[#Level_layout|Further info]]<br />
|-<br />
| 68F8C || LZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 6908E || LZ act 1/2/3/SBZ 3 background || [[#Level_layout|Further info]]<br />
|-<br />
| 69194 || LZ act 2 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69232 || LZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69350 || SBZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 6940E || MZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 694AC || MZ act 1 background || [[#Level_layout|Further info]]<br />
|-<br />
| 69526 || MZ act 2 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 695CA || MZ act 2 background || [[#Level_layout|Further info]]<br />
|-<br />
| 69660 || MZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69742 || MZ act 3 background || [[#Level_layout|Further info]]<br />
|-<br />
| 697EE || SLZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69900 || SLZ act 1/2/3 background || [[#Level_layout|Further info]]<br />
|-<br />
| 6997A || SLZ act 2 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69A6A || SLZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69B88 || SYZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69C44 || SYZ act 1/2 background || [[#Level_layout|Further info]]<br />
|-<br />
| 69C82 || SYZ act 2 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69D8A || SYZ act 3 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 69EEC || SBZ act 1 foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 6A00E || SBZ act 1 background || [[#Level_layout|Further info]]<br />
|-<br />
| 6A04C || SBZ act 2/FZ foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 6A18E || SBZ act 2/FZ background || [[#Level_layout|Further info]]<br />
|-<br />
| 6A300 || Ending sequence foreground || [[#Level_layout|Further info]]<br />
|-<br />
| 6A324-6AF63 || Giant spinning golden ring || Uncompressed<BR>[[#Uncompressed_art|Further info]]<br />
|-<br />
| 6AF64-6AFFF || Data block acting as seperator ||<br />
|-<br />
| 6B000-6B095 || Offset index of sprite locations || Unique offset<br />
|-<br />
| 6B096 || GHZ act 1/4 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6B5A0 || GHZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6BB5E || GHZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6C218 || LZ act 1 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6C686 || LZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6C9C8 || LZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6CFAA || SBZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6D442 || End of game sequence sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6D592 || MZ act 1/4 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6D8FE || MZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6DDA8 || MZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6E31E || SLZ act 1/4 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6E85E || SLZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6ECC6 || SLZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6F2A8 || SYZ act 1/4 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6F734 || SYZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 6FC9E || SYZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 702A4 || SBZ act 1/FZ sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 709E2 || SBZ act 2 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 710C0 || SBZ act 3 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 710D2 || Title screen sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 71204 || Level value 06 act 1/2/3/4 sprite locations || [[#Sprite_placement|Further info]]<br />
|-<br />
| 71360 || Unknown sprite locations (empty) || [[#Sprite_placement|Further info]]<br />
|-<br />
| 71366-7198F || Data block acting as seperator ||<br />
|-<br />
| 71A9C || Midi pointers || [[#Music/Sound_FX_pointers|Further info]]<br />
|-<br />
| 745DC || Track 00 ||<br />
|-<br />
| 74D44 || Track 01 ||<br />
|-<br />
| 75194 || Track 02 ||<br />
|-<br />
| 755F2 || Track 03 ||<br />
|-<br />
| 75A60 || Track 04 ||<br />
|-<br />
| 75EAC || Track 05 ||<br />
|-<br />
| 763FC || Track 06 ||<br />
|-<br />
| 765E2 || Track 07 ||<br />
|-<br />
| 766D0 || Track 08 ||<br />
|-<br />
| 769FC || Track 09 ||<br />
|-<br />
| 76BA8 || Track 0A ||<br />
|-<br />
| 76E42 || Track 0B ||<br />
|-<br />
| 7705E || Track 0C ||<br />
|-<br />
| 7727A || Track 0D ||<br />
|-<br />
| 773D0 || Track 0E ||<br />
|-<br />
| 77520 || Track 0F ||<br />
|-<br />
| 7767E || Track 10 ||<br />
|-<br />
| 7894C || Track 11 ||<br />
|-<br />
| 78A76 || Track 12 ||<br />
|-<br />
| 78B44 || Sound FX pointers || [[#Music/Sound_FX_pointers|Further info]]<br />
|-<br />
| 78C08 || Sound 00 ||<br />
|-<br />
| 78C1E || Sound 01 ||<br />
|-<br />
| 78C48 || Sound 02 ||<br />
|-<br />
| 78C68 || Sound 03 ||<br />
|-<br />
| 78C9A || Sound 04 ||<br />
|-<br />
| 78CD0 || Sound 05 ||<br />
|-<br />
| 78CFC || Sound 06 ||<br />
|-<br />
| 78D2C || Sound 07 ||<br />
|-<br />
| 78D5C || Sound 08 ||<br />
|-<br />
| 78D90 || Sound 09 ||<br />
|-<br />
| 78DA2 || Sound 0A ||<br />
|-<br />
| 78DE4 || Sound 0B ||<br />
|-<br />
| 78E04 || Sound 0C ||<br />
|-<br />
| 78E38 || Sound 0D ||<br />
|-<br />
| 78E6E || Sound 0E ||<br />
|-<br />
| 78EB8 || Sound 0F ||<br />
|-<br />
| 78EE6 || Sound 10 ||<br />
|-<br />
| 78F18 || Sound 11 ||<br />
|-<br />
| 78F44 || Sound 12 ||<br />
|-<br />
| 78F94 || Sound 13 ||<br />
|-<br />
| 78FDE || Sound 14 ||<br />
|-<br />
| 7903A || Sound 15 ||<br />
|-<br />
| 79068 || Sound 16 ||<br />
|-<br />
| 79086 || Sound 17 ||<br />
|-<br />
| 790C2 || Sound 18 ||<br />
|-<br />
| 790E0 || Sound 19 ||<br />
|-<br />
| 79144 || Sound 1A ||<br />
|-<br />
| 7916C || Sound 1B ||<br />
|-<br />
| 79198 || Sound 1C ||<br />
|-<br />
| 791DA || Sound 1D ||<br />
|-<br />
| 7922E || Sound 1E ||<br />
|-<br />
| 79268 || Sound 1F ||<br />
|-<br />
| 792DA || Sound 20 ||<br />
|-<br />
| 79308 || Sound 21 ||<br />
|-<br />
| 79342 || Sound 22 ||<br />
|-<br />
| 7936C || Sound 23 ||<br />
|-<br />
| 793E6 || Sound 24 ||<br />
|-<br />
| 7940E || Sound 25 ||<br />
|-<br />
| 79476 || Sound 26 ||<br />
|-<br />
| 794B8 || Sound 27 ||<br />
|-<br />
| 794E6 || Sound 28 ||<br />
|-<br />
| 794F8 || Sound 29 ||<br />
|-<br />
| 79526 || Sound 2A ||<br />
|-<br />
| 79554 || Sound 2B ||<br />
|-<br />
| 795A0 || Sound 2C ||<br />
|-<br />
| 795DA || Sound 2D ||<br />
|-<br />
| 795E8 || Sound 2E ||<br />
|-<br />
| 79616 || Sound 2F ||<br />
|-<br />
| 7964E || Sound 30 ||<br />
|-<br />
| 79687-7FFFF || Sega intro sound || 16000Hz mono<BR>8-bit unsigned<BR>PCM raw audio<BR>[[#Sega_intro_sound|Further info]]<br />
|}<br />
<br />
==Offset indexes==<br />
An offset index is a handy way of keeping a block of data grouped together, and also replacing a whole heap of pointers. The way it works is there is a list of two byte vaues, and depending on the block of data the game wants to load, it will take one of those values and add it to the starting address of the offset index. The most common usage is for every act of every level value, there is an offset that acts as the pointer to the block of data to use for it. Lets look at an example:<br />
<br />
E6800: 004A 037A 5552 5552 5552 5552 5552 5552 0734 0BC0 10EE 10EE 1748 1AFC<br />
<br />
Now this is the beginning of the offset index for the sprite locations in the S2 rom. Now, can you see which values are the offset for MTZ act 2? They're 0BC0. All you had to do to get that was to take the level value for MTZ, which is 04, and count across four bytes for every value it is above 00, then across another two because it's the second act. Now we take that value and using a hex calculator, add it to the address of the offset table, which is E6800. That will give us a value of E73C0, which is the address in the rom of the MTZ act 2 sprite locations.<br />
<br />
There are other forms of an offset index such as the one where there's just one offset per level value, and another type that actually uses a double offset index. The first is easy enough, but a double offset index will specify two values per level, but that's not for act one and two, but rather two blocks of data to use for both acts.<br />
<br />
==Main level load block==<br />
These are the blocks that tie all the pieces for a level together. Pretty much everything major to do with a level is linked back to this block at some point.<br />
<br />
One thing that's very imporant to understand is that the game engine used in S1 was not completed. It looks like some things that Yuji Naka planned to implement were not completed due to lack of time. Some of these things show up in the main level load block. First of all, the pointer to the main level patterns in this block is not used by the game at all. Instead the main level patterns are included on the pattern load cue for that level. In S2 another compression format was made, and the main level patterns were stored in this format, which was less dence to allow the main level patterns to be loaded into the VRAM faster, and for that this pointer was used. Several other things that were only to use one byte were also allowed for in this block, such as the music track to play for that level. Some of these were later moved to seperate sections of the code though, so only the pattern load cue and palette index numbers are used.<br />
<br />
Here's the main level load block for MZ:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| colSpan=2 | 0804<br />
| colSpan=2 | 6016<br />
| colSpan=2 | 0904<br />
| colSpan=2 | 580C<br />
| colSpan=2 | 0004<br />
| colSpan=2 | 885A<br />
| colSpan=2 | 0083<br />
| colSpan=2 | 0606<br />
|-<br />
| <span style="color: red">1</span><br />
| <span style="color: green">2</span><br />
| <span style="color: green">3</span><br />
| <span style="color: green">4</span><br />
| <span style="color: blue">5</span><br />
| <span style="color: yellow">6</span><br />
| <span style="color: yellow">7</span><br />
| <span style="color: yellow">8</span><br />
| <span style="color: pink">9</span><br />
| <span style="color: aqua">A</span><br />
| <span style="color: aqua">B</span><br />
| <span style="color: aqua">C</span><br />
| <span style="color: orange">D</span><br />
| <span style="color: orange">E</span><br />
| <span style="color: orange">F</span><br />
| <span style="color: lime">10</span><br />
|}<br />
<br />
And here's what each byte does:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| <span style="color: red">1</span><br />
| Index number of first pattern load cue<br />
| [[#Pattern_load_cues|Further info]]<br />
|-<br />
| <span style="color: green">2-4</span><br />
| Main level patterns<br />
| Unused<br />
|-<br />
| <span style="color: blue">5</span><br />
| Index number of second pattern load cue<br />
| [[#Pattern_load_cues|Further info]]<br />
|-<br />
| <span style="color: yellow">6-8</span><br />
| 16x16 block mappings<br />
| [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| <span style="color: pink">9</span><br />
| Blank<br />
| Unused<br />
|-<br />
| <span style="color: aqua">A-C</span><br />
| 256x256 block mappings<br />
| [[#Main_level_block_mappings|Further info]]<br />
|-<br />
| <span style="color: orange">D</span><br />
| Blank<br />
| Unused<br />
|-<br />
| <span style="color: orange">E</span><br />
| Music track to play for level<br />
| Unused<br />
|-<br />
| <span style="color: orange">F</span><br />
| Unknown<br />
| Unused<br />
|-<br />
| <span style="color: lime">10</span><br />
| Index number of palette to use for level<br />
| [[#Palettes|Further info]]<br />
|}<br />
<br />
Now that you know that, here's a breakdown of the main level load blocks in <br />
the S1 rom: <br />
<br />
:1D5A2: Main level load blocks (patterns/16x16/256x256/palette)<br />
<br />
::1D5A2-1D5B1: Green hill zone (00)<br />
<br />
:::1D5A2: GHZ main level patterns (3DCF2) [04]<br />
:::1D5A6: GHZ 16x16 block mappings (3BCF2) [05]<br />
:::1D5AA: GHZ 256x256 bock mappings (3F09A) [00]<br />
:::1D5AE: GHZ main level palette (04) [00 81 04]<br />
<br />
::1D5B2-1D5C1: Labyrinth zone (01)<br />
<br />
:::1D5B2: LZ main level patterns (414D4) [06]<br />
:::1D5B6: LZ 16x16 block mappings (411AA) [07]<br />
:::1D5BA: LZ 256x256 block mappings (4301C) [00]<br />
:::1D5BE: LZ main level palette (05) [00 82 05]<br />
<br />
::1D5C2-1D5D1: Marble zone (02)<br />
<br />
:::1D5C2: MZ main level patterns (46016) [08]<br />
:::1D5C6: MZ 16x16 block mappings (4580C) [09]<br />
:::1D5CA: MZ 256x256 block mappings (4885A) [00]<br />
:::1D5CE: MZ main level palette (06) [00 83 06]<br />
<br />
::1D5D2-1D5E1: Star light zone (03)<br />
<br />
:::1D5D2: SLZ main level patterns (4A7FE) [0A]<br />
:::1D5D6: SLZ 16x16 block mappings (50782) [0B]<br />
:::1D5DA: SLZ 256x256 block mappins (5481C) [00]<br />
:::1D5DE: SLZ main level palette (07) [00 84 07]<br />
<br />
::1D5E2-1D5F1: Spring yard zone (04)<br />
<br />
:::1D5E2: SYZ main level patterns (510F0) [0C]<br />
:::1D5E6: SYZ 16x16 block mappings (50782) [0D]<br />
:::1D5EA: SYZ 256x256 block mappins (5481C) [00]<br />
:::1D5EE: SYZ main level palette (08) [00 85 08]<br />
<br />
::1D5F2-1D601: Scrap brain zone (05)<br />
<br />
:::1D5F2: SBZ main level patterns (57A66) [0E]<br />
:::1D5F6: SBZ 16x16 block mappings (56BCC) [0F]<br />
:::1D5FA: SBZ 256x256 block mappins (5A212) [00]<br />
:::1D5FE: SBZ main level palette (09) [00 86 09]<br />
<br />
::1D602-1D611: End of game (06)<br />
:::1D602: GHZ main level patterns (3DCF2) [00]<br />
:::1D606: GHZ 16x16 block mappings (3BCF2) [00]<br />
:::1D60A: GHZ 256256 block mappins (3F09A) [00]<br />
:::1D60E: GHZ main level palette (13) [00 86 13]<br />
<br />
I think that pretty much summs it up. Just change the vaue of the thing you want to modify to the appropriate value. If you wanted to give GHZ the MZ palette, just change the main level palette index number from 04 to 06 and it's done.<br />
<br />
==Pattern load cues==<br />
The pattern load cues are what loads all the peices of art into the VRAM that are not in the main level load block. Here's a breakdown of the pattern load cues in the S1 rom:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| 00<br />
| 1D652<br />
| Standard block 1 (starpoll/rings\score\time/life/ring/points)<br />
| (4)<br />
|-<br />
| 01<br />
| 1D672<br />
| Standard block 2 (monitor/bubble/stars)<br />
| (2)<br />
|-<br />
| 02<br />
| 1D686<br />
| Explosion (explosion)<br />
| (0)<br />
|-<br />
| 03<br />
| 1D68E<br />
| Game/Time over (game\time over)<br />
| (0)<br />
|-<br />
| 04<br />
| 1D696<br />
| GHZ (GHZ primary/GHZ secondary/stalk/rock/crabmeat/buzz bomber/fish/jet badnick/driving badnick/spikes/H spring/V spring)<br />
| (B)<br />
|-<br />
| 05<br />
| 1D6E0<br />
| GHZ (platform/bridge/wooden spikes/ball/breakable wall/wall block)<br />
| (5)<br />
|-<br />
| 06<br />
| 1D706<br />
| LZ (LZ patterns/block/blocks/waterfall/water surface/spikeball/blocks/bubbles/block/block/spear/drill badnick)<br />
| (B)<br />
|-<br />
| 07<br />
| 1D750<br />
| LZ (broken bar/block/wheel/stone head/sonic holding breath/blocks/enemy with spikeballs/fish/button/cork/spikes/H spring/V spring)<br />
| (C)<br />
|-<br />
| 08<br />
| 1D7A0<br />
| MZ (MZ patterns/metal/fireball/platform/ball/lava/buzz bomber/spikey badnick/bat/caterkiller)<br />
| (9)<br />
|-<br />
| 09<br />
| 1D7DE<br />
| MZ (button/spikes/H spring/V spring/moveable block)<br />
| (4)<br />
|-<br />
| 0A<br />
| 1D7FE<br />
| SLZ (SLZ patterns/bomb/enemy with spikeballs/fireballs/blocks/block/spikes/H spring/V spring)<br />
| (8)<br />
|-<br />
| 0B<br />
| 1D836<br />
| SLZ (see-saw/fan/pylon/spikeball/fireball launcher/spikeball)<br />
| (5)<br />
|-<br />
| 0C<br />
| 1D85C<br />
| SYZ (SYZ patterns/crabmeat/buzz bomber/spikey badnick/metal sonic)<br />
| (4)<br />
|-<br />
| 0D<br />
| 1D87C<br />
| SYZ (bumper/spikeball/spikeball/caterkiller/button/spikes/H spring/V spring)<br />
| (7)<br />
|-<br />
| 0E<br />
| 1D8AE<br />
| SBZ (SBZ patterns/stomper/barrier/blocks/pig/indent/platform/spikeball/spikewheel/flamepipe/zapper/blocks)<br />
| (B)<br />
|-<br />
| 0F<br />
| 1D8F8<br />
| SBZ (caterkiller/bomb/badnick with spikeballs/platforms/zapper/blocks/collapsing platform/tilting platform/button/spikes/H spring/V spring)<br />
| (C)<br />
|-<br />
| 10<br />
| 1D948<br />
| Title card (title card)<br />
| (0)<br />
|-<br />
| 11<br />
| 1D950<br />
| End of boss level (robotnic's ship/GHZ boss/egg prizon/bomb/spikeball/rocket thrust)<br />
| (5)<br />
|-<br />
| 12<br />
| 1D976<br />
| End of signpost level (signpost/hidden bonuses/flash)<br />
| (2)<br />
|-<br />
| 13<br />
| 1D98A<br />
| Lost warp effect (original bonus stage entry effect)<br />
| (0)<br />
|-<br />
| 14<br />
| 1D992<br />
| Special stage (bubbles\clouds/background/block/bumper/"goal"/up\down/"R"/life block/stars/closed one way block/one way block/"W"/destroyable blocks/emeralds/"zone 1"/"zone 2"/"zone 3"/"zone 4"/"zone 5"/"zone 6")<br />
| (10) [13]<br />
|-<br />
| 15<br />
| 1DA0C<br />
| GHZ animals (rabbit/bluebird)<br />
| (1)<br />
|-<br />
| 16<br />
| 1DA1A<br />
| LZ animals (blackbird/seal)<br />
| (1)<br />
|-<br />
| 17<br />
| 1DA28<br />
| MZ animals (squirrel/seal)<br />
| (1)<br />
|-<br />
| 18<br />
| 1DA36<br />
| SLZ animals (pig/bluebird)<br />
| (1)<br />
|-<br />
| 19<br />
| 1DA44<br />
| SYZ animals (pig/chicken)<br />
| (1)<br />
|-<br />
| 1A<br />
| 1DA52<br />
| SBZ animals (rabbit/chicken)<br />
| (1)<br />
|-<br />
| 1B<br />
| 1DA60<br />
| End of special stage (emeralds/continue)<br />
| (1)<br />
|-<br />
| 1C<br />
| 1DA6E<br />
| End of game sequence (GHZ primary/GHZ secondary/stalk/weird flowers/emeralds/sonic in ending sequence/robotnic dying/rabbit/chicken/blackbird/seal/pig/bluebird/squirrel/"sonic the hedgehog")<br />
| (E)<br />
|-<br />
| 1D<br />
| 1DACA<br />
| End/try again screen (emeralds/robotnic/alphabet)<br />
| (2)<br />
|-<br />
| 1E<br />
| 1DADE<br />
| End of SBZ 2 (blocks/robotnic/button)<br />
| (2)<br />
|-<br />
| 1F<br />
| 1DAF2<br />
| FZ (robotnic's ship at end/stomper boss/robotnic's ship/robotnic/rocket thrust)<br />
| (4)<br />
|}<br />
<br />
This pointer list has an offset index to locate the correct cue. Go [[#Offset_indexes|here]] for an explanation of how this works. Note that the number in parenthesis is the recorded number of requests in the cue. If a number follows it in brackets, it means the actual number that exists differs from the recorded one. This means any load requests past the recorded number were not being loaded, but still exist in the rom. Now, each load cue has a two byte value before it that specifies how many addresses are in the cue, to avoid it reading too far, and going into the next cue. This value is dead simple, just enter the number of patterns on the cue in hex between the first two bytes, but you have to count 00 as 1, so if there was 16 loading addresses in the cue, you'd have 000F preceding it. After that, there are 6 bytes per load request. The first four bytes are a pointer to the art block to use, and the two bytes after that are the location in the VRAM to load them into. To change the pattern load cues being loaded for a level, you need to change the values in the main level load block. For more information on that go [[#Main_level_load_block|here]].<br />
<br />
==Collision definitions==<br />
Ok, I’m going to explain how collision works on objects that are not sprites in the sonic games. First of all forget the image that the block contains. The image has absolutely nothing to do with the collision. There's basically in invisible collision box on top of every 16x16 block that sets what's solid and what's not. This collision box has two parts to it. The main part of it is the collision array (an array is basically a table of values). The collision array stores the actual data that says that is a block is solid in certain places. It does that through 16 bytes per collision box. To understand how those 16 bytes set what's solid, imagine a 16x16 block. Now imagine that 16x16 block with the numbers 1-10 (hex) down the side starting from the bottom and going up to the top, and starting from the left and going up as it moves right along the top, so that you can give an exact location of each pixel. (eg, the top left pixel would be 10,00) Now, in this array the first two bytes define what's solid for the row of pixels on the left side of that 16x16 block. Basically the first of those two bytes says where to start making things solid, and the second byte says where to stop making them solid. So if you entered the value 0010, the first row would be solid from the very bottom of the block all the way up to the top. If you were to enter the value 020E, there would be two pixels on either side of the block that are not solid, and everything in the middle would be. The next two bytes after that are for the next row, etc. After 16 bytes the definitions for the next collision box begin.<br />
<br />
Now, to specify which blocks use which collision boxes, there are collision indexes, which give an array location for each 16x16 block. If you look at the space used by the collision array, you can divide that by 16 (the number of bytes used by each entry into the array) to give a one byte value, which represents the maximum number of collision boxes that the array can hold in the S2 platform, which is FF. Now, for each level there is at least one 16x16 collision index, and that index consists of a whole heap of array locations, one for each 16x16 block. If for example you wanted the 9th 16x16 block to use the collision box with an array location of 3E, you would give the 9th byte of the collision index for that level a value of 3E.<br />
<br />
It is through collision indexes that the loops work in the game. It's commonly believed that there are layers, and that the sprite represented by 4 rings changes between them. This is partly true. For any levels that use multiple layers like that, there is a secondary 16x16 collision index. That object switches the 16x16 collision index in use. The pointers to these 16x16 collision indexes are stored at 4ADC-4B63. The first set of pointers in this group specify the location of the primary collision index to use for each level, and the second set specify the location of the secondary collision index to use for each level.<br />
<br />
Now just setting something as solid, doesn't give it the effect of having a slope. There's an index in the rom, which has one byte in it for each collision array location. To understand how this value works, think of two lines running parallel to each other, both with the value 0-F along them. Now, the first value of the byte gives a point on the right line, and the second value gives a point on the left line. Now imagine drawing a line between these to points. If the points are different, the resulting gradient will be taken to create the effect of a slope and the resistance going up it on the box in the corresponding collision array location.<br />
<br />
==Level layout==<br />
The level layout in S1 is broken up into two peices, one for the foreground of the level, and one for the background. When being read into the ram, this data is interleaved to give the entire level layout. The offset index that proceeds the actual level data is a unique offset index. There are three offset values for each act, and four acts for each level value. The first value is the offset to the foreground to use for that act. The value is the offset to the background to use for that act. I have no idea what the third offset was intended to be used for, but it appears that it is not used in the game, so just ignore it.<br />
<br />
==Sprite placement==<br />
Sprites are quite simple to define. It takes six bytes to define one sprite. The first two bytes are the x location of the sprite, and the next two bytes are the y location of the sprite. The 5th byte is the number on the sprite array to lookup to get the location for the function to use for the programming of that sprite, and the 6th byte is an optional declaration to use with the function for that sprite. Go [[#Sprite_programming|here]] for more info on what exactly that means, and a list of all the sprites in the S1 rom.<br />
<br />
==Main level Block mappings==<br />
In S1 both the 16x16 and 256x256 block mappings are compressed. This means that in order to edit the block mappings, you'd need to be able to decompress, alter, then recompress them. Right now there is no way to do that, so you can only use the block mapings that are in the rom unless you want to do a savestate hack. Note also that becuase S1 uses 256x256 block mappings, you can't just port the block mappings from later sonic games.<br />
<br />
==Uncompressed art==<br />
Any art that needs to be updated on the fly will not be compressed in the rom. This is because the game can't work with compressed data, and needs to extract any data it wants to use to the ram. This decompression process takes a fair bit of computation, and because of that it wouldn't be possible to create the appearance of a smooth animation using compressed data. The same reason is true as to why any data that is not loaded into the ram will always be uncompressed, because otherwise they would have to load it into the ram just to read it.<br />
<br />
Now, for example all of the blocks for Sonic are uncompressed, because they of course need to be updated quickly. You can use basically any editing utility to edit them, but you can only change what each block looks like through this. In order to edit what blocks are placed where in each of Sonic's animation frames, you need to edit the mappings for them, and for more information on that go [[#Mappings_for_Sonic|here]]. Now in their uncompressed form, you can edit them just like you would in the VRAM, so for more information on that check the sonic 1 savestate breakdown.<br />
<br />
==Mappings for Sonic==<br />
What the mappings do is they tell the game what patterns to display, and where to put them for each of the frames that the sprite has. The mappings for most sprites are contained within their function (go [[#Sprite_programming|here]] for more details), but with the sprite for Sonic, to allow the programmers to add a new frame easily without having to recompile the function, and hence the whole game because of the size difference, they created a separate array containing the mapping data for each frame. I haven't examined this to see how it works yet, but when I do I’ll explain the format here.<br />
<br />
==Sega intro sound==<br />
The Sega intro sound is just an 16000HZ wav sound. Opening up the rom in any sound editing program that supports raw audio with the settings listed next to the location on the list will enable you to playback the sound effect. You could also insert your own sound in the same place as long as it's at the same bitrate. The bitrate is to do with the quality of the sound. The lower it is the crappier it will sound, because that's to do with how often the output is modified. Just think of the difference between long play and short play on a VCR. Stuff recorded in long play does save space, but the quality of the recording is worse.<br />
<br />
==Art compression format==<br />
The art compression format is a very dense compression format. It's only used for art because the format relies on the data being in blocks of 64 bytes. This format is used for all the compressed art in sonic 1 and sonic 2 beta, and all the compressed art except for the main level pattern blocks in Sonic 2 and S3&K. As I said this format is very dense, and as such it requires a hell of a lot of computation to decompress. Because of this it also requires a hell of a lot of time and effort to crack. I've had a go at it, but the lightning has yet to strike. When I crack it I’ll post the format breakdown here, and create a simple program to decompress it, but until then it is impossible to directly edit any art using this format. The porting of a compressed block of art is simple though, so if you want to transfer beta art to the final, you can just tack it onto the end and enter the pointer into the pattern load cue of the level or event you want it to appear at, along with a VRAM location to load it into. Go [[#Pattern_load_cues|Here]] for more information on that.<br />
<br />
==Animated pattern load cues==<br />
While the function of these cues is identical to the ones in S2 and S2B, these ones are structured entirely differently, and as of yet I haven't figured the entire system of this one out. You can switch the animated pattern load cues between levels easy enough by changing the offset index preceeding them though.<br />
<br />
==Palettes==<br />
All the main palettes used in the game are linked in a pointer table at 2168. In this pointer table there are 8 bytes per palette. The first four simply give a location in the rom for the data to load. The fifth and sixth bytes give the location in the system ram to load the data into, and the seventh and eighth bytes give the number of bytes being loaded. Here's a palette pointer:<br />
<br />
0000 2942 FB20 0007<br />
<br />
Now in this case the palette is being loaded from 00002942 in the rom into the beginning of the second above water palette row (FB20), and it's loading 4 colours (0007). Here's a listing of the palette pointers in the S1 rom:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| 00<br />
| 2168<br />
| SEGA screen palette (2208)<br />
|-<br />
| 01<br />
| 2170<br />
| Title screen palette (2288)<br />
|-<br />
| 02<br />
| 2178<br />
| Level select palette (2308)<br />
|-<br />
| 03<br />
| 2180<br />
| Primary palette line (2388)<br />
|-<br />
| 04<br />
| 2188<br />
| GHZ level palette (23A8)<br />
|-<br />
| 05<br />
| 2190<br />
| LZ level palette (2408)<br />
|-<br />
| 06<br />
| 2198<br />
| MZ level palette (24E8)<br />
|-<br />
| 07<br />
| 21A0<br />
| SLZ level palette (2548)<br />
|-<br />
| 08<br />
| 21A8<br />
| SYZ level palette (25A8)<br />
|-<br />
| 09<br />
| 21B0<br />
| SBZ level palette (2608)<br />
|-<br />
| 0A<br />
| 21B8<br />
| Special stage palette (26C8)<br />
|-<br />
| 0B<br />
| 21C0<br />
| LZ underwater level palette (2468)<br />
|-<br />
| 0C<br />
| 21C8<br />
| SBZ act 3 level palette (2748)<br />
|-<br />
| 0D<br />
| 21D0<br />
| SBZ act 3 underwater level palette (27A8)<br />
|-<br />
| 0E<br />
| 21D8<br />
| FZ level palette (2668)<br />
|-<br />
| 0F<br />
| 21E0<br />
| LZ underwater primary palette line (2828)<br />
|-<br />
| 10<br />
| 21E8<br />
| SBZ act 3 underwater primary palette line (2848)<br />
|-<br />
| 11<br />
| 21F0<br />
| Special stage results palette (2868)<br />
|-<br />
| 12<br />
| 21F8<br />
| Unknown palette (28E8)<br />
|-<br />
| 13<br />
| 2200<br />
| Ending sequence level palette (2928)<br />
|}<br />
<br />
To change the palette being loaded for each level, you need to change the palette index number in the main level load block. For more information on that go here. The palettes themeslves are very easy to modify as they are all uncompressed in the rom. Refer to the savestate hacking documents for information on how to edit palettes.<br />
<br />
==Character start location array==<br />
The start location for the characters and the camera for each level are stored in this array at address 6112. It couldn't be any simpler to modify, there's just two values per act, the first being the X location, and the second being the Y location.<br />
<br />
==Music playlist for levels==<br />
The music playlist is very simple to modify. There is one byte per level value, and that byte stores the value of the music track you want to play for that level. The values for the music tracks can be obtained from the sound test in the level select screen.<br />
<br />
==Level order==<br />
There are several different sections in the game to do with the order of levels. The first one is the one that determins which level the game loads when someone finishes a level. The second one is the one which determins which level to load when you select a level from the level select menu. The level select one is easy to modify, just enter the level value followed by an act number for each of the levels you want to load, in the order you want them to be loaded. For a list of the level values for all the different stages, look at the beginning of the introduction to this page. Note that if you load the same level into the level order twice, when you link to it via the level select, it will continue the sequence from the last one in the list, not the first.<br />
<br />
The second system for which level to load when one ends works slightly differently. There is a list of values, with two bytes allocated to each act of each level. That two byte value is simply the value of the level you wish to load when that level ends. So, if you wanted LZ act 1 to load up when you finish SBZ act 2, you would take the location of the table, which in this case is C6F4, and you would add 42 bytes to that location, and then you would replace the next two bytes from that point with 0100. That's becuase you add 8 bytes to the address for every level that comes before it, and in this case there are 5, and then you would add another 2 bytes becuase you want to alter the level to load when you finish the second act.<br />
<br />
Also, note that when you want a level to be the last level in the game, you must enter the value FFFF as the stage to load when it finishes. This tells the game to end and return to the title screen.<br />
<br />
==Object debug list==<br />
This list is what determins what sprites you can place in debug mode, and in what levels. An offset index is used to locate which object debug list to use for which level, so if you want further info on that go [[#Offset_indexes|here]]. Now, there is a 2 byte value at the start of each debug list. That 2 byte value is simply the number of sprites in the list. After that there are 8 bytes per sprite. Here's an object that's present in an object debug list from sonic 2:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| colSpan=2 | 2601<br />
| colSpan=2 | 2D36<br />
| colSpan=2 | 0800<br />
| colSpan=2 | 0680<br />
|-<br />
| <span style="color: red">1</span><br />
| <span style="color: green">2</span><br />
| <span style="color: green">3</span><br />
| <span style="color: green">4</span><br />
| <span style="color: blue">5</span><br />
| <span style="color: yellow">6</span><br />
| <span style="color: pink">7</span><br />
| <span style="color: pink">8</span><br />
|}<br />
<br />
And here's a quick referance sheet of what each byte does. For further info on each one, refer to information below. <br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
|-<br />
| <span style="color: red">1</span><br />
| Object number<br />
|-<br />
| <span style="color: green">2-4</span><br />
| Sprite mappings<br />
|-<br />
| <span style="color: blue">5</span><br />
| Declaration<br />
|-<br />
| <span style="color: yellow">6</span><br />
| Frame to display<br />
|-<br />
| <span style="color: pink">7 and 8</span><br />
| flip/mirror/palette/VRAM location<br />
|}<br />
<br />
Object number:<br><br />
This value is what determins which object to use. For a list of all the sprites in the game, check out the sprite programming section of this document here. In the case of the above example the object number is 26, which is a monitor.<br />
<br />
Sprite mappings:<br><br />
This is a pointer to the location in the rom to load the mappings for that sprite. This will be located in the programming for the sprite itself. Do not change this unless porting between levels, or you're absolutely sure you know what you're doing, or the game will most likely hang. This only affects the preview picture, not the placed object itself. In this case, the sprite mappings are being loaded from the address 012D36 in the rom.<br />
<br />
Declaration:<br><br />
This is the declaration for the loading of the sprite. For information on exactly what that is, go here. In this example the declaration is 08, which switches the type of monitor it is in the case of this sprite.<br />
<br />
Frame to display:<br><br />
This is simply the frame of the sprite that will be displayed on the preview picture before you place an object. Right now it's set to 00, which is the first frame.<br />
<br />
Flip/mirror/VRAM location:<br><br />
The first hex value of the 7th byte is to do with flipping and mirroring of the sprite, as well as the palette line to use for it. Refer to the following table for an explination of what responce each value will create. <br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto; text-align: center"<br />
|-<br />
! Value<br />
! palette line<br />
! flipped horizntally<br />
! flipped vertically<br />
|-<br />
| 0<br />
| 1<br />
| n<br />
| n<br />
|-<br />
| 1<br />
| 1<br />
| n<br />
| y<br />
|-<br />
| 2<br />
| 2<br />
| n<br />
| n<br />
|-<br />
| 3<br />
| 2<br />
| n<br />
| y<br />
|-<br />
| 4<br />
| 3<br />
| n<br />
| n<br />
|-<br />
| 5<br />
| 3<br />
| n<br />
| y<br />
|-<br />
| 6<br />
| 4<br />
| n<br />
| n<br />
|-<br />
| 7<br />
| 4<br />
| n<br />
| y<br />
|-<br />
| 8<br />
| 1<br />
| n<br />
| n<br />
|-<br />
| 9<br />
| 1<br />
| y<br />
| n<br />
|-<br />
| A<br />
| 2<br />
| n<br />
| n<br />
|-<br />
| B<br />
| 2<br />
| y<br />
| n<br />
|-<br />
| C<br />
| 3<br />
| n<br />
| n<br />
|-<br />
| D<br />
| 3<br />
| y<br />
| n<br />
|-<br />
| E<br />
| 4<br />
| n<br />
| n<br />
|-<br />
| F<br />
| 4<br />
| y<br />
| n<br />
|}<br />
<br />
In the case of our example, the value of 0 is used, so the preview image will use the first palette line, and will not be flipped or mirrored.<br />
<br />
The last hex value of the 7th byte, and all of the 8th byte in this block combine to give a starting location in the VRAM to find the patterns to use for that sprite when displaying the preview. This is not an actual location, but merely the number of blocks after which to load the patterns from. After the value of 800 is passed, the block number resets to zero but the image is mirrored. In this case, that block number is 680.<br />
<br />
And that's about it. I've just realised that this is a rediculous amount of detail for such a small thing, but at least you're sure to get it.<br />
<br />
==Dynamic screen resizing==<br />
In S1, the programmers allowed for some very fancy effects to do with the height and width of the sceen. They allowed for the X/Y start, and X/Y ending locations to be changed at any point during the level, based on any event they cared to use. The method they used made the programmers job a little harder though and ate away some performance. They completely redesigned the way this worked for the S2 platform. All the programming for the screen resizing is compiled, so it's very difficult to edit directly.<br />
<br />
==Music/Sound FX pointers==<br />
The music and sound effects in S1 are very easy to change. Note that the midi's in the game start at a sound value of 80, and the sound effects start at a value of A0. If you want to determine the value of the sound or midi you want to work with, just read it staright off the sound test in the level select menu. The pointers to the midi's are at address 71A9C, and the pointers for the sound ffects are at 78B44. Both are simply 4 byte pointers to the address in the rom that the data is located at, so to find the pointer to the sound or midi you want to edit, add 4 bytes to the starting address of the pointer list for every sound or midi that comes before it after it's starting value. To switch a track, just switch thier pointer values. <br />
<br />
==Sprite programming==<br />
The programming for a sprite in the sonic games are stored as a function, and that function can take one declaration. People often confuse this declaration with a subtype value, but it's not really. What that basically means for the non programmers out there is that when the game places a sprite, you can enter a value along with the sprite number that may alter something about that sprite, but what it does varies depending on what sprite you're working with. Now because these functions are now compiled, the only way you can effectively edit them is to find the code for it and decompile it into assembly, alter it as necessary, and then recompile it and enter it back into the rom. This document will contain all the info necessary to enter a new sprite or replace an old one, but when it comes to the ASM you're on your own.<br />
<br />
Now, the value assigned to a sprite in the game is done by a pointer index at D382. It’s pretty simple, just one pointer per address value. Here's the pointer list in Sonic 1:<br />
<br />
{| class="prettytable" style="width: 100%"<br />
|-<br />
| 01<br />
| D382<br />
| Sonic [12BD8]<br />
|-<br />
| 02<br />
| D386<br />
| ??????? [D5B2]<br />
|-<br />
| 03<br />
| D38A<br />
| ??????? [D5B2]<br />
|-<br />
| 04<br />
| D38E<br />
| ??????? [D5B2]<br />
|-<br />
| 05<br />
| D392<br />
| ??????? [D5B2]<br />
|-<br />
| 06<br />
| D396<br />
| ??????? [D5B2]<br />
|-<br />
| 07<br />
| D39A<br />
| ??????? [D5B2]<br />
|-<br />
| 08<br />
| D39E<br />
| ??????? [142F0]<br />
|-<br />
| 09<br />
| D3A2<br />
| Sonic in special stage [1B984]<br />
|-<br />
| 0A<br />
| D3A6<br />
| ??????? [13C98]<br />
|-<br />
| 0B<br />
| D3AA<br />
| Bar you hold onto in LZ [11206]<br />
|-<br />
| 0C<br />
| D3AE<br />
| Opening blocks that open to pasage sonic gets sucked down in LZ [11346]<br />
|-<br />
| 0D<br />
| D3B2<br />
| Unknown. Warps you to somewhere. [EB28]<br />
|-<br />
| 0E<br />
| D3B6<br />
| ??????? [A61C]<br />
|-<br />
| 0F<br />
| D3BA<br />
| ??????? [A69C]<br />
|-<br />
| 10<br />
| D3BE<br />
| ??????? [1C022]<br />
|-<br />
| 11<br />
| D3C2<br />
| ??????? [7328]<br />
|-<br />
| 12<br />
| D3C6<br />
| Spinning light behind glass from SYZ [E90C]<br />
|-<br />
| 13<br />
| D3CA<br />
| Fireball from MZ [E296]<br />
|-<br />
| 14<br />
| D3CE<br />
| Unknown. Dives through the floor. [E304]<br />
|-<br />
| 15<br />
| D3D2<br />
| Swinging spikeball on a chain from SBZ [7952]<br />
|-<br />
| 16<br />
| D3D6<br />
| Spear from LZ [11F04]<br />
|-<br />
| 17<br />
| D3DA<br />
| Unknown. Flashes between hitable and not hitable, but you can't hurt it, only the other way around. Frame changes in accordance with this. [7CA2]<br />
|-<br />
| 18<br />
| D3DE<br />
| Misc standard platforms [7E32]<br />
|-<br />
| 19<br />
| D3F2<br />
| ??????? [81A8]<br />
|-<br />
| 1A<br />
| D3F6<br />
| Collapsable platform [8210]<br />
|-<br />
| 1B<br />
| D3FA<br />
| ??????? [110C6]<br />
|-<br />
| 1C<br />
| D3FE<br />
| Fireball launcher from SLZ [87CA]<br />
|-<br />
| 1D<br />
| D402<br />
| ??????? [885E]<br />
|-<br />
| 1E<br />
| D406<br />
| Double big red explosion [8B4C]<br />
|-<br />
| 1F<br />
| D40A<br />
| Crab enemy from GHZ and SYZ [94F0]<br />
|-<br />
| 20<br />
| D40E<br />
| Big red explosion [8C1C]<br />
|-<br />
| 21<br />
| D412<br />
| Unknown. It just sits there. [1C548]<br />
|-<br />
| 22<br />
| D416<br />
| Buzz bomber [97DE]<br />
|-<br />
| 23<br />
| D41A<br />
| Unknown. Sprite sits there and flashes. [9932]<br />
|-<br />
| 24<br />
| D41E<br />
| Unknown. Sprite changes frame and disappears. [8CF2]<br />
|-<br />
| 25<br />
| D422<br />
| Ring [9B26]<br />
|-<br />
| 26<br />
| D426<br />
| Monitor [A118]<br />
|-<br />
| 27<br />
| D42A<br />
| Normal explosion [8D62]<br />
|-<br />
| 28<br />
| D42E<br />
| Unknown. Edges along grund at a terminal rate. As soon (as in immediately) as it leaves the screen it disappears. [8F22]<br />
|-<br />
| 29<br />
| D432<br />
| ??????? [9412]<br />
|-<br />
| 2A<br />
| D436<br />
| One way barrier from SBZ [8934]<br />
|-<br />
| 2B<br />
| D43A<br />
| Unknown. Sprite moves off bottom of screen. [AB20]<br />
|-<br />
| 2C<br />
| D43E<br />
| Unknown. Sprite changes a few frames, then sits there moving quickly back and forth in a small area. [ABDA]<br />
|-<br />
| 2D<br />
| D442<br />
| Drill badnick in LZ [ACA4]<br />
|-<br />
| 2E<br />
| D446<br />
| Contents of monitor flying up frm monitor being busted [A302]<br />
|-<br />
| 2F<br />
| D44A<br />
| Platfrom in MZ that moves up and down [AEB8]<br />
|-<br />
| 30<br />
| D44E<br />
| Unknown. Big block. [B39E]<br />
|-<br />
| 31<br />
| D452<br />
| Metal block with spikes on bottom from MZ [B67C]<br />
|-<br />
| 32<br />
| D456<br />
| Button [BD2E]<br />
|-<br />
| 33<br />
| D45A<br />
| Moveable block in MZ and LZ [BED2]<br />
|-<br />
| 34<br />
| D45E<br />
| Title card [C306]<br />
|-<br />
| 35<br />
| D462<br />
| ??????? [B1DC]<br />
|-<br />
| 36<br />
| D466<br />
| Spikes [CE28]<br />
|-<br />
| 37<br />
| D46A<br />
| Rings flying out from being hit [9CB6]<br />
|-<br />
| 38<br />
| D46E<br />
| ??????? [14158]<br />
|-<br />
| 39<br />
| D472<br />
| "Game over" sprite [C4B8]<br />
|-<br />
| 3A<br />
| D476<br />
| End of level results screen [C572]<br />
|-<br />
| 3B<br />
| D47A<br />
| Rock from GHZ [D050]<br />
|-<br />
| 3C<br />
| D47E<br />
| Breakable barrier from GHZ [D11C]<br />
|-<br />
| 3D<br />
| D482<br />
| Robotnic in his primary ship [17700]<br />
|-<br />
| 3E<br />
| D486<br />
| Egg prison [1AB22]<br />
|-<br />
| 3F<br />
| D48A<br />
| Large explosion [8DF6]<br />
|-<br />
| 40<br />
| D48E<br />
| Motobug from GHZ [F61A]<br />
|-<br />
| 41<br />
| D492<br />
| Red spring [DABE]<br />
|-<br />
| 42<br />
| D496<br />
| Badnick that appears behind wall and fires projectile from GHZ [DD68]<br />
|-<br />
| 43<br />
| D49A<br />
| Metal dude that goes in a ball like sonic from SYZ [DFFA]<br />
|-<br />
| 44<br />
| D49E<br />
| Wall barrier from GHZ [E1D4]<br />
|-<br />
| 45<br />
| D4A2<br />
| Sideways spikes that were cut in MZ [B99A]<br />
|-<br />
| 46<br />
| D4A6<br />
| Block from MZ [E7D0]<br />
|-<br />
| 47<br />
| D4AA<br />
| Bumper [E9D0]<br />
|-<br />
| 48<br />
| D4AE<br />
| Large ball from GHZ that was cut [17AE4]<br />
|-<br />
| 49<br />
| D4B2<br />
| ??????? [D0BE]<br />
|-<br />
| 4A<br />
| D4B6<br />
| Unknown. Some sort of teleport effect. Most likely belongs to those lost patterns. [14254]<br />
|-<br />
| 4B<br />
| D4BA<br />
| Large golden ring [9E06]<br />
|-<br />
| 4C<br />
| D4BE<br />
| Lava spurt with lava ripples [ED84]<br />
|-<br />
| 4D<br />
| D4C2<br />
| Lava spurt [EE70]<br />
|-<br />
| 4E<br />
| D4C6<br />
| Lava wave from MZ [F05E]<br />
|-<br />
| 4F<br />
| D4CA<br />
| ??????? [F806]<br />
|-<br />
| 50<br />
| D4CE<br />
| That ground based badnick with spikes ontop from SYZ [F83A]<br />
|-<br />
| 51<br />
| D4D2<br />
| Breakable block in MZ [FC92]<br />
|-<br />
| 52<br />
| D4D6<br />
| Misc platforms [FDF8]<br />
|-<br />
| 53<br />
| D4DA<br />
| Platform made up of small blocks that collapses [8320]<br />
|-<br />
| 54<br />
| D4DE<br />
| Sprite for lava hurting you [F1B8]<br />
|-<br />
| 55<br />
| D4E2<br />
| Bat from MZ [100A8]<br />
|-<br />
| 56<br />
| D4E6<br />
| Block from SYZ [10286]<br />
|-<br />
| 57<br />
| D4EA<br />
| Unknown. A small sprite with a small collision box that hurts you, but you can't bust it. [10782]<br />
|-<br />
| 58<br />
| D4EE<br />
| Same as above, but different image [10976]<br />
|-<br />
| 59<br />
| D502<br />
| Raising platforms from SLZ [10AD2]<br />
|-<br />
| 5A<br />
| D506<br />
| Platform moving in circular motion in SLZ [10D5A]<br />
|-<br />
| 5B<br />
| D50A<br />
| Lowering staircase from SLZ [10E90]<br />
|-<br />
| 5C<br />
| D50E<br />
| Pylon in foreground frm SLZ [11044]<br />
|-<br />
| 5D<br />
| D512<br />
| Fan from SLZ [114FC]<br />
|-<br />
| 5E<br />
| D516<br />
| See saw [1163C]<br />
|-<br />
| 5F<br />
| D51A<br />
| Walking bomb [119F6]<br />
|-<br />
| 60<br />
| D51E<br />
| Badnick surrounded by spikeballs that shoots them at you [11CCE]<br />
|-<br />
| 61<br />
| D522<br />
| Misc blocks from LZ [11FD4]<br />
|-<br />
| 62<br />
| D526<br />
| Stone head that launches projectile in LZ [121E8]<br />
|-<br />
| 63<br />
| D52A<br />
| Rotating wheel in LZ [1233C]<br />
|-<br />
| 64<br />
| D52E<br />
| Small bubble [126A4]<br />
|-<br />
| 65<br />
| D532<br />
| moving water sprites from LZ [12A9E]<br />
|-<br />
| 66<br />
| D536<br />
| Spinning wheel in SBZ that shoots you off in different directions [1509A]<br />
|-<br />
| 67<br />
| D53A<br />
| Spinning circle on wheel from SBZ [154E2]<br />
|-<br />
| 68<br />
| D53E<br />
| ??????? [1568E]<br />
|-<br />
| 69<br />
| D542<br />
| Various platforms from SBZ [15730]<br />
|-<br />
| 6A<br />
| D546<br />
| Giant pizza slicer thing from SBZ [1597C]<br />
|-<br />
| 6B<br />
| D54A<br />
| Misc blocks in SBZ [15C12]<br />
|-<br />
| 6C<br />
| D54E<br />
| Spikewheel from SBZ that runs through floor [15FF8]<br />
|-<br />
| 6D<br />
| D552<br />
| Unknown. Looks like flamepipe frm SBZ [E4E0]<br />
|-<br />
| 6E<br />
| D556<br />
| Broken pipe that lets out fire from SBZ [16146]<br />
|-<br />
| 6F<br />
| D55A<br />
| ??????? [1626A]<br />
|-<br />
| 70<br />
| D55E<br />
| Big moving rectangle in SBZ [1652A]<br />
|-<br />
| 71<br />
| D562<br />
| Unknown. A collsion box but no image. [1141A]<br />
|-<br />
| 72<br />
| D566<br />
| Unknown. A spin tube? [16668]<br />
|-<br />
| 73<br />
| D56A<br />
| Robotnic flying his default ship. [18230]<br />
|-<br />
| 74<br />
| D56E<br />
| Unknown. Changes frames back and forth for awhile, and it can hurt you but you can't hurt it, then it diappears. [186A4]<br />
|-<br />
| 75<br />
| D572<br />
| ??????? [190EE]<br />
|-<br />
| 76<br />
| D576<br />
| ??????? [19692]<br />
|-<br />
| 77<br />
| D57A<br />
| ??????? [17E36]<br />
|-<br />
| 78<br />
| D57E<br />
| Catakiller [16934]<br />
|-<br />
| 79<br />
| D582<br />
| Starpoll [16E2E]<br />
|-<br />
| 7A<br />
| D586<br />
| ??????? [188B8]<br />
|-<br />
| 7B<br />
| D58A<br />
| Unknown. Makes flashing stuff appear at top of screen [18CCE]<br />
|-<br />
| 7C<br />
| D58E<br />
| Special stage entry effect [9ED6]<br />
|-<br />
| 7D<br />
| D592<br />
| ??????? [1715E]<br />
|-<br />
| 7E<br />
| D596<br />
| End of special stage results screen [C7AE]<br />
|-<br />
| 7F<br />
| D59A<br />
| Bubble [C956]<br />
|-<br />
| 80<br />
| D59E<br />
| Continue screen [4E42]<br />
|-<br />
| 81<br />
| D5A2<br />
| ??????? [4F5C]<br />
|-<br />
| 82<br />
| D5A6<br />
| ??????? [19832]<br />
|-<br />
| 83<br />
| D5AA<br />
| ??????? [19B60]<br />
|-<br />
| 84<br />
| D5AE<br />
| ??????? [1A44E]<br />
|-<br />
| 85<br />
| D5B2<br />
| ??????? [19D58]<br />
|-<br />
| 86<br />
| D5B6<br />
| ??????? [1A7DA]<br />
|-<br />
| 87<br />
| D5BA<br />
| ??????? [53E2]<br />
|-<br />
| 88<br />
| D5BE<br />
| ??????? [553C]<br />
|-<br />
| 89<br />
| D5C2<br />
| ??????? [5616]<br />
|-<br />
| 8A<br />
| D5C6<br />
| ??????? [17264]<br />
|-<br />
| 8B<br />
| D5CA<br />
| ??????? [59E2]<br />
|-<br />
| 8C<br />
| D5CE<br />
| ??????? [5AC2]<br />
|}<br />
<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s1]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s2&diff=96177SCHG:Nem s22009-01-09T01:49:19Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>==Introduction==<br />
Here are my hacking notes on the Sonic 2 rom. If you use these notes I'd appreciate it if you would mention it with your hack or your utility, so that other people can find their way here. For hex editing I recommend you use a hex utility called Hex workshop, and for emulators I recommend you get both Gens and Genecyst. Genecyst may be old and kinda crap, but it has a whole heap of debug outputs that really help when it comes to seeing exactly what it's doing and when.<P><br><br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1's and 0's. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it doesn’t it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1's and 0's, so to make it simpler it deals with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent their values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a hexadecimal value (hex value for short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an ASCII table, which will convert that value into a recognisable character (Eg. a byte value of 73 becomes a lowercase s on an English ASCII table). You will practically never touch the ASCII version of the code in hacking though.</P><br><P><br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be necessary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the value, you will in fact end up with 80, because that value you are entering is actually a hex value, but if you use the base converter to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values.</P><br><P><br />
Another thing you need to know is that each level in Sonic 2 has a value assigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values in Sonic 2:</P><BR><br />
{|align="center" border="1"<br />
|00||Emerald Hill zone<br />
|-<br />
|04||Metropolis zone<br />
|-<br />
|05||Metropolis zone act 3<br />
|-<br />
|06||Wing fortress zone<br />
|-<br />
|07||Hill Top zone<br />
|-<br />
|08||Hidden Palace zone<br />
|-<br />
|0A||Oil Ocean zone<br />
|-<br />
|0B||Mystic Cave zone<br />
|-<br />
|0C||Casino Night zone<br />
|-<br />
|0D||Chemical Plant zone<br />
|-<br />
|0E||Death Egg zone<br />
|-<br />
|0F||Aquatic Ruin zone<br />
|-<br />
|10||Sky Chase zone<br />
|}<br />
<br><br />
<P>One other thing you need to know is the way that the Mega Drive stores all the art. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get its colour from. The palette has 4 lines, each with 16 colours on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.</P><br><br />
<P>Now these 8x8 blocks are not what make up the level directly. 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have their x, y, or x and y values reversed when placing them in a 16x16 block. Also it's at the 16x16 level that the collision definitions are specified. Now finally we get to a 128x128 block, and these are the things that the actual level info loads. It is made up of 64 16x16 blocks, and each block inside them can use a different palette line. You cannot place anything except a sprite or a 128x128 block directly into a level.</P><br><br />
<P>Now that you know all the basics, here's my breakdown:</P><br><br />
<br />
==Address listing==<br />
For the most part, there are no breaks in this list. If one address follows on directly from another on this list, it does so in the rom, with the exception of data that comes before 40000. All the compiled code that is used in the game is stored in this section, and that's a pain in the ass to sort through, so there will be many breaks there. The column on the left lists it's file location, the column in the middle contains it's name and description, and the column on the right will contain any special notes about it, such as compression format used if applicable, and number of blocks an art tile uses. The right column will also contain a link with the text further info, if that particular block requires it. That link will jump to a detailed explanation of that thing. Anything linked like that will also be listed in the contents at the top of the page.<br><br />
<br />
{|border="1"<br />
|0-FF||Vector table|| <br />
|-<br />
|100-200||Header|| <br />
|-<br />
|14DE-????||Programming to do wih decompression of art tiles to VRAM||Compiled<br />
|-<br />
|2782-28C1||Palette pointers|| <br />
|-<br />
|28C2||Sega screen palette (00)|| <br />
|-<br />
|2942||Title screen palette (01)|| <br />
|-<br />
|2962||Unknown palette (02)|| <br />
|-<br />
|29E2||"Sonic and Miles" screen palette (03)|| <br />
|-<br />
|2A22||EHZ palette (04, 05, 07, 0D)|| <br />
|-<br />
|2A82||WZ palette (06)|| <br />
|-<br />
|2AE2||MTZ palette (08, 09)|| <br />
|-<br />
|2B42||WFZ palette (0A)|| <br />
|-<br />
|2BA2||HTZ palette (0B)|| <br />
|-<br />
|2C02||HPZ palette (0C)|| <br />
|-<br />
|2C62||HPZ underwater palette (15)|| <br />
|-<br />
|2CE2||OOZ palette (0E)|| <br />
|-<br />
|2D42||MCZ palette (0F)|| <br />
|-<br />
|2DA2||CNZ palette (10)|| <br />
|-<br />
|2E02||CPZ palette (11)|| <br />
|-<br />
|2E62||CPZ underwater palette (16)|| <br />
|-<br />
|2EE2||DEZ palette (12)|| <br />
|-<br />
|2F42||ARZ palette (13)|| <br />
|-<br />
|2FA2||ARZ underwater palette (17)|| <br />
|-<br />
|3022||SCZ palette (14)|| <br />
|-<br />
|3082||Unknown palette (19)|| <br />
|-<br />
|30A2||Unknown palette (1A)|| <br />
|-<br />
|30C2||OOZ boss palette (25)|| <br />
|-<br />
|30E2||Menu palette (26)|| <br />
|-<br />
|3162||Main special stage palette (18)|| <br />
|-<br />
|31C2||Special stage 1 palette (1B)|| <br />
|-<br />
|31E2||Special stage 2 palette (1C)|| <br />
|-<br />
|3202||Special stage 3 palette (1D)|| <br />
|-<br />
|3222||Special stage 4 palette (1E)|| <br />
|-<br />
|3242||Special stage 5 palette (1F)|| <br />
|-<br />
|3262||Special stage 6 palette (20)|| <br />
|-<br />
|3282||Special stage 7 palette (21)|| <br />
|-<br />
|32A2||Unknown palette (22)|| <br />
|-<br />
|32C2||Unknown palette (23)|| <br />
|-<br />
|32E2||Unknown palette (24)|| <br />
|-<br />
|3302||Unknown palette (27)|| <br />
|-<br />
|3EA0-3EB0||Music playlist for levels||[[#Music_playlist_for_levels|Further info]] <br />
|-<br />
|4948-498B||Pointers to demo file to use for levels|| <br />
|-<br />
|49E8-4A70||Pointers to collision indexes||[[#Collision_definitions|Further info]]<br />
|-<br />
|6FC0||??????? (sprite)|| <br />
|-<br />
|70F0||??????? (sprite)|| <br />
|-<br />
|7356||??????? (sprite)|| <br />
|-<br />
|7A68||Continue text (sprite)|| <br />
|-<br />
|7B82||Sprite of sonic lying down from continue screen (sprite)|| <br />
|-<br />
|80BE||??????? (sprite)|| <br />
|-<br />
|9454-947B||Level select level order||[[#Level_order|Further info]]<br />
|-<br />
|A1D6||Cut scene at end of game (sprite)|| <br />
|-<br />
|A3C8||??????? (sprite)|| <br />
|-<br />
|A894||??????? (sprite)|| <br />
|-<br />
|A988||??????? (sprite)|| <br />
|-<br />
|A9F2||??????? (sprite)|| <br />
|-<br />
|AAAE||??????? (sprite)|| <br />
|-<br />
|C054-C14F||Level size array||[[#Level_size_array|Further info]] <br />
|-<br />
|C150-C1CF||Code for initial character and screen placement||Compiled<br />
|-<br />
|C1D0-C257||Character start location array||[[#Character_start_location_array|Further info]] <br />
|-<br />
|C4FC||Offset index of rasterised layer deformation||[[#Offset_indexes|Further info]] <br />
|-<br />
|C51E||Unknown (possibly title screen)||[[#Rasterised_layer_deformation|Further info]] <br />
|-<br />
|C57E||EHZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]] <br />
|-<br />
|C682||Unknown (splitscreen, EHZ?)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C7F2||HTZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C7BA||Unknown (level value 02)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C7F2||Unknown (identical to WFZ)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C82A||WFZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C8CA||Unknown (identical to HTZ)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|C964||HTZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CA92||Unknown (background fixed)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CB10||Unknown (splitscreen, background locked, no deformation)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CBA0||HPZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CC66||OOZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CD2C||MCZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|CE6C||Unknown (splitscreen, background free moving, but no alteration)||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D0C6||CNZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D194||CNZ 2 player splitscreen||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D27C||CPZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D382||DEZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D4AE||ARZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D5DE||SCZ layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|D666||01, 03, 09 layer deformation info||<br />
[[#Rasterised_layer_deformation|Further info]]<br />
|-<br />
|F66C||??????? (sprite)|| <br />
|-<br />
|FC98||Swinging platform from aquatic ruin zone (sprite)|| <br />
|-<br />
|10310||??????? (sprite)|| <br />
|-<br />
|104AC||Stationary floating platform from aquatic ruin zone (sprite)|| <br />
|-<br />
|108BC||Collapsing platform from either oil ocean zone or mystic cave zone (sprite)|| <br />
|-<br />
|10A08||Collapsing platform from aquatic ruin zone (sprite)|| <br />
|-<br />
|111D4||??????? (sprite)|| <br />
|-<br />
|112F0||??????? (sprite)|| <br />
|-<br />
|115C4||Stomper from MCZ (sprite)|| <br />
|-<br />
|1169A||One way barrier from chemical plant zone and DEZ (sprite)|| <br />
|-<br />
|1188C||An animal and the 100 that are given off from busting a badnick (sprite)|| <br />
|-<br />
|11DC6||100 points (sprite)|| <br />
|-<br />
|11F44||A ring (sprite)|| <br />
|-<br />
|12078||Sprite of rings spraying out from being hit by an enemy (sprite)|| <br />
|-<br />
|125E6||??????? (sprite)|| <br />
|-<br />
|12670||Monitor (sprite)|| <br />
|-<br />
|12854||Image of what was in monitor flying up like it does when you bust it (sprite)|| <br />
|-<br />
|12E18||Flashing stars from intro (sprite)|| <br />
|-<br />
|132F0||??????? (sprite)|| <br />
|-<br />
|13600||??????? (sprite)|| <br />
|-<br />
|13C48||Sprite for level title card (sprite)|| <br />
|-<br />
|13F74||??????? (sprite)|| <br />
|-<br />
|14086||End of level result screen (sprite)|| <br />
|-<br />
|142F8-1433B||Main game level order||<br />
[[#Level_order|Further info]]<br />
|-<br />
|143C0||End of special stage result screen (sprite)|| <br />
|-<br />
|15900||Vertical spikes (sprite)|| <br />
|-<br />
|15CC8||??????? (sprite)|| <br />
|-<br />
|15D44||??????? (sprite)|| <br />
|-<br />
|1600C||Sprite programming pointers (one address per sprite value)||<br />
[[#Sprite_programming|Further info]]<br />
|-<br />
|1637C||??????? (sprite)|| <br />
|-<br />
|18888||Red spring facing upwards (sprite)|| <br />
|-<br />
|191B8||??????? (sprite)|| <br />
|-<br />
|19F50||Sonic (sprite)|| <br />
|-<br />
|1B8A4||Tails (sprite)|| <br />
|-<br />
|1D200||??????? (sprite)|| <br />
|-<br />
|1D320||??????? (sprite)|| <br />
|-<br />
|1D8F2||??????? (sprite)|| <br />
|-<br />
|1D97E||??????? (sprite)|| <br />
|-<br />
|1DD20||??????? (sprite)|| <br />
|-<br />
|1E0F0||??????? (sprite)|| <br />
|-<br />
|1F0B0||Starpoll (sprite)|| <br />
|-<br />
|1F624||??????? (sprite)|| <br />
|-<br />
|1F730||Star ball that sonic bounces off from CNZ (sprite)|| <br />
|-<br />
|1F8A8||??????? (sprite)|| <br />
|-<br />
|1FCDC||??????? (sprite)|| <br />
|-<br />
|2009C||Section of pipe that tips you off from chemical plant zone (sprite)|| <br />
|-<br />
|20210||??????? (sprite)|| <br />
|-<br />
|2031C||Master emerald (sprite)|| <br />
|-<br />
|203AC||??????? (sprite)|| <br />
|-<br />
|208DC||??????? (sprite)|| <br />
|-<br />
|20B9E||??????? (sprite)|| <br />
|-<br />
|20DEC||??????? (sprite)|| <br />
|-<br />
|20FD2||Big pylon thing that's in the foreground in CPZ (sprite)|| <br />
|-<br />
|21088||An explosion of an enemy, giving off an animal and 100 points (sprite)|| <br />
|-<br />
|2115C||??????? (sprite)|| <br />
|-<br />
|21392||??????? (sprite)|| <br />
|-<br />
|214C4||Rotating cylinder in Metropolis zone (sprite)|| <br />
|-<br />
|21928||See saw thingy from hill top zone (sprite)|| <br />
|-<br />
|21DAC||Diagonally moving lift thing from hill top zone (sprite)|| <br />
|-<br />
|22018||??????? (sprite)|| <br />
|-<br />
|222AC||Booster things from chemical plant zone (sprite)|| <br />
|-<br />
|22408||??????? (sprite)|| <br />
|-<br />
|2259C||Spin tube from chemical plant zone (sprite)|| <br />
|-<br />
|22FF8||??????? (sprite)|| <br />
|-<br />
|23300||??????? (sprite)|| <br />
|-<br />
|2351A||??????? (sprite)|| <br />
|-<br />
|238DC||??????? (sprite)|| <br />
|-<br />
|23AF4||Platform that shoots up in the air from oil ocean zone (sprite)|| <br />
|-<br />
|23E40||Spiky ball from OOZ (sprite)|| <br />
|-<br />
|24020||Oil in OOZ (sprite)|| <br />
|-<br />
|240F8||Strange spring from OOZ facing vertically (sprite)|| <br />
|-<br />
|24A16||Ball sitting on strange spring from OOZ (sprite)|| <br />
|-<br />
|24DD0||Block thingy in OOZ that launches you into the round ball things (sprite)|| <br />
|-<br />
|25244||Thingy from oil ocean zone that you enter when flying as a ball, and it turns and throws you another direction (sprite)|| <br />
|-<br />
|25694||Arrow shooter from aquatic ruin (sprite)|| <br />
|-<br />
|2588C||Pillar that drops it's lower part from aquatic ruin zone (sprite)|| <br />
|-<br />
|25A5A||Raising pillar from ARZ (sprite)|| <br />
|-<br />
|26104||Sprite that makes leaves fly off when you hit it from ARZ (sprite)|| <br />
|-<br />
|26370||Weird lever like spring from chemical plant zone and ARZ (sprite)|| <br />
|-<br />
|26634||Thing that pops up and releases steam sideways from metropolis zone (sprite)|| <br />
|-<br />
|26920||Twin stompers from MTZ (sprite)|| <br />
|-<br />
|26AE0||??????? (sprite)|| <br />
|-<br />
|26F58||??????? (sprite)|| <br />
|-<br />
|2715C||One of the spin tubes from MTZ (sprite)|| <br />
|-<br />
|27594||Block that has a spike that comes out of each side sequentially from MTZ (sprite)|| <br />
|-<br />
|27794||Floor spike from MTZ (sprite)|| <br />
|-<br />
|27884||Nut from MTZ (sprite)|| <br />
|-<br />
|27AB0||??????? (sprite)|| <br />
|-<br />
|27D6C||??????? (sprite)|| <br />
|-<br />
|28034||??????? (sprite)|| <br />
|-<br />
|283AC||??????? (sprite)|| <br />
|-<br />
|285C0||??????? (sprite)|| <br />
|-<br />
|28BC8||??????? (sprite)|| <br />
|-<br />
|28DF8||Spike block thing from MCZ (sprite)|| <br />
|-<br />
|28FF8||??????? (sprite)|| <br />
|-<br />
|291CC||Stairs from CPZ that move down to open the way (sprite)|| <br />
|-<br />
|293A0||Platform that moves back and forth on top of chemicals in CPZ (sprite)|| <br />
|-<br />
|29590||??????? (sprite)|| <br />
|-<br />
|297E4||Vine switch that you hang off in MCZ (sprite)|| <br />
|-<br />
|2997C||Vine that you hang off and it moves down from MCZ (sprite)|| <br />
|-<br />
|2A000||??????? (sprite)|| <br />
|-<br />
|2A290||Platform that is usually swinging from ARZ (sprite)|| <br />
|-<br />
|2A4FC||3 adjoined platforms from ARZ that rotate in a circle (sprite)|| <br />
|-<br />
|2A7B0||Fan blowing to the left from OOZ (sprite)|| <br />
|-<br />
|2AB84||Vertical spring from CNZ that you hold down jump on to pull back further (sprite)|| <br />
|-<br />
|2B140||??????? (sprite)|| <br />
|-<br />
|2B528||Flashing blocks in CNZ that appear and disappear in a rectangular shape that you can walk across (sprite)|| <br />
|-<br />
|2B84C||??????? (sprite)|| <br />
|-<br />
|2B8EC||Big block from casino night zone that moves back and forth (sprite)|| <br />
|-<br />
|2BA08||Elevator going up from CNZ (sprite)|| <br />
|-<br />
|2BB6C||Poky that gives out points from CNZ (sprite)|| <br />
|-<br />
|2C448||??????? (sprite)|| <br />
|-<br />
|2C6AC||Block thingy in CNZ that changes colour when you hit it and gives you points, until it disappears) (sprite)|| <br />
|-<br />
|2C92C||A sprite that you can hold on to, like the rails in WFZ (sprite)|| <br />
|-<br />
|2CA14||Octopus badnick from OOZ (sprite)|| <br />
|-<br />
|2CCC8||Seahorse badnick from OOZ (sprite)|| <br />
|-<br />
|2D068||Buzz bomber from EHZ (sprite)|| <br />
|-<br />
|2D394||Shark badnick from EHZ (sprite)|| <br />
|-<br />
|2D494||??????? (sprite)|| <br />
|-<br />
|2D734||??????? (sprite)|| <br />
|-<br />
|2EF18||??????? (sprite)|| <br />
|-<br />
|2FC50||??????? (sprite)|| <br />
|-<br />
|2FCF4||Button (sprite)|| <br />
|-<br />
|30480||??????? (sprite)|| <br />
|-<br />
|30FA4||Earthquake (sprite)|| <br />
|-<br />
|318F0||??????? (sprite)|| <br />
|-<br />
|32288||??????? (sprite)|| <br />
|-<br />
|32940||??????? (sprite)|| <br />
|-<br />
|32F90||??????? (sprite)|| <br />
|-<br />
|338EC||??????? (sprite)|| <br />
|-<br />
|340A4||??????? (sprite)|| <br />
|-<br />
|347EC||??????? (sprite)|| <br />
|-<br />
|34A5C||??????? (sprite)|| <br />
|-<br />
|34EB0||??????? (sprite)|| <br />
|-<br />
|34FA0||??????? (sprite)|| <br />
|-<br />
|353FE||??????? (sprite)|| <br />
|-<br />
|35554||??????? (sprite)|| <br />
|-<br />
|35FBC||??????? (sprite)|| <br />
|-<br />
|36924||Blowfly enemy from ARZ (sprite)|| <br />
|-<br />
|36A76||??????? (sprite)|| <br />
|-<br />
|36B88||??????? (sprite)|| <br />
|-<br />
|36BD4||??????? (sprite)|| <br />
|-<br />
|36DAC||??????? (sprite)|| <br />
|-<br />
|36F0E||??????? (sprite)|| <br />
|-<br />
|36FE6||??????? (sprite)|| <br />
|-<br />
|370FE||Red circle dude from hill top zone that has lava balls circling around him that he throws at you. (sprite)|| <br />
|-<br />
|37322||Lava snake (sprite)|| <br />
|-<br />
|373D0||??????? (sprite)|| <br />
|-<br />
|376E8||??????? (sprite)|| <br />
|-<br />
|377C8||Bomber badnick from SCZ (sprite)|| <br />
|-<br />
|37936||Turtle thing on the back of another larger turtle thing from SCZ (sprite)|| <br />
|-<br />
|37A06||??????? (sprite)|| <br />
|-<br />
|37A82||??????? (sprite)|| <br />
|-<br />
|37BFA||Coconuts (the badnick) from EHZ (sprite)|| <br />
|-<br />
|37E16||Snake like badnick from MCZ that flies out from wall at you (sprite)|| <br />
|-<br />
|3800C||Crab like badnick from MTZ (sprite)|| <br />
|-<br />
|3815C||??????? (sprite)|| <br />
|-<br />
|383B4||Praying Mantis dude from MTZ (sprite)|| <br />
|-<br />
|384A2||??????? (sprite)|| <br />
|-<br />
|3873E||Glowbug from MCZ (sprite)|| <br />
|-<br />
|3899C||Exploding star from MTZ (sprite)|| <br />
|-<br />
|38AEA||??????? (sprite)|| <br />
|-<br />
|38B86||??????? (sprite)|| <br />
|-<br />
|38DBA||Spider badnick from CPZ (sprite)|| <br />
|-<br />
|38F66||??????? (sprite)|| <br />
|-<br />
|39032||??????? (sprite)|| <br />
|-<br />
|39066||??????? (sprite)|| <br />
|-<br />
|390A2||??????? (sprite)|| <br />
|-<br />
|3937A||Jet badnick from SCZ (sprite)|| <br />
|-<br />
|3941C||??????? (sprite)|| <br />
|-<br />
|39452||??????? (sprite)|| <br />
|-<br />
|3972C||??????? (sprite)|| <br />
|-<br />
|3A1DC||??????? (sprite)|| <br />
|-<br />
|3A3F8||??????? (sprite)|| <br />
|-<br />
|3A790||??????? (sprite)|| <br />
|-<br />
|3B2DE||??????? (sprite)|| <br />
|-<br />
|3B36A||??????? (sprite)|| <br />
|-<br />
|3B3FA||??????? (sprite)|| <br />
|-<br />
|3B5D0||Tilting platform from WFZ (sprite)|| <br />
|-<br />
|3B8A6||??????? (sprite)|| <br />
|-<br />
|3B968||Wall turret from WFZ (sprite)|| <br />
|-<br />
|3BABA||??????? (sprite)|| <br />
|-<br />
|3BB4C||??????? (sprite)|| <br />
|-<br />
|3BB7C||??????? (sprite)|| <br />
|-<br />
|3BBBC||??????? (sprite)|| <br />
|-<br />
|3BC1C||??????? (sprite)|| <br />
|-<br />
|3BD7A||Platform that pops in and out from WFZ (sprite)|| <br />
|-<br />
|3BEAA||??????? (sprite)|| <br />
|-<br />
|3BF04||??????? (sprite)|| <br />
|-<br />
|3C0AC||Sprite that sonic hangs onto on the back of Robotnic's getaway ship at the end of WFZ (sprite)|| <br />
|-<br />
|3C328||Rivet thing that you bust to get into the ship at the end of WFZ (sprite)|| <br />
|-<br />
|3C3D6||??????? (sprite)|| <br />
|-<br />
|3C442||Laser boss guy at end of WFZ (sprite)|| <br />
|-<br />
|3CED0||??????? (sprite)|| <br />
|-<br />
|3D23E||Bad guy in CNZ (sprite)|| <br />
|-<br />
|3D4C8||Death Egg (sprite)|| <br />
|-<br />
|3EAC8||??????? (sprite)|| <br />
|-<br />
|3F1E4||Egg prison (sprite)|| <br />
|-<br />
|3FCE0||Offset index of dynamic pattern and animated pattern load cue's||Double offset<BR> <br />
[[#Offset_indexes|Further info]]<br />
|-<br />
|3FD24||Dynamic pattern reloading for 01, 02, 03, WFZ, 09, MCZ, SCZ (empty)||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FD26||Dynamic pattern reloading for HTZ||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FF08||Dynamic pattern reloading for CNZ||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FF10||Dynamic pattern reloading for CNZ (not linked in offset index, but loads CNZ stuff)||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FF24||Dynamic pattern reloading for ARZ||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FF2C||Dynamic pattern reloading for EHZ, MTZ, MTZ3, HPZ, OOZ, CPZ, DEZ||<br />
[[#Dynamic_pattern_reloading|Further info]]<br />
|-<br />
|3FF94||EHZ animated pattern load cue (4)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|3FFF8||MTZ animated pattern load cue (3)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|40038||HTZ animated pattern load cue (4)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|4009C||HPZ animated pattern load cue (2)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|400C8||OOZ animated pattern load cue (4)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|4010E||CNZ animated pattern load cue (1)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|40160||Unknown animated pattern load cue (1) (mirror of CNZ load cue, but not linked in offset index)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|401B2||CPZ animated pattern load cue (0)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|401C4||DEZ animated pattern load cue (0)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|401D6-?????||ARZ animated pattern load cue (3)||<br />
[[#Animated_pattern_load_cue's|Further info]]<br />
|-<br />
|40350||Offset index for mappings and properties of misc spites using animated patterns||<br />
[[#Offset_indexes|Further info]]<br />
|-<br />
|40372||EHZ, HTZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|403EE||MTZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|404C2||HPZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|405B6||OOZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|4061A||CNZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|406BE||Unknown misc sprite mappings (that damn phantom group again)||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|40762||CPZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|4076E||DEZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|4077A||ARZ misc sprite mappings||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|407BE-407C0||01, 02, 03, WFZ, 09, MCZ, SCZ misc sprite mappings (empty)||<br />
[[#Misc_sprite_definitions|Further info]]<br />
|-<br />
|4134C-41A6B||Big and small numbers used on counters in game||Uncompressed<BR> <br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|41D0C-41D2D||Offset index of object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|41D2E||EHZ/01/02/03/DEZ object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|42AA8||MTZ/MTZ act 3 object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|41EEC||WFZ object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|41FEE||HTZ object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|420E8||HPZ/OOZ object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|421F2||MCZ object debug lists||<br />
[[#Object_debug_list|Further info]] <br />
|-<br />
|422B4||CNZ object debug list||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|42376||CPZ object debug list||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|42438||ARZ object debug list||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|42522||SCZ object debug list||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|42594-4265F||Main level load block pointers||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|42660-426E5||Offset index of pattern load cue's||<br />
[[#Offset_indexes|Further info]]<br />
|-<br />
|426E6-42D4F||Pattern load cues||<br />
[[#Pattern_load_cues|Further info]]<br />
|-<br />
|42D50||Curve and resistance mapping||<br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|42E50||Collision array||<br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|44E50||EHZ and HTZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|44F40||EHZ and HTZ secondary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45040||MTZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45100||OOZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45200||MCZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|452A0||CNZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45330||CNZ secondary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|453C0||CPZ and DEZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|454E0||CPZ and DEZ secondary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45610||ARZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45760||ARZ secondary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|458C0||WFZ/SCZ primary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|459A0||WFZ/SCZ secondary 16x16 collision index||Compressed<BR> <br />
[[#Collision_definitions|Further info]]<br />
|-<br />
|45A80||Offset index of level layout's||<br />
[[#offset_index|Further info]]<br />
|-<br />
|45AC4||EHZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|45C84||EHZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|45E74||MTZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|462A4||MTZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|46684||MTZ act 3 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|46B04||WFZ level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|46DD4||HTZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47044||HTZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47404||OOZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47784||OOZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47B24||MCZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47D24||MCZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|47FF4||CNZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|483C4||CNZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|48774||CPZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|48A84||CPZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|48DE4||DEZ level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|48E94||ARZ act 1 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|49264||ARZ act 2 level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|49634||SCZ level layout||Level compression<BR> <br />
[[#Level_layout|Further info]]<br />
|-<br />
|49714||Animated flowers in EHZ and HTZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|49914||Pulsing thing against chequered backing from EHZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|49A14||Dynamically reloaded cliffs in background from HTZ||Art compression<BR>192 blocks<br />
|-<br />
|4A33E||Dynamically reloaded clouds in background from HTZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4A73E||Spinning metal cylinder patterns in MTZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4B73E||Lava patterns in MTZ and HTZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4BD3E||Animated section of MTZ background||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4BF7E||Pulsing ball in OOZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4C0FE||Square rotating around ball in OOZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4C4FE||Oil in OOZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4D4FE||Flipping foreground section in CNZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4EEFE||Bonus pictures for pokie in CNZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4FAFE||Animated background section in CPZ and DEZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|4FCFE||Waterfall patterns from ARZ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|50000||Patterns for Sonic||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|64180||Patterns for Tails||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|6FBE0||Unknown offset index||<br />
[[SCHG:Nem s2|Further info]]<br />
|-<br />
|6FD8C||Data that offset index is linking to (something to do with mappings for sonic)||<br />
[[#Mappings_for_Sonic/Tails|Further info]] <br />
|-<br />
|714E0||Unknown offset index||<br />
[[#Offset_indexes|Further info]] <br />
|-<br />
|7168C||Data that offset index is linking to (something to do with mappings for sonic)||<br />
[[SCHG:Nem s2|Further info]] <br />
|-<br />
|71D8E||Bubble||Art compression<BR>32 blocks<br />
|-<br />
|71F14||Invincibility stars||Art compression<BR>00, 34 blocks<br />
|-<br />
|71FFC||Splash in water||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|7287C||Smoke from dashing||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|7393C||Supersonic stars||Art compression<BR>00, 14 blocks<br />
|-<br />
|739E2||Unknown offset index||<br />
[[#Offset_indexes|Further info]] <br />
|-<br />
|73AF8||Data that offset index is linking to (something to do with mappings for tails)||<br />
[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|7446C||Unknown offset index||<br />
[[#Offset_indexes|Further info]] <br />
|-<br />
|74582||Data that offset index is linking to (something to do with mappings for tails)||<br />
[[#Mappings_for_Sonic/Tails|Further info]]<br />
|-<br />
|74876||SEGA patterns||Art compression<BR>127 blocks<br />
|-<br />
|74F6C||Main patterns from title screen||Art compression<BR>336 blocks<br />
|-<br />
|7667A||Sonic and tails from title screen ||Art compression<BR>674 blocks<br />
|-<br />
|78CBC||A few menu patterns||Art compression<BR>10 blocks<br />
|-<br />
|78DAC||Button ||Art compression<BR>16 blocks<br />
|-<br />
|78E84||Vertical spring ||Art compression<BR>00, 20 blocks<br />
|-<br />
|78FA0||Horizontal spring ||Art compression<BR>12 blocks<br />
|-<br />
|7906A||Diagonal spring ||Art compression<BR>00, 32 blocks<br />
|-<br />
|7923E||Score, Rings, Time patterns ||Art compression<BR>24 blocks<br />
|-<br />
|79346||Sonic lives counter ||Art compression<BR>12 blocks<br />
|-<br />
|7945C||Ring||Art compression<BR>00, 14 blocks<br />
|-<br />
|79550||Monitors and contents ||Art compression<BR>60 blocks<br />
|-<br />
|7995C||Spikes||Art compression<BR>8 blocks<br />
|-<br />
|799AC||Numbers||Art compression<BR>18 blocks<br />
|-<br />
|79A86||Starpoll||Art compression<BR>00, 16 blocks<br />
|-<br />
|79BDE||Signpost||Art compression<BR>78 blocks<br />
|-<br />
|7A1A0||Signpost||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|7AB4A||Strange spring from CPZ and ARZ ||Art compression<BR>00, 28 blocks<br />
|-<br />
|7AC9A||Long horizontal spike ||Art compression<BR>00, 8 blocks<br />
|-<br />
|7AD16||Bubble man, and bubbles from bubble man ||Art compression<BR>00, 37 blocks<br />
|-<br />
|7AEE2||Bubbles from character ||Art compression<BR>00, 10 blocks<br />
|-<br />
|7AF82||Countdown text for drowning ||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|7B400||Game/Time over text ||Art compression<BR>34 blocks<br />
|-<br />
|7B592||Explosion ||Art compression<BR>68 blocks<br />
|-<br />
|7B946||Miles life counter ||Art compression<BR>00, 12 blocks<br />
|-<br />
|7BA32||Egg prison ||Art compression<BR>49 blocks<br />
|-<br />
|7BDBE||Image of tails in plane when sonic is on final frame at end of game||Art compression<BR>00, 36 blocks<br />
|-<br />
|7C0AA||Sonic continue ||Art compression<BR>12 blocks<br />
|-<br />
|7C20C||Tails life counter ||Art compression<BR>12 blocks<br />
|-<br />
|7C2F2||Tails continue ||Art compression<BR>12 blocks<br />
|-<br />
|7C43E||ASCII characters used in game ||Art compression<BR>00, 88 blocks<br />
|-<br />
|7C9AE||1P/2P wins text from 2P mode||Art compression<BR>38 blocks<br />
|-<br />
|7CD30||Sonic/Miles animated background from options and level select menu||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|7D22C||Title card patterns||Art compression<BR>94 blocks<br />
|-<br />
|7D58A||Alphabet for font using large broken letters||Art compression<BR>92 blocks<br />
|-<br />
|7D990||A menu box with a shadow||Art compression<BR>21 blocks<br />
|-<br />
|7DA10||Pictures in level preview box in level select||Art compression<BR>170 blocks<br />
|-<br />
|7E86A||Unknown. More text I haven't figured out||Art compression<BR>68 blocks<br />
|-<br />
|7EB58||Text for end of special stage, along with patterns for 3 emeralds.||Art compression<BR>72 blocks<br />
|-<br />
|7EEBE||"Perfect" text||Art compression<BR>00, 14 blocks<br />
|-<br />
|7EF60||Bluebird||Art compression<BR>00, 16 blocks<br />
|-<br />
|7F0A2||Squirrel||Art compression<BR>00, 20 blocks<br />
|-<br />
|7F206||Mouse||Art compression<BR>00, 20 blocks<br />
|-<br />
|7F340||Chicken||Art compression<BR>16 blocks<br />
|-<br />
|7F4A2||Beaver||Art compression<BR>00, 20 blocks<br />
|-<br />
|7F5E2||Penguin||Art compression<BR>16 blocks<br />
|-<br />
|7F710||Pig||Art compression<BR>18 blocks<br />
|-<br />
|7F846||Seal||Art compression<BR>00, 14 blocks<br />
|-<br />
|7F962||Penguin||Art compression<BR>00, 18 blocks<br />
|-<br />
|7FADE||Turtle||Art compression<BR>00, 20 blocks<br />
|-<br />
|7FC90||Bears||Art compression<BR>00, 20 blocks<br />
|-<br />
|7FDD2||Rabbit||Art compression<BR>00, 18 blocks<br />
|-<br />
|7FF2A||Rivet thing that you bust to get inside ship at the end of WFZ||Art compression<BR>00, 4 blocks<br />
|-<br />
|7FF98||Breakaway panels in WFZ||Art compression<BR>15 blocks<br />
|-<br />
|8007C||Spiked ball from OOZ||Art compression<BR>00, 32 blocks<br />
|-<br />
|80274||Unknown. HPZ style shaded blocks||Art compression<BR>6 blocks<br />
|-<br />
|8030A||Striped blocks from CPZ||Art compression<BR>4 blocks<br />
|-<br />
|80376||Oil falling into oil in OOZ||Art compression<BR>16 blocks<br />
|-<br />
|804F2||Cascading oil from OOZ||Art compression<BR>13 blocks<br />
|-<br />
|805C0||Ball on spring from OOZ||Art compression<BR>20 blocks<br />
|-<br />
|806E0||Spinball from OOZ||Art compression<BR>53 blocks<br />
|-<br />
|809D0||Collapsing platform form OOZ||Art compression<BR>40 blocks<br />
|-<br />
|80C64||Diagonal and vertical weird spring from OOZ||Art compression<BR>30 blocks<br />
|-<br />
|80E26||Swinging platform from OOZ||Art compression<BR>28 blocks<br />
|-<br />
|81048||4 stripy blocks from OOZ||Art compression<BR>4 blocks<br />
|-<br />
|810B8||Raising platform in OOZ||Art compression<BR>24 blocks<br />
|-<br />
|81254||Fan in OOZ||Art compression<BR>30 blocks<br />
|-<br />
|81514||Green flame from thingy that shots platform up in OOZ||Art compression<BR>18 blocks<br />
|-<br />
|81600||Patterns for appearing and disappearing string of platforms in CNZ||Art compression<BR>00, 4 blocks<br />
|-<br />
|81668||Spiky ball from poky in CNZ||Art compression<BR>00, 04 blocks<br />
|-<br />
|816C8||Moving cube from either CNZ and CPZ||Art compression<BR>16 blocks<br />
|-<br />
|817B4||Elevator in CNZ||Art compression<BR>4 blocks<br />
|-<br />
|81826||Bars from pokies in CNZ||Art compression<BR>12 blocks<br />
|-<br />
|81894||Hexagonal bumper in CNZ||Art compression<BR>6 blocks<br />
|-<br />
|8191E||Normal round bumper from CNZ||Art compression<BR>24 blocks<br />
|-<br />
|81AB0||Diagonal spring from CNZ that you pull back on||Art compression<BR>32 blocks<br />
|-<br />
|81C96||Vertical red spring||Art compression<BR>18 blocks<br />
|-<br />
|81DCC||Weird blocks in CNZ that you hit 3 times to get rid of them||Art compression<BR>28 blocks<br />
|-<br />
|81EF2||Flippers from CNZ||Art compression<BR>52 blocks<br />
|-<br />
|82216||Large moving platform from CPZ||Art compression<BR>00, 10 blocks<br />
|-<br />
|82364||Top of water in HPZ and CPZ||Art compression<BR>00, 24 blocks<br />
|-<br />
|824D4||Booster things in CPZ||Art compression<BR>00, 4 blocks<br />
|-<br />
|8253C||CPZ enemy made up of a string of balls||Art compression<BR>00, 04 blocks<br />
|-<br />
|825AE||CPZ metal things||Art compression<BR>33 blocks<br />
|-<br />
|827B8||CPZ large moving platform blocks||Art compression<BR>4 blocks<br />
|-<br />
|827F8||Stripy blocks from CPZ||Art compression<BR>8 blocks<br />
|-<br />
|82864||Small yellow moving platform from CPZ||Art compression<BR>48 blocks<br />
|-<br />
|82A46||Moving block from CPZ||Art compression<BR>24 blocks<br />
|-<br />
|82C06||Spring that covers tube in CPZ||Art compression<BR>32 blocks<br />
|-<br />
|82E02||Top of water in ARZ||Art compression<BR>00, 16 blocks<br />
|-<br />
|82EE8||Leaves from ARZ||Art compression<BR>00, 07 blocks<br />
|-<br />
|82F74||Arrow shooter and arrow from ARZ||Art compression<BR>00, 17 blocks<br />
|-<br />
|830D2||One way barrier from ARZ||Art compression<BR>8 blocks<br />
|-<br />
|8316A||Buzz bomber||Art compression<BR>00, 28 blocks<br />
|-<br />
|8336A||Octopus badnick from OOZ||Art compression<BR>00, 58 blocks<br />
|-<br />
|8368A||Flying badnick from OOZ||Art compression<BR>00, 56 blocks<br />
|-<br />
|839EA||Fish badnick from EHZ||Art compression<BR>22 blocks<br />
|-<br />
|83BF6||Robotnic's main ship||Art compression<BR>96 blocks<br />
|-<br />
|84332||Robotnic enemy from CPZ||Art compression<BR>111 blocks<br />
|-<br />
|84890||Large explosion||Art compression<BR>00, 100 blocks<br />
|-<br />
|84F18||Mini explosion||Art compression<BR>00, 8 blocks<br />
|-<br />
|84F96||Unknown. Trail of smoke of some kind.||Art compression<BR>00, 16 blocks<br />
|-<br />
|8507C||EHZ boss||Art compression<BR>128 blocks<br />
|-<br />
|85868||Chopper blades for EHZ boss||Art compression<BR>00, 20 blocks<br />
|-<br />
|8595C||HTZ boss||Art compression<BR>00, 107 blocks<br />
|-<br />
|86128||ARZ boss||Art compression<BR>166 blocks<br />
|-<br />
|86B6E||MCZ boss||Art compression<BR>204 blocks<br />
|-<br />
|87AAC||CNZ boss||Art compression<BR>00, 133 blocks<br />
|-<br />
|882D6||OOZ boss||Art compression<BR>181 blocks<br />
|-<br />
|88DA6||MTZ boss||Art compression<BR>124 blocks<br />
|-<br />
|894E4||Unknown||Uncompressed<BR> <br />
[[#Uncompressed_art|Further info]]<br />
|-<br />
|89534||Blowfly from ARZ||Art compression<BR>00, 9 blocks<br />
|-<br />
|8970E||Grounder from ARZ||Art compression<BR>00, 50 blocks<br />
|-<br />
|89B9A||Fish from ARZ||Art compression<BR>24 blocks<br />
|-<br />
|89DEC||Lava snake from HTZ||Art compression<BR>00, 19 blocks<br />
|-<br />
|89FAA||Enemy with spike cone on top form HTZ||Art compression<BR>20 blocks<br />
|-<br />
|8A142||Circular badnick from SCZ||Art compression<BR>28 blocks<br />
|-<br />
|8A362||Turtle badnick from SCZ||Art compression<BR>00, 57 blocks<br />
|-<br />
|8A87A||Coconuts from EHZ||Art compression<BR>38 blocks<br />
|-<br />
|8AB36||Snake like badnick from MCZ||Art compression<BR>10 blocks<br />
|-<br />
|8AC5E||Firefly from MCZ||Art compression<BR>00, 20 blocks<br />
|-<br />
|8AD80||Praying mantis badnick from MTZ||Art compression<BR>00, 32 blocks<br />
|-<br />
|8B058||Crab badnick from MCZ||Art compression<BR>00, 36 blocks<br />
|-<br />
|8B300||Exploding star badnick from MTZ||Art compression<BR>00, 15 blocks<br />
|-<br />
|8B430||Weird crawling badnick from CPZ||Art compression<BR>00, 32 blocks<br />
|-<br />
|8B6B4||Spider badnick in CPZ||Art compression<BR>00, 45 blocks<br />
|-<br />
|8B9DC||Scratch from WFZ||Art compression<BR>26 blocks<br />
|-<br />
|8BC16||Jet like badnick from SCZ||Art compression<BR>00, 25 blocks<br />
|-<br />
|8BE12||Robotic sonic||Art compression<BR>00, 217 blocks<br />
|-<br />
|8CC44||The tornado||Art compression<BR>79 blocks<br />
|-<br />
|8D1A0||Wall turret from WFZ||Art compression<BR>24 blocks<br />
|-<br />
|8D388||Hook on chain in WFZ||Art compression<BR>00, 20 blocks<br />
|-<br />
|8D540||Retracting platform from WFZ||Art compression<BR>54 blocks<br />
|-<br />
|8D7D8||Wheel for belt in WFZ||Art compression<BR>00, 16 blocks<br />
|-<br />
|8D96E||Moving platform in WFZ||Art compression<BR>00, 12 blocks<br />
|-<br />
|8DA6E||Giant unused vertical red laser in WFZ||Art compression<BR>12 blocks<br />
|-<br />
|8DAFC||Clouds||Art compression<BR>00, 18 blocks<br />
|-<br />
|8DC42||Red horizontal laser in WFZ||Art compression<BR>10 blocks<br />
|-<br />
|8DCA2||Platform that shoots sonic across from WFZ||Art compression<BR>00, 05 blocks<br />
|-<br />
|8DD0C||Rising platforms on belt from WFZ||Art compression<BR>00, 12 blocks<br />
|-<br />
|8DDF6||Unused badnick in WFZ||Artcompression<BR>12 blocks<br />
|-<br />
|8DEB8||Vertical spinning blades from WFZ||Art compression<BR>4 blocks<br />
|-<br />
|8DEE8||Horizontal spinning blades from WFZ||Art compression<BR>00, 29 blocks<br />
|-<br />
|8E010||Platforms that tilt in WFZ||Art compression<BR>12 blocks<br />
|-<br />
|8E0C4||Thrust from Robotnic's getaway ship in WFZ||Art compression<BR>00, 8 blocks<br />
|-<br />
|8E138||Laser boss from WFZ||Art compression<BR>00, 117 blocks<br />
|-<br />
|8E886||Robotnic's head||Art compression<BR>00, 24 blocks<br />
|-<br />
|8EA5A||Robotnic||Art compression<BR>76 blocks<br />
|-<br />
|8EE52||Robotnic's lower half||Art compression<BR>28 blocks<br />
|-<br />
|8EF96||Window in back that Robotnic looks through in DEZ||Art compression<BR>00, 08 blocks<br />
|-<br />
|8F024||Death egg||Art compression<BR>327 blocks<br />
|-<br />
|901A4||Bouncer badnik from CPZ||Art compression<BR>42 blocks<br />
|-<br />
|90520||Rocket thruster for tornado||Art compression<BR>00, 26 blocks<br />
|-<br />
|906DE-90973||Mappings for movie sequence and images at end of game|| <br />
|-<br />
|90974||Movie sequence at end of game||Art compression<BR>00, 193 blocks<br />
|-<br />
|91F3C||Final image of tornado with it and sonic facing screen||Art compression<BR>00, 127 blocks<br />
|-<br />
|927E0||Mini pictures of tornado in final ending sequence||Art compression<BR>00, 109 blocks<br />
|-<br />
|92F0A||Mini pictures of sonic and final image of sonic||Art compression<BR>135 blocks<br />
|-<br />
|93848||Mini pictures of sonic and final image of sonic in supersonic mode||Art compression<BR>117 blocks<br />
|-<br />
|93F3C||Final image of Tails ||Art compression<BR>181 blocks<br />
|-<br />
|94B28||Sonic the hedgehog 2 image at end of credits||Art compression<BR>72 blocks<br />
|-<br />
|94E74||EHZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|95C24||EHZ/HTZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|985A4||HTZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|98AB4||HTZ pattern suppliment to EHZ level patterns||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|99D34||EHZ/HTZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|9CFD4||MTZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|9DB64||MTZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|A06C4||MTZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A3364||OOZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A4204||OOZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|A6834||OOZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A8D04||MCZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|A9D74||MCZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|AD454||MCZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|AFFC4||CNZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B0894||CNZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|B2CF4||CNZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B5234||CPZ/DEZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|B6174||CPZ/DEZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|B90F4||CPZ/DEZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|BB944||ARZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|BCC24||ARZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|C1434||ARZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|C4074||WFZ/SCZ 16x16 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|C5004||WFZ/SCZ main level patterns||Compressed<BR> <br />
[[#Main_level_pattern_blocks|Further info]] <br />
|-<br />
|C7EC4||WFZ pattern suppliment to SCZ tiles||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]] <br />
|-<br />
|C85E4||WFZ/SCZ 128x128 block mappings||Compressed<BR> <br />
[[#Main_level_block_mappings|Further info]]<br />
|-<br />
|CA906-?????||????????? (Special stage stuff)|| <br />
|-<br />
|DCD68||Background patterns for special stage ||Art compression<BR>127 blocks<br />
|-<br />
|DD48A||Sonic/Miles and number text from special stage ||Art compression<BR>62 blocks<br />
|-<br />
|DD790||"Start" patterns in special stage ||Art compression<BR>48 blocks<br />
|-<br />
|DD8CE||Stars in special stage ||Art compression<BR>00, 37 blocks<br />
|-<br />
|DD9C8||Unknown. Text in special stage. ||Art compression<BR>13 blocks<br />
|-<br />
|DDA7E||Ring patterns in special stage ||Art compression<BR>104 blocks<br />
|-<br />
|DDFA4||Horizontal shadow patterns in special stage ||Art compression<BR>38 blocks<br />
|-<br />
|DE05A||Diagonal shadow patterns from special stage ||Art compression<BR>58 blocks<br />
|-<br />
|DE120||Vertical shadow patterns in special stage ||Art compression<BR>25 blocks<br />
|-<br />
|DE188||Explosion patterns in special stage ||Art compression<BR>00, 48 blocks<br />
|-<br />
|DE4BC||Bomb patterns in special stage ||Art compression<BR>80 blocks<br />
|-<br />
|DE8AC||Emerald patterns in special stage ||Art compression<BR>46 blocks<br />
|-<br />
|DEAF4||Unknown. Text in special stage. ||Art compression<BR>99 blocks<br />
|-<br />
|DEEAE||Sonic and tails' animation frames from special stage ||Art compression<BR>851 blocks<br />
|-<br />
|E247E||"Tails" Patterns from special stage ||Art compression<BR>5 blocks<br />
|-<br />
|E24FE||?????????? (affected sprites in special stage)|| <br />
|-<br />
|E34EE||Unknown. looks like a really crap falling water thing. ||Art compression<BR>00, 12 blocks<br />
|-<br />
|E35F2||?????????? (compressed block of data to do with sprites for special stage)||Compressed<BR><br />
|-<br />
|E427C||Data block acting as seperator|| <br />
|-<br />
|E4300||Offset index of ring location lists ||<br />
[[#Offset_indexes|Further info]]<br />
|-<br />
|E4344||EHZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E456A||EHZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47AC||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47AE||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47B0||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47B2||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47B4||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47B6||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E47B8||MTZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E4A2A||MTZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E4C48||MTZ act 3 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E4D72||MTZ act 4 ring locations (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E4D74||HTZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E4EAA||HTZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E50E8||HPZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E525A||HPZ act 2 ring locations (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E525C||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E525E||Unknown (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5260||OOZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5422||OOZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5598||MCZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E570E||MCZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5944||CNZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5B7E||CNZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5E2C||CPZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E5F9E||CPZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6150||DEZ act 1 ring locations (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6152||DEZ act 2 ring locations (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6154||WFZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6292||WFZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6294||ARZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E642E||ARZ act 2 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6684||SCZ act 1 ring locations||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E66D6||SCZ act 2 ring locations (empty)||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E66D8||Data block acting as seperator||<br />
[[#Ring_placement|Further info]] <br />
|-<br />
|E6800||Offset index of sprite lists||<br />
[[#Offset_indexes|Further info]]<br />
|-<br />
|E684A||EHZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E6B7A||EHZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E6F34||MTZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E73C0||MTZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E78EE||MTZ act 3 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E7F48||WFZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E82FC||WFZ act 2 sprite locations (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8302||HTZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8668||HTZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8C80||HPZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8D94||HPZ act 2 sprite locations (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8D9A||Unknown (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E8DA0||OOZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E9214||OOZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E968E||MCZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E99A0||MCZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|E9D1E||CNZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EA3D8||CNZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EA9D2||CPZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EAD6E||CPZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EB230||DEZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EB254||DEZ act 2 sprite locations (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EB25A||ARZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EB6A4||ARZ act 2 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBBDE||SCZ act 1 sprite locations||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD4C||SCZ act 2 sprite locations (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD52||Unknown (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD58||Unknown (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD5E||Unknown (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD64||Unknown (empty)||<br />
[[#Sprite_placement|Further info]]<br />
|-<br />
|EBD66||Data block acting as seperator|| <br />
|-<br />
|EC000||????????? (Sound effects?)|| <br />
|-<br />
|ED100||????????? (instruments?)|| <br />
|-<br />
|F0160||Fireball from EHZ||Art compression<BR>20 blocks<br />
|-<br />
|F02D6||Waterfall tiles ||Art compression<BR>24 blocks<br />
|-<br />
|F03DC||Another fireball ||Art compression<BR>00,16 blocks<br />
|-<br />
|F052A||Bridge in EHZ ||Art compression<BR>00, 8 blocks<br />
|-<br />
|F0602||Diagonally moving lift in HTZ ||Art compression<BR>48 blocks<br />
|-<br />
|F08F6||One way barrier from HTZ ||Art compression<BR>4 blocks<br />
|-<br />
|F096E||See-saw in HTZ ||Art compression<BR>24 blocks<br />
|-<br />
|F0B06||Fireball from HTZ ||Art compression<BR>24 blocks<br />
|-<br />
|F0C14||Rock from HTZ ||Art compression<BR>20 blocks<br />
|-<br />
|F0D4A||Badnick from HTZ with 4 balls of fire spinning around him||Art compression<BR>4 blocks<br />
|-<br />
|F0DB6||Large spinning wheel from MTZ ||Art compression<BR>120 blocks<br />
|-<br />
|F120E||Indent in large spinning wheel from MTZ ||Art compression<BR>9 blocks<br />
|-<br />
|F12B6||Unknown. MTZ block.||Art compression<BR>00, 8 blocks<br />
|-<br />
|F1384||Steam from MTZ||Art compression<BR>00, 15 blocks<br />
|-<br />
|F148E||Spike from MTZ||Art compression<BR>00, 8 blocks<br />
|-<br />
|F1550||Similarly shaded blocks from MTZ||Art compression<BR>54 blocks<br />
|-<br />
|F15C6||Lava bubble from MTZ ||Art compression<BR>00, 9 blocks<br />
|-<br />
|F167C||Unknown. A steam vent? ||Art compression<BR>00, 4 blocks<br />
|-<br />
|F16EC||Things from MTZ ||Art compression<BR>8 blocks<br />
|-<br />
|F178E||Small cog from MTZ ||Art compression<BR>00, 12 blocks<br />
|-<br />
|F1870||Unknown. Four blocks that are all the same colour from MTZ. ||Art compression<BR>00, 4 blocks<br />
|-<br />
|F187E||Large wooden box from MCZ ||Art compression<BR>32 blocks<br />
|-<br />
|F1ABA||Collapsing platform from MCZ ||Art compression<BR>00, 26 blocks<br />
|-<br />
|F1C64||Switch that you pull on from MCZ ||Art compression<BR>16 blocks<br />
|-<br />
|F1D5C||Vine that lowers in MCZ ||Art compression<BR>10 blocks<br />
|-<br />
|F1E06||Unknown. A log viewed from the end ||Art compression<BR>00, 4 blocks<br />
|-<br />
|F1E8C||SEGA intro sound||16000Hz mono<BR>8-bit unsigned<BR>PCM raw audio<BR> <br />
[[#Sega_intro_sound|Further info]] <br />
|-<br />
|F8000-?????||????????? (Midis?)|| <br />
|}<br />
<br />
==Offset indexes==<br />
<P>An offset index is a handy way of keeping a block of data grouped together, and also replacing a whole heap of pointers. The way it works is there is a list of two byte values, and depending on the block of data the game wants to load, it will take one of those values and add it to the starting address of the offset index. The most common usage is for every act of every level value, there is an offset that acts as the pointer to the block of data to use for it. Lets look at an example:</P><br><br />
<P>E6800: 004A 037A 5552 5552 5552 5552 5552 5552 0734 0BC0 10EE 10EE 1748 1AFC</P><br><br />
<P>Now this is the beginning of the offset index for the sprite locations. Now, can you see which values are the offset for MTZ act 2? They're 0BC0. All you had to do to get that was to take the level value for MTZ, which is 04, and count across four bytes for every value it is above 00, then across another two because it's the second act. Now we take that value and using a hex calculator, add it to the address of the offset table, which is E6800. That will give us a value of E73C0, which is the address in the rom of the MTZ act 2 sprite locations.</P><br><br />
<P>Also notice those 5552 values in there? Well those are for the unused level values in the game. You'll see some damn weird values put in for them in many places, and that's what causes the game to lockup in the final build of sonic 2 if you try and enter one of those levels.</P><br><br />
<P>There are other forms of an offset index such as the one where there's just one offset per level value, and another type that actually uses a double offset index. The first is easy enough, but a double offset index will specify two values per level, but that's not for act one and two, but rather two blocks of data to use for both acts.</P><br><br />
<br />
==Main level load block==<br />
This <br />
pointer table is what is used to load up the block mappings and main level <br />
patterns for every level in the game. Here's a breakdown of the pointer table in <br />
the S2 rom:<br />
<P><br />
<BLOCKQUOTE>42594-42660: Indexed main level load block <br />
(patterns/16x16/128x128)<BR><br />
<BLOCKQUOTE>42594-425A0: Emerald hill zone (00)<BR><br />
<BLOCKQUOTE>42594: EHZ/HTZ main level patterns (95C24) [04]<BR>42598: EHZ/HTZ 16x16 block mappings (94E74) [05]<BR>4259C: EHZ/HTZ 128x128 block <br />
mappings (99D34) [04]<BR></BLOCKQUOTE>425A0-425AC: Unknown (01)<BR><br />
<BLOCKQUOTE>425A0: EHZ/HTZ main level patterns (95C24) [06]<BR>425A4: EHZ/HTZ 16x16 block mappings (94E74) [07]<BR>425A8: EHZ/HTZ 128x128 block <br />
mappings (99D34) [05]<BR></BLOCKQUOTE>425AC-425B8: Unknown (02)<BR><br />
<BLOCKQUOTE>425AC: EHZ/HTZ main level patterns (95C24) [08]<BR>425B0: EHZ/HTZ 16x16 block mappings (94E74) [09]<BR>425B4: EHZ/HTZ 128x128 block <br />
mappings (99D34) [06]<BR></BLOCKQUOTE>425B8-425C4: Unknown (03)<BR><br />
<BLOCKQUOTE>425B8: EHZ/HTZ main level patterns (95C24) [0A]<BR>425BC: EHZ/HTZ 16x16 block mappings (94E74) [0B]<BR>425C0: EHZ/HTZ 128x128 block <br />
mappings (99D34) [07]<BR></BLOCKQUOTE>425C4-425D0: Metropolis zone (04)<BR><br />
<BLOCKQUOTE>425C4: MTZ main level patterns (9DB64) [0C]<BR>425C8: MTZ 16x16 block mappings (9CFD4) [0D]<BR>425CC: MTZ 128x128 block mappings <br />
(A06C4) [08]<BR></BLOCKQUOTE>425D0-425DC: Metropolis zone act 3 (05)<BR><br />
<BLOCKQUOTE>425E0: MTZ main level patterns (9DB64) [0C]<BR>425E4: MTZ 16x16 block mappings (9CFD4) [0D]<BR>425E8: MTZ 128x128 block mappings <br />
(A06C4) [08]<BR></BLOCKQUOTE>425DC-425E8: Wing fortress zone (06)<BR><br />
<BLOCKQUOTE>425DC: WFZ/SCZ main level patterns [10]<BR>425E0: WFZ/SCZ 16x16 block mappings [11]<BR>425E4: WFZ/SCZ 128x128 block mappings <br />
[0A]<BR></BLOCKQUOTE>425E8-425F4: Hill top zone (07)<BR><br />
<BLOCKQUOTE>425E8: EHZ/HTZ main level patterns (95C24) [12]<BR>425EC: EHZ/HTZ 16x16 block mappings (94E74) [13]<BR>425F0: EHZ/HTZ 128x128 block <br />
mappings (99D34) [0B]<BR></BLOCKQUOTE>425F4-42600: Hidden Palace zone (08)<BR><br />
<BLOCKQUOTE>425F4: OOZ 16x16 block mappings (A3364) [14]<BR>425F8: OOZ 16x16 block mappings (A3364) [15]<BR>425FC: OOZ 16x16 block mappings <br />
(A3364) [0C]<BR></BLOCKQUOTE>42600-4260C: Unknown (09)<BR><br />
<BLOCKQUOTE>42600: EHZ/HTZ main level patterns (95C24) [16]<BR>42604: <br />
EHZ/HTZ 16x16 block mappings (94E74) [17]<BR>42608: EHZ/HTZ 128x128 block <br />
mappings (99D34) [0D]<BR></BLOCKQUOTE>4260C-42618: Oil ocean zone (0A)<BR><br />
<BLOCKQUOTE>4260C: OOZ main level patterns (A4204) [18]<BR>42610: OOZ <br />
16x16 block mappings (A3364) [19]<BR>42614: OOZ 128x128 block mappings <br />
(A6834) [0E]<BR></BLOCKQUOTE>42618-42624: Mystic cave zone (0B)<BR><br />
<BLOCKQUOTE>42618: MCZ main level patterns (A9D74) [1A]<BR>4261C: MCZ <br />
16x16 block mappings (A8D04) [1B]<BR>42620: MCZ 128x128 block mappings <br />
(AD454) [0F]<BR></BLOCKQUOTE>42624-42630: Casino night zone (0C)<BR><br />
<BLOCKQUOTE>42624: CNZ main level patterns (B0894) [1C]<BR>42628: CNZ <br />
16x16 block mappings (AFFC4) [1D]<BR>4262C: CNZ 128x128 block mappings <br />
(B2CF4) [10]<BR></BLOCKQUOTE>42630-4263C: Chemical plant zone (0D)<BR><br />
<BLOCKQUOTE>42630: CPZ/DEZ main level patterns (B6174) [1E]<BR>42634: <br />
CPZ/DEZ 16x16 block mappings (B5234) [1F]<BR>42638: CPZ/DEZ 128x128 block <br />
mappings (B90F4) [11]<BR></BLOCKQUOTE>4263C-42648: Death egg zone (0E)<BR><br />
<BLOCKQUOTE>4263C: CPZ/DEZ main level patterns (B6174) [20]<BR>42640: <br />
CPZ/DEZ 16x16 block mappings (B5234) [21]<BR>42644: CPZ/DEZ 128x128 block <br />
mappings (B90F4) [12]<BR></BLOCKQUOTE>42648-42654: Aquatic ruin zone (0F)<BR><br />
<BLOCKQUOTE>42648: CPZ/DEZ main level patterns (BCC24) [22]<BR>4264C: <br />
CPZ/DEZ 16x16 block mappings (BB944) [23]<BR>42650: CPZ/DEZ 128x128 block <br />
mappings (C1434) [13]<BR></BLOCKQUOTE>42654-42660: Sky chase zone (10)<BR><br />
<BLOCKQUOTE>42654: WFZ/SCZ main level patterns (C5004) [24]<BR>42658: <br />
WFZ/SCZ 16x16 block mappings (C4074) [25]<BR>4265C: WFZ/SCZ 128x128 block <br />
mappings (C85E4) [14]<BR></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE><br />
<br />
Now as you can see, these pointers specify the loading addresses in the rom for the 16x16 and 128x128 block mappings, as well as the main pattern block for that level. The main pattern block will always be loaded into the VRAM at address 0000. These loading addresses are all preceeded by a one byte value, so the address pointer only uses three bytes rather than the standard four. The value that proceeds the 128x128 block mappings specifies a value on the palette index to load for that level. For more information on the palette system, go [[#Palettes|here]]. The values preceeding the main level pattern and 16x16 block mapping pointers give the index numbers of the pattern load cue's to use for that level. For more information on that go [[#Pattern_load_cue's|here]].<br />
<br />
==Pattern load cues==<br />
The pattern load cues are what loads all the pieces of art into the VRAM that are not in the main level load block. Here's a breakdown of the pattern load cues in the S2 rom:<br><br><br />
<br />
{|border="1"<br />
|00||426E6||Standard block 1 (score\time\rings/lives/ring/numbers)||(3)<br />
|-<br />
|01||42700||Standard block 2 (starpoll/monitor/stars/bubbles)||(3)<br />
|-<br />
|02||4271A||pattern block for level with water (explosion/stars/bubbles)||(2)<br />
|-<br />
|03||4272E||game/time over (game\time over text)||(0)<br />
|-<br />
|04||42736||EHZ (waterfall/bridge/fireball/buzz bomber/coconuts/fish)||(6)<br />
|-<br />
|05||4275C||EHZ (spikes/diagonal spring/horizontal\vertical spring)||(3)<br />
|-<br />
|06||42776||Miles 1up patch (Miles lives counter)||(0)<br />
|-<br />
|07||4277E||Miles life counter (Miles lives counter)||(0)<br />
|-<br />
|08||42786||Tails 1up patch (Tails lives counter)||(0)<br />
|-<br />
|09||4278E||Tails life counter (Tails lives counter)||(0)<br />
|-<br />
|0A||42796||MTZ (Wheel/Unknown/Unknown/MSC from MTZ/steam/Unknown/MTZ spike/Badnick/starbomb)||(8)<br />
|-<br />
|0B||427CE||MTZ (Button/spikes/Mantis/vertical spring/horizontal spring/Unknown/Lava bubble/Cog/Unknown)||(8)<br />
|-<br />
|0C||42806||WFZ (Tornado/clouds/vertical blades/horizontal blades/jet badnick/unknown/scratch/tilting platforms/tornado/clouds)||(9)<br />
|-<br />
|0D||42844||WFZ (vertical blades/ horizontal blades/ unknown/ turret/ unknown/ unknown/ unknown/ unknown/ belt/ platforms/ retracting platform/ unknown/ trolley/ rivet/ unknown)||(D)<br />
|-<br />
|0E||4289A||HTZ (fireball/rock/conveyor/orbit badnick/unknown badnick/unknown badnick/spikes/diagonal spring/vertical spring/horizontal spring)||(9)<br />
|-<br />
|0F||428D8||HTZ (lift/fireball/unknown)||(2)<br />
|-<br />
|10||428EC||OOZ (green flame/raising platform/spikeball/unknown/unknown/cascading oil/unknown/unknown)||(8)<br />
|-<br />
|11||42924||OOZ (unknown/ unknown/ swinging platform/ unknown/ fan/ button/ spikes/ diagonal spring/ vertical spring/ horizontal spring/ seahorse/ octopus)||(B)<br />
|-<br />
|12||4296E||MCZ (box/collapsing platform/vine switch/lowering vine/firefly/unknown badnick)||(5)<br />
|-<br />
|13||42994||MCZ (long horizontal spike/ spikes/ unknown/ other spring/ vertical spring/ horizontal spring)||(5)<br />
|-<br />
|14||429BA||CNZ (unknown badnick/ moving cube/ unknown/ unknown/ unknown/ unknown/ unknown/ unknown/ unknown/ destroyable blocks)||(9)<br />
|-<br />
|15||429F8||CNZ (poky spring/vertical red spring/spikes/diagonal spring/vertical spring/horizontal spring)||(5)<br />
|-<br />
|16||42A1E||CPZ (CPZ stuff/CPZ stuff/booster/moving platform/small moving platform/spring cap/water surface/moving block/CPZ platform blocks)||(8)<br />
|-<br />
|17||42A56||CPZ (unknown badnick/unknown badnick/spikes/unknown/other spring/vertical spring/horizontal spring)||(6)<br />
|-<br />
|18||42A82||DEZ (stripy blocks from CPZ)||(0)<br />
|-<br />
|19||42A8A||DEZ (robotic sonic/unknown/Robotnic/Robotnic's head/Robotnic's lower half)||(4)<br />
|-<br />
|1A||42AAA||ARZ (one way barrier/water surface/leaves/arrow shooter)||(3)<br />
|-<br />
|1B||42AC4||ARZ (shark/blowfly/grounder/bubbles/spikes/other spring/vertical spring/horizontal spring)||(7)<br />
|-<br />
|1C||42AF6||SCZ (tornado)||(0)<br />
|-<br />
|1D||42AFE||SCZ (clouds/vertical blades/horizontal blades/jet badnick/turtle badnick/bomber)||(5)<br />
|-<br />
|1E||42B24||Sonic end of level results screen (title card patterns/unknown/sonic continue/perfect text)||(3)<br />
|-<br />
|1F||42B3E||End of level signpost (signpost)||(0)<br />
|-<br />
|20||42B46||CPZ boss (Robotnic's main ship/CPZ boss/mini explosion/unknown/large explosion)||(4)<br />
|-<br />
|21||42B66||EHZ boss (Robotnic's main ship/EHZ boss/chopper blades/large explosion)||(3)<br />
|-<br />
|22||42B80||HTZ boss (Robotnic's main ship/HTZ boss/large explosion/unknown)||(3)<br />
|-<br />
|23||42B9A||ARZ boss (Robotnic's main ship/ARZ boss/large explosion)||(2)<br />
|-<br />
|24||42BAE||MCZ boss (Robtnic's main ship/MCZ boss/large explosion)||(2)<br />
|-<br />
|25||42BC2||CNZ boss (Robotnic's main ship/CNZ boss/large explosion)||(2)<br />
|-<br />
|26||42BD6||MTZ boss (Robotnic's main ship/MTZ boss/mini explosion/large explosion)||(3)<br />
|-<br />
|27||42BF0||OOZ boss (OOZ boss/large explosion)||(1)<br />
|-<br />
|28||42BFE||Unknown (large explosion)||(0)<br />
|-<br />
|29||42C06||Death egg (Death egg)||(0)<br />
|-<br />
|2A||42C0E||EHZ animals (squirrel/blue bird)||(1)<br />
|-<br />
|2B||42C1C||MCZ animals (rat/chicken)||(1)<br />
|-<br />
|2C||42C2A||HTZ/MTZ/WFZ animals (beaver/penguin)||(1)<br />
|-<br />
|2D||42C38||DEZ animals (pig/chicken)||(1)<br />
|-<br />
|2E||42C46||Unknown (HPZ animals) (rat/seal)||(1)<br />
|-<br />
|2F||42C54||OOZ animals (penguin/seal)||(1)<br />
|-<br />
|30||42C62||SCZ animals (turtle/chicken)||(1)<br />
|-<br />
|31||42C70||CNZ animals (bears/blue bird)||(1)<br />
|-<br />
|32||42C7E||CPZ animals (rabbit/penguin)||(1)<br />
|-<br />
|33||42C8C||ARZ animals (penguin/blue bird)||(1)<br />
|-<br />
|34||42C9A||Special stage (emerald/unknown/special stage text/horizontal shadow/diagonal shadow/vertical shadow/explosion patterns/special stage ring/"Start"/unknown/special stage background/stars/"Tails")||(C)<br />
|-<br />
|35||42CDE||Unknown (Unknown)||(0)<br />
|-<br />
|36||42CF4||Boss at end of WFZ (Laser boss from WFZ/Robotnic/Robotnic's head/Robotnic's lower half/explosion)||(4)<br />
|-<br />
|37||42D12||Tornado at end of WFZ (tornado/rocket thruster from tornado/clouds)||(2)<br />
|-<br />
|38||42D26||Egg prison (egg prison)||(0)<br />
|-<br />
|39||42D2E||Normal explosion (explosion)||(0)<br />
|-<br />
|3A||42D36||Tails end of level results screen (title card patterns/unknown/tails continue/perfect text)||(3)<br />
|}<br />
<br><br />
This pointer list has an offset index to locate the correct cue. Go [[#Offset_indexes|here]] for an explanation of how this works. Now, each load cue has a two byte value before it that specifies how many addresses are in the cue, to avoid it reading too far, and going into the next cue. This value is dead simple, just enter the number of patterns on the cue in hex between the first two bytes, but you have to count 00 as 1, so if there was 16 loading addresses in the cue, you'd have 000F preceding it. After that, there are 6 bytes per load request. The first four bytes are a pointer to the art block to use, and the two bytes after that are the location in the VRAM to load them into.To change the pattern load cue's being loaded for a level, you need to change the values in the main level load block. For more information on that go [[#Main_level_load_block|here]].<br><br />
<br />
==Collision definitions==<br />
Ok, I’m going to explain how collision works on objects that are not sprites in the sonic games. First of all forget the image that the block contains. The image has absolutely nothing to do with the collision. There's basically in invisible collision box on top of every 16x16 block that sets what's solid and what's not. This collision box has two parts to it. The main part of it is the collision array (an array is basically a table of values). The collision array stores the actual data that says that is a block is solid in certain places. It does that through 16 bytes per collision box. To understand how those 16 bytes set what's solid, imagine a 16x16 block. Now imagine that 16x16 block with the numbers 1-10 (hex) down the side starting from the bottom and going up to the top, and starting from the left and going up as it moves right along the top, so that you can give an exact location of each pixel. (eg, the top left pixel would be 10,00) Now, in this array the first two bytes define what's solid for the row of pixels on the left side of that 16x16 block. Basically the first of those two bytes says where to start making things solid, and the second byte says where to stop making them solid. So if you entered the value 0010, the first row would be solid from the very bottom of the block all the way up to the top. If you were to enter the value 020E, there would be two pixels on either side of the block that are not solid, and everything in the middle would be. The next two bytes after that are for the next row, etc. After 16 bytes the definitions for the next collision box begin.</P><br><br />
<P>Now, to specify which blocks use which collision boxes, there are collision indexes, which give an array location for each 16x16 block. If you look at the space used by the collision array, you can divide that by 16 (the number of bytes used by each entry into the array) to give a one byte value, which represents the maximum number of collision boxes that the array can hold in the S2 platform, which is FF. Now, for each level there is at least one 16x16 collision index, and that index consists of a whole heap of array locations, one for each 16x16 block. If for example you wanted the 9th 16x16 block to use the collision box with an array location of 3E, you would give the 9th byte of the collision index for that level a value of 3E.</P><br><br />
<P>It is through collision indexes that the loops work in the game. It's commonly believed that there are layers, and that the sprite represented by 4 rings changes between them. This is partly true. For any levels that use multiple layers like that, there is a secondary 16x16 collision index. That object switches the 16x16 collision index in use. The pointers to these 16x16 collision indexes are stored at 49E8-4A70. The first set of pointers in this group specify the location of the primary collision index to use for each level, and the second set specify the location of the secondary collision index to use for each level.</P><br><br />
<P>Now just setting something as solid, doesn't give it the effect of having a slope. There's an index in the rom, which has one byte in it for each collision array location. To understand how this value works, think of two lines running parallel to each other, both with the value 0-F along them. Now, the first value of the byte gives a point on the right line, and the second value gives a point on the left line. Now imagine drawing a line between these to points. If the points are different, the resulting gradient will be taken to create the effect of a slope and the resistance going up it on the box in the corresponding collision array location.</P><br><br />
<br />
==Level layout==<br />
The level data in the S2 rom is compressed. Editing compressed data is extremely impractical, so you can either extract it first using an extraction program such as ChaoSaX-Extract, and once it's in that form refer to my savestate hacking info for information on how to edit it. Once you've finished editing it you can then use the soon to be added compression routine in ChaoSax-Extract to recompress it, and then you can place it back into the rom. If it is a larger size than the original, you will need to fiddle around with the locations and the offset index to get it back in.<br><br />
<br />
==Ring placement==<br />
The data for ring placement has an offset index to locate the correct group. Go [[#Offset_indexes|here]] for an explanation of how this works. Now, in the rom each ring does not have to be stored individually. Instead you can place one ring, and specify that a certain number of rings come after it. The definitions for one ring takes up 4 bytes in the rom. Let's look at an example:<br><br />
1234 5678<br><br />
Now, in this example the ring will be placed at an x location of 1234, and a y location of 678. With that value where the 5 was entered, if the value entered is below 8, an additional ring will be placed next to the one before it for every unit that the value entered is above 0. Entering a value above 8 will place an additional ring below the one before it for each unit that the value entered is above 8. When specifying a position as the start of a group of rings, if the group is horizontal, the rings will go across to the right of that point, and if the group is vertical the rings will go down from that point. The value FFFF closes the group of ring locations, and it is essential that this is at the end of the ring locations list, or else the game will keep on reading past that point until it hits that value.<br><br />
<br />
==Sprite placement==<br />
Sprites are quite simple to define. It takes six bytes to define one sprite. The first two bytes are the x location of the sprite, and the next two bytes are the y location of the sprite. The 5th byte is the number on the sprite array to lookup to get the location for the function to use for the programming of that sprite, and the 6th byte is an optional declaration to use with the function for that sprite. Go [[#Sprite_programming|here]] for more info on what exactly that means, and a list of all the sprites in the S2 rom.<br><br />
<br />
==Main level Block mappings==<br />
The block mappings in the S2 final rom are compressed. If you want to edit them you need to extract them first, edit them, and then recompress them afterwards. For more information on exactly what the block mappings do, and how to edit them, refer to the sonic 2 savestate breakdown. Note that the 16x16 block mappings in the S2 beta rom are not compressed, so if any port from the beta to the final is to be successful, those mappings will need to be compressed first.<br><br />
<br />
==Main level pattern blocks==<br />
Unlike the beta, the main pattern block for the levels do not use the standard art compression format, but a less complex one to allow the patterns to be loaded faster into the VRAM, and hence cut down on loading times for levels significantly. Also unlike the standard art compression format, this one has been cracked. A decompression utility such as ChaoSaX-Extract is capable of decompressing these patterns. If a port is to be done from the beta, it will be necessary to either allow the game to decompress the main pattern block into the VRAM, and then recompressing the appropriate blocks manually and putting them into the rom, or just cheat and stick these patterns on the pattern load cue. That is rather sloppy though. For information on how to edit extracted patterns, refer to the Sonic 2 savestate breakdown.<br><br />
<br />
==Uncompressed art==<br />
Any art that needs to be updated on the fly will not be compressed in the rom. This is because the game can't work with compressed data, and needs to extract any data it wants to use to the ram. This decompression process takes a fair bit of computation, and because of that it wouldn't be possible to create the appearance of a smooth animation using compressed data. The same reason is true as to why any data that is not loaded into the ram will always be uncompressed, because otherwise they would have to load it into the ram just to read it.<br><br />
<P>Now, for example all of the blocks for Sonic and Tails are uncompressed, because they of course need to be updated quickly. You can use basically any editing utility to edit them, but you can only change what each block looks like through this. In order to edit what blocks are placed where in each of Sonic's animation frames, you need to edit the mappings for them, and for more information on that go [[#Mappings_for_Sonic/Tails|here]]. Now in their uncompressed form, you can edit them just like you would in the VRAM, so for more information on that check the sonic 2 savestate breakdown.</P><br><br />
<br />
==Mappings for Sonic/Tails==<br />
What the mappings do is they tell the game what patterns to display, and where to put them for each of the frames that the sprite has. The mappings for most sprites are contained within their function (go [[#Sprite_programming|here]] for more details), but with the Sonic and Tails sprites, to allow the programmers to add a new frame easily without having to recompile the function, and hence the whole game because of the size difference, they created a separate array containing the mapping data for each frame. I haven't examined this to see how it works yet, but when I do I’ll explain the format here.<br><br />
<br />
==Sega intro sound==<br />
The Sega intro sound is just a 16000HZ wav sound. Opening up the rom in any sound editing program that supports raw audio with the settings listed next to the location on the list will enable you to playback the sound effect. You could also insert your own sound in the same place as long as it's at the same bitrate. The bitrate is to do with the quality of the sound. The lower it is the crappier it will sound, because that's to do with how often the output is modified. Just think of the difference between long play and short play on a VCR. Stuff recorded in long play does save space, but the quality of the recording is worse.<br><br />
<br />
==Art compression format==<br />
The art compression format is a very dense compression format. It's only used for art because the format relies on the data being in blocks of 64 bytes. This format is used for all the compressed art in sonic 1 and sonic 2 beta, and all the compressed art except for the main level pattern blocks in Sonic 2 and S3&K. As I said this format is very dense, and as such it requires a hell of a lot of computation to decompress. Because of this it also requires a hell of a lot of time and effort to crack. I've had a go at it, but the lightning has yet to strike. When I crack it I’ll post the format breakdown here, and create a simple program to decompress it, but until then it is impossible to directly edit any art using this format. The porting of a compressed block of art is simple though, so if you want to transfer beta art to the final, you can just tack it onto the end and enter the pointer into the pattern load cue of the level or event you want it to appear at, along with a VRAM location to load it into. Go [[#Pattern_load_cue's|here]] for more information on that.<br><br />
<br />
==Dynamic pattern reloading==<br />
Dynamic pattern reloading is a method of loading patterns into the VRAM, but unlike the other methods, this one has no limitations, because it uses actual programmed code. Basically this is here for any effects to do with patterns changing in game that isn't posible using the normal load cue system, like the hills in the background of HTZ where the patterns to display are determined by the position of the screen. Because the programming for it is in the form of compiled code, direct editing of it is not possible.<br><br />
<br />
==Animated pattern load cue's==<br />
Animated patterns require the art they are working with to be in an uncompressed form, so if you are attempting to make an animated pattern, make sure the art is uncompressed or it won't work. Now, the length of each load request on the cue varies depending on the animation. The first byte specifies a value that will determine how often to switch frames in the animation. If you use this value you will not be able to specify a frame as having a different duration to another. Setting this to FF will disable automatic frame control and allow the user to input a manual duration for each frame. This will mean that for every frame the user wants in the animation, they have to allow another byte at the end of the load request. If you want automatic pattern control, which you would use if you want all the animations frames to have the same duration. Just enter how many screen refreshes to wait until the next frame of the animation is displayed. Bytes 2,3, and 4 are the address in the rom to load the patterns from. Bytes 5 and 6 are the location in VRAM to load the patterns into. Byte 7 is the number of frames the animation has, and byte 8 is the number of spaces in VRAM to use for each frame. The function of the bytes beyond this point depend on whether or not automatic frame control is enabled, so refer to appropriate section below.<br><br><br />
<p>With automatic frame control:<br><br />
One byte per frame of animation. This byte simply specifies the image to use for each frame of the animation. Based on the loading address entered, this value is the offset in 8x8 blocks to load each frame from in the rom. So if for example you were dealing with an animation that had 4 8x8 blocks per frame, and there were 4 frames of that, and you wanted it to display each frame one by one, you would enter the value 0004 080C.</p><br><br />
<p>Without automatic frame control:<br><br />
Two bytes per frame of animation. The first byte is the offset of blocks in the file to load the animation frame from. This byte simply specifies the image to use for each frame of the animation. Based on the loading address entered, this value is the offset in 8x8 blocks to load each frame from in the rom. The second byte is the number of screen refreshes to keep that image loaded for, before going on to the next animation frame.<br><br />
<br />
==Misc sprite definitions==<br />
It looks like there are some sprites that get thier mappings and whatnot from this index, so they can reuse just a couple of sprites for some of the the miscellaneous objects in a level that the character doesn't actually interact with, but those objects can be completely different from one level to the next. A handy way of avioding programming each one individually, and thus saving a hell of a lot of space. As for how to edit them, well I haven't looked at that yet, but when I do i'll post an explination of the format here.<br><br />
<br />
==Rasterised layer deformation==<br />
Raster effects are simply effects to do with deformation of an image based on lines of pixels. In Sonic 2, these effects are used to create the movement effects for the backgrounds of all the levels, as well as the 2 player splitscreen effect. Because the programming for these effects are stored in the form of compiled code, you'll have to learn 68K ASM in order to edit them. Switching between levels is easy enough though, just change the corresponding value on the preceeding offset index to link to the effect you wish to use.<br><br />
<br />
==Palettes==<br />
All the main palettes used in the game are linked in a pointer table at 294E. In this pointer table there are 8 bytes per palette. The first four simply give a location in the rom for the data to load. The fifth and sixth bytes give the location in the system ram to load the data into, and the seventh and eighth bytes give the number of bytes being loaded. Here's a palette pointer:<br><br>0000 2942 FB20 0007<br><br>Now in this case the palette is being loaded from 00002942 in the rom into the beginning of the second above water palette row (FB20), and it's loading 4 colours (0007). Here's a listing of the palette pointers in the S2 rom:<br><br><br />
<br />
<TABLE align=center border=1><br />
<TR><br />
<TD>00</TD><br />
<TD>2782</TD><br />
<TD>SEGA screen palette (28C2)</TD></TR><br />
<TR><br />
<TD>01</TD><br />
<TD>278A</TD><br />
<TD>Title screen palette (2942)</TD></TR><br />
<TR><br />
<TD>02</TD><br />
<TD>2792</TD><br />
<TD>Unknown palette (2962)</TD></TR><br />
<TR><br />
<TD>03</TD><br />
<TD>279A</TD><br />
<TD>"Sonic and Miles" screen palette (29E2)</TD></TR><br />
<TR><br />
<TD>04</TD><br />
<TD>27A2</TD><br />
<TD>EHZ palete (2A22)</TD></TR><br />
<TR><br />
<TD>05</TD><br />
<TD>27AA</TD><br />
<TD>Level value 01 palette (2A22)</TD></TR><br />
<TR><br />
<TD>06</TD><br />
<TD>27B2</TD><br />
<TD>WZ palette (2A82)</TD></TR><br />
<TR><br />
<TD>07</TD><br />
<TD>27BA</TD><br />
<TD>Level value 03 palette (2A22)</TD></TR><br />
<TR><br />
<TD>08</TD><br />
<TD>27C2</TD><br />
<TD>MTZ palette (2AE2)</TD></TR><br />
<TR><br />
<TD>09</TD><br />
<TD>27CA</TD><br />
<TD>MTZ act 3 palette (2AE2)</TD></TR><br />
<TR><br />
<TD>0A</TD><br />
<TD>27D2</TD><br />
<TD>WFZ palette (2B42)</TD></TR><br />
<TR><br />
<TD>0B</TD><br />
<TD>27DA</TD><br />
<TD>HTZ palette (2BA2)</TD></TR><br />
<TR><br />
<TD>0C</TD><br />
<TD>27E2</TD><br />
<TD>HPZ palette (2C02)</TD></TR><br />
<TR><br />
<TD>0D</TD><br />
<TD>27EA</TD><br />
<TD>Level value 09 (2A22)</TD></TR><br />
<TR><br />
<TD>0E</TD><br />
<TD>27F2</TD><br />
<TD>OOZ palette (2CE2)</TD></TR><br />
<TR><br />
<TD>0F</TD><br />
<TD>27FA</TD><br />
<TD>MCZ palette (2D42)</TD></TR><br />
<TR><br />
<TD>10</TD><br />
<TD>2802</TD><br />
<TD>CNZ palette (2DA2)</TD></TR><br />
<TR><br />
<TD>11</TD><br />
<TD>280A</TD><br />
<TD>CPZ palette (2E02)</TD></TR><br />
<TR><br />
<TD>12</TD><br />
<TD>2812</TD><br />
<TD>DEZ palette (2EE2)</TD></TR><br />
<TR><br />
<TD>13</TD><br />
<TD>281A</TD><br />
<TD>ARZ palette (2F42)</TD></TR><br />
<TR><br />
<TD>14</TD><br />
<TD>2822</TD><br />
<TD>SCZ palette (3022)</TD></TR><br />
<TR><br />
<TD>15</TD><br />
<TD>282A</TD><br />
<TD>HPZ underwater palette (2C62)</TD></TR><br />
<TR><br />
<TD>16</TD><br />
<TD>2832</TD><br />
<TD>CPZ underwater palette (2E62)</TD></TR><br />
<TR><br />
<TD>17</TD><br />
<TD>283A</TD><br />
<TD>ARZ underwater palette (2FA2)</TD></TR><br />
<TR><br />
<TD>18</TD><br />
<TD>2842</TD><br />
<TD>Main special stage palette (3162)</TD></TR><br />
<TR><br />
<TD>19</TD><br />
<TD>284A</TD><br />
<TD>Unknown palette (3082)</TD></TR><br />
<TR><br />
<TD>1A</TD><br />
<TD>2852</TD><br />
<TD>Unknown palette (30A2)</TD></TR><br />
<TR><br />
<TD>1B</TD><br />
<TD>285A</TD><br />
<TD>Special stage 1 palette (31C2)</TD></TR><br />
<TR><br />
<TD>1C</TD><br />
<TD>2862</TD><br />
<TD>Special stage 2 palette (31E2)</TD></TR><br />
<TR><br />
<TD>1D</TD><br />
<TD>286A</TD><br />
<TD>Special stage 3 palette (3202)</TD></TR><br />
<TR><br />
<TD>1E</TD><br />
<TD>2872</TD><br />
<TD>Special stage 4 palette (3222)</TD></TR><br />
<TR><br />
<TD>1F</TD><br />
<TD>287A</TD><br />
<TD>Special stage 5 palette (3242)</TD></TR><br />
<TR><br />
<TD>20</TD><br />
<TD>2882</TD><br />
<TD>Special stage 6 palette (3262)</TD></TR><br />
<TR><br />
<TD>21</TD><br />
<TD>288A</TD><br />
<TD>Special stage 7 palette (3282)</TD></TR><br />
<TR><br />
<TD>22</TD><br />
<TD>2892</TD><br />
<TD>Unknown palette (32A2)</TD></TR><br />
<TR><br />
<TD>23</TD><br />
<TD>289A</TD><br />
<TD>Unknown palette (32C2)</TD></TR><br />
<TR><br />
<TD>24</TD><br />
<TD>28A2</TD><br />
<TD>Unknown palette (32E2)</TD></TR><br />
<TR><br />
<TD>25</TD><br />
<TD>28AA</TD><br />
<TD>OOZ boss palette (30C2)</TD></TR><br />
<TR><br />
<TD>26</TD><br />
<TD>28B2</TD><br />
<TD>Menu palette (30E2)</TD></TR><br />
<TR><br />
<TD>27</TD><br />
<TD>28BA</TD><br />
<TD>Unknown palette (3302)</TD></TR></TABLE><br><br />
<br />
To change the palette being loaded for each level, you need to change the palette index number in the main level load block. For more information on that go here. The palettes themeslves are very easy to modify as they are all uncompressed in the rom. Refer to the savestate hacking documents for information on how to edit palettes.<br><br />
<br />
==Level size array==<br />
All the sizes of the levels are stored in a simple array, and can be easily modified to change the boundaries of the level. This array is located at C054, and for each act there are four values. The first gives the X start location of the level, and the second gives the X end location of the level. Likewise the third value gives the Y start location of the level, and the fourth gives the Y end location of the level.<br><br />
<br />
==Character start location array==<br />
The start location for the characers and the camera for each level are stored in this array at address C1D0. It couldn't be any simpler to modify, there's just two values per act, the first being the X location, and the second being the Y location.<br><br />
<br />
==Music playlist for levels==<br />
This is actually part of a sub in the code, but it's editable all the same. Pretty simple, just one byte per level. That one byte is the value of the song you wish to play. You must enter the value in the form in which it is displayed in the beta version, which is with 80 as the starting value, not 00 as it is displayed in the final. You'll notice with the value for death egg, it's 08 not 88, which is why there's no sound in the level.<br><br />
<br />
==Level order==<br />
There are several different sections in the game to do with the order of levels. The first one is the one that determins which level the game loads when someone finishes a level. The second one is the one which determins which level to load when you select a level from the level select menu. The level select one is easy to modify, just enter the level value followed by an act number for each of the levels you want to load, in the order you want them to be loaded. For a list of the level values for all the different stages, look at the beginning of the introduction to this page. Note that if you load the same level into the level order twice, when you link to it via the level select, it will continue the sequence from the last one in the list, not the first.<br><br />
The second system for which level to load when one ends works slightly differently. There is a list of values, with two bytes allocated to each act of each level. That two byte value is simply the value of the level you wish to load when that level ends. So, if you wanted ARZ act 1 to load up when you finish MTZ act 2, you would take the location of the table, which in this case is 142F8, and you would add 18 bytes to that location, and then you would replace the next two bytes from that point with 0F00. That's becuase you add four bytes to the address for every level that comes before it, and in this case there are 4, and then you would add another 2 bytes becuase you want to alter the level to load when you finish the second act.</p><br />
<p>Also, note that when you want a level to be the last level in the game, you must enter the value FFFF as the stage to load when it finishes. This tells the game to end and return to the title screen.</p><br><br />
<br />
==Object debug list==<br />
This list is what determins what sprites you can place in debug mode, and in what levels. An offset index is used to locate which object debug list to use for which level, so if you want further info on that go [[#Offset_indexes|here]]. Now, there is a 2 byte value at the start of each debug list. That 2 byte value is simply the number of sprites in the list. After that there are 8 bytes per sprite. Here's an object that's present in an object debug list from sonic 2:<br />
<br />
<TABLE align=center border=1><br />
<TR><br />
<TD colSpan=2>2601</TD><br />
<TD colSpan=2>2D36</TD><br />
<TD colSpan=2>0800</TD><br />
<TD colSpan=2>0680</TD></TR><br />
<TR><br />
<TD><FONT color=red>1</FONT></TD><br />
<TD><FONT color=green>2</FONT></TD><br />
<TD><FONT color=green>3</FONT></TD><br />
<TD><FONT color=green>4</FONT></TD><br />
<TD><FONT color=blue>5</FONT></TD><br />
<TD><FONT color=yellow>6</FONT></TD><br />
<TD><FONT color=pink>7</FONT></TD><br />
<TD><FONT color=pink>8</FONT></TD></TR></TABLE><br><br><br />
And here's a quick referance sheet of what each byte does. For further info <br />
on each one, refer to information below.<br><br><br />
<TABLE align=center border=1><br />
<TR><br />
<TD><FONT color=red>1</FONT></TD><br />
<TD>Object number</TD></TR><br />
<TR><br />
<TD><FONT color=green>2-4</FONT></TD><br />
<TD>Sprite mappings</TD></TR><br />
<TR><br />
<TD><FONT color=blue>5</FONT></TD><br />
<TD>Declaration</TD></TR><br />
<TR><br />
<TD><FONT color=yellow>6</FONT></TD><br />
<TD>Frame to display</TD></TR><br />
<TR><br />
<TD><FONT color=pink>7 and 8</FONT></TD><br />
<TD>flip/mirror/palette/VRAM location</TD></TR></TABLE><br><br><br />
Object number:<br>This value is what determins which object to use. For a list of all the sprites in the game, check out the sprite programming section of this document here. In the case of the above example the object number is 26, which is a monitor.<br><br>Sprite mappings:<br>This is a pointer to the location in the rom to load the mappings for that sprite. This will be located in the programming for the sprite itself. Do not change this unless porting between levels, or you're absolutely sure you know what you're doing, or the game will most likely hang. This only affects the preview picture, not the placed object itself. In this case, the sprite mappings are being loaded from the address 012D36 in the rom.<br><br>Declaration:<br>This is the declaration for the loading of the sprite. For information on exactly what that is, go here. In this example the declaration is 08, which switches the type of monitor it is in the case of this sprite.<br><br>Frame to display:<br>This is simply the frame of the sprite that will be displayed on the preview picture before you place an object. Right now it's set to 00, which is the first frame.<br><br>Flip/mirror/VRAM location:<br>The first hex value of the 7th byte is to do with flipping and mirroring of the sprite, as well as the palette line to use for it. Refer to the following table for an explination of what responce each value will create.<br><br />
<br />
<TABLE align=center border=1><br />
<TR align=middle><br />
<TD>Value</TD><br />
<TD>palette line</TD><br />
<TD>flipped horizntally</TD><br />
<TD>flipped vertically</TD></TR><br />
<TR align=middle><br />
<TD>0</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>1</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>2</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>3</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>4</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>5</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>6</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>7</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>y</TD></TR><br />
<TR align=middle><br />
<TD>8</TD><br />
<TD>1</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>9</TD><br />
<TD>1</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>A</TD><br />
<TD>2</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>B</TD><br />
<TD>2</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>C</TD><br />
<TD>3</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>D</TD><br />
<TD>3</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>E</TD><br />
<TD>4</TD><br />
<TD>n</TD><br />
<TD>n</TD></TR><br />
<TR align=middle><br />
<TD>F</TD><br />
<TD>4</TD><br />
<TD>y</TD><br />
<TD>n</TD></TR></TABLE><br><br />
<br />
In the case of our example, the value of 0 is used, so the preview image will use the first palette line, and will not be flipped or mirrored. <br><br>The last hex value of the 7th byte, and all of the 8th byte in this block combine to give a starting location in the VRAM to find the patterns to use for that sprite when displaying the preview. This is not an actual location, but merely the number of blocks after which to load the patterns from. After the value of 800 is passed, the block number resets to zero but the image is mirrored. In this case, that block number is 680.<br><br>And that's about it. I've just realised that this is a rediculous amount of detail for such a small thing, but at least you're sure to get it.<br><br />
<br />
==Sprite programming==<br />
The programming for a sprite in the sonic games are stored as a function, and that function can take one declaration. People often confuse this declaration with a subtype value, but it's not really. What that basically means for the non programmers out there is that when the game places a sprite, you can enter a value along with the sprite number that may alter something about that sprite, but what it does varies depending on what sprite you're working with. Now because these functions are now compiled, the only way you can effectively edit them is to find the code for it and decompile it into assembly, alter it as necessary, and then recompile it and enter it back into the rom. This document will contain all the info necessary to enter a new sprite or replace an old one, but when it comes to the ASM you're on your own. <br><br>Now, the value assigned to a sprite in the game is done by a pointer index at 1600C-1637C. It’s Pretty simple, just one pointer per address value. Here's the pointer list in Sonic 2. I've named all the ones I could at the time. I made this list quite a while ago though, and I think I could do a better job if I redid it now, but I can't be stuffed doing it at this point in time.<br><br />
<br />
{| width="100%" border=1<br />
|-<br />
| 1<br />
| Sonic [19F50]<br />
|-<br />
| 2<br />
| Tails [1B8A4]<br />
|-<br />
| 3<br />
| ??????? [1FCDC]<br />
|-<br />
| 4<br />
| ??????? [208DC]<br />
|-<br />
| 5<br />
| ??????? [1D200]<br />
|-<br />
| 6<br />
| Rotating cylinder in Metropolis zone [214C4]<br />
|-<br />
| 7<br />
| Oil (stretches across entire map) [24020]<br />
|-<br />
| 8<br />
| Unknown (some kind of vertical barrier, but barrier is not visible) [1DD20]<br />
|-<br />
| 9<br />
| ??????? [338EC]<br />
|-<br />
| A<br />
| ??????? [1D320]<br />
|-<br />
| B<br />
| Section of pipe that tips you off from chemical plant zone [2009C]<br />
|-<br />
| C<br />
| Unknown (some strange thing that bobs up and down. Possibly top of water in HPZ.) [20210]<br />
|-<br />
| D<br />
| Unknown (hit it from left or right and get thrown back faster than should be possible) [191B8]<br />
|-<br />
| E<br />
| Flashing stars from intro [12E18]<br />
|-<br />
| F<br />
| ??????? [13600]<br />
|-<br />
| 10<br />
| Unknown (tails won't move) [347EC]<br />
|-<br />
| 11<br />
| ??????? [F66C]<br />
|-<br />
| 12<br />
| Master emerald [2031C]<br />
|-<br />
| 13<br />
| ??????? [203AC]<br />
|-<br />
| 14<br />
| See saw thingy from hill top zone [21928]<br />
|-<br />
| 15<br />
| Swinging platform from ARZ [FC9C]<br />
|-<br />
| 16<br />
| Diagonally moving lift thing from HTZ [21DAC]<br />
|-<br />
| 17<br />
| Unknown (looks like some sort of steam burst like from MTZ) [10310]<br />
|-<br />
| 18<br />
| Stationary floating platform from ARZ [104AC]<br />
|-<br />
| 19<br />
| Unknown (some kind of floating platform that moves back and forth, but not very far) [22018]<br />
|-<br />
| 1A<br />
| Collapsing platform from either OOZ or MCZ [108BC]<br />
|-<br />
| 1B<br />
| Booster things from CPZ [222AC]<br />
|-<br />
| 1C<br />
| ??????? [111D4]<br />
|-<br />
| 1D<br />
| Unknown (seemed to have a random area within a set distance from the sprite in which you could get hurt.) [22408]<br />
|-<br />
| 1E<br />
| Spin tube from CPZ [2259C]<br />
|-<br />
| 1F<br />
| Collapsing platform from OOZ [10A08]<br />
|-<br />
| 20<br />
| Unknown (lava bomb that Robotnic drops in HTZ?) [22FF8]<br />
|-<br />
| 21<br />
| Unknown (sprite just changes between two palette lines) [80BE]<br />
|-<br />
| 22<br />
| Arrow shooter from ARZ [25694]<br />
|-<br />
| 23<br />
| Pillar that drops it's lower part from ARZ [2588C]<br />
|-<br />
| 24<br />
| ??????? [1F8A8]<br />
|-<br />
| 25<br />
| A ring [11F44]<br />
|-<br />
| 26<br />
| Monitor [12670]<br />
|-<br />
| 27<br />
| An explosion of an enemy, giving off an animal and 100 points [21088]<br />
|-<br />
| 28<br />
| An animal and the 100 that are given off from busting a badnick [1188C]<br />
|-<br />
| 29<br />
| The 100 [11DC6]<br />
|-<br />
| 2A<br />
| Stomper from MCZ [115C4]<br />
|-<br />
| 2B<br />
| Raising pillar from ARZ [25A5A]<br />
|-<br />
| 2C<br />
| Sprite that makes leaves fly off when you hit it from ARZ [26104]<br />
|-<br />
| 2D<br />
| One way barrier from CPZ and DEZ [1169A]<br />
|-<br />
| 2E<br />
| Image of what was in monitor flying up like it does when you bust it [12854]<br />
|-<br />
| 2F<br />
| Unknown (a small block) [23300]<br />
|-<br />
| 30<br />
| Unknown (something you can't see with a collision box the size of the whole damn screen) [238DC]<br />
|-<br />
| 31<br />
| Lava collision marker [20DEC]<br />
|-<br />
| 32<br />
| Unknown (A block that when you hit it from the top you get 100 points, and it then splits into six pieces which fly down off the screen) [2351A]<br />
|-<br />
| 33<br />
| Platform that shoots up in the air from oil ocean zone [23AF4]<br />
|-<br />
| 34<br />
| Sprite for level title card [13C48]<br />
|-<br />
| 35<br />
| ??????? [1D97E]<br />
|-<br />
| 36<br />
| Vertical spikes [15900]<br />
|-<br />
| 37<br />
| Sprite of rings spraying out from being hit by an enemy [12078]<br />
|-<br />
| 38<br />
| Shield that surrounds character [1D8F2]<br />
|-<br />
| 39<br />
| Unknown (sprite comes from the left, and sits on the screen near the centre. If you press jump it will reset to Sega logo. Possibly game over sprite.) [13F74]<br />
|-<br />
| 3A<br />
| End of level result screen [14086]<br />
|-<br />
| 3B<br />
| Unknown (a block) [15CC8]<br />
|-<br />
| 3C<br />
| Unknown (a barrier you can smash by dashing into. Like the rock barriers in Sonic 3.) [15D44]<br />
|-<br />
| 3D<br />
| Block thingy in OOZ that launches you into the round ball things [24DD0]<br />
|-<br />
| 3E<br />
| Egg prison [3F1E4]<br />
|-<br />
| 3F<br />
| Fan blowing to the left from OOZ [2A7B0]<br />
|-<br />
| 40<br />
| Weird lever like spring from CPZ and ARZ [26370]<br />
|-<br />
| 41<br />
| Red spring facing upwards [18888]<br />
|-<br />
| 42<br />
| Thing that pops up and releases steam sideways from metropolis zone [26634]<br />
|-<br />
| 43<br />
| Spiky ball from OOZ [23E40]<br />
|-<br />
| 44<br />
| Star ball that sonic bounces off from CNZ [1F730]<br />
|-<br />
| 45<br />
| Strange spring from OOZ facing vertically [240F8]<br />
|-<br />
| 46<br />
| Ball sitting on strange spring from OOZ [24A16]<br />
|-<br />
| 47<br />
| Button [2FCF4]<br />
|-<br />
| 48<br />
| Thingy from OOZ that you enter when flying as a ball, and it turns and throws you another direction [25244]<br />
|-<br />
| 49<br />
| Unknown (Huge vertical laser from WFZ?) [20B9E]<br />
|-<br />
| 4A<br />
| Octopus badnick from OOZ [2CA14]<br />
|-<br />
| 4B<br />
| Buzz bomber from EHZ [2D068]<br />
|-<br />
| 4C<br />
| ??????? [1637C]<br />
|-<br />
| 4D<br />
| ??????? [1637C]<br />
|-<br />
| 4E<br />
| ??????? [1637C]<br />
|-<br />
| 4F<br />
| ??????? [1637C]<br />
|-<br />
| 50<br />
| Seahorse badnick from OOZ [2CCC8]<br />
|-<br />
| 51<br />
| CNZ boss [318F0]<br />
|-<br />
| 52<br />
| HTZ boss [2FC50]<br />
|-<br />
| 53<br />
| Things spinning around MTZ boss [32940]<br />
|-<br />
| 54<br />
| MTZ boss [32288]<br />
|-<br />
| 55<br />
| OOZ boss [32F90]<br />
|-<br />
| 56<br />
| EHZ boss [2EF18]<br />
|-<br />
| 57<br />
| MCZ boss and Earthquake [30FA4]<br />
|-<br />
| 58<br />
| Unknown (some kind of really big explosion?) [2D494]<br />
|-<br />
| 59<br />
| Unknown (alters the palette to put in some colours that look really awesome in ARZ, then teleports you back to x0 y0 and doesn't allow you to move) [35FBC]<br />
|-<br />
| 5A<br />
| ??????? [35554]<br />
|-<br />
| 5B<br />
| ??????? [353FE]<br />
|-<br />
| 5C<br />
| Shark badnick from EHZ [2D394]<br />
|-<br />
| 5D<br />
| CPZ boss [2D734]<br />
|-<br />
| 5E<br />
| ??????? [6FC0]<br />
|-<br />
| 5F<br />
| ??????? [70F0]<br />
|-<br />
| 60<br />
| ??????? [34FA0]<br />
|-<br />
| 61<br />
| ??????? [34EB0]<br />
|-<br />
| 62<br />
| ??????? [1637C]<br />
|-<br />
| 63<br />
| ??????? [340A4]<br />
|-<br />
| 64<br />
| Twin stompers from MTZ [26920]<br />
|-<br />
| 65<br />
| Unknown (a long platform) [26AE0]<br />
|-<br />
| 66<br />
| Unknown (a tall bumper from CNZ, that I don't think was ever implemented in a level) [26F58]<br />
|-<br />
| 67<br />
| One of the spin tubes from MTZ [2715C]<br />
|-<br />
| 68<br />
| Block that has a spike that comes out of each side sequentially from MTZ [27594]<br />
|-<br />
| 69<br />
| Nut from MTZ [27884]<br />
|-<br />
| 6A<br />
| Unknown (jump on it and it's fine. Jump off it and it moves down) [27AB0]<br />
|-<br />
| 6B<br />
| Unknown (Same type of block as above, but it doesn't move) [27D6C]<br />
|-<br />
| 6C<br />
| Unknown (a block that moves up and to the left slowly)[28034]<br />
|-<br />
| 6D<br />
| Floor spike from MTZ [27794]<br />
|-<br />
| 6E<br />
| Unknown (a block that rotates round in a circle) [283AC]<br />
|-<br />
| 6F<br />
| End of special stage result screen [143C0]<br />
|-<br />
| 70<br />
| Unknown (Big circle of sprites rotating around, and changing their tiles depending on their position) [285C0]<br />
|-<br />
| 71<br />
| Unknown (six vertical blocks that change patterns) [112F0]<br />
|-<br />
| 72<br />
| ??????? [2893C]<br />
|-<br />
| 73<br />
| Unknown (a small thing with a picture of a ring on it) [289D4]<br />
|-<br />
| 74<br />
| Unknown (a small block with no patterns on it) [20EE0]<br />
|-<br />
| 75<br />
| ??????? [28BC8]<br />
|-<br />
| 76<br />
| Spike block thing from MCZ [28DF8]<br />
|-<br />
| 77<br />
| Unknown (long block) [28F88]<br />
|-<br />
| 78<br />
| Stairs from CPZ that move down to open the way [291CC]<br />
|-<br />
| 79<br />
| Starpoll [1F0B0]<br />
|-<br />
| 7A<br />
| Platform that moves back and forth on top of chemicals in CPZ [293A0]<br />
|-<br />
| 7B<br />
| Unknown (acts exactly like a spring, but tries to use level specific patterns) [29590]<br />
|-<br />
| 7C<br />
| Big pylon thing that's in the foreground in CPZ [20FD2]<br />
|-<br />
| 7D<br />
| ??????? [1F624]<br />
|-<br />
| 7E<br />
| ??????? [1E0F0]<br />
|-<br />
| 7F<br />
| Vine switch that you hang off in MCZ [297E4]<br />
|-<br />
| 80<br />
| Vine that you hang off and it moves down from MCZ [2997C]<br />
|-<br />
| 81<br />
| Unknown (Long invisible vertical barrier. Suspect it's pasted over the force fields used in the boss at the end of WFZ.) [2A000]<br />
|-<br />
| 82<br />
| Platform that is usually swinging from ARZ [2A290]<br />
|-<br />
| 83<br />
| 3 adjoined platforms from ARZ that rotate in a circle [2A4FC]<br />
|-<br />
| 84<br />
| ??????? [2115C]<br />
|-<br />
| 85<br />
| Vertical spring from CNZ that you hold down jump on to pull back further [2AB84]<br />
|-<br />
| 86<br />
| Flipper from CNZ [2B140]<br />
|-<br />
| 87<br />
| ??????? [7356]<br />
|-<br />
| 88<br />
| ??????? [34A5C]<br />
|-<br />
| 89<br />
| ARZ boss [30480]<br />
|-<br />
| 8A<br />
| Unknown (a line of text on the centre of the screen. Will have to put in correct tiles to see what it says.) [3EAC8]<br />
|-<br />
| 8B<br />
| ??????? [21392]<br />
|-<br />
| 8C<br />
| Blowfly enemy from ARZ [36924]<br />
|-<br />
| 8D<br />
| Unknown (ummm, a blowfly behind a wall like grounder is, but not exactly behind it. When it busts out weird things happen.) [36A76]<br />
|-<br />
| 8E<br />
| Unknown (Same as above) [36A76]<br />
|-<br />
| 8F<br />
| Unknown (a thing that sits in one place and does nothing. You can bust it like a badnick.) [36B88]<br />
|-<br />
| 90<br />
| Unknown (a sprite that launches up and to the left, then curves back down. You can bust it like a badnick.) [36BD4]<br />
|-<br />
| 91<br />
| Unknown (heads towards you. Can be busted like a badnick.) [36DAC]<br />
|-<br />
| 92<br />
| Unknown (when you pass it, it sends a large burst up which hurts you.) [36F0E]<br />
|-<br />
| 93<br />
| Unknown (sprite rapidly reverses direction and spirals down.) [36FE6]<br />
|-<br />
| 94<br />
| Lava snake [37322]<br />
|-<br />
| 95<br />
| Red circle dude from hill top zone that has lava balls circling around him that he throws at you. [370FE]<br />
|-<br />
| 96<br />
| Lava snake... again [37322]<br />
|-<br />
| 97<br />
| Unknown (sprite accelerates down and to the right) [373D0]<br />
|-<br />
| 98<br />
| ??????? [376E8]<br />
|-<br />
| 99<br />
| Bomber badnick from SCZ [377C8]<br />
|-<br />
| 9A<br />
| Turtle thing on the back of another larger turtle thing from SCZ [37936]<br />
|-<br />
| 9B<br />
| ??????? [37A06]<br />
|-<br />
| 9C<br />
| ??????? [37A82]<br />
|-<br />
| 9D<br />
| Coconuts (the badnick) from EHZ [37BFA]<br />
|-<br />
| 9E<br />
| Snake like badnick from MCZ that flies out from wall at you [37E16]<br />
|-<br />
| 9F<br />
| Crab like badnick from MTZ [3800C]<br />
|-<br />
| A0<br />
| Unknown (sprite falls down) [3815C]<br />
|-<br />
| A1<br />
| Praying Mantis dude from MTZ [383B4]<br />
|-<br />
| A2<br />
| Unknown (sprite falls down, then locks up emulator) [384A2]<br />
|-<br />
| A3<br />
| Glowbug from MCZ [3873E]<br />
|-<br />
| A4<br />
| Exploding star from MTZ [3899C]<br />
|-<br />
| A5<br />
| Unknown (sprite moves back and forth, throwing something at you that curves up and back down) [38AEA]<br />
|-<br />
| A6<br />
| Unknown (sprite moves up and down slowly, shooting a fast moving projectile down and to the left) [38B86]<br />
|-<br />
| A7<br />
| Spider badnick from CPZ [38DBA]<br />
|-<br />
| A8<br />
| ??????? [38F66]<br />
|-<br />
| A9<br />
| ??????? [39032]<br />
|-<br />
| AA<br />
| ??????? [39066]<br />
|-<br />
| AB<br />
| Unknown (sprite sits there and does nothing. You can bust it like a badnick) [390A2]<br />
|-<br />
| AC<br />
| Jet badnick from SCZ [3937A]<br />
|-<br />
| AD<br />
| Unknown (appears to be a block and has no image, but if you hit it in the corner it busts like a badnick) [3941C]<br />
|-<br />
| AE<br />
| ??????? [39452]<br />
|-<br />
| AF<br />
| Unknown (block that laser beams shoot from to form barrier at end of WFZ? Just a hunch.) [3972C]<br />
|-<br />
| B0<br />
| Unknown (weird sums it up. It alters the palette, 128x128 block mappings, and quickly moves to the left as a killable badnick. Destroying it interrupts the process of altering the block mappings data (among other things).) [3A1DC]<br />
|-<br />
| B1<br />
| Unknown (appears across from it's actual position and does nothing. Can be busted like a badnick.) [3A3F8]<br />
|-<br />
| B2<br />
| ??????? [3A790]<br />
|-<br />
| B3<br />
| ??????? [3B2DE]<br />
|-<br />
| B4<br />
| Unknown (sprite flashes between frames. Can be busted like a badnick.) [3B36A]<br />
|-<br />
| B5<br />
| ??????? [3B3FA]<br />
|-<br />
| B6<br />
| Tilting platform from WFZ [3B5D0]<br />
|-<br />
| B7<br />
| Unknown (sprite flashes between there and not there really fast, then disappears completely) [3B8A6]<br />
|-<br />
| B8<br />
| Wall turret from WFZ [3B968]<br />
|-<br />
| B9<br />
| Unknown (sprite flies really fast to the left. I suspect it's the laser shot from wing fortress zone.) [3BABA]<br />
|-<br />
| BA<br />
| Unknown (sprite sits there and does nothing. Can be busted like a badnick.) [3BB4C]<br />
|-<br />
| BB<br />
| Unknown (refer to above) [3BB7C]<br />
|-<br />
| BC<br />
| Unknown (sprite flashes present and not present really fast) [3BBBC]<br />
|-<br />
| BD<br />
| Unknown (sprite keeps on dropping things that fall straight down) [3BC1C]<br />
|-<br />
| BE<br />
| Platform that pops in and out from WFZ [3BD7A]<br />
|-<br />
| BF<br />
| Unknown (sprite flashes between frames) [3BEAA]<br />
|-<br />
| C0<br />
| Unknown (it appears to be a spring sort of thing that was cut from the final. It makes you bounce off to the left without gaining much height.) [3BF04]<br />
|-<br />
| C1<br />
| Sprite that sonic hangs onto on the back of Robotnic's getaway ship at the end of WFZ [3C0AC]<br />
|-<br />
| C2<br />
| Rivet thing that you bust to get into the ship at the end of WFZ [3C328]<br />
|-<br />
| C3<br />
| Unknown (sprite moves up and to the left changing frames as it goes, then disappears completely.) [3C3D6]<br />
|-<br />
| C4<br />
| Unknown (same as above) [3C3D6]<br />
|-<br />
| C5<br />
| Laser boss guy at end of WFZ [3C442]<br />
|-<br />
| C6<br />
| Unknown (sprite sits there and does nothing. Can be busted like a badnick) [3CED0]<br />
|-<br />
| C7<br />
| Death Egg [3D4C8]<br />
|-<br />
| C8<br />
| Bad guy in CNZ [3D23E]<br />
|-<br />
| C9<br />
| Unknown (sprite changes palette) [132F0]<br />
|-<br />
| CA<br />
| Movie sequence at end of game (will display the pictures, alter the block mappings, and after sequence is over will teleport Sonic to appropriate location on map.) [A1D6]<br />
|-<br />
| CB<br />
| ??????? [A9F2]<br />
|-<br />
| CC<br />
| Unknown (appears to be later trigger of above one. It will alter block mappings and teleport sonic.) [A3C8]<br />
|-<br />
| CD<br />
| Unknown (sprite bobs up and down, then moves off to the left) [AAAE]<br />
|-<br />
| CE<br />
| ??????? [A894]<br />
|-<br />
| CF<br />
| ??????? [A988]<br />
|-<br />
| D0<br />
| ??????? [1637C]<br />
|-<br />
| D1<br />
| ??????? [1637C]<br />
|-<br />
| D2<br />
| Flashing blocks in CNZ that appear and disappear in a rectangular shape that you can walk across [2B528]<br />
|-<br />
| D3<br />
| ??????? [2B84C]<br />
|-<br />
| D4<br />
| Big block from casino night zone that moves back and forth [2B8EC]<br />
|-<br />
| D5<br />
| Elevator going up from CNZ [2BA08]<br />
|-<br />
| D6<br />
| Poky that gives out points from CNZ [2BB6C]<br />
|-<br />
| D7<br />
| Unknown (some kind of bumper) [2C448]<br />
|-<br />
| D8<br />
| Block thingy in CNZ that changes colour when you hit it and gives you points, until it disappears) [2C6AC]<br />
|-<br />
| D9<br />
| A sprite that you can hold on to, like the rails in WFZ [2C92C]<br />
|-<br />
| DA<br />
| Continue text (kinda funny. It uses the rings variables to store the number of seconds you have left, so it's weird to see it in a level.) [7A68]<br />
|-<br />
| DB<br />
| Sprite of sonic lying down from continue screen [7B82]<br />
|-<br />
| DC<br />
| ??????? [125E6]<br />
|}<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s2]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=SCHG:Nem_s1ss&diff=96176SCHG:Nem s1ss2009-01-09T01:49:19Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>== Introduction ==<br />
I've spent a great deal of time tearing the Sonic savestate files to shreds, and here are my notes. In order to edit these files I recommend a hex utility called Hex Workshop, and I recommend getting the emulators gens and genecyst. Gens is the one I use most of the time, but genecyst has a lot of features that are extremely useful that gens dosen't have.<br />
<br />
First of all it's very important that you understand the basics. All data stored on a computer is in the form of 1's and 0's. On a CD for example, a laser hits the surface, and if the laser bounces back and hits the lens it's a 1, and if it dosen't it's a zero. Each 1 or 0 is called a bit, and a bit cannot have any other characters in it other that a 1 or a 0. Now the computer deals with bits in groups of 4. There are 16 possible combinations for a group of four 1's and 0's, so to make it simpler to deal with it as one value, rather than 4 (Eg. 0110 becomes 6). Now as there are 16 possible combinations for a group of 4 bits, this value to represent thier values must have 16 values itself, so rather than a simple 0-9, this value is 0-F (0123456789ABCDEF). This value is called a hexadecimal value (hex value fo short). Each hex value is dealt with in groups of 2, called a byte, each byte having 128 possible combinations. Now on a final output level the byte may be looked up on an ASCII table, which will convert that value into a recogniseable character (Eg. a byte value of 73 becomes a lowercase s on an english ASCII table). You will practically never touch the ASCII version of the code in hacking though.<br />
<br />
Now one important thing to realise is that as one character of hex has 16 values and a decimal (real) value only has 10, it may be nessicary to convert the numbers between them from time to time. This is done with the use of a base converter (included in hex workshop). Let's say you wanted to give Sonic 50 rings. If you enter 50 as the vaue, you will in fact end up with 80, becuase that value you are entering is actually a hex value, but if you use the base converer to convert it first, you merely enter the value of 50 into the decimal box, and it will spit out a hex value of 32, which will in fact give you 50 rings in the game. Another useful utility that you will need is a hex calculator (also included in hex workshop). A hex calculator is the same as a normal calculator, but it deals with hex values rather than decimal values.<br />
<br />
Now onto exactly what a savestate consists of. A savestate is a dump of all the ram that is allocated to the system, but that's not just main system ram, it's sound ram, CPU cache, etc. In a savestate all of this is mashed together in one file. Here's what's where in a genecyst savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| width="150" | 0-111 || Unknown<br />
|-<br />
| 112-191 || C ram (byteswapped)<br />
|-<br />
| 192-1E1 || VS ram<br />
|-<br />
| 1E2 and 1E3 || A 2 byte break.<br />
|-<br />
| 1E4-3E3 || YM2612 registers<br />
|-<br />
| 3E4-473 || Some kind of sound ram (Z80 internal cache?)(93)<br />
|-<br />
| 474-2473 || Z80 ram (sound ram)<br />
|-<br />
| 2474-2477 || A 4 byte break<br />
|-<br />
| 2478-12477 || System ram<br />
|-<br />
| 12478-22477 || Video ram<br />
|}<br />
<br />
And here's what's where in a Kgen savestate:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 0-97 || File header<br />
|-<br />
| 98-2097 || Z80 ram<br />
|-<br />
| 2098-12097 || System ram<br />
|-<br />
| 12098-22097 || Video ram<br />
|-<br />
| 22098-22117 || C ram<br />
|-<br />
| 22118-223A5 || Unknown (D72)<br />
|-<br />
| 223A6-225A5 || YM2612 registers<br />
|-<br />
| 225A6-2275B || Unknown (1B6)<br />
|}<br />
<br />
All the address values listed here are based on a genecyst savestate file, so if you wish to edit one of another type you'll have to convert them yourself. Now any single value that is stored in the system ram can be altered in game by use of a pro action replay code. First of all, here's an example of a Pro action replay code: FFFE10:0800 Now, the first byte in this code is FF, and a value of FF in the first two characters indicates that the code is altering data in the system ram. The next four character after it are the actual memory location in the ram, and the last four are the two byte value to write into that memory address. The pro action replay will always alter two memory addreses at a time by the way, because the Mega Drive (Genesis) is a 16 bit system. It dosen't matter though because you will find that a value will have two bytes assigned to it anyway, or the second byte will be related. In the case of the example, the first byte being altered is the current level, and the second is the current act within that level. The actual address of these values in the savestate are 12288 and 12289. An explination of why lies in the locations of the ram data that is stored in the savestate. If you look at the above table, there are 2478 lines worth of data before the system ram in the savestate, so for any action replay code you want to convert into a file location, you will need to add 2478 to the line number, and for any line number you want to convert into a pro action replay code you will need to minus 2478. Remember that these line numbers are hex values though, so you will need to do this in a hex calculator. (NOTE: Genecyst dosen't do pro action replay codes properly, use gens instead for that function).<br />
<br />
Another thing you need to know is that each level in Sonic has a value asigned to it, but this value does not correspond with each level's final position in the game. Here is a list of the level values:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
| 00 || Green Hill zone<br />
|-<br />
| 01 || Labyrinth zone (act 4 is scrap brain zone 3)<br />
|-<br />
| 02 || Marble zone<br />
|-<br />
| 03 || Star Light zone<br />
|-<br />
| 04 || Spring Yard zone<br />
|-<br />
| 05 || Scrap Brain zone (act 3 is Final zone)<br />
|}<br />
<br />
And one last thing you need to know is the way that the art is stored in the rom. All the art that is used in the game is stored in the form of 8x8 pixel blocks. These blocks do not actually store colours at all, they actually only have one hex value per pixel. That value specifies what point on the palette line the pixel will get it's colour from. The palette has 4 lines, each with 16 colurs on them. Now the colours on the palette can be changed at any point during play, and some palette colours may even automatically change colour each couple of frames to make it look like the colour is flashing.<br />
<br />
Now these 8x8 blocks are not what makes up the level directly, 4 8x8 blocks are grouped together to form a 16x16 block, and it is at this point that the palette line to use for that 16x16 block is specified. The 8x8 patterns can also have thier x, y, or x and y values reversed when placing them in a 16x16 block. Now finally we get to a 256x256 block, and these are the things that the actual level info loads. It is made up of 256 16x16 blocks,and each block inside them can use a different palette line. You cannot place anything except a sprite or a 256x256 block directly into a level.<br />
<br />
Now that you know all the basics, here's my breakdown:<br />
<br />
== Internal Groups ==<br />
{| class="prettytable" style="width: 100%"<br />
! colspan="2" | System ram<br />
|-<br />
| width="150" | 2478-B477 || 256x256 block mappings<br />
|-<br />
| C878-CC77 || Level design<br />
|-<br />
| D478-E477 || 16x16 block mappings<br />
|-<br />
| 11AF8-????? || Pattern load cue<br />
|-<br />
| 11EF8-11F77 || Above water palette<br />
|-<br />
| 11F78-11FF7 || Below water palette<br />
|-<br />
! colspan="2" | Video ram<br />
|-<br />
| 12478-1E477 || Main Pattern info<br />
|-<br />
| 1E478-1F477 || Makeup of buffered foreground<br />
|-<br />
| 1F478-20477 || Patterns for text/computers/rings<br />
|-<br />
| 20478-21477 || Makeup of buffered background<br />
|-<br />
| 21478-21C77 || Patterns for sonic and tails (reloaded from rom each time they change)<br />
|-<br />
| 21C78-21EF7 || Makeup of buffered active objects?<br />
|-<br />
| 21EF8-22077 || Lives counter patterns<br />
|-<br />
| 22078-223F7 || Current state of background tiles<br />
|-<br />
| 223F8-22477 || 4 empty blocks<br />
|}<br />
<br />
== Single Variables ==<br />
{| class="prettytable" style="width: 100%"<br />
| width="150" | F47A and F47B || Patterns for Sonic. First value specifies palette line to use and mirroring/flipping of sprite. refer to table in 16x16 mappings section. Next three values specify the number of the pattern that Sonic's 8x8 blocks start at.<br />
|-<br />
| F480 and F481 || Sonic's x position<br />
|-<br />
| F484 and F485 || Sonic's y position<br />
|-<br />
| F48C and F48D || Sonic's horizontal speed (8000 is max forward, 7FFF is max back and working back to either 0000 or FFFF accordingly)<br />
|-<br />
| F493 || Sonic's current animation frame<br />
|-<br />
| F4A8 and F4A9 || Sonic flashing (Enter how many frames to flash for. There are 60 frames per second on an NTSC system.)<br />
|-<br />
| F500 and F501 || x position of level name on screen<br />
|-<br />
| F502 and F503 || y position of level name on screen<br />
|-<br />
| F512 || Image for level name<br />
|-<br />
| F516 and F517 || Time until level name moves off screen<br />
|-<br />
| F51C || "Press start button" text enabled/disabled (set to 00 to enable)<br />
|-<br />
| F540 and F541 || x position of "zone" on screen<br />
|-<br />
| F542 and F543 || y position of "zone" on screen<br />
|-<br />
| F552 || Image for "zone"<br />
|-<br />
| F556 and F557 || Time until "zone" moves off screen<br />
|-<br />
| F580 and F581 || x position of act number on screen<br />
|-<br />
| F582 and F583 || y position of act number on screen<br />
|-<br />
| F592 || Image for act number<br />
|-<br />
| F596 and D597 || Time until act number moves off screen<br />
|-<br />
| F5C0 and F5C1 || x position of sonic thingy on screen<br />
|-<br />
| F5C2 and F5C3 || y position of sonic thingy on screen<br />
|-<br />
| F5D2 || Image for sonic thingy<br />
|-<br />
| F5D6 and D5D7 || Time until sonic thingy moves off screen<br />
|-<br />
| 11A78 || Master level trigger (This trigger tells the game what you're in, be it a level, special stage, or a menu. View breakdown for table of values.)<br />
|-<br />
| 11AC0 and 11AC1 || Current Water level (specify a y axis value. Note that the y axis values work as 0 being the top of the level and increase as the character moves further down the level. If this value differs to what it should be, the water level will rise/lower as is neccisary to end up where it should be.)<br />
|-<br />
| 11AC4 || The speed at which the water moves (If this is set to 00 the water will not move if the set water level changes)<br />
|-<br />
| 11BD8 and 11BD9 || Sonic's Top speed<br />
|-<br />
| 11BDA and 11BDB || Sonic's Acceleration<br />
|-<br />
| 11BDC and 11BDD || Sonic's Deceleration<br />
|-<br />
| 11BE8-11BEF || Sprites (includes map triggers. NOTE: this is not the actual data on the sprite locations. Read breakdown for details).<br />
|-<br />
| 1227E || Sprite currently selected in sprite placement mode<br />
|-<br />
| 12281 || Sprite placement mode (00=off 01 up=on)<br />
|-<br />
| 12288 || Level (hex vaue assigned to level, not level position on list. NOTE: Changing this value in level will also switch info for background movement, animated sprites, and animated palette sections.)<br />
|-<br />
| 12289 || Act<br />
|-<br />
| 1228A || Lives (convert from decimal to hex for desired number)<br />
|-<br />
| 12290 || Continues (convert from decimal to hex for desired number)<br />
|-<br />
| 12298 and 12299 || Rings (convert from decimal to hex for desired number)<br />
|-<br />
| 1229B || Minutes on clock (beyond 09 it loads images beyond it's range, hence <br />
screwup)<br />
|-<br />
| 1229C || Seconds<br />
|-<br />
| 1229D || Milliseconds<br />
|-<br />
| 1229E-122A1 || Score (convert from decimal to hex for desired score)<br />
|-<br />
| 122A8 || Number of star polls that have been hit (based thier positions on the x axis)<br />
|-<br />
| 122CF || Number of emeralds you have<br />
|-<br />
| 12388 and 12389 || Camera x position<br />
|-<br />
| 1238C and 1238D || Camera y position<br />
|-<br />
| 123FA and 123FB || Item in level select menu that is selected<br />
|-<br />
| 123FD || Sound that is selected in options menu (minus (80) of any value you enter, becuase for some weird reason they have the counter starting at 80)<br />
|-<br />
| 12404 || Box that is selected in options menu<br />
|-<br />
| 12429 || Number of emeralds you have<br />
|-<br />
| 12468 and 12469 || Demo mode (00=off 01 up=on)<br />
|-<br />
| 12472 || Debug mode (00=off 01 up=on)<br />
|}<br />
<br />
== Pattern breakdown ==<br />
'''8x8 blocks (12478-1C477)'''<BR><br />
All 8x8 patterns are stored sequentially, each one taking up 32(20) bytes. One pixel takes up one hex value, not one byte. The value of this hex value being 0-16 represents the colour that pixel is on the palette, 0 being the start, and F being the end (NOTE: specifying a value of 0 will not load up the first colour on the palette line, but instead make that pixel transparent).<br />
<br />
'''16x16 block mappings: (D478-????)'''<BR><br />
Each 16x16 block is made up of four 8x8 blocks. Delt with in blocks of 8 bytes, 2 bytes per pattern to be used in block. First value determins which palette line to use, and which orientation the pattern is at. Refer to table for explination:<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto; text-align: center"<br />
! Value !! palette line !! flipped horizntally !! flipped vertically<br />
|-<br />
| 0 || 1 || n || n<br />
|-<br />
| 1 || 1 || n || y<br />
|-<br />
| 2 || 2 || n || n<br />
|-<br />
| 3 || 2 || n || y<br />
|-<br />
| 4 || 3 || n || n<br />
|-<br />
| 5 || 3 || n || y<br />
|-<br />
| 6 || 4 || n || n<br />
|-<br />
| 7 || 4 || n || y<br />
|-<br />
| 8 || 1 || n || n<br />
|-<br />
| 9 || 1 || y || n<br />
|-<br />
| A || 2 || n || n<br />
|-<br />
| B || 2 || y || n<br />
|-<br />
| C || 3 || n || n<br />
|-<br />
| D || 3 || y || n<br />
|-<br />
| E || 4 || n || n<br />
|-<br />
| F || 4 || y || n<br />
|}<br />
<br />
The next three values represent the pattern number to use. Specify the number that the pattern is in the list (EFF is the last of the useable patterns). The block mappings use the standard method of layout, start at x0 y0 and move across x values until end of line is reached, then repeating on next y value. If a space is blank in the 16x16 mappings, it will have the values 4000 in every box.<br />
<br />
'''256x256 block mappings: (2478-B477)'''<BR><br />
Delt with in blocks of 512 (200) bytes. Each 256x256 block is made up of 256 16x16 blocks, hence two bytes per 16x16 block are used. The first value is to do with the flipping of the block. An odd number will flip it vertically, while an even number will load it normally. The next 3 values are the number of the 16x16 block to use.<br />
<br />
== Sprite loading addresses (11BE8-11BEF) ==<br />
The sprite information is discarded when screen moves too far away, and information is then reloaded from rom when character reenters area. These values specify a location in the rom to load the information from. The first four bytes are the address to load the sprites from when approaching from the left. The four bytes after that is the address to load the sprite info when approaching from the right. There is also another block of 8 bytes after this one that appears to be the same, but it dosen't seem to do anything. And no, it's not where to load the sprites from when approaching from the top and bottom.<br />
<br />
NOTE: Altering these values to those of another level will transfer the information for the location of sprites, and the key files (definitions about movement/reactions) for the sprites, but unless the correct patterns for them are loaded into the ram, it will look like a jumbled peice of crap.<br />
<br />
== Title card breakdown (11BE8-11BEF) ==<br />
The title card is quite a simple thing. It's really just 4 sprites on different levels that are bound to the screen. There's 64 (40) bytes of data that defines each one of these sprites. Look in the single variables section for these values. WIth the Image variable, these values will load up these images: <br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto"<br />
! Value !! Image<br />
|-<br />
| 00 || Green Hill<br />
|-<br />
| 01 || Labyrinth<br />
|-<br />
| 02 || Marble<br />
|-<br />
| 03 || Star Light<br />
|-<br />
| 04 || Spring Yard<br />
|-<br />
| 05 || Scrap Brain<br />
|-<br />
| 06 || Zone<br />
|-<br />
| 07 || Act 1<br />
|-<br />
| 08 || Act 2<br />
|-<br />
| 09 || Act 3<br />
|-<br />
| 0A || Blue circle thingy<br />
|-<br />
| 0B || Final<br />
|}<br />
<br />
We can really see from this just how much of a last minute thing adding a final zone rather than having it as part of Scrap Brain zone 3 was.<br />
<br />
== Buffered sprite breakdown ==<br />
'''Final: (D878-F477)'''<BR><br />
Stored in blocks of 64 bytes (40) per sprite. The sprites are listed in the order that they appear starting from the top left and scrolling across x values, then beginning on next line. The following example uses address locations for the first sprite on the list as a referance. You will need to increase the line values on this list by 40(hex) for every sprite that comes before the one you want to modify.<br />
<br />
{| class="prettytable" style="width: 100%"<br />
| width="150" | FB78 || Key file to use for defining the actions/movements of sprite. 94 is lava snake, 26 is monitor, A4 is exploding star, just to name a few. I have compiled an early list of values for it in the final version of Sonic 2 [[SCHG:Nem_s2#Sprite programming|here]]<br />
|-<br />
| FBFA and FBFB || Patterns to use for sprite. Specify number of 8x8 block to start from, <br />
not address value. <br />
|-<br />
| FC00 and FC01 || x position of sprite<br />
|-<br />
| FC04 and FC05 || y position of sprite<br />
|-<br />
| FC18 || Collision response (this value determines what happens when your character's sprite hits this one. A long list of different values so one will have to be compiled).<br />
|-<br />
| FC19 || Special flag for collision (Setting this value to 01 or above will set a special thing about the sprite for the collision group it belongs to. If it's set as an enemy this trigger will make you bounce off the sprite like the enemy in Casino night. If it's a computer it will turn off collision responces all together. The other two do nothing.)<br />
|}<br />
<br />
== Palette breakdown ==<br />
(Above water: 11EF8-11F77, Below water: 11F78-11FF7)<BR><br />
A simple 12 bit RGB value. One colour on palette is represented by two bytes, and working back from the last value forward an RGB value is specified like this: 0BGR. So if you wanted that colour on the palette to be completely red, you would enter a value of 000F. The first colour on the palette is the default colour of the stage. If you had a value of 0 in one of the background tiles, this colour will be substituted in instead of making it transparent.<br />
<br />
== Pattern load cue (11AF8-?????) ==<br />
Requests are processed in the order they are listed. If you try to load multiple patterns to the same area, the last one will overwrite the first. A six byte value per request. First four bytes are the address to load the patterns from the rom (eg, 0008 30D2). The last two bytes are the address to load the patterns into in the video ram. The pattern view window in genecyst is the easiest way to determine this. Note than whenever clearing out the pattern cue you must also set 11B71 to 00, or else some crap will be written over the first few patterns in the video ram. I have yet to narrow down the exact relationship this variable has with the load cue.<br />
<br />
== Master level trigger (11A78) ==<br />
This trigger is the main trigger that specifies the current "mode" if you will that the game is in. Changing this will make the game switch to the mode you specify once it finishes it's current process.<br />
<br />
{| class="prettytable" style="margin-left: auto; margin-right: auto; text-align: center"<br />
| 00 || SEGA logo<br />
|-<br />
| 04 || Title screen<br />
|-<br />
| 08 || Demo (will make the screen fade out and return to title when time reaches 27 seconds)<br />
|-<br />
| 0C || Normal level<br />
|-<br />
| 10 || Special stage<br />
|-<br />
| 14 || Continue screen<br />
|-<br />
| 18 || End of game sequence<br />
|-<br />
| 1C || Credits<br />
|}<br />
<br />
Values above 1C have not been used, so you get some strange results. If you change this value in level the screen will fade out and the data for the thing you have selected will be loaded instead. If you specify a value betwen the values I have listed, you will get some strange results most of the time.<br />
<br />
== Level design breakdown (C878-????) ==<br />
Level is delt with as a grid, starting with first tile in top left and working across to the right doing one x value at a time. One byte represents one tile in one grid location. A value of 00 will not load up the first large tile, but instead will simply display no block. A value of 01 will load up the first block, 02 the second, etc. The maximum possible number of large tiles on the x-axis is 127 (80). One x line is stored in the form of 128 (40) lines for foreground tiles, then another 128 (40) lines for background tiles per y value. That totals an increase of 0100 per line, so if level data started at 0300 (not possible), 0300-03FF would be all the data for the top row of 128x128 tiles, 0400-04FF would be all the data for the second row of 256x256 tiles, etc.<br />
<br />
<br />
{{SCHGuides}}<br />
[[Category:Sonic Community Hacking Guide|Nem s1ss]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-04-12)&diff=96173Sonic Spinball (Game Gear prototype; 1994-04-12)2009-01-09T01:49:18Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 0412 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_0412_-_Apr_12,_1994,_07.26).rar|filesize=208KB}}<br />
<br />
==Various Differences==<br />
*The Sega screen no longer has any extra text. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*The title card is the same as final.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*When you run out of lives you get a Continue screen with a Yes or no option. There is no Sonic sprite present however.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-04-05)&diff=96172Sonic Spinball (Game Gear prototype; 1994-04-05)2009-01-09T01:49:14Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 0405 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_0405_-_Apr_05,_1994,_18.07).rar|filesize=209KB}}<br />
<br />
==Various Differences==<br />
*The Sega screen no longer has any extra text. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*The title card is the same as final.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*When you run out of lives you get a Continue screen with a Yes or no option. There is no Sonic sprite present however.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-30)&diff=96171Sonic Spinball (Game Gear prototype; 1994-03-30)2009-01-09T01:49:13Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 0329 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_0330_-_Mar_30,_1994,_06.54).rar|filesize=207KB}}<br />
<br />
==Various Differences==<br />
*The Sega screen has the extra text '94.03.30. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*No flashing on the title card text.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*When you run out of lives you get a Continue screen, but there is no Yes or no option. There is now a timer.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-28)&diff=96170Sonic Spinball (Game Gear prototype; 1994-03-28)2009-01-09T01:49:12Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 0328 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_0328_-_Mar_28,_1994,_06.54).rar|filesize=206KB}}<br />
<br />
==Various Differences==<br />
*The Sega screen has the extra text '94.03.21. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*No flashing on the title card text.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*When you run out of lives you get a Continue screen, but there is no Yes or no option. There is now a timer.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-10)&diff=96167Sonic Spinball (Game Gear prototype; 1994-03-10)2009-01-09T01:49:09Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 031094 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_031094_-_Mar_10,_1994,_17.41).rar|filesize=195KB}}<br />
<br />
==Various Differences==<br />
*Can crash on Sega screen.<br />
*The Sega screen has the extra text *_=Beta=_* 022894. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*Options screen cannot be accessed.<br />
*No flashing on the title card text.<br />
*No pause text or point display while paused.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*Explosions when destroying enemies display garbage tiles instead.<br />
*There is a texture in the background near the first paddles in Toxic Pools, where there isn't one in the final.<br />
*When you run out of lives you get a screen with scrolling stars. There are sprites of Sonic and Robotnik falling down it. Robotnik humurously spins out of control. This leads to a cutscene where both characters land in a volcano.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-11)&diff=96168Sonic Spinball (Game Gear prototype; 1994-03-11)2009-01-09T01:49:09Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 031194 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_031194_-_Mar_11,_1994,_12.09).rar|filesize=195KB}}<br />
<br />
==Various Differences==<br />
*Can crash on Sega screen.<br />
*The Sega screen has the extra text *_=Beta=_* 022894. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*Options screen cannot be accessed.<br />
*No flashing on the title card text.<br />
*No pause text or point display while paused.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*There is a texture in the background near the first paddles in Toxic Pools, where there isn't one in the final.<br />
*When you run out of lives you get a screen with scrolling stars. There are sprites of Sonic and Robotnik falling down it. Robotnik humurously spins out of control. This leads to a cutscene where both characters land in a volcano, which then sinks into the sea.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-21)&diff=96169Sonic Spinball (Game Gear prototype; 1994-03-21)2009-01-09T01:49:09Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 032194 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_032194_-_Mar_21,_1994,_07.12).rar|filesize=203KB}}<br />
<br />
==Various Differences==<br />
*The Sega screen has the extra text '94.03.21. Also there is no rolling Sonic in the intro. The logo has a wave effect and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*Options screen can be accessed finally.<br />
*No flashing on the title card text.<br />
*Pause text and point display is finally enabled.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*When you run out of lives you get a Continue screen, but there is no Yes or no option.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_Spinball_(Game_Gear_prototype;_1994-03-07)&diff=96166Sonic Spinball (Game Gear prototype; 1994-03-07)2009-01-09T01:49:07Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{stub}}<br />
{{Bob<br />
| bobscreen=SSpinball0307Title.png<br />
| title=Sonic Spinball<br />
| publisher=[[Sega]]<br />
| developer=[[Sega]]<br />
| system=[[Sega Game Gear]]<br />
| genre=Pinball<br />
}}<br />
<br />
'''''[[Sonic Spinball (8-bit)|Sonic Spinball]]''''' prototype 0307 for the [[Sega Game Gear|Game Gear]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]].<br />
<br />
{{Download|file=Sonic_Spinball_(Prototype_0307_-_Mar_07,_1994,_05.24).rar|filesize=201KB}}<br />
<br />
==Various Differences==<br />
*Can crash on Sega screen.<br />
*The Sega screen has the extra text *_=Beta=_* 022894. Also there is no rolling Sonic in the intro. The logo is static and has no flashing palette.<br />
*Title Screen has no Copyright.<br />
*Options screen cannot be accessed.<br />
*No flashing on the title card text.<br />
*No pause text or point display while paused.<br />
*Levels can be skipped by pressing Down or 1 while the game is paused. You can also press 2 to move Sonic anywhere.<br />
*Explosions when destroying enemies display garbage tiles instead.<br />
*There is a texture in the background near the first paddles in Toxic Pools, where there isn't one in the final.<br />
*When you run out of lives you get a screen with scrolling stars. This leads to a cutscene of a volcano sinking into the ocean.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9991|title=Sonic Retro discussion thread}}<br />
<br />
{{SSpinballGGBetas}}<br />
<br />
[[Category:Sonic Spinball (8-bit) Prereleases]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_(Adventure_Island_pirate)&diff=96165Sonic (Adventure Island pirate)2009-01-09T01:49:07Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{Bob|bobscreen=Sonic (AIHack) Title.png|title=Sonic|system=NES|genre=Platform}}<br />
'''''Sonic''''' is a [[pirate]] version of ''Adventure Island'' for the [[NES]] that makes replaces the main character with [[Sonic the Hedgehog]]. Other than the main sprites and title screen, the pirate is identical to the original. The new designs on some enemies and the new palette the game looks strange in comparison to the original.<br />
<br />
{{Download|file=Sonic_Adventure_Island_hack_p1.rar|filesize=36KB}}<br />
<br />
<gallery><br />
Image:Sonic (AIHack) Screen.png<br />
</gallery><br />
<br />
[[Category:Pirate and Unlicensed Games]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_the_Hedgehog_(16-bit)/Hidden_content&diff=96162Sonic the Hedgehog (16-bit)/Hidden content2009-01-09T01:49:06Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>==Unused Artwork==<br />
===Special Stage Art===<br />
Note:''All of these items can be seen in-game by using the debug mode to fall outside the playing area of the special stage. It's easier to see them if you advance frame by frame by pausing and pressing C.''<br />
{|class="prettytable"<br />
!Artwork||Name||Description<br />
|-<br />
|[[Image:sprite03.png]]<br />
|"Zone" Icons<br />
|Found in the object list for the special stages, and its graphics found in the ROM, these unused special stage icons have no known use. They're labeled for Zones 1-6, implying that they may have warped you to another Zone from within the special stage as a sort of shortcut.<br />
|-<br />
|[[Image:sprite01.gif]]<br />
|1-up Icon<br />
|Extra life icon for the special stages. It's [[:Image:Sonic1_us_manual_08_09.gif|listed in the manual]] for the game, but it never actually appears in any of the special stages. It is, however, fully functional, and you can place it in any special stage, provided you know how to edit them.<br />
|-<br />
|[[Image:sprite02.gif]]<br />
|"W" Icon<br />
|Strange icon with the letter W on it. Use is unknown, and has no function when placed in-game.<br />
|}<br />
<br />
===Unused Monitors===<br />
{|class="prettytable"<br />
!Artwork||Name||Description<br />
|-<br />
|[[Image:tv_eggman.png]]<br />
|Robotnik monitor<br />
|Does nothing. Is likely intended to hurt the player, as it does in [[Sonic the Hedgehog 2 (16-bit)]]'s 2-player mode.<br />
|-<br />
|[[Image:tv_goggles.png]]<br />
|Goggles monitor<br />
|The goggles, they do nothing! Most likely went with the unused [[#Goggles|Goggle]] graphics found in the ROM.<br />
|-<br />
|[[Image:statictv.png]]<br />
|Static monitor<br />
|Does nothing. Found in various areas of [[Scrap Brain Zone]] in areas where the player can not normally access (such as inside walls, although it is possible to break one of them by "digging" into the wall in a jump and popping it, the image of the monitor being a portion of the "zappers").<br />
|-<br />
|[[Image:tv_super.png]]<br />
| "S" monitor<br />
|Does nothing. This monitor also appears in a [[Sonic CD]] prototype, where it grants the player extra speed and invincibility at the same time. That is likely the effect meant here as a [[Preview - Sonic the Hedgehog (Computer & Video Games, 1991)|Computer & Video Games]] issue alludes to a power-up which grants extra speed and invincibility. The S monitors were likely functional at that point.<br />
|}<br />
<br />
===Unused Sonic Sprites===<br />
{|class="prettytable"<br />
!Artwork||Description<br />
|-<br />
|[[Image:standair.png]]<br />
|This sprite shows Sonic standing while gasping for air. This was presumably used in Labyrinth Zone.<br />
|-<br />
|[[Image:needair.gif]]<br />
|This animation shows Sonic holding his breath while running. It is speculated that this was used during the countdown to signify no air is left for Sonic.<br />
|-<br />
|[[Image:slide.gif]]<br />
|This unused sliding sprite is similar to the one used in ''Sonic CD''<nowiki>'</nowiki>s Wacky Workbench Zone.<br />
|-<br />
|[[Image:s1-floating.gif]]<br />
|Though this floating sprite is used in ''Sonic 2'', it is not used in Sonic 1 except {{LinkRetro|topic=3452|title=during a split second}} on the "Continue" screen. Note the lack of a stripe on his shoes.<br />
|-<br />
|[[Image:victorypose.png]]<br />
|As seen in a couple of prototype screenshots in magazines, Sonic appears to be striking a victory pose after passing the sign post.<br />
|-<br />
|[[Image:spin.png]]<br />
|These spindash-esque sprites were found in the final ROM, but their use is unknown. Some theories are that they were used for a move similar to the spindash or that they are animations for some sort of warp movement, perhaps through winding tunnels. It's also possible that a [[:Image:Sonic 1 MS teleport.gif|teleporter]] like the one found in the [[Sonic the Hedgehog (8-bit)|8-bit]] version of [[Scrap Brain Zone]] would have played the animation.<br />
|-<br />
|[[Image:falling or shrinking.png]]<br />
|This set of sprites showing Sonic falling or shrinking are not used in the game and their intended use is unknown, although it could have been used for the death animation, to simulate falling. It's also possible it could have been used for a speed tunnel which would first extends into the background.<br />
|}<br />
<br />
===Zone-Specific Art===<br />
{|class="prettytable"<br />
!Artwork||Zone||Description<br />
|-<br />
|[[Image:Wreck.gif]]<br />
|Green Hill Zone<br />
|The checkered ball seen on the [[Green Hill Zone Boss]] appears to have been originally used in Green Hill Zone, as magazine pictures have shown Sonic riding down hills on it.<br />
|-<br />
|[[Image:Totem.png]]<br />
|Green Hill Zone<br />
|The two faces pictured here are not in their original palette, but these appear to be an earlier version of the faces on the totem poles of Green Hill Zone.<br />
|-<br />
|[[Image:missingghztiles1.gif]]<br />
|Green Hill Zone<br />
|These unused tiles were found in Green Hill Zone's tileset, and appear similar to the areas used in the underground areas of [[Sonic the Hedgehog (8-bit)]]'s GHZ. These may have also been used for a cut underground area.<br />
|-<br />
|[[Image:sidespike.png]]<br />
|Marble Zone<br />
|These spikes are horizontal, rather than the vertical spikes used in the final Marble Zone. They are also slightly thinner.<br />
|-<br />
|[[Image:letsgo.gif]]<br />
|Spring Yard Zone<br />
|This unused graphic can be found in the tileset for [[Spring Yard Zone]]. It is unused in the final game, and can be found in several prototype screenshots shown in magazine previews.<br />
|-<br />
|[[Image:Burrobot1.png]]<br />
|Labyrinth Zone & Scrap Brain Zone<br />
|This is a horizontal sprite of the [[Burrobot]].<br />
|-<br />
|[[Image:light.gif]] [[Image:light2.gif]]<br />
|Star Light Zone<br />
|These lights were found in Star Light Zone's data but not used.<br />
|-<br />
|style="vertical-align:bottom"|[[Image:Machine2.gif]] [[Image:machinparts.png]]<br />
|Star Light Zone<br />
|The three machines shown were found in Star Light Zone's dataset, but not used in the final game. They appear to have been background objects rather than obstacles.<br />
|-<br />
|[[Image:Robotniklegs1.png]]<br />
|Final Zone<br />
|The left image shows the back of Robotniks legs which can't be seen normally. The right image is what is normally seen.<br />
|-<br />
|[[Image:RSBUD.PNG]]<br />
|Ending<br />
|Rosebud with a incorrect palette. It sort of bounces up and down and will bounce you backwards and make a noise similar to the round star objects found in [[Spring Yard Zone]]. <br />
|}<br />
<br />
===Press Start Button===<br />
[[Image:PressStart.png]]<br />
<br />
Many early previews of ''Sonic the Hedgehog'' showed Press Start Button text on the Title screen. In the final version it does not show up due to a in-game bug, but the graphics were found inside the ROM. It is also possible to get them to display in the japanese version, it appears after accesssing the secret credits screen via cheat code (in emulators the region of the emulator must be set to Japan). An easier way to get it to appear is to enter the [[Game Genie]] code AB3A-DADV.<br />
<br />
===Splats the Bunny===<br />
[[Image:Splats.png|left]]'''Splats''' is a prototype [[badnik]] from ''[[Sonic the Hedgehog (16-bit)|Sonic the Hedgehog]]'' which was cut from the final game. Despite not appearing in the game, the badnik appeared in a set of [[:Image:SplatsProTipCard.jpg|promotional trading cards]] for the game, was shown on [[:Image:Splats Figure.jpg|the box of a series of Japanese Sonic figures]], and was featured in the UK ''[[Sonic the Comic]]''. When [[Nemesis Format]] was finally cracked in 2002, the sprites were discovered in ''Sonic 1''.<br />
<br />
Some controversy has broken out over the true coloring of Splats—though the sprites to the left have Sonic's [[palette]] applied to them and the trading card scan appears to have a bluish tint, the quality and validity of the card has been called into question. Other theories to his coloring include purple (for [[Spring Yard Zone]]'s palette) and green (for [[Star Light Zone]]'s second palette line.)<br />
<br />
===Goggles===<br />
[[Image:goggles.png]]<br />
<br />
The graphics were found hidden in the ROM. While the actual purpose of the goggles is unknown, it is speculated that they were meant to give Sonic the ability to breathe underwater.<br />
<br />
Each frame of the graphic fits together with one of Sonic's poses. For example:<br />
<br />
[[Image:Sonicgoggles_Run.gif]]<br />
<br />
===Unused Warping Effect===<br />
[[Image:warping.png]]<br />
<br />
Thought to be the original method of accessing the special stage, this warp effect activates when Sonic touches the area in which the object is placed. Sonic disappears as he runs into it, and a warping noise plays. Sonic then reappears a few seconds later, likely as a method of testing the object.<br />
<br />
===Unused Eggman Graphics===<br />
[[Image:Altending.PNG]]<br />
<br />
These graphics were found buried in the ROM. Their purpose is unknown, but it is speculated that they may be part of an "alternate ending sequence" in which Eggman explodes in the background while Sonic runs across the ending level in victory.<br />
<br />
===Labyrinth Zone Act 4===<br />
[[Image:S1UnusedLabyrinth.png]]<br />
<br />
When using the level/act select PAR code FFFE10:???? and selecting the third act of [[Scrap Brain Zone]] by changing the question marks to 0502 you are actually taken to Final Zone. To actually reach the Scrap Brain 3 used in the game you have to select the fourth act of [[Labyrinth Zone]] by changing the question marks to 0103. This means technically Scrap Brain Act 3 is another level of Labyrinth Zone.<br />
<br />
===True Level Order===<br />
The level order that is used during gameplay is actually quite different from the intended order according to the level slots. The level select in early revisions also arranges the levels in the intended order. Alternately, a simple level select [[Pro Action Replay]] code (FFFE10:??00) can be used to verify this:<br />
{|class="prettytable"<br />
! Level Name||Arrangement<br />
|-<br />
|Green Hill Zone<br />
|Green Hill Zone (00)<br />
|-<br />
|Marble Zone<br />
|Labyrinth Zone (01)<br />
|-<br />
|Spring Yard Zone<br />
|Marble Zone (02)<br />
|-<br />
|Labyrinth Zone<br />
|Star Light Zone (03)<br />
|-<br />
|Star Light Zone<br />
|Spring Yard Zone (04)<br />
|-<br />
|Scrap Brain Zone<br />
|Scrap Brain Zone (05)<br />
|-<br />
|Final Zone<br />
|Final Zone (05)<br />
|}<br />
<br />
Level slot 06 leads to the level used in the ending cutscene.<br />
<br />
Commentary found in the ''[[Sonic Jam]]'' strategy guide also confirms that the Labyrinth Zone was originally intended to be the second zone but moved due to the difficulty of the level.<br />
<br />
{{Sonic1Levels}}<br />
<br />
[[Category:Game Secrets|Sonic the Hedgehog (16-bit)]]</div>Xkeeperhttps://info.sonicretro.org/index.php?title=Sonic_%26_Knuckles_(prototype;_1994-05-25)&diff=96163Sonic & Knuckles (prototype; 1994-05-25)2009-01-09T01:49:06Z<p>Xkeeper: Text replace - 'pallette' to 'palette'</p>
<hr />
<div>{{Bob<br />
| bobscreen=Sonic3_title.png<br />
| publisher=[[Sega]]<br />
| developer=[[Sonic Team]]<br />
| system=[[Sega Mega Drive/Genesis]]<br />
| genre=2D Platform<br />
}}<br />
<br />
'''''[[Sonic & Knuckles]]''''' '''Prototype 0525''' for the [[Sega Mega Drive/Genesis]] was released by [[drx]] during the [[February 23rd 2008 Proto Release|February 23rd, 2008 proto release]]. This prototype differs from the other Sonic & Knuckles prototypes in that it is already locked-on to Sonic 3 (final version). By itself, this prototype will not boot.<br />
<br />
{{Download|file=Sonic & Knuckles (Prototype 0525 - May 25, 1994, 15.28) (hidden-palace.org).zip|filesize=2.4MB}}<br />
<br />
==Various Differences==<br />
===General===<br />
*Title Screen theme (using S&K's theme) is slightly different near the end.<br />
*Level Select is unlocked from the start.<br />
*Knuckles is not selectable from the save data screen -- he is only available in level select.<br />
*The "WOOP" noise made when dying is gone.<br />
*Shields do not protect from the exploding rocks or any projectiles.<br />
*Debug causes all sorts of graphical glitches, such as at Sonic staying as a garbled up monitor after changing back, which goes away when completing an act. <br />
*In debug mode the Lightning shield monitor is replaced with a S monitor.<br />
*The S monitor makes characters Hyper, not Super. <br />
*Super Tails with the Chaos emeralds lacks Flickies but glows like normal. When using the S monitor Flickies are added indicating that originally Tails was to have two forms.<br />
*Hyper Sonic, while implemented, has a constant circle of stars around him, though not in the same style as the Invincibility powerup. This applies to Knuckles too, but the sound effect doesn't play when Hyper knuckles glides into a wall though. <br />
*The Hyper form music loops much earlier.<br />
*Although the 'game complete' jingle is the Sonic & Knuckles version, it's actually an earlier version of the tune. It sounds pretty much identical up to the final note, but the timing for that note is very different and there's no background jingle echoing off afterwards like in the final version.<br />
===Level Differences===<br />
====Bonus Stages====<br />
*In the Gumball Machine bonus stage, the bubble shield doesn't override the lightning shield.<br />
*In the Slot Machine bonus stage there is a very different object (bumper, changing block, left/right direction changer, etc) layout. The background is also in an early stage. It's completely static - the little objects don't rotate and nothing scrolls.<br />
====Carnival Night====<br />
*In this build all this level has the Act 1 and Act 2 music switched. They are switched in the sound test, too.<br />
====Ice Cap====<br />
*In this build all this level has the Act 1 and Act 2 music switched. They are switched in the sound test, too.<br />
====Launch Base====<br />
*In this build all this level has the Act 1 and Act 2 music switched. They are switched in the sound test, too.<br />
====Mushroom Hill====<br />
*The intro to Mushroom Hill does not appear to have been implemented yet; Sonic and Tails begin standing in mid-air and simply fall to the ground. <br />
*Knuckles intro isn't implemented at the right time either. He falls from the sky normally, then when reaching the first set of breakable walls, the S&K Knuckles intro starts playing in that location. After the intro is over you start the level over again, but when Knuckles falls, he's in his standing sprite instead of the falling sprite. <br />
====Sandopolis====<br />
*Sonic does not fall under the sand and pop back out during the introduction to Sandopolis; he merely falls from the sky and lands on the ground normally. Likewise, his controls are not locked, so he can move left and right before hitting the ground.<br />
<br />
====Lava Reef====<br />
*Lava Reef 2 doesn't have the screen locked at the start of the level when accessed from level select as it does in the final. The lava is not cooled off at the start, but the zone uses the same blue palette as the final at this stage in development. <br />
*Lava Reef 3 (Sonic's boss) uses the Lava Reef 2 music as opposed to the Boss Theme used in the final. <br />
*No special SFX or boss music for Lava Reef 'Act 3' (The lava) and the sinking magma waterfall platforms have a different animation.<br />
====Hidden Palace====<br />
*Hidden Palace still has Sky Sanctuary Music.<br />
*The row of monitors near the top of the level contains an S monitor instead of [[Speed Shoes]] like the final. There is a Fire Shield next to the teleporter that takes you up to Knuckles, instead of the Super Ring that's there in the final. <br />
*Knuckles' boss still plays the Sonic 3 miniboss theme.<br />
*If fighting Knuckles as Hyper Sonic, Knuckles won't take damage when standing next to him. You have to actually jump on him to register a hit. Sonic doesn't take damage from Knuckles' punches when Hyper though.<br />
*When knuckles is fighting Dr. Robotnik Sonic can't move at ALL there whereas Tails can. In Final, you can whack Robotnik as much as you like.<br />
*The animation order for Knuckles punching the wall before the teleporter is different. He shows his fist after hitting the wall, instead of before.<br />
*You can not control Tails for all of Hidden Palace after Knuckles is defeated.<br />
*Tails is not beamed up by the first teleporter in Hidden Palace Zone.<br />
<br />
====Sky Sanctuary====<br />
*Mecha Sonic will appear again if you use a star post and fall down to one of the areas where he appeared before even if he was already defeated before.<br />
<br />
====Doomsday====<br />
*Doomsday plays a whistle sound effect for no reason. <br />
*Automatically starts as Hyper Sonic when accessed via level select, unlike the final where you are Super Sonic if accessed in this way. The zone's background also has a different, greyer palette, and the zone scrolls a LOT more slowly to begin with - you can speed up the scrolling by holding right to gradually accelerate it, but hitting an asteroid will slow it down again. No SFX plays when breaking the asteroids. When the boss reappears after its blue armour is destroyed the 'badnik popped' sound effect plays instead of the sound played in the final.<br />
*The latter half of Doomsday has no rings and asteroids and the projectiles the fleeing Robotnik fires have different graphics, especially the underneath weaponry.<br />
<br />
==External Links==<br />
{{LinkRetro|topic=9979|title=Sonic Retro discussion thread}}<br />
<br />
{{Sonic & Knuckles Betas}}<br />
<br />
[[Category:Sonic & Knuckles Prereleases]]</div>Xkeeper