• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Super Smash Bros. 64 Frame Data & Info

The Star King

Smash Hero
Joined
Nov 6, 2007
Messages
9,681
That would be much too small compared to normal Brawl, though... You would need to cut the knockback of everything in half or something.
 

ant-d

Smash Lord
Joined
Jun 3, 2005
Messages
1,314
Location
London, England
^Oh, and the weight/acceleration info box thing should already be correct. The data will probably not be in RAM, rather it will be in the CPU. You may need a debugger or disassembler if you want to find it.



The frame data is in the process of being updated.

I made a script that cycles through the attacks for each character and calculates the required data.
It is more reliable and consistent compared to my previous method. Although, it calculates everything at 1000 FPS so I wouldn't be surprised if there are a few weird issues.

Most of the cast are done. Just some issues with random crashing that needs to be fixed.

Once this is done I may try to make a stable patch so people can more easily enable hitboxes in 'normal' modes.
If this is still needed? I don't know if this has already been made.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Looks like the download link in the video description is dead. Maybe I have it somewhere in one my hardrive. I might try to see, but uploading it will be a pain in the ass (more than a giga IIRC). It's not a ROM nor a cheat, it's a program. The Japanese player took pictures of everything, thus the weight.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
What version of Super Smash Bros did you base your information table on? I'm seeing slightly different numbers on my NTSC rom.

I can get the data for PAL version if anyone would like me to.
Also, does anyone know any addresses for hitbox data? I'm trying to find the code to show hitboxes. I don't want to have to rely on those save states ;/.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Probably the Japanese version as it is taken from the official nintendo website, in Japanese. If you can make a chart with the NTSC values, that would be great. As far as hitboxes go, we have no idea. Maybe if we give you gameshark codes you can find back memory addresses from there? The problem is these codes don't work for most (as in don't make you go into hitbox mode).
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Ya the chart I posted was for NTSC. I would have included more jumping information, but I don't know the physics well enough to give a good explanation yet. I understand most of it though. I tried messing with the gameshark codes posted and no luck. Then I just tried comparing save states in cheat engine, but there were too many differences. I'll keep trying to search for more data.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I updated the NTSC chart to include some jumping information. Some things were difficult to measure, like Ness's Up B, because the Y value is based on where you hit yourself and i could never get it perfectly straight. Also the jumping values were tested under the condition that you aren't already falling, so certain characters 2nd jumps and Up B's are slightly lower when you are falling compared to when you aren't falling. I also didn't feel like measuring kirby and jigglypuff's 3rd -6th jumps.

Now that I understand most of the jumping physics, I'm going to go ahead and explore the moveset data.

Anyway, can someone explain how to make the gameshark code for hitbox work? My game crashes when I try to do Marios BtT stage in single player mode. I want to be able to get it working on a different emulator so I can debug it.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Sadly it crashes for me too. I have no idea how to make it work. By the way, I'm curious, how did you find these values in your chart? Simply using cheat engine?
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I used a mix of cheat engine and Nemu to find them. It took me a while to figure stuff out because the game uses a lot of pointers, so the addresses are different for every stage and mode. I decided to omit the real jumping data, because you would have to plug in the numbers and use a formula to get the max jumping height, so I just recorded the max jumping heights by using the Y Coordinate for each character.

Nemu is great for debugging. I'm no expert in cheat engine so Idk if I could have found it without Nemu. What I did to find stuff was I started out by finding the easy stuff first. I first found the health, shield, X Coordinate, Y Coordinate, etc. Once I found health, I was able to find some addresses for the data of moves after setting the breakpoint on player 2's health. Then I found the character data like weight, by setting a breakpoint on the Y Coordinate.

I use cheat engine, because having a table of addresses is more convenient than manually typing each address in a memory editor, especially when the addresses change after you change levels and modes. I recently learned how pointer addresses work so i was able to keep track of most of the data, so i don't have change the addresses every time I change levels. Also I prefer to use cheat engine over gameshark when it comes to changing data. For instance, I was testing to see how weight worked, so I kept editing Link's weight and seeing what happens.

You can't find the values in game, unless that character is already loaded in the match you are in, so I had to exit the match and select a different character, each time I wanted to look at another characters data. If you're not in a match, you won't even be able to find the data at all. Idk if it's encryption or because of compression, but the way the game loads certain data makes no sense. I was mind blown when I tried to figure out how the game loads character data. Another thing is Idk how I could even make convenient gameshark codes because you would need a code for each stage and character lol...

