Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,435,748
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-19-24 12:06 PM
Guest: Register | Login

0 users currently in ROM Hacking | 2 guests

Main - ROM Hacking - F-Zero? New thread | New reply

Pages: 1 2

smkdan
Posted on 06-10-07 04:32 PM Link | Quote | ID: 44242


Ninji
Level: 36

Posts: 24/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
Anyone got data on it? I'd really like to find out some more about the track format in particular, but anything would be nice. I still have to have a more indepth look at the track formulas but I can say a few things about it. Here's what I've published for now. It's much better than having random notes scribbled in a .txt

http://smkdan.eludevisibility.org/fzero.html


Heian
Posted on 06-10-07 08:30 PM Link | Quote | ID: 44281


Red Koopa
Level: 27

Posts: 65/126
EXP: 111827
Next: 4332

Since: 03-08-07

Last post: 5840 days
Last view: 5839 days
A bunch of people here spent a lot of tine trying to hack F-Zero, and we never got anything done. One problem was the big precomposed 32x32 "panels" -- they have to be lined up just right for the tracks to be drivable, so while it's possible to spot the layouts of those panels in the ROM (Death Wind's is particularly noticeable if you set your hex editor to 32 bytes per line; an oval of numbers in a sea of 00 bytes!),

I actually managed to make an alternative Death Wind, but if you drive into certain areas, it becomes a farce as your car gets pulled every which way while the computer tries to get you on to a pre-determined path. The only other accomplishments I had were to make a new font for the times, which looked more like the font used for the speed, and to make a new Big Blue background which looks more tropical.

I can't run this on the computer (Mac!) I'm in front of now, so I can't vouch for its completeness, but on my web site I spotted an attempt at new graphics on Silence and putting the tile numbers over the graphics in order to get a handle on the course layouts. These two files might also contain the tropical Big Blue; I'm not sure.

The GBA F-Zero games have a slightly different panel structure. I think they're made of 8x8 tiles, the layout of which is then compressed. Perfect Guy, if he's still around here, decrypted this layout, but due to the fact that each tile has to butt against each neighbor in three or four exact ways (vertical and horizontal position of the round "barrier" circles, which side of the barrier the course is on, and then the position of the under-track shadow), making new panel layouts is extremely difficult.

As a last resort, I looked into taking the 256 pre-composed panels in Climax, which are pre-built to fit with each other, and making 256 new and more interesting ones. I couldn't find where in the game they were stored, and eventually went back to hacking baseball games (^^.

Your work on the original F-Zero looks great, though! Maybe we can have another go at it!

GuyPerfect
Posted on 06-11-07 03:53 AM Link | Quote | ID: 44431


Paratroopa
Level: 30

Posts: 62/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
Check your PMs, Heian. I sent you a message before you made that post.

And yeah, I've done my fair amount of F-Zero-related hacking. Hacked Maximum Velocity and the SNES one (but only a bit), and made a level editor for F-Zero X.

smkdan
Posted on 06-11-07 07:04 AM (rev. 2 of 06-11-07 09:49 AM) Link | Quote | ID: 44464


Ninji
Level: 36

Posts: 25/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
Thanks for the lengthy reply. I gave that idea a shot and it worked pretty well actually.



I never thought of doing that...Well, it looks my confusion about sharing tracks is over. You even see bits of the other track in-game if you go right to the edge. It's easy to pick out the tracks on all except ones that have more complex non - driveable areas like Whiteland.

You say you made an alternative Death Wind but the computer wouldn't let you get by? How did it do that? Was it like the anti-shortcut thing on Port Town that takes you back to a particular spot if you try to jump the track?

32x32 panels...that sounds about right. You mean each byte in that 512byte table refers to a panel right? That makes the track at most 8192 pixels tall and 4096 pixels wide.

The way I'm seeing it is that the game stores different panels for each track set (7F:5000-7F:FFFF), and these panels are constructed out of smaller, simpler panels (7F:0000-7F:24FF shared globally).

I tried those patches on my (J) and (U) ROMs but I can't notice any difference in game. I stripped the header but that causes it to not start up at all. Is it suppose to have that wierd 3.92MB filesize after the patch?

GuyPerfect
Posted on 06-11-07 04:12 PM Link | Quote | ID: 44536


Paratroopa
Level: 30

Posts: 64/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
If it's anything like the GBA games, there's a predefined path that all machines are expected to adhere to. Just a list of points that draw the path that machines are supposed to take. The GBA games allow parts where there are two alternate paths, which helps with forks in the road as well as having the CPU players use the pit area.

There's a special tile used in the panels of the track, usually tile 00, that represents "nothing here" and allows the course "floor" to show through. Of course, the SNES game has the ground built into the panels themselves, so it's probably a bit different. Either way...

As a machine glides across the course, it travels over each of the path points, in order. That's how the game knows when you're facing the wrong way, etc. When you drive on a tile on a panel that you're not supposed to drive on, the game says "OMFG Collision!" and pushes the machine back towards the path point they're supposed to be on while administering a little damage.

If you modify the track but not the path, you have to be very careful not to step in the wrong spot. If you do, it'll painfully drag you across the netherworld until it puts you back where it thinks you're supposed to be, which may very well be in the middle of nothingness itself, causing your machine to blow up.

On a side note, if you're airborne and you land on one of those "nothingness" tiles, you blow up. That's how the game detects a miss.

Heian
Posted on 06-17-07 02:03 AM Link | Quote | ID: 46182


Red Koopa
Level: 27

Posts: 67/126
EXP: 111827
Next: 4332

Since: 03-08-07

Last post: 5840 days
Last view: 5839 days
Sorry about those patches not working -- but I can give you a bit of the falvor of those hacks by posting some ancient screenshots that I dug up (and please forgive the ugly white borders on the older ones):

* Before we found that 'panel map' with a the 00s to denote empty space, we had found an area that seemed to be track layout. These bytes actually define the larger panels. IIRC, two bytes correspond to a 32x2 strip of small 8x8 tiles.

We were able to bridge Sand Ocean and Silence by making a row of blank track tiles:



* Then, while we were tring in vain to make new courses, I had a go at making new backgrounds and fonts. Here's the new, more tropical, shallower Big Blue:



(The font used for the time now looks like a taller version of the one used for the speed. Now I can't look at the original anymore. ^^)

* Next up was to make Silence into Stonehenge. Would be a nice twilight scene but you have to pretend not to notice that the moon is immense, and the grass is 'flowing'. ;



* I also managed to turn Port Town into a daytime scene with white clouds and green mountains. It's supposed to be the Arashiyama area of Kyoto:



This is the game's title screen, so it really makes things look different.

I was in the middle of making Fire Field into a dull gray moonscape when the project sort of drifted away. I still think a great F-Zero hack could be made if we could just get around this compression, and somehow give the user the ability to draw new 'panels' first before laying them out. When Nintendo made BS F-Zero 2, the panel maps are (IIRC) kept intact; what's different is the layout of the tiles that form these panels. Even if we could only make new panels, it would still feel like a new game

One possibility is to take the 256 pre-made panels in F-Zero Climax, which the game has already prepared algorithms for computer cars to drive on, and redraw some of the redundant ones and make more interesting ones.

Unfortunately I could never find any data about them in the Climax ROM. Guy Perfect, you wouldn't happen to know anything about that data, would you? ^^;

GP Legend probably also has the ability to do this -- the mythical eReader cards seem to be formed by these same panels that are used in the Climax course editor.

Climax has 16 different areas each with their own tile graphics, and plenty of tunes, cars, etc., so we could probably get some serious variety going on if we edited that game.



GuyPerfect
Posted on 06-17-07 05:25 AM Link | Quote | ID: 46218


Paratroopa
Level: 30

Posts: 66/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
I've only worked with Maximum Velocity on GBA. Sorry.

However, I am at this time working with smkdan. We should start diving into hacking full-speed here fairly quickly, then we'll have a good chunk of stuff to update.

smkdan
Posted on 06-19-07 03:30 PM (rev. 2 of 06-19-07 03:32 PM) Link | Quote | ID: 46839


Ninji
Level: 36

Posts: 26/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
You mentioned 32x2 tiles, which is true for part of it. The game is loading an array of 2x2 tiles for every 2 bytes in the deepest part of the panel map.

Table #2 on my site has entries, which when indexed by the Y posiiton, point to a row of tiles on table #3. It's effectively a row selector. Table #3 (indexed by the X position much like table #2 does for Y) points to the tile pool (0000-24FF), of which it then pulls 2x2 tiles, and proceeds (up to 16 times) until the buffers to VRAM are filled or until the byte index overflows from 32 of which it then moves onto the next panel and reloads the pointers.

So..every entry in table #2 corresponds to 32x2 tiles, and every entry in table #3 corresponds to 2x2 tiles. That explains the huge size difference, and why Nintendo used a bit of compression there.

Heian
Posted on 06-19-07 10:15 PM Link | Quote | ID: 46963


Red Koopa
Level: 27

Posts: 68/126
EXP: 111827
Next: 4332

Since: 03-08-07

Last post: 5840 days
Last view: 5839 days
Just thought of something -- there was once a great site where someone had all the Mute City 1 panels saved as graphics, and you could enter the numbers of the panels and it would display them for you. I can't seem to find it anymore but I saved one example of the giant map that it output for you and can upload it somewhere if you want to see it.

One thing that proved to be difficult was editing the names of the tracks. Sounds like something that would be trivial to find, but it wasn't. Also, no one ever found any data about the speeds of the cars. It would be nice to restore some balance by giving the non-Fire Stingray cars a little more speed. (I got the graphics from one of the BS F-Zero 2 cars into the regular game, but they were glitchy, the palette was off, and in any case the stats didn't change.)

You two know a lot more than I do about the programming aspect, but I could probably still make aesthetic adjustments like new backgrounds, etc. A lot of the background graphics are repeated and there isn't much space to make new stuff like there would be with Climax or GPL.

SMKdan, did you actually figure out what the compression is? Years ago, we were unable to discover what the relationship between the two-byte compressed value and the raw tile numbers was. Guy got it for MV; it was something that hadn't been used in other games (and was in fact very difficult to convert into -- my tracks were full of glitches). I suspect that with some flexible 32x32 panels that can connect with various things, we could make some really good courses just by taking advantage of the course-specific panels.

smkdan
Posted on 06-20-07 10:11 AM (rev. 4 of 06-20-07 01:19 PM) Link | Quote | ID: 47175


Ninji
Level: 36

Posts: 27/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
Did that site have any documentation? Would also be nice to have something to compare to when generating panels from collected notes.

Sounds like a first thing to try, but did you try a search relative for those names?

I think I got a solid handle on the track format. The track data for table #3 itself is compressed. The highest 2 bits provide a portion of another pointer. These byte pairs a shifted down with the AA - FF bits ending up creating another byte pair.

XXXXXXXXXXXXXX88
XXXXXXXXXXXXXX99
...
XXXXXXXXXXXXXXFF

Then, it writes these 2 bytes in the next spot.

FFEEDDCCBBAA9988

Every 16 bytes in ROM yeilds 18 bytes in RAM. Only 14 bits are required to index the whole tile pool (0000-24FF). FF up there obviously isn't used.

To expand on the previous post, I'm pretty confident on the track format it's using.

Every 32x32 panel has:

16 2byte entries for every set of 32x2 rows in the panel (Table #2)
Each row has 16 2byte entries which point to the tilepool arrays. Each entry represents 2x2 tiles (Table #3)
Each panel therefore has 256 (16x16, since each entry in table #3 represents 2x2 tiles) 2byte entries total which point to the tilepool arrays

The upside of doing it this way means 32x2 rows can be reused many times.

The tilepool represents 2x2 tiles; this is because the buffers represent 128x2 tilemap bytes. The game runs through a loop reading the 2x2 tiles from the tilepool 64 times to fill the 128x2 tilemap buffer entirely.

The tilepool 2x2 tiles are arranged in a way where

Byte1: Top left corner
Byte2: Bottom left corner
Byte3: Top right corner
Byte4: Bottom right corner

--

Yeah, physics would be nice. I'd like to get Green Amazone in there since it had really nice drift physics, but only one track with corners to use it.

Guy, I think we have enough to start really getting into it. I've looked at the horizontal and vertical updaters and they all show code which fits right into the format I describe. All the Track, conditional track modifiers and pointers are all sorted.

GuyPerfect
Posted on 06-20-07 09:02 PM (rev. 3 of 06-20-07 09:05 PM) Link | Quote | ID: 47265


Paratroopa
Level: 30

Posts: 68/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
Wonderful. I'll take another shot at the path format shortly.

For everyone else, what I found with the path was for a North American ROM with a 512-byte header. I was able to screw up the AI on Mute City, but I haven't cracked the data just yet. It's not plain simple as would be nice. (-:

Setting all bytes from 176A0 to 176B0 to the value 00 makes the AI immediately veer off the right side of the track.

Anyways, I'll do more work on it and see what I can find. It might be compressed, but the data surrounding it suggests otherwise... But still!

(Man, I hope it's not compressed. There has yet to be an F-Zero game I've worked with that I didn't have to crack a compression format)
__________

EDIT:

Wait a sec... I don't see that PM in my sent list... smkdan, did you get a message regaring the path info or did it get lost?

smkdan
Posted on 06-20-07 11:41 PM Link | Quote | ID: 47318


Ninji
Level: 36

Posts: 28/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
I don't have anything new my PM box; must've got lost.

Nice work. Paths really need to get sorted because reverse detection, arrow boost function and your only competition rely on it. I hope they all rely on the same set of values anyway.

GuyPerfect
Posted on 06-21-07 03:13 AM (rev. 2 of 06-21-07 03:14 AM) Link | Quote | ID: 47388


Paratroopa
Level: 30

Posts: 69/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
Messing up the data I described will mess up computer AI as well as "reverse" detection. The only thing that doesn't seem to line up right now (I might just not know the details yet) is the exact coordinates of the starting position, which appear to be independent from the course path.

Another note of interest is that the four usable machines need a good stretch of straight road to drive on right at the start. They drive straight for a few seconds before shifting over to conform with the course path, which means you can't have a curve right after the lap line. Other than that, there don't appear to be any restriction in what can be done with the path.

smkdan
Posted on 06-21-07 10:01 AM Link | Quote | ID: 47495


Ninji
Level: 36

Posts: 29/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
Here's the start coordinates from one of my logs. Again, they're headerless. 2 Bytes each. I noticed changing the AI in those ranges breaks collision for your car, and changing these also breaks the collision...

X, Y

BigBlue: 16005, 16007
Sand Ocean: 1600F, 16011
Silence: 16019, 1601B
Port Town1: 1602C, 1602E
Port Town2: 1603F, 16041
DeathWind1: 16049, 1604B
DeathWind2: 16053, 1655
Red Canyon1: 1606F, 16071
Red Canyon2: 16082, 16084
Fire Field: 1608C, 1608E
MuteCity1: 1609F, 160A1
MuteCity2: 160BB, 160BD
MuteCity3: 160E0, 160E2
WhiteLand2: 160EA, 160EC
WhiteLand1: 160F4, 160F6

GuyPerfect
Posted on 06-21-07 05:26 PM Link | Quote | ID: 47544


Paratroopa
Level: 30

Posts: 70/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
I think, at least in part, that the path data is built relative off of itself, which would explain the collision botching. However, regardless of where the start position is or what you do to the first half of the path data, the second half of the lap is always navigable by the AI.

I'm learning slowly, but still don't know enough to decode the path data.

smkdan
Posted on 06-22-07 10:43 AM (rev. 2 of 06-22-07 11:42 AM) Link | Quote | ID: 48163


Ninji
Level: 36

Posts: 30/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
You're right Guy? (if i may toss in my 2c, this anonymous crap is beyond retarded). Before the AI data is stored into RAM, it adds the previous 16bits that came before it, or in the case of the very first entry, the starting coordinate.

GuyPerfect
Posted on 06-22-07 06:07 PM (rev. 4 of 06-22-07 07:14 PM) Link | Quote | ID: 48360


Paratroopa
Level: 30

Posts: 72/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
Long story short, I think I got it. Picture!



Mute City I appears to have a list of 29 X values followed 29 Y values. Each value is biased by the one preceeding it. They're 16-bit signed integers; little endian.

IMPORTANT:
The first entry in the list is in fact the first point of the path data. However, the first point is not on the lap line. Its values are biased by the lap line, but the first point in the path is actually a bit ahead of the starting point.
__________

Now comes the big question... Why 29? Is it 29 for all courses? I'm guessing probably not. smkdan, your knowledge could come in handy here. See if you can find out exactly where the number of points comes from.
__________

EDIT:
After some further examination, I can see that my data isn't quite right. But hey, I'm a lot closer than I have been.

VL-Tone
Posted on 06-23-07 12:36 AM Link | Quote | ID: 48564


Micro-Goomba
Level: 10

Posts: 2/12
EXP: 3290
Next: 1124

Since: 02-22-07

Last post: 6095 days
Last view: 5660 days
I did a lot of F-Zero Hacking back in the days, just before I got sucked into SM64 hacking...

I managed to completely decode all tracks at the time, and was working on the AI data.



Higher resolution maps (2048x1024) can be downloaded there: http://homepage.mac.com/qubedstudios/F-ZeroMaps.zip

I remember doing full res maps, but I can't find them...

This is the old archived thread: http://acmlm.no-ip.org/archive2/thread.php?id=821

My English improved a little bit since then

I dug a few things that might help you with A.I. hacking:


Here is some information I found about F-Zero's rival cars A.I.

At 7E0BD3 in wram is the on-track angle of the rival car in practice mode.
It's in 2 degree steps.

If you set this value via a cheat to 00 for example, you'll see that from the start,
the rival car faces left, and when the race start you see it go left and start to bounce
off the green barrier. So other cars do bounce on the barrier in that context,
but alas dont explode.

If you disable the cheat when the car is far away from where it should be,
you'll see that the car turns around and starts to drive toward an imaginary point
farther on the track, and this time it will pass through barriers if it has to.

I don't understand exactly what changes the behavior from bouncing to drive-thru-walls.
But the point it drives to is obviously it's next check point on the track so this pretty
much confirm that F-Zero uses a point-to-point A.I. for cars.

The drive-thru-walls game-genie code (for your car) is very usefull to follow the other car.

Angle values like FF will stop the car, and depending on where it is relative to you it will
either continously rotate on itself or stop rotating. A real speed value is probably near
7E0BD3, I'm looking foward to find it.

Note that the angle value is not exactly absolute, the game will rotate the car until it
reaches the angle stored in 7E0BD3 so turning not instantaneous. Suden 180 degrees
changes may not trigger the rotation.

So here is the way it probably works:
The game calculates the angle between the car and it's next check point.
Then, it stores this angle in 7E0BD3, and the game starts to make the car turn until
it reaches the right angle.

When the car is close enough in distance to the check point, the game steps in so
it aims for the next check point. The checkpoint data probably also includes speed
info for each point so the cars can slow down in some tight turns.

Around 7E0030 in wram there are various position values for the enemy car.
Some 16-bit X and Y pointers for its position on the track and another X and Ys
that seem to be the relative pos between the rival car and your car position.
Also there is 7E0BD3 mirrored near that.
I wasn't able to patch those with cheats, they are probably mirrors too.



Look what I've found... at 7E0D02 in wram is the checkpoint counter for the rival car!

It starts at 00 and increment as the car passes through the check points until 3A
(in Mute City 1) when the car reaches the starting line, then it goes back to 00.
Note that again this apply to the practice mode.

It means there are around 59 ($3A+1) checkpoints in MuteCity 1. Using a cheat you
can patch it to any value in this range and see the car turn around and head towards
this checkpoint. Put 00 in 7E0D02 while the rival car is in the middle of the course,
and you'll see it head for the starting line.

As I predicted, the car won't turn around if it has to do a 180 degree turn, so when it
reaches the check point it start to drive in a straight line, wrapping around the track.
If you then remove the cheat, you'll see that the value was incremented elsewhere
and that it has reached a higher number, and the car will head up to the point it was
supposed to be.

This mechanism is probably used in the grand-prix mode for the cars behind you to catch up.
By incrementing the counter faster than the cars would, it forces them to take short-cuts,
and they catch up with you, maybe it actually fetches them the last checkpoint you activated.


So we're closer than ever to find the actual checkpoint data which must have 59 entries
for Mute City 1.

EDIT: I didn't look for the car abilities values yet, to find them you could make a savestate
for each rival car at the starting line of Mute City 1 in practice mode.
Then you use a cheat finder to see what values are different, if you eliminate things like timers that could be different, you should end up finding data that is specific to each car. Fiddle with
the bytes in ram to see what they do, and then you can try to look for that data in the ROM.


Heian-794 asked me:

VL-Tone, is the car obeying the rules (i. e. not driving over empty space) when you change its next checkpoint?


My answer was:

The car doesn't obey these rules and will drive in a straight line to it's destination point,
even over empty spaces outside the track. But like I said I'm trying to figure out the details,
if you force the car to drive at a specific angle that is not towards the next checkpoint,
it will bounce of barriers like your car.


I'm using different techniques to find these values, to find the checkpoint counter, I ran the cheat
search at various points in the race, looking for values that were higher than the last sample.
Eventually I got down to a dozens of bytes, and by putting them as watch points so they are
showing on the snes screen, I quickly found that one value cycled from 0 to 3A and back to 0
when the car made a complete lap. Since the value was incremented at various time intervals,
it was clear that this counter had to do with checkpoints. Then when I patched the value it
comfirmed that this was it.

I didn't try to find the actual point list since ( I had to go to work until 9:30pm), but I'll start again
after this post. I'm thinking of doing a program that draws paths from a list of 16-bit X and 16-bit Y
values. The program will take the values from the f-zero rom at successive adresses while hoping
to find a track path pattern.

EDIT:
Dang I found the cars A.I. path data in WRAM!!!!!

At $7E11FE in wram the X data is stored in 16-bit chunks.
And at $7E1467 in wram the Y data is stored again in 16-bits chunks.

Look at these pictures (in .png format) of the Mute City I car path.
They were done using a custom tool I made for the occasion.
The map on the background was made with Tyler's set of panels, but half are missing.

http://homepage.mac.com/qubedstudios/MuteCityPath_HighByte.png
http://homepage.mac.com/qubedstudios/MuteCityPath_16bits.png
http://homepage.mac.com/qubedstudios/MuteCityPath_Fixed.png

-->The first one is drawn only using the high bytes of the data.
-->The second one is using the 16-bit value as normal, note the weird zig-zags this introduce.
-->And the last one is using inverted low bytes (FF-xx) and it seems to correct most anomalies.

Now the data can be found and extracted from savestates, but I cannot find it in ROM.
From what I concluded, the data is built when loading the track by adding a series of values
to the starting positions found at around $16200 in ROM. That explains why the path
of other cars is relative to the starting pos value. You can see that the first values at
$7E11FE and $7E1467 are the same as the starting pos in ROM. Just before each starting
pos values after $16200 in ROM are the checkpoint counts, which is 3A for Mute City I.


Sorry for the long post, but I don't have time to trim it down...

GuyPerfect
Posted on 06-23-07 02:59 AM Link | Quote | ID: 48671


Paratroopa
Level: 30

Posts: 73/155
EXP: 152515
Next: 13354

Since: 03-14-07

Last post: 6038 days
Last view: 5987 days
Thanks for the bit of insight, VL-Tone.

I'm at a loss as to the reasoning behind the "low order byte inverted" business, but it DOES seem to get the job done.



This was generated from data at 0x176A2 on a 512-byte headered ROM and extracted as thus: 16-bit unsigned integers, little endian, low-order byte inverted. If the bytes read from ROM are in order and are B1 and B2, then the value is B2 * 256 Or Not B1.

For Mute City I, there appear to be 29 points (1D, not 3A), and are stored as "all X's first, then all Y's."
__________

This data is all shifted a bit to the right and a bit forward from where the official starting point is and I don't know why. If the AI likes it, I guess that's okay.

smkdan
Posted on 06-23-07 03:45 AM (rev. 4 of 06-26-07 08:29 AM) Link | Quote | ID: 48716


Ninji
Level: 36

Posts: 31/238
EXP: 288486
Next: 19624

Since: 05-26-07

Last post: 4055 days
Last view: 4004 days
Awesome post VL-Tone. Never noticed a thread in the archives...

A few more notes:

-X coordinate AI begins at 7E:11FE in RAM
-Y coordinate AI begins at 7E:13FE in RAM (I'm not sure how you got that address, VL-Tone)

The above 2 addresses hold their respective starting coordinates. Loaded AI that's been operated upon is stored at 7E:1200 and 7E:1400 respectively.

The AI points seem to be portioned into 2 parts...

Length counters are stored as 1byte value. It's the high byte of a 16bit value where I'm not so sure of what it's doing to the other byte.

For mute city 1 it's stored at 1609D (1700h) for the first, and 160A6 for the second (0600). That makes for 17h + 6 = 29 X and Y coords. Looks like you got it right. It carries on from where it left off.

Nice to see people really getting into this. Might be closer than ever to getting it sorted.

EDIT: Forgot to mention, AI for Mute City runs from

Part one (17h)
174A3 - 174BA X
174DE - 174F5 Y

Between transitions it loads these 16bit X and Y values and sticks them in the next spot.

160A8 X
160AA Y

And this carries right on.

Part two (06h)
17695 - 1769B X
1769C - 176A2 Y

So, it's actually 30 points in Mute City 1 if you count the 'middle values' up there.
Pages: 1 2


Main - ROM Hacking - F-Zero? New thread | New reply

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.028 seconds. (348KB of memory used)
MySQL - queries: 132, rows: 171/172, time: 0.019 seconds.