Continuing Payload Work
1080
Pokemon_Mirror_mb.sym
Normal file
BIN
graphics/button_gold_left.png
Normal file
|
After Width: | Height: | Size: 243 B |
|
Before Width: | Height: | Size: 292 B |
BIN
graphics/button_green_left.png
Normal file
|
After Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 266 B |
|
Before Width: | Height: | Size: 277 B |
BIN
graphics/button_red_left.png
Normal file
|
After Width: | Height: | Size: 231 B |
3
graphics/button_silver_left.grit
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#
|
||||
# Button : 4bpp, not compressed. Pallet 2, copy from 32 to 48.
|
||||
-gB4 -ps32 -pe48
|
||||
BIN
graphics/button_silver_left.png
Normal file
|
After Width: | Height: | Size: 259 B |
|
|
@ -26,7 +26,6 @@ public:
|
|||
hword stack_overwrite_location; // The part of the stack that we're overwriting
|
||||
byte short_pkmn_name; // The name of the Pokemon that moves us through RAM
|
||||
byte pointer_pkmn_name; // The name of the Pokemon that overwrites the stack
|
||||
byte enter_vector_destination; // The location within the payload array where the jump should start
|
||||
hword enter_vector_location; // Where we should jump to from the enter vector
|
||||
// This can be a few different places:
|
||||
// wSerialOtherGameboyRandomNumberListBlock:
|
||||
|
|
@ -36,33 +35,37 @@ public:
|
|||
// wSerialEnemyMonsPatchList:
|
||||
// 0xC5D0 to 0xC6E8
|
||||
|
||||
word clearScreen;
|
||||
word CableClub_TextBoxBoarder;
|
||||
hword placeString;
|
||||
hword hSerialConnectionStatus;
|
||||
hword wBoxDataStart;
|
||||
hword wBoxDataEnd;
|
||||
hword Serial_ExchangeBytes;
|
||||
word wRemoveMonFromBox;
|
||||
word wBoxCount;
|
||||
word wWhichPokemon;
|
||||
word _RemovePokemon;
|
||||
word SaveSAVtoSRAM1;
|
||||
byte SaveSAVtoSRAM1_memBank;
|
||||
hword Bankswitch;
|
||||
hword SoftReset;
|
||||
hword garbageDataLocation;
|
||||
word clearScreen; // location of the clearScreen function in the ROM
|
||||
word CableClub_TextBoxBorder; // location of the CableClub_TextBoxBorder function in the ROM
|
||||
word placeString; // location of the placeString function in the ROM
|
||||
word Serial_ExchangeBytes; // location of the Serial_ExchangeBytes function in the ROM
|
||||
word _RemovePokemon; // location of the _RemovePokemon function in the ROM
|
||||
word SaveSAVtoSRAM1; // location of the SaveSAVtoSRAM1 function in the ROM
|
||||
word SaveSAVtoSRAM2; // location of the SaveSAVtoSRAM2 function in the ROM
|
||||
word OpenSRAM; // location of the OpenSRAM function in the ROM
|
||||
word SaveBox; // location of the SaveBox function in the ROM
|
||||
word Bankswitch; // location of the Bankswitch function in the ROM
|
||||
word SoftReset; // location of the SoftReset function in the ROM
|
||||
word garbageDataLocation; // location of random data starting with 0xFD in the ROM
|
||||
|
||||
hword transferWaitString;
|
||||
hword pkmnTransferArray;
|
||||
hword arrayCounter;
|
||||
byte transferString[30];
|
||||
byte custom_name[11];
|
||||
word wRemoveMonFromBox; // location of wRemoveMonFromBox in RAM
|
||||
word wBoxCount; // location of wBoxCount in RAM
|
||||
word wWhichPokemon; // location of wWhichPokemon in RAM
|
||||
word hSerialConnectionStatus; // location of hSerialConnectionStatus in RAM
|
||||
word wBoxDataStart; // location of wBoxDataStart in RAM
|
||||
word wBoxDataEnd; // location of wBoxDataEnd in RAM
|
||||
|
||||
hword transferStringLocation;
|
||||
hword textBoarderUppLeft;
|
||||
byte textBoarderWidth;
|
||||
byte textBoarderHeight;
|
||||
word transferWaitString; // location of the transferWaitString in RAM
|
||||
word pkmnTransferArray; // location of the pkmnTransferArray in RAM
|
||||
word arrayCounter; // location of the arrayCounter in RAM
|
||||
|
||||
byte transferString[30]; // the custom transfer string
|
||||
byte custom_name[11]; // the custom name string
|
||||
|
||||
hword transferStringLocation; // location in VRAM to start writing the transfer string to
|
||||
hword textBorderUppLeft; // location in VRAM to put the upper left corner of the border
|
||||
byte textBorderWidth; // the width of the text box border
|
||||
byte textBorderHeight; // the height of the text box border
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -10,12 +10,13 @@
|
|||
#define SPA_ID 7
|
||||
#define KOR_ID 8
|
||||
|
||||
#define RED_GREEN_ID 0
|
||||
#define RED_BLUE_ID 1
|
||||
#define GREEN_ID 0
|
||||
#define RED_ID 1
|
||||
#define BLUE_ID 2
|
||||
#define YELLOW_ID 3
|
||||
#define GOLD_SILVER_ID 4
|
||||
#define CRYSTAL_ID 5
|
||||
#define GOLD_ID 4
|
||||
#define SILVER_ID 5
|
||||
#define CRYSTAL_ID 6
|
||||
|
||||
#define METHOD_NEWLINE 0
|
||||
#define METHOD_MEW 1
|
||||
|
|
@ -25,7 +26,7 @@
|
|||
|
||||
const struct GB_ROM ENG_RED_BLUE = {
|
||||
.language = ENG_ID,
|
||||
.version = RED_BLUE_ID,
|
||||
.version = RED_ID,
|
||||
.generation = 1,
|
||||
.method = METHOD_NEWLINE,
|
||||
.payload_size = 637,
|
||||
|
|
@ -36,41 +37,40 @@ const struct GB_ROM ENG_RED_BLUE = {
|
|||
.short_pkmn_name = 0xE3,
|
||||
.pointer_pkmn_name = 0xFC,
|
||||
|
||||
.enter_vector_destination = 0x05,
|
||||
.enter_vector_location = 0xC5D6,
|
||||
|
||||
.clearScreen = 0x190F,
|
||||
.CableClub_TextBoxBoarder = 0x5AB3,
|
||||
.CableClub_TextBoxBorder = 0x5AB3,
|
||||
.placeString = 0x1955,
|
||||
.hSerialConnectionStatus = 0xFFAA,
|
||||
.wBoxDataStart = 0xDA80,
|
||||
.wBoxDataEnd = 0xDEE2,
|
||||
.Serial_ExchangeBytes = 0x216F,
|
||||
._RemovePokemon = 0x7B68,
|
||||
.SaveSAVtoSRAM1 = 0x1C77E2,
|
||||
.SaveSAVtoSRAM2 = 0x1C780F,
|
||||
.Bankswitch = 0x35D6,
|
||||
.SoftReset = 0x1F49,
|
||||
.garbageDataLocation = 0x0316,
|
||||
|
||||
.wRemoveMonFromBox = 0xCF95,
|
||||
.wBoxCount = 0xDA80,
|
||||
.wWhichPokemon = 0xCF92,
|
||||
._RemovePokemon = 0x7B68,
|
||||
.SaveSAVtoSRAM1 = 0x77E2,
|
||||
.SaveSAVtoSRAM1_memBank = 0x1C,
|
||||
.Bankswitch = 0x35D6,
|
||||
.SoftReset = 0x1F49,
|
||||
.garbageDataLocation = 0x0316, // Starts with 0xFD
|
||||
.hSerialConnectionStatus = 0xFFAA,
|
||||
.wBoxDataStart = 0xDA80,
|
||||
.wBoxDataEnd = 0xDEE2,
|
||||
|
||||
.transferWaitString = 0xC67A, // Enter vector + A4
|
||||
.pkmnTransferArray = 0xC651, // Enter vector + 7B
|
||||
.arrayCounter = 0xC650, // Enter vector + 7A
|
||||
.transferString = { // TRANSFERRING..\n
|
||||
.transferWaitString = 0xC67A,
|
||||
.pkmnTransferArray = 0xC651,
|
||||
.arrayCounter = 0xC650,
|
||||
.transferString = {// TRANSFERRING..\n
|
||||
// PLEASE WAIT!
|
||||
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
|
||||
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
|
||||
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
|
||||
|
||||
.transferStringLocation = 0xC443,
|
||||
.textBoarderUppLeft = 0xC42E,
|
||||
.textBoarderWidth = 3,
|
||||
.textBoarderHeight = 14,
|
||||
.textBorderUppLeft = 0xC42E,
|
||||
.textBorderWidth = 3,
|
||||
.textBorderHeight = 14,
|
||||
};
|
||||
|
||||
const struct GB_ROM ENG_YELLOW = {
|
||||
.language = ENG_ID,
|
||||
.version = YELLOW_ID,
|
||||
|
|
@ -84,89 +84,170 @@ const struct GB_ROM ENG_YELLOW = {
|
|||
.short_pkmn_name = 0x15,
|
||||
.pointer_pkmn_name = 0xE3,
|
||||
|
||||
//.enter_vector_destination = 0x05,
|
||||
//.enter_vector_location = 0xC5D6,
|
||||
|
||||
.clearScreen = 0x16DD,
|
||||
.CableClub_TextBoxBoarder = 0x5B67,
|
||||
.CableClub_TextBoxBorder = 0x5B67,
|
||||
.placeString = 0x1723,
|
||||
.hSerialConnectionStatus = 0xFFAA,
|
||||
.wBoxDataStart = 0xDA7F,
|
||||
.wBoxDataEnd = 0xDEE1,
|
||||
.Serial_ExchangeBytes = 0x1FCB,
|
||||
._RemovePokemon = 0x7A0F,
|
||||
.SaveSAVtoSRAM1 = 0x1C1B32,
|
||||
.Bankswitch = 0x3E84,
|
||||
.SoftReset = 0x1D05,
|
||||
.garbageDataLocation = 0x0161,
|
||||
.wRemoveMonFromBox = 0xCF94,
|
||||
.wBoxCount = 0xDA7F,
|
||||
.wWhichPokemon = 0xCF91,
|
||||
._RemovePokemon = 0x7A0F,
|
||||
.SaveSAVtoSRAM1 = 0x1B32,
|
||||
.SaveSAVtoSRAM1_memBank = 0x1C,
|
||||
.Bankswitch = 0x3E84,
|
||||
.SoftReset = 0x1D05,
|
||||
.garbageDataLocation = 0x0161, // Starts with 0xFD
|
||||
.hSerialConnectionStatus = 0xFFAA,
|
||||
|
||||
.transferWaitString = 0xC67A, // Enter vector + A4
|
||||
.pkmnTransferArray = 0xC651, // Enter vector + 7B
|
||||
.arrayCounter = 0xC650, // Enter vector + 7A
|
||||
.transferString = { // TRANSFERRING..\n
|
||||
.wBoxDataStart = 0xDA7F,
|
||||
.wBoxDataEnd = 0xDEE1,
|
||||
|
||||
.transferWaitString = 0xC67A,
|
||||
.pkmnTransferArray = 0xC651,
|
||||
.arrayCounter = 0xC650,
|
||||
.transferString = {// TRANSFERRING..\n
|
||||
// PLEASE WAIT!
|
||||
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
|
||||
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
|
||||
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
|
||||
|
||||
.transferStringLocation = 0xC443,
|
||||
.textBoarderUppLeft = 0xC42E,
|
||||
.textBoarderWidth = 3,
|
||||
.textBoarderHeight = 14,
|
||||
.textBorderUppLeft = 0xC42E,
|
||||
.textBorderWidth = 3,
|
||||
.textBorderHeight = 14,
|
||||
};
|
||||
|
||||
|
||||
const struct GB_ROM ENG_GOLD_SILVER = {
|
||||
const struct GB_ROM ENG_GOLD = {
|
||||
.language = ENG_ID,
|
||||
.version = GOLD_SILVER_ID,
|
||||
.version = GOLD_ID,
|
||||
.generation = 2,
|
||||
.method = METHOD_GEN2,
|
||||
.payload_size = 672,
|
||||
.box_data_size = 0x44E,
|
||||
|
||||
/**/
|
||||
.print_string_start = 0xC442,
|
||||
.stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
|
||||
.short_pkmn_name = 0x4E,
|
||||
//.pointer_pkmn_name = 0xFC,
|
||||
|
||||
//.enter_vector_destination = 0x05,
|
||||
.enter_vector_location = 0xC5D6,
|
||||
.enter_vector_location = 0xC7B4,
|
||||
|
||||
.clearScreen = 0x000EE2,
|
||||
.CableClub_TextBoxBoarder = 0x0A4D88, // LinkTextboxAtHL
|
||||
.CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL
|
||||
.placeString = 0x000F74,
|
||||
.Serial_ExchangeBytes = 0x0710,
|
||||
._RemovePokemon = 0x03603F, // RemoveMonFromPartyOrBox
|
||||
.OpenSRAM = 0x0030E1,
|
||||
.SaveBox = 0x054DF6,
|
||||
.SoftReset = 0x05B0,
|
||||
.garbageDataLocation = 0x0654,
|
||||
|
||||
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter
|
||||
.wBoxCount = 0x01AD6C, // sBoxCount
|
||||
.wWhichPokemon = 0x01D005, // wCurPartyMon
|
||||
.hSerialConnectionStatus = 0xFFCD,
|
||||
.wBoxDataStart = 0xAD6C, // sBoxStart
|
||||
.wBoxDataEnd = 0xB1BA, // sBoxEnd
|
||||
.Serial_ExchangeBytes = 0x0710,
|
||||
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter, bank 1
|
||||
.wBoxCount = 0x01AD6C, // sBoxCount, bank 1
|
||||
.wWhichPokemon = 0x01D005, // wCurPartyMon, bank 1
|
||||
._RemovePokemon = 0x03603F - 2, // RemoveMonFromPartyOrBox, bank 3
|
||||
.SaveSAVtoSRAM1 = 0x0577E2, // ? 0x4DF6
|
||||
.SaveSAVtoSRAM1_memBank = 0x5,
|
||||
//.Bankswitch = 0x0010,
|
||||
.SoftReset = 0x05B0, // ?
|
||||
.garbageDataLocation = 0x0654, // ? Starts with 0xFD
|
||||
|
||||
.transferWaitString = 0xC67A, // Enter vector +
|
||||
.pkmnTransferArray = 0xC651, // Enter vector +
|
||||
.arrayCounter = 0xC650, // Enter vector +
|
||||
.transferString = { // TRANSFERRING..\n
|
||||
.transferWaitString = 0xC67A,
|
||||
.pkmnTransferArray = 0xC651,
|
||||
.arrayCounter = 0xC650,
|
||||
.transferString = {// TRANSFERRING..\n
|
||||
// PLEASE WAIT!
|
||||
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
|
||||
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
|
||||
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
|
||||
|
||||
.transferStringLocation = 0xC443, // ?
|
||||
.textBoarderUppLeft = 0xC42E, // ?
|
||||
.textBoarderWidth = 3, // ?
|
||||
.textBoarderHeight = 14, // ?
|
||||
.transferStringLocation = 0xC443,
|
||||
.textBorderUppLeft = 0xC42E,
|
||||
.textBorderWidth = 3,
|
||||
.textBorderHeight = 14,
|
||||
};
|
||||
const struct GB_ROM ENG_SILVER = {
|
||||
.language = ENG_ID,
|
||||
.version = GOLD_ID,
|
||||
.generation = 2,
|
||||
.method = METHOD_GEN2,
|
||||
.payload_size = 672,
|
||||
.box_data_size = 0x44E,
|
||||
|
||||
.print_string_start = 0xC442,
|
||||
.stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
|
||||
.short_pkmn_name = 0x4E,
|
||||
|
||||
.enter_vector_location = 0xC7B4,
|
||||
|
||||
.clearScreen = 0x000EE2,
|
||||
.CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL
|
||||
.placeString = 0x000F74,
|
||||
.Serial_ExchangeBytes = 0x0710,
|
||||
._RemovePokemon = 0x03603D, // RemoveMonFromPartyOrBox
|
||||
.OpenSRAM = 0x0030E1,
|
||||
.SaveBox = 0x054DF6,
|
||||
.SoftReset = 0x05B0,
|
||||
.garbageDataLocation = 0x0654,
|
||||
|
||||
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter
|
||||
.wBoxCount = 0x01AD6C, // sBoxCount
|
||||
.wWhichPokemon = 0x01D005, // wCurPartyMon
|
||||
.hSerialConnectionStatus = 0xFFCD,
|
||||
.wBoxDataStart = 0xAD6C, // sBoxStart
|
||||
.wBoxDataEnd = 0xB1BA, // sBoxEnd
|
||||
|
||||
.transferWaitString = 0xC67A,
|
||||
.pkmnTransferArray = 0xC651,
|
||||
.arrayCounter = 0xC650,
|
||||
.transferString = {// TRANSFERRING..\n
|
||||
// PLEASE WAIT!
|
||||
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
|
||||
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
|
||||
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
|
||||
|
||||
.transferStringLocation = 0xC443,
|
||||
.textBorderUppLeft = 0xC42E,
|
||||
.textBorderWidth = 3,
|
||||
.textBorderHeight = 14,
|
||||
};
|
||||
const struct GB_ROM ENG_CRYSTAL = {
|
||||
.language = ENG_ID,
|
||||
.version = CRYSTAL_ID,
|
||||
.generation = 2,
|
||||
.method = METHOD_GEN2,
|
||||
.payload_size = 672,
|
||||
.box_data_size = 0x44E,
|
||||
|
||||
.print_string_start = 0xC4AA,
|
||||
.stack_overwrite_location = 0xC0BB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
|
||||
.short_pkmn_name = 0x4E,
|
||||
.enter_vector_location = 0xC7B4,
|
||||
|
||||
.clearScreen = 0x000FDB,
|
||||
.CableClub_TextBoxBorder = 0x0A4EEF, // LinkTextboxAtHL
|
||||
.placeString = 0x001078,
|
||||
.Serial_ExchangeBytes = 0x075F,
|
||||
._RemovePokemon = 0x036039, // RemoveMonFromPartyOrBox
|
||||
.OpenSRAM = 0x0030E1,
|
||||
.SaveBox = 0x054E0C,
|
||||
.SoftReset = 0x0150, // Reset
|
||||
.garbageDataLocation = 0x0770,
|
||||
|
||||
.wRemoveMonFromBox = 0x01D10B, // wPokemonWithdrawDepositParameter
|
||||
.wBoxCount = 0x01AD10, // sBoxCount
|
||||
.wWhichPokemon = 0x01D109, // wCurPartyMon
|
||||
.hSerialConnectionStatus = 0xFFCB,
|
||||
.wBoxDataStart = 0x01AD10, // sBox
|
||||
.wBoxDataEnd = 0x01B15E, // sBoxEnd
|
||||
|
||||
.transferWaitString = 0xC67A,
|
||||
.pkmnTransferArray = 0xC651,
|
||||
.arrayCounter = 0xC650,
|
||||
.transferString = {// TRANSFERRING..\n
|
||||
// PLEASE WAIT!
|
||||
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
|
||||
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
|
||||
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
|
||||
|
||||
.transferStringLocation = 0xC443,
|
||||
.textBorderUppLeft = 0xC42E,
|
||||
.textBorderWidth = 3,
|
||||
.textBorderHeight = 14,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -42,6 +42,7 @@ private:
|
|||
int x_max;
|
||||
int y_min;
|
||||
int y_max;
|
||||
int offset_value;
|
||||
int bottom_offset;
|
||||
bool cancel_enabled;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -19,12 +19,13 @@
|
|||
#define SPA_ID 7
|
||||
#define KOR_ID 8
|
||||
|
||||
#define RED_GREEN_ID 0
|
||||
#define RED_BLUE_ID 1
|
||||
#define GREEN_ID 0
|
||||
#define RED_ID 1
|
||||
#define BLUE_ID 2
|
||||
#define YELLOW_ID 3
|
||||
#define GOLD_SILVER_ID 4
|
||||
#define CRYSTAL_ID 5
|
||||
#define GOLD_ID 4
|
||||
#define SILVER_ID 5
|
||||
#define CRYSTAL_ID 6
|
||||
|
||||
#define EVENT_MEW_JPN 0
|
||||
#define EVENT_MEW_ENG 1
|
||||
|
|
|
|||
|
|
@ -61,21 +61,24 @@ extern OBJ_ATTR *btn_lang_spa;
|
|||
extern OBJ_ATTR *btn_lang_kor;
|
||||
|
||||
#define SPRITE_BATCH_GAMES 2
|
||||
#include "button_red_green_left.h"
|
||||
extern OBJ_ATTR *button_red_green_left;
|
||||
extern OBJ_ATTR *button_red_green_right;
|
||||
#include "button_green_left.h"
|
||||
extern OBJ_ATTR *button_green_left;
|
||||
extern OBJ_ATTR *button_green_right;
|
||||
#include "button_blue_left.h"
|
||||
extern OBJ_ATTR *button_blue_left;
|
||||
extern OBJ_ATTR *button_blue_right;
|
||||
#include "button_red_blue_left.h"
|
||||
extern OBJ_ATTR *button_red_blue_left;
|
||||
extern OBJ_ATTR *button_red_blue_right;
|
||||
#include "button_red_left.h"
|
||||
extern OBJ_ATTR *button_red_left;
|
||||
extern OBJ_ATTR *button_red_right;
|
||||
#include "button_yellow_left.h"
|
||||
extern OBJ_ATTR *button_yellow_left;
|
||||
extern OBJ_ATTR *button_yellow_right;
|
||||
#include "button_gold_silver_left.h"
|
||||
extern OBJ_ATTR *button_gold_silver_left;
|
||||
extern OBJ_ATTR *button_gold_silver_right;
|
||||
#include "button_gold_left.h"
|
||||
extern OBJ_ATTR *button_gold_left;
|
||||
extern OBJ_ATTR *button_gold_right;
|
||||
#include "button_silver_left.h"
|
||||
extern OBJ_ATTR *button_silver_left;
|
||||
extern OBJ_ATTR *button_silver_right;
|
||||
#include "button_crystal_left.h"
|
||||
extern OBJ_ATTR *button_crystal_left;
|
||||
extern OBJ_ATTR *button_crystal_right;
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@ Button_Menu::Button_Menu(int nRows, int nColumns, int nButton_width, int nButton
|
|||
cancel_enabled = enable_cancel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Button_Menu::set_xy_min_max(int nX_min, int nX_max, int nY_min, int nY_max)
|
||||
{
|
||||
x_min = nX_min;
|
||||
|
|
@ -52,22 +50,34 @@ int Button_Menu::button_main()
|
|||
if (get_pos_from_xy(curr_x, curr_y) >= button_vector.size())
|
||||
{
|
||||
curr_y--;
|
||||
curr_x += offset_value / 2;
|
||||
}
|
||||
}
|
||||
else if (key_hit(KEY_DOWN) && (curr_y < (rows - 1)))
|
||||
{
|
||||
curr_y++;
|
||||
if (get_pos_from_xy(curr_x, curr_y) >= button_vector.size())
|
||||
{
|
||||
curr_x = get_x_from_pos(button_vector.size() - 1);
|
||||
}
|
||||
}
|
||||
else if (key_hit(KEY_LEFT) && ((curr_x > 0) || ((curr_x == 0) && (curr_y == rows - 1) && (offset_value > 0))))
|
||||
{
|
||||
if (curr_x == 0 && offset_value > 0)
|
||||
{
|
||||
curr_y -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
curr_x--;
|
||||
}
|
||||
}
|
||||
else if (key_hit(KEY_LEFT) && (curr_x > 0))
|
||||
{
|
||||
curr_x--;
|
||||
}
|
||||
else if (key_hit(KEY_UP) && (curr_y > 0))
|
||||
{
|
||||
if (curr_y == rows - 1)
|
||||
{
|
||||
curr_x += offset_value / 2;
|
||||
}
|
||||
curr_y--;
|
||||
}
|
||||
else if (key_hit(KEY_A))
|
||||
|
|
@ -121,8 +131,8 @@ void Button_Menu::organize_buttons()
|
|||
((y_max - y_min) - (rows * button_height)) / (rows + 1);
|
||||
int horizontal_space =
|
||||
((x_max - x_min) - (columns * button_width)) / (columns + 1);
|
||||
int bottom_offset = ((horizontal_space + button_width) * ((rows * columns) - button_vector.size()) / 2);
|
||||
|
||||
bottom_offset = ((horizontal_space + button_width) * ((rows * columns) - button_vector.size()) / 2);
|
||||
offset_value = (rows * columns) - button_vector.size();
|
||||
for (unsigned int i = 0; i < button_vector.size(); i++)
|
||||
{
|
||||
button_vector.at(i).set_location(
|
||||
|
|
@ -158,6 +168,7 @@ void Button_Menu::set_bottom_row_offset(int nBottom_offset)
|
|||
bottom_offset = nBottom_offset;
|
||||
}
|
||||
|
||||
void Button_Menu::clear_vector(){
|
||||
void Button_Menu::clear_vector()
|
||||
{
|
||||
button_vector.clear();
|
||||
}
|
||||
|
|
@ -74,9 +74,9 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
}
|
||||
|
||||
// Set the entrance vector
|
||||
payload_storage[curr_rom.enter_vector_destination] = 0xC3;
|
||||
payload_storage[curr_rom.enter_vector_destination + 1] = curr_rom.enter_vector_location & 0xFF;
|
||||
payload_storage[curr_rom.enter_vector_destination + 2] = (curr_rom.enter_vector_location >> 8) & 0xFF;
|
||||
payload_storage[5] = 0xC3;
|
||||
payload_storage[6] = curr_rom.enter_vector_location & 0xFF;
|
||||
payload_storage[7] = (curr_rom.enter_vector_location >> 8) & 0xFF;
|
||||
|
||||
// Patchlist
|
||||
// At 0x1BB / 0x1DE, 0xC2 in length (0xC4, but the last 2 are unused)
|
||||
|
|
@ -92,21 +92,21 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
|
||||
// ld hl, [upper left textbox corner in VRAM]
|
||||
payload_storage[offset++] = 0x21;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
|
||||
|
||||
// ld b, 3 [height]
|
||||
payload_storage[offset++] = 0x06;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
|
||||
|
||||
// ld c, 14 [width]
|
||||
payload_storage[offset++] = 0x0E;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
|
||||
|
||||
// call CableClub_TextBoxBoarder
|
||||
// call CableClub_TextBoxBorder
|
||||
payload_storage[offset++] = 0xCD;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 8) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 8) & 0xFF;
|
||||
|
||||
// ld hl, [transfer string location]
|
||||
payload_storage[offset++] = 0x21;
|
||||
|
|
@ -282,14 +282,24 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
payload_storage[offset++] = 0xDD;
|
||||
|
||||
/* Save the current box */
|
||||
// ld b, 0x1C [memory bank of SaveSAVtoSRAM1]
|
||||
payload_storage[offset++] = 0x06;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
|
||||
|
||||
// ld hl, SaveSAVtoSRAM1
|
||||
payload_storage[offset++] = 0x21;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 8) & 0xFF;
|
||||
|
||||
// ld b, 0x1C [memory bank of SaveSAVtoSRAM1]
|
||||
payload_storage[offset++] = 0x06;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
|
||||
// call Bankswitch [which will jump to what's loaded in HL]
|
||||
payload_storage[offset++] = 0xCD;
|
||||
payload_storage[offset++] = (curr_rom.Bankswitch >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.Bankswitch >> 8) & 0xFF;
|
||||
|
||||
// ld hl, SaveSAVtoSRAM2
|
||||
payload_storage[offset++] = 0x21;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM2 >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM2 >> 8) & 0xFF;
|
||||
|
||||
// call Bankswitch [which will jump to what's loaded in HL]
|
||||
payload_storage[offset++] = 0xCD;
|
||||
|
|
@ -426,7 +436,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
|
||||
// ld a, 0x1C
|
||||
payload_storage[offset++] = 0x3E;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
|
||||
|
||||
// call BankswitchCommon
|
||||
payload_storage[offset++] = 0xCD;
|
||||
|
|
@ -481,21 +491,21 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
|
||||
// ld hl, [upper left textbox corner in VRAM]
|
||||
payload_storage[offset++] = 0x21;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
|
||||
|
||||
// ld b, 3 [height]
|
||||
payload_storage[offset++] = 0x06;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
|
||||
|
||||
// ld c, 14 [width]
|
||||
payload_storage[offset++] = 0x0E;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
|
||||
|
||||
// call CableClub_TextBoxBoarder
|
||||
// call CableClub_TextBoxBorder
|
||||
payload_storage[offset++] = 0xCD;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 8) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 8) & 0xFF;
|
||||
|
||||
// ld hl, [transfer string location]
|
||||
payload_storage[offset++] = 0x21;
|
||||
|
|
@ -682,7 +692,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
/* Save the current box */
|
||||
// ld a, 0x1C
|
||||
payload_storage[offset++] = 0x3E;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
|
||||
|
||||
// call BankswitchCommon
|
||||
payload_storage[offset++] = 0xCD;
|
||||
|
|
@ -784,7 +794,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
// write_call(curr_rom.generation, payload_storage, offset, 0x0363D8);
|
||||
|
||||
// Saving the box overwrites our code, so we need to move it here.
|
||||
write_call(curr_rom.generation, payload_storage, offset, 0x054DF6);
|
||||
write_call(curr_rom.generation, payload_storage, offset, curr_rom.SaveBox);
|
||||
|
||||
// jp SoftReset
|
||||
payload_storage[offset++] = 0xC3;
|
||||
|
|
@ -812,19 +822,19 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
|
||||
// ld hl, [upper left textbox corner in VRAM]
|
||||
payload_storage[offset++] = 0x21;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
|
||||
|
||||
// ld b, 3 [height]
|
||||
payload_storage[offset++] = 0x06;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
|
||||
|
||||
// ld c, 14 [width]
|
||||
payload_storage[offset++] = 0x0E;
|
||||
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
|
||||
|
||||
// call CableClub_TextBoxBoarder
|
||||
write_call(curr_rom.generation, payload_storage, offset, curr_rom.CableClub_TextBoxBoarder);
|
||||
// call CableClub_TextBoxBorder
|
||||
write_call(curr_rom.generation, payload_storage, offset, curr_rom.CableClub_TextBoxBorder);
|
||||
|
||||
// ld hl, [transfer string location]
|
||||
payload_storage[offset++] = 0x21;
|
||||
|
|
@ -852,7 +862,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
// call OpenSRAM
|
||||
payload_storage[offset++] = 0x3E;
|
||||
payload_storage[offset++] = 0x01;
|
||||
write_call(curr_rom.generation, payload_storage, offset, 0x0030E1);
|
||||
write_call(curr_rom.generation, payload_storage, offset, curr_rom.OpenSRAM);
|
||||
|
||||
// ld hl, (wBoxDataStart - 1) [data to send]
|
||||
payload_storage[offset++] = 0x21;
|
||||
|
|
@ -1003,8 +1013,8 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
|
|||
|
||||
// jp pkmn list (because saving the box overwrites the data)
|
||||
payload_storage[offset++] = 0xC3;
|
||||
payload_storage[offset++] = 0xB4;
|
||||
payload_storage[offset++] = 0xC7;
|
||||
payload_storage[offset++] = (curr_rom.enter_vector_location >> 0) & 0xFF;
|
||||
payload_storage[offset++] = (curr_rom.enter_vector_location >> 8) & 0xFF;
|
||||
|
||||
// 72 total bytes of string/array stuff
|
||||
|
||||
|
|
@ -1061,7 +1071,6 @@ void write_call(int generation, byte array_data[], int &offset, word call_locati
|
|||
}
|
||||
else
|
||||
{
|
||||
// Farcall: Load bank into a, adr in hl, rst 08 (0xCF)
|
||||
// Swap banks: Load bank into a, call rst 10 (0xD7)
|
||||
if (((call_location >> 16) & 0xFF) != 0x00)
|
||||
{
|
||||
|
|
@ -1075,11 +1084,11 @@ void write_call(int generation, byte array_data[], int &offset, word call_locati
|
|||
}
|
||||
};
|
||||
|
||||
int test_main()
|
||||
int main()
|
||||
{
|
||||
freopen("test_payload.txt", "w", stdout);
|
||||
std::cout << std::endl;
|
||||
byte *payload = generate_payload(ENG_GOLD_SILVER, true);
|
||||
byte *payload = generate_payload(ENG_CRYSTAL, true);
|
||||
for (int i = 0; i < PAYLOAD_SIZE; i++)
|
||||
{
|
||||
std::cout << "0x" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase << (unsigned int)payload[i] << ", ";
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
|
|||
{
|
||||
switch (game)
|
||||
{
|
||||
case RED_GREEN_ID:
|
||||
case RED_BLUE_ID:
|
||||
case GREEN_ID:
|
||||
case RED_ID:
|
||||
case BLUE_ID:
|
||||
case YELLOW_ID:
|
||||
gen = 1;
|
||||
|
|
@ -29,7 +29,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
|
|||
nickname_size = 6;
|
||||
box_size = 30;
|
||||
break;
|
||||
case GOLD_SILVER_ID:
|
||||
case GOLD_ID:
|
||||
case SILVER_ID:
|
||||
case CRYSTAL_ID:
|
||||
gen = 2;
|
||||
pkmn_size = 32;
|
||||
|
|
@ -43,8 +44,7 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
|
|||
{
|
||||
switch (game)
|
||||
{
|
||||
case RED_GREEN_ID:
|
||||
case RED_BLUE_ID:
|
||||
case RED_ID:
|
||||
case BLUE_ID:
|
||||
case YELLOW_ID:
|
||||
gen = 1;
|
||||
|
|
@ -53,7 +53,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
|
|||
nickname_size = 11;
|
||||
box_size = 20;
|
||||
break;
|
||||
case GOLD_SILVER_ID:
|
||||
case GOLD_ID:
|
||||
case SILVER_ID:
|
||||
case CRYSTAL_ID:
|
||||
gen = 2;
|
||||
pkmn_size = 32;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@
|
|||
const GB_ROM *list_of_gb_roms[NUM_PAYLOADS] = {
|
||||
&ENG_RED_BLUE,
|
||||
&ENG_YELLOW,
|
||||
&ENG_GOLD_SILVER,
|
||||
&ENG_GOLD,
|
||||
&ENG_SILVER,
|
||||
&ENG_CRYSTAL,
|
||||
};
|
||||
|
||||
byte gen1_debug_box_data[0x462] = {
|
||||
|
|
|
|||
|
|
@ -139,22 +139,29 @@ void populate_lang_buttons()
|
|||
void populate_game_buttons()
|
||||
{
|
||||
game_select_jpn.clear_vector();
|
||||
game_select_jpn.add_button(Button(button_red_green_left, button_red_green_right, 64), RED_GREEN_ID);
|
||||
game_select_jpn.set_rows_and_columns(3, 3);
|
||||
game_select_jpn.add_button(Button(button_green_left, button_green_right, 64), GREEN_ID);
|
||||
game_select_jpn.add_button(Button(button_red_left, button_red_right, 64), RED_ID);
|
||||
game_select_jpn.add_button(Button(button_blue_left, button_blue_right, 64), BLUE_ID);
|
||||
game_select_jpn.add_button(Button(button_yellow_left, button_yellow_right, 64), YELLOW_ID);
|
||||
game_select_jpn.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
|
||||
game_select_jpn.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
|
||||
game_select_jpn.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
|
||||
game_select_jpn.add_button(Button(button_crystal_left, button_crystal_right, 64), CRYSTAL_ID);
|
||||
game_select_jpn.set_xy_min_max(48, 240, 0, 120);
|
||||
game_select_jpn.set_xy_min_max(32, 240, 0, 120);
|
||||
|
||||
game_select_kor.clear_vector();
|
||||
game_select_kor.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
|
||||
game_select_kor.set_rows_and_columns(1, 2);
|
||||
game_select_kor.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
|
||||
game_select_kor.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
|
||||
game_select_kor.set_xy_min_max(48, 240, 0, 120);
|
||||
|
||||
game_select_def.clear_vector();
|
||||
game_select_def.set_rows_and_columns(2, 2);
|
||||
game_select_def.add_button(Button(button_red_blue_left, button_red_blue_right, 64), RED_BLUE_ID);
|
||||
game_select_def.set_rows_and_columns(3, 2);
|
||||
game_select_def.add_button(Button(button_red_left, button_red_right, 64), RED_ID);
|
||||
game_select_def.add_button(Button(button_blue_left, button_blue_right, 64), RED_ID); // red and blue are identical, so we just say red
|
||||
game_select_def.add_button(Button(button_yellow_left, button_yellow_right, 64), YELLOW_ID);
|
||||
game_select_def.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
|
||||
game_select_def.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
|
||||
game_select_def.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
|
||||
game_select_def.add_button(Button(button_crystal_left, button_crystal_right, 64), CRYSTAL_ID);
|
||||
game_select_def.set_xy_min_max(48, 240, 0, 120);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,16 +119,18 @@ OBJ_ATTR *btn_lang_ger = &obj_buffer[num_sprites++];
|
|||
OBJ_ATTR *btn_lang_spa = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *btn_lang_kor = &obj_buffer[num_sprites++];
|
||||
|
||||
OBJ_ATTR *button_red_green_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_red_green_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_green_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_green_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_blue_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_blue_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_red_blue_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_red_blue_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_red_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_red_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_yellow_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_yellow_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_gold_silver_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_gold_silver_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_gold_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_gold_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_silver_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_silver_right = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_crystal_left = &obj_buffer[num_sprites++];
|
||||
OBJ_ATTR *button_crystal_right = &obj_buffer[num_sprites++];
|
||||
|
||||
|
|
@ -221,16 +223,18 @@ void load_temp_sprites(int sprite_batch_id)
|
|||
break;
|
||||
|
||||
case SPRITE_BATCH_GAMES:
|
||||
load_sprite(button_red_green_left, button_red_green_leftTiles, button_red_green_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_red_green_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_green_left, button_green_leftTiles, button_green_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_green_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_blue_left, button_blue_leftTiles, button_blue_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_blue_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_red_blue_left, button_red_blue_leftTiles, button_red_blue_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_red_blue_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_red_left, button_red_leftTiles, button_red_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_red_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_yellow_left, button_yellow_leftTiles, button_yellow_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_yellow_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_gold_silver_left, button_gold_silver_leftTiles, button_gold_silver_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_gold_silver_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_gold_left, button_gold_leftTiles, button_gold_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_gold_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_silver_left, button_silver_leftTiles, button_silver_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_silver_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
load_sprite(button_crystal_left, button_crystal_leftTiles, button_crystal_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
|
||||
load_sprite(button_crystal_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
|
||||
# 0x10
|
||||
0xFD, 0xFD, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0xFD, 0xFD, 0xB4, 0xC7, 0xFF, 0x3E, 0x05, 0xD7, 0xCD, 0x0C, 0x4E, 0xC3, 0x50, 0x01, 0x00, 0x00,
|
||||
# 0x20
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x30
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x40
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x50
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x60
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x70
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x80
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x90
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xA0
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xB0
|
||||
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xC0
|
||||
0x80, 0x80, 0x80, 0xD6, 0xC5, 0xFF, 0xFF, 0xFF, 0x3E, 0x03, 0xD7, 0xCD, 0xD8, 0x63, 0x3E, 0x05,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xD0
|
||||
0xD7, 0xCD, 0xF6, 0x4D, 0xC3, 0xB0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xE0
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0xF0
|
||||
|
|
@ -57,21 +57,21 @@
|
|||
# 0x1C0
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x1D0
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFF, 0xCD, 0xE2,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFF, 0xCD, 0xDB,
|
||||
# 0x1E0
|
||||
0x0E, 0x21, 0x2E, 0xC4, 0x06, 0x03, 0x0E, 0x0E, 0x3E, 0x0A, 0xD7, 0xCD, 0x88, 0x4D, 0x21, 0x43,
|
||||
0x0F, 0x21, 0x2E, 0xC4, 0x06, 0x03, 0x0E, 0x0E, 0x3E, 0x0A, 0xD7, 0xCD, 0xEF, 0x4E, 0x21, 0x43,
|
||||
# 0x1F0
|
||||
0xC4, 0x11, 0x7A, 0xC6, 0xCD, 0x74, 0x0F, 0x21, 0xCD, 0xFF, 0x36, 0x02, 0x3E, 0x01, 0xCD, 0xE1,
|
||||
0xC4, 0x11, 0x7A, 0xC6, 0xCD, 0x78, 0x10, 0x21, 0xCB, 0xFF, 0x36, 0x02, 0x3E, 0x01, 0xCD, 0xE1,
|
||||
# 0x200
|
||||
0x30, 0x21, 0x6B, 0xAD, 0x36, 0xFD, 0x11, 0x6A, 0xAD, 0x01, 0x50, 0x04, 0xCD, 0x10, 0x07, 0x21,
|
||||
0x30, 0x21, 0x0F, 0xAD, 0x36, 0xFD, 0x11, 0x0E, 0xAD, 0x01, 0x50, 0x04, 0xCD, 0x5F, 0x07, 0x21,
|
||||
# 0x210
|
||||
0xCD, 0xFF, 0x36, 0x02, 0x21, 0x54, 0x06, 0x11, 0x51, 0xC6, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00,
|
||||
0xCB, 0xFF, 0x36, 0x02, 0x21, 0x70, 0x07, 0x11, 0x51, 0xC6, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00,
|
||||
# 0x220
|
||||
0x21, 0x08, 0xD0, 0x36, 0x01, 0xFA, 0x50, 0xC6, 0x5F, 0x16, 0x00, 0x21, 0x51, 0xC6, 0x19, 0x3C,
|
||||
0x21, 0x0B, 0xD1, 0x36, 0x01, 0xFA, 0x50, 0xC6, 0x5F, 0x16, 0x00, 0x21, 0x51, 0xC6, 0x19, 0x3C,
|
||||
# 0x230
|
||||
0xEA, 0x50, 0xC6, 0xFA, 0x6C, 0xAD, 0x47, 0x2A, 0xFE, 0xFF, 0x28, 0x0F, 0xB8, 0x30, 0xE6, 0x21,
|
||||
0xEA, 0x50, 0xC6, 0xFA, 0x10, 0xAD, 0x47, 0x2A, 0xFE, 0xFF, 0x28, 0x0F, 0xB8, 0x30, 0xE6, 0x21,
|
||||
# 0x240
|
||||
0x05, 0xD0, 0x77, 0x3E, 0x03, 0xD7, 0xCD, 0x3F, 0x60, 0x18, 0xDA, 0xC3, 0xB6, 0xC7, 0x00, 0x00,
|
||||
0x09, 0xD1, 0x77, 0x3E, 0x03, 0xD7, 0xCD, 0x39, 0x60, 0x18, 0xDA, 0xC3, 0xB4, 0xC7, 0x00, 0x00,
|
||||
# 0x250
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17,
|
||||
# 0x260
|
||||
|
|
|
|||
1
updateSYM.bat
Normal file
|
|
@ -0,0 +1 @@
|
|||
nm --size-sort Pokemon_Mirror_mb.elf > Pokemon_Mirror_mb.sym
|
||||