One thing I need to look into for cheat engine is how to deal with the problem that on some emulators, the external addresses change everytime you restart your computer. It's a hastle when you have pointer addresses. This is one of the reasons why I use Nemu for any sort of testing, because the external addresses never change + I can debug or look at the real n64 addresses in it's built in memory editor. If you want any addresses that I've found, let me know. I would post my table, but I doubt anyone here uses Nemu so you guys would have to edit the table everyday you turn your computer off. Actually tbh I haven't even used Mupen before, I'll have to see if that one's addresses change or not.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Yeah cheat engine kinda sucks because of these addresses changes. I think they differ from PJ to mupen too.

Once I found health, I was able to find some addresses for the data of moves after setting the breakpoint on player 2's health.

I'm not quite sure what you mean there. Once you get health, how can that help with other addresses? Sorry about the noobish questions, I've been wanting to find characters' movesets info, but I really don't know what to do. Like I can't simply scan for an exact value of 0, then changed value of X, as I'd do for health. Does Nemu allow you to do that more easily? If yes, do you have a tutorial? It's difficult to try learning these things, since there are almost no tutorials and having no programming/computer knowledge doesn't help. The only tutorials I found for cheat engine only explains the most basic stuff (such as health, as I said, with exact value=X1, changed value=X2, etc.).
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I'm glad you guys are still interested in learning :). I'll try to collect more data then neaten up my text file, cuz it's really messy. Unfortunately for addresses it's specific to the mode and stage, so you guys should decide on 1 or 2 stages for the majority of your testing. I like kirby's level and DK's simply because of it's conveniences for Y Coordinates.

Also with cheat engine, you can do things the lazy way if you already know the value of the data you are looking for. For example the damage data in hex for fox's laser shot = 0x19018001. So if you're playing as Fox, you can just search 4 byte value in hex and type in 19018001. You can do this for weight of a character too.

As far as tutorials, the only ones I can remember are http://viper.shadowflareindustries.com/?doc=n64asm and http://doc.kodewerx.org/hacking_n64.html . These tutorials might not be begginner friendly, but I can help you guys with anything I've already discovered. You are right about there not being many tutorials, a lot of the things I learned were by luck, patience, and determination. It requires creativity to find things that you don't know how to find. Lol sometimes I'd get stuck, then I'd take a break from it and later on magically figure it out like it was nothing.

The reason to use Nemu is that it has a built in memory editor, so you can view and edit the n64 addresses. It's very easy to make gameshark codes using Nemu. On top of the built in memory editor, it has a built in debugger, so you can view the dissassembly of the game while it's running. With enough experience, you could learn anything you want about the game.

It's not a noobish question to ask about breakpoints. For debugging, you will need to know MIPS Assembly. You can actually pick up on it fast. When it comes to programming, reading is much easier than writing. All you need to do is learn the basics and have an instruction set handy. Here's one I used to look at before I ended up memorizing most of it http://vhouten.home.xs4all.nl/mipsel/r3000-isa.html . Honestly I was impressed how quickly I learned how to read and understand assembly. When it comes to collecting data for a game, build off from what you already know. You start with simple things, then start finding other things that are related to the stuff you already know. For example, you can find the damage formula of any game, if you set a breakpoint on the person's hp and carefully read the dissassembly code. Another example is how I found the character physics stats, by setting a breakpoint on the Y coordinate of Player 1. If you wanted to make a speed hack, you could set a breakpoint on X Coordinates. For this game it's pretty hard to trace things, compared to other games, so i'll prolly have to post some examples of how I traced and a step by step of how the game works for a particular thing. Begginners will need patience, but I'm willing to help, because this stuff is fun to me. Remember, for X Coordinate, going left will decrease the value and going right will increase the value. For Y Coordinate, going up/north increases it and going down decreases it. Both Coordinates are 4 Bytes each. One annoying thing about searching for data, sometimes ul find multiple addresses that display the value of the data you are looking for. For example, several addresses store your health information, but only one of them is the actual health, while the rest are just display. Same goes for X and Y Coordinates, you'll know which one is the real one when u change the value and you see yourself teleport.

The thing I dislike about Nemu is that it's less stable than other emulators, especially considering it hasn't been updated in like 9 years. I still love it though, for what it excels in.

