Merge branch 'master' of https://github.com/pret/pokeemerald
This commit is contained in:
+222
-229
File diff suppressed because it is too large
Load Diff
+28
-27
@@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "sprite.h"
|
||||
#include "contest.h"
|
||||
#include "m4a.h"
|
||||
@@ -67,7 +68,7 @@ static void ScriptCmd_return(void);
|
||||
static void ScriptCmd_setarg(void);
|
||||
static void ScriptCmd_choosetwoturnanim(void);
|
||||
static void ScriptCmd_jumpifmoveturn(void);
|
||||
static void ScriptCmd_jump(void);
|
||||
static void ScriptCmd_goto(void);
|
||||
static void ScriptCmd_fadetobg(void);
|
||||
static void ScriptCmd_restorebg(void);
|
||||
static void ScriptCmd_waitbgfadeout(void);
|
||||
@@ -156,7 +157,7 @@ static void (* const sScriptCmdTable[])(void) =
|
||||
ScriptCmd_setarg,
|
||||
ScriptCmd_choosetwoturnanim,
|
||||
ScriptCmd_jumpifmoveturn,
|
||||
ScriptCmd_jump,
|
||||
ScriptCmd_goto,
|
||||
ScriptCmd_fadetobg,
|
||||
ScriptCmd_restorebg,
|
||||
ScriptCmd_waitbgfadeout,
|
||||
@@ -605,7 +606,7 @@ static void ScriptCmd_monbg(void)
|
||||
sBattleAnimScriptPtr++;
|
||||
|
||||
animBank = sBattleAnimScriptPtr[0];
|
||||
if (animBank & ANIM_BANK_TARGET)
|
||||
if (animBank & ANIM_TARGET)
|
||||
bank = gAnimBankTarget;
|
||||
else
|
||||
bank = gAnimBankAttacker;
|
||||
@@ -862,12 +863,12 @@ static void ScriptCmd_clearmonbg(void)
|
||||
sBattleAnimScriptPtr++;
|
||||
animBankId = sBattleAnimScriptPtr[0];
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER)
|
||||
animBankId = ANIM_BANK_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_BANK_TARGET)
|
||||
animBankId = ANIM_BANK_DEF_PARTNER;
|
||||
if (animBankId == ANIM_ATTACKER)
|
||||
animBankId = ANIM_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_TARGET)
|
||||
animBankId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER)
|
||||
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
|
||||
bank = gAnimBankAttacker;
|
||||
else
|
||||
bank = gAnimBankTarget;
|
||||
@@ -924,12 +925,12 @@ static void ScriptCmd_monbg_22(void)
|
||||
|
||||
animBankId = sBattleAnimScriptPtr[0];
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER)
|
||||
animBankId = ANIM_BANK_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_BANK_TARGET)
|
||||
animBankId = ANIM_BANK_DEF_PARTNER;
|
||||
if (animBankId == ANIM_ATTACKER)
|
||||
animBankId = ANIM_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_TARGET)
|
||||
animBankId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER)
|
||||
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
|
||||
bank = gAnimBankAttacker;
|
||||
else
|
||||
bank = gAnimBankTarget;
|
||||
@@ -969,12 +970,12 @@ static void ScriptCmd_clearmonbg_23(void)
|
||||
sBattleAnimScriptPtr++;
|
||||
animBankId = sBattleAnimScriptPtr[0];
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER)
|
||||
animBankId = ANIM_BANK_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_BANK_TARGET)
|
||||
animBankId = ANIM_BANK_DEF_PARTNER;
|
||||
if (animBankId == ANIM_ATTACKER)
|
||||
animBankId = ANIM_ATK_PARTNER;
|
||||
else if (animBankId == ANIM_TARGET)
|
||||
animBankId = ANIM_DEF_PARTNER;
|
||||
|
||||
if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER)
|
||||
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
|
||||
bank = gAnimBankAttacker;
|
||||
else
|
||||
bank = gAnimBankTarget;
|
||||
@@ -1099,7 +1100,7 @@ static void ScriptCmd_jumpifmoveturn(void)
|
||||
sBattleAnimScriptPtr += 4;
|
||||
}
|
||||
|
||||
static void ScriptCmd_jump(void)
|
||||
static void ScriptCmd_goto(void)
|
||||
{
|
||||
sBattleAnimScriptPtr++;
|
||||
sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
|
||||
@@ -1699,7 +1700,7 @@ static void ScriptCmd_monbgprio_28(void)
|
||||
wantedBank = sBattleAnimScriptPtr[1];
|
||||
sBattleAnimScriptPtr += 2;
|
||||
|
||||
if (wantedBank != ANIM_BANK_ATTACKER)
|
||||
if (wantedBank != ANIM_ATTACKER)
|
||||
bank = gAnimBankTarget;
|
||||
else
|
||||
bank = gAnimBankAttacker;
|
||||
@@ -1732,7 +1733,7 @@ static void ScriptCmd_monbgprio_2A(void)
|
||||
sBattleAnimScriptPtr += 2;
|
||||
if (GetBankSide(gAnimBankAttacker) != GetBankSide(gAnimBankTarget))
|
||||
{
|
||||
if (wantedBank != ANIM_BANK_ATTACKER)
|
||||
if (wantedBank != ANIM_ATTACKER)
|
||||
bank = gAnimBankTarget;
|
||||
else
|
||||
bank = gAnimBankAttacker;
|
||||
@@ -1779,15 +1780,15 @@ static void ScriptCmd_doublebattle_2D(void)
|
||||
if (!IsContest() && IsDoubleBattle()
|
||||
&& GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget))
|
||||
{
|
||||
if (wantedBank == ANIM_BANK_ATTACKER)
|
||||
if (wantedBank == ANIM_ATTACKER)
|
||||
{
|
||||
r4 = sub_80A8364(gAnimBankAttacker);
|
||||
spriteId = GetAnimBankSpriteId(0);
|
||||
spriteId = GetAnimBankSpriteId(ANIM_ATTACKER);
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 = sub_80A8364(gAnimBankTarget);
|
||||
spriteId = GetAnimBankSpriteId(1);
|
||||
spriteId = GetAnimBankSpriteId(ANIM_TARGET);
|
||||
}
|
||||
if (spriteId != 0xFF)
|
||||
{
|
||||
@@ -1814,15 +1815,15 @@ static void ScriptCmd_doublebattle_2E(void)
|
||||
if (!IsContest() && IsDoubleBattle()
|
||||
&& GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget))
|
||||
{
|
||||
if (wantedBank == ANIM_BANK_ATTACKER)
|
||||
if (wantedBank == ANIM_ATTACKER)
|
||||
{
|
||||
r4 = sub_80A8364(gAnimBankAttacker);
|
||||
spriteId = GetAnimBankSpriteId(0);
|
||||
spriteId = GetAnimBankSpriteId(ANIM_ATTACKER);
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 = sub_80A8364(gAnimBankTarget);
|
||||
spriteId = GetAnimBankSpriteId(1);
|
||||
spriteId = GetAnimBankSpriteId(ANIM_TARGET);
|
||||
}
|
||||
|
||||
if (spriteId != 0xFF && r4 == 2)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "recorded_battle.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "recorded_battle.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_interface.h"
|
||||
#include "main.h"
|
||||
#include "malloc.h"
|
||||
@@ -39,8 +40,8 @@ extern struct MusicPlayerInfo gMPlay_BGM;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gUnknown_0831C604[];
|
||||
extern const u8 * const gUnknown_082C9320[];
|
||||
extern const u8 * const gUnknown_082C937C[];
|
||||
extern const u8 * const gBattleAnims_VariousTable[];
|
||||
extern const u8 * const gBattleAnims_Special[];
|
||||
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||
extern const struct CompressedSpriteSheet gMonBackPicTable[];
|
||||
extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
|
||||
@@ -414,7 +415,7 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
|
||||
else if (status & STATUS2_NIGHTMARE)
|
||||
LaunchStatusAnimation(gActiveBank, B_ANIM_STATUS_NIGHTMARE);
|
||||
else if (status & STATUS2_WRAPPED)
|
||||
LaunchStatusAnimation(gActiveBank, B_ANIM_STATUS_WRAPPED);
|
||||
LaunchStatusAnimation(gActiveBank, B_ANIM_STATUS_WRAPPED); // this animation doesn't actually exist
|
||||
else // no animation
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive = 0;
|
||||
}
|
||||
@@ -448,7 +449,7 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank,
|
||||
gAnimBankAttacker = atkBank;
|
||||
gAnimBankTarget = defBank;
|
||||
gBattleSpritesDataPtr->animationData->animArg = argument;
|
||||
LaunchBattleAnimation(gUnknown_082C9320, tableId, FALSE);
|
||||
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 1;
|
||||
@@ -492,7 +493,7 @@ void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tab
|
||||
|
||||
gAnimBankAttacker = atkBank;
|
||||
gAnimBankTarget = defBank;
|
||||
LaunchBattleAnimation(gUnknown_082C937C, tableId, FALSE);
|
||||
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 1;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "constants/species.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "text.h"
|
||||
#include "sound.h"
|
||||
#include "pokedex.h"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "pokemon.h"
|
||||
#include "constants/species.h"
|
||||
#include "item.h"
|
||||
|
||||
+36
-36
@@ -81,50 +81,50 @@ static const u8 *const gUnknown_08618160[] = {
|
||||
Unknown_08617EA3
|
||||
};
|
||||
|
||||
extern const u8 gUnknown_08DD87C0[];
|
||||
extern const u8 gUnknown_08DD8EE0[];
|
||||
extern const u8 gUnknown_08DD8780[];
|
||||
extern const u8 gUnknown_08DD90E0[];
|
||||
extern const u8 gUnknown_08DD9718[];
|
||||
extern const u8 gUnknown_08DD9080[];
|
||||
extern const u8 gUnknown_08DD98B4[];
|
||||
extern const u8 gUnknown_08DD9E58[];
|
||||
extern const u8 gUnknown_08DD9874[];
|
||||
extern const u8 gUnknown_08DDA02C[];
|
||||
extern const u8 gUnknown_08DDA63C[];
|
||||
extern const u8 gUnknown_08DD9FEC[];
|
||||
extern const u8 gUnknown_08DDA840[];
|
||||
extern const u8 gUnknown_08DDAE40[];
|
||||
extern const u8 gUnknown_08DDA800[];
|
||||
extern const u8 gUnknown_08DDB020[];
|
||||
extern const u8 gUnknown_08DDB2C4[];
|
||||
extern const u8 gUnknown_08DDAFE0[];
|
||||
extern const u8 gBerryFixGameboy_Gfx[];
|
||||
extern const u8 gBerryFixGameboy_Tilemap[];
|
||||
extern const u8 gBerryFixGameboy_Pal[];
|
||||
extern const u8 gBerryFixGameboyLogo_Gfx[];
|
||||
extern const u8 gBerryFixGameboyLogo_Tilemap[];
|
||||
extern const u8 gBerryFixGameboyLogo_Pal[];
|
||||
extern const u8 gBerryFixGbaTransfer_Gfx[];
|
||||
extern const u8 gBerryFixGbaTransfer_Tilemap[];
|
||||
extern const u8 gBerryFixGbaTransfer_Pal[];
|
||||
extern const u8 gBerryFixGbaTransferHighlight_Gfx[];
|
||||
extern const u8 gBerryFixGbaTransferHighlight_Tilemap[];
|
||||
extern const u8 gBerryFixGbaTransferHighlight_Pal[];
|
||||
extern const u8 gBerryFixGbaTransferError_Gfx[];
|
||||
extern const u8 gBerryFixGbaTransferError_Tilemap[];
|
||||
extern const u8 gBerryFixGbaTransferError_Pal[];
|
||||
extern const u8 gBerryFixWindow_Gfx[];
|
||||
extern const u8 gBerryFixWindow_Tilemap[];
|
||||
extern const u8 gBerryFixWindow_Pal[];
|
||||
|
||||
static const u8 *const gUnknown_08618178[][3] = {
|
||||
{
|
||||
gUnknown_08DD87C0,
|
||||
gUnknown_08DD8EE0,
|
||||
gUnknown_08DD8780
|
||||
gBerryFixGameboy_Gfx,
|
||||
gBerryFixGameboy_Tilemap,
|
||||
gBerryFixGameboy_Pal
|
||||
}, {
|
||||
gUnknown_08DD90E0,
|
||||
gUnknown_08DD9718,
|
||||
gUnknown_08DD9080
|
||||
gBerryFixGameboyLogo_Gfx,
|
||||
gBerryFixGameboyLogo_Tilemap,
|
||||
gBerryFixGameboyLogo_Pal
|
||||
}, {
|
||||
gUnknown_08DD98B4,
|
||||
gUnknown_08DD9E58,
|
||||
gUnknown_08DD9874
|
||||
gBerryFixGbaTransfer_Gfx,
|
||||
gBerryFixGbaTransfer_Tilemap,
|
||||
gBerryFixGbaTransfer_Pal
|
||||
}, {
|
||||
gUnknown_08DDA02C,
|
||||
gUnknown_08DDA63C,
|
||||
gUnknown_08DD9FEC
|
||||
gBerryFixGbaTransferHighlight_Gfx,
|
||||
gBerryFixGbaTransferHighlight_Tilemap,
|
||||
gBerryFixGbaTransferHighlight_Pal
|
||||
}, {
|
||||
gUnknown_08DDA840,
|
||||
gUnknown_08DDAE40,
|
||||
gUnknown_08DDA800
|
||||
gBerryFixGbaTransferError_Gfx,
|
||||
gBerryFixGbaTransferError_Tilemap,
|
||||
gBerryFixGbaTransferError_Pal
|
||||
}, {
|
||||
gUnknown_08DDB020,
|
||||
gUnknown_08DDB2C4,
|
||||
gUnknown_08DDAFE0
|
||||
gBerryFixWindow_Gfx,
|
||||
gBerryFixWindow_Tilemap,
|
||||
gBerryFixWindow_Pal
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
+1078
File diff suppressed because it is too large
Load Diff
+65
-365
@@ -29,76 +29,92 @@ void ClearDma3Requests(void)
|
||||
gDma3ManagerLocked = FALSE;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
// Maximum amount of data will will transfer in one operation
|
||||
#define DMA_MAX_BLOCK_SIZE 0x1000
|
||||
|
||||
#define Dma3CopyLarge_(src, dest, size, bit) \
|
||||
{ \
|
||||
const void *_src = src; \
|
||||
void *_dest = dest; \
|
||||
u32 _size = size; \
|
||||
while (1) \
|
||||
{ \
|
||||
if (_size <= DMA_MAX_BLOCK_SIZE) \
|
||||
{ \
|
||||
DmaCopy##bit(3, _src, _dest, _size); \
|
||||
break; \
|
||||
} \
|
||||
DmaCopy##bit(3, _src, _dest, DMA_MAX_BLOCK_SIZE); \
|
||||
_src += DMA_MAX_BLOCK_SIZE; \
|
||||
_dest += DMA_MAX_BLOCK_SIZE; \
|
||||
_size -= DMA_MAX_BLOCK_SIZE; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16)
|
||||
#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32)
|
||||
|
||||
#define Dma3FillLarge_(value, dest, size, bit) \
|
||||
{ \
|
||||
void *_dest = dest; \
|
||||
u32 _size = size; \
|
||||
while (1) \
|
||||
{ \
|
||||
if (_size <= DMA_MAX_BLOCK_SIZE) \
|
||||
{ \
|
||||
DmaFill##bit(3, value, _dest, _size); \
|
||||
break; \
|
||||
} \
|
||||
DmaFill##bit(3, value, _dest, DMA_MAX_BLOCK_SIZE); \
|
||||
_dest += DMA_MAX_BLOCK_SIZE; \
|
||||
_size -= DMA_MAX_BLOCK_SIZE; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16)
|
||||
#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32)
|
||||
|
||||
|
||||
void ProcessDma3Requests(void)
|
||||
{
|
||||
// NOTE: the fillerA member of the DMA struct is actually u32 value;
|
||||
u16 total_size;
|
||||
u16 totalSize;
|
||||
|
||||
if (gDma3ManagerLocked)
|
||||
return;
|
||||
|
||||
total_size = 0;
|
||||
totalSize = 0;
|
||||
|
||||
// as long as there are DMA requests to process (unless size or vblank is an issue), do not exit
|
||||
while (gDma3Requests[gDma3RequestCursor].size)
|
||||
while (gDma3Requests[gDma3RequestCursor].size != 0)
|
||||
{
|
||||
total_size += gDma3Requests[gDma3RequestCursor].size;
|
||||
totalSize += gDma3Requests[gDma3RequestCursor].size;
|
||||
|
||||
if (total_size > 0xA000)
|
||||
if (totalSize > 0xA000)
|
||||
return; // don't do too much at once
|
||||
|
||||
if (REG_VCOUNT > 224)
|
||||
return;// we're about to leave vblank, stop
|
||||
if (*(u8 *)REG_ADDR_VCOUNT > 224)
|
||||
return; // we're about to leave vblank, stop
|
||||
|
||||
switch (gDma3Requests[gDma3RequestCursor].mode)
|
||||
{
|
||||
case 1: // regular 32-bit copy
|
||||
// _08000C8C
|
||||
if(gDma3Requests[gDma3RequestCursor].size <= 0x1000)
|
||||
{
|
||||
DmaCopy32(3, gDma3Requests[gDma3RequestCursor].src, gDma3Requests[gDma3RequestCursor].dest, gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
}
|
||||
while (gDma3Requests[gDma3RequestCursor].size > 0x1000)
|
||||
{
|
||||
DmaCopy32(3, gDma3Requests[gDma3RequestCursor].src, gDma3Requests[gDma3RequestCursor].dest, 0x1000);
|
||||
gDma3Requests[gDma3RequestCursor].src += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].dest += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].size -= 0x1000;
|
||||
}
|
||||
DmaCopy32(3, gDma3Requests[gDma3RequestCursor].src, gDma3Requests[gDma3RequestCursor].dest, gDma3Requests[gDma3RequestCursor].size);
|
||||
Dma3CopyLarge32_(gDma3Requests[gDma3RequestCursor].src,
|
||||
gDma3Requests[gDma3RequestCursor].dest,
|
||||
gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
case 2: // repeat a single 32-bit value across RAM
|
||||
// _08000CD0
|
||||
while (gDma3Requests[gDma3RequestCursor].size > 0x1000)
|
||||
{
|
||||
DmaFill32(3, gDma3Requests[gDma3RequestCursor].value, gDma3Requests[gDma3RequestCursor].dest, 0x1000);
|
||||
gDma3Requests[gDma3RequestCursor].dest += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].size -= 0x1000;
|
||||
}
|
||||
DmaFill32(3, gDma3Requests[gDma3RequestCursor].value, gDma3Requests[gDma3RequestCursor].dest, gDma3Requests[gDma3RequestCursor].size);
|
||||
Dma3FillLarge32_(gDma3Requests[gDma3RequestCursor].value,
|
||||
gDma3Requests[gDma3RequestCursor].dest,
|
||||
gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
case 3: // regular 16-bit copy
|
||||
// _08000D3C
|
||||
while (gDma3Requests[gDma3RequestCursor].size > 0x1000)
|
||||
{
|
||||
DmaCopy16(3, gDma3Requests[gDma3RequestCursor].src, gDma3Requests[gDma3RequestCursor].dest, 0x1000);
|
||||
gDma3Requests[gDma3RequestCursor].src += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].dest += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].size -= 0x1000;
|
||||
}
|
||||
DmaCopy16(3, gDma3Requests[gDma3RequestCursor].src, gDma3Requests[gDma3RequestCursor].dest, gDma3Requests[gDma3RequestCursor].size);
|
||||
Dma3CopyLarge16_(gDma3Requests[gDma3RequestCursor].src,
|
||||
gDma3Requests[gDma3RequestCursor].dest,
|
||||
gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
case 4: // repeat a single 16-bit value across RAM
|
||||
// _08000D88
|
||||
while (gDma3Requests[gDma3RequestCursor].size > 0x1000)
|
||||
{
|
||||
DmaFill16(3, gDma3Requests[gDma3RequestCursor].value, gDma3Requests[gDma3RequestCursor].dest, 0x1000);
|
||||
gDma3Requests[gDma3RequestCursor].dest += 0x1000;
|
||||
gDma3Requests[gDma3RequestCursor].size -= 0x1000;
|
||||
}
|
||||
DmaFill16(3, gDma3Requests[gDma3RequestCursor].value, gDma3Requests[gDma3RequestCursor].dest, gDma3Requests[gDma3RequestCursor].size);
|
||||
Dma3FillLarge16_(gDma3Requests[gDma3RequestCursor].value,
|
||||
gDma3Requests[gDma3RequestCursor].dest,
|
||||
gDma3Requests[gDma3RequestCursor].size);
|
||||
break;
|
||||
}
|
||||
gDma3Requests[gDma3RequestCursor].src = NULL;
|
||||
@@ -112,322 +128,6 @@ void ProcessDma3Requests(void)
|
||||
gDma3RequestCursor = 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void ProcessDma3Requests(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0xC\n\
|
||||
ldr r0, =gDma3ManagerLocked\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08000C06\n\
|
||||
b _08000E46\n\
|
||||
_08000C06:\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
ldr r1, =gDma3Requests\n\
|
||||
ldr r2, =gDma3RequestCursor\n\
|
||||
ldrb r0, [r2]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r0, [r0, 0x8]\n\
|
||||
mov r12, r2\n\
|
||||
cmp r0, 0\n\
|
||||
bne _08000C1E\n\
|
||||
b _08000E46\n\
|
||||
_08000C1E:\n\
|
||||
mov r8, r1\n\
|
||||
adds r1, 0x4\n\
|
||||
mov r10, r1\n\
|
||||
movs r6, 0x80\n\
|
||||
lsls r6, 5\n\
|
||||
ldr r7, =0x040000D4 @REG_DMA3\n\
|
||||
movs r2, 0\n\
|
||||
mov r9, r2\n\
|
||||
_08000C2E:\n\
|
||||
mov r3, r12 @ gDma3RequestCursor\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r5, r0, 4\n\
|
||||
mov r0, r8 @ gDma3Requests\n\
|
||||
adds r1, r5, r0 @ gDma3Requests[gDma3RequestCursor]\n\
|
||||
ldrh r0, [r1, 0x8] @ gDma3Requests[gDma3RequestCursor].size\n\
|
||||
ldr r2, [sp, 0x8]\n\
|
||||
adds r0, r2, r0\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
movs r0, 0xA0\n\
|
||||
lsls r0, 8\n\
|
||||
ldr r3, [sp, 0x8]\n\
|
||||
cmp r3, r0\n\
|
||||
bls _08000C50\n\
|
||||
b _08000E46\n\
|
||||
_08000C50:\n\
|
||||
ldr r0, =0x04000006 @REG_VCOUNT\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0xE0\n\
|
||||
bls _08000C5A\n\
|
||||
b _08000E46\n\
|
||||
_08000C5A:\n\
|
||||
ldrh r0, [r1, 0xA]\n\
|
||||
cmp r0, 0x2\n\
|
||||
beq _08000CD0\n\
|
||||
cmp r0, 0x2\n\
|
||||
bgt _08000C80\n\
|
||||
cmp r0, 0x1\n\
|
||||
beq _08000C8C\n\
|
||||
b _08000DF0\n\
|
||||
.pool\n\
|
||||
_08000C80:\n\
|
||||
cmp r0, 0x3\n\
|
||||
beq _08000D3C\n\
|
||||
cmp r0, 0x4\n\
|
||||
bne _08000C8A\n\
|
||||
b _08000D88\n\
|
||||
_08000C8A:\n\
|
||||
b _08000DF0\n\
|
||||
_08000C8C:\n\
|
||||
ldr r3, [r1]\n\
|
||||
mov r2, r10\n\
|
||||
adds r0, r5, r2\n\
|
||||
ldr r2, [r0]\n\
|
||||
ldrh r1, [r1, 0x8]\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000CA6\n\
|
||||
str r3, [r7]\n\
|
||||
str r2, [r7, 0x4]\n\
|
||||
lsrs r0, r1, 2\n\
|
||||
movs r1, 0x84\n\
|
||||
lsls r1, 24\n\
|
||||
b _08000DAA\n\
|
||||
_08000CA6:\n\
|
||||
ldr r4, =0x040000D4 @REG_DMA3\n\
|
||||
str r3, [r4]\n\
|
||||
str r2, [r4, 0x4]\n\
|
||||
ldr r0, =0x84000400\n\
|
||||
str r0, [r4, 0x8]\n\
|
||||
ldr r0, [r4, 0x8]\n\
|
||||
adds r3, r6\n\
|
||||
adds r2, r6\n\
|
||||
subs r1, r6\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000CA6\n\
|
||||
str r3, [r4]\n\
|
||||
str r2, [r4, 0x4]\n\
|
||||
lsrs r0, r1, 2\n\
|
||||
movs r1, 0x84\n\
|
||||
lsls r1, 24\n\
|
||||
b _08000D76\n\
|
||||
.pool\n\
|
||||
_08000CD0:\n\
|
||||
mov r3, r10\n\
|
||||
adds r0, r5, r3\n\
|
||||
ldr r4, [r0]\n\
|
||||
ldrh r1, [r1, 0x8]\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000CF4\n\
|
||||
mov r0, r8\n\
|
||||
adds r0, 0xC\n\
|
||||
adds r0, r5, r0\n\
|
||||
ldr r0, [r0]\n\
|
||||
str r0, [sp]\n\
|
||||
mov r5, sp\n\
|
||||
str r5, [r7]\n\
|
||||
str r4, [r7, 0x4]\n\
|
||||
lsrs r0, r1, 2\n\
|
||||
movs r1, 0x85\n\
|
||||
lsls r1, 24\n\
|
||||
b _08000DAA\n\
|
||||
_08000CF4:\n\
|
||||
mov r2, r12\n\
|
||||
ldrb r0, [r2]\n\
|
||||
lsls r0, 4\n\
|
||||
mov r5, r8\n\
|
||||
adds r5, 0xC\n\
|
||||
adds r0, r5\n\
|
||||
ldr r0, [r0]\n\
|
||||
str r0, [sp]\n\
|
||||
ldr r3, =0x040000D4 @REG_DMA3\n\
|
||||
mov r0, sp\n\
|
||||
str r0, [r3]\n\
|
||||
str r4, [r3, 0x4]\n\
|
||||
ldr r0, =0x85000400\n\
|
||||
str r0, [r3, 0x8]\n\
|
||||
ldr r0, [r3, 0x8]\n\
|
||||
adds r4, r6\n\
|
||||
subs r1, r6\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000CF4\n\
|
||||
ldrb r0, [r2]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r5\n\
|
||||
ldr r0, [r0]\n\
|
||||
str r0, [sp]\n\
|
||||
mov r2, sp\n\
|
||||
str r2, [r3]\n\
|
||||
str r4, [r3, 0x4]\n\
|
||||
lsrs r0, r1, 2\n\
|
||||
movs r1, 0x85\n\
|
||||
lsls r1, 24\n\
|
||||
b _08000DEA\n\
|
||||
.pool\n\
|
||||
_08000D3C:\n\
|
||||
ldr r3, [r1]\n\
|
||||
mov r2, r10\n\
|
||||
adds r0, r5, r2\n\
|
||||
ldr r2, [r0]\n\
|
||||
ldrh r1, [r1, 0x8]\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000D56\n\
|
||||
str r3, [r7]\n\
|
||||
str r2, [r7, 0x4]\n\
|
||||
lsrs r0, r1, 1\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 24\n\
|
||||
b _08000DAA\n\
|
||||
_08000D56:\n\
|
||||
ldr r4, =0x040000D4 @REG_DMA3\n\
|
||||
str r3, [r4]\n\
|
||||
str r2, [r4, 0x4]\n\
|
||||
ldr r0, =0x80000800\n\
|
||||
str r0, [r4, 0x8]\n\
|
||||
ldr r0, [r4, 0x8]\n\
|
||||
adds r3, r6\n\
|
||||
adds r2, r6\n\
|
||||
subs r1, r6\n\
|
||||
cmp r1, r6\n\
|
||||
bhi _08000D56\n\
|
||||
str r3, [r4]\n\
|
||||
str r2, [r4, 0x4]\n\
|
||||
lsrs r0, r1, 1\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 24\n\
|
||||
_08000D76:\n\
|
||||
orrs r0, r1\n\
|
||||
str r0, [r4, 0x8]\n\
|
||||
ldr r0, [r4, 0x8]\n\
|
||||
b _08000DF0\n\
|
||||
.pool\n\
|
||||
_08000D88:\n\
|
||||
mov r3, r10\n\
|
||||
adds r0, r5, r3\n\
|
||||
ldr r2, [r0]\n\
|
||||
ldrh r4, [r1, 0x8]\n\
|
||||
add r1, sp, 0x4\n\
|
||||
cmp r4, r6\n\
|
||||
bhi _08000DB2\n\
|
||||
mov r0, r8\n\
|
||||
adds r0, 0xC\n\
|
||||
adds r0, r5, r0\n\
|
||||
ldr r0, [r0]\n\
|
||||
strh r0, [r1]\n\
|
||||
str r1, [r7]\n\
|
||||
str r2, [r7, 0x4]\n\
|
||||
lsrs r0, r4, 1\n\
|
||||
movs r1, 0x81\n\
|
||||
lsls r1, 24\n\
|
||||
_08000DAA:\n\
|
||||
orrs r0, r1\n\
|
||||
str r0, [r7, 0x8]\n\
|
||||
ldr r0, [r7, 0x8]\n\
|
||||
b _08000DF0\n\
|
||||
_08000DB2:\n\
|
||||
mov r5, r12\n\
|
||||
ldrb r0, [r5]\n\
|
||||
lsls r0, 4\n\
|
||||
ldr r3, =gDma3Requests + 0x0C\n\
|
||||
adds r0, r3\n\
|
||||
ldr r0, [r0]\n\
|
||||
strh r0, [r1]\n\
|
||||
ldr r3, =0x040000D4 @REG_DMA3\n\
|
||||
str r1, [r3]\n\
|
||||
str r2, [r3, 0x4]\n\
|
||||
ldr r0, =0x81000800\n\
|
||||
str r0, [r3, 0x8]\n\
|
||||
ldr r0, [r3, 0x8]\n\
|
||||
adds r2, r6\n\
|
||||
subs r4, r6\n\
|
||||
cmp r4, r6\n\
|
||||
bhi _08000DB2\n\
|
||||
ldrb r0, [r5]\n\
|
||||
lsls r0, 4\n\
|
||||
ldr r5, =gDma3Requests + 0x0C\n\
|
||||
adds r0, r5\n\
|
||||
ldr r0, [r0]\n\
|
||||
strh r0, [r1]\n\
|
||||
str r1, [r3]\n\
|
||||
str r2, [r3, 0x4]\n\
|
||||
lsrs r0, r4, 1\n\
|
||||
movs r1, 0x81\n\
|
||||
lsls r1, 24\n\
|
||||
_08000DEA:\n\
|
||||
orrs r0, r1\n\
|
||||
str r0, [r3, 0x8]\n\
|
||||
ldr r0, [r3, 0x8]\n\
|
||||
_08000DF0:\n\
|
||||
ldr r1, =gDma3Requests\n\
|
||||
mov r3, r12\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r1\n\
|
||||
mov r2, r9\n\
|
||||
str r2, [r0]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 4\n\
|
||||
add r0, r10\n\
|
||||
str r2, [r0]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r1\n\
|
||||
movs r4, 0\n\
|
||||
strh r2, [r0, 0x8]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r0, r1\n\
|
||||
mov r5, r9\n\
|
||||
strh r5, [r0, 0xA]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 4\n\
|
||||
adds r1, 0xC\n\
|
||||
adds r0, r1\n\
|
||||
mov r1, r9\n\
|
||||
str r1, [r0]\n\
|
||||
ldrb r0, [r3]\n\
|
||||
adds r0, 0x1\n\
|
||||
strb r0, [r3]\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bge _08000E34\n\
|
||||
strb r4, [r3]\n\
|
||||
_08000E34:\n\
|
||||
mov r2, r12\n\
|
||||
ldrb r0, [r2]\n\
|
||||
lsls r0, 4\n\
|
||||
ldr r3, =gDma3Requests\n\
|
||||
adds r0, r3\n\
|
||||
ldrh r0, [r0, 0x8]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08000E46\n\
|
||||
b _08000C2E\n\
|
||||
_08000E46:\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided");
|
||||
}
|
||||
#endif
|
||||
|
||||
int RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode)
|
||||
{
|
||||
|
||||
+4
-4
@@ -51,8 +51,8 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||
extern const u8 gBattleTextboxTiles[];
|
||||
extern const u8 gBattleTextboxTilemap[];
|
||||
extern const u8 gBattleTextboxPalette[];
|
||||
extern const u16 gUnknown_08DD7300[]; // palette, gameboy advance
|
||||
extern const u32 gUnknown_08DD7360[]; // tileset gameboy advance
|
||||
extern const u16 gTradeGba2_Pal[]; // palette, gameboy advance
|
||||
extern const u32 gTradeGba_Gfx[]; // tileset gameboy advance
|
||||
extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
|
||||
extern const u8 gText_HatchedFromEgg[];
|
||||
extern const u8 gText_NickHatchPrompt[];
|
||||
@@ -548,8 +548,8 @@ static void CB2_EggHatch_0(void)
|
||||
break;
|
||||
case 7:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
|
||||
LoadPalette(gUnknown_08DD7300, 0x10, 0xA0);
|
||||
LoadBgTiles(1, gUnknown_08DD7360, 0x1420, 0);
|
||||
LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
|
||||
LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
gMain.state++;
|
||||
|
||||
@@ -78,7 +78,7 @@ extern void sub_806A068(u16, u8);
|
||||
extern void sub_807F19C(void);
|
||||
extern void sub_807B140(void);
|
||||
extern void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
|
||||
extern void sub_8085784(void);
|
||||
extern void Overworld_PlaySpecialMapMusic(void);
|
||||
extern void sub_81BFA38(struct Pokemon *party, u8 monId, u8 partyCount, void *CB2_ptr, u16 move);
|
||||
extern u8 sub_81C1B94(void);
|
||||
extern void sub_807F1A8(u8 arg0, const u8 *arg1, u8 arg2);
|
||||
@@ -764,7 +764,7 @@ static void Task_EvolutionScene(u8 taskID)
|
||||
if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE))
|
||||
{
|
||||
StopMapMusic();
|
||||
sub_8085784();
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
}
|
||||
|
||||
gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
|
||||
@@ -793,7 +793,7 @@ static void Task_EvolutionScene(u8 taskID)
|
||||
if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE))
|
||||
{
|
||||
StopMapMusic();
|
||||
sub_8085784();
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
}
|
||||
if (!gTasks[taskID].tEvoWasStopped)
|
||||
CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon);
|
||||
|
||||
+2
-2
@@ -3231,7 +3231,7 @@ bool8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Spr
|
||||
|
||||
bool8 sub_8091EC0(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2)
|
||||
if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == 2)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -3410,7 +3410,7 @@ field_object_step(CopyPlayer2, gUnknown_0850DA90)
|
||||
|
||||
bool8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite)
|
||||
{
|
||||
if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2)
|
||||
if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == 2)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#include "global.h"
|
||||
#include "fldeff_teleport.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "party_menu.h"
|
||||
#include "overworld.h"
|
||||
#include "rom6.h"
|
||||
#include "task.h"
|
||||
|
||||
extern bool8 (*gUnknown_03005DB0)(void);
|
||||
extern void (*gUnknown_0203CEEC)(void);
|
||||
|
||||
bool8 SetUpFieldMove_Teleport(void)
|
||||
{
|
||||
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
|
||||
{
|
||||
gUnknown_03005DB0 = FieldCallback_Teleport;
|
||||
gUnknown_0203CEEC = hm_teleport_run_dp02scr;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void hm_teleport_run_dp02scr(void)
|
||||
{
|
||||
Overworld_ResetStateAfterTeleport();
|
||||
FieldEffectStart(FLDEFF_USE_TELEPORT);
|
||||
gFieldEffectArguments[0] = (u32)GetCursorSelectionMonId();
|
||||
}
|
||||
|
||||
bool8 FldEff_UseTeleport(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
gTasks[taskId].data[8] = (u32)sub_817C94C >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_817C94C;
|
||||
SetPlayerAvatarTransitionFlags(1);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_817C94C(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
|
||||
sub_80B7FC8();
|
||||
}
|
||||
|
||||
|
||||
+21
-141
@@ -80,45 +80,15 @@ void SetSaveBlocksPointers(u16 offset)
|
||||
SetDecorationInventoriesPointers();
|
||||
}
|
||||
|
||||
// stuff i used to try and match MoveSaveBlocks_ResetHeap
|
||||
struct SaveBlocksInOne
|
||||
{
|
||||
struct SaveBlock2 sav2;
|
||||
struct SaveBlock1 sav1;
|
||||
struct PokemonStorage sav3;
|
||||
};
|
||||
extern u8 gHeap[];
|
||||
|
||||
extern struct SaveBlocksInOne gHeap;
|
||||
|
||||
#define ewram_addr 0x02000000 // oh no...
|
||||
#define ewram_addr2 0x02000f2c
|
||||
#define ewram_addr3 0x02004cb4
|
||||
|
||||
#define eSaveBlockCopy (*(struct SaveBlocksInOne *)(ewram_addr + 0x0))
|
||||
#define eSaveBlock2Copy (*(struct SaveBlock2 *)((void*)(ewram_addr + 0x0)))
|
||||
#define eSaveBlock1Copy (*(struct SaveBlock1 *)((void*)(ewram_addr + sizeof(struct SaveBlock2))))
|
||||
#define eSaveBlock3Copy (*(struct PokemonStorage *)((void*)(ewram_addr + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1))))
|
||||
|
||||
#ifdef NONMATCHING // this is one devil of a motherfucker
|
||||
/*
|
||||
The reason MoveSaveBlocks_ResetHeap mismatches is due to incorrect memcpys. Various
|
||||
things have been tried, such as: direct struct copys, ewram casts, use of defining
|
||||
the addresses manually, using memcpy anyway, delayed allocation of pointers at
|
||||
the start of function, as seen above and below. Scope declaration has been used to try and
|
||||
reproduce the correct macro thought to be used, but nothing has worked. It is worth
|
||||
noting that at this point that the compiler will delay the allocation of the save block
|
||||
pointers at the beginningto be allocated later: which might matter for matching this.
|
||||
Due to loading shared ewram heap areas directly, it is very likely emerald used ewram
|
||||
defines for this function, but there is no known example of a matching define.
|
||||
In addition, dead code might be present in the form of a runtime variable used
|
||||
to fix the address of the save blocks. This has been tested and is shown to affect
|
||||
the registers as well.
|
||||
*/
|
||||
void MoveSaveBlocks_ResetHeap(void)
|
||||
{
|
||||
void *vblankCB, *hblankCB;
|
||||
u32 encryptionKey;
|
||||
struct SaveBlock1 **sav1Copy = &gSaveBlock1Ptr; // r10;
|
||||
struct SaveBlock2 *saveBlock2Copy;
|
||||
struct SaveBlock1 *saveBlock1Copy;
|
||||
struct PokemonStorage *pokemonStorageCopy;
|
||||
|
||||
// save interrupt functions and turn them off
|
||||
vblankCB = gMain.vblankCallback;
|
||||
@@ -127,22 +97,30 @@ void MoveSaveBlocks_ResetHeap(void)
|
||||
gMain.hblankCallback = NULL;
|
||||
gUnknown_0203CF5C = NULL;
|
||||
|
||||
saveBlock2Copy = (struct SaveBlock2 *)(gHeap);
|
||||
saveBlock1Copy = (struct SaveBlock1 *)(gHeap + sizeof(struct SaveBlock2));
|
||||
pokemonStorageCopy = (struct PokemonStorage *)(gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1));
|
||||
|
||||
// backup the saves.
|
||||
eSaveBlock1Copy = **sav1Copy;
|
||||
eSaveBlock2Copy = *gSaveBlock2Ptr;
|
||||
eSaveBlock3Copy = *gPokemonStoragePtr;
|
||||
*saveBlock2Copy = *gSaveBlock2Ptr;
|
||||
*saveBlock1Copy = *gSaveBlock1Ptr;
|
||||
*pokemonStorageCopy = *gPokemonStoragePtr;
|
||||
|
||||
// change saveblocks' pointers
|
||||
// argument is a sum of the individual trainerId bytes
|
||||
SetSaveBlocksPointers(eSaveBlock2Copy.playerTrainerId[0] + eSaveBlock2Copy.playerTrainerId[1] + eSaveBlock2Copy.playerTrainerId[2] + eSaveBlock2Copy.playerTrainerId[3]);
|
||||
SetSaveBlocksPointers(
|
||||
saveBlock2Copy->playerTrainerId[0] +
|
||||
saveBlock2Copy->playerTrainerId[1] +
|
||||
saveBlock2Copy->playerTrainerId[2] +
|
||||
saveBlock2Copy->playerTrainerId[3]);
|
||||
|
||||
// restore saveblock data since the pointers changed
|
||||
**sav1Copy = eSaveBlock1Copy;
|
||||
*gSaveBlock2Ptr = eSaveBlock2Copy;
|
||||
*gPokemonStoragePtr = eSaveBlock3Copy;
|
||||
*gSaveBlock2Ptr = *saveBlock2Copy;
|
||||
*gSaveBlock1Ptr = *saveBlock1Copy;
|
||||
*gPokemonStoragePtr = *pokemonStorageCopy;
|
||||
|
||||
// heap was destroyed in the copying process, so reset it
|
||||
InitHeap((void*)(0x02000000), 0x1C000);
|
||||
InitHeap(gHeap, HEAP_SIZE);
|
||||
|
||||
// restore interrupt functions
|
||||
gMain.hblankCallback = hblankCB;
|
||||
@@ -153,105 +131,7 @@ void MoveSaveBlocks_ResetHeap(void)
|
||||
ApplyNewEncryptionKeyToAllEncryptedData(encryptionKey);
|
||||
gSaveBlock2Ptr->encryptionKey = encryptionKey;
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void MoveSaveBlocks_ResetHeap(void)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x8\n\
|
||||
ldr r5, =gMain\n\
|
||||
ldr r0, [r5, 0xC]\n\
|
||||
str r0, [sp]\n\
|
||||
ldr r1, [r5, 0x10]\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r5, 0xC]\n\
|
||||
str r0, [r5, 0x10]\n\
|
||||
ldr r1, =gUnknown_0203CF5C\n\
|
||||
str r0, [r1]\n\
|
||||
ldr r4, =0x02000000\n\
|
||||
ldr r0, =gSaveBlock2Ptr\n\
|
||||
ldr r1, [r0]\n\
|
||||
ldr r6, =0x00000f2c\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r2, r6, 0\n\
|
||||
bl memcpy\n\
|
||||
ldr r1, =gSaveBlock1Ptr\n\
|
||||
mov r10, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
ldr r7, =0x00003d88\n\
|
||||
ldr r0, =0x02000f2c\n\
|
||||
adds r2, r7, 0\n\
|
||||
bl memcpy\n\
|
||||
ldr r0, =gPokemonStoragePtr\n\
|
||||
mov r8, r0\n\
|
||||
ldr r1, [r0]\n\
|
||||
ldr r0, =0x000083d0\n\
|
||||
mov r9, r0\n\
|
||||
ldr r0, =0x02004cb4\n\
|
||||
mov r2, r9\n\
|
||||
bl memcpy\n\
|
||||
ldrb r1, [r4, 0xA]\n\
|
||||
ldrb r0, [r4, 0xB]\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r4, 0xC]\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r4, 0xD]\n\
|
||||
adds r0, r1\n\
|
||||
bl SetSaveBlocksPointers\n\
|
||||
ldr r1, =gSaveBlock2Ptr\n\
|
||||
ldr r0, [r1]\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r2, r6, 0\n\
|
||||
bl memcpy\n\
|
||||
mov r1, r10\n\
|
||||
ldr r0, [r1]\n\
|
||||
ldr r1, =0x02000f2c\n\
|
||||
adds r2, r7, 0\n\
|
||||
bl memcpy\n\
|
||||
mov r1, r8\n\
|
||||
ldr r0, [r1]\n\
|
||||
ldr r1, =0x02004cb4\n\
|
||||
mov r2, r9\n\
|
||||
bl memcpy\n\
|
||||
movs r1, 0xE0\n\
|
||||
lsls r1, 9\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl InitHeap\n\
|
||||
ldr r0, [sp, 0x4]\n\
|
||||
str r0, [r5, 0x10]\n\
|
||||
ldr r1, [sp]\n\
|
||||
str r1, [r5, 0xC]\n\
|
||||
bl Random\n\
|
||||
adds r4, r0, 0\n\
|
||||
bl Random\n\
|
||||
lsls r4, 16\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
adds r4, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl ApplyNewEncryptionKeyToAllEncryptedData\n\
|
||||
ldr r1, =gSaveBlock2Ptr\n\
|
||||
ldr r0, [r1]\n\
|
||||
adds r0, 0xAC\n\
|
||||
str r4, [r0]\n\
|
||||
add sp, 0x8\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
u8 sav2_x1_query_bit1(void)
|
||||
{
|
||||
|
||||
+48
-48
@@ -20,42 +20,42 @@
|
||||
#include "malloc.h"
|
||||
#include "easy_chat.h"
|
||||
|
||||
extern const u16 gUnknown_08DBE818[];
|
||||
extern const u16 gUnknown_08DBE838[];
|
||||
extern const u16 gUnknown_08DBE858[];
|
||||
extern const u16 gUnknown_08DBE878[];
|
||||
extern const u16 gUnknown_08DBE898[];
|
||||
extern const u16 gUnknown_08DBE8B8[];
|
||||
extern const u16 gUnknown_08DBE8D8[];
|
||||
extern const u16 gUnknown_08DBE8F8[];
|
||||
extern const u16 gUnknown_08DBE918[];
|
||||
extern const u16 gUnknown_08DBE938[];
|
||||
extern const u16 gUnknown_08DBE958[];
|
||||
extern const u16 gUnknown_08DBE978[];
|
||||
extern const u8 gUnknown_08DBE998[];
|
||||
extern const u8 gUnknown_08DBFBA4[];
|
||||
extern const u8 gUnknown_08DBEB38[];
|
||||
extern const u8 gUnknown_08DBFC7C[];
|
||||
extern const u8 gUnknown_08DBEC74[];
|
||||
extern const u8 gUnknown_08DBFD5C[];
|
||||
extern const u8 gUnknown_08DBEE84[];
|
||||
extern const u8 gUnknown_08DBFE68[];
|
||||
extern const u8 gUnknown_08DBEF5C[];
|
||||
extern const u8 gUnknown_08DBFF44[];
|
||||
extern const u8 gUnknown_08DBF154[];
|
||||
extern const u8 gUnknown_08DC0034[];
|
||||
extern const u8 gUnknown_08DBF2D4[];
|
||||
extern const u8 gUnknown_08DC0114[];
|
||||
extern const u8 gUnknown_08DBF37C[];
|
||||
extern const u8 gUnknown_08DC01F4[];
|
||||
extern const u8 gUnknown_08DBF50C[];
|
||||
extern const u8 gUnknown_08DC0300[];
|
||||
extern const u8 gUnknown_08DBF64C[];
|
||||
extern const u8 gUnknown_08DC03F0[];
|
||||
extern const u8 gUnknown_08DBF7B4[];
|
||||
extern const u8 gUnknown_08DC04E8[];
|
||||
extern const u8 gUnknown_08DBF904[];
|
||||
extern const u8 gUnknown_08DC0600[];
|
||||
extern const u16 gMailPalette_Orange[];
|
||||
extern const u16 gMailPalette_Harbor[];
|
||||
extern const u16 gMailPalette_Glitter[];
|
||||
extern const u16 gMailPalette_Mech[];
|
||||
extern const u16 gMailPalette_Wood[];
|
||||
extern const u16 gMailPalette_Wave[];
|
||||
extern const u16 gMailPalette_Bead[];
|
||||
extern const u16 gMailPalette_Shadow[];
|
||||
extern const u16 gMailPalette_Tropic[];
|
||||
extern const u16 gMailPalette_Dream[];
|
||||
extern const u16 gMailPalette_Fab[];
|
||||
extern const u16 gMailPalette_Retro[];
|
||||
extern const u8 gMailTiles_Orange[];
|
||||
extern const u8 gMailTilemap_Orange[];
|
||||
extern const u8 gMailTiles_Harbor[];
|
||||
extern const u8 gMailTilemap_Harbor[];
|
||||
extern const u8 gMailTiles_Glitter[];
|
||||
extern const u8 gMailTilemap_Glitter[];
|
||||
extern const u8 gMailTiles_Mech[];
|
||||
extern const u8 gMailTilemap_Mech[];
|
||||
extern const u8 gMailTiles_Wood[];
|
||||
extern const u8 gMailTilemap_Wood[];
|
||||
extern const u8 gMailTiles_Wave[];
|
||||
extern const u8 gMailTilemap_Wave[];
|
||||
extern const u8 gMailTiles_Bead[];
|
||||
extern const u8 gMailTilemap_Bead[];
|
||||
extern const u8 gMailTiles_Shadow[];
|
||||
extern const u8 gMailTilemap_Shadow[];
|
||||
extern const u8 gMailTiles_Tropic[];
|
||||
extern const u8 gMailTilemap_Tropic[];
|
||||
extern const u8 gMailTiles_Dream[];
|
||||
extern const u8 gMailTilemap_Dream[];
|
||||
extern const u8 gMailTiles_Fab[];
|
||||
extern const u8 gMailTilemap_Fab[];
|
||||
extern const u8 gMailTiles_Retro[];
|
||||
extern const u8 gMailTilemap_Retro[];
|
||||
|
||||
// Static type declarations
|
||||
|
||||
@@ -170,29 +170,29 @@ static const u16 sUnknown_0859F2B0[][2] = {
|
||||
|
||||
static const struct MailGraphics sUnknown_0859F2B8[] = {
|
||||
{
|
||||
gUnknown_08DBE818, gUnknown_08DBE998, gUnknown_08DBFBA4, 0x02c0, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Orange, gMailTiles_Orange, gMailTilemap_Orange, 0x02c0, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE838, gUnknown_08DBEB38, gUnknown_08DBFC7C, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
gMailPalette_Harbor, gMailTiles_Harbor, gMailTilemap_Harbor, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE858, gUnknown_08DBEC74, gUnknown_08DBFD5C, 0x0400, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Glitter, gMailTiles_Glitter, gMailTilemap_Glitter, 0x0400, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE878, gUnknown_08DBEE84, gUnknown_08DBFE68, 0x01e0, 0x0000, 0x7fff, 0x4631
|
||||
gMailPalette_Mech, gMailTiles_Mech, gMailTilemap_Mech, 0x01e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE898, gUnknown_08DBEF5C, gUnknown_08DBFF44, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
gMailPalette_Wood, gMailTiles_Wood, gMailTilemap_Wood, 0x02e0, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE8B8, gUnknown_08DBF154, gUnknown_08DC0034, 0x0300, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Wave, gMailTiles_Wave, gMailTilemap_Wave, 0x0300, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE8D8, gUnknown_08DBF2D4, gUnknown_08DC0114, 0x0140, 0x0000, 0x7fff, 0x4631
|
||||
gMailPalette_Bead, gMailTiles_Bead, gMailTilemap_Bead, 0x0140, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE8F8, gUnknown_08DBF37C, gUnknown_08DC01F4, 0x0300, 0x0000, 0x7fff, 0x4631
|
||||
gMailPalette_Shadow, gMailTiles_Shadow, gMailTilemap_Shadow, 0x0300, 0x0000, 0x7fff, 0x4631
|
||||
}, {
|
||||
gUnknown_08DBE918, gUnknown_08DBF50C, gUnknown_08DC0300, 0x0220, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Tropic, gMailTiles_Tropic, gMailTilemap_Tropic, 0x0220, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE938, gUnknown_08DBF64C, gUnknown_08DC03F0, 0x0340, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Dream, gMailTiles_Dream, gMailTilemap_Dream, 0x0340, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE958, gUnknown_08DBF7B4, gUnknown_08DC04E8, 0x02a0, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Fab, gMailTiles_Fab, gMailTilemap_Fab, 0x02a0, 0x0000, 0x294a, 0x6739
|
||||
}, {
|
||||
gUnknown_08DBE978, gUnknown_08DBF904, gUnknown_08DC0600, 0x0520, 0x0000, 0x294a, 0x6739
|
||||
gMailPalette_Retro, gMailTiles_Retro, gMailTilemap_Retro, 0x0520, 0x0000, 0x294a, 0x6739
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -122,7 +122,7 @@ void AgbMain()
|
||||
ClearDma3Requests();
|
||||
ResetBgs();
|
||||
SetDefaultFontsPointer();
|
||||
InitHeap(gHeap, 0x1C000);
|
||||
InitHeap(gHeap, HEAP_SIZE);
|
||||
|
||||
gSoftResetDisabled = FALSE;
|
||||
|
||||
|
||||
+542
@@ -0,0 +1,542 @@
|
||||
#include "global.h"
|
||||
#include "gba/m4a_internal.h"
|
||||
#include "pokedex.h"
|
||||
#include "sprite.h"
|
||||
#include "graphics.h"
|
||||
#include "decompress.h"
|
||||
#include "bg.h"
|
||||
#include "window.h"
|
||||
|
||||
// this file's functions
|
||||
void sub_80BE604(struct Sprite *sprite);
|
||||
void sub_80BE658(struct Sprite *sprite);
|
||||
void sub_80BE758(struct Sprite *sprite);
|
||||
void sub_80BE780(struct Sprite *sprite);
|
||||
void sub_80BE44C(struct Sprite *sprite);
|
||||
void sub_80BE834(struct Sprite *sprite);
|
||||
|
||||
// const rom data
|
||||
#include "data/pokedex_orders.h"
|
||||
|
||||
static const struct OamData sOamData_855CFE4 =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_855CFEC =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 1,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_855CFF4 =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 1,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 2,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_855CFFC =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 2,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 2,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_855D004 =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 1,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_855D00C =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 2,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D014[] =
|
||||
{
|
||||
ANIMCMD_FRAME(3, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D01C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(1, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D024[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D02C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D034[] =
|
||||
{
|
||||
ANIMCMD_FRAME(40, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D03C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D044[] =
|
||||
{
|
||||
ANIMCMD_FRAME(56, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D04C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(64, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D054[] =
|
||||
{
|
||||
ANIMCMD_FRAME(96, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D05C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(160, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D064[] =
|
||||
{
|
||||
ANIMCMD_FRAME(168, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D06C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(128, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D074[] =
|
||||
{
|
||||
ANIMCMD_FRAME(130, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D07C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(132, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D084[] =
|
||||
{
|
||||
ANIMCMD_FRAME(134, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D08C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(136, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D094[] =
|
||||
{
|
||||
ANIMCMD_FRAME(138, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D09C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(140, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0A4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(142, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0AC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(144, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0B4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(146, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0BC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(176, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0C4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(178, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0CC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(180, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0D4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(182, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0DC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(184, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0E4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(186, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0EC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(188, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0F4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(190, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D0FC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(192, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D104[] =
|
||||
{
|
||||
ANIMCMD_FRAME(194, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_855D10C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 30),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D114[] =
|
||||
{
|
||||
sSpriteAnim_855D014
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D118[] =
|
||||
{
|
||||
sSpriteAnim_855D01C
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D11C[] =
|
||||
{
|
||||
sSpriteAnim_855D024
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D120[] =
|
||||
{
|
||||
sSpriteAnim_855D02C,
|
||||
sSpriteAnim_855D034,
|
||||
sSpriteAnim_855D03C,
|
||||
sSpriteAnim_855D044
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D130[] =
|
||||
{
|
||||
sSpriteAnim_855D04C,
|
||||
sSpriteAnim_855D054
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D138[] =
|
||||
{
|
||||
sSpriteAnim_855D05C,
|
||||
sSpriteAnim_855D064
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D140[] =
|
||||
{
|
||||
sSpriteAnim_855D06C,
|
||||
sSpriteAnim_855D074,
|
||||
sSpriteAnim_855D07C,
|
||||
sSpriteAnim_855D084,
|
||||
sSpriteAnim_855D08C,
|
||||
sSpriteAnim_855D094,
|
||||
sSpriteAnim_855D09C,
|
||||
sSpriteAnim_855D0A4,
|
||||
sSpriteAnim_855D0AC,
|
||||
sSpriteAnim_855D0B4
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D168[] =
|
||||
{
|
||||
sSpriteAnim_855D0BC,
|
||||
sSpriteAnim_855D0C4,
|
||||
sSpriteAnim_855D0CC,
|
||||
sSpriteAnim_855D0D4,
|
||||
sSpriteAnim_855D0DC,
|
||||
sSpriteAnim_855D0E4,
|
||||
sSpriteAnim_855D0EC,
|
||||
sSpriteAnim_855D0F4,
|
||||
sSpriteAnim_855D0FC,
|
||||
sSpriteAnim_855D104
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_855D190[] =
|
||||
{
|
||||
sSpriteAnim_855D10C
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D194 =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855CFE4,
|
||||
.anims = sSpriteAnimTable_855D114,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE604,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D1AC =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855CFEC,
|
||||
.anims = sSpriteAnimTable_855D118,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE658,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D1C4 =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855CFF4,
|
||||
.anims = sSpriteAnimTable_855D120,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE758,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D1DC =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855CFFC,
|
||||
.anims = sSpriteAnimTable_855D11C,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE780,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D1F4 =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855D004,
|
||||
.anims = sSpriteAnimTable_855D130,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE44C,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D20C =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855CFF4,
|
||||
.anims = sSpriteAnimTable_855D138,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE44C,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D224 =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855D00C,
|
||||
.anims = sSpriteAnimTable_855D140,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE44C,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D23C =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855D00C,
|
||||
.anims = sSpriteAnimTable_855D168,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE44C,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0855D254 =
|
||||
{
|
||||
.tileTag = 4096,
|
||||
.paletteTag = 4096,
|
||||
.oam = &sOamData_855D00C,
|
||||
.anims = sSpriteAnimTable_855D190,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80BE834,
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gSpriteSheets_0855D26C[] =
|
||||
{
|
||||
{gPokedexMenu2_Gfx, 0x2000, 4096},
|
||||
{0}
|
||||
};
|
||||
|
||||
const struct CompressedSpritePalette gSpritePalettes_0855D26C[] =
|
||||
{
|
||||
{gPokedexText_Pal, 4096},
|
||||
{0}
|
||||
};
|
||||
|
||||
const u8 gUnknown_0855D28C[] = {0x4, 0x8, 0x10, 0x20, 0x20};
|
||||
const u8 gUnknown_0855D291[] = {0x8, 0x4, 0x2, 0x1, 0x1};
|
||||
|
||||
const struct BgTemplate gBgTemplates_0855D298[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 12,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 0,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 1,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 13,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 1,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 2,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 14,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 2,
|
||||
.baseTile = 0
|
||||
},
|
||||
{
|
||||
.bg = 3,
|
||||
.charBaseIndex = 0,
|
||||
.mapBaseIndex = 15,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 3,
|
||||
.baseTile = 0
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate sWindowTemplates_0855D2A8[] =
|
||||
{
|
||||
{2, 0, 0, 0x20, 0x20, 0, 1},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
+1014
File diff suppressed because it is too large
Load Diff
@@ -5,9 +5,76 @@
|
||||
#include "event_data.h"
|
||||
#include "string_util.h"
|
||||
#include "text.h"
|
||||
#include "strings.h"
|
||||
#include "window.h"
|
||||
|
||||
IWRAM_DATA u8 gUnknown_03000F78[0x188];
|
||||
|
||||
struct OptionAndDescription
|
||||
{
|
||||
const u8 *optionTxt;
|
||||
const u8 *descriptionTxt;
|
||||
};
|
||||
|
||||
// const rom data
|
||||
const struct OptionAndDescription gUnknown_085716C0[] =
|
||||
{
|
||||
{gText_WithdrawPokemon, gText_WithdrawMonDescription},
|
||||
{gText_DepositPokemon, gText_DepositMonDescription},
|
||||
{gText_MovePokemon, gText_MoveMonDescription},
|
||||
{gText_MoveItems, gText_MoveItemsDescription},
|
||||
{gText_SeeYa, gText_SeeYaDescription}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_085716E8 = {0, 1, 1, 0x11, 0xA, 0xF, 1};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_85716F0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_85716F8[] =
|
||||
{
|
||||
ANIMCMD_FRAME(4, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8571700[] =
|
||||
{
|
||||
ANIMCMD_FRAME(6, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_8571708[] =
|
||||
{
|
||||
ANIMCMD_FRAME(10, 5),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const sSpriteAnimTable_8571710[] =
|
||||
{
|
||||
sSpriteAnim_85716F0,
|
||||
sSpriteAnim_85716F8,
|
||||
sSpriteAnim_8571700,
|
||||
sSpriteAnim_8571708
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_8571720[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_8571730[] =
|
||||
{
|
||||
sSpriteAffineAnim_8571720
|
||||
};
|
||||
|
||||
const struct TextColor gUnknown_08571734[] = {4, 0xF, 0xE};
|
||||
const u8 gUnknown_08571737[] = _("/30");
|
||||
|
||||
// code
|
||||
u8 CountMonsInBox(u8 boxId)
|
||||
{
|
||||
u16 i, count;
|
||||
|
||||
@@ -50,7 +50,7 @@ extern struct UnkStruct_61CC04 gUnknown_0861CC04;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CC10;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CBF8;
|
||||
extern u16 gUnknown_08DC3CD4[];
|
||||
extern u16 gSummaryScreenWindow_Tilemap[];
|
||||
extern struct ContestMove gContestMoves[];
|
||||
extern struct ContestEffect gContestEffects[];
|
||||
extern struct WindowTemplate gUnknown_0861CC24;
|
||||
@@ -93,7 +93,7 @@ extern struct CompressedSpriteSheet gUnknown_0861D074;
|
||||
extern struct CompressedSpriteSheet gUnknown_0861D0F8;
|
||||
extern struct CompressedSpritePalette gUnknown_0861D100;
|
||||
extern struct CompressedSpritePalette gUnknown_0861D07C;
|
||||
extern u8 gUnknown_08D97B84;
|
||||
extern u8 gMoveTypes_Pal;
|
||||
extern u8 gUnknown_08D97D0C;
|
||||
extern void reset_temp_tile_data_buffers();
|
||||
extern void decompress_and_copy_tile_data_to_vram(u8 a, void* tiledata, u8 b, u8 c, u8 d);
|
||||
@@ -648,7 +648,7 @@ u8 sub_81BFEB0()
|
||||
gUnknown_0203CF1C->unk40F0++;
|
||||
break;
|
||||
case 12:
|
||||
LoadCompressedPalette(&gUnknown_08D97B84, 0x1D0, 0x60);
|
||||
LoadCompressedPalette(&gMoveTypes_Pal, 0x1D0, 0x60);
|
||||
gUnknown_0203CF1C->unk40F0 = 0;
|
||||
return 1;
|
||||
}
|
||||
@@ -2343,18 +2343,18 @@ void sub_81C2194(u16 *a, u16 b, u8 c)
|
||||
{
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
a[(i + var) << 1] = gUnknown_08DC3CD4[i] + b;
|
||||
a[((i + var) << 1) + 0x40] = gUnknown_08DC3CD4[i] + b;
|
||||
a[((i + var) << 1) + 0x80] = gUnknown_08DC3CD4[i + 20] + b;
|
||||
a[(i + var) << 1] = gSummaryScreenWindow_Tilemap[i] + b;
|
||||
a[((i + var) << 1) + 0x40] = gSummaryScreenWindow_Tilemap[i] + b;
|
||||
a[((i + var) << 1) + 0x80] = gSummaryScreenWindow_Tilemap[i + 20] + b;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
a[(i + var)] = gUnknown_08DC3CD4[i + 20] + b;
|
||||
a[((i + var)) + 0x40] = gUnknown_08DC3CD4[i + 40] + b;
|
||||
a[((i + var)) + 0x80] = gUnknown_08DC3CD4[i + 40] + b;
|
||||
a[(i + var)] = gSummaryScreenWindow_Tilemap[i + 20] + b;
|
||||
a[((i + var)) + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + b;
|
||||
a[((i + var)) + 0x80] = gSummaryScreenWindow_Tilemap[i + 40] + b;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2372,7 +2372,7 @@ void sub_81C2194(u16 *a, u16 b, u8 c)
|
||||
cmp r2, 0\n\
|
||||
bne _081C21E4\n\
|
||||
movs r3, 0\n\
|
||||
ldr r5, =gUnknown_08DC3CD4\n\
|
||||
ldr r5, =gSummaryScreenWindow_Tilemap\n\
|
||||
_081C21A8:\n\
|
||||
adds r2, r7, r3\n\
|
||||
lsls r2, 1\n\
|
||||
@@ -2402,7 +2402,7 @@ _081C21A8:\n\
|
||||
.pool\n\
|
||||
_081C21E4:\n\
|
||||
movs r3, 0\n\
|
||||
ldr r5, =gUnknown_08DC3CD4\n\
|
||||
ldr r5, =gSummaryScreenWindow_Tilemap\n\
|
||||
_081C21E8:\n\
|
||||
adds r1, r7, r3\n\
|
||||
lsls r1, 1\n\
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,10 +23,8 @@ void sub_81700F8(void)
|
||||
ResetSaveCounters();
|
||||
sub_81534D0(0);
|
||||
if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
|
||||
{
|
||||
Sav2_ClearSetDefault();
|
||||
}
|
||||
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
|
||||
InitHeap(gHeap, 0x1c000);
|
||||
InitHeap(gHeap, HEAP_SIZE);
|
||||
SetMainCallback2(sub_8086230);
|
||||
}
|
||||
|
||||
+82
-20
@@ -6,6 +6,8 @@
|
||||
#include "window.h"
|
||||
#include "string_util.h"
|
||||
#include "text.h"
|
||||
#include "strings.h"
|
||||
#include "bg.h"
|
||||
|
||||
// Menu actions
|
||||
enum
|
||||
@@ -25,15 +27,6 @@ enum
|
||||
MENU_ACTION_PYRAMID_BAG
|
||||
};
|
||||
|
||||
static void BuildStartMenuActions_LinkMode(void);
|
||||
static void BuildStartMenuActions_UnionRoom(void);
|
||||
static void BuildStartMenuActions_SafariZone(void);
|
||||
static void BuildStartMenuActions_BattlePike(void);
|
||||
static void BuildStartMenuActions_BattlePyramid(void);
|
||||
static void BuildStartMenuActions_MultiBattleRoom(void);
|
||||
static void BuildStartMenuActions_Normal(void);
|
||||
u8 StartMenu_PlayerName(void);
|
||||
|
||||
extern bool32 is_c1_link_related_active(void);
|
||||
extern bool32 InUnionRoom(void);
|
||||
extern bool8 InBattlePike(void);
|
||||
@@ -42,12 +35,91 @@ extern bool8 InMultiBattleRoom(void);
|
||||
extern void sub_81973FC(u8 windowId, u8 a1);
|
||||
extern void sub_8198070(u8 windowId, u8 a1);
|
||||
|
||||
// this file's functions
|
||||
static void BuildStartMenuActions_LinkMode(void);
|
||||
static void BuildStartMenuActions_UnionRoom(void);
|
||||
static void BuildStartMenuActions_SafariZone(void);
|
||||
static void BuildStartMenuActions_BattlePike(void);
|
||||
static void BuildStartMenuActions_BattlePyramid(void);
|
||||
static void BuildStartMenuActions_MultiBattleRoom(void);
|
||||
static void BuildStartMenuActions_Normal(void);
|
||||
bool8 StartMenu_Pokedex(void);
|
||||
bool8 StartMenu_Pokemon(void);
|
||||
bool8 StartMenu_Bag(void);
|
||||
bool8 StartMenu_PokeNav(void);
|
||||
bool8 StartMenu_PlayerName(void);
|
||||
bool8 StartMenu_Save(void);
|
||||
bool8 StartMenu_Option(void);
|
||||
bool8 StartMenu_Exit(void);
|
||||
bool8 StartMenu_SafariZoneRetire(void);
|
||||
bool8 StartMenu_LinkModePlayerName(void);
|
||||
bool8 StartMenu_BattlePyramidRetire(void);
|
||||
bool8 StartMenu_BattlePyramidBag(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA u8 sSafariBallsWindowId = 0;
|
||||
EWRAM_DATA u8 sBattlePyramidFloorWindowId = 0;
|
||||
EWRAM_DATA u8 sStartMenuCursorPos = 0;
|
||||
EWRAM_DATA u8 sNumStartMenuActions = 0;
|
||||
EWRAM_DATA u8 sCurrentStartMenuActions[9] = {0};
|
||||
|
||||
// const rom data
|
||||
static const struct WindowTemplate gSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
|
||||
|
||||
static const u8* const sPyramindFloorNames[] =
|
||||
{
|
||||
gText_Floor1,
|
||||
gText_Floor2,
|
||||
gText_Floor3,
|
||||
gText_Floor4,
|
||||
gText_Floor5,
|
||||
gText_Floor6,
|
||||
gText_Floor7,
|
||||
gText_Peak
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8};
|
||||
static const struct WindowTemplate gPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8};
|
||||
|
||||
const struct MenuAction sStartMenuItems[] =
|
||||
{
|
||||
{gText_MenuPokedex, {.u8_void = StartMenu_Pokedex}},
|
||||
{gText_MenuPokemon, {.u8_void = StartMenu_Pokemon}},
|
||||
{gText_MenuBag, {.u8_void = StartMenu_Bag}},
|
||||
{gText_MenuPokenav, {.u8_void = StartMenu_PokeNav}},
|
||||
{gText_MenuPlayer, {.u8_void = StartMenu_PlayerName}},
|
||||
{gText_MenuSave, {.u8_void = StartMenu_Save}},
|
||||
{gText_MenuOption, {.u8_void = StartMenu_Option}},
|
||||
{gText_MenuExit, {.u8_void = StartMenu_Exit}},
|
||||
{gText_MenuRetire, {.u8_void = StartMenu_SafariZoneRetire}},
|
||||
{gText_MenuPlayer, {.u8_void = StartMenu_LinkModePlayerName}},
|
||||
{gText_MenuRest, {.u8_void = StartMenu_Save}},
|
||||
{gText_MenuRetire, {.u8_void = StartMenu_BattlePyramidRetire}},
|
||||
{gText_MenuBag, {.u8_void = StartMenu_BattlePyramidBag}}
|
||||
};
|
||||
|
||||
const struct BgTemplate gUnknown_085105A8[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 2,
|
||||
.mapBaseIndex = 31,
|
||||
.screenSize = 0,
|
||||
.paletteMode = 0,
|
||||
.priority = 0,
|
||||
.baseTile = 0
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_085105AC[] =
|
||||
{
|
||||
{0, 2, 0xF, 0x1A, 4, 0xF, 0x194},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_085105BC = {0, 1, 1, 0xE, 0xA, 0xF, 8};
|
||||
|
||||
// code
|
||||
void BuildStartMenuActions(void)
|
||||
{
|
||||
sNumStartMenuActions = 0;
|
||||
@@ -148,11 +220,6 @@ static void BuildStartMenuActions_MultiBattleRoom(void)
|
||||
AddStartMenuAction(MENU_ACTION_EXIT);
|
||||
}
|
||||
|
||||
extern const struct WindowTemplate gSafariBallsWindowTemplate;
|
||||
extern const struct WindowTemplate gPyramidFloorWindowTemplate_1;
|
||||
extern const struct WindowTemplate gPyramidFloorWindowTemplate_2;
|
||||
extern const u8 gText_SafariBallStock[];
|
||||
|
||||
void DisplaySafariBallsWindow(void)
|
||||
{
|
||||
sSafariBallsWindowId = AddWindow(&gSafariBallsWindowTemplate);
|
||||
@@ -164,9 +231,6 @@ void DisplaySafariBallsWindow(void)
|
||||
CopyWindowToVram(sSafariBallsWindowId, 2);
|
||||
}
|
||||
|
||||
extern const u8* const gUnknown_08510510[];
|
||||
extern const u8 gText_BattlePyramidFloor[];
|
||||
|
||||
void DisplayPyramidFloorWindow(void)
|
||||
{
|
||||
// TODO: fix location
|
||||
@@ -176,7 +240,7 @@ void DisplayPyramidFloorWindow(void)
|
||||
sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2);
|
||||
PutWindowTilemap(sBattlePyramidFloorWindowId);
|
||||
sub_81973FC(sBattlePyramidFloorWindowId, 0);
|
||||
StringCopy(gStringVar1, gUnknown_08510510[gSaveBlock2Ptr->field_CAA[4]]);
|
||||
StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->field_CAA[4]]);
|
||||
StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor);
|
||||
PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
|
||||
CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
|
||||
@@ -197,8 +261,6 @@ void RemoveExtraStartMenuWindows(void)
|
||||
}
|
||||
}
|
||||
|
||||
extern const struct MenuAction sStartMenuItems[];
|
||||
|
||||
/*
|
||||
// Prints n menu items starting at *index
|
||||
static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n)
|
||||
|
||||
+18
-18
@@ -7,29 +7,29 @@ const struct {
|
||||
const u16 *pltt;
|
||||
} gUnknown_08617128[] = {
|
||||
{
|
||||
gUnknown_08DD87C0,
|
||||
gUnknown_08DD8EE0,
|
||||
gUnknown_08DD8780
|
||||
gBerryFixGameboy_Gfx,
|
||||
gBerryFixGameboy_Tilemap,
|
||||
gBerryFixGameboy_Pal
|
||||
}, {
|
||||
gUnknown_08DD90E0,
|
||||
gUnknown_08DD9718,
|
||||
gUnknown_08DD9080
|
||||
gBerryFixGameboyLogo_Gfx,
|
||||
gBerryFixGameboyLogo_Tilemap,
|
||||
gBerryFixGameboyLogo_Pal
|
||||
}, {
|
||||
gUnknown_08DD98B4,
|
||||
gUnknown_08DD9E58,
|
||||
gUnknown_08DD9874
|
||||
gBerryFixGbaTransfer_Gfx,
|
||||
gBerryFixGbaTransfer_Tilemap,
|
||||
gBerryFixGbaTransfer_Pal
|
||||
}, {
|
||||
gUnknown_08DDA02C,
|
||||
gUnknown_08DDA63C,
|
||||
gUnknown_08DD9FEC
|
||||
gBerryFixGbaTransferHighlight_Gfx,
|
||||
gBerryFixGbaTransferHighlight_Tilemap,
|
||||
gBerryFixGbaTransferHighlight_Pal
|
||||
}, {
|
||||
gUnknown_08DDA840,
|
||||
gUnknown_08DDAE40,
|
||||
gUnknown_08DDA800
|
||||
gBerryFixGbaTransferError_Gfx,
|
||||
gBerryFixGbaTransferError_Tilemap,
|
||||
gBerryFixGbaTransferError_Pal
|
||||
}, {
|
||||
gUnknown_08DDB020,
|
||||
gUnknown_08DDB2C4,
|
||||
gUnknown_08DDAFE0
|
||||
gBerryFixWindow_Gfx,
|
||||
gBerryFixWindow_Tilemap,
|
||||
gBerryFixWindow_Pal
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+5
-5
@@ -92,8 +92,8 @@ static const struct CompressedSpriteSheet gUnknown_085B2208 = {
|
||||
};
|
||||
static const u32 filler_85B2210[2] = {};
|
||||
static const struct SpritePalette gUnknown_085B2218[] = {
|
||||
{ gUnknown_08DCC01C, TAG_PAL_WALL_CLOCK_HAND },
|
||||
{ gUnknown_08DCC03C, 0x1001 },
|
||||
{ gWallclockMale_Pal, TAG_PAL_WALL_CLOCK_HAND },
|
||||
{ gWallclockFemale_Pal, 0x1001 },
|
||||
{}
|
||||
};
|
||||
static const struct OamData Unknown_085B2230 = {
|
||||
@@ -561,14 +561,14 @@ static void LoadWallClockGraphics(void)
|
||||
DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
|
||||
DmaClear32(3, (void *)OAM, OAM_SIZE);
|
||||
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
|
||||
LZ77UnCompVram(gUnknown_08DCC05C, (void *)VRAM);
|
||||
LZ77UnCompVram(gWallclock_Gfx, (void *)VRAM);
|
||||
if (gSpecialVar_0x8004 == 0)
|
||||
{
|
||||
LoadPalette(gUnknown_08DCC01C, 0x00, 0x20);
|
||||
LoadPalette(gWallclockMale_Pal, 0x00, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadPalette(gUnknown_08DCC03C, 0x00, 0x20);
|
||||
LoadPalette(gWallclockFemale_Pal, 0x00, 0x20);
|
||||
}
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 0x20);
|
||||
LoadPalette(sUnknown_085B21D4, 0xc0, 0x08);
|
||||
|
||||
+59
-681
@@ -465,696 +465,74 @@ void FillWindowPixelBuffer(u8 windowId, u8 fillValue)
|
||||
CpuFastFill8(fillValue, gWindows[windowId].tileData, 0x20 * fillSize);
|
||||
}
|
||||
|
||||
// functionally equivalent, its fucking hard to match
|
||||
#ifdef NONMATCHING
|
||||
#define MOVE_TILES_DOWN(a) \
|
||||
{ \
|
||||
destOffset = i + (a); \
|
||||
srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
|
||||
if (srcOffset < size) \
|
||||
*(u32*)(tileData + destOffset) = *(u32*)(tileData + srcOffset); \
|
||||
else \
|
||||
*(u32*)(tileData + destOffset) = fillValue32; \
|
||||
distanceLoop++; \
|
||||
}
|
||||
|
||||
#define MOVE_TILES_UP(a) \
|
||||
{ \
|
||||
destOffset = i + (a); \
|
||||
srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
|
||||
if (srcOffset < size) \
|
||||
*(u32*)(tileData - destOffset) = *(u32*)(tileData - srcOffset); \
|
||||
else \
|
||||
*(u32*)(tileData - destOffset) = fillValue32; \
|
||||
distanceLoop++; \
|
||||
}
|
||||
|
||||
void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue)
|
||||
{
|
||||
s32 i, id1, id2, size;
|
||||
u32 distanceLoop, toFill, width;
|
||||
u8 *tileData;
|
||||
struct WindowTemplate window;
|
||||
struct WindowTemplate window = gWindows[windowId].window;
|
||||
u8 *tileData = gWindows[windowId].tileData;
|
||||
u32 fillValue32 = (fillValue << 24) | (fillValue << 16) | (fillValue << 8) | fillValue;
|
||||
s32 size = window.height * window.width * 32;
|
||||
u32 width = window.width;
|
||||
s32 i;
|
||||
s32 srcOffset, destOffset;
|
||||
u32 distanceLoop;
|
||||
|
||||
tileData = gWindows[windowId].tileData;
|
||||
toFill = (fillValue << 0x18) | (fillValue << 0x10) | (fillValue << 8) | fillValue;
|
||||
window = gWindows[windowId].window;
|
||||
size = 0x20 * (window.height * window.width);
|
||||
width = window.width;
|
||||
if (direction != 1)
|
||||
switch (direction)
|
||||
{
|
||||
s32 signedDirection = direction;
|
||||
if (signedDirection <= 1)
|
||||
{
|
||||
if (signedDirection == 0)
|
||||
{
|
||||
for (i = 0; i < size; i += 0x20)
|
||||
{
|
||||
distanceLoop = distance;
|
||||
id1 = i + 0;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 4;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 8;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 12;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 16;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 20;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 24;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 28;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData + id1) = *(u32*)(tileData + id2);
|
||||
else
|
||||
*(u32*)(tileData + id1) = toFill;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tileData += size - 4;
|
||||
for (i = 0; i < size; i += 0x20)
|
||||
case 0:
|
||||
for (i = 0; i < size; i += 32)
|
||||
{
|
||||
distanceLoop = distance;
|
||||
id1 = i + 0;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 4;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 8;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 12;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 16;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 20;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 24;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
|
||||
distanceLoop++;
|
||||
id1 = i + 28;
|
||||
id2 = i + (((width * ((distanceLoop) & ~(7))) | ((distanceLoop) & 7)) * 4);
|
||||
if (id2 < size)
|
||||
*(u32*)(tileData - id1) = *(u32*)(tileData - id2);
|
||||
else
|
||||
*(u32*)(tileData - id1) = toFill;
|
||||
MOVE_TILES_DOWN(0)
|
||||
MOVE_TILES_DOWN(4)
|
||||
MOVE_TILES_DOWN(8)
|
||||
MOVE_TILES_DOWN(12)
|
||||
MOVE_TILES_DOWN(16)
|
||||
MOVE_TILES_DOWN(20)
|
||||
MOVE_TILES_DOWN(24)
|
||||
MOVE_TILES_DOWN(28)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
tileData += size - 4;
|
||||
for (i = 0; i < size; i += 32)
|
||||
{
|
||||
distanceLoop = distance;
|
||||
MOVE_TILES_UP(0)
|
||||
MOVE_TILES_UP(4)
|
||||
MOVE_TILES_UP(8)
|
||||
MOVE_TILES_UP(12)
|
||||
MOVE_TILES_UP(16)
|
||||
MOVE_TILES_UP(20)
|
||||
MOVE_TILES_UP(24)
|
||||
MOVE_TILES_UP(28)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x8\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
mov r8, r1\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r2, 24\n\
|
||||
str r2, [sp]\n\
|
||||
lsls r3, 24\n\
|
||||
lsrs r3, 24\n\
|
||||
ldr r2, =gWindows\n\
|
||||
lsls r1, r0, 1\n\
|
||||
adds r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r4, r1, r2\n\
|
||||
adds r2, 0x8\n\
|
||||
adds r1, r2\n\
|
||||
ldr r5, [r1]\n\
|
||||
lsls r7, r3, 24\n\
|
||||
lsls r0, r3, 16\n\
|
||||
orrs r7, r0\n\
|
||||
lsls r0, r3, 8\n\
|
||||
orrs r7, r0\n\
|
||||
orrs r7, r3\n\
|
||||
ldr r1, [r4]\n\
|
||||
ldr r2, [r4, 0x4]\n\
|
||||
ldrb r3, [r4, 0x4]\n\
|
||||
lsrs r0, r1, 24\n\
|
||||
muls r0, r3\n\
|
||||
lsls r6, r0, 5\n\
|
||||
lsrs r1, 24\n\
|
||||
mov r12, r1\n\
|
||||
mov r0, r8\n\
|
||||
cmp r0, 0x1\n\
|
||||
bne _08003CE8\n\
|
||||
b _08003E9E\n\
|
||||
_08003CE8:\n\
|
||||
cmp r0, 0x1\n\
|
||||
ble _08003CEE\n\
|
||||
b _08004046\n\
|
||||
_08003CEE:\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08003CF4\n\
|
||||
b _08004046\n\
|
||||
_08003CF4:\n\
|
||||
movs r4, 0\n\
|
||||
cmp r4, r6\n\
|
||||
blt _08003CFC\n\
|
||||
b _08004046\n\
|
||||
_08003CFC:\n\
|
||||
movs r1, 0x8\n\
|
||||
negs r1, r1\n\
|
||||
mov r9, r1\n\
|
||||
movs r2, 0x7\n\
|
||||
mov r8, r2\n\
|
||||
mov r10, r5\n\
|
||||
_08003D08:\n\
|
||||
ldr r3, [sp]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r2, r8\n\
|
||||
ands r0, r2\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003D34\n\
|
||||
adds r0, r5, r1\n\
|
||||
ldr r0, [r0]\n\
|
||||
mov r1, r10\n\
|
||||
str r0, [r1]\n\
|
||||
b _08003D38\n\
|
||||
.pool\n\
|
||||
_08003D34:\n\
|
||||
mov r2, r10\n\
|
||||
str r7, [r2]\n\
|
||||
_08003D38:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0x4\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003D64\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003D68\n\
|
||||
_08003D64:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003D68:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x8\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003D96\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003D9A\n\
|
||||
_08003D96:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003D9A:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0xC\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003DC8\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003DCC\n\
|
||||
_08003DC8:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003DCC:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x10\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003DFA\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003DFE\n\
|
||||
_08003DFA:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003DFE:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x14\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003E2C\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003E30\n\
|
||||
_08003E2C:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003E30:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x18\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003E5E\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003E62\n\
|
||||
_08003E5E:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003E62:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x1C\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
adds r0, r1, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r3, r1\n\
|
||||
orrs r0, r3\n\
|
||||
lsls r0, 2\n\
|
||||
adds r1, r4, r0\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003E8C\n\
|
||||
adds r0, r5, r2\n\
|
||||
adds r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003E90\n\
|
||||
_08003E8C:\n\
|
||||
adds r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003E90:\n\
|
||||
movs r2, 0x20\n\
|
||||
add r10, r2\n\
|
||||
adds r4, 0x20\n\
|
||||
cmp r4, r6\n\
|
||||
bge _08003E9C\n\
|
||||
b _08003D08\n\
|
||||
_08003E9C:\n\
|
||||
b _08004046\n\
|
||||
_08003E9E:\n\
|
||||
subs r0, r6, 0x4\n\
|
||||
adds r5, r0\n\
|
||||
movs r4, 0\n\
|
||||
cmp r4, r6\n\
|
||||
blt _08003EAA\n\
|
||||
b _08004046\n\
|
||||
_08003EAA:\n\
|
||||
movs r0, 0x8\n\
|
||||
negs r0, r0\n\
|
||||
mov r9, r0\n\
|
||||
movs r1, 0x7\n\
|
||||
mov r8, r1\n\
|
||||
mov r10, r5\n\
|
||||
_08003EB6:\n\
|
||||
ldr r3, [sp]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r2, r9\n\
|
||||
ands r0, r2\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r2, r8\n\
|
||||
ands r0, r2\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003EDC\n\
|
||||
subs r0, r5, r1\n\
|
||||
ldr r0, [r0]\n\
|
||||
mov r1, r10\n\
|
||||
str r0, [r1]\n\
|
||||
b _08003EE0\n\
|
||||
_08003EDC:\n\
|
||||
mov r2, r10\n\
|
||||
str r7, [r2]\n\
|
||||
_08003EE0:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0x4\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003F0C\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003F10\n\
|
||||
_08003F0C:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003F10:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x8\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003F3E\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003F42\n\
|
||||
_08003F3E:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003F42:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0xC\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003F70\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003F74\n\
|
||||
_08003F70:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003F74:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x10\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003FA2\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003FA6\n\
|
||||
_08003FA2:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003FA6:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x14\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08003FD4\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08003FD8\n\
|
||||
_08003FD4:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08003FD8:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x18\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r4, r1\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08004006\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _0800400A\n\
|
||||
_08004006:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_0800400A:\n\
|
||||
adds r3, 0x1\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x1C\n\
|
||||
adds r0, r3, 0\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r12\n\
|
||||
muls r1, r0\n\
|
||||
adds r0, r1, 0\n\
|
||||
mov r1, r8\n\
|
||||
ands r3, r1\n\
|
||||
orrs r0, r3\n\
|
||||
lsls r0, 2\n\
|
||||
adds r1, r4, r0\n\
|
||||
cmp r1, r6\n\
|
||||
bge _08004034\n\
|
||||
subs r0, r5, r2\n\
|
||||
subs r1, r5, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
str r1, [r0]\n\
|
||||
b _08004038\n\
|
||||
_08004034:\n\
|
||||
subs r0, r5, r2\n\
|
||||
str r7, [r0]\n\
|
||||
_08004038:\n\
|
||||
movs r2, 0x20\n\
|
||||
negs r2, r2\n\
|
||||
add r10, r2\n\
|
||||
adds r4, 0x20\n\
|
||||
cmp r4, r6\n\
|
||||
bge _08004046\n\
|
||||
b _08003EB6\n\
|
||||
_08004046:\n\
|
||||
add sp, 0x8\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.syntax divided");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user