Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gccore.h>
- #include <string.h>
- #include <stdio.h>
- #include <malloc.h>
- #include <sys/unistd.h>
- #include "codehandler_bin.h"
- //#include "codehandlerslota_bin.h"
- #include "codehandleronly_bin.h"
- #include "multidol.h"
- #include "patchcode.h"
- #include "tools.h"
- #include "config.h"
- #include "codes.h"
- #include "font.h"
- #include "easywbfs.h"
- #include "storage.h"
- static u8 *codelistend;
- void *codelist;
- u32 gameconfsize = 0;
- u32 *gameconf = NULL;
- void wait(u32 s);
- void print_status(const char *Format, ...);
- u32 write_file_to_buffer(char *gameID, int codeNum, u32 entry, u8 *buffer)
- {
- u32 filesize;
- u32 ret;
- FILE *fp;
- char buf[128];
- sprintf(buf, "fat:/NeoGamma/codes/%s/Code%i.gct", gameID, codeNum);
- fp = fopen(buf, "rb");
- if (!fp)
- {
- sprintf(buf, "fat:/codes/%s/Code%i.gct", gameID, codeNum);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- return 0;
- fseek(fp, 0, SEEK_END);
- filesize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
- ret = fread(buffer+entry, 1, filesize, fp);
- if(ret != filesize)
- {
- fclose(fp);
- return 0;
- }
- fclose(fp);
- return ret;
- }
- s32 load_codes(char *disc_id, u32 maxsize, u8 *buffer)
- {
- u32 filesize;
- u32 ret;
- char buf[128];
- char discid4[5];
- char discid6[7];
- char discid7[8];
- memset(discid4, 0, 5);
- memset(discid6, 0, 7);
- memset(discid7, 0, 8);
- memcpy(discid4, disc_id, 4);
- memcpy(discid6, disc_id, 6);
- memcpy(discid7, disc_id, 6);
- discid7[6] = '1' + disc_id[6];
- fflush(stdout);
- //Dragonbane: discid6 is correct for TP
- if (Sneek_Mode == false)
- {
- FILE *fp;
- if ((useCheats == 1 && !strcmp(discid6, "GZ2P01")) || (useCheats == 1 && !strcmp(discid6, "GZ2E01")))
- {
- if (cheat1 == 0 && cheat2 == 0 && cheat3 == 0 && cheat4 == 0 && cheat5 == 0 && cheat6 == 0 &&
- cheat7 == 0 && cheat8 == 0 && cheat9 == 0 && cheat10 == 0 && cheat11 == 0 && cheat12 == 0 && cheat13 == 0)
- {
- print_status("No custom cheats activated");
- return -1;
- }
- print_status("Prepare soul sucking...");
- wait(1);
- u32 currEntry = 0;
- int err = 0;
- int numCode = 0;
- //Write Header
- buffer[currEntry] = 0x0;
- buffer[currEntry+1] = 0xd0;
- buffer[currEntry+2] = 0xc0;
- buffer[currEntry+3] = 0xde;
- buffer[currEntry+4] = 0x0;
- buffer[currEntry+5] = 0xd0;
- buffer[currEntry+6] = 0xc0;
- buffer[currEntry+7] = 0xde;
- currEntry = 8;
- //Write Codes
- for (numCode = 1; numCode < 14; numCode++)
- {
- u32 bytesWritten = 1;
- if (numCode == 1 && cheat1 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 2 && cheat2 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 3 && cheat3 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 4 && cheat4 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 5 && cheat5 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 6 && cheat6 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 7 && cheat7 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 8 && cheat8 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 9 && cheat9 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 10 && cheat10 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 11 && cheat11 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 12 && cheat12 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (numCode == 13 && cheat13 == 1)
- bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
- if (bytesWritten == 0)
- {
- err = 1;
- break;
- }
- if (bytesWritten > 1)
- currEntry = currEntry + bytesWritten;
- }
- if (err == 1)
- {
- print_status("Error. Please verify install");
- wait (1);
- return -1;
- }
- //Write Footer
- buffer[currEntry] = 0xf0;
- buffer[currEntry+1] = 0x0;
- buffer[currEntry+2] = 0x0;
- buffer[currEntry+3] = 0x0;
- buffer[currEntry+4] = 0x0;
- buffer[currEntry+5] = 0x0;
- buffer[currEntry+6] = 0x0;
- buffer[currEntry+7] = 0x0;
- currEntry = currEntry + 7;
- //print_status("Bytes: %d ; Allowed: %d", currEntry, maxsize);
- //wait (5);
- return 1;
- }
- else //Old Code
- {
- sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid7);
- fp = fopen(buf, "rb");
- if (!fp)
- {
- sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid6);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- {
- sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid4);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- {
- sprintf(buf, "fat:/codes/%s.gct", discid7);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- {
- sprintf(buf, "fat:/codes/%s.gct", discid6);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- {
- sprintf(buf, "fat:/codes/%s.gct", discid4);
- fp = fopen(buf, "rb");
- }
- if (!fp)
- {
- //printf("Failed to open %s\n", buf);
- //printf("No %s codes found\n", storagename);
- //sleep(3);
- print_status("No %s codes found", storagename);
- return -1;
- }
- fseek(fp, 0, SEEK_END);
- filesize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
- if (filesize > maxsize)
- {
- //printf("Too many codes\n");
- print_status("Too many codes");
- return -1;
- }
- ret = fread(buffer, 1, filesize, fp);
- if(ret != filesize)
- {
- fclose(fp);
- //printf("%s Code Error\n", storagename);
- print_status("%s Code Error", storagename);
- return -1;
- }
- fclose(fp);
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment