-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(matchmake-extension): Add documentation for Super Smash Bros 4 #35
Conversation
Contains the structures and method requests and responses that I was able to locate inside the code by crossreferencing functions with the retail version of Minecraft, and with help of the type_info tables. Since the functions for extracting and adding signed or unsigned values are indistinguishable from each other, it has been assumed for every value to be unsigned. Keep in mind that this may not be the case, and further research is needed! There are various instances where it is unknown whether a List<u8> or a Buffer should be used. In those cases a List<u8> is assumed, but this may not be correct. The fields details are mostly unknown. Only some of them have been filled based on guesses from the method names. The PID is equivalent in code to a Uint32, so there may also be instances of unknown fields which are a Uint32 where a PID is used.
It might be worth adding a "thoughts/notes/whatever" column to the tables here so we can document some things as guesses. We can make some pretty good guesses, and they're probably true (or close enough), but we can't be 100% sure right now |
The notes column are guesses and may not be accurate.
I added a Notes column for all our guesses. I also couldn't resist and looked on the missing function from DataStore |
I wonder if it's worth looking into the Ranking protocol changes too? SMB4 has custom patches there as well https://nintendo-wiki.pretendo.network/docs/nex/protocols/ranking/super-smash-bros-4 |
I did check Ranking too, but I couldn't find any references in the code of the functions that would use those methods. Do we know if they are even used? |
@SuperMarioDaBom Have you seen the Ranking methods in any dumps? I know you've been looking at Smash lately |
I have not been looking for it in network dumps, so I'm not sure. I'll take a look the next time I can. My expectation would be that there's a bit of Ranking for things such as the GSP, World Report, and Conquests (although Conquests seem to heavily use BOSS so it might not have anything on the NEX side. Still heavy in the research phase, will update if I find anything new to share. |
Well this sucks, I actually can't find any dumps of Smash that captured GSP. I just poked around a bit in the Discord channel and found nothing for GSP definitely sounds like it uses Ranking, though. I can't believe we didn't get a single dump of that? I poked around some For Glory dumps people sent and didn't see any Ranking calls, though |
Actually, you know what, it could be DataStore. Every time the game disconnects from the server, it makes a request to SendPlayReport. World Play Report is also contained in there. Maybe they switched away from Ranking to that late in development? |
That could be the case. I know the Wii Sports Club leaderboard was stored in a DataStore |
If they're storing GSP in DataStore I'm killing somebody. According to https://www.ssbwiki.com/Global_Smash_Power GSP uses Elo rankings, which lines up with stuff like matchmaking levels. But this doesn't super line up with how DataStore is used Unless they went the Super Mario Maker route and create a "maker" ("smasher?" In this case? I guess?) "profile" object just to store stats on using object ratings In Super Mario Maker this makes a lot more sense imo since you have a ton of stats directly related to your user profile that need to be tracked, so creating a "profile" object and storing stats as ratings makes sense there. But for Smash...? I can see them doing it, but it would be cursed (not that that's stopped N before ig) |
I eat my words, I just checked a dump and one of the first things it does is call This sounds like GSP Thanks Nintendo |
That is indeed GSP. I can probably treat it like ranking in the game server, so nbd. |
Good enough for me then. Looks like this stuff is unused. If we decide to document it later, can be in a different PR |
Resolves #XXX
Changes:
Contains the structures and method requests and responses that I was able to locate inside the code by crossreferencing functions with the retail version of Minecraft, and with help of the type_info tables.
Important notes
Since the functions for extracting and adding signed or unsigned values are indistinguishable from each other, it has been assumed for every value to be unsigned. Keep in mind that this may not be the case, and further research is needed!
There are various instances where it is unknown whether a
List<u8>
or aBuffer
should be used. In those cases aList<u8>
is assumed, but this may not be correct.The fields details are mostly unknown. Only some of them have been filled based on guesses from the method names. The PID is equivalent in code to a Uint32, so there may also be instances of unknown fields which are a Uint32 where a PID is used.