Sonic and Sega Retro Message Board: Sonic 1 SMS Solidity Data - Sonic and Sega Retro Message Board

Jump to content

Hey there, Guest!  (Log In · Register) Help
Page 1 of 1
    Locked Forum

Sonic 1 SMS Solidity Data Information on how solidity data works in the game.

#1 User is offline chacanger 

Posted 12 November 2017 - 11:33 AM

  • Posts: 12
  • Joined: 18-April 15
  • Gender:Male
  • Location:England

I've recently been looking into hacking Sonic 1 for the SMS, in that time I have noticed that there seems to be a lack of information regarding the solidity data such as "how slopes work", "foreground and background layers" and so forth.

Kroc Kamen managed to locate the data and the pointers and I've managed to delve a bit deeper into this.

Within the hacking guide on Sonic Retro, it says that the level headers have something called the Solidity Pointer or SP. The SP value is an index which determines whic solidity pointer to use, these are located from addresses $03A65 - $03A74 I have listed these as follows:

SP Index 	Address		Description
0		$3A75 - $3B2C		Green Hill / End Sequence
1		$3B2D - $3BBC		Bridge
2		$3BBD - $3C5C		Jungle
3		$3C5D - $3D0C		Labyrinth
4		$3D0D - $3DC7		Scrap Brain
5		$3DC8 - $3EA7		Sky Base Exterior
6		$3EA8 - $3F27		Special Stage
7		$3F28 - $3F8F		Sky Base Interior

A few things I noticed were...
  • The pointers suggest that there should only be 187 blocks opposed to 192, seeing as the data for the other blocks would cross over into the Sky Base Exterior tileset.
  • Sky Base Exterior seems to extend to 224 blocks even though there are only 216.

So with the pointer data, we can see that in most cases (except for SBZ and Sky Base Exterior), there is a byte for each block that determines what solidity to use. I have therfore listed all of the types that are used in the game, note that there are many unused byte values, which are actually different solidity types that were unsued.

ID	Description
00	None
01	Slope Steep Bottom Down
02	Slope Steep Top Down
03	Slope Steep Top Up
04	Slope Steep Bottom Up
05	Slope Shallow Top Down
06	Slope Shallow Middle Down
07	Slope Shallow Bottom Down
08	Slope Shallow Bottom Up
09	Slope Shallow Middle Up
0A	Slope Shallow Top Up
0B	Floor Divot Bottom
0C	Slope Smooth Bottom Down
0D	Slope Smooth Bottom Up
0E	Slope Smooth Top Down
0F	Slope Smooth Top Up
10	Floor Pass Through
11	Ski Jump To Right
12	Floor To Shallow Slope Down
13	Shallow Slope Up To Floor
14	Shallow Slope Down To Floor
15	Floor To Shallow Slope Up
16	Solid
17	Floor Divot Top
18	Shallow Slope Up To Ceiling
19	Ceiling To Shallow Slope Down
1A	Ceiling Slope Steep Top Up
1B	Ceiling Slope Steep Bottom Up
1C	Ceiling Slope Steep Bottom Down
1D	Ceiling Slope Steep Top Down
1E	Ceiling
1F	Ceiling Slope Shallow Top Down
20	Ceiling Slope Shallow Middle Down
21	Ceiling Slope Shallow Bottom Down
22	Ceiling Slope Shallow Bottom Up
23	Ceiling Slope Shallow Middle Up
24	Ceiling Slope Shallow Top Up
25	Shallow Slope Down To Ceiling
26	Ceiling To Shallow Slope Up
27	Floor Solid
28-7F	**Undocumented**
80	Area Behind Background
81-8F	**Undocumented**
90	Floor Behind Background
91-95	**Undocumented**
96	Solid Foreground
97-9D	**Undocumented**
9E	Ceiling With Semi Transparent Layer
9F-A6	**Undocumented**
A7	Floor With Semi Transparent Layer
A8	Raised Floor Platform
A9-FF	**Undocumented**

Apologies for the naming convention for some of these, it can get a bit difficult to name each one individually seeing as they are very similar.

I have provided an illustration of Green Hill where you can see the values matching the actual blocks.

Posted Image

From this you can see that the solidity data determines the type of ground to stand on or behind. But it doesn't determine which tiles have spikes, water slides, springs, bumpers etc. This is still a mystery and I'm unsure where it could be.

Anyhow I'm not sure if anyone will appreciate this seeing as there aren't many people hacking Sonic 1 SMS.

#2 User is offline lordxernom 

Posted 13 November 2017 - 06:47 AM

  • Posts: 54
  • Joined: 26-May 12
  • Gender:Male
  • Project:Tails Adventure LX, Tails Adventure X-L
I'm interested with Sonic 1 SMS hacking and I love info you've put here! 8-bit Sonic games needs more love. Maybe there's chances for S1 SMS Level/Object Editor in future? (I'm not sure it already exist or not)

#3 User is offline nineko 

Posted 13 November 2017 - 07:25 AM

  • I am the Holy Cat
  • Posts: 5664
  • Joined: 17-August 06
  • Gender:Male
  • Location:italy
  • Project:I... don't even know anymore :U
  • Wiki edits:5,251
The aforementioned Kroc has been working on one, but it's been a while since he last talked about it, he only briefly mentioned it once (plus a second time a couple of weeks later in a certain private subforum), but that was 4 years ago, so I don't know about its current status. Perhaps you guys could help revive the project.

#4 User is offline Ravenfreak 

Posted 13 November 2017 - 01:24 PM

  • Just an angry spark of electricity.
  • Posts: 2683
  • Joined: 24-November 08
  • Gender:Male
  • Location:O'Fallon Mo
  • Project:Sonic 1 Game Gear Disassembly
  • Wiki edits:112
I couldn't get his editor to work on my computer. :\ Also his wife had a child a few years back, and he's working on his own forum software so he doesn't have too much time to work on his Sonic 1 SMS projects it seems. Anyways great work as always chacanger!

#5 User is offline chacanger 

Posted 11 February 2018 - 07:16 PM

  • Posts: 12
  • Joined: 18-April 15
  • Gender:Male
  • Location:England
Well, I've hit a brick wall , I've been searching for ages trying to find the indexes for special blocks (which are blocks that are used for springs, spikes and conveyor belts). The floor layouts and slope solidity where really easy to find.

One thing I tried was to find the code that causes Sonic to interact with these special blocks.

There is a section documented in Krocs disassembly which refers to these 29 addresses within the ROM, after doing some further research they seem to refer to the special blocks code, or how Sonic interacts with them.

.dw _54bc, _54c6, _54ce, _550f, _552d, _5556, _5578, _5590
.dw _55a8, _55b6, _55e2, _55eb, _565c, _567c, _56a6, _56b6
.dw _56c6, _56d6, _5761, _5771, _5781, _5791, _57cd, _57f6
.dw _5808, _584b, _5883, _58d0

I've managed to figure out what some of these refer to and listed them below, ones with "?" are ones I'm not 100% sure of.

Address	Type
54BC	?
54C6	?Ring?
54CE	Ski Jump Right
550F	Left Spring
552D	Upwards Spring (Right Hand Side)
5556	Right Spring
5578	?
5590	?
55A8	Water / Also applies to water line object.
55B6	Upwards Spring (Centre)
5500	Falling Through Part
55EB	Teleporter
565C	?Water?
567C	? Includes 568F - ?
56A6	?
56B6	?
56C6	?
56D6	Round Bumper
5761	Weak Special Upwards Spring
5771	Medium Special Upwards Spring
5781	Strong Special Upwards Spring
5791	Tall Bumper
57CD	?
57F6	?
5808	?
584B	?
5883	?
5893	?Collapsing Bridge?
58D0	?

I thought, maybe I could figure out if these 29 were the indexes and that I could some how match them with the solidity or block data to determine which blocks were set to springs, spikes etc., unfortunately I couldn't find anything.

If I knew how this worked I'd probably submit my hack to the SHC2018, but at the moment it''s looking doubtful.

Page 1 of 1
    Locked Forum

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users