Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "spider.h"
- #include "fs.h"
- int uvl_entry()
- {
- FILE *fin = (void *)0x08F10000;
- unsigned int addr;
- int *buf = 0x18410000;
- int *read_len = 0x08F10020;
- int i;
- unsigned int EBUS;
- unsigned int constblock;
- unsigned int offset;
- int j;
- int ADJ;
- addr = 0x17900000; //Way lower than necessary, but we're going to hunt for the relative offsets of box data.
- EBUS = 0;
- constblock = 0;
- offset = 0;
- for (j = 0; j<0x10 && offset == 0; j++)
- {
- GSPGPU_FlushDataCache(addr, 0x10000);
- GX_SetTextureCopy(addr, buf, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(buf, 0x10000);
- svcSleepThread(0x400000LL);
- for (i = 0; i < 0x4000; i++)
- {
- if ((buf[i] == 0x53554245 && buf[i - 1] == 0 && buf[i - 2] == 0 && buf[i - 3] == 0) && EBUS == 0)
- {
- EBUS = addr + 4 * i;
- }
- if ((buf[i] == 0x53554245 && buf[i + 1] == 0 && buf[i + 2] == 0 && buf[i + 3] == 0) && EBUS == 0)
- {
- EBUS = addr + 4 * i;
- }
- if ((buf[i] == 0x00000126) && (buf[i + 1] == 0x00000000) && (buf[i + 2] == 0x22018230) && (buf[i + 3] == 0x09060D30)) //Static data in save files.
- {
- constblock = addr + 4 * i;
- }
- }
- if (constblock != 0 && EBUS != 0)
- {
- unsigned int diff = constblock - EBUS;
- if (diff == 0x38A0 || diff == 0x383C || diff == 0x3750 || diff == 0x3664 || diff == 0x3608) // ORAS
- {
- offset = constblock + 0xFFE8;
- ADJ = 1;
- }
- else if (diff == 0x37DC || diff == 0x3778 || diff == 0x368C || diff == 0x35A0) //XY
- {
- offset = constblock + 0x848;
- ADJ = 2;
- }
- else //wtf
- {
- offset = 0;
- }
- }
- addr += 0x10000;
- }
- if (offset != 0)
- {
- IFile_Open(fin, L"dmc:/pcdata.bin", FILE_R);
- fin->pos = 0x00;
- //first 0xFFFC / 0xFFF8 byte
- GSPGPU_FlushDataCache(offset, 0x10000);
- GX_SetTextureCopy(offset, buf, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(buf, 0x10000);
- svcSleepThread(0x400000LL);
- IFile_Read(fin, read_len, buf + ADJ, 0x10000 - (ADJ * 4));
- GSPGPU_FlushDataCache(buf, 0x10000);
- GX_SetTextureCopy(buf, offset, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(offset, 0x10000);
- svcSleepThread(0x400000LL);
- offset += 0x10000;
- //0x20000 Bytes
- for (i = 0; i < 2; i++)
- {
- IFile_Read(fin, read_len, buf, 0x10000);
- GSPGPU_FlushDataCache(buf, 0x10000);
- GX_SetTextureCopy(buf, offset, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(offset, 0x10000);
- svcSleepThread(0x400000LL);
- offset += 0x10000;
- }
- //last 0x4AD4 / 0x4AD8 Bytes
- GSPGPU_FlushDataCache(offset, 0x10000);
- GX_SetTextureCopy(offset, buf, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(buf, 0x10000);
- svcSleepThread(0x400000LL);
- IFile_Read(fin, read_len, buf, 0x4AD0 + (ADJ * 4));
- GSPGPU_FlushDataCache(buf, 0x10000);
- GX_SetTextureCopy(buf, offset, 0x10000, 0, 0, 0, 0, 8);
- GSPGPU_FlushDataCache(offset, 0x10000);
- svcSleepThread(0x400000LL);
- //Green - Success!
- for (i = 0; i < 0xE100; i += 3)
- {
- buf[i] = 0x0000FF00;
- buf[i + 1] = 0xFF0000FF;
- buf[i + 2] = 0x00FF0000;
- }
- }
- else
- {
- //Red - Failure!
- for (i = 0; i < 0xE100; i += 3)
- {
- buf[i] = 0x00FF0000;
- buf[i + 1] = 0x0000FF00;
- buf[i + 2] = 0xFF0000FF;
- }
- }
- GSPGPU_FlushDataCache(buf, 0x00038400);
- GX_SetTextureCopy(buf, 0x1F48F000, 0x00038400, 0, 0, 0, 0, 8);
- svcSleepThread(0x400000LL);
- GSPGPU_FlushDataCache(buf, 0x00038400);
- GX_SetTextureCopy(buf, 0x1F4C7800, 0x00038400, 0, 0, 0, 0, 8);
- svcSleepThread(0x400000LL);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement