Reisyukaku

[U/SM] ALYT Tool

Jan 10th, 2017
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.43 KB | None | 0 0
  1. /*
  2. *   alytDumper.c
  3. *       by Reisyukaku
  4. *
  5. *   Dumps media from GameFreak's ALYT format.
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdint.h>
  10. #include <malloc.h>
  11. #include <string.h>
  12.  
  13. typedef uint8_t u8;
  14. typedef uint16_t u16;
  15. typedef uint32_t u32;
  16.  
  17. typedef struct{
  18.     u32 magic;
  19.     u32 unk;
  20.     u32 *entries;
  21. } Lyt;
  22.  
  23. typedef struct{
  24.     u32 magic;
  25.     u16 majorVer;
  26.     u16 minorVer;
  27.     u32 ltblOff;
  28.     u32 ltblSize;
  29.     u32 lmtlOff;
  30.     u32 lmtlSize;
  31.     u32 lfntOff;
  32.     u32 lfntSize;
  33.     u32 contOff;
  34.     u32 contSize;
  35.     Lyt *ltbl;
  36.     Lyt *lmtl;
  37.     Lyt *lfnt;
  38. } AlytHeader;
  39.  
  40.  
  41. int main(int argc, char **argv){
  42.     if(argc != 2){
  43.         printf("Usage: %s <alyt file>\n", argv[0]);
  44.         return -1;
  45.     }
  46.    
  47.     //Open file
  48.     FILE *fp;
  49.     size_t fileSize;
  50.     fp = fopen(argv[1], "rb");
  51.     if(!fp) {printf("File not found!\n"); return -1;}
  52.    
  53.     //Parse header
  54.     AlytHeader alyt;
  55.     fread(&alyt, 0x28, 1, fp);
  56.     if(alyt.magic != 0x54594C41) {printf("Not a ALYT file!\n"); return -1;} //Magic ALYT
  57.     alyt.ltbl = malloc(alyt.ltblSize);
  58.     alyt.lmtl = malloc(alyt.lmtlSize);
  59.     alyt.lfnt = malloc(alyt.lfntSize);
  60.    
  61.     //Parse tables
  62.     fseek(fp, alyt.ltblOff, SEEK_SET);
  63.     fread(alyt.ltbl, alyt.ltblSize, 1, fp);
  64.     fseek(fp, alyt.lmtlOff, SEEK_SET);
  65.     fread(alyt.lmtl, alyt.lmtlSize, 1, fp);
  66.     fseek(fp, alyt.lfntOff, SEEK_SET);
  67.     fread(alyt.lfnt, alyt.lfntSize, 1, fp);
  68.    
  69.     fseek(fp, alyt.contOff, SEEK_SET);
  70.    
  71.     //Read symbols table
  72.     char string[0x40];
  73.     u32 numOfEntries = 0, i;
  74.     printf("ALYT Tool\n-----------\n");
  75.    
  76.     fread(&numOfEntries, sizeof(u32), 1, fp);
  77.     printf("Symbol entries: %d [%08X]\n\n", numOfEntries, alyt.contOff);
  78.     for(i = 0; i < numOfEntries; i++){
  79.         fseek(fp, (alyt.contOff + 4) + (i*0x40), SEEK_SET);
  80.         fread(string, sizeof(char), 0x40, fp);
  81.         printf("%s\n", string);
  82.     }
  83.    
  84.     u32 currPos = alyt.contOff + ((numOfEntries * 0x40)+4);
  85.     fseek(fp, currPos, SEEK_SET);
  86.     fread(&numOfEntries, sizeof(u32), 1, fp);
  87.     printf("\nSymbol entries: %d [%08X]\n\n", numOfEntries, currPos);
  88.     for(i = 0; i < numOfEntries; i++){
  89.         fseek(fp, (currPos + 4) + (i*0x20), SEEK_SET);
  90.         fread(string, sizeof(char), 0x20, fp);
  91.         printf("%s\n", string);
  92.     }
  93.    
  94.     //TODO
  95.    
  96.     //Free!
  97.     free(alyt.ltbl);
  98.     free(alyt.lmtl);
  99.     free(alyt.lfnt);
  100.    
  101.     return 0;
  102. }
Add Comment
Please, Sign In to add comment