/* Copyright 2022 Pretendo Network contributors Copyright 2022 Ash Logan Copyright 2019 Maschell This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include "config.h" #include #include #include #include "module.h" #define INKAY_VERSION "v3.0.0" /** Mandatory plugin information. If not set correctly, the loader will refuse to use the plugin. **/ WUPS_PLUGIN_NAME("Inkay(SPFN)"); WUPS_PLUGIN_DESCRIPTION("SPFN Network Patcher"); WUPS_PLUGIN_VERSION(INKAY_VERSION); WUPS_PLUGIN_AUTHOR("Pretendo contributors and RusticMaple"); WUPS_PLUGIN_LICENSE("GPLv3"); WUPS_USE_STORAGE("inkay"); WUPS_USE_WUT_DEVOPTAB(); bool is_current_game_splatoon(){ auto current_game = OSGetTitleID(); if( current_game == 0x0005000010162B00 || current_game == 0x0005000010176900 || current_game == 0x0005000010176A00 ){ return true; } return false; } void splatoon_patcher(){ if (!Config::connect_to_network) { DEBUG_FUNCTION_LINE_VERBOSE("Inkay: Splatoon patches skipped"); return; } if(is_current_game_splatoon()){ NotificationModule_AddInfoNotification("Splatoon Detected, applying patch"); auto rpl_count = OSDynLoad_GetNumberOfRPLs(); std::vector rpls(rpl_count); if(!OSDynLoad_GetRPLInfo(0, rpl_count, rpls.data())){ NotificationModule_AddInfoNotification("failed to get rpls"); } for(auto rpl: rpls){ if(rpl.name != 0){ if(strstr(rpl.name, "Gambit") != NULL){ NotificationModule_AddInfoNotification(rpl.name); auto text_color = NMColor(); text_color.r = 255; text_color.g = 255; text_color.b = 255; text_color.a = 255; auto bg_color = NMColor(); bg_color.r = 0; bg_color.g = 0; bg_color.b = 0; bg_color.a = 0; NotificationModule_AddInfoNotificationEx(rpl.name, 30.0f, text_color, bg_color, nullptr, nullptr, true); NotificationModule_AddInfoNotification("applying patches!!!!"); void* game_data_region = (void*)rpl.dataAddr; auto str_loc = (char*)(0x000009ac + (uint32_t)game_data_region); strcpy(str_loc, "https://splatpost.spbr.net/post"); } } } } } INITIALIZE_PLUGIN() { WHBLogCafeInit(); WHBLogUdpInit(); Config::Init(); if (NotificationModule_InitLibrary() != NOTIFICATION_MODULE_RESULT_SUCCESS) { DEBUG_FUNCTION_LINE("NotificationModule_InitLibrary failed"); } // if using pretendo then (try to) apply the ssl patches Inkay_Initialize(Config::connect_to_network); } DEINITIALIZE_PLUGIN() { Inkay_Finalize(); NotificationModule_DeInitLibrary(); WHBLogCafeDeinit(); WHBLogUdpDeinit(); } ON_APPLICATION_START() { // Tell the module the plugin is running! splatoon_patcher(); Inkay_SetPluginRunning(); } ON_APPLICATION_ENDS() { }