Language…
14 users online:  AmperSam, dotCoockie, Golden Yoshi, Hayashi Neru, jirok1, JPhanto, Mario's GameBase,  MarioFanGamer, MorrieTheMagpie, Rykon-V73, signature_steve, Sparkz314, timothy726, toady - Guests: 252 - Bots: 287
Users: 64,795 (2,377 active)
Latest user: mathew

Has anyone ever tried to hack F-Zero (SNES) with ASM or similar?

Originally posted by suFami
Super Mario Kart uses Mode 7 and has two-player split screen (it notably uses a DSP-1 chip). I wonder if it can be done with F-Zero, but would require a complete disassembly and lots of new code (and maybe use of a chip)?


SMK has tiny maps, the tracks fit perfectly into the 1024x1024 map, there's no need to scroll the maps itself. F-Zero needs to do that because the tracks are much bigger.
Just compare these two images, both of them are in the same zoom factor: Rainbow Road and Fire Field.
F-Zero tracks are just insanely huge.


---------------------------------------------------------------------------------------------------------------

Good news: I found out what addresses and flags the game uses for CPU warping, that means I can stop using my own buggy code so you won't be able to see a car pop up somewhere after one blows up anymore (rarely noticeable on 180 turns).

I'll also gonna be cleaning up the code and testing some other stuff on my own, the code is really ugly and has many repeating stuff (I was lazy :p) but I'll condense it using more subroutines.
I'll not be able to work on this from the 18th to 20th, so it may take some time when I release a new version of the patch.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
More updates (!!!)

Optimizations to the CPU Health patch code.
Before: 655 lines of .asm, 974 bytes in ROM occupied. (including disable AI)
After: 590 lines of .asm, 823 bytes in ROM occupied. (including disable AI)

Space is not a problem, but after all it helps keeping the code clean and organized.

--

Fixed a few bugs, such as:
If a car that is midair and is exploding goes offscreen in the same frame as the explosion animation ends, you'll see an intact car on the screen for a few frames.
Fixed car popping up on screen after exploding, rarely noticeable in 180 turns.

An "extra" fix: Landmines now explode when CPUs run over them while offscreen. This may make some tracks easier (Mute City III), but it also makes the game more dynamic so I figured I would "fix" that (not sure if that was actually intentional?)
--

Still todo:
Fix generic cars not resetting the flashing black timer after exploding.
Implement frontal/back collision damage CPUs.
Implement pit area healing for CPUs.

--

There are two versions now, the difference is that one has the player car controlled by AI.

CPU health patch, option to disable/enable AI by pressing select.
CPU health patch, option to disable/enable AI by pressing select (for Fuzee's fzero.smc)
CPU health patch, option to disable/enable AI by pressing select, AI controls player.
CPU health patch, option to disable/enable AI by pressing select, AI controls player (for Fuzee's fzero.smc)

Some info on the "AI controls player" version:

- You can disable the AI by pressing select and drive normally, but your turning speed will be ridiculously high.
- You can keep accelerating while the AI plays to have a top speed of 478km/h, regardless of difficulty/checkpoint settings.
- Original player to CPU collision routines are not executed anymore. Instead the collisions will behave like the CPU to CPU ones (where the car is slowed down a lot or is shot to the opposite side)
----------------------------------

I've uploaded some test videos on my channel, in case you didn't see them:

AI with actual sliding physics.
Player controlled by AI, comparison between with and without slide physics.

Unfortunately the AI can't quite handle the sliding, that may be the reason why the sliding code only is applied to the player.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Hello! KungFuFurby here. I found out via the NESDev forums.

I usually use a sound engine called SNESMod by Mukunda Johnson. I have hacked that sound driver before to add some extra features to it. My own sound engine is actually very early on in the prototype stage (right now, I have a series of file format specifications, and a sound driver that does produce sound and has a special event processor that can add and subtract items with doubly linked lists, but currently I have yet to reprogram the SPC700 timer, since I have figured out how to optimize my timer update code to just a few opcodes, and I have decided on the fastest 8000hz tick possible). Right now, I'm working on trying to compile a prototype version of a debugger produced by bazz for a currently very early version of a program called SNES Tracker. I'm very close to getting it to run... except that it crashes on startup (and I'm running Mac OS X 10.6.8, and the program uses C++11, meaning I have had to jump a lot of hurdles... yes, I prefer to keep it frozen in time since I prefer to use Rosetta for a few other programs...).

I actually fooled around with this game way back in 2012. My expertise is in producing music modifiers, and my time at SNESMusic.org has served me very well. I'm still making them to this day.

For the US version of F-Zero, I perfected the music modifier that nensondubois had started with the sub-tune ID (7E0046xx). You can modify the racing music using this code (numbers are in hexadecimal)...

80F7E3A2
80F7E400
80F7E5EA
839E68xx
This code only works when you start a race.
The range is 00-09 (and you must set the music ID to 06). The game crashes after 09.
Originally posted by KungFuFurby
I actually fooled around with this game way back in 2012. My expertise is in producing music modifiers, and my time at SNESMusic.org has served me very well. I'm still making them to this day.

For the US version of F-Zero, I perfected the music modifier that nensondubois had started with the sub-tune ID (7E0046xx). You can modify the racing music using this code (numbers are in hexadecimal)...

80F7E3A2
80F7E400
80F7E5EA
839E68xx
This code only works when you start a race.
The range is 00-09 (and you must set the music ID to 06). The game crashes after 09.


Not sure if you knew it, but 7E0046-7E0049 are actually mirrors of $2140-$2143.


The music modifier is interesting. The original code actually loads $0AD8 into the X register to determine what value to pick from the table.

The address 7E0AD8 seems to be some sort of track ID, it seems to be used to determine music and minimap.

I looked at the routine that sets this address and it seems to be set like so:

- If the track has no possible variation (regions 0, 1, 2 and 6) then $0AD8 is set straight to $0CF5 (region)
- If the track has possible variations (all other regions):
. - If $0CFF (variation) is zero then $0AD8 is set to $0CF5
. - If $0CFF is not zero, then $0AD8 is set to ($0CF5 + $0CFF + 4)

Code
Region list ($0CF5), you'll be familiar with them if you ever used Fuzee
  00 = Big Blue
  01 = Silence
  02 = Sand Ocean
  03 = Port Town
  04 = Death Wind
  05 = Red Canyon
  06 = Fire Field
  07 = Mute City
  08 = White Land
  09 and above = Corrupt, freezes the game


Code
Variation list ($0CFF)
  00 = Variation I
  01 = Variation II (only used by Mute City)
  02 = Variation II (variation III for Mute City)
  03 and above = Unpredictable results, may freeze the game


-------------------------------------------

So I was messing around with the CPU to CPU collision routine, trying to improve it so the collisions actually work like the player to CPU collisions but... I messed up really hard, and this is the result:
https://youtu.be/5oyz1c4KB-w

I know what the issue is, I just thought that it this was so funny.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
So I've fixed most of the new AI collision code:
https://youtu.be/KNKoKw6rIMU

There is still a lot of work yet.

Known issues:
- Height is not taken into account. A car on the ground can collide with a car which is midair and vice-versa;
- Sometimes cars will collide with thin air for no reason. I might have an idea about why this happens;
- There may be an "infinite collision" if both cars are at the same speed;
- The game rarely crashes. I have no idea what causes the crash.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
So, I have found out about Shadowrun's crash handler, I decided to add it into F-Zero just as a test.

It works surprisingly well, I kept corrupting the F-Zero ROM and whenever the game was to crash the debug screen appeared. Of course, it doesn't work 100% of the time, since lockups from infinite loops and other obscure stuff aren't detected. The only thing it can detect is when the game reads a BRK opcode (which hex code is conveniently 00).

Here's a video I made showing it in action:
https://youtu.be/28BloPudgDA
It's a corrupted ROM, that's why some tiles look messed up.

------------------

I have also been trying to map more subroutines and RAM addresses.
I'm creating another document entirely dedicated to RAM addresses, but I'd like to finish transfering all addresses that I have knowledge there before releasing a link to the document. Here's a little screenie of what it looks like:



It's actually based on the SMW RAM Map.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Hey!

So I was studying some more subrotines and mapping out more RAM addresses, I found out how the game keeps track of shortcut penalties, when you land in a place where you weren't supposed to be able to.

So I made a test track quickly in Fuzee and added some shortcut checks manually, here's a video demonstrating the result: https://youtu.be/EWJ0_acQ79I
At 1:16 you can also see a fail with my checks.

I also found some other insteresting stuff like how the game calculates your height gain/loss. I had some ideas about implementing some kind of "gravity value" individually per region, but I'm not so sure about it.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
About this, from a long time ago:
Originally posted by Fennor
I'd love to see the top speed increased from 478kph to something
higher where you actually have to brake somtimes. I had a few
problems with that though. First of all, I didn't know how to change
the CPU cars top speed. In fuzee I can set them to 4 different
speeds. One is (on master) about 250kph, one is 320, one is 385 and
the highest 478. Also I had to use more Bytes for the acceleration,
but I think that wasn't a big deal, since before Blue Falcons
acceleration set there is another acceleration set that seemed to be
unused. Another problem was that top speed semmed to be locked at
478kph in another way than just by the 8 Bytes for the 4 vehicle top
speeds. When I changed the cars top speed to something higher and
gave them acceleration > 0 for speeds above that I could see the
speed o meter getting higher, but I did not effectively driver
faster. Only when I tried to drive diagonaly my speed increased,
which makes believe the X-speed and Y-Speed are locked at 478kph, so
when I drive diagonally I have 478kph for both, X and Y, making my
speed effectively 478 * 2^1/2. Which is wierd to me, since the boost
pads increase your speed properly.


You were right, X and Y velocities are locked at 478km/h (9 pixels per frame).

The game will, for some reason, limit your X and Y velocities to -9 or 9 (pixels per frame), that's also why when diagonally you go faster (when going diagonally at 478km/h, the X and Y velocities will be -6 or 6 [pixels per frame], because of angle calculations). Higher speeds diagonally could get you up to X velocity 9 and Y velocity 9, instead of both being 6.

The only time this -9 or 9 pixels per frame limit is ignored is when bit 3 (is S-boost boosted flag) or bit 5 (is dash-plate boosted flag) from the address 7E0D51 are set.

I have no idea why Nintendo decided to do that (you can't even get past 478km/h without boosting or going in a dash plate!)
The CPU cars don't have this limit, which makes this extra weird.

If you really want, you can watch these RAM addresses:
7E0B30 (X velocity [pixels per frame]);
7E0B40 (X sub-velocity [sub-pixels per frame]);
7E0B50 (Y velocity);
7E0B60 (Y sub-velocity);

The X and Y velocities are actually directly tied to 7E0B20 (speed address). The high byte (7E0B21) goes through some angle calculations and is stored to 7E0B30/7E0B50. The low byte (7E0B20) also goes through some angle calculations and is stored into 7E0B40/7E0B60

------------------------

To remove this velocity limit, you can simply change D0 to 80 at PC address 16FE (18FE if headered ROM) in a hex editor.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Thanks, that sounds very useful! I will try that out some time.
Hey, sorry I haven't posted in such a long time.
Just checked out the RAM map spreadsheet and Notes document. You put a lot of work into it! Have you managed to implement back/frontal damage between CPU drivers yet?

Saw your Youtube video with the shortcut penalties added. Can you share how you went about manually adding them in? Tracks made in Fuzee just say you're driving in reverse if you do a skip you're not supposed to. I'm guessing because the car is skipping multiple checkpoints so it screws with the game knowing where you are. So when I design tracks in Fuzee I try to be very careful that skips aren't possible and this effects track design. If I knew how to put in the shortcut penalty it would be really useful.

Also saw your Forest music track video. Awesome work, you're probably the first person to ever put new music in the game. Can you talk about your process? I'm guessing you had to do this all in hex somehow as you said you couldn't get F-Zero to work with EBmused. How did you figure out the instrument packs?

Interesting you found that unused Reverse feature routine. Always cool to see things left in the code.
Originally posted by suFami
Hey, sorry I haven't posted in such a long time.
Just checked out the RAM map spreadsheet and Notes document. You put a lot of work into it! Have you managed to implement back/frontal damage between CPU drivers yet?


I did implement the damage for back/frontal collisions for CPUs, I just haven't got to release the new version of the patch yet. I've been trying a way to make the new version compatible with Fuzee, trying to find more free space to fit the code in.

Originally posted by suFami
Saw your Youtube video with the shortcut penalties added. Can you share how you went about manually adding them in? Tracks made in Fuzee just say you're driving in reverse if you do a skip you're not supposed to. I'm guessing because the car is skipping multiple checkpoints so it screws with the game knowing where you are. So when I design tracks in Fuzee I try to be very careful that skips aren't possible and this effects track design. If I knew how to put in the shortcut penalty it would be really useful.


You must write ASM code to actually get it working, here's the code that Port Town uses. (Sorry for the weird spacing, it looked alright in Notepad++)
Here's also an image demonstrating the coordinate boundaries for shortcut detection:


But additionaly, I did write a code that automatically corrects your checkpoint count when landing by looping through all the checkpoints and finding the one nearest the player, it seems to work flawlessly, so that can be an easier alternative too. I'll make a video about that later

Originally posted by suFami
Also saw your Forest music track video. Awesome work, you're probably the first person to ever put new music in the game. Can you talk about your process? I'm guessing you had to do this all in hex somehow as you said you couldn't get F-Zero to work with EBmused. How did you figure out the instrument packs?


I did everything via hex editing. I used this page as a reference for the commands and notes. F-Zero uses the "Basic Version", where the #$E0 command sets the instrument.

About converting EBMusEd to work with F-Zero, I haven't trying doing that again, maybe I'll try it again soon.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Originally posted by CatadorDeLatas

You must write ASM code to actually get it working, here's the code that Port Town uses. (Sorry for the weird spacing, it looked alright in Notepad++)
Here's also an image demonstrating the coordinate boundaries for shortcut detection:


But additionaly, I did write a code that automatically corrects your checkpoint count when landing by looping through all the checkpoints and finding the one nearest the player, it seems to work flawlessly, so that can be an easier alternative too. I'll make a video about that later


Thanks for the Port Town code. Even with your routine comments, the ASM is a little bit over my head. That's great you wrote new code, I await your video :) It would definitely help with custom Fuzee tracks. You are like the FuSoYa of F-Zero lol.

Originally posted by CatadorDeLatas
I did everything via hex editing. I used this page as a reference for the commands and notes. F-Zero uses the "Basic Version", where the #$E0 command sets the instrument.


So theoretically you could take other SNES MIDI songs, look at their notes in some MIDI viewer software, and transpose them note for note into F-Zero using that page as a reference? However, you're limited to 5 channels because of sound effects?
Originally posted by suFami
Thanks for the Port Town code. Even with your routine comments, the ASM is a little bit over my head. That's great you wrote new code, I await your video :) It would definitely help with custom Fuzee tracks. You are like the FuSoYa of F-Zero lol.


Thanks a lot!

Originally posted by suFami
So theoretically you could take other SNES MIDI songs, look at their notes in some MIDI viewer software, and transpose them note for note into F-Zero using that page as a reference? However, you're limited to 5 channels because of sound effects?


Yes, I could really port any song by hand doing that.

Porting songs from other games that use the same N-SPC version as F-Zero is also a lot easier. All I have to do is copy/paste it into a section of the SPC RAM that fits and readjust the pointers for the song address and song subroutines.

Consider for example this song from Earthbound.
Earthbound uses the same N-SPC version as F-Zero, so I ported this song very easily. This is the result (you'll need an SPC Player)
The only problem is that it uses 7 channels, but the 7th channel can be removed altogether with little to no change (it's just a very silent echo of the guitars) and the channels for bass drum and snare drum could possibly be merged too, resulting in 5 channels.
The song also wouldn't fit normally in the SPC RAM, so one of the original songs would have to be removed in order for it to fit.
It also sounds a bit quieter, possibly because the volume DSP registers may be set up differently on each game.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Great job porting that song. You can really tell it's the F-Zero soundfont when the guitar kicks in haha. Your research has really opened up the musical possibilities of F-Zero.

Just watched some of your recent videos. Great work at cracking the master ending and credits text.

I was looking over the info for the prerecorded race inputs in the Notes document and was wondering if you could tell me if the car's still retain their properties? Like each prerecorded race can use the same inputs even if the cars' all have different accelerations as long as a car doesn't crash into a wall? Seems like changing these prerecorded race inputs for custom tracks in a hack would be very time consuming to figure out.

Changing the prerecorded races and master ending/credits text will really help to polish up hacks. Usually the car crashes and the Master Ending text gets stopped.

I like your autocorrection code. I originally thought you meant you wrote code where the hover thing would pick up the car and set it correctly to the nearest checkpoint (like on Port Town) instead of flashing Reverse or getting screwed up, but your code in the video seems more beneficial to the player as you can perform shortcuts and have it update to the nearest checkpoint without any punishments. Awesome. Or does the thing only pick you up if you land a shortcut in reverse? Looks like a custom track you made too?

I've been making custom tracks in Fuzee off and on, but whenever I come back to them after a break it just doesn't fell like they have the same amount of polish and design the tracks in the official game have. Take Fire Field for example. Still fun and intense on Master difficulty to this day even though I've played it countless times.

It's just such a long process to make tracks and test them out. I start off by drawing what I think would be a fun track on paper and then port that into Fuzee. By the time I've ported the track and spent countless hours smoothing out turns I've sort of lost sight of the feeling I was going for when I originally drew the design. Plus testing the track myself doesn't help me know how a new player would fare who doesn't know the track inside and out like I do.

Can't wait for your hack one day. With all of your ASM changes and what not it will be like the SNES F-Zero sequel we never got. You should think about making a thread on SNESdev or Romhacking.net.
This thread definitely doesn't get the attention it deserves and I think you could possibly have a lot more people commenting and joining in on the discussion on one of those sites. We need a SMWCentral equivalent site for F-Zero hacking. The F-Zero Central that already exists has a SNES forum that looks like a ghost town though...
Originally posted by suFami
Just watched some of your recent videos. Great work at cracking the master ending and credits text.


Thanks, I recently found out about another "text format" similar to these ones, used to list the lap times after completing the last race. I'm still researching on it since it's a much more elaborate format.

Originally posted by suFami
I was looking over the info for the prerecorded race inputs in the Notes document and was wondering if you could tell me if the car's still retain their properties? Like each prerecorded race can use the same inputs even if the cars' all have different accelerations as long as a car doesn't crash into a wall? Seems like changing these prerecorded race inputs for custom tracks in a hack would be very time consuming to figure out.


The prerecorded races should be recorded using the Blue Falcon (car type = 0). The way the Master ending handles it is actually simple: it just shows the graphics of the machine you used for the cup, while the prerecorded race is being executed using the Blue Falcon.
If you look at address 7E:0F51 in the RAM Map I made you can find the following description:
Originally posted by Address 7E:0F51
Set to the player's machine type when the Master difficulty ending is shown. This is used because 7E:0052 is set to #$00, since the pre-recorded races were made using Blue Falcon. So this address is used to get the correct graphics for the top-down view of your machine.


About changing them manually, it would indeed be very time consuming. I was thinking of letting these races be entirely AI-based, but I'd have to change how the AI works by a lot, the AI in F-Zero works really weirdly.

Originally posted by suFami
I like your autocorrection code. I originally thought you meant you wrote code where the hover thing would pick up the car and set it correctly to the nearest checkpoint (like on Port Town) instead of flashing Reverse or getting screwed up, but your code in the video seems more beneficial to the player as you can perform shortcuts and have it update to the nearest checkpoint without any punishments. Awesome. Or does the thing only pick you up if you land a shortcut in reverse? Looks like a custom track you made too?


I made that custom track with lots of intersecting jumps just to show it off.
I could make a system that detects penalties, by checking for example the difference between the jump start checkpoint and the jump landing checkpoint or something like that.

Originally posted by suFami
Can't wait for your hack one day. With all of your ASM changes and what not it will be like the SNES F-Zero sequel we never got. You should think about making a thread on SNESdev or Romhacking.net.
This thread definitely doesn't get the attention it deserves and I think you could possibly have a lot more people commenting and joining in on the discussion on one of those sites. We need a SMWCentral equivalent site for F-Zero hacking. The F-Zero Central that already exists has a SNES forum that looks like a ghost town though...


I already though of making a thread in another site, but I don't think now would be a good time. I've been pretty busy lately.

-----------------------------------------------------

Update:

I haven't been working on the ASM hacking much, I've been mainly focusing on mapping the entire ROM: what each section of code does and what each section of data is.
I have most of the data mapped out with the help of other documents I found through the internet, but on mapping the code I'm doing all the work all by myself and I already got a decent chunk of the "run race" code mapped out.

I plan on releasing a ROM Map sometime.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Originally posted by CatadorDeLatas
If you look at address 7E:0F51 in the RAM Map I made you can find the following description


Thanks, I didn't even think to check the RAM Map you uploaded.

Originally posted by CatadorDeLatas
I haven't been working on the ASM hacking much, I've been mainly focusing on mapping the entire ROM: what each section of code does and what each section of data is.
I have most of the data mapped out with the help of other documents I found through the internet, but on mapping the code I'm doing all the work all by myself and I already got a decent chunk of the "run race" code mapped out.

I plan on releasing a ROM Map sometime.


Great, this will be useful to many people. I can't even imagine how much work you're putting into this. It took me hours to find music addresses in Geiger when doing research for MSU-1 for some SNES games.
It has been such a long time since I've posted an update here!

If you've been following my Youtube channel, you would know I was working into making F-Zero SNES control like F-Zero Climax. I am here to bring you a patch that adds an F-Zero Climax feel to how F-Zero SNES controls.

---------------------

All of the things included in the patch are listed below.

This new version includes:
- "Strafing" (using the shoulder buttons) now adds a velocity bonus instead of directly modifying the car's momentum (just like how the F-Zero GBA games work);
- The turn speed is now constant instead of variable by speed, turning stage, etc. (just like the GBA games);
- You can slightly control how much you drift (actually your turn speed) by holding up or down while turning (just like F-Zero Climax);
- You can now use strafing while you turn, including strafing in the opposite direction (again, just like the GBA games);
- Ice now works like in the GBA games;
- You will now be able to turn the car while you're stopped.

Other things from the previous version of the patch:
- Big Blue's water color was slightly mofified;
- Fire Field's lava color was slightly modified with a few orange tones (it looks better like that I think);
- The barrier now flashes when an AI car runs over it;
- The road now flashes when an AI car hits a wall;
- You will now be able to toggle AI by pressing Select (just a temporary debug feature I threw in);
- AI cars now have a power meter. The four main cars start with a power value of #$0800 (like the player) and the generic cars start with a value of #$0700;
- Explosive cars will explode immediately when entering in contact with a wall/another car;
- AI cars will now explode when falling off the track;
- AI cars can now boost (they are only currently boosting in Mute City I);
- AI cars will now have proper collision between them (still a little bit buggy though).

Bugfixes that the patch provides to the original game:
- The player's height and uncontrollable spinning time are now saved into the AI car that plays as you when finishing a race;
- AI cars can now hit landmines while they're offscreen;
- The player will not be able to have a negative power value anymore (when the player doesn't have any power but still keeps their full top speed);
- AI cars that are marked as "invisible" and "exploding" will not have collision enabled for other AI cars anymore;
- Ice will not have any effect while the player is midair;
- When you overtake an AI car while they're midair, they will not be forced to land immediately anymore (that was a pretty weird quirk that I don't think anybody noticed);
- AI cars that are marked as "exploding" will not have their shadow drawn anymore;
- AI cars that are marked as "invisible" will not play sound effects anymore;

---------------------

Here's the download to the new version patch. (Download from Google Drive)

(The patch has a name is now, "New F-Zero Mechanics", let me know if you can suggest a better name.)

Again, I wasn't able to make it Fuzee-compatible because Fuzee won't work properly with expanded ROMs. I'll still need to figure out a way to modify Fuzee to make it accept expanded ROMs, but the main problem is that I'm not familiar with C coding.


Also, I'd like to tell you that I'm still working on the ROM disassemble I mentioned a few months ago.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Hello, I'm Alejandro, It's my first post on this site, so I hope this wouldn't be a mess.

Short summary to get to the point: I'm a YouTube user who likes F-Zero hacking, I made a Fuzee tutorial with more information, explaining things that weren't present in Tony Thai's tutorial, blah blah...

I'm that person who have ideas to improve F-Zero hacking but can't make the work himself due to the lack of knowledge of ASM hacking, LUA script, that coding stuff.
Some people know me, some don't, so that's why I'm introducing myself
.

Now, I have some ideas to improve F-Zero, these may or may not be possible, or even stable, so I will just point them out here.


1. Sprites layering

While seeing how far the vehicles go until they dissapear, I noticed that the distance between sprites while going near/far is not accurate as it should be. The amount of pixels that make the 3D ilusion don't align properly, making the vehicles bigger or smaller when they are in a specific position.
Refer to this image for better clarification:



The space in-between the red lines are where the sprites changes (The blue line is where the background starts), if you look at the lines at the top, you will notice these aren't alingned in a way that would make a proper perspective from the sprites to change, they look messed up.

I tried to fix the space between the red lines, it would seem something like this:



I think these are better positions to put the sprites at the distances (Note: I edited Golden Fox's sprites a bit to make it look better).

I don't know if it is possible to change these positions, but if it is, that would be a nice improvement.


2. Fuzee missing tiles

Some people know that Fuzee works in a format that is not very accurate, something like 8x8 tiles when they are made by 4x4 (Sincerely I don't remember, just putting this to let you know what I'm talking about), and by that I mean when you get to Tile editing mode (Space + Right click on a tile) it appear a tile that might be the same when working with Electric barriers, but not every combination is there, I noticed that White Land II (And probably other courses) has one or more tiles that don't appear in Fuzee, take a look to this image:



Left: My F-Zero hack, Right: White Land II.
Look how Fuzee lacks of the Electric barrier that the original game has (The Electric barrier at the corner), maybe it is in Fuzee, but you would need to search for it manually, as well as other tiles.
What I mean with this is Fuzee may lack of tiles that are in the original game? If so, is there an easy way to implement them?

Or people can just make custom tiles, as CatadorDeLatas explained before, but I don't know if there is an easier way to make them.


3. Fuzee small pointers

When you edit the AI dots in the Pointers, sometimes these small pointers will appear:



These appear disordered and it seems to be a glitch.

And when you open a ROM with edited color palettes, they will appear as well but in this case it will appear in order of one of the regions of the original edited ROM.



Both ROMs in the images are the same, and the second image shows Region 7-1 AI path.

It seems that these pointers can't be edited, I tested a ROM hack with these pointers showing, but nothing seemed to change in-game.


4. Custom Records screen

As you might know, F-Zero hacks are more edited courses rather than graphics, this can affect the Record screen, where the order is not the same as the orders of your courses, it just shows F-Zero's original courses order, until selecting one from the menu.

It would be nice if someone can create a program which would be able to edit the Records screen, as well as the Ending and Credits texts, even through these last 2 things require actual coding, because the Record screen is just graphical appareance.


5. CPU degree

Sometimes the CPU's facing is not very accurate, when facing the same way as the player, they face that way for the entire screen, when they should only do it when they are near of the middle of the screen, the Starting line aligment is clearly an example of this, where the vehicles at the extremes are facing forward, not a little to the side.
This also happens when pressing L/R while driving forward, mostly when going in reverse.

This happens because the CPU sprites changes too soon when the player is on an specific degree, it should change at the middle of the degree where an specific sprite will show, but it does in a inaccurate degree position.

The farther the CPU is, the more inaccurate is:



Here, the Golden Fox is supposed to face at 180° degree (South) but it is like it is facing 165° or something like that.

You can also notice that when you finish a course in Practice mode with a degree (like 5°, 10°), the vehicle will face to the side instead of its driving facing.

Maybe this happens not only for degree settings, but for lack of sprites for the vehicles.


6. Custom animated horizon backgrounds

While messing with cheat codes I noticed the horizon has the capacity to change sprites/palette colors, this means it is possible to implement animated horizon backgrounds?

Look this example:


The 1st background layer (Which moves along with the floor) changes palettes, I don't know about the 2nd background layer, I thought this may help someone to research this behiavor in the ROM and possibly make animated horizons.

Also, I noticed in Death Wind there is a sprite in the horizon that appear and disappears depending on the degree you're facing, at the west of the course, I don't see that this happens in other courses.



Look closely at the pointed mountain, a fragment of small mountain appears and dissapears at the bottom.


7. Sprites fixes

Althrogh F-Zero sprites look fine, I noticed some sprite's colors can be improved, sometimes some sprites have black pixels or white pixels somewhere the sprite, and it doesn't look completely good I think? there is also some sprites that have transparent pixels in them, For example, Fire Stingray and Golden Fox's jumping sprite.

I also noticed that CPU sprites are different from Player sprites, as mentioned above, some of them have transparent pixels/different color in specific parts.



Left: CPU sprites, Right: Player sprites.


8. Custom map positions

As we know, White Land I and II are different courses in the same region, but the player/CPU dot are re-positioned in these courses, in Fuzee is not possible to make a custom aligment for the minimaps, how the developers managed to center them?


9. Fuzee filler CPU color glitch

When setting the AI dots in diferent parts in the AI pointer, it may glitch some of the non-main vehicles, (I call them snail vehicles because browns are slow and have look-alike colors, they look like shells and also it looks like they have eyes) changing their colors.

For example, a Purple snail vehicle drives from a splitted area in AI dots, it goes offscreen (forward), then it reappear green, and vice versa.

There is also a rare case where while going reverse passing after a byway path or a split area with AI pointers, a brown snail will take count in the rank system, like if the snail is going in one of the first places, I don't know if is a color glitch, or the vehicle ID glitches to introduce it in the ranking.


10. Free camera mode/follow AI vehicle, test

Some of this may be things from a debug mode, where you can control the camera.
Is it possible to control the camera? I know is not really a camera, but you know what I mean.
For instance, after the final race in a league:
Since you don't have any control over the vehicle, the player can press Select and navigate through the course, or stick with any AI vehicle in the course, while you can rotate the camera around the vehicles.

After a race:
When finishing 1st place, the camera rotates around the vehicle, while showing the course times.

Landscape mode:
Entering any course, no vehicles in the region, explore the region freely, but not as a vehicle, no vehicle shadow, just a camera moving freely through the course (I know this will not work for normal game, as the player may "notice" the region repeats, this is like a debug mode where you can see the course).

Don't take seriously these ideas, unless you want to make them, especially the rotating camera while finishing 1st place plus showing lap times (And the landscape mode, my favorite since I make videos and I feel like moving the camera through a custom cour-I better shut up about this, if I want something I should make it myself!).

I actually have some idea on how this would work, when you finish 2nd/3rd place, plus freezing the timer (7E00CDXX), the camera follows the player/AI vehicle until you un-freeze the timer, then you can freeze it again, where the camera stay still, but it still can follow the vehicle when it is near, like in the 1st place sequence, when the camera stops following the vehicle, but it follows the vehicle from the area where is held still, if the timer is frozen, the camera will follow the vehicle in an X axis.




11. Custom course names

As mentioned, making custom names for the courses, might be a good idea, since with many hacks, there will be like 4 different "Mute City I" and likewise with other courses.
I know the big font are compounded of 4 sprites, thus making a letter, so I don't know if there is a way to actually make it easy.


12. AI vehicle hitboxes offscreen

As some of us know, CPU don't seem to have hitboxes active when they're far/offscreen with Land mines and Dash plates.
I know to implement hitboxes is necessary to expand the ROM, but I'm afraid that in some F-Zero hacks people set dash plates next to long jumps, making them to fall and exploding (with patches) thus making an unstable race.


13. F-Zero 2 vehicles patch fixes

Since there is a patch made by Fennor Virastar that allows to drive as F-Zero 2 vehicles in F-Zero and vice versa, this might make people want to get their favorite vehicles right, because I noticed some player sprites that aren't correctly conected/positioned, not mentoning the pipe positions/numbers.

So Fennor Virastar, if you are still into F-Zero hacking, it would be nice if you can improve the sprites, or even CatadorDeLatas, or anyone that knows how to edit sprites, since I have Windows 10 and can't seem to find programs compatible with my OS. (Don't get me wrong, I'm not forcing you to make it or whatever, I'm not trying to being rude in any way).


14. CatadorDeLata's patches

Hey, I like your patches so much, thanks for making them!
Althrough, I've found some bugs in your "AI explode when falling" patch (I think is the penultimate patch you made), once I was testing my hack, Golden Fox was in 1st place, (I think I was in 2nd place), it probably fell down in a long jump with dash plate (haha, yeah... the thing I mentioned above) and exploded, but then there was a Purple snail in 1st place, like, why? I assume Golden Fox exploded since I was in 2nd place, then a Purple snail vehicle appeared in Golden Fox's position.

I'm sorry for not having actual proof that that happened, and I know you said your patches still have bugs, I'm just mentioning it so I thought it would help you to fix the possible bugs that your patch still has.

Also, the player vehicle still doesn't has the falling animation when falling of course in Mute City and Port Town, althrough I think the falling animation should be in every region, since the courses are high up from the floor, why the developers didn't set them? I think they cared more for the cities and forgot to add it to the other regions... You can still explode instantly after a jump by landing on a wall.

There is another thing that may possibly be a glitch, I was playing with one of your patches (I think the New mechanics patch) and I activated some cheat codes and this happened:



I don't know if that happened because of the cheats, or it was a glitch on the patch, because it didn't happen in the original F-Zero, anyway it may not be so important.


As I said in the beggining, I'm that guy who have ideas but can't make them himself due to the lack of knowledge of ASM and hacking, so I try to help the F-Zero hacking community the best as I can, and please don't take my ideas too seriously, I know there might not be possible to do some of them due to the game limitations, your knowledges or time reasons.

Althrough, I still can do some things, like messing with a hex editor, or changing color palettes (through programs), simple stuff.
Check out my YouTube channel in your meantime, I have some F-Zero stuff there

Fuzee tutorial (F-Zero hack editor) made by me!
Originally posted by Alejandro
-snip-


Oh, you'll like what I'm about to say about those suggestions...

1. Sprites layering

That is definitely possible, and VERY easy to implement (as easy as editing at least 8 bytes (one for each transition).

2. Missing tiles in Fuzee

I didn't really want to give this info away yet, but I guess the time has come... I'm actually working on a new F-Zero track editor (THE BIG REVEAL!).
It's not "working" as of now, I'm still trying to figure out how to recompress the track data after decompression (decompression is already working though!). I'll only go into adding an "editing interface" when I get the compression working.

My thoughts for the editor is to make it more powerful than Fuzee. Fuzee uses the same 16x16 tiles preset as the original game, which is limited because these are the only tiles needed to build the original tracks (some tiles you'll be looking for may not exist). I'll have my editor actually be able to edit tracks in a "8x8 tile level", allowing for greater customization.
I'm also thinking about adding even more stuff, so it's not just a "track editor". One example is editing car stats, but it's still a thought and I don't know how viable that could be.

3. Fuzee small pointers

I have no idea of what these actually mean... Serious, it doesn't change anything, seems to be just a bug in Fuzee.

4. Custom Records screen

Records screen huh... That's a bit tricky actually..
Getting the track order is not tricky. What's tricky to do is the small white track names on the records menu. The tilemap for BG3 (which displays these) are entirely compressed, I know the compression format, so writing a decompressor is easy.
What's tricky is writing a compressor, getting a good compression ratio and not screwing up the "file"...
OR I could just modify the game to load decompressed data directly. That could be easier, but I've never actually thought about modifying the records screen...

5. CPU degree

That's tricky. You see, the game displays the AI car sprite facing based on the difference between the player's orientation and the AI car's orientation. It doesn't matter if the car is far on the left or right of the screen. Modifying this is just unviable.
I hope that made sense?

6. Custom animated horizon backgrounds

Thing is, I also wanted to add the ability to customize the horizon background, but they're compressed in a similar manner to the records screen (with a different compression format). But animated backgrounds.. That could be tricky to pull off, all that's happening is that the color palette is cycling infinitely, no tiles are actually being replaced to form an "animation" (the track floor background in some venues actually use this palette cycle trick to emulate a "tile animation" effect, it's very clever if you think about it).

About the Death Wind oddity, I never noticed that. This may be a developer oversight when they designed that specific horizon background. It's kinda hard to explain why this happens..

7. Sprite fixes

I have noticed before that the back-facing AI sprites are actually different from the player sprites. The most noticeable one is the Blue Falcon.
I also know some sprites have weird transparent pixels at certain animations (Fire Stingray "strafing"/jumping and Golden Fox jumping). Some cars also have the "blast pipe" pixels at places they shouldn't be located (pick Golden Fox and accelerate while strafing, pay close attention, you'll know what I'm talking about).

Fortunately, all of these are can be easily fixed.

8. Custom map positions

I believe Fuzee actually has this functionality, it's just not documented? I remember long ago I messed with some numbers in the "minimap section" of the globalsettings.txt file and got the minimap dots to be offset by a certain amount of pixels...

9. Fuzee filler CPU color glitch

I think that's more of a "vehicle ID" glitch. "purple snails" respawning as "green snails" are actually a side effect of how the game doesn't save their color when they despawn, they just use a fixed address that decrements everytime a "snail" despawns (so if the value is even, purple color is assigned. Else, green color is assigned)

10. Free camera mode

Hm... Now that's a bit tricky. I get what you mean, it's possible, but due to the way the "race end state" (which also controls how camera moves after a race finishes) works, it would be a time-consuming process to get this going on as desired.

11. Custom course names

This is actually something I've already though about adding in my track editor project. The only problem I see is that some characters don't actually exist in the game (for instance, 'J', 'Q' and 'Z'). Would it be possible to add these characters into the game? Maybe.. VRAM space is very thight...

12. AI vehicle hitboxes offscreen

I've actually thought about this too, when I learned a few months ago that F-Zero Maximum Velocity actually generates collisions between AI cars while they're offscreen (this blew my mind for some reason!).
The big problem would be implementing this functionality. It could add a big load of processing power to the game, and could make it slow down if all cars are on screen at the same time.
Also, I'm not sure how I could implement it. Sure, comparing if the difference between 2 car's X or Y coordinates (instead of on-screen position) is less than a certain value works, but what about the angles? That could possibly be tricky to calculate.


I somehow ignored what you actually wrote and focused only on the title...
AI cars hitting landmines offscreen is already a thing in the latest patch as far as I remember. Making AI cars dash plate detection work independantly of the player's angle (yeah, they used the player's angle to check AI hitting a dash plate... weird) is easy, just editing a single instruction would do the trick.

13. F-Zero 2 vehicles patch

No problem man! I'm open to suggestions, though my time to do all stuff isn't really that much.
That's completely possible, though it isn't really something that I would focus actually...

14. Bugs in my patches

I'm aware of the "1st place AI blows up while offscreen and it doesn't move behind the player". I'm not entirely sure what causes it, but it may have to do with the fact that the car is offscreen (AND in front of the player) for some reason setting the "warping behind player flag" doesn't really work under these conditions.

As for the second bug you've showed, this looks like something caused by the cheats, maybe? Do you happen to know what cheat you were using, this could help me find what exactly happened.


Long reply for a long post, yeah.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests