RFID can now be inserted, proper XMLs are however required to load data on games.
This commit is contained in:
parent
7cd2bd245f
commit
cf94067d43
@ -25,6 +25,18 @@ static int ReturnTrue()
|
||||
return 1;
|
||||
}
|
||||
|
||||
static InitFunction initFunction_USF4([]()
|
||||
{
|
||||
init_FastIoEmu();
|
||||
init_RfidEmu();
|
||||
init_RegHooks();
|
||||
if (GameDetect::enableNesysEmu)
|
||||
init_NesysEmu();
|
||||
#if _M_IX86
|
||||
init_CryptoPipe(GameDetect::NesicaKey);
|
||||
#endif
|
||||
}, GameID::UltraStreetFighterIVDevExe);
|
||||
|
||||
static InitFunction initFunction_GC2([]()
|
||||
{
|
||||
uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0);
|
||||
|
@ -57,7 +57,7 @@ NesysEmu::NesysEmu()
|
||||
char server[];
|
||||
};
|
||||
|
||||
const char* wat = "card_id=42";
|
||||
const char* wat = "card_id=7020392010281502";
|
||||
|
||||
nesys_cert_init_response* response = (nesys_cert_init_response*)malloc(sizeof(nesys_cert_init_response) + strlen(wat));
|
||||
response->tenpo.tenpo_id = 1337;
|
||||
@ -105,6 +105,7 @@ NesysEmu::NesysEmu()
|
||||
// get card
|
||||
m_commandHandlers[LCOMMAND_CARD_SELECT_REQUEST] = [=](const uint8_t* dataa, size_t length)
|
||||
{
|
||||
OutputDebugStringA("Getting card data");
|
||||
struct __declspec(align(4)) _CARD_GETDATA
|
||||
{
|
||||
char cardId[16];
|
||||
@ -117,8 +118,9 @@ NesysEmu::NesysEmu()
|
||||
|
||||
FILE* f = fopen(va("card_%.16s_%d.bin", card->cardId, card->dataType), "rb");
|
||||
|
||||
size_t dataSize = 0;
|
||||
size_t dataSize = 16384;
|
||||
char data[16384];
|
||||
memset(data, 0x0, 0x4000);
|
||||
|
||||
if (f)
|
||||
{
|
||||
@ -141,8 +143,8 @@ NesysEmu::NesysEmu()
|
||||
|
||||
cardstatus* s = (cardstatus*)malloc(sizeof(cardstatus) + dataSize);
|
||||
s->status = 1;
|
||||
s->times = 0;
|
||||
s->days = 0;
|
||||
s->times = 100;
|
||||
s->days = 100;
|
||||
s->size = dataSize;
|
||||
memcpy(s->data, data, s->size);
|
||||
|
||||
@ -203,8 +205,8 @@ NesysEmu::NesysEmu()
|
||||
|
||||
cardstatus* s = (cardstatus*)malloc(sizeof(cardstatus) + card->dataSize);
|
||||
s->status = 1;
|
||||
s->times = 0;
|
||||
s->days = 0;
|
||||
s->times = 100;
|
||||
s->days = 100;
|
||||
s->size = card->dataSize;
|
||||
memcpy(s->data, card->data, s->size);
|
||||
|
||||
@ -239,7 +241,7 @@ NesysEmu::NesysEmu()
|
||||
SendResponse(SCOMMAND_INCOME_STATUS_REPLY, &r);
|
||||
};
|
||||
|
||||
m_commandHandlers[LCOMMAND_RANKING_DATA_REQUEST] = [=](const uint8_t* data, size_t length)
|
||||
m_commandHandlers[LCOMMAND_RANKING_DATA_REQUEST] = [=](const uint8_t* dataa, size_t length)
|
||||
{
|
||||
struct ranking
|
||||
{
|
||||
|
@ -242,7 +242,7 @@ int handleReadGeneralPurposeInput(jprot_encoder *r, DWORD arg1)
|
||||
for(DWORD i = 0; i < arg1; i++)
|
||||
{
|
||||
if (cardInserted)
|
||||
r->push(0x19);
|
||||
r->push(0x19); // This should be only injected with first package of the 3, but does not seem to care.
|
||||
else
|
||||
r->push(0);
|
||||
}
|
||||
@ -258,7 +258,7 @@ static char cardData[0x18] = { 0x04, 0xC2, 0x3D, 0xDA, 0x6F, 0x52, 0x80, 0x00, 0
|
||||
int handleReadGeneralPurposeOutput(jprot_encoder *r, DWORD arg1)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
OutputDebugStringA("Requested card data!");
|
||||
//OutputDebugStringA("Requested card data!");
|
||||
#endif
|
||||
r->report(JVS_REPORT_OK);
|
||||
if(cardInserted)
|
||||
@ -978,6 +978,28 @@ static HANDLE __stdcall FindFirstFileWWrap(
|
||||
return g_origFindFirstFileW(ParseFileNamesW(lpFileName), lpFindFileData);
|
||||
}
|
||||
|
||||
static DWORD WINAPI InsertCardThread(LPVOID)
|
||||
{
|
||||
static bool keyDown;
|
||||
while (true)
|
||||
{
|
||||
if (GetAsyncKeyState(VK_F4))
|
||||
{
|
||||
if (!keyDown)
|
||||
{
|
||||
cardInserted = !cardInserted;
|
||||
keyDown = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
keyDown = false;
|
||||
}
|
||||
Sleep(100);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void init_RfidEmu()
|
||||
{
|
||||
MH_Initialize();
|
||||
@ -1003,4 +1025,6 @@ void init_RfidEmu()
|
||||
MH_CreateHookApi(L"kernel32.dll", "SetCommTimeouts", SetCommTimeoutsWrap, (void**)&g_origSetCommTimeouts);
|
||||
MH_CreateHookApi(L"kernel32.dll", "GetCommTimeouts", GetCommTimeoutsWrap, (void**)&g_origGetCommTimeouts);
|
||||
MH_EnableHook(MH_ALL_HOOKS);
|
||||
|
||||
CreateThread(0, 0, InsertCardThread, 0, 0, 0);
|
||||
}
|
@ -26,11 +26,15 @@ void GameDetect::DetectCurrentGame()
|
||||
isNesica = true;
|
||||
break;
|
||||
case 0xcb4ab9d6:
|
||||
case 0x385ad385:
|
||||
currentGame = GameID::Nesica;
|
||||
NesicaKey = NesicaKey::USF4;
|
||||
isNesica = true;
|
||||
break;
|
||||
case 0x385ad385:
|
||||
currentGame = GameID::UltraStreetFighterIVDevExe;
|
||||
NesicaKey = NesicaKey::USF4;
|
||||
isNesica = true;
|
||||
break;
|
||||
case 0x1d396bf2:
|
||||
currentGame = GameID::MagicalBeat;
|
||||
NesicaKey = NesicaKey::MagicalBeat;
|
||||
|
@ -49,5 +49,7 @@ enum class GameID
|
||||
MB4,
|
||||
DariusBurst,
|
||||
GTIClub3,
|
||||
GRID
|
||||
GRID,
|
||||
UltraStreetFighterIV,
|
||||
UltraStreetFighterIVDevExe
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user