I made a simple track on Fuzee and then added some manual checks for shortcuts. Normally on Fuzee if you landed on a part you weren't supposed to, the game would let you continue driving, and your checkpoints wouldn't update, so when you hit a wall it would drag you to the checkpoint after the jump.
F Zero Fuzee Shortcut Penalty TestCatadorLocao2016-12-11 | I'm updating my topic at SMWCentral with new discoveries I make: http://smwc.me/1364016
I made a simple track on Fuzee and then added some manual checks for shortcuts. Normally on Fuzee if you landed on a part you weren't supposed to, the game would let you continue driving, and your checkpoints wouldn't update, so when you hit a wall it would drag you to the checkpoint after the jump.Fuel System in F-ZeroCatadorLocao2019-11-03 | I'm really sorry for this...
Link to the patch, in case you wanna try it out: drive.google.com/open?id=1ZnHFOCknPL7rggbRsa8kpnYB0urE0sDh Patch it to an UNMODIFIED headerless US F-Zero ROM (JP ROMs might also work too, untested) It probably won't work correctly with modified ROMs (e.g Fuzee hacks)Totally Not Cursed F-ZeroCatadorLocao2019-06-08 | You might see this as a meme video, or you might see this as a feature showcase video for changing tile properties individually.
In any case, thanks for watching this silly video.
(The last few seconds of the video are choppy for whatever reason)(Slightly more) accurate speedometer for F-Zero (MV values)CatadorLocao2017-10-15 | You may not know, but the speedometer in F-Zero SNES is inaccurate (see youtu.be/y2wMdpDdSSM).
That said, I decided to modify the speedometer to convert the speed value (divided by 4) to decimal (binary coded decimal, actually), that way it would show the same "km/h units" as Maximum Velocity.
It's kinda funny thinking that the SNES game is actually faster than the GBA game. MV's maximum cap speed is 10 pixels/f (640km/h) GPL's maximum cap speed is 10 pixels/f (1280km/h) Climax's maximum cap speed is 15 pixels/f (1920km/h) SNES's maximum cap speed is 14 pixels/f (896km/h with this patch, 962km/h in the original game)
The only other 2D F-Zero game that can actually go faster than the SNES version is Climax.F-Zero with Super Mario Kart speedCatadorLocao2017-10-01 | This is the Blue Falcon, running with the same top speed as Bowser with 10+ coins in Super Mario Kart. The exact top speed is 4.0 pixels per frame, or about 150km/h in the F-Zero speedometer.
For the mushrooms/dash plates in Super Mario kart, the maximum speed achieved is 7.875 pixels per frame, about 390km/h in the F-Zero speedometer. (I just imagined a kart running at 390km/h lol)
This shows just how bigger F-Zero maps are in comparison to Super Mario Kart maps: F-Zero maps have dimensions of 8192x4096, Super Mario Kart maps are only 1024x1024 (which fits exactly into the Mode 7 tilemap).F-Zero Turning BugCatadorLocao2017-08-26 | This is really on an unmodified ROM!
While trying to figure out the usage of a memory address that increases every frame the player is turning (specifically, 7E:00D7), I found out this interesting bug that if you keep cycling between sharp turning and not sharp turning (holding left and mashing L or holding right and mashing R) this address will keep increasing beyond the intended values.
I bound a button to turbo L and turbo R in the emulator and kept making the value increasing. When the value is about 0x7100, every time the player cycles between sharp turning and not sharp turning, the player's turn animation index (7E:00D6) will be set to an invalid value, causing all sorts of glitched graphics and invalid turn speeds.
I don't think this can be exploited in any way, but I thought it was something worth showing you guys.F-Zero Mode 7 scaling testCatadorLocao2017-08-17 | I just decided to try to scale the Mode7 table 2x, things didn't go too well, as you can see I've actually created a kind of hyperbolic effect in the far horizon where the map is supposed to shrink.
I was recently looking into the mathematical side of the game, there are a bunch of function lookup-tables in F-Zero, including sine/cosine and other functions I still wasn't able to figure out what they exactly are, but they're used to, for example, set the screen X position of an AI car based on its current screen Y position.
I was able to write a small C program that computes the EXACT same sine/cosine 8.8 fixed-point lookup-table F-Zero uses. Since Mode7 uses (sine/cosine * scale) to determine the plane's rotation and scaling, I thought it was time to look into the Mode7 rotation/scale table. With 192 visible angles (1 "F-Zero degree" = 1.875 degrees), the game has a list of 176*192 (33KB!) (sine/cosine * scale) values, one for each scanline on each visible angle.
I still haven't been able to compute the Mode7 scaling function, but when I get to do it, I'll try even cooler stuff.F-Zero Red Canyon II floating glitchCatadorLocao2017-07-28 | Just a place where the developers didn't think to add the "shortcut" detection thingy (a.k.a spaceship that carries you back to track). I think this is the only place where this happens.F-Zero Climax AI is flawedCatadorLocao2017-07-08 | So I was analyzing the way the AI works in F-Zero Climax, when I found out that the AI in this game is actually very flawed. There are also some interesting things to note, including: - AI cars will ALWAYS speed up to 1920km/h when midair, no matter what. Because of this, they will often fly out of control and not land on the track (they don't even try blast turning) - Despite constantly accelerating until reaching the top speed (different per difficulty), the game will register the car action as "starting to accelerate", resulting in constant blast turning while the car has not reached the top speed - AI cars actually use the brakes - When turning, AI cars will ALWAYS be strafing on the same direction of their turning. AI cars will also NEVER strafe when they aren't turning - Sometimes AI cars will not take the optimal path when turning (probably an issue with checkpoint placement?) - When AI cars are over their top speed, they will just let go of the accelerator, but will still try blast turning (tap the accelerator to gain grip) when neededF-Zero SNES controlling like F-Zero ClimaxCatadorLocao2017-07-03 | Something I've been wanting to test for a while. I made F-Zero control like Climax, though not 100% accurate (not actually possible because both games use different angle systems, and there's a slight precision loss when converting the angles from Climax to SNES F-Zero).
Some of the funcionalities that was ported over to the SNES: - The same sliding values of each car as they are in Climax; - The same constant turn speed of each car as they are in Climax; - Turn speed can be slightly adjusted by holding up or down while turning, just like in Climax; - It's possible to strafe while turning.
This allows for more interesting level design including lots of complicated turns while also mantaining speed. This will also (probably) help me remake the AI to drive like the player easier, though I can't think of a way to handle strafing for them just yet. I also plan on raising the maximum speed, you can actually see me doing some of the complicated turns easily while boosted.
I'll release a patch with these funcionalities when I finish polishing it up (there are a few bugs, cars can spin on themselves if you're not careful for example). I figured it would be fun for you guys to try it out.F-Zero Climax Angle LUA script testCatadorLocao2017-06-29 | So I've been looking at how the GBA F-Zero games work so I can port some functionalities to the SNES version easily. The main thing I want to improve in the SNES version is the AI driving, it is really wonky, probably because the atan2 function F-Zero (SNES) is VERY inaccurate...
The angles changing so suddenly after my AI controlled car goes offscreen shows how much the AI is cheaty in this game when they're not onscreen.
For now, you can have this video, I was just curious how much different the games would handle sliding, for a comparison, you can also watch this video: youtu.be/Brah2niwMb8FIDGET SPINNERS IN F-ZERO???CatadorLocao2017-06-22 | This is truly the best thing F-Zero could get. All jokes aside, this is actually the result of a corruption using the Vinesauce ROM Corruptor.How to (not) hack F-ZeroCatadorLocao2017-06-22 | Sometimes you need to take care of overflows or...F-Zero GBA-like strafing testCatadorLocao2017-06-09 | I've decided to (try to) recreate the same effect the strafing has in the GBA games, where you can strafe WHILE you turn (you technically CAN do that in the SNES version, but it only increases the turn speed, not push your car left/right simultaneously).
This enables the player to do sharp cornering much easier and without needing to let go of the accelerator.
This is still very early, it needs lots of tweaking, including: - Having the car's velocity direction "stabilize" when strafing while NOT turning; - Fixing the car animations, if you look in the video, when you strafe and turn at the same time, it just shows the regular strafing animation (easy to fix); - Having the "push" speed gradually increase until a certain point (depending on current speed) as you hold L or R; - Probably fixing some other issue I haven't found yet (beucase that happens everytime!).
---------------------- Description in Portuguese/Descrição em português:
Eu decidi (tentar) recriar o mesmo efeito que o strafing (apertar L ou R) tem nos jogos de GBA, que dá pra fazer isso ENQUANTO faz uma curva (dá pra fazer isso na versão de SNES, mas só faz o carro girar mais na curva, não empurra o carro pra esquerda/direita ao mesmo tempo).
Com isso dá pra fazer curvas muito mais facilmente e sem precisar largar o acelerador.
Isso ainda tá bem no inicio, precisa de alguns ajustes, que incluem: - Fazer o carro "estabilizar" quando tiver segurando L ou R enquanto NÃO faz uma curva; - Corrigir as animações do carro enquanto segura L ou R enquanto faz uma curva; - Fazer a velocidade com que o carro é "empurrado" pra esquerda/direito aumentar gradualmente até um certo ponto (dependendo da velocidade) enquanto segura L ou R; - Provavelmente corrigir algum outro problema que eu não encontrei ainda (porque isso sempre acontece!).F-Zero angle Lua script testCatadorLocao2017-04-14 | Just a test run of a Lua script I've made to help me with my upcoming "How sliding works in F-Zero" video. Just know that there are two main variables working with angle types: the car facing and the car's "velocity/vector direction", which specifies the direction where the car is currently travelling. The green line represents the car facing and the blue line represents the "vector direction". The two of them work independently of each other, but the "vector direction" will try its best to be as close as possible to the car's facing. The rate in which the "vector direction" increases or decreases towards the car facing depends on certain conditions, such as the car type, if the car is midair, if the car is on ice, if the difference between the two is greater than a certain value, etc.F-Zero Credits Text FormatCatadorLocao2017-03-03 | Specifics on the format can be found here: http://bin.smwcentral.net/u/29649/F-Zero%2BCredits%2BText%2BFormat.txt
I have cracked the credits text format now, it's very similar to the master ending format, except it only has one command (new line command).
Also sorry for the lack of videos recently, I have been very busy lately.F-Zero 4th dimensionCatadorLocao2017-02-15 | Apparently you can travel to the 4th dimension if the angle goes over 360°!
This actually happens because the Mode 7 HDMA table doesn't have any values past 360°, so the game just displays garbage.Apparently F-Zero uses fixed-point mathCatadorLocao2017-02-11 | Link to the LUA script: http://bin.smwcentral.net/u/29649/F-Zero%2BFixed%2BPoint.lua (made for Snes9x-rr 1.51, but should probably work on other emulators)
I can't believe I hadn't noticed it before!
The speed uses 8:8 fixed-point (high byte has the integer part, low byte has the fractional part)
Coordinates and velocities use 16:16 fixed-point (high word has the integer part, low word has the fractional part). For the 16:16 fixed-point numbers, the game uses two distinct addresses (for example, 7E0B70/1 as the integer part of X coordinate and 7E0B80/1 as the fractional part) since the snes can't do 32-bit math directly.
I just wonder, why 16:16 fixed-point numbers for the velocities, if they are directly related to the speed, which uses 8:8 fixed-point?
This will definitely help me when I get to look at the math routines used to determine the velocities based on the vector angle and speed. They shouldn't be too complicated since they rely heavily in lookup tables.F-Zero Timer Exploit (pause-buffering)CatadorLocao2017-02-10 | This "exploit" only exists because the programmers decided to use the "general" frame counter for some routines, instead of the "in-race" frame counters.
There are two kinds of frame counters: - The "general" frame counter, that increases all the time, even when the game is paused and while not in a race; - The "in-race" frame counter, that increases only when unpaused and in a race;
All of these effects explained below happen because the game checks for the "general" counter, not the "in-race" counter. Why didn't Nintendo use the "in-race" counter for these routines? IDK, F-Zero's code is weird!
Timer: Timer increases by 1 if the general frame counter is even; if odd, increases by 2, this makes the timer increase by 1.5 every frame, but by pause-buffering you can (kind of) manipulate the timer. Keep in mind that in the PAL version the timer increases by 2 no matter what, so this exploit doesn't exist.
About the CPU car shadows not updating: (Small explanation on Car Slots: Slot 0 is the player, Slots 1 to 5 are the AI cars) The shadows for the Car Slots 2, 4 and 6 are visible when the general frame counter is odd. The shadows for the Car Slots 1, 3 and 5 are visible when the general frame counter is even.
Notice that there's a mention of "Slot 6", even though this slot technically doesn't exist. Maybe the initial intention was for there to be 7 slots, but because of the limitations there are actually only 6? Or maybe that was just an oversight, with a cost of 5 bytes and about 218 cycles. (C'mon Nintendo, you can do better!)
About the rank not updating: The game only executes the code that checks if the PLAYER crossed a checkpoint if the general frame counter is odd. Why? I have no idea, maybe a limitation? I may experiment with this sometime later.F-Zero Master Ending Text FormatCatadorLocao2017-02-08 | Here's a document describing the format: http://bin.smwcentral.net/u/29649/F-Zero%2BMaster%2BEnding%2BText%2BFormat.txt
I finally cracked the Master Ending text format! It's actually a pretty simple format with 7 commands (one of them being unintentional, actually).Making of: Adjusting CPU collision hitboxesCatadorLocao2017-02-07 | Warning: boring video, lots of beeps, etc.
I wrote myself a LUA script to help me determine the hitboxes for the CPU-to-CPU collisions. I had already wrote a code that does CPU-to-CPU collisions but the hitboxes were weird and CPUs would collide even if they were not very close to each other.
I have also enhanced the old code a bit, now lateral collisions (the one that just makes the car spin a little) work for CPUs and explosive cars will work as expected (although with no damage yet). This was possible because I "stole" a bit from the player-CPU collision code :pF-Zero Experimenting with branchesCatadorLocao2017-02-02 | Just experimenting with branches, to understand a bit more how they work. I've painted the regular black borders yellow, "branch road" black borders white, "main road" tiles blue and "branch road" tiles pink.
The highest bit (#$80) from 7E:1130 is set when the machine is marked as "on secondary path". It's cleared when the machine is marked as "on main path".
The "is on secondary path bit" is set when the machine touches a "branch road" tile or a "branch road" black border. The bit is cleared when the machine touches a "main road" tile or a regular black border.F-Zero Shortcut AutocorrectionCatadorLocao2017-02-01 | 00:00 - Without autocorrection; 02:02 - With autocorrection.
So I've written a piece of code that automatically sets the player's checkpoint to the closest one it can find when landing. This makes it so when you jump to somewhere you weren't supposed to be able to the game doesn't freak out by shouting "REVERSE, REVERSE!!" to you and collisions work normally.
At 2:30 you can see the collision actually breaks. This is because how I've placed the checkpoints around the jump. Take this image as a reference: http://i.imgur.com/1yPngm3.png
This is basically the same as shown in youtu.be/DvXLFqJO3dE except this one is much better optimized (only 1 frame of slowdown happens if there are 3 or more cars being processed) and it also works with almost no chance of failure because it loops through ALL of the checkpoints to find the nearest to the player.F-Zero 2 Resetting the game using the controllerCatadorLocao2017-01-20 | So I was comparing code from F-Zero with BS F-Zero 2, and I found something checking for L+R+Select+Start after the game loop. I decided to load up the ROM and try it out. I was actually surprised to find this as a feature. I didn't find anything about this anywhere, so I guess I'm the first?F-Zero Unused Reverse Feature?CatadorLocao2017-01-18 | While looking at the disassembled code, I found a routine that seems to be unused.
It's basically a copy of the "update car's coordinates" code, but "backwards". The "update car's coordinates" **ADDS** the car's velocities to the previous frame car's coordinates (and sub-velocities to the previous frame car's sub-coordinates). The unused one however, **SUBTRACTS**.
I suspect that the developers intended to implement a reverse feature at some point, probably. Using this version of the "update coordinates" also breaks wall collisions too as expected.F-Zero Custom Checkpoint Properties TestCatadorLocao2017-01-12 | After fully implementing damage/healing to CPU cars, I now went to create custom checkpoint properties, so I can implement CPU boosting later and maybe some other features.
For now I have just got a "explode car" checkpoint property (pretty useful, huh) as a test.
Also, a few subtle changes you may notice from the last version of the CPU Health Patch: - CPU explosion will now play a sound effect if the car is near you; - The CPU minimap dot is now cleared on practice mode.Your code is never gonna work on the first try...CatadorLocao2017-01-10 | Best coding of 2017.
Watch me forget to clear the pit area flag and mess up the CPU health recovery.F-Zero SNES Illusion TestCatadorLocao2017-01-05 | Test recreation of the Illusion gimmick from F-Zero GP Legend and F-Zero Climax.Thats some deadly wind! (F-Zero)CatadorLocao2017-01-02 | Was messing around with routines, trying to make a proper wind effect for Death Wind.
I ended up putting the wind at maximum force, just for fun.
An attempt in porting the "Devil's Call in Your Heart" song from F-Zero X into the SNES version of F-Zero. I used Midiman10's MIDI version as a reference. The MIDI can be found here: http://midiman.reztech.org/music/transcriptions
For (most of) the instrument choices, I reffered to this version, also by Midiman10: youtu.be/XySe31QNxY0
You might be able to notice some melody is missing, I was limited to 5 channels (F-Zero reserves 3 channels for sound effects). The end part also didn't turn out very nice.
You also might wonder why I replaced Mute City specifically. The answer is: I wanted to replace Death Wind's music, but I couldn't get rid of the wind sound effects (they take 2 channels), so I just replaced Mute City instead.F-Zero shortcut penalty removal test (Port Town II in 20061!)CatadorLocao2016-12-18 | So I wrote a piece of code that iterates through all the checkpoint positions in the tables (X and Y) and then checks if the player is close enough (dX^2 is less than 0x180 and dY^2 is less than 0x180) for each checkpoint. When it finds a checkpoint that is close enough to the player, it sets the player's current checkpoint to match that checkpoint. I've replaced the entire shortcut monitoring routine with this new written code.
But this system is very prone to errors, and I'm currently out of ideas on how to improve this code.
At least it kinda works, it seems to detect the checkpoints correctly most of the time.
Without the shortcut penalties being applied, I was able to finish Port Town II in 2'00"61. The WR is 2'11"39, just for comparison.F-Zero jump physics testCatadorLocao2016-12-16 | I modified the jump physics just as a test.
Sometimes the CPU car's screen position will look weird because the indexer for the table that determines the Y screen position will overflow.F-Zero BRK Crash Handler TestCatadorLocao2016-12-04 | So I found out about the crash handler of the japanese version of Shadowrun (tcrf.net/Shadowrun_(SNES)#Crash_Handler) and I decided to include it into F-Zero, just for a test.
This is a ROM I corrupted until it started crashing, then I applied the crash handler code into the ROM and it actually displayed the crash handler screen.
Of course, it doesn't always work 100% of the time (lockups from infinite loops and other obscure stuff aren't detected), the only thing it does is show the crash screen with the information when the game reads a BRK opcode (which hex code is conveniently 00).F-Zero Better AI collision testCatadorLocao2016-12-01 | While it may look complete, this still needs A LOT of work yet.
Some bugs I've noticed through some basic testing: - 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.F-Zero I messed up collisionsCatadorLocao2016-11-30 | While modifying the CPU to CPU collision routines to work a bit like Player to CPU collisions, I messed up really hard and that's the result, kinda funny.This is the reason why I romhack 2.0CatadorLocao2016-11-27 | Now even stupider!
Seriously, I just love this for some reason.F-Zero player AI test (with sliding comparison)CatadorLocao2016-11-22 | Made the AI control the player's car as a test. First lap is normal AI, second lap is AI with the "slide car" code being executed. Basically the same thing as the last video, but from the car's point of view.
Yes, the AI drives exactly like that, going from left to right repeatedly instead of going straight. This might be the reason why you see the AI car "vibrating" a bit on the start in practice when you choose the same car.F Zero AI slide testCatadorLocao2016-11-22 | Just added the "slide car" code into the CPUs for a test, with surprising results.
Unfortunately the game's AI can't handle the sliding correctly, the cars will just turn too much, I guess they don't know how to do blast turning :pF Zero no mode7 scroll testCatadorLocao2016-11-15 | Test, for http://smwc.me/1378307This is the reason why I romhackCatadorLocao2016-11-09 | I just love this for some reason.F Zero nonsense Silence AI PathCatadorLocao2016-09-22 | Test.F Zero Checkpoint LUA Script TestCatadorLocao2016-09-19 | Just a test. It shows all the information about the current checkpoint you're in. The only thing that it doesn't show is the X/Y coordinate of the checkpoint.F Zero CPU Explosion testCatadorLocao2016-09-19 | Testing a patch I have made for F-Zero (SNES)