Continued work on conversion

This commit is contained in:
Starport75 2023-06-22 20:42:12 -05:00
parent 31ea735fcf
commit 2c18e8f9ce
3 changed files with 148 additions and 92 deletions

View File

@ -3,6 +3,33 @@
#include <tonc.h>
class Pokemon;
class Pokemon
{
public:
Pokemon(byte gen, int index, byte *party_data);
byte* convert_to_gen_three();
void copy_from_to(byte *source, byte *destination, int size);
private:
byte gen;
byte species_index;
byte moves[4];
byte trainer_id[2];
byte exp[3];
byte nickname[11];
byte trainer_name[11];
byte pokerus;
byte caught_data[2];
byte level;
byte gen_3_pkmn[80];
byte PID[4] = {0};
byte blank_word[4] = {0};
byte data_section_G[12];
byte data_section_A[12];
byte data_section_E[12];
byte data_section_M[12];
hword checksum;
byte encryption_key[4];
};
#endif

View File

@ -14,45 +14,48 @@
#include "metr.h"
OBJ_ATTR obj_buffer[128];
OBJ_AFFINE *obj_aff_buffer = (OBJ_AFFINE*)obj_buffer;
OBJ_AFFINE *obj_aff_buffer = (OBJ_AFFINE *)obj_buffer;
byte party[441] = {0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x6, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xFF, 0x25, 0xDA, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x9B, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x25, 0xDA, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x21, 0x23, 0x1E, 0x0, 0x0, 0x46, 0x0, 0x85, 0x81, 0x5, 0x0, 0x0, 0x0, 0x13, 0x0, 0x13, 0x0, 0x0A, 0x0, 0x9, 0x0, 0x0B, 0x0, 0x0B, 0x0, 0x0A, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x8A, 0x91, 0x88, 0x92, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50, 0x82, 0x98, 0x8D, 0x83, 0x80, 0x90, 0x94, 0x88, 0x8B, 0x50, 0x50};
Pokemon test(2, 0, &party[0]);
vu8 pkmn[480] = {
0x5C, 0xF2, 0x9B, 0x70, 0x9B, 0x2A, 0x81, 0xE4, 0xBB, 0xC6, 0xBC, 0xBF, 0xCC, 0xCE, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x0E, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0x60, 0x1B, 0xB6,
0xBD, 0xC2, 0x51, 0x85, 0xC7, 0xD8, 0x1A, 0x94, 0x2A, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94,
0xC8, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94,
0x5C, 0xF2, 0x9B, 0x70, 0x9B, 0x2A, 0x81, 0xE4, 0xBB, 0xC6, 0xBC, 0xBF, 0xCC, 0xCE, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x0E, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0x60, 0x1B, 0xB6,
0xBD, 0xC2, 0x51, 0x85, 0xC7, 0xD8, 0x1A, 0x94, 0x2A, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94,
0xC8, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94, 0xC7, 0xD8, 0x1A, 0x94,
0xD1, 0xA8, 0x64, 0x28, 0x9B, 0x2A, 0x81, 0xE4, 0xBC, 0xBB, 0xCC, 0xCE, 0xFF, 0xCE, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x83, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0xA7, 0x82, 0xE5, 0xCC,
0x4A, 0x82, 0xE5, 0xCC, 0x45, 0x82, 0xE5, 0xCC, 0x4A, 0x3A, 0xE4, 0xEE, 0x30, 0x98, 0xAE, 0xDD,
0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC,
0xD1, 0xA8, 0x64, 0x28, 0x9B, 0x2A, 0x81, 0xE4, 0xBC, 0xBB, 0xCC, 0xCE, 0xFF, 0xCE, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x83, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0xA7, 0x82, 0xE5, 0xCC,
0x4A, 0x82, 0xE5, 0xCC, 0x45, 0x82, 0xE5, 0xCC, 0x4A, 0x3A, 0xE4, 0xEE, 0x30, 0x98, 0xAE, 0xDD,
0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC, 0x4A, 0x82, 0xE5, 0xCC,
0x4E, 0x5B, 0xB7, 0xF3, 0x9B, 0x2A, 0x81, 0xE4, 0xBD, 0xBB, 0xCC, 0xCE, 0xBF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xD5, 0xC9, 0x37, 0x35, 0xAF, 0x6B, 0x7D, 0x06, 0xD5, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17,
0xD5, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17, 0x1C, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17,
0xD5, 0x71, 0x36, 0x17, 0x38, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17, 0xDA, 0x71, 0x36, 0x17,
0x4E, 0x5B, 0xB7, 0xF3, 0x9B, 0x2A, 0x81, 0xE4, 0xBD, 0xBB, 0xCC, 0xCE, 0xBF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xD5, 0xC9, 0x37, 0x35, 0xAF, 0x6B, 0x7D, 0x06, 0xD5, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17,
0xD5, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17, 0x1C, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17,
0xD5, 0x71, 0x36, 0x17, 0x38, 0x71, 0x36, 0x17, 0xD5, 0x71, 0x36, 0x17, 0xDA, 0x71, 0x36, 0x17,
0x5F, 0x80, 0x16, 0xBB, 0x9B, 0x2A, 0x81, 0xE4, 0xBE, 0xBB, 0xD1, 0xC8, 0xFF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0x29, 0xAA, 0x97, 0x5F,
0xC4, 0xAA, 0x97, 0x5F, 0xCB, 0xAA, 0x97, 0x5F, 0xC4, 0x12, 0x96, 0x7D, 0xBE, 0xB0, 0xDC, 0x4E,
0xC4, 0xAA, 0x97, 0x5F, 0x0D, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F,
0x5F, 0x80, 0x16, 0xBB, 0x9B, 0x2A, 0x81, 0xE4, 0xBE, 0xBB, 0xD1, 0xC8, 0xFF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0x29, 0xAA, 0x97, 0x5F,
0xC4, 0xAA, 0x97, 0x5F, 0xCB, 0xAA, 0x97, 0x5F, 0xC4, 0x12, 0x96, 0x7D, 0xBE, 0xB0, 0xDC, 0x4E,
0xC4, 0xAA, 0x97, 0x5F, 0x0D, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F, 0xC4, 0xAA, 0x97, 0x5F,
0x14, 0x43, 0x7A, 0xCE, 0x9B, 0x2A, 0x81, 0xE4, 0xBF, 0xCC, 0xC3, 0xC5, 0xFF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x46, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0xD1, 0xFA, 0x08,
0xF5, 0x73, 0xB0, 0x3B, 0x8F, 0x69, 0xFB, 0x2A, 0x62, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A,
0x80, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A,
0x14, 0x43, 0x7A, 0xCE, 0x9B, 0x2A, 0x81, 0xE4, 0xBF, 0xCC, 0xC3, 0xC5, 0xFF, 0xCC, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0x46, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0xD1, 0xFA, 0x08,
0xF5, 0x73, 0xB0, 0x3B, 0x8F, 0x69, 0xFB, 0x2A, 0x62, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A,
0x80, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A, 0x8F, 0x69, 0xFB, 0x2A,
0xF5, 0x91, 0x98, 0x00, 0x9B, 0x2A, 0x81, 0xE4, 0xC0, 0xCC, 0xBB, 0xC8, 0xC5, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xA7, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0x03, 0x18, 0xC6,
0x14, 0xA1, 0x52, 0xF5, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4,
0x6E, 0xBB, 0x19, 0xE4, 0x83, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x61, 0xBB, 0x19, 0xE4
};
0xF5, 0x91, 0x98, 0x00, 0x9B, 0x2A, 0x81, 0xE4, 0xC0, 0xCC, 0xBB, 0xC8, 0xC5, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x02, 0x02, 0xBB, 0xCF, 0xCD, 0xCE, 0xC3, 0xC8, 0xFF, 0x00, 0x8B, 0x07, 0x00, 0x00,
0xA7, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0x03, 0x18, 0xC6,
0x14, 0xA1, 0x52, 0xF5, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4,
0x6E, 0xBB, 0x19, 0xE4, 0x83, 0xBB, 0x19, 0xE4, 0x6E, 0xBB, 0x19, 0xE4, 0x61, 0xBB, 0x19, 0xE4};
void load_sprite(void)
{
@ -64,9 +67,9 @@ void load_sprite(void)
OBJ_ATTR *metr = &obj_buffer[0];
obj_set_attr(metr,
ATTR0_SQUARE, // Square, regular sprite
ATTR1_SIZE_64, // 64x64 pixels,
ATTR2_PALBANK(0) | 0); // palette index 0, tile index 0
ATTR0_SQUARE, // Square, regular sprite
ATTR1_SIZE_64, // 64x64 pixels,
ATTR2_PALBANK(0) | 0); // palette index 0, tile index 0
// Set position
obj_set_pos(metr, 176, 96);
@ -74,14 +77,13 @@ void load_sprite(void)
oam_copy(oam_mem, obj_buffer, 1); // Update first OAM object
}
int main(void)
{
linkGPIO->reset();
REG_DISPCNT = DCNT_MODE0 | DCNT_BG0 | DCNT_OBJ | DCNT_OBJ_1D;
tte_init_se_default(0, BG_CBB(0) | BG_SBB(31));
tte_init_se_default(0, BG_CBB(0) | BG_SBB(31));
irq_init(NULL);
irq_enable(II_VBLANK);
@ -95,37 +97,42 @@ int main(void)
int arr = 0;
char str[128] = {'\0'};
bool print = false;
bool print = false;
while (1)
{
u16 keys = ~REG_KEYS & KEY_ANY;
while (1) {
u16 keys = ~REG_KEYS & KEY_ANY;
vid_vsync();
key_poll();
if (key_released(KEY_UP)){
if (key_released(KEY_UP))
{
arr++;
if (arr == 14){
if (arr == 14)
{
arr = 0;
}
}
if (key_released(KEY_DOWN)){
if (key_released(KEY_DOWN))
{
arr--;
if (arr == -1){
if (arr == -1)
{
arr = 13;
}
}
if (key_released(KEY_A)){
insert_pokemon(pkmn, 6);
if (key_released(KEY_A))
{
insert_pokemon(test.convert_to_gen_three(), 1);
print = true;
}
if (key_released(KEY_START)){
if (key_released(KEY_START))
{
setup();
loop();
}
tte_erase_screen();
tte_set_pos(0, 0);
@ -135,23 +142,20 @@ int main(void)
sprintf(str, "[%c-%X]", mem_name, arr);
tte_write(str);
if (print){
if (print)
{
tte_set_pos(0, 20);
tte_write("Pokemon Injected!");
}
tte_set_pos(0,30);
//Pokemon test(2);
//sprintf(str, "gen: %X", test.get());
tte_set_pos(0, 30);
tte_write(str);
frame++;
VBlankIntrWait();
}
}
/*Credits:
https://github.com/laqieer/libsavgba
https://github.com/rodri042/gba-link-connection

View File

@ -7,10 +7,7 @@
byte gen_one_pkmn_index[255] = {0};
byte gen_two_pkmn_index[255] = {0};
class Pokemon
{
public:
Pokemon(byte gen, int index, byte party_data[441])
Pokemon::Pokemon(byte gen, int index, byte *party_data)
{
int party_offset = 20 + (index * 48);
int ot_offset = 20 + (6 * pkmn_size) + (index * name_size);
@ -23,52 +20,80 @@ public:
break;
case 2:
species_index = gen_one_pkmn_index[party_data[party_offset + 0x00]];
copy(party_data[party_offset + 0x02], party_data[party_offset + 0x06], moves[0]);
//std::copy(party_data[party_offset + 0x06], party_data[party_offset + 0x08], trainer_id[0]);
copy_from_to(&party_data[party_offset + 0x02], &moves[0], 4);
copy_from_to(&party_data[party_offset + 0x06], &trainer_id[0], 2);
exp[3]; //??
//std::copy(party_data[name_offset + 0x00], party_data[name_offset + 0x0A], nickname[0]);
//std::copy(party_data[ot_offset + 0x00], party_data[name_offset + 0x0A], trainer_name[11]);
copy_from_to(&party_data[name_offset + 8], &nickname[0], 10);
copy_from_to(&party_data[ot_offset + 0x00], &trainer_name[0], 11);
pokerus = party_data[party_offset + 0x1C];
//std::copy(party_data[party_offset + 0x1D], party_data[party_offset + 0x1F], caught_data[0]);
copy_from_to(&party_data[party_offset + 0x1D], &caught_data[0], 2);
level; //??
break;
}
}
void convert_to_gen_three()
byte* Pokemon::convert_to_gen_three()
{
//std::copy(gen_3_pkmn[0], gen_3_pkmn[3], blank_word[0]); // Personality Value
//std::copy(gen_3_pkmn[4], gen_3_pkmn[5], blank_word[0]); // SID
//std::copy(gen_3_pkmn[6], gen_3_pkmn[7], blank_word[0]); // TID
copy_from_to(&blank_word[0], &gen_3_pkmn[0], 4); // Personality Value
copy_from_to(&blank_word[0], &gen_3_pkmn[4], 2); // SID
copy_from_to(&trainer_id[0], &gen_3_pkmn[6], 2); // TID
gen_3_pkmn[8] = 0xBB;
gen_3_pkmn[9] = 0xFF; // Nickname
// Language
gen_3_pkmn[18] = 2;// Language
gen_3_pkmn[19] = 0b00000010; // Egg Name
gen_3_pkmn[20] = 0xBB;
gen_3_pkmn[21] = 0xFF; // OT Name
gen_3_pkmn[27] = 0b00000000; // Markings
// Checksum
// ???
// Data
// Data:
data_section_G[0] = 0x01;
data_section_G[1] = 0x9B; // Species Index
data_section_G[4] = 0xFF; // EXP
data_section_A[0] = moves[0]; // Move 1
data_section_A[2] = moves[1]; // Move 2
data_section_A[4] = moves[2]; // Move 3
data_section_A[6] = moves[3]; // Move 4
// Data section E is all zero
data_section_M[0] = pokerus;
// Checksum:
checksum = 0x0000;
for (int i = 0; i < 12; i = i + 2){
checksum = checksum + ((data_section_G[i] << 8) | data_section_G[i + 1]);
checksum = checksum + ((data_section_A[i] << 8) | data_section_A[i + 1]);
checksum = checksum + ((data_section_E[i] << 8) | data_section_E[i + 1]);
checksum = checksum + ((data_section_M[i] << 8) | data_section_M[i + 1]);
}
gen_3_pkmn[28] = (checksum & 0xFF00) >> 8;
gen_3_pkmn[29] = checksum & 0xFF;
for (int i = 0; i < 4; i++){
encryption_key[i] = gen_3_pkmn[4 + i] ^ PID[i]; // XOR SID and TID with PID
}
for (int i = 0; i < 12; i++){
data_section_G[i] ^= encryption_key[i % 4];
data_section_A[i] ^= encryption_key[i % 4];
data_section_E[i] ^= encryption_key[i % 4];
data_section_M[i] ^= encryption_key[i % 4];
}
// TODO: FIX TO MODULO
copy_from_to(&data_section_G[0], &gen_3_pkmn[32], 12);
copy_from_to(&data_section_A[0], &gen_3_pkmn[44], 12);
copy_from_to(&data_section_E[0], &gen_3_pkmn[56], 12);
copy_from_to(&data_section_M[0], &gen_3_pkmn[68], 12);
return gen_3_pkmn;
}
void copy(int start, int stop, byte *array){
for (int i = 0; i < (stop - start); i++){
gen_3_pkmn[i + start] = array[i];
void Pokemon::copy_from_to(byte *source, byte *destination, int size){
for (int i = 0; i < size; i++){
destination[i] = source[i];
}
}
private:
byte gen;
byte species_index;
byte moves[4];
byte trainer_id[2];
byte exp[3];
byte nickname[11];
byte trainer_name[11];
byte pokerus;
byte caught_data[2];
byte level;
byte gen_3_pkmn[80];
byte blank_word[4] = {0};
};