dragonbane

Neogamma Stuff

Apr 22nd, 2015 (edited)
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.12 KB | None | 0 0
  1. #include <gccore.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <malloc.h>
  5. #include <sys/unistd.h>
  6.  
  7.  
  8.  
  9. #include "codehandler_bin.h"
  10. //#include "codehandlerslota_bin.h"
  11. #include "codehandleronly_bin.h"
  12. #include "multidol.h"
  13. #include "patchcode.h"
  14.  
  15. #include "tools.h"
  16. #include "config.h"
  17. #include "codes.h"
  18. #include "font.h"
  19. #include "easywbfs.h"
  20. #include "storage.h"
  21.  
  22. static u8 *codelistend;
  23. void *codelist;
  24.  
  25. u32 gameconfsize = 0;
  26. u32 *gameconf = NULL;
  27.  
  28. void wait(u32 s);
  29. void print_status(const char *Format, ...);
  30.  
  31. u32 write_file_to_buffer(char *gameID, int codeNum, u32 entry, u8 *buffer)
  32. {
  33.     u32 filesize;
  34.     u32 ret;
  35.     FILE *fp;
  36.     char buf[128];
  37.    
  38.    
  39.     sprintf(buf, "fat:/NeoGamma/codes/%s/Code%i.gct", gameID, codeNum);
  40.     fp = fopen(buf, "rb");
  41.                
  42.     if (!fp)
  43.     {
  44.         sprintf(buf, "fat:/codes/%s/Code%i.gct", gameID, codeNum);
  45.         fp = fopen(buf, "rb");
  46.     }
  47.            
  48.     if (!fp)
  49.         return 0;
  50.        
  51.    
  52.     fseek(fp, 0, SEEK_END);
  53.     filesize = ftell(fp);
  54.     fseek(fp, 0, SEEK_SET);
  55.        
  56.     ret = fread(buffer+entry, 1, filesize, fp);
  57.    
  58.     if(ret != filesize)
  59.     {  
  60.         fclose(fp);
  61.        
  62.         return 0;
  63.     }
  64.  
  65.     fclose(fp);
  66.    
  67.     return ret;
  68. }
  69.  
  70. s32 load_codes(char *disc_id, u32 maxsize, u8 *buffer)
  71. {
  72.     u32 filesize;
  73.     u32 ret;
  74.     char buf[128];
  75.    
  76.     char discid4[5];
  77.     char discid6[7];
  78.     char discid7[8];
  79.  
  80.     memset(discid4, 0, 5);
  81.     memset(discid6, 0, 7);
  82.     memset(discid7, 0, 8);
  83.    
  84.     memcpy(discid4, disc_id, 4);
  85.     memcpy(discid6, disc_id, 6);
  86.     memcpy(discid7, disc_id, 6);
  87.    
  88.     discid7[6] = '1' + disc_id[6];
  89.    
  90.     fflush(stdout);
  91.    
  92.     //Dragonbane: discid6 is correct for TP
  93.  
  94.     if (Sneek_Mode == false)
  95.     {
  96.         FILE *fp;
  97.        
  98.         if ((useCheats == 1 && !strcmp(discid6, "GZ2P01")) || (useCheats == 1 && !strcmp(discid6, "GZ2E01")))
  99.         {
  100.             if (cheat1 == 0 && cheat2 == 0 && cheat3 == 0 && cheat4 == 0 && cheat5 == 0 && cheat6 == 0 &&
  101.                 cheat7 == 0 && cheat8 == 0 && cheat9 == 0 && cheat10 == 0 && cheat11 == 0 && cheat12 == 0 && cheat13 == 0)
  102.             {
  103.                 print_status("No custom cheats activated");
  104.                 return -1;
  105.             }
  106.            
  107.             print_status("Prepare soul sucking...");
  108.             wait(1);
  109.  
  110.             u32 currEntry = 0;
  111.             int err = 0;
  112.             int numCode = 0;
  113.            
  114.             //Write Header
  115.             buffer[currEntry] = 0x0;
  116.             buffer[currEntry+1] = 0xd0;
  117.             buffer[currEntry+2] = 0xc0;
  118.             buffer[currEntry+3] = 0xde;
  119.             buffer[currEntry+4] = 0x0;
  120.             buffer[currEntry+5] = 0xd0;
  121.             buffer[currEntry+6] = 0xc0;
  122.             buffer[currEntry+7] = 0xde;
  123.            
  124.             currEntry = 8;
  125.            
  126.            
  127.             //Write Codes
  128.             for (numCode = 1; numCode < 14; numCode++)
  129.             {
  130.                 u32 bytesWritten = 1;
  131.                
  132.                 if (numCode == 1 && cheat1 == 1)
  133.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  134.                    
  135.                 if (numCode == 2 && cheat2 == 1)
  136.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  137.                    
  138.                 if (numCode == 3 && cheat3 == 1)
  139.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  140.                    
  141.                 if (numCode == 4 && cheat4 == 1)
  142.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  143.                    
  144.                 if (numCode == 5 && cheat5 == 1)
  145.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  146.                    
  147.                 if (numCode == 6 && cheat6 == 1)
  148.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  149.                    
  150.                 if (numCode == 7 && cheat7 == 1)
  151.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  152.                    
  153.                 if (numCode == 8 && cheat8 == 1)
  154.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  155.                    
  156.                 if (numCode == 9 && cheat9 == 1)
  157.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  158.                    
  159.                 if (numCode == 10 && cheat10 == 1)
  160.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  161.                    
  162.                 if (numCode == 11 && cheat11 == 1)
  163.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  164.                    
  165.                 if (numCode == 12 && cheat12 == 1)
  166.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  167.                    
  168.                 if (numCode == 13 && cheat13 == 1)
  169.                     bytesWritten = write_file_to_buffer(discid6, numCode, currEntry, buffer);
  170.                        
  171.                    
  172.                 if (bytesWritten == 0)
  173.                 {
  174.                     err = 1;
  175.                     break;
  176.                 }
  177.                
  178.                 if (bytesWritten > 1)
  179.                     currEntry = currEntry + bytesWritten;
  180.                
  181.             }
  182.            
  183.             if (err == 1)
  184.             {
  185.                 print_status("Error. Please verify install");
  186.                 wait (1);
  187.                 return -1;
  188.             }
  189.            
  190.             //Write Footer
  191.             buffer[currEntry] = 0xf0;
  192.             buffer[currEntry+1] = 0x0;
  193.             buffer[currEntry+2] = 0x0;
  194.             buffer[currEntry+3] = 0x0;
  195.             buffer[currEntry+4] = 0x0;
  196.             buffer[currEntry+5] = 0x0;
  197.             buffer[currEntry+6] = 0x0;
  198.             buffer[currEntry+7] = 0x0;
  199.            
  200.             currEntry = currEntry + 7;
  201.            
  202.             //print_status("Bytes: %d ; Allowed: %d", currEntry, maxsize);
  203.             //wait (5);
  204.            
  205.             return 1;
  206.         }
  207.         else //Old Code
  208.         {
  209.             sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid7);
  210.             fp = fopen(buf, "rb");
  211.  
  212.             if (!fp)
  213.             {
  214.                 sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid6);
  215.                 fp = fopen(buf, "rb");
  216.             }
  217.  
  218.             if (!fp)
  219.             {
  220.                 sprintf(buf, "fat:/NeoGamma/codes/%s.gct", discid4);
  221.                 fp = fopen(buf, "rb");
  222.             }
  223.  
  224.             if (!fp)
  225.             {
  226.                 sprintf(buf, "fat:/codes/%s.gct", discid7);
  227.                 fp = fopen(buf, "rb");
  228.             }
  229.  
  230.             if (!fp)
  231.             {
  232.                 sprintf(buf, "fat:/codes/%s.gct", discid6);
  233.                 fp = fopen(buf, "rb");
  234.             }
  235.  
  236.             if (!fp)
  237.             {
  238.                 sprintf(buf, "fat:/codes/%s.gct", discid4);
  239.                 fp = fopen(buf, "rb");
  240.             }
  241.  
  242.             if (!fp)
  243.             {
  244.                 //printf("Failed to open %s\n", buf);
  245.                 //printf("No %s codes found\n", storagename);
  246.                 //sleep(3);
  247.                 print_status("No %s codes found", storagename);
  248.                 return -1;
  249.             }
  250.            
  251.             fseek(fp, 0, SEEK_END);
  252.             filesize = ftell(fp);
  253.             fseek(fp, 0, SEEK_SET);
  254.        
  255.             if (filesize > maxsize)
  256.             {
  257.                 //printf("Too many codes\n");
  258.                 print_status("Too many codes");
  259.                 return -1;
  260.             }  
  261.        
  262.             ret = fread(buffer, 1, filesize, fp);
  263.             if(ret != filesize)
  264.             {  
  265.                 fclose(fp);
  266.                 //printf("%s Code Error\n", storagename);
  267.                 print_status("%s Code Error", storagename);
  268.                 return -1;
  269.             }
  270.  
  271.             fclose(fp);
  272.         }
  273.     }
  274.     return 0;
  275. }
Add Comment
Please, Sign In to add comment