Register | Login | |||||
Main
| Memberlist
| Active users
| ACS
| Commons
| Calendar
| Online users Ranks | FAQ | Color Chart | Photo album | IRC Chat |
| |
1 user currently in Rom Hacking: |
Acmlm's Board - I2 Archive - Rom Hacking - Complete F-Zero tracks images (at last!) | | | |
Pages: 1 2 | Add to favorites | "RSS" Feed | Next newer thread | Next older thread |
User | Post | ||
VL-Tone Red Cheep-cheep Level: 23 Posts: 40/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Higher resolution versions (2048x1024) can be seen at the urls below. The full resolution would be 8192x4096 but I didn't generate those yet. These would make great posters http://membres.lycos.fr/nes3d/FZ_MuteCity.png http://membres.lycos.fr/nes3d/FZ_BigBlue.png http://membres.lycos.fr/nes3d/FZ_Sand&Silence.png http://membres.lycos.fr/nes3d/FZ_DeathWind.png http://membres.lycos.fr/nes3d/FZ_FireField.png http://membres.lycos.fr/nes3d/FZ_PortTown.png http://membres.lycos.fr/nes3d/FZ_RedCayon.png |
|||
Ok Impala! Buzzy Beetle Level: 31 Posts: 324/383 EXP: 183070 For next: 2293 Since: 03-16-04 From: The Netherlands Since last post: 4 days Last activity: 23 hours |
| ||
Ok! Cool! Next stop, a complete track editor? |
|||
Heian-794 Red Super Koopa Level: 44 Posts: 686/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
VL-Tone!! That is fantastic! How did you get these? (For those unacquainted with F-Zero...: Long ago when we were working on hacking the game, people discovered how the game has 255 different 8x8 pixel tiles. Somehow the game assigns a single byte to a whole 32x2 row of these, then makes big 32x32-tile "panels" out of rows, numbers them (for example, in Mute City 0A is the starting line, 68 is horizontal track with a jump panel, 17 is blank air with city streets underneath, etc.) and then arranges the panels. But exactly how the game put those rows together, nobody could say.) Tell me you've cracked this, VL-Tone, and that real F-Zero hacking can get underway! There's an old thread about this; someone should dig it up. I probably have the last post, and thus can't bump it. But it's chock-full of information. |
|||
JLukas Red Paragoomba Level: 13 Posts: 25/51 EXP: 8897 For next: 1370 Since: 03-15-04 From: USA Since last post: 9 hours Last activity: 6 hours |
| ||
Nice job, F-Zero is one of my favorites, great work with the maps! | |||
iamhiro1112 Armos Level: 35 Posts: 452/487 EXP: 259927 For next: 20009 Since: 03-27-04 From: sd Since last post: 18 days Last activity: 7 days |
| ||
Sweet, I woudl love either a rom hack or a track editor for this game. The 1st gba F-zero tried to be that but it sucked big time. | |||
BMF98567 BLACK HAS BUILT A SILLY DICE-MAZE! GO! Current list of BURNING FURY >8( recipients: - Yiffy Kitten (x2) - Xkeeper Level: 53 Posts: 890/1261 EXP: 1094149 For next: 62970 Since: 03-15-04 From: Blobaria Special Move: Rising Meatloaf Backhand Combo Since last post: 21 hours Last activity: 1 hour |
| ||
Pretty cool, but I think you may have gotten Big Blue and Death Wind mixed up. Big Blue has the big, icy curve on the left. | |||
VL-Tone Red Cheep-cheep Level: 23 Posts: 41/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Oops! I just fixed that mix up... I'm in a hurry, I have to go to work... I'll give you more info about it tonight or tomorrow. And yes these are decoded from the ROM data... |
|||
Heian-794 Red Super Koopa Level: 44 Posts: 687/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
Looking forward to it, VL-Tone! BTW, here's an old thread from almost a year ago where many discoveries were made in F-Zero. I'm looking at VL-Tone's research on checkpoints and Nestea's music stuff; we really need to get a hack/editor out of this! Somebody bump it! http://board.acmlm.org/thread.php?id=821&page=0 |
|||
Keitaro Iron Knuckle ウラシマ ケイタロウ Level: 54 Posts: 1224/1342 EXP: 1201569 For next: 32301 Since: 03-15-04 From: Hinata, Japan Since last post: 2 days Last activity: 2 days |
| ||
I think it was my music stuff you mean, I remember posting a small document on how to hack the game's music (it was piss easy, SMAS format, I completly re-wrote the soundtrack at one point ). But I love F-Zero, I love the games and I love the music. I hope something cool could come out of this, and if I could assist at some point in the future, just look me up (I say the future because right now I'm a bit behind on some things ) | |||
Heian-794 Red Super Koopa Level: 44 Posts: 690/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
Sorry about that, Keitaro; I was thinking of his codes for switching which music plays on which course. Brand-new music in F-Zero would be great[! Anyway, VL-Tone, do you think you could add the panel numbers to the parts of your graphics so that people know which byte values go with which course parts? For example, Death Wind looks like this:
I can probably pull the rest of them out of the ROM and post them when I have some more time. Real F-Zero course hacking (not Climax's weak imitation) -- we've got to get this going! (edited by Heian-794 on 06-01-05 09:04 AM) |
|||
VL-Tone Red Cheep-cheep Level: 23 Posts: 42/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Originally posted by Heian-794 What could be better than to put numbers on the map would be to generate all the panels in order on the same image, or in as individual image files. Then someone could use them to make a basic track editor that works at the panel level. I actually cracked the format some months ago when I didn't have the net. I forgot exactly how it was done and I cannot find what I documented, so I'll have to dig up in my source code to explain it better. In the mean time, here is what I recall from memory: There are 2 bytes for each 32x16 row, not one as you mentioned. This 16-bit pointer refers to a position in the master row data for this particular track. The master row data is itself composed of pointers (16-bits too I think) referring to 2x2 tiles (total of 32x32 pixels) in another data set. It looks as if the whole track was designed with some custom tools, then "compressed" using this structure using a variation on RLE compression. I only found the master row data in WRAM (in zst savestates), but the other data like the 2x2 tiles list are in the ROM, uncompressed. If you still don't understand what I'm talking about when I mention "master row data" well here is some good old ascii art: ###########O.........O########O..............O#########O...................O##### The pound signs are for "any out of track graphics" and dots are for the inside of the track graphics.The "O"s are... well you know, those round green or other color round things delimiting the track. Imagine that the same string of characters would continue up to a length of 65,536 tiles/characters. Lets say the first 16-bits value (out of 16) for a panel is 000E. The corresponding row in the master row data will be found there in bold: 02468ACE... Note that since the 16-bits value is referring to the actual position in the data that is also 16-bits, values are always even and in my ascii art, each character is represented as 16-bits in the 2x2 tiles data. I'll try to dig the actual addresses of the data, and generate panel graphics in order. And one last thing, I also cracked the car AI data...in part There are pairs of lists of angles and speeds values (or maybe distance). I had no problems dealing with the angles, but the speed value is hard to predict, I couln't find a way to interpret the data so it could fit the tracks at every points (I'm guessing that I need to take acceleration into account).There are 4 sets of these angle/speed lists for each track, one for each car. I'm pretty sure now that the other "car drones" are surprisingly the only enemy cars that have real A.I. and really "drive" around the track. Ok that's all folks for now... more soon. |
|||
Heian-794 Red Super Koopa Level: 44 Posts: 693/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
Great info -- I need to take a few minutes to read and digest this; it's fantastic. Sand Ocean, for example, uses "00 70" as its default, blank tile. Does that mean that for the 16 bits, starting at the h70th on that master row data, we should see all 'empty' background? I'm going to put a little work into the graphics-only F-Zero hack that I was making a while back; Big Blue becomes a tropical island, Port Town is now a daytime course, and Silence is grassy fields with Stonehenge in the background. Might be a fun prelude to a real hack. |
|||
VL-Tone Red Cheep-cheep Level: 23 Posts: 44/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Originally posted by Heian-794 0070 represents a complete row, not a blank tile. The starting line panel for Sand Ocean starts at 1E9C0 and is 16x2 bytes long (32 bytes). In that panel each 0070 is representing a row of water/sand. 4276 CE8E 8276 C676 C676 C676 C676 C676 C676 C676 F6CF 1875 6276 0070 0070 0070 This image is from my very early panel editor, you can click on rows and "slide" them left and right using the mouse. "Sliding" rows is simply a matter of adding or substracting even numbers from each of the row's values in the panel data. Adding will move the row to the left. 0070 is the position of the first data in the master row data set for Sand Ocean and Silence. A smaller value cannot be used. As you can see since subtracting slides the row to the right, the row shown for this panel would end up having the garbled tiles you see on the left (In the game they are even more garbled). Now the next screenshot is to show what would happen if all rows would be selected at once in my editor, so you can see the context they're in. Anyway I hope it makes sense to you Ok now I found the missing addresses... The master row data is in ZST states from each track at: h24C47 and the length is at most 33510 (decimal) bytes. Some tracks share the same master row data. As for the tile data used by the master row data: Look at page 3 of the old F-Zero thread http://board.acmlm.org/thread.php?id=821&page=3 This 2x2 tiles definition starts at $64580 (in ROM). The 4 tiles have to be drawn in this order: top-left, down-left, top-right, down-right. At the time I didn't know what it was, and thought it was the row data, but it's the "reccuring" tile data used by the row data. (edited by VL-Tone on 06-02-05 12:52 AM) |
|||
Yoronosuku Bullet Bill YORO 4 GOD Level: 32 Posts: 126/502 EXP: 194954 For next: 11488 Since: 01-06-05 From: hailing from Oyamazaki, Kyoto Since last post: 4 hours Last activity: 4 hours |
| ||
Kyaah...I love F-Zero. That is so cool VL-Tone That would be incredible if we would be able to edit this. | |||
Violent J Melon Bug Level: 41 Posts: 403/749 EXP: 479154 For next: 991 Since: 05-05-04 From: Since last post: 8 hours Last activity: 8 hours |
| ||
All going right over my head...Its so confusing! I know like 2% of ASM and like 20% of Hex and that all makes really no sense...Except for the track layout on the big number thing...Each number is a tile, set up in a order to display the track...right? Hmm...If I took the data you guys gathered on a level, and switched it around, would it work? Im trying really hard to process all this stuff so help me out. | |||
VL-Tone Red Cheep-cheep Level: 23 Posts: 45/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Originally posted by Sonicandtails Actually, I was more or less replying to Heian-794 which already knows things about the format, so it could be confusing for someone who didn't read the whole other thread. Still I guess it was still confusing to anyone Let me try to make a simple explanation. The basic graphic tiles are 8x8 pixels. Track panels are 256x256 pixels which means 32x32 basic tiles. What defines what goes inside the panels are 16 pointers that are each 2 bytes long (16-bits). Each pointer represents a row which is composed of sixteen 2x2 basic tiles graphics. The number indicate what part of the row data will be used to display this particular row. The whole row data itself is composed also of 2 bytes numbers but this time pointing to tile data. The whole row data is uncompressed and starts at $10C13 in a ZST state for a particular track. Each 2 bytes value in the row data is a pointer that represents a 2x2 basic tiles graphic. The 2x2 tiles graphics data are also stored elsewhere, starting at $64580 in ROM. Tile data is using one byte for each 8x8 pixels tile. So for each basic 2x2 tiles graphic 4 bytes are used. Here is the 256 tiles set used by the tile data for Mute City (it's not the tile data itself) If anyone already has the full set of these graphics for all tracks with all palette variations I would really need that. As you can see that palettes are off in some of my maps as I only have some of the graphic sets. Anyway I guess the reason why it can get confusing is that the same thing is happening at several levels. The same "compression" method is used at the row and tile level, and actually it works much the same across the whole hierarchy of track parts: Track/Panels/Rows/2x2Tiles/SingleTiles If there is any part you don't understand, don't hesitate to ask... Don't get too over hyped about editing the tracks. Even with this data, editing will be hard, unless someone designs a special tool to draw arbitrary tracks that would be then re-compressed as new panel, rows and tile data. That's how I think Nintendo proceeded, there is no way they worked by hand at the row and tile level unless they are really crazy Silence with its 90 (edited by VL-Tone on 06-02-05 09:18 PM) (edited by VL-Tone on 06-03-05 10:29 PM) |
|||
Heian-794 Red Super Koopa Level: 44 Posts: 700/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
VL-Tone, great work! While drawing arbitrary tracks may look imposing, we should be able to take frequently-used "sets" of 3x3, 4x4, etc. tiles to create curves and diagonals. A while ago, before you figured out the row analysis this completely, I was looking at VSNES states and comparing their maps (can't think of a better word) to the array of tiles in the ROM. Here are a bunch of often-seen sets of tiles:
Forgive these all being in decimal; that's how VSNES displayed them. But if you convert them to hex, you should see that they match VL-Tone's table above. Looking closely, you'll notice that the same tiles are used in the same spots all the time. Have a look at the first 0x99 tiles in the chart, which are all barrier parts. There are two of many of the parts, since sometimes you want track on one side, and other times you want its 'twin' which has air on that side and track on the other. For example, 104 (0x68) is the center of a barrier circle, and thus it has to have 147, 150, 128, and 125 to the N, E, S, and W of it, respectively, in order to make a barrier part with track to the NE and wall to the SE side. I did most of my futzing around using Mute City, and you can see that rows D, E, and F contain the "under-track background" tiles, which vary depending on what track you're on. The other stuff seems to be constant for all tracks. The palettes are controlled elsewhere, so we could always edit those separately. And now for my questions: I can't see the relationship between the compressed 2-byte value and the numbers that it encodes. 0F19 isn't the sum of 9A+9A+9B+9B, and neither is C676 the sum of all that stuff that makes it up... right? |
|||
VL-Tone Red Cheep-cheep Level: 23 Posts: 46/200 EXP: 64158 For next: 3565 Since: 06-06-04 From: In the Moon! Since last post: 5 days Last activity: 2 hours |
| ||
Originally posted by Heian-794 C676 and 0F19 are not compressed data, they are address pointers. The base address for the master row data is h10C13 in a ZST file. I had this mixed up in the other post. Note that the actual row data is starting at around 14C13 and is non continuous. Just add a row's 16-bit address pointer to h10C13 to get the actual address in the ZST file. h10C13+h76C6=h182D9 h182D9 is where you can find the start of the pictured row in a ZST file from Sand Ocean. Load 32 bytes at this address to get data for the full row. 5408 5600 5408 5600 5408 5600 5408 190F 5408 5600 5408 5600 5408 5600 5408 5600 h182E7 which is the address in the ZST where you can find 190F (the starting line 2x2 tiles pointer) The green values on my picture had the bytes already reversed. The starting line 2x2 tile offset is 0F19 and the 2x2 tile data begins at h64580 in the ROM so: h64580+h0F19=h65499 In the ROM you will find 9A 9A 9B 9B at h65499 which are the four tiles used in the 2x2 tiles graphic for the starting line. I hope it makes more sense to you now I will address the part about an arbitrary track editor in my next post... |
|||
neviksti Goomba Level: 8 Posts: 1/25 EXP: 1510 For next: 677 Since: 06-09-05 Since last post: 36 days Last activity: 30 days |
| ||
Hello, I was curious about the F-Zero data and people suggested I look here. I am by no means a rom hacker, more of a rom programmer I guess. So my main methods for trying to understand a rom are to look at the code. This is usually slow and inefficent, but eventually leads to a fairly complete understanding of what the game is doing during xyz. In short, I'd like to help... but be patient as my methods are slower. I figured out how the game keeps track of its state and goes through menus etc. So I tracked down this... Here is the "grand prix mode" track loading routine: 80/88FC: 20D589 JSR $89D5 Here is the "practice mode" (or title screen) track loading routine: 80/8ACD: 20D589 JSR $89D5 Hopefully this will quicken the search for others reading the code. I would love to see a fully functional track editor, so if you tell me what is most needed, I can try to focus my efforts on that. In the mean time, I'll continue reading through the code. |
|||
Heian-794 Red Super Koopa Level: 44 Posts: 713/896 EXP: 611014 For next: 271 Since: 06-01-04 From: Kyoto, Japan Since last post: 21 days Last activity: 10 days |
| ||
Here are some images from the graphical hack I was working on. I had this idea of setting the game only on Earth, at the beginning of the F-Zero races (maybe AD 2300 or so). So all the tracks will be based on real places. I made Port Town into a daytime scene in Kyoto, and Silence into Stonehenge in England. Big Blue is now a tropical island in the Pacific: As for the new Port Town, I can't find any pictures of Arashiyama on my HD, but here's the Uji River which looks similar: I need to get those futuristic arcology buildings out of there though. I was thinking of glass skyscrapers with traditional Japanese rooves, but I'm not much of a pixel artist... (edited by Heian-794 on 06-11-05 07:42 AM) |
Pages: 1 2 | Add to favorites | "RSS" Feed | Next newer thread | Next older thread |
Acmlm's Board - I2 Archive - Rom Hacking - Complete F-Zero tracks images (at last!) | | | |