Hey! This isn't exactly an issue with Super Mario Bros. 35
I was trying to adapt this custom server to the Splatoon 2 Global Testfire, and I managed to get the console to connect to my PC which is hosting the server, but then I realized that it was just giving me error 2306-0102
, (only when I had the server up of course). And yes, I have indeed changed the access key to match that of the testfire. Also, I've placed an image of the error screen at the bottom of this post.
From what I can tell, there are a few needed funcs that aren't yet implemented... Is there any chance you could perhaps implement a few of them? I tried making some adjustments but I had no luck. I'm thinking its just a few authentication funcs. Maybe matchmaking eventually, but I'm not worried about that yet haha.
I'm assuming that I should probably also mention that handle_validate_and_request_ticket_with_custom_data
is where it's failing.
If you need more info, lemme know!
Global Testfire Patches
Here are the patches that I've made ~~ Feel free to test them if you'd like.
@nsobid-0F129135D8A7621C9E4940B0C3808BF0
@flag offset_shift 0x0
#Splatoon 2 Global Testfire
//Set Custom Server URL
@enabled
024FC706 "192.168.4.156:20000"
//nn::nex::JobAcquireNsaIdToken::StepWaitingForGetGameAuthentication(void)+9C -> Replace GetResult call with MOV X0, XZR
@enabled
01132844 E0031FAA
//force branch at "CBZ W8, loc_7101132844"
@enabled
01132924 08000014
- Skyline hook to disable SSL & log calls to QLOG (I now realize that there is a thing you can use to disable it system-wide, but I'm sharing this anyways)
typedef u32 CURLcode;
typedef void CURL;
enum CURLoption { };
CURLcode (*original_curl_easy_perform)(CURL *curl);
CURLcode curl_easy_perform_hook(CURL *curl)
{
u64 curl_easy_setopt_addr;
nn::ro::LookupSymbol(&curl_easy_setopt_addr, "curl_easy_setopt");
skyline::TcpLogger::SendRaw("curl_easy_perform() was called!\n");
// yes I'm aware this is disgusting.
((CURLcode (*)(CURL *curl, CURLoption curlopt, long val))curl_easy_setopt_addr)(curl, (CURLoption)64, 0L);
return original_curl_easy_perform(curl);
}
Result (*original_nnNexQLOG_func)(int logLevel, const char* message, ...);
Result nnNexQLOG_hook(int logLevel, const char* message, ...)
{
va_list argptr;
va_start(argptr, message);
char s[0x100];
int maxlen = 255;
Result result = vsnprintf(s, maxlen, message, argptr);
va_end(argptr);
skyline::TcpLogger::SendRawFormat("[Log Level %d]: %s\n", logLevel, s);
return original_nnNexQLOG_func(logLevel, s);
}
int main() {
u64 curl_easy_perform_addr;
nn::ro::LookupSymbol(&curl_easy_perform_addr, "curl_easy_perform");
A64HookFunction(
reinterpret_cast<void*>(curl_easy_perform_addr),
reinterpret_cast<void*>(curl_easy_perform_hook),
(void**) &original_curl_easy_perform
);
u64 nnNexQLOG_addr;
nn::ro::LookupSymbol(&nnNexQLOG_addr, "_ZN2nn3nex5_QLOGENS0_8EventLog8LogLevelEPKcz");
A64HookFunction(
reinterpret_cast<void*>(nnNexQLOG_addr),
reinterpret_cast<void*>(nnNexQLOG_hook),
(void**) &original_nnNexQLOG_func
);
}
Error Screen