Are you guys willing to use Nemu? If so I can post my Table. It don't have too much, but it's convenient. I'd have more data if I wasn't exploring like 5 different games xD. Most of my data is on a sloppy text file, its mostly just a list of addresses and pieces of Assembly code from the game along with comments to explain what it does.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Thanks a lot. I'll definitely try to learn all this stuff. I hope I can count on you for help if needed though ^^. I'm afraid everybody will just lose interest and I'll be the only one trying in vain.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Ok well right now I'm collecting Projectile data, and trying to find pointers for certain stuff, I'll prolly upload my table in a few hours. Unless you guys fully understand pointers, it's best to collect data for 1 stage, that way anyone can quickly go to that stage for the data testing. I'm also trying to decode the data because multiple variables are based off the same address for data. For example for Projectiles, I know that knockback, damage, and stat effect are off the same 4 byte address. I even made myself a calculator so that I can see what each value does. So when I type in 19018001 (fox's laser data), it tells me 100 for knockback, 6 damage, and 0 (normal) for stat effect. I still haven't fully figured out the data though. Also I didn't know pikachu's thunder counts as a projectile lol.

http://smashboards.com/threads/moveset-data-thread-chart-updated-dec-04-12.329221/ This guy already recorded most stat data, but ironically he couldn't find projectile data for damage, but for me it was the opposite. I found projectiles to be much easier to debug than regular attacks, since it's easier for me to time a hit, for setting breakpoints. Using this guy's xls file can help you locate physical attacks. And it saves us the trouble of writing down the stats for each move since most of them are already written in there.


No problem :) . The more I help others, the more help I'll receive in the end. I don't like doing everything myself xD. For now, just try getting used to Nemu.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Here's my Table so far.
https://anonfiles.com/file/68065786c3d21e30b1df119ac56cf7ad

Keep me updated on anything you guys find :) . If anyone has any questions about my table, let me know.

Here are the offsets to physics stats


[COLLAPSE="Physics Stat Offsets"]
Links Physics Stats At Safron City Training Mode
I also included the default value for Link's stats.
802FDC68 is the starting address of Link's Physics stats in Saffron City Training Mode

802FDC68 = A variable that is read after dying, Default Value = 3F9EB852 (1.24)
802FDC6C = Unknown, Default Value = 42A00000 (80)
802FDC70 = Unknown, Default Value = 42700000 (60)
802FDC74 = Unknown, Default Value = 420C0000 (35)
802FDC78 = Unknown, Default Value = 00000000
802FDC7C = Unknown, Default Value = 00000000
802FDC80 = Unknown, Default Value = 00000000
802FDC84 = Default Value = 41800000 (16)
802FDC88 = Walking Speed Multiplier, Default Value = 3EBD70A4 (0.37) [Multiplies with 80]
802FDC8C = Default Value = 40000000 (2)
802FDC90 = Initial Dashing Speed, Default Value = 0x42880000 (68)
802FDC94 = Something to do with running speed, Default Value = 0x40ACCCCD (5.4)
802FDC98 = Running Speed, Default Value = 0x42280000 (42)
802FDC9C = Delay before jumping, Default Value = 0x40E00000 (7)
802FDCA0 = Something to do with jumping, Default Value = 0x3EB33333 (0.35)
802FDCA4 = Jumping Height Multiplier (for both jumps), Default value = 0x3F333333 (0.70)
802FDCA8 = Jumping Height Variable (for both jumps), Default value = 0x42100000 (36)
802FDCAC = Something to do with 2nd Jump (seems useless), Default value = 0x3EB33333 (0.35)
802FDCB0 = Multiplier for 2nd Jump , Default value = 0x3F666666 (0.90)
802FDCB4 = X-Air Acceleration, Default value = 0x3D23D70A (0.04)
802FDCB8 = X-Air Maximum Speed, Default value = 0x41F80000 (31)
802FDCBC = X-Air Resistance, Default value = 0x00000000
802FDCC0 = Fall Speed Acceleration, Default Value = 0x4059999A (3.4)
802FDCC4 = Y-Maximum Falling Speed = 0x42800000 (64)
802FDCC8 = Maximum Fast Fall Speed, Default value = 0x42CC0000 (102)
802FDCCC = Number of Jumps
802FDCD0 = Weight, Default Value = 0x3F75C28F (0.96)

Every Character has the same structure so for example Walking Speed Multiplier is always
Starting address of Physics stats + 0x20
[/COLLAPSE]
Projectiles seem a lot easier than regular attacks because physical attacks have many multiple hitboxes. Later on, I can post some breakpoint addresses if you guys need them. What data do you guys plan on searching for?
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
I think I first need to read all the guides and try to understand them before finding real stuff and that might take a while.

By the way, do you think it is possible to apply the hitbox mode to the ROM somehow? I want to have it in mupen instead of pj.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I'm pretty sure there's a way, but you'll have to find the area in memory. I've been messing around with the gameshark codes. I managed to be able to load Mario's BtT stage, but I don't see Hitbox. Lol for some reason I can't even load the Mario BtT stage on pj 1.7. My best bet is to either keep messing with GS codes or do a data comparison using cheat engine between hitbox savestate and non hitbox savestate.

Lol for the sites I posted, you don't have to read everything. I just scimmed through it and focused on the important parts. What you need to do is understand the instruction sets and what they do, then understand how all the General Purpose CPU registers and COP1 registers work. As far as instruction sets, the trickiest part was learning all the logical instructions like bitshifting, AND, OR, then also the branching. The rest is just stepping through code and carefully analyze what is happening. When you set breakpoints and read what is going on, you really learn fast. I just wish I could copy and paste the the instructions instead of having to write it out when I'm taking notes on a certain section of the game. What part of the game would you like to understand first? So far, I got most of the jumping physics down (just not the Up B part), damage I somewhat understand, shield etc. One fun thing I like to do is make hacks for the lols. Idk why they made shield as a 4 byte value, so you can have giant shields lol. I also had fun messing with the physics of characters.

About patching... Some things will be really difficult to patch, like character physics, because they don't just load values from memory. It's either compressed or encrypted so you would have to put in a lot of work to patch certain things. Of course you could always freeze values with cheat engine, so you can still do a lot of things, it's just that when it comes to patching, some things are a lot more difficult than others.
 

Timotheus

Smash Journeyman
Joined
Aug 16, 2011
Messages
228
Location
Germany
Hope you guys could complete the hitbox data one day and share it in a user friendly way like Keshiki did. <3
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
The most limiting part for this is having hitbox mode applied to the ROM/ have it as a savestate in mupen. Then it's just long and tedious, but really easy. The most frustrating thing about that is ant-d managed to have it in mupen, but I never got the chance to ask him for the file.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I'm trying to figure out how to get the hitbox to show. I've came up with some interesting ideas though. I didn't know i could change over 1000 values at the same time. My guess is that the hitbox has an on and off value of 1 and 0 so i was trying to switch 1's and 0's. So far I've been able to turn player 1 invisible lol. Then I made the Hitbox character have a missing leg ._. I might be getting close to figuring out the trick via gameshark, since I'm able to load Mario's BtT stage. Is there any other threads that explain the gameshark thing? Messing with player 1, 2 and 3 wasn't enough for me to get it working.

What do you plan on doing if you are able to run the hitbox code on Mupen?

I'm almost out of ideas, so I think I'm going to explore moveset data and see if setting breakpoints can lead me to the hitbox code.


Lol just found the area in memory that determines your hurtbox. I was able to erase myhurtbox so not only was invisible, but invincible! Hopefully I can find the visual for it as well. All I did was 0 out random places in memory.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Why Mario BtT? I mean, it's the way we have hitbox mode, but that's the way it was discovered, not the way we'd want to have it. Or is it easier to find it again in Mario BtT?

In mupen, you can simply pause, go frame by frame and take screenshots. By combining hitbox mode and normal mode, you could make something like this. I don't think that'd be too complicated with some basic programming knowledge? I mean, I can't do it, but if I take all the screenshots and order them properly, I'm sure someone else will come up with a good software.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Oh lol, I thought loading BtT was part of the reason the hitbox code activated. If I'm able to at least get the code working for Nemu, I would more likely find a way to do the hitbox code in normal mode.

I'll keep trying for a while I guess, cuz I can't think of anything more important to find out right now lol.
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Hitbox mode is definitely the most important thing.

Is it normal the colors are all messed up in that emu? Can I use a video plugin from pj?

Haha I feel it's really worse than being in the middle of the ocean... How do you find addresses you want to breakpoint on? You said I couldn't find it using cheat engine, because it'd change right?
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Ya, you can use certain video plugins from Pj, but some don't work. I use the rice video plugin for nemu. It sucks how part of the menu is covered by the screen though. Only a minor inconvenience. What you trying to set a breakpoint for? I can write down a few examples if you want. Like I found the breakpoint that triggers anytime a projectile is used, so I was able to find the addresses for everyone's projectiles, unless I accidently missed 1 or 2 attacks. There's another breakpoint for physical attacks, I'll have to look that one up just to double check though.

Well with nemu, the addresses for cheat engine stay the same, so the table I uploaded will always be good. What changes is the addresses when you play a different stage. I saved the pointers so that's not a problem for anything in the table that I posted.
When you want to set a breakpoint, you type in the real n64 address in Nemu's memory editor. Converting the address from my cheat table to n64 is pretty easy. All you do is add 6FFE0000 to the address. So if you see the address in cheat engine is 10020000, it = 80000000 in N64 memory. Then after you have the address ready, you set a breakpoint. You can either set a reading breakpoint, write, or both. Basically reading is when the game reads/loads data from that address, and write is when it writes/updates the data on the address. You just check the boxes for which types of breakpoints you want to set. Then after the correct boxes are checked, you right click the data. I'm sorry if anything i say sounds confusing, I'm not so great when it comes to explaining things.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Anyone find anything interesting lately?

I decided to take a short break since I couldn't figure out the hitbox data yet. I'm going to explore moveset data some more though, primarily projectile data since that's the least known. Should I even bother collecting data about items & pokemon lol?

I've been learning more about cheat engine and found out you can trace things through cheat engine by itself but it's harder when to comes to tracing certain things. I wouldn't recommend tracing instructions and addresses through cheat engine, unless the emulator you are using doesn't have a built in debugger, or you know exactly what you are doing. Locating addresses with cheat engine can actually be useful sometimes for simple tasks. Like if I find the health / shield data for player 1, I can quickly get the shield / health addresses for player 2,3, & 4.

Also anyone try out my table yet?
 

Sangoku

Smash Master
Joined
Apr 25, 2010
Messages
3,931
Location
Geneva, Switzerland
Items and pokémons are definitely useless for us lol.

And I'm sorry, but being in holyday abroad, I don't have the time/motivation to go into this deeply... I'll try doing some work though, but it might not be in a too near future.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
No problem. I'm patient so I'll just slowly work on it, rather than try many hours at once. When ideas pop up in my head, I'll try them. In the meantime I'll just be having fun, or learning stuff. Just let me know when you have more time to work on this. I'll continue posting information if needed. This week I can gather more data on addresses and good breakpoints. My table has the addresses for damage & knockback for just about every regular projectile attack.
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
I started looking at moveset and hitbox data. Turns out shield damage = the damage you would have done on them. I haven't found clang yet.

I also found the hurtbox data for player 1, but I haven't managed to figure out how to display them yet. For now I'm just playing frame by frame on PJ64 and taking a look at the hitboxes using those savestates, while also using cheat engine to find addresses for the frame counters. So far I found the frame counter for jump delay and shield drain. Shield drains 1 point every once every 16 or 17 frames (I need to double check).
 

Karajan

Banned via Warnings
Joined
Feb 20, 2013
Messages
519
I started looking at moveset and hitbox data. Turns out shield damage = the damage you would have done on them. I haven't found clang yet.

I also found the hurtbox data for player 1, but I haven't managed to figure out how to display them yet. For now I'm just playing frame by frame on PJ64 and taking a look at the hitboxes using those savestates, while also using cheat engine to find addresses for the frame counters. So far I found the frame counter for jump delay and shield drain. Shield drains 1 point every once every 16 or 17 frames (I need to double check).
Post ram addresses as you find them, and what data type they are
 

Madao

Moderator
Moderator
Joined
Jun 27, 2013
Messages
873
Post ram addresses as you find them, and what data type they are
You mean the addresses for the frame counter or the moveset? It's kinda complicated, what method would you like me to use as far as posting addresses? I could post addresses for specific levels or post the pointers + offsets, but I know most people here don't know how to work with pointers. If you would like me to post addresses for a specific level and player, let me know. The frame counter for shield and jump delay are the same address, for some reason the shield is in integer format while jumping delay is in floating point. So I just switch between dec and hex on cheat engine, depending on what I'm looking at.

For Hurtbox data, I haven't fully documented the addresses but I know the general location and can easily write down the rest of them. Lol I just found them by spamming 0's in memory editor xD.

For moveset frame counter, i've only found an address that displays the attack duration of the last attack you did, but modifying the number won't change anything, unlike the address I found for shield drain count / jump delay. I still need to find the others as well. I'm confused why the attack duration shows 40 for Link's Aerial Back A, yet on the chart in this thread it says 38. I'll prolly double check to make sure it's not because of any modifications I did.
 
Top Bottom