SHARE
TWEET

Code

a guest Aug 12th, 2017 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Copyright: DaoSoul
  2. //Parts of this software were inspired by software from suloku
  3. //This file is under the CC by-nc-sa license
  4.  
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11.  
  12. namespace ConsoleApplication1 {
  13.  
  14.     struct Pokemon {
  15.         //public char[] pokemon;
  16.         public byte[] pokemon;
  17.         public int pokecount;
  18.         public int pokecount_hayley;
  19.         public string pkmname;
  20.         public byte poke_type;// 01 trainer, 04 hayley, 05 traded
  21.         public byte tradeable;// 02 is tradeable, normal 00
  22.         public UInt16 tid;
  23.         public UInt16 sid;
  24.         public UInt32 name1;
  25.         public UInt32 name2;
  26.         public UInt32 name3;
  27.         public UInt32 name4;
  28.  
  29.         public long DATAPOSITION;
  30.     }
  31.  
  32.     class Program {
  33.         static void Main(string[] args) {
  34.             Console.WriteLine("Starting...");
  35.  
  36.             string file = "savedata.bin";
  37.  
  38.             Console.WriteLine("Reading File: savedata.bin in App-Path...");
  39.  
  40.             //byte[] test = new byte[136];
  41.             //using (BinaryReader reader = new BinaryReader(new FileStream(file, FileMode.Open))) {
  42.             //    reader.BaseStream.Seek(0x4fb8, SeekOrigin.Begin);
  43.             //    reader.Read(test, 0, 136);
  44.             //}
  45.  
  46.             FileStream fs = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);
  47.  
  48.  
  49.             fs.Seek(0x22AC, SeekOrigin.Begin);
  50.             UInt32 mii = BitConverter.ToUInt32(read(4,fs), 0);
  51.  
  52.             fs.Seek(0x22AC + (40 * be32(mii)) + 4 + 4, SeekOrigin.Begin);            
  53.             UInt32 miilinks = BitConverter.ToUInt32(read(4, fs), 0);
  54.  
  55.             fs.Seek(0x22AC + (40 * be32(mii)) + 4 + 4 + (44 * be32(miilinks)) + 4 + 4, SeekOrigin.Begin);
  56.             UInt32 pokemone = BitConverter.ToUInt32(read(4, fs), 0);
  57.  
  58.  
  59.             Console.WriteLine(mii);
  60.             Console.WriteLine(miilinks);
  61.             Console.WriteLine(pokemone);
  62.  
  63.  
  64.             int i;
  65.  
  66.             for (i = 0; i < be32(pokemone); i++) {
  67.                 Pokemon p = readPokemon(fs, i);
  68.             }
  69.  
  70.             Console.WriteLine("Injecting Inject.pkm into game: VĂ–LKISCH replacement Mode!");
  71.  
  72.  
  73.             fs.Seek(0x22AC + (40 * be32(mii)) + 4 + 4 + (44 * be32(miilinks)) + 4 + 4, SeekOrigin.Begin);
  74.             BitConverter.ToUInt32(read(4, fs), 0);
  75.  
  76.             for (i = 0; i < be32(pokemone); i++) {
  77.                 injectPokemon(fs, 0, File.ReadAllBytes("Inject.pkm"));
  78.             }
  79.  
  80.             Console.ReadLine();
  81.         }
  82.  
  83.         public static Pokemon readPokemon(FileStream fs, int c) {
  84.  
  85.             Pokemon p = new Pokemon();
  86.  
  87.             p.pokecount = 1;
  88.             p.pokecount_hayley = 1;         //importante but not usede
  89.  
  90.             p.DATAPOSITION = fs.Position;
  91.  
  92.             p.pokemon = read(136, fs);
  93.             p.poke_type = read(1, fs)[0];
  94.             fs.Seek(2, SeekOrigin.Current);
  95.             p.tradeable = read(1, fs)[0];
  96.             p.tid = BitConverter.ToUInt16(read(2, fs), 0);
  97.             p.sid = BitConverter.ToUInt16(read(2, fs), 0);
  98.             p.name1 = BitConverter.ToUInt32(read(4, fs), 0);
  99.             p.name2 = BitConverter.ToUInt32(read(4, fs), 0);
  100.             p.name3 = BitConverter.ToUInt32(read(4, fs), 0);
  101.             p.name4 = BitConverter.ToUInt32(read(4, fs), 0);
  102.             fs.Seek(4, SeekOrigin.Current);
  103.  
  104.             if (p.poke_type == 0x04) {
  105.                 if (p.tradeable == 0x02) {
  106.                     Console.WriteLine("Omitting a Tradable Pokemon from Haley...");
  107.                 }
  108.                 else {
  109.                     Console.WriteLine("Omitting a Nontradable Pokemon from Haley...");
  110.                 }
  111.             }
  112.             else if (p.poke_type == 0x05) {
  113.                 Console.WriteLine("Omitting a Traded Pokemon from Haley...");
  114.             }
  115.             else {
  116.                 Console.WriteLine("A Pokemon!");
  117.  
  118.                 Console.WriteLine("Writing Pokemon to new File");
  119.  
  120.                 FileStream fs2 = File.Create(c + "Pokemon.tnr");
  121.  
  122.                 fs2.Write(BitConverter.GetBytes(p.tid), 0, BitConverter.GetBytes(p.tid).Length);
  123.                 fs2.Write(BitConverter.GetBytes(p.sid), 0, BitConverter.GetBytes(p.sid).Length);
  124.                 fs2.Write(BitConverter.GetBytes(p.name1), 0, BitConverter.GetBytes(p.name1).Length);
  125.                 fs2.Write(BitConverter.GetBytes(p.name2), 0, BitConverter.GetBytes(p.name2).Length);
  126.                 fs2.Write(BitConverter.GetBytes(p.name3), 0, BitConverter.GetBytes(p.name3).Length);
  127.                 fs2.Write(BitConverter.GetBytes(p.name4), 0, BitConverter.GetBytes(p.name4).Length);
  128.  
  129.                 fs2.Close();
  130.  
  131.                 FileStream fs3 = File.Create(c + "Pokemon.pkm");
  132.  
  133.                 Array.Reverse(p.pokemon);
  134.  
  135.                 fs3.Write(p.pokemon, 0, p.pokemon.Length);
  136.  
  137.                 fs3.Close();
  138.  
  139.                 return p;
  140.             }
  141.  
  142.             return new Pokemon();
  143.  
  144.         }
  145.  
  146.         public static Pokemon injectPokemon(FileStream fs, int c, byte[] pok) {
  147.  
  148.             Pokemon p = new Pokemon();
  149.  
  150.             p.pokecount = 1;
  151.             p.pokecount_hayley = 1;         //importante but not usede
  152.  
  153.             p.DATAPOSITION = fs.Position;
  154.  
  155.             fs.Write(pok, 0, pok.Length);
  156.             p.poke_type = read(1, fs)[0];
  157.             fs.Seek(2, SeekOrigin.Current);
  158.             p.tradeable = read(1, fs)[0];
  159.             p.tid = BitConverter.ToUInt16(read(2, fs), 0);
  160.             p.sid = BitConverter.ToUInt16(read(2, fs), 0);
  161.             p.name1 = BitConverter.ToUInt32(read(4, fs), 0);
  162.             p.name2 = BitConverter.ToUInt32(read(4, fs), 0);
  163.             p.name3 = BitConverter.ToUInt32(read(4, fs), 0);
  164.             p.name4 = BitConverter.ToUInt32(read(4, fs), 0);
  165.             fs.Seek(4, SeekOrigin.Current);
  166.  
  167.             return new Pokemon();
  168.  
  169.         }
  170.  
  171.         public static byte[] read(int x, FileStream fs) {
  172.             byte[] temp = new byte[x];
  173.             fs.Read(temp, 0, x);
  174.  
  175.             if (BitConverter.IsLittleEndian)
  176.                 Array.Reverse(temp);
  177.  
  178.             return temp;
  179.         }
  180.  
  181.         public static UInt32 ReverseBytes(UInt32 value) {
  182.             return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 |
  183.                 (value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24;
  184.         }
  185.    
  186.         public static UInt32 be16(UInt32 x) {
  187.             x = ReverseBytes(x);
  188.             return ((((x) >> 8) & 0xFF) | ((((x) << 8)) & 0xFF00));
  189.         }
  190.  
  191.         public static UInt32 be32(UInt32 x) {
  192.  
  193.             return x;   //LMAO
  194.  
  195.             /*
  196.             x = ReverseBytes(x);
  197.             return (((x) << 24) | (((x) >> 8) & 0xFF00) | (((x) << 8) & 0xFF0000) | ((x) >> 24));
  198.             */
  199.        }
  200.     }
  201. }
RAW Paste Data
